[AMD Official Use Only - AMD Internal Distribution Only]

Reviewed-by: Leo Liu <leo....@amd.com>

> -----Original Message-----
> From: Sundararaju, Sathishkumar <sathishkumar.sundarar...@amd.com>
> Sent: September 4, 2025 7:22 AM
> To: amd-gfx@lists.freedesktop.org
> Cc: Deucher, Alexander <alexander.deuc...@amd.com>; Liu, Leo
> <leo....@amd.com>; Wu, David <david....@amd.com>; Sundararaju,
> Sathishkumar <sathishkumar.sundarar...@amd.com>
> Subject: [PATCH] drm/amdgpu/jpeg: Move parse_cs to amdgpu_jpeg.c
>
> Rename jpeg_v2_dec_ring_parse_cs to amdgpu_jpeg_dec_parse_cs and
> move it to amdgpu_jpeg.c as it is shared among jpeg versions.
>
> Signed-off-by: Sathishkumar S <sathishkumar.sundarar...@amd.com>
> ---
>  drivers/gpu/drm/amd/amdgpu/amdgpu_jpeg.c | 65
> ++++++++++++++++++++++++
> drivers/gpu/drm/amd/amdgpu/amdgpu_jpeg.h | 10 ++++
>  drivers/gpu/drm/amd/amdgpu/jpeg_v2_0.c   | 58 +--------------------
>  drivers/gpu/drm/amd/amdgpu/jpeg_v2_0.h   |  6 ---
>  drivers/gpu/drm/amd/amdgpu/jpeg_v2_5.c   |  4 +-
>  drivers/gpu/drm/amd/amdgpu/jpeg_v3_0.c   |  2 +-
>  drivers/gpu/drm/amd/amdgpu/jpeg_v4_0.c   |  2 +-
>  drivers/gpu/drm/amd/amdgpu/jpeg_v4_0_3.c |  2 +-
> drivers/gpu/drm/amd/amdgpu/jpeg_v4_0_5.c |  2 +-
> drivers/gpu/drm/amd/amdgpu/jpeg_v5_0_0.c |  2 +-
>  10 files changed, 83 insertions(+), 70 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_jpeg.c
> b/drivers/gpu/drm/amd/amdgpu/amdgpu_jpeg.c
> index f0d7e2487237..e7b4b768f7d2 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_jpeg.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_jpeg.c
> @@ -539,3 +539,68 @@ void amdgpu_jpeg_print_ip_state(struct
> amdgpu_ip_block *ip_block, struct drm_pri
>                       drm_printf(p, "\nInactive Instance:JPEG%d\n", i);
>       }
>  }
> +
> +static inline bool amdgpu_jpeg_reg_valid(u32 reg) {
> +     if (reg < JPEG_REG_RANGE_START || reg > JPEG_REG_RANGE_END ||
> +         (reg >= JPEG_ATOMIC_RANGE_START && reg <=
> JPEG_ATOMIC_RANGE_END))
> +             return false;
> +     else
> +             return true;
> +}
> +
> +/**
> + * amdgpu_jpeg_dec_parse_cs - command submission parser
> + *
> + * @parser: Command submission parser context
> + * @job: the job to parse
> + * @ib: the IB to parse
> + *
> + * Parse the command stream, return -EINVAL for invalid packet,
> + * 0 otherwise
> + */
> +
> +int amdgpu_jpeg_dec_parse_cs(struct amdgpu_cs_parser *parser,
> +                           struct amdgpu_job *job,
> +                           struct amdgpu_ib *ib)
> +{
> +     u32 i, reg, res, cond, type;
> +     struct amdgpu_device *adev = parser->adev;
> +
> +     for (i = 0; i < ib->length_dw ; i += 2) {
> +             reg  = CP_PACKETJ_GET_REG(ib->ptr[i]);
> +             res  = CP_PACKETJ_GET_RES(ib->ptr[i]);
> +             cond = CP_PACKETJ_GET_COND(ib->ptr[i]);
> +             type = CP_PACKETJ_GET_TYPE(ib->ptr[i]);
> +
> +             if (res) /* only support 0 at the moment */
> +                     return -EINVAL;
> +
> +             switch (type) {
> +             case PACKETJ_TYPE0:
> +                     if (cond != PACKETJ_CONDITION_CHECK0 ||
> +                         !amdgpu_jpeg_reg_valid(reg)) {
> +                             dev_err(adev->dev, "Invalid packet
> [0x%08x]!\n", ib->ptr[i]);
> +                             return -EINVAL;
> +                     }
> +                     break;
> +             case PACKETJ_TYPE3:
> +                     if (cond != PACKETJ_CONDITION_CHECK3 ||
> +                         !amdgpu_jpeg_reg_valid(reg)) {
> +                             dev_err(adev->dev, "Invalid packet
> [0x%08x]!\n", ib->ptr[i]);
> +                             return -EINVAL;
> +                     }
> +                     break;
> +             case PACKETJ_TYPE6:
> +                     if (ib->ptr[i] == CP_PACKETJ_NOP)
> +                             continue;
> +                     dev_err(adev->dev, "Invalid packet [0x%08x]!\n", ib-
> >ptr[i]);
> +                     return -EINVAL;
> +             default:
> +                     dev_err(adev->dev, "Unknown packet type %d !\n",
> type);
> +                     return -EINVAL;
> +             }
> +     }
> +
> +     return 0;
> +}
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_jpeg.h
> b/drivers/gpu/drm/amd/amdgpu/amdgpu_jpeg.h
> index 4f0775e39b54..346ae0ab09d3 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_jpeg.h
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_jpeg.h
> @@ -25,11 +25,18 @@
>  #define __AMDGPU_JPEG_H__
>
>  #include "amdgpu_ras.h"
> +#include "amdgpu_cs.h"
>
>  #define AMDGPU_MAX_JPEG_INSTANCES    4
>  #define AMDGPU_MAX_JPEG_RINGS           10
>  #define AMDGPU_MAX_JPEG_RINGS_4_0_3     8
>
> +#define JPEG_REG_RANGE_START            0x4000
> +#define JPEG_REG_RANGE_END              0x41c2
> +#define JPEG_ATOMIC_RANGE_START         0x4120
> +#define JPEG_ATOMIC_RANGE_END           0x412A
> +
> +
>  #define AMDGPU_JPEG_HARVEST_JPEG0 (1 << 0)  #define
> AMDGPU_JPEG_HARVEST_JPEG1 (1 << 1)
>
> @@ -170,5 +177,8 @@ int amdgpu_jpeg_reg_dump_init(struct
> amdgpu_device *adev,
>                              const struct amdgpu_hwip_reg_entry *reg, u32
> count);  void amdgpu_jpeg_dump_ip_state(struct amdgpu_ip_block
> *ip_block);  void amdgpu_jpeg_print_ip_state(struct amdgpu_ip_block
> *ip_block, struct drm_printer *p);
> +int amdgpu_jpeg_dec_parse_cs(struct amdgpu_cs_parser *parser,
> +                          struct amdgpu_job *job,
> +                          struct amdgpu_ib *ib);
>
>  #endif /*__AMDGPU_JPEG_H__*/
> diff --git a/drivers/gpu/drm/amd/amdgpu/jpeg_v2_0.c
> b/drivers/gpu/drm/amd/amdgpu/jpeg_v2_0.c
> index 58239c405fda..27c76bd424cf 100644
> --- a/drivers/gpu/drm/amd/amdgpu/jpeg_v2_0.c
> +++ b/drivers/gpu/drm/amd/amdgpu/jpeg_v2_0.c
> @@ -23,7 +23,6 @@
>
>  #include "amdgpu.h"
>  #include "amdgpu_jpeg.h"
> -#include "amdgpu_cs.h"
>  #include "amdgpu_pm.h"
>  #include "soc15.h"
>  #include "soc15d.h"
> @@ -806,7 +805,7 @@ static const struct amdgpu_ring_funcs
> jpeg_v2_0_dec_ring_vm_funcs = {
>       .get_rptr = jpeg_v2_0_dec_ring_get_rptr,
>       .get_wptr = jpeg_v2_0_dec_ring_get_wptr,
>       .set_wptr = jpeg_v2_0_dec_ring_set_wptr,
> -     .parse_cs = jpeg_v2_dec_ring_parse_cs,
> +     .parse_cs = amdgpu_jpeg_dec_parse_cs,
>       .emit_frame_size =
>               SOC15_FLUSH_GPU_TLB_NUM_WREG * 6 +
>               SOC15_FLUSH_GPU_TLB_NUM_REG_WAIT * 8 + @@ -854,58
> +853,3 @@ const struct amdgpu_ip_block_version jpeg_v2_0_ip_block = {
>               .rev = 0,
>               .funcs = &jpeg_v2_0_ip_funcs,
>  };
> -
> -/**
> - * jpeg_v2_dec_ring_parse_cs - command submission parser
> - *
> - * @parser: Command submission parser context
> - * @job: the job to parse
> - * @ib: the IB to parse
> - *
> - * Parse the command stream, return -EINVAL for invalid packet,
> - * 0 otherwise
> - */
> -int jpeg_v2_dec_ring_parse_cs(struct amdgpu_cs_parser *parser,
> -                           struct amdgpu_job *job,
> -                           struct amdgpu_ib *ib)
> -{
> -     u32 i, reg, res, cond, type;
> -     struct amdgpu_device *adev = parser->adev;
> -
> -     for (i = 0; i < ib->length_dw ; i += 2) {
> -             reg  = CP_PACKETJ_GET_REG(ib->ptr[i]);
> -             res  = CP_PACKETJ_GET_RES(ib->ptr[i]);
> -             cond = CP_PACKETJ_GET_COND(ib->ptr[i]);
> -             type = CP_PACKETJ_GET_TYPE(ib->ptr[i]);
> -
> -             if (res) /* only support 0 at the moment */
> -                     return -EINVAL;
> -
> -             switch (type) {
> -             case PACKETJ_TYPE0:
> -                     if (cond != PACKETJ_CONDITION_CHECK0 || reg <
> JPEG_REG_RANGE_START ||
> -                         reg > JPEG_REG_RANGE_END) {
> -                             dev_err(adev->dev, "Invalid packet
> [0x%08x]!\n", ib->ptr[i]);
> -                             return -EINVAL;
> -                     }
> -                     break;
> -             case PACKETJ_TYPE3:
> -                     if (cond != PACKETJ_CONDITION_CHECK3 || reg <
> JPEG_REG_RANGE_START ||
> -                         reg > JPEG_REG_RANGE_END) {
> -                             dev_err(adev->dev, "Invalid packet
> [0x%08x]!\n", ib->ptr[i]);
> -                             return -EINVAL;
> -                     }
> -                     break;
> -             case PACKETJ_TYPE6:
> -                     if (ib->ptr[i] == CP_PACKETJ_NOP)
> -                             continue;
> -                     dev_err(adev->dev, "Invalid packet [0x%08x]!\n", ib-
> >ptr[i]);
> -                     return -EINVAL;
> -             default:
> -                     dev_err(adev->dev, "Unknown packet type %d !\n",
> type);
> -                     return -EINVAL;
> -             }
> -     }
> -
> -     return 0;
> -}
> diff --git a/drivers/gpu/drm/amd/amdgpu/jpeg_v2_0.h
> b/drivers/gpu/drm/amd/amdgpu/jpeg_v2_0.h
> index 63fadda7a673..654e43e83e2c 100644
> --- a/drivers/gpu/drm/amd/amdgpu/jpeg_v2_0.h
> +++ b/drivers/gpu/drm/amd/amdgpu/jpeg_v2_0.h
> @@ -45,9 +45,6 @@
>
>  #define JRBC_DEC_EXTERNAL_REG_WRITE_ADDR
>       0x18000
>
> -#define JPEG_REG_RANGE_START
>       0x4000
> -#define JPEG_REG_RANGE_END
>       0x41c2
> -
>  void jpeg_v2_0_dec_ring_insert_start(struct amdgpu_ring *ring);  void
> jpeg_v2_0_dec_ring_insert_end(struct amdgpu_ring *ring);  void
> jpeg_v2_0_dec_ring_emit_fence(struct amdgpu_ring *ring, u64 addr, u64 seq,
> @@ -60,9 +57,6 @@ void jpeg_v2_0_dec_ring_emit_vm_flush(struct
> amdgpu_ring *ring,
>                               unsigned vmid, uint64_t pd_addr);
>  void jpeg_v2_0_dec_ring_emit_wreg(struct amdgpu_ring *ring, uint32_t reg,
> uint32_t val);  void jpeg_v2_0_dec_ring_nop(struct amdgpu_ring *ring,
> uint32_t count); -int jpeg_v2_dec_ring_parse_cs(struct amdgpu_cs_parser
> *parser,
> -                           struct amdgpu_job *job,
> -                           struct amdgpu_ib *ib);
>
>  extern const struct amdgpu_ip_block_version jpeg_v2_0_ip_block;
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/jpeg_v2_5.c
> b/drivers/gpu/drm/amd/amdgpu/jpeg_v2_5.c
> index 3e2c389242db..20983f126b49 100644
> --- a/drivers/gpu/drm/amd/amdgpu/jpeg_v2_5.c
> +++ b/drivers/gpu/drm/amd/amdgpu/jpeg_v2_5.c
> @@ -696,7 +696,7 @@ static const struct amdgpu_ring_funcs
> jpeg_v2_5_dec_ring_vm_funcs = {
>       .get_rptr = jpeg_v2_5_dec_ring_get_rptr,
>       .get_wptr = jpeg_v2_5_dec_ring_get_wptr,
>       .set_wptr = jpeg_v2_5_dec_ring_set_wptr,
> -     .parse_cs = jpeg_v2_dec_ring_parse_cs,
> +     .parse_cs = amdgpu_jpeg_dec_parse_cs,
>       .emit_frame_size =
>               SOC15_FLUSH_GPU_TLB_NUM_WREG * 6 +
>               SOC15_FLUSH_GPU_TLB_NUM_REG_WAIT * 8 + @@ -727,7
> +727,7 @@ static const struct amdgpu_ring_funcs
> jpeg_v2_6_dec_ring_vm_funcs = {
>       .get_rptr = jpeg_v2_5_dec_ring_get_rptr,
>       .get_wptr = jpeg_v2_5_dec_ring_get_wptr,
>       .set_wptr = jpeg_v2_5_dec_ring_set_wptr,
> -     .parse_cs = jpeg_v2_dec_ring_parse_cs,
> +     .parse_cs = amdgpu_jpeg_dec_parse_cs,
>       .emit_frame_size =
>               SOC15_FLUSH_GPU_TLB_NUM_WREG * 6 +
>               SOC15_FLUSH_GPU_TLB_NUM_REG_WAIT * 8 + diff --git
> a/drivers/gpu/drm/amd/amdgpu/jpeg_v3_0.c
> b/drivers/gpu/drm/amd/amdgpu/jpeg_v3_0.c
> index a44eb2667664..d1a011c40ba2 100644
> --- a/drivers/gpu/drm/amd/amdgpu/jpeg_v3_0.c
> +++ b/drivers/gpu/drm/amd/amdgpu/jpeg_v3_0.c
> @@ -597,7 +597,7 @@ static const struct amdgpu_ring_funcs
> jpeg_v3_0_dec_ring_vm_funcs = {
>       .get_rptr = jpeg_v3_0_dec_ring_get_rptr,
>       .get_wptr = jpeg_v3_0_dec_ring_get_wptr,
>       .set_wptr = jpeg_v3_0_dec_ring_set_wptr,
> -     .parse_cs = jpeg_v2_dec_ring_parse_cs,
> +     .parse_cs = amdgpu_jpeg_dec_parse_cs,
>       .emit_frame_size =
>               SOC15_FLUSH_GPU_TLB_NUM_WREG * 6 +
>               SOC15_FLUSH_GPU_TLB_NUM_REG_WAIT * 8 + diff --git
> a/drivers/gpu/drm/amd/amdgpu/jpeg_v4_0.c
> b/drivers/gpu/drm/amd/amdgpu/jpeg_v4_0.c
> index da3ee69f1a3b..33db2c1ae6cc 100644
> --- a/drivers/gpu/drm/amd/amdgpu/jpeg_v4_0.c
> +++ b/drivers/gpu/drm/amd/amdgpu/jpeg_v4_0.c
> @@ -762,7 +762,7 @@ static const struct amdgpu_ring_funcs
> jpeg_v4_0_dec_ring_vm_funcs = {
>       .get_rptr = jpeg_v4_0_dec_ring_get_rptr,
>       .get_wptr = jpeg_v4_0_dec_ring_get_wptr,
>       .set_wptr = jpeg_v4_0_dec_ring_set_wptr,
> -     .parse_cs = jpeg_v2_dec_ring_parse_cs,
> +     .parse_cs = amdgpu_jpeg_dec_parse_cs,
>       .emit_frame_size =
>               SOC15_FLUSH_GPU_TLB_NUM_WREG * 6 +
>               SOC15_FLUSH_GPU_TLB_NUM_REG_WAIT * 8 + 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 a78144773fab..aae7328973d1 100644
> --- a/drivers/gpu/drm/amd/amdgpu/jpeg_v4_0_3.c
> +++ b/drivers/gpu/drm/amd/amdgpu/jpeg_v4_0_3.c
> @@ -1177,7 +1177,7 @@ static const struct amdgpu_ring_funcs
> jpeg_v4_0_3_dec_ring_vm_funcs = {
>       .get_rptr = jpeg_v4_0_3_dec_ring_get_rptr,
>       .get_wptr = jpeg_v4_0_3_dec_ring_get_wptr,
>       .set_wptr = jpeg_v4_0_3_dec_ring_set_wptr,
> -     .parse_cs = jpeg_v2_dec_ring_parse_cs,
> +     .parse_cs = amdgpu_jpeg_dec_parse_cs,
>       .emit_frame_size =
>               SOC15_FLUSH_GPU_TLB_NUM_WREG * 6 +
>               SOC15_FLUSH_GPU_TLB_NUM_REG_WAIT * 8 + diff --git
> a/drivers/gpu/drm/amd/amdgpu/jpeg_v4_0_5.c
> b/drivers/gpu/drm/amd/amdgpu/jpeg_v4_0_5.c
> index 481d1a2dbe5a..e0fdbacbde09 100644
> --- a/drivers/gpu/drm/amd/amdgpu/jpeg_v4_0_5.c
> +++ b/drivers/gpu/drm/amd/amdgpu/jpeg_v4_0_5.c
> @@ -807,7 +807,7 @@ static const struct amdgpu_ring_funcs
> jpeg_v4_0_5_dec_ring_vm_funcs = {
>       .get_rptr = jpeg_v4_0_5_dec_ring_get_rptr,
>       .get_wptr = jpeg_v4_0_5_dec_ring_get_wptr,
>       .set_wptr = jpeg_v4_0_5_dec_ring_set_wptr,
> -     .parse_cs = jpeg_v2_dec_ring_parse_cs,
> +     .parse_cs = amdgpu_jpeg_dec_parse_cs,
>       .emit_frame_size =
>               SOC15_FLUSH_GPU_TLB_NUM_WREG * 6 +
>               SOC15_FLUSH_GPU_TLB_NUM_REG_WAIT * 8 + diff --git
> a/drivers/gpu/drm/amd/amdgpu/jpeg_v5_0_0.c
> b/drivers/gpu/drm/amd/amdgpu/jpeg_v5_0_0.c
> index e0a71909252b..1bb09d85eb5b 100644
> --- a/drivers/gpu/drm/amd/amdgpu/jpeg_v5_0_0.c
> +++ b/drivers/gpu/drm/amd/amdgpu/jpeg_v5_0_0.c
> @@ -683,7 +683,7 @@ static const struct amdgpu_ring_funcs
> jpeg_v5_0_0_dec_ring_vm_funcs = {
>       .get_rptr = jpeg_v5_0_0_dec_ring_get_rptr,
>       .get_wptr = jpeg_v5_0_0_dec_ring_get_wptr,
>       .set_wptr = jpeg_v5_0_0_dec_ring_set_wptr,
> -     .parse_cs = jpeg_v2_dec_ring_parse_cs,
> +     .parse_cs = amdgpu_jpeg_dec_parse_cs,
>       .emit_frame_size =
>               SOC15_FLUSH_GPU_TLB_NUM_WREG * 6 +
>               SOC15_FLUSH_GPU_TLB_NUM_REG_WAIT * 8 +
> --
> 2.48.1

Reply via email to