Declare isp firmware file isp_4_1_1.bin required by isp4.1.1 device. Suggested-by: Alexey Zagorodnikov <xglo...@gmail.com> Signed-off-by: Pratap Nirujogi <pratap.niruj...@amd.com> --- drivers/gpu/drm/amd/amdgpu/amdgpu_isp.c | 22 +++++++++------------- drivers/gpu/drm/amd/amdgpu/amdgpu_isp.h | 2 ++ drivers/gpu/drm/amd/amdgpu/isp_v4_1_0.c | 12 +++++++++++- drivers/gpu/drm/amd/amdgpu/isp_v4_1_0.h | 2 +- drivers/gpu/drm/amd/amdgpu/isp_v4_1_1.c | 14 +++++++++++++- drivers/gpu/drm/amd/amdgpu/isp_v4_1_1.h | 2 +- 6 files changed, 37 insertions(+), 17 deletions(-)
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_isp.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_isp.c index 9cddbf50442a..90af35ee8f6e 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_isp.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_isp.c @@ -68,7 +68,7 @@ static int isp_hw_fini(struct amdgpu_ip_block *ip_block) return -ENODEV; } -static int isp_load_fw_by_psp(struct amdgpu_device *adev) +int isp_load_fw_by_psp(struct amdgpu_device *adev) { const struct common_firmware_header *hdr; char ucode_prefix[10]; @@ -80,7 +80,7 @@ static int isp_load_fw_by_psp(struct amdgpu_device *adev) /* read isp fw */ r = amdgpu_ucode_request(adev, &adev->isp.fw, AMDGPU_UCODE_OPTIONAL, - "amdgpu/%s.bin", ucode_prefix); + "amdgpu/%s.bin", ucode_prefix); if (r) { amdgpu_ucode_release(&adev->isp.fw); return r; @@ -103,27 +103,23 @@ static int isp_early_init(struct amdgpu_ip_block *ip_block) struct amdgpu_device *adev = ip_block->adev; struct amdgpu_isp *isp = &adev->isp; + int r; + + isp->adev = adev; + isp->parent = adev->dev; switch (amdgpu_ip_version(adev, ISP_HWIP, 0)) { case IP_VERSION(4, 1, 0): - isp_v4_1_0_set_isp_funcs(isp); + r = isp_v4_1_0_set_isp_funcs(isp); break; case IP_VERSION(4, 1, 1): - isp_v4_1_1_set_isp_funcs(isp); + r = isp_v4_1_1_set_isp_funcs(isp); break; default: return -EINVAL; } - isp->adev = adev; - isp->parent = adev->dev; - - if (isp_load_fw_by_psp(adev)) { - DRM_DEBUG_DRIVER("%s: isp fw load failed\n", __func__); - return -ENOENT; - } - - return 0; + return r; } static bool isp_is_idle(struct amdgpu_ip_block *ip_block) diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_isp.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_isp.h index d6f4ffa4c97c..36750123ed46 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_isp.h +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_isp.h @@ -57,4 +57,6 @@ struct amdgpu_isp { extern const struct amdgpu_ip_block_version isp_v4_1_0_ip_block; extern const struct amdgpu_ip_block_version isp_v4_1_1_ip_block; +int isp_load_fw_by_psp(struct amdgpu_device *adev); + #endif /* __AMDGPU_ISP_H__ */ diff --git a/drivers/gpu/drm/amd/amdgpu/isp_v4_1_0.c b/drivers/gpu/drm/amd/amdgpu/isp_v4_1_0.c index 0027a639c7e6..926947a612a4 100644 --- a/drivers/gpu/drm/amd/amdgpu/isp_v4_1_0.c +++ b/drivers/gpu/drm/amd/amdgpu/isp_v4_1_0.c @@ -185,7 +185,17 @@ static const struct isp_funcs isp_v4_1_0_funcs = { .hw_fini = isp_v4_1_0_hw_fini, }; -void isp_v4_1_0_set_isp_funcs(struct amdgpu_isp *isp) +int isp_v4_1_0_set_isp_funcs(struct amdgpu_isp *isp) { + struct amdgpu_device *adev = isp->adev; + isp->funcs = &isp_v4_1_0_funcs; + + /* load isp firmware */ + if (isp_load_fw_by_psp(adev)) { + drm_err(&adev->ddev, "isp fw load failed\n"); + return -ENOENT; + } + + return 0; } diff --git a/drivers/gpu/drm/amd/amdgpu/isp_v4_1_0.h b/drivers/gpu/drm/amd/amdgpu/isp_v4_1_0.h index 4d239198edd0..5e43ba064708 100644 --- a/drivers/gpu/drm/amd/amdgpu/isp_v4_1_0.h +++ b/drivers/gpu/drm/amd/amdgpu/isp_v4_1_0.h @@ -45,6 +45,6 @@ #define ISP410_GPIO_SENSOR_OFFSET 0x6613C #define ISP410_GPIO_SENSOR_SIZE 0x54 -void isp_v4_1_0_set_isp_funcs(struct amdgpu_isp *isp); +int isp_v4_1_0_set_isp_funcs(struct amdgpu_isp *isp); #endif diff --git a/drivers/gpu/drm/amd/amdgpu/isp_v4_1_1.c b/drivers/gpu/drm/amd/amdgpu/isp_v4_1_1.c index a887df520414..1e48d94e8706 100644 --- a/drivers/gpu/drm/amd/amdgpu/isp_v4_1_1.c +++ b/drivers/gpu/drm/amd/amdgpu/isp_v4_1_1.c @@ -29,6 +29,8 @@ #include "amdgpu.h" #include "isp_v4_1_1.h" +MODULE_FIRMWARE("amdgpu/isp_4_1_1.bin"); + #define ISP_PERFORMANCE_STATE_LOW 0 #define ISP_PERFORMANCE_STATE_HIGH 1 @@ -369,7 +371,17 @@ static const struct isp_funcs isp_v4_1_1_funcs = { .hw_fini = isp_v4_1_1_hw_fini, }; -void isp_v4_1_1_set_isp_funcs(struct amdgpu_isp *isp) +int isp_v4_1_1_set_isp_funcs(struct amdgpu_isp *isp) { + struct amdgpu_device *adev = isp->adev; + isp->funcs = &isp_v4_1_1_funcs; + + /* load isp firmware */ + if (isp_load_fw_by_psp(adev)) { + drm_err(&adev->ddev, "isp fw load failed\n"); + return -ENOENT; + } + + return 0; } diff --git a/drivers/gpu/drm/amd/amdgpu/isp_v4_1_1.h b/drivers/gpu/drm/amd/amdgpu/isp_v4_1_1.h index fe45d70d87f1..b221d8b81983 100644 --- a/drivers/gpu/drm/amd/amdgpu/isp_v4_1_1.h +++ b/drivers/gpu/drm/amd/amdgpu/isp_v4_1_1.h @@ -44,6 +44,6 @@ #define ISP411_GPIO_SENSOR_OFFSET 0x6613C #define ISP411_GPIO_SENSOR_SIZE 0x54 -void isp_v4_1_1_set_isp_funcs(struct amdgpu_isp *isp); +int isp_v4_1_1_set_isp_funcs(struct amdgpu_isp *isp); #endif -- 2.43.0