[Mesa-dev] [PATCH 131/140] radeon/uvd: add uvd soc15 register
Christian König
deathsimple at vodafone.de
Tue Mar 21 06:43:43 UTC 2017
Am 20.03.2017 um 23:49 schrieb Marek Olšák:
> From: Leo Liu <leo.liu at amd.com>
>
> Signed-off-by: Leo Liu <leo.liu at amd.com>
> Acked-by: Alex Deucher <alexander.deucher at amd.com>
Reviewed-by: Christian König <christian.koenig at amd.com>
> ---
> src/gallium/drivers/radeon/radeon_uvd.c | 26 ++++++++++++++++++++++----
> src/gallium/drivers/radeon/radeon_uvd.h | 5 +++++
> 2 files changed, 27 insertions(+), 4 deletions(-)
>
> diff --git a/src/gallium/drivers/radeon/radeon_uvd.c b/src/gallium/drivers/radeon/radeon_uvd.c
> index c1746f8..7c6ea93 100644
> --- a/src/gallium/drivers/radeon/radeon_uvd.c
> +++ b/src/gallium/drivers/radeon/radeon_uvd.c
> @@ -91,6 +91,12 @@ struct ruvd_decoder {
> bool use_legacy;
> struct rvid_buffer ctx;
> struct rvid_buffer sessionctx;
> + struct {
> + unsigned data0;
> + unsigned data1;
> + unsigned cmd;
> + unsigned cntl;
> + } reg;
> };
>
> /* flush IB to the hardware */
> @@ -120,14 +126,14 @@ static void send_cmd(struct ruvd_decoder *dec, unsigned cmd,
> uint64_t addr;
> addr = dec->ws->buffer_get_virtual_address(buf);
> addr = addr + off;
> - set_reg(dec, RUVD_GPCOM_VCPU_DATA0, addr);
> - set_reg(dec, RUVD_GPCOM_VCPU_DATA1, addr >> 32);
> + set_reg(dec, dec->reg.data0, addr);
> + set_reg(dec, dec->reg.data1, addr >> 32);
> } else {
> off += dec->ws->buffer_get_reloc_offset(buf);
> set_reg(dec, RUVD_GPCOM_VCPU_DATA0, off);
> set_reg(dec, RUVD_GPCOM_VCPU_DATA1, reloc_idx * 4);
> }
> - set_reg(dec, RUVD_GPCOM_VCPU_CMD, cmd << 1);
> + set_reg(dec, dec->reg.cmd, cmd << 1);
> }
>
> /* do the codec needs an IT buffer ?*/
> @@ -1150,7 +1156,7 @@ static void ruvd_end_frame(struct pipe_video_codec *decoder,
> if (have_it(dec))
> send_cmd(dec, RUVD_CMD_ITSCALING_TABLE_BUFFER, msg_fb_it_buf->res->buf,
> FB_BUFFER_OFFSET + dec->fb_size, RADEON_USAGE_READ, RADEON_DOMAIN_GTT);
> - set_reg(dec, RUVD_ENGINE_CNTL, 1);
> + set_reg(dec, dec->reg.cntl, 1);
>
> flush(dec, RADEON_FLUSH_ASYNC);
> next_buffer(dec);
> @@ -1284,6 +1290,18 @@ struct pipe_video_codec *ruvd_create_decoder(struct pipe_context *context,
> rvid_clear_buffer(context, &dec->sessionctx);
> }
>
> + if (info.family >= CHIP_VEGA10) {
> + dec->reg.data0 = RUVD_GPCOM_VCPU_DATA0_SOC15;
> + dec->reg.data1 = RUVD_GPCOM_VCPU_DATA1_SOC15;
> + dec->reg.cmd = RUVD_GPCOM_VCPU_CMD_SOC15;
> + dec->reg.cntl = RUVD_ENGINE_CNTL_SOC15;
> + } else {
> + dec->reg.data0 = RUVD_GPCOM_VCPU_DATA0;
> + dec->reg.data1 = RUVD_GPCOM_VCPU_DATA1;
> + dec->reg.cmd = RUVD_GPCOM_VCPU_CMD;
> + dec->reg.cntl = RUVD_ENGINE_CNTL;
> + }
> +
> map_msg_fb_it_buf(dec);
> dec->msg->size = sizeof(*dec->msg);
> dec->msg->msg_type = RUVD_MSG_CREATE;
> diff --git a/src/gallium/drivers/radeon/radeon_uvd.h b/src/gallium/drivers/radeon/radeon_uvd.h
> index e3f8504..a5af9ea 100644
> --- a/src/gallium/drivers/radeon/radeon_uvd.h
> +++ b/src/gallium/drivers/radeon/radeon_uvd.h
> @@ -56,6 +56,11 @@
> #define RUVD_GPCOM_VCPU_DATA1 0xEF14
> #define RUVD_ENGINE_CNTL 0xEF18
>
> +#define RUVD_GPCOM_VCPU_CMD_SOC15 0x2070c
> +#define RUVD_GPCOM_VCPU_DATA0_SOC15 0x20710
> +#define RUVD_GPCOM_VCPU_DATA1_SOC15 0x20714
> +#define RUVD_ENGINE_CNTL_SOC15 0x20718
> +
> /* UVD commands to VCPU */
> #define RUVD_CMD_MSG_BUFFER 0x00000000
> #define RUVD_CMD_DPB_BUFFER 0x00000001
More information about the mesa-dev
mailing list