* function pointer interface.
*/
+#include <drm/drm_print.h>
#include <drm/intel/display_parent_interface.h>
#include "intel_display_core.h"
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);
}
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);
}
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);
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;
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,
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);