[Intel-xe] [PATCH] drm/xe: add has_pcode flag
Ofir Bitton
obitton at habana.ai
Sun Oct 15 12:36:18 UTC 2023
On 15/10/2023 15:23, Koby Elbaz wrote:
> Per device, this flag indicates whether PCODE uC exists.
>
> Signed-off-by: Koby Elbaz <kelbaz at habana.ai>
> ---
> drivers/gpu/drm/xe/xe_device_types.h | 2 ++
> drivers/gpu/drm/xe/xe_pci.c | 13 +++++++++++++
> drivers/gpu/drm/xe/xe_pcode.c | 9 +++++++++
> 3 files changed, 24 insertions(+)
>
> diff --git a/drivers/gpu/drm/xe/xe_device_types.h b/drivers/gpu/drm/xe/xe_device_types.h
> index bc375ddda5a7..8e327673c05c 100644
> --- a/drivers/gpu/drm/xe/xe_device_types.h
> +++ b/drivers/gpu/drm/xe/xe_device_types.h
> @@ -257,6 +257,8 @@ struct xe_device {
> u8 bypass_mtcfg:1;
> /** @supports_mmio_ext: supports MMIO extension/s */
> u8 supports_mmio_ext:1;
> + /** @has_pcode: device has a PCODE uC */
> + u8 has_pcode:1;
>
> #if IS_ENABLED(CONFIG_DRM_XE_DISPLAY)
> struct {
> diff --git a/drivers/gpu/drm/xe/xe_pci.c b/drivers/gpu/drm/xe/xe_pci.c
> index 99ccee07f8cd..2aac0f4df50c 100644
> --- a/drivers/gpu/drm/xe/xe_pci.c
> +++ b/drivers/gpu/drm/xe/xe_pci.c
> @@ -61,6 +61,7 @@ struct xe_device_desc {
> u8 has_llc:1;
> u8 bypass_mtcfg:1;
> u8 supports_mmio_ext:1;
> + u8 has_pcode:1;
> };
>
> __diag_push();
> @@ -212,6 +213,7 @@ static const struct xe_device_desc tgl_desc = {
> .has_display = true,
> .has_llc = true,
> .require_force_probe = true,
> + .has_pcode = true,
> };
>
> static const struct xe_device_desc rkl_desc = {
> @@ -221,6 +223,7 @@ static const struct xe_device_desc rkl_desc = {
> .has_display = true,
> .has_llc = true,
> .require_force_probe = true,
> + .has_pcode = true,
> };
>
> static const u16 adls_rpls_ids[] = { XE_RPLS_IDS(NOP), 0 };
> @@ -236,6 +239,7 @@ static const struct xe_device_desc adl_s_desc = {
> { XE_SUBPLATFORM_ALDERLAKE_S_RPLS, "RPLS", adls_rpls_ids },
> {},
> },
> + .has_pcode = true,
> };
>
> static const u16 adlp_rplu_ids[] = { XE_RPLU_IDS(NOP), 0 };
> @@ -251,6 +255,7 @@ static const struct xe_device_desc adl_p_desc = {
> { XE_SUBPLATFORM_ALDERLAKE_P_RPLU, "RPLU", adlp_rplu_ids },
> {},
> },
> + .has_pcode = true,
> };
>
> static const struct xe_device_desc adl_n_desc = {
> @@ -260,6 +265,7 @@ static const struct xe_device_desc adl_n_desc = {
> .has_display = true,
> .has_llc = true,
> .require_force_probe = true,
> + .has_pcode = true,
> };
>
> #define DGFX_FEATURES \
> @@ -272,6 +278,7 @@ static const struct xe_device_desc dg1_desc = {
> PLATFORM(XE_DG1),
> .has_display = true,
> .require_force_probe = true,
> + .has_pcode = true,
> };
>
> static const u16 dg2_g10_ids[] = { XE_DG2_G10_IDS(NOP), XE_ATS_M150_IDS(NOP), 0 };
> @@ -295,6 +302,7 @@ static const struct xe_device_desc ats_m_desc = {
>
> DG2_FEATURES,
> .has_display = false,
> + .has_pcode = true,
> };
>
> static const struct xe_device_desc dg2_desc = {
> @@ -304,6 +312,7 @@ static const struct xe_device_desc dg2_desc = {
>
> DG2_FEATURES,
> .has_display = true,
> + .has_pcode = true,
> };
>
> static const struct xe_device_desc pvc_desc = {
> @@ -312,6 +321,7 @@ static const struct xe_device_desc pvc_desc = {
> PLATFORM(XE_PVC),
> .has_display = false,
> .require_force_probe = true,
> + .has_pcode = true,
> };
>
> static const struct xe_device_desc mtl_desc = {
> @@ -319,11 +329,13 @@ static const struct xe_device_desc mtl_desc = {
> .require_force_probe = true,
> PLATFORM(XE_METEORLAKE),
> .has_display = true,
> + .has_pcode = true,
> };
>
> static const struct xe_device_desc lnl_desc = {
> PLATFORM(XE_LUNARLAKE),
> .require_force_probe = true,
> + .has_pcode = true,
> };
>
> #undef PLATFORM
> @@ -576,6 +588,7 @@ static int xe_info_init(struct xe_device *xe,
> xe->info.bypass_mtcfg = desc->bypass_mtcfg;
> xe->info.supports_mmio_ext = desc->supports_mmio_ext;
> xe->info.tile_mmio_ext_size = graphics_desc->tile_mmio_ext_size;
> + xe->info.has_pcode = desc->has_pcode;
>
> xe->info.dma_mask_size = graphics_desc->dma_mask_size;
> xe->info.vram_flags = graphics_desc->vram_flags;
> diff --git a/drivers/gpu/drm/xe/xe_pcode.c b/drivers/gpu/drm/xe/xe_pcode.c
> index 4a240acf7625..d895cb1e16c7 100644
> --- a/drivers/gpu/drm/xe/xe_pcode.c
> +++ b/drivers/gpu/drm/xe/xe_pcode.c
> @@ -61,6 +61,9 @@ static int pcode_mailbox_rw(struct xe_gt *gt, u32 mbox, u32 *data0, u32 *data1,
> {
> int err;
>
> + if (!gt_to_xe(gt)->info.has_pcode)
> + return 0;
> +
> lockdep_assert_held(>->pcode.lock);
>
> if ((xe_mmio_read32(gt, PCODE_MAILBOX) & PCODE_READY) != 0)
> @@ -249,6 +252,9 @@ int xe_pcode_init(struct xe_gt *gt)
> int timeout_us = 180000000; /* 3 min */
> int ret;
>
> + if (!gt_to_xe(gt)->info.has_pcode)
> + return 0;
> +
> if (!IS_DGFX(gt_to_xe(gt)))
> return 0;
>
> @@ -280,6 +286,9 @@ int xe_pcode_probe(struct xe_gt *gt)
> {
> drmm_mutex_init(>_to_xe(gt)->drm, >->pcode.lock);
>
> + if (!gt_to_xe(gt)->info.has_pcode)
> + return 0;
> +
> if (!IS_DGFX(gt_to_xe(gt)))
> return 0;
>
Reviewed-by: Ofir Bitton <obitton at habana.ai>
More information about the Intel-xe
mailing list