> -----Original Message----- > From: amd-gfx [mailto:amd-gfx-bounces at lists.freedesktop.org] On Behalf > Of Junwei Zhang > Sent: Friday, July 14, 2017 6:42 AM > To: amd-gfx at lists.freedesktop.org > Cc: Zhang, Jerry > Subject: [PATCH 2/4] drm/amdgpu: add init microcode function for psp v10 > > Signed-off-by: Junwei Zhang <Jerry.Zhang at amd.com> Reviewed-by: Alex Deucher <alexander.deucher at amd.com> > --- > drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c | 1 + > drivers/gpu/drm/amd/amdgpu/psp_v10_0.c | 46 > +++++++++++++++++++++++++++++++++ > drivers/gpu/drm/amd/amdgpu/psp_v10_0.h | 1 + > 3 files changed, 48 insertions(+) > > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c > b/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c > index 71ce3ee..dc95633 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c > @@ -63,6 +63,7 @@ static int psp_sw_init(void *handle) > psp->smu_reload_quirk = psp_v3_1_smu_reload_quirk; > break; > case CHIP_RAVEN: > + psp->init_microcode = psp_v10_0_init_microcode; > psp->prep_cmd_buf = psp_v10_0_prep_cmd_buf; > psp->ring_init = psp_v10_0_ring_init; > psp->cmd_submit = psp_v10_0_cmd_submit; > diff --git a/drivers/gpu/drm/amd/amdgpu/psp_v10_0.c > b/drivers/gpu/drm/amd/amdgpu/psp_v10_0.c > index 328c6f5..7513f9c 100644 > --- a/drivers/gpu/drm/amd/amdgpu/psp_v10_0.c > +++ b/drivers/gpu/drm/amd/amdgpu/psp_v10_0.c > @@ -87,6 +87,52 @@ > return 0; > } > > +int psp_v10_0_init_microcode(struct psp_context *psp) > +{ > + struct amdgpu_device *adev = psp->adev; > + const char *chip_name; > + char fw_name[30]; > + int err = 0; > + const struct psp_firmware_header_v1_0 *hdr; > + > + DRM_DEBUG("\n"); > + > + switch (adev->asic_type) { > + case CHIP_RAVEN: > + chip_name = "raven"; > + break; > + default: BUG(); > + } > + > + snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_asd.bin", > chip_name); > + err = request_firmware(&adev->psp.asd_fw, fw_name, adev->dev); > + if (err) > + goto out; > + > + err = amdgpu_ucode_validate(adev->psp.asd_fw); > + if (err) > + goto out; > + > + hdr = (const struct psp_firmware_header_v1_0 *)adev- > >psp.asd_fw->data; > + adev->psp.asd_fw_version = le32_to_cpu(hdr- > >header.ucode_version); > + adev->psp.asd_feature_version = le32_to_cpu(hdr- > >ucode_feature_version); > + adev->psp.asd_ucode_size = le32_to_cpu(hdr- > >header.ucode_size_bytes); > + adev->psp.asd_start_addr = (uint8_t *)hdr + > + le32_to_cpu(hdr- > >header.ucode_array_offset_bytes); > + > + return 0; > +out: > + if (err) { > + dev_err(adev->dev, > + "psp v10.0: Failed to load firmware \"%s\"\n", > + fw_name); > + release_firmware(adev->psp.asd_fw); > + adev->psp.asd_fw = NULL; > + } > + > + return err; > +} > + > int psp_v10_0_prep_cmd_buf(struct amdgpu_firmware_info *ucode, struct > psp_gfx_cmd_resp *cmd) > { > int ret; > diff --git a/drivers/gpu/drm/amd/amdgpu/psp_v10_0.h > b/drivers/gpu/drm/amd/amdgpu/psp_v10_0.h > index 2022b7b..2f5a314e 100644 > --- a/drivers/gpu/drm/amd/amdgpu/psp_v10_0.h > +++ b/drivers/gpu/drm/amd/amdgpu/psp_v10_0.h > @@ -27,6 +27,7 @@ > > #include "amdgpu_psp.h" > > +extern int psp_v10_0_init_microcode(struct psp_context *psp); > extern int psp_v10_0_prep_cmd_buf(struct amdgpu_firmware_info > *ucode, > struct psp_gfx_cmd_resp *cmd); > extern int psp_v10_0_ring_init(struct psp_context *psp, > -- > 1.9.1 > > _______________________________________________ > amd-gfx mailing list > amd-gfx at lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/amd-gfx