mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-28 11:18:45 +07:00
drm/msm: support firmware-name for zap fw (v2)
Since zap firmware can be device specific, allow for a firmware-name property in the zap node to specify which firmware to load, similarly to the scheme used for dsp/wifi/etc. v2: only need a single error msg when we can't load from firmware-name specified path, and fix comment [Bjorn A.] Signed-off-by: Rob Clark <robdclark@chromium.org> Reviewed-by: Jordan Crouse <jcrouse@codeaurora.org> Reviewed-by: Bjorn Andersson <bjorn.andersson@linaro.org>
This commit is contained in:
parent
d4bbcade0e
commit
6a0dea02c2
@ -26,6 +26,7 @@ static int zap_shader_load_mdt(struct msm_gpu *gpu, const char *fwname,
|
||||
{
|
||||
struct device *dev = &gpu->pdev->dev;
|
||||
const struct firmware *fw;
|
||||
const char *signed_fwname = NULL;
|
||||
struct device_node *np, *mem_np;
|
||||
struct resource r;
|
||||
phys_addr_t mem_phys;
|
||||
@ -58,8 +59,31 @@ static int zap_shader_load_mdt(struct msm_gpu *gpu, const char *fwname,
|
||||
|
||||
mem_phys = r.start;
|
||||
|
||||
/* Request the MDT file for the firmware */
|
||||
fw = adreno_request_fw(to_adreno_gpu(gpu), fwname);
|
||||
/*
|
||||
* Check for a firmware-name property. This is the new scheme
|
||||
* to handle firmware that may be signed with device specific
|
||||
* keys, allowing us to have a different zap fw path for different
|
||||
* devices.
|
||||
*
|
||||
* If the firmware-name property is found, we bypass the
|
||||
* adreno_request_fw() mechanism, because we don't need to handle
|
||||
* the /lib/firmware/qcom/* vs /lib/firmware/* case.
|
||||
*
|
||||
* If the firmware-name property is not found, for backwards
|
||||
* compatibility we fall back to the fwname from the gpulist
|
||||
* table.
|
||||
*/
|
||||
of_property_read_string_index(np, "firmware-name", 0, &signed_fwname);
|
||||
if (signed_fwname) {
|
||||
fwname = signed_fwname;
|
||||
ret = request_firmware_direct(&fw, fwname, gpu->dev->dev);
|
||||
if (ret)
|
||||
fw = ERR_PTR(ret);
|
||||
} else {
|
||||
/* Request the MDT file from the default location: */
|
||||
fw = adreno_request_fw(to_adreno_gpu(gpu), fwname);
|
||||
}
|
||||
|
||||
if (IS_ERR(fw)) {
|
||||
DRM_DEV_ERROR(dev, "Unable to load %s\n", fwname);
|
||||
return PTR_ERR(fw);
|
||||
@ -95,7 +119,7 @@ static int zap_shader_load_mdt(struct msm_gpu *gpu, const char *fwname,
|
||||
* not. But since we've already gotten through adreno_request_fw()
|
||||
* we know which of the two cases it is:
|
||||
*/
|
||||
if (to_adreno_gpu(gpu)->fwloc == FW_LOCATION_LEGACY) {
|
||||
if (signed_fwname || (to_adreno_gpu(gpu)->fwloc == FW_LOCATION_LEGACY)) {
|
||||
ret = qcom_mdt_load(dev, fw, fwname, pasid,
|
||||
mem_region, mem_phys, mem_size, NULL);
|
||||
} else {
|
||||
|
Loading…
Reference in New Issue
Block a user