drm/i915/fbdev: Add intel_fbdev_get_map()
The vaddr of the fbdev framebuffer is private to the struct intel_fbdev, so this function is needed to access it for drm_panic. Also the struct i915_vma is different between i915 and xe, so it requires a few functions to access fbdev->vma->iomap. Signed-off-by: Jocelyn Falempe <jfalempe@redhat.com> Link: https://lore.kernel.org/r/20250624091501.257661-3-jfalempe@redhat.com Signed-off-by: Maarten Lankhorst <dev@lankhorst.se>
This commit is contained in:
committed by
Maarten Lankhorst
parent
3dd922c418
commit
d2782a0d8f
@@ -334,3 +334,8 @@ void intel_plane_unpin_fb(struct intel_plane_state *old_plane_state)
|
||||
intel_dpt_unpin_from_ggtt(fb->dpt_vm);
|
||||
}
|
||||
}
|
||||
|
||||
void intel_fb_get_map(struct i915_vma *vma, struct iosys_map *map)
|
||||
{
|
||||
iosys_map_set_vaddr_iomem(map, i915_vma_get_iomap(vma));
|
||||
}
|
||||
|
||||
@@ -12,6 +12,7 @@ struct drm_framebuffer;
|
||||
struct i915_vma;
|
||||
struct intel_plane_state;
|
||||
struct i915_gtt_view;
|
||||
struct iosys_map;
|
||||
|
||||
struct i915_vma *
|
||||
intel_fb_pin_to_ggtt(const struct drm_framebuffer *fb,
|
||||
@@ -27,5 +28,6 @@ void intel_fb_unpin_vma(struct i915_vma *vma, unsigned long flags);
|
||||
int intel_plane_pin_fb(struct intel_plane_state *new_plane_state,
|
||||
const struct intel_plane_state *old_plane_state);
|
||||
void intel_plane_unpin_fb(struct intel_plane_state *old_plane_state);
|
||||
void intel_fb_get_map(struct i915_vma *vma, struct iosys_map *map);
|
||||
|
||||
#endif
|
||||
|
||||
@@ -512,3 +512,8 @@ struct i915_vma *intel_fbdev_vma_pointer(struct intel_fbdev *fbdev)
|
||||
{
|
||||
return fbdev ? fbdev->vma : NULL;
|
||||
}
|
||||
|
||||
void intel_fbdev_get_map(struct intel_fbdev *fbdev, struct iosys_map *map)
|
||||
{
|
||||
intel_fb_get_map(fbdev->vma, map);
|
||||
}
|
||||
|
||||
@@ -13,6 +13,7 @@ struct drm_fb_helper_surface_size;
|
||||
struct intel_display;
|
||||
struct intel_fbdev;
|
||||
struct intel_framebuffer;
|
||||
struct iosys_map;
|
||||
|
||||
#ifdef CONFIG_DRM_FBDEV_EMULATION
|
||||
int intel_fbdev_driver_fbdev_probe(struct drm_fb_helper *helper,
|
||||
@@ -22,7 +23,7 @@ int intel_fbdev_driver_fbdev_probe(struct drm_fb_helper *helper,
|
||||
void intel_fbdev_setup(struct intel_display *display);
|
||||
struct intel_framebuffer *intel_fbdev_framebuffer(struct intel_fbdev *fbdev);
|
||||
struct i915_vma *intel_fbdev_vma_pointer(struct intel_fbdev *fbdev);
|
||||
|
||||
void intel_fbdev_get_map(struct intel_fbdev *fbdev, struct iosys_map *map);
|
||||
#else
|
||||
#define INTEL_FBDEV_DRIVER_OPS \
|
||||
.fbdev_probe = NULL
|
||||
@@ -39,6 +40,9 @@ static inline struct i915_vma *intel_fbdev_vma_pointer(struct intel_fbdev *fbdev
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static inline void intel_fbdev_get_map(struct intel_fbdev *fbdev, struct iosys_map *map)
|
||||
{
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* __INTEL_FBDEV_H__ */
|
||||
|
||||
@@ -353,6 +353,11 @@ static inline bool i915_node_color_differs(const struct drm_mm_node *node,
|
||||
return drm_mm_node_allocated(node) && node->color != color;
|
||||
}
|
||||
|
||||
static inline void __iomem *i915_vma_get_iomap(struct i915_vma *vma)
|
||||
{
|
||||
return READ_ONCE(vma->iomap);
|
||||
}
|
||||
|
||||
/**
|
||||
* i915_vma_pin_iomap - calls ioremap_wc to map the GGTT VMA via the aperture
|
||||
* @vma: VMA to iomap
|
||||
|
||||
@@ -457,3 +457,8 @@ u64 intel_dpt_offset(struct i915_vma *dpt_vma)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
void intel_fb_get_map(struct i915_vma *vma, struct iosys_map *map)
|
||||
{
|
||||
*map = vma->bo->vmap;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user