All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH V4] amdgpu/jpeg: fix deepsleep register for jpeg 5_0_0 and 5_0_2
@ 2026-04-02 21:43 David (Ming Qiang) Wu
  2026-04-02 21:46 ` Deucher, Alexander
  0 siblings, 1 reply; 2+ messages in thread
From: David (Ming Qiang) Wu @ 2026-04-02 21:43 UTC (permalink / raw)
  To: amd-gfx, alexander.deucher, Lijo.Lazar; +Cc: leo.liu

PCTL0__MMHUB_DEEPSLEEP_IB is 0x69004 on MMHUB 4,1,0 and
and 0x60804 on MMHUB 4,2,0. 0x62a04 is on MMHUB 1,8,0/1.

The DS bits are adjusted to cover more JPEG engines and MMHUB
version.

Signed-off-by: David (Ming Qiang) Wu <David.Wu3@amd.com>
---
 drivers/gpu/drm/amd/amdgpu/jpeg_v4_0_3.c | 52 +++++++++++++++++++++---
 1 file changed, 46 insertions(+), 6 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/jpeg_v4_0_3.c b/drivers/gpu/drm/amd/amdgpu/jpeg_v4_0_3.c
index 4b4aa9553624..82abe181c730 100644
--- a/drivers/gpu/drm/amd/amdgpu/jpeg_v4_0_3.c
+++ b/drivers/gpu/drm/amd/amdgpu/jpeg_v4_0_3.c
@@ -736,15 +736,35 @@ static void jpeg_v4_0_3_dec_ring_set_wptr(struct amdgpu_ring *ring)
  */
 void jpeg_v4_0_3_dec_ring_insert_start(struct amdgpu_ring *ring)
 {
-	if (!amdgpu_sriov_vf(ring->adev)) {
+	struct amdgpu_device *adev = ring->adev;
+
+	if (!amdgpu_sriov_vf(adev)) {
+		int jpeg_inst = GET_INST(JPEG, ring->me);
+		uint32_t value = 0x80004000; /* default DS14 */
+
 		amdgpu_ring_write(ring, PACKETJ(regUVD_JRBC_EXTERNAL_REG_INTERNAL_OFFSET,
 			0, 0, PACKETJ_TYPE0));
-		amdgpu_ring_write(ring, 0x62a04); /* PCTL0_MMHUB_DEEPSLEEP_IB */
+
+		/* PCTL0__MMHUB_DEEPSLEEP_IB could be different on different mmhub version */
+		switch (amdgpu_ip_version(adev, MMHUB_HWIP, 0)) {
+		case IP_VERSION(4, 1, 0):
+			amdgpu_ring_write(ring, 0x69004);
+			value = 0x80010000;
+			break;
+		case IP_VERSION(4, 2, 0):
+			amdgpu_ring_write(ring, 0x60804);
+			if (jpeg_inst & 1)
+				value = 0x80010000;
+			break;
+		default:
+			amdgpu_ring_write(ring, 0x62a04);
+			break;
+		}
 
 		amdgpu_ring_write(ring,
 				  PACKETJ(JRBC_DEC_EXTERNAL_REG_WRITE_ADDR, 0,
 					  0, PACKETJ_TYPE0));
-		amdgpu_ring_write(ring, 0x80004000);
+		amdgpu_ring_write(ring, value);
 	}
 }
 
@@ -757,15 +777,35 @@ void jpeg_v4_0_3_dec_ring_insert_start(struct amdgpu_ring *ring)
  */
 void jpeg_v4_0_3_dec_ring_insert_end(struct amdgpu_ring *ring)
 {
-	if (!amdgpu_sriov_vf(ring->adev)) {
+	struct amdgpu_device *adev = ring->adev;
+
+	if (!amdgpu_sriov_vf(adev)) {
+		int jpeg_inst = GET_INST(JPEG, ring->me);
+		uint32_t value = 0x00004000; /* default DS14 */
+
 		amdgpu_ring_write(ring, PACKETJ(regUVD_JRBC_EXTERNAL_REG_INTERNAL_OFFSET,
 			0, 0, PACKETJ_TYPE0));
-		amdgpu_ring_write(ring, 0x62a04);
+
+		/* PCTL0__MMHUB_DEEPSLEEP_IB could be different on different mmhub version */
+		switch (amdgpu_ip_version(adev, MMHUB_HWIP, 0)) {
+		case IP_VERSION(4, 1, 0):
+			amdgpu_ring_write(ring, 0x69004);
+			value = 0x00010000;
+			break;
+		case IP_VERSION(4, 2, 0):
+			amdgpu_ring_write(ring, 0x60804);
+			if (jpeg_inst & 1)
+				value = 0x00010000;
+			break;
+		default:
+			amdgpu_ring_write(ring, 0x62a04);
+			break;
+		}
 
 		amdgpu_ring_write(ring,
 				  PACKETJ(JRBC_DEC_EXTERNAL_REG_WRITE_ADDR, 0,
 					  0, PACKETJ_TYPE0));
-		amdgpu_ring_write(ring, 0x00004000);
+		amdgpu_ring_write(ring, value);
 	}
 }
 
-- 
2.43.0


^ permalink raw reply related	[flat|nested] 2+ messages in thread

* RE: [PATCH V4] amdgpu/jpeg: fix deepsleep register for jpeg 5_0_0 and 5_0_2
  2026-04-02 21:43 [PATCH V4] amdgpu/jpeg: fix deepsleep register for jpeg 5_0_0 and 5_0_2 David (Ming Qiang) Wu
@ 2026-04-02 21:46 ` Deucher, Alexander
  0 siblings, 0 replies; 2+ messages in thread
From: Deucher, Alexander @ 2026-04-02 21:46 UTC (permalink / raw)
  To: Wu, David, amd-gfx@lists.freedesktop.org, Lazar, Lijo; +Cc: Liu, Leo

[Public]

> -----Original Message-----
> From: Wu, David <David.Wu3@amd.com>
> Sent: Thursday, April 2, 2026 5:44 PM
> To: amd-gfx@lists.freedesktop.org; Deucher, Alexander
> <Alexander.Deucher@amd.com>; Lazar, Lijo <Lijo.Lazar@amd.com>
> Cc: Liu, Leo <Leo.Liu@amd.com>
> Subject: [PATCH V4] amdgpu/jpeg: fix deepsleep register for jpeg 5_0_0 and
> 5_0_2
>
> PCTL0__MMHUB_DEEPSLEEP_IB is 0x69004 on MMHUB 4,1,0 and and
> 0x60804 on MMHUB 4,2,0. 0x62a04 is on MMHUB 1,8,0/1.
>
> The DS bits are adjusted to cover more JPEG engines and MMHUB version.
>
> Signed-off-by: David (Ming Qiang) Wu <David.Wu3@amd.com>

Reviewed-by: Alex Deucher <alexander.deucher@amd.com>

> ---
>  drivers/gpu/drm/amd/amdgpu/jpeg_v4_0_3.c | 52
> +++++++++++++++++++++---
>  1 file changed, 46 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/jpeg_v4_0_3.c
> b/drivers/gpu/drm/amd/amdgpu/jpeg_v4_0_3.c
> index 4b4aa9553624..82abe181c730 100644
> --- a/drivers/gpu/drm/amd/amdgpu/jpeg_v4_0_3.c
> +++ b/drivers/gpu/drm/amd/amdgpu/jpeg_v4_0_3.c
> @@ -736,15 +736,35 @@ static void jpeg_v4_0_3_dec_ring_set_wptr(struct
> amdgpu_ring *ring)
>   */
>  void jpeg_v4_0_3_dec_ring_insert_start(struct amdgpu_ring *ring)  {
> -     if (!amdgpu_sriov_vf(ring->adev)) {
> +     struct amdgpu_device *adev = ring->adev;
> +
> +     if (!amdgpu_sriov_vf(adev)) {
> +             int jpeg_inst = GET_INST(JPEG, ring->me);
> +             uint32_t value = 0x80004000; /* default DS14 */
> +
>               amdgpu_ring_write(ring,
> PACKETJ(regUVD_JRBC_EXTERNAL_REG_INTERNAL_OFFSET,
>                       0, 0, PACKETJ_TYPE0));
> -             amdgpu_ring_write(ring, 0x62a04); /*
> PCTL0_MMHUB_DEEPSLEEP_IB */
> +
> +             /* PCTL0__MMHUB_DEEPSLEEP_IB could be different on
> different mmhub version */
> +             switch (amdgpu_ip_version(adev, MMHUB_HWIP, 0)) {
> +             case IP_VERSION(4, 1, 0):
> +                     amdgpu_ring_write(ring, 0x69004);
> +                     value = 0x80010000;
> +                     break;
> +             case IP_VERSION(4, 2, 0):
> +                     amdgpu_ring_write(ring, 0x60804);
> +                     if (jpeg_inst & 1)
> +                             value = 0x80010000;
> +                     break;
> +             default:
> +                     amdgpu_ring_write(ring, 0x62a04);
> +                     break;
> +             }
>
>               amdgpu_ring_write(ring,
>
> PACKETJ(JRBC_DEC_EXTERNAL_REG_WRITE_ADDR, 0,
>                                         0, PACKETJ_TYPE0));
> -             amdgpu_ring_write(ring, 0x80004000);
> +             amdgpu_ring_write(ring, value);
>       }
>  }
>
> @@ -757,15 +777,35 @@ void jpeg_v4_0_3_dec_ring_insert_start(struct
> amdgpu_ring *ring)
>   */
>  void jpeg_v4_0_3_dec_ring_insert_end(struct amdgpu_ring *ring)  {
> -     if (!amdgpu_sriov_vf(ring->adev)) {
> +     struct amdgpu_device *adev = ring->adev;
> +
> +     if (!amdgpu_sriov_vf(adev)) {
> +             int jpeg_inst = GET_INST(JPEG, ring->me);
> +             uint32_t value = 0x00004000; /* default DS14 */
> +
>               amdgpu_ring_write(ring,
> PACKETJ(regUVD_JRBC_EXTERNAL_REG_INTERNAL_OFFSET,
>                       0, 0, PACKETJ_TYPE0));
> -             amdgpu_ring_write(ring, 0x62a04);
> +
> +             /* PCTL0__MMHUB_DEEPSLEEP_IB could be different on
> different mmhub version */
> +             switch (amdgpu_ip_version(adev, MMHUB_HWIP, 0)) {
> +             case IP_VERSION(4, 1, 0):
> +                     amdgpu_ring_write(ring, 0x69004);
> +                     value = 0x00010000;
> +                     break;
> +             case IP_VERSION(4, 2, 0):
> +                     amdgpu_ring_write(ring, 0x60804);
> +                     if (jpeg_inst & 1)
> +                             value = 0x00010000;
> +                     break;
> +             default:
> +                     amdgpu_ring_write(ring, 0x62a04);
> +                     break;
> +             }
>
>               amdgpu_ring_write(ring,
>
> PACKETJ(JRBC_DEC_EXTERNAL_REG_WRITE_ADDR, 0,
>                                         0, PACKETJ_TYPE0));
> -             amdgpu_ring_write(ring, 0x00004000);
> +             amdgpu_ring_write(ring, value);
>       }
>  }
>
> --
> 2.43.0


^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2026-04-02 21:46 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-04-02 21:43 [PATCH V4] amdgpu/jpeg: fix deepsleep register for jpeg 5_0_0 and 5_0_2 David (Ming Qiang) Wu
2026-04-02 21:46 ` Deucher, Alexander

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.