[PATCH 01/11] drm/amdgpu: Add ucode support for DMCUB
Harry Wentland
hwentlan at amd.com
Thu Oct 31 15:51:28 UTC 2019
On 2019-10-31 11:40 a.m., Li, Roman wrote:
> On Behalf Of: Hersen Wu
> Series is:
> Reviewed-by: Hersen Wu <hersenxs.wu at amd.com>
I only managed to skim the patches but it looks reasonable.
Series is
Acked-by: Harry Wentland <harry.wentland at amd.com>
Harry
>
> -----Original Message-----
> From: amd-gfx <amd-gfx-bounces at lists.freedesktop.org> On Behalf Of Nicholas Kazlauskas
> Sent: Monday, October 28, 2019 10:08 AM
> To: amd-gfx at lists.freedesktop.org
> Cc: Kazlauskas, Nicholas <Nicholas.Kazlauskas at amd.com>
> Subject: [PATCH 01/11] drm/amdgpu: Add ucode support for DMCUB
>
> The DMCUB is a secondary DMCU (Display MicroController Unit) that has its own separate firmware. It's required for DMCU support on Renoir.
>
> Signed-off-by: Nicholas Kazlauskas <nicholas.kazlauskas at amd.com>
> ---
> drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.c | 11 ++++++++++- drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.h | 9 +++++++++
> 2 files changed, 19 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.c
> index 833fc4b68940..9ef312428231 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.c
> @@ -447,6 +447,7 @@ static int amdgpu_ucode_init_single_fw(struct amdgpu_device *adev,
> const struct common_firmware_header *header = NULL;
> const struct gfx_firmware_header_v1_0 *cp_hdr = NULL;
> const struct dmcu_firmware_header_v1_0 *dmcu_hdr = NULL;
> + const struct dmcub_firmware_header_v1_0 *dmcub_hdr = NULL;
>
> if (NULL == ucode->fw)
> return 0;
> @@ -460,6 +461,7 @@ static int amdgpu_ucode_init_single_fw(struct amdgpu_device *adev,
> header = (const struct common_firmware_header *)ucode->fw->data;
> cp_hdr = (const struct gfx_firmware_header_v1_0 *)ucode->fw->data;
> dmcu_hdr = (const struct dmcu_firmware_header_v1_0 *)ucode->fw->data;
> + dmcub_hdr = (const struct dmcub_firmware_header_v1_0
> +*)ucode->fw->data;
>
> if (adev->firmware.load_type != AMDGPU_FW_LOAD_PSP ||
> (ucode->ucode_id != AMDGPU_UCODE_ID_CP_MEC1 && @@ -470,7 +472,8 @@ static int amdgpu_ucode_init_single_fw(struct amdgpu_device *adev,
> ucode->ucode_id != AMDGPU_UCODE_ID_RLC_RESTORE_LIST_GPM_MEM &&
> ucode->ucode_id != AMDGPU_UCODE_ID_RLC_RESTORE_LIST_SRM_MEM &&
> ucode->ucode_id != AMDGPU_UCODE_ID_DMCU_ERAM &&
> - ucode->ucode_id != AMDGPU_UCODE_ID_DMCU_INTV)) {
> + ucode->ucode_id != AMDGPU_UCODE_ID_DMCU_INTV &&
> + ucode->ucode_id != AMDGPU_UCODE_ID_DMCUB)) {
> ucode->ucode_size = le32_to_cpu(header->ucode_size_bytes);
>
> memcpy(ucode->kaddr, (void *)((uint8_t *)ucode->fw->data + @@ -506,6 +509,12 @@ static int amdgpu_ucode_init_single_fw(struct amdgpu_device *adev,
> le32_to_cpu(header->ucode_array_offset_bytes) +
> le32_to_cpu(dmcu_hdr->intv_offset_bytes)),
> ucode->ucode_size);
> + } else if (ucode->ucode_id == AMDGPU_UCODE_ID_DMCUB) {
> + ucode->ucode_size = le32_to_cpu(dmcub_hdr->inst_const_bytes);
> + memcpy(ucode->kaddr,
> + (void *)((uint8_t *)ucode->fw->data +
> + le32_to_cpu(header->ucode_array_offset_bytes)),
> + ucode->ucode_size);
> } else if (ucode->ucode_id == AMDGPU_UCODE_ID_RLC_RESTORE_LIST_CNTL) {
> ucode->ucode_size = adev->gfx.rlc.save_restore_list_cntl_size_bytes;
> memcpy(ucode->kaddr, adev->gfx.rlc.save_restore_list_cntl,
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.h
> index 410587b950f3..eaf2d5b9c92f 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.h
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.h
> @@ -251,6 +251,13 @@ struct dmcu_firmware_header_v1_0 {
> uint32_t intv_size_bytes; /* size of interrupt vectors, in bytes */ };
>
> +/* version_major=1, version_minor=0 */
> +struct dmcub_firmware_header_v1_0 {
> + struct common_firmware_header header;
> + uint32_t inst_const_bytes; /* size of instruction region, in bytes */
> + uint32_t bss_data_bytes; /* size of bss/data region, in bytes */ };
> +
> /* header is fixed size */
> union amdgpu_firmware_header {
> struct common_firmware_header common;
> @@ -268,6 +275,7 @@ union amdgpu_firmware_header {
> struct sdma_firmware_header_v1_1 sdma_v1_1;
> struct gpu_info_firmware_header_v1_0 gpu_info;
> struct dmcu_firmware_header_v1_0 dmcu;
> + struct dmcub_firmware_header_v1_0 dmcub;
> uint8_t raw[0x100];
> };
>
> @@ -307,6 +315,7 @@ enum AMDGPU_UCODE_ID {
> AMDGPU_UCODE_ID_DMCU_INTV,
> AMDGPU_UCODE_ID_VCN0_RAM,
> AMDGPU_UCODE_ID_VCN1_RAM,
> + AMDGPU_UCODE_ID_DMCUB,
> AMDGPU_UCODE_ID_MAXIMUM,
> };
>
> --
> 2.20.1
>
> _______________________________________________
> amd-gfx mailing list
> amd-gfx at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/amd-gfx
>
More information about the amd-gfx
mailing list