Applied to drm-misc-next
On 10/1/2025 6:40 PM, Lizhi Hou wrote: > Reviewed-by: Lizhi Hou <[email protected]> > > On 10/1/25 03:43, Karol Wachowski wrote: >> The pcode MAILBOX STATUS register PARAM2 field expects DCT active >> percent in U1.7 value format. Convert percentage value to this >> format before writing to the register. >> >> Fixes: a19bffb10c46 ("accel/ivpu: Implement DCT handling") >> Signed-off-by: Karol Wachowski <[email protected]> >> --- >> drivers/accel/ivpu/ivpu_hw_btrs.c | 2 +- >> drivers/accel/ivpu/ivpu_hw_btrs.h | 2 +- >> drivers/accel/ivpu/ivpu_pm.c | 9 +++++++-- >> 3 files changed, 9 insertions(+), 4 deletions(-) >> >> diff --git a/drivers/accel/ivpu/ivpu_hw_btrs.c >> b/drivers/accel/ivpu/ivpu_hw_btrs.c >> index afdb3b2aa72a..aa33f562d29c 100644 >> --- a/drivers/accel/ivpu/ivpu_hw_btrs.c >> +++ b/drivers/accel/ivpu/ivpu_hw_btrs.c >> @@ -752,7 +752,7 @@ int ivpu_hw_btrs_dct_get_request(struct >> ivpu_device *vdev, bool *enable) >> } >> } >> -void ivpu_hw_btrs_dct_set_status(struct ivpu_device *vdev, bool >> enable, u32 active_percent) >> +void ivpu_hw_btrs_dct_set_status(struct ivpu_device *vdev, bool >> enable, u8 active_percent) >> { >> u32 val = 0; >> u32 cmd = enable ? DCT_ENABLE : DCT_DISABLE; >> diff --git a/drivers/accel/ivpu/ivpu_hw_btrs.h >> b/drivers/accel/ivpu/ivpu_hw_btrs.h >> index 032c384ac3d4..c4c10e22f30f 100644 >> --- a/drivers/accel/ivpu/ivpu_hw_btrs.h >> +++ b/drivers/accel/ivpu/ivpu_hw_btrs.h >> @@ -36,7 +36,7 @@ u32 ivpu_hw_btrs_dpu_freq_get(struct ivpu_device >> *vdev); >> bool ivpu_hw_btrs_irq_handler_mtl(struct ivpu_device *vdev, int irq); >> bool ivpu_hw_btrs_irq_handler_lnl(struct ivpu_device *vdev, int irq); >> int ivpu_hw_btrs_dct_get_request(struct ivpu_device *vdev, bool >> *enable); >> -void ivpu_hw_btrs_dct_set_status(struct ivpu_device *vdev, bool >> enable, u32 active_percent); >> +void ivpu_hw_btrs_dct_set_status(struct ivpu_device *vdev, bool >> enable, u8 active_percent); >> u32 ivpu_hw_btrs_telemetry_offset_get(struct ivpu_device *vdev); >> u32 ivpu_hw_btrs_telemetry_size_get(struct ivpu_device *vdev); >> u32 ivpu_hw_btrs_telemetry_enable_get(struct ivpu_device *vdev); >> diff --git a/drivers/accel/ivpu/ivpu_pm.c b/drivers/accel/ivpu/ivpu_pm.c >> index 7514f580eef4..63c95307faa1 100644 >> --- a/drivers/accel/ivpu/ivpu_pm.c >> +++ b/drivers/accel/ivpu/ivpu_pm.c >> @@ -502,6 +502,11 @@ void ivpu_pm_irq_dct_work_fn(struct work_struct >> *work) >> else >> ret = ivpu_pm_dct_disable(vdev); >> - if (!ret) >> - ivpu_hw_btrs_dct_set_status(vdev, enable, >> vdev->pm->dct_active_percent); >> + if (!ret) { >> + /* Convert percent to U1.7 format */ >> + u8 val = DIV_ROUND_CLOSEST(vdev->pm->dct_active_percent * >> 128, 100); >> + >> + ivpu_hw_btrs_dct_set_status(vdev, enable, val); >> + } >> + >> }
