From: Umesh Nerlige Ramappa Date: Tue, 23 Dec 2025 18:39:47 +0000 (-0800) Subject: drm/xe/soc_remapper: Add system controller config for SoC remapper X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c3a613a03902dc09a9b50d2f6ae67005908f4a7e;p=thirdparty%2Fkernel%2Flinux.git drm/xe/soc_remapper: Add system controller config for SoC remapper Define system controller config bits and helpers for SoC remapper. Signed-off-by: Umesh Nerlige Ramappa Reviewed-by: Badal Nilawar Link: https://patch.msgid.link/20251223183943.3175941-8-umesh.nerlige.ramappa@intel.com --- diff --git a/drivers/gpu/drm/xe/regs/xe_soc_remapper_regs.h b/drivers/gpu/drm/xe/regs/xe_soc_remapper_regs.h index 9edf234227a9..be0eb37e73ad 100644 --- a/drivers/gpu/drm/xe/regs/xe_soc_remapper_regs.h +++ b/drivers/gpu/drm/xe/regs/xe_soc_remapper_regs.h @@ -9,5 +9,6 @@ #define SG_REMAP_INDEX1 XE_REG(SOC_BASE + 0x08) #define SG_REMAP_TELEM_MASK REG_GENMASK(31, 24) +#define SG_REMAP_SYSCTRL_MASK REG_GENMASK(23, 16) #endif diff --git a/drivers/gpu/drm/xe/xe_device_types.h b/drivers/gpu/drm/xe/xe_device_types.h index e292c6ebd4cb..7d46d5ecda91 100644 --- a/drivers/gpu/drm/xe/xe_device_types.h +++ b/drivers/gpu/drm/xe/xe_device_types.h @@ -334,6 +334,8 @@ struct xe_device { u8 has_pxp:1; /** @info.has_range_tlb_inval: Has range based TLB invalidations */ u8 has_range_tlb_inval:1; + /** @info.has_soc_remapper_sysctrl: Has SoC remapper system controller */ + u8 has_soc_remapper_sysctrl:1; /** @info.has_soc_remapper_telem: Has SoC remapper telemetry support */ u8 has_soc_remapper_telem:1; /** @info.has_sriov: Supports SR-IOV */ @@ -587,6 +589,9 @@ struct xe_device { /** @soc_remapper.set_telem_region: Set telemetry index */ void (*set_telem_region)(struct xe_device *xe, u32 index); + + /** @soc_remapper.set_sysctrl_region: Set system controller index */ + void (*set_sysctrl_region)(struct xe_device *xe, u32 index); } soc_remapper; /** diff --git a/drivers/gpu/drm/xe/xe_pci.c b/drivers/gpu/drm/xe/xe_pci.c index 55daa1b5f383..9d0dbbb98362 100644 --- a/drivers/gpu/drm/xe/xe_pci.c +++ b/drivers/gpu/drm/xe/xe_pci.c @@ -422,6 +422,7 @@ static const struct xe_device_desc cri_desc = { .has_mbx_power_limits = true, .has_mert = true, .has_pre_prod_wa = 1, + .has_soc_remapper_sysctrl = true, .has_soc_remapper_telem = true, .has_sriov = true, .max_gt_per_tile = 2, @@ -694,6 +695,7 @@ static int xe_info_init_early(struct xe_device *xe, xe->info.has_page_reclaim_hw_assist = desc->has_page_reclaim_hw_assist; xe->info.has_pre_prod_wa = desc->has_pre_prod_wa; xe->info.has_pxp = desc->has_pxp; + xe->info.has_soc_remapper_sysctrl = desc->has_soc_remapper_sysctrl; xe->info.has_soc_remapper_telem = desc->has_soc_remapper_telem; xe->info.has_sriov = xe_configfs_primary_gt_allowed(to_pci_dev(xe->drm.dev)) && desc->has_sriov; diff --git a/drivers/gpu/drm/xe/xe_pci_types.h b/drivers/gpu/drm/xe/xe_pci_types.h index e2bd4c81b2a7..5f20f56571d1 100644 --- a/drivers/gpu/drm/xe/xe_pci_types.h +++ b/drivers/gpu/drm/xe/xe_pci_types.h @@ -53,6 +53,7 @@ struct xe_device_desc { u8 has_pre_prod_wa:1; u8 has_page_reclaim_hw_assist:1; u8 has_pxp:1; + u8 has_soc_remapper_sysctrl:1; u8 has_soc_remapper_telem:1; u8 has_sriov:1; u8 needs_scratch:1; diff --git a/drivers/gpu/drm/xe/xe_soc_remapper.c b/drivers/gpu/drm/xe/xe_soc_remapper.c index 9fd084f76c6b..1c391d719196 100644 --- a/drivers/gpu/drm/xe/xe_soc_remapper.c +++ b/drivers/gpu/drm/xe/xe_soc_remapper.c @@ -20,6 +20,12 @@ static void xe_soc_remapper_set_telem_region(struct xe_device *xe, u32 index) REG_FIELD_PREP(SG_REMAP_TELEM_MASK, index)); } +static void xe_soc_remapper_set_sysctrl_region(struct xe_device *xe, u32 index) +{ + xe_soc_remapper_set_region(xe, SG_REMAP_INDEX1, SG_REMAP_SYSCTRL_MASK, + REG_FIELD_PREP(SG_REMAP_SYSCTRL_MASK, index)); +} + /** * xe_soc_remapper_init() - Initialize SoC remapper * @xe: Pointer to xe device. @@ -30,10 +36,17 @@ static void xe_soc_remapper_set_telem_region(struct xe_device *xe, u32 index) */ int xe_soc_remapper_init(struct xe_device *xe) { - if (xe->info.has_soc_remapper_telem) { + bool has_soc_remapper = xe->info.has_soc_remapper_telem || + xe->info.has_soc_remapper_sysctrl; + + if (has_soc_remapper) spin_lock_init(&xe->soc_remapper.lock); + + if (xe->info.has_soc_remapper_telem) xe->soc_remapper.set_telem_region = xe_soc_remapper_set_telem_region; - } + + if (xe->info.has_soc_remapper_sysctrl) + xe->soc_remapper.set_sysctrl_region = xe_soc_remapper_set_sysctrl_region; return 0; }