Since the stolen memory hooks are function pointers, make some of them optional instead of having to define them for xe.
insert_node, area_address, and area_size are only needed on platforms not supported by xe. Signed-off-by: Jani Nikula <[email protected]> --- drivers/gpu/drm/i915/display/intel_parent.c | 10 ++++++++ drivers/gpu/drm/xe/display/xe_stolen.c | 27 -------------------- include/drm/intel/display_parent_interface.h | 6 ++--- 3 files changed, 13 insertions(+), 30 deletions(-) diff --git a/drivers/gpu/drm/i915/display/intel_parent.c b/drivers/gpu/drm/i915/display/intel_parent.c index 49cb64ca8c4c..d16163007545 100644 --- a/drivers/gpu/drm/i915/display/intel_parent.c +++ b/drivers/gpu/drm/i915/display/intel_parent.c @@ -17,6 +17,7 @@ * function pointer interface. */ +#include <drm/drm_print.h> #include <drm/intel/display_parent_interface.h> #include "intel_display_core.h" @@ -89,6 +90,9 @@ int intel_parent_stolen_insert_node_in_range(struct intel_display *display, int intel_parent_stolen_insert_node(struct intel_display *display, struct intel_stolen_node *node, u64 size, unsigned int align) { + if (drm_WARN_ON_ONCE(display->drm, !display->parent->stolen->insert_node)) + return -ENODEV; + return display->parent->stolen->insert_node(node, size, align); } @@ -116,11 +120,17 @@ u32 intel_parent_stolen_node_offset(struct intel_display *display, struct intel_ u64 intel_parent_stolen_area_address(struct intel_display *display) { + if (drm_WARN_ON_ONCE(display->drm, !display->parent->stolen->area_address)) + return 0; + return display->parent->stolen->area_address(display->drm); } u64 intel_parent_stolen_area_size(struct intel_display *display) { + if (drm_WARN_ON_ONCE(display->drm, !display->parent->stolen->area_size)) + return 0; + return display->parent->stolen->area_size(display->drm); } diff --git a/drivers/gpu/drm/xe/display/xe_stolen.c b/drivers/gpu/drm/xe/display/xe_stolen.c index cc7aec7db76c..12771709183a 100644 --- a/drivers/gpu/drm/xe/display/xe_stolen.c +++ b/drivers/gpu/drm/xe/display/xe_stolen.c @@ -43,14 +43,6 @@ static int xe_stolen_insert_node_in_range(struct intel_stolen_node *node, u64 si return err; } -static int xe_stolen_insert_node(struct intel_stolen_node *node, u64 size, unsigned int align) -{ - /* Not used on xe */ - WARN_ON(1); - - return -ENODEV; -} - static void xe_stolen_remove_node(struct intel_stolen_node *node) { xe_bo_unpin_map_no_vm(node->bo); @@ -77,22 +69,6 @@ static u64 xe_stolen_node_offset(const struct intel_stolen_node *node) return res.start; } -/* Used for < gen4. These are not supported by Xe */ -static u64 xe_stolen_area_address(struct drm_device *drm) -{ - WARN_ON(1); - - return 0; -} - -/* Used for gen9 specific WA. Gen9 is not supported by Xe */ -static u64 xe_stolen_area_size(struct drm_device *drm) -{ - WARN_ON(1); - - return 0; -} - static u64 xe_stolen_node_address(const struct intel_stolen_node *node) { struct xe_device *xe = node->xe; @@ -126,13 +102,10 @@ static void xe_stolen_node_free(const struct intel_stolen_node *node) const struct intel_display_stolen_interface xe_display_stolen_interface = { .insert_node_in_range = xe_stolen_insert_node_in_range, - .insert_node = xe_stolen_insert_node, .remove_node = xe_stolen_remove_node, .initialized = xe_stolen_initialized, .node_allocated = xe_stolen_node_allocated, .node_offset = xe_stolen_node_offset, - .area_address = xe_stolen_area_address, - .area_size = xe_stolen_area_size, .node_address = xe_stolen_node_address, .node_size = xe_stolen_node_size, .node_alloc = xe_stolen_node_alloc, diff --git a/include/drm/intel/display_parent_interface.h b/include/drm/intel/display_parent_interface.h index f590e846464d..cc13b2ce1324 100644 --- a/include/drm/intel/display_parent_interface.h +++ b/include/drm/intel/display_parent_interface.h @@ -51,13 +51,13 @@ struct intel_display_rps_interface { struct intel_display_stolen_interface { int (*insert_node_in_range)(struct intel_stolen_node *node, u64 size, unsigned int align, u64 start, u64 end); - int (*insert_node)(struct intel_stolen_node *node, u64 size, unsigned int align); + int (*insert_node)(struct intel_stolen_node *node, u64 size, unsigned int align); /* Optional */ void (*remove_node)(struct intel_stolen_node *node); bool (*initialized)(struct drm_device *drm); bool (*node_allocated)(const struct intel_stolen_node *node); u64 (*node_offset)(const struct intel_stolen_node *node); - u64 (*area_address)(struct drm_device *drm); - u64 (*area_size)(struct drm_device *drm); + u64 (*area_address)(struct drm_device *drm); /* Optional */ + u64 (*area_size)(struct drm_device *drm); /* Optional */ u64 (*node_address)(const struct intel_stolen_node *node); u64 (*node_size)(const struct intel_stolen_node *node); struct intel_stolen_node *(*node_alloc)(struct drm_device *drm); -- 2.47.3
