Reviewed-by: Jacek Lawrynowicz <jacek.lawrynowicz@xxxxxxxxxxxxxxx> On 1/7/2025 6:32 PM, Maciej Falkowski wrote: > From: Karol Wachowski <karol.wachowski@xxxxxxxxx> > > Use highest buttress VPU_STATUS register bits(15:13) that encode > platform type as follows: > 0 - Silicon > 2 - Simics > 3 - FPGA > 4 - Hybrid SLE > > Remove old DMI based method. > > Signed-off-by: Karol Wachowski <karol.wachowski@xxxxxxxxx> > Signed-off-by: Maciej Falkowski <maciej.falkowski@xxxxxxxxxxxxxxx> > --- > drivers/accel/ivpu/ivpu_drv.h | 4 ++- > drivers/accel/ivpu/ivpu_hw.c | 41 ++++++++++------------- > drivers/accel/ivpu/ivpu_hw_btrs.c | 7 ++++ > drivers/accel/ivpu/ivpu_hw_btrs.h | 1 + > drivers/accel/ivpu/ivpu_hw_btrs_lnl_reg.h | 1 + > 5 files changed, 29 insertions(+), 25 deletions(-) > > diff --git a/drivers/accel/ivpu/ivpu_drv.h b/drivers/accel/ivpu/ivpu_drv.h > index d53902b34070..ca21102ca366 100644 > --- a/drivers/accel/ivpu/ivpu_drv.h > +++ b/drivers/accel/ivpu/ivpu_drv.h > @@ -58,6 +58,7 @@ > #define IVPU_PLATFORM_SILICON 0 > #define IVPU_PLATFORM_SIMICS 2 > #define IVPU_PLATFORM_FPGA 3 > +#define IVPU_PLATFORM_HSLE 4 > #define IVPU_PLATFORM_INVALID 8 > > #define IVPU_SCHED_MODE_AUTO -1 > @@ -288,7 +289,8 @@ static inline bool ivpu_is_simics(struct ivpu_device *vdev) > > static inline bool ivpu_is_fpga(struct ivpu_device *vdev) > { > - return ivpu_get_platform(vdev) == IVPU_PLATFORM_FPGA; > + return ivpu_get_platform(vdev) == IVPU_PLATFORM_FPGA || > + ivpu_get_platform(vdev) == IVPU_PLATFORM_HSLE; > } > > static inline bool ivpu_is_force_snoop_enabled(struct ivpu_device *vdev) > diff --git a/drivers/accel/ivpu/ivpu_hw.c b/drivers/accel/ivpu/ivpu_hw.c > index 1b691375ee4d..e332f19ab51d 100644 > --- a/drivers/accel/ivpu/ivpu_hw.c > +++ b/drivers/accel/ivpu/ivpu_hw.c > @@ -19,38 +19,31 @@ static char *platform_to_str(u32 platform) > return "SIMICS"; > case IVPU_PLATFORM_FPGA: > return "FPGA"; > + case IVPU_PLATFORM_HSLE: > + return "HSLE"; > default: > return "Invalid platform"; > } > } > > -static const struct dmi_system_id dmi_platform_simulation[] = { > - { > - .ident = "Intel Simics", > - .matches = { > - DMI_MATCH(DMI_BOARD_NAME, "lnlrvp"), > - DMI_MATCH(DMI_BOARD_VERSION, "1.0"), > - DMI_MATCH(DMI_BOARD_SERIAL, "123456789"), > - }, > - }, > - { > - .ident = "Intel Simics", > - .matches = { > - DMI_MATCH(DMI_BOARD_NAME, "Simics"), > - }, > - }, > - { } > -}; > - > static void platform_init(struct ivpu_device *vdev) > { > - if (dmi_check_system(dmi_platform_simulation)) > - vdev->platform = IVPU_PLATFORM_SIMICS; > - else > - vdev->platform = IVPU_PLATFORM_SILICON; > + int platform = ivpu_hw_btrs_platform_read(vdev); > + > + ivpu_dbg(vdev, MISC, "Platform type: %s (%d)\n", platform_to_str(platform), platform); > + > + switch (platform) { > + case IVPU_PLATFORM_SILICON: > + case IVPU_PLATFORM_SIMICS: > + case IVPU_PLATFORM_FPGA: > + case IVPU_PLATFORM_HSLE: > + vdev->platform = platform; > + break; > > - ivpu_dbg(vdev, MISC, "Platform type: %s (%d)\n", > - platform_to_str(vdev->platform), vdev->platform); > + default: > + ivpu_err(vdev, "Invalid platform type: %d\n", platform); > + break; > + } > } > > static void wa_init(struct ivpu_device *vdev) > diff --git a/drivers/accel/ivpu/ivpu_hw_btrs.c b/drivers/accel/ivpu/ivpu_hw_btrs.c > index 3753b00ed2d6..56c56012b980 100644 > --- a/drivers/accel/ivpu/ivpu_hw_btrs.c > +++ b/drivers/accel/ivpu/ivpu_hw_btrs.c > @@ -887,3 +887,10 @@ void ivpu_hw_btrs_diagnose_failure(struct ivpu_device *vdev) > else > return diagnose_failure_lnl(vdev); > } > + > +int ivpu_hw_btrs_platform_read(struct ivpu_device *vdev) > +{ > + u32 reg = REGB_RD32(VPU_HW_BTRS_LNL_VPU_STATUS); > + > + return REG_GET_FLD(VPU_HW_BTRS_LNL_VPU_STATUS, PLATFORM, reg); > +} > diff --git a/drivers/accel/ivpu/ivpu_hw_btrs.h b/drivers/accel/ivpu/ivpu_hw_btrs.h > index 04f14f50fed6..1fd71b4d4ab0 100644 > --- a/drivers/accel/ivpu/ivpu_hw_btrs.h > +++ b/drivers/accel/ivpu/ivpu_hw_btrs.h > @@ -46,5 +46,6 @@ void ivpu_hw_btrs_global_int_disable(struct ivpu_device *vdev); > void ivpu_hw_btrs_irq_enable(struct ivpu_device *vdev); > void ivpu_hw_btrs_irq_disable(struct ivpu_device *vdev); > void ivpu_hw_btrs_diagnose_failure(struct ivpu_device *vdev); > +int ivpu_hw_btrs_platform_read(struct ivpu_device *vdev); > > #endif /* __IVPU_HW_BTRS_H__ */ > diff --git a/drivers/accel/ivpu/ivpu_hw_btrs_lnl_reg.h b/drivers/accel/ivpu/ivpu_hw_btrs_lnl_reg.h > index fc51f3098f97..fff2ef2cada6 100644 > --- a/drivers/accel/ivpu/ivpu_hw_btrs_lnl_reg.h > +++ b/drivers/accel/ivpu/ivpu_hw_btrs_lnl_reg.h > @@ -86,6 +86,7 @@ > #define VPU_HW_BTRS_LNL_VPU_STATUS_POWER_RESOURCE_OWN_ACK_MASK BIT_MASK(7) > #define VPU_HW_BTRS_LNL_VPU_STATUS_PERF_CLK_MASK BIT_MASK(11) > #define VPU_HW_BTRS_LNL_VPU_STATUS_DISABLE_CLK_RELINQUISH_MASK BIT_MASK(12) > +#define VPU_HW_BTRS_LNL_VPU_STATUS_PLATFORM_MASK GENMASK(31, 29) > > #define VPU_HW_BTRS_LNL_IP_RESET 0x00000160u > #define VPU_HW_BTRS_LNL_IP_RESET_TRIGGER_MASK BIT_MASK(0)