Commit d8214c7a authored by David S. Miller's avatar David S. Miller

Merge branch 'ipa-fw-names'

Alex Elder says:

====================
net: ipa: allow different firmware names

Add the ability to define a "firmware-name" property in the IPA DT
node, specifying an alternate name to use for the firmware file.
Used only if the AP (Trust Zone) does early IPA initialization.
====================
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parents fb32856b 9ce062ba
......@@ -125,6 +125,14 @@ properties:
the firmware passed to Trust Zone for authentication. Required
when Trust Zone (not the modem) performs early initialization.
firmware-name:
$ref: /schemas/types.yaml#/definitions/string
description:
If present, name (or relative path) of the file within the
firmware search path containing the firmware image used when
initializing IPA hardware. Optional, and only used when
Trust Zone performs early initialization.
required:
- compatible
- iommus
......@@ -134,12 +142,23 @@ required:
- interconnects
- qcom,smem-states
# Either modem-init is present, or memory-region must be present.
oneOf:
- required:
- modem-init
- required:
- memory-region
# If memory-region is present, firmware-name may optionally be present.
# But if modem-init is present, firmware-name must not be present.
if:
required:
- modem-init
then:
not:
required:
- firmware-name
additionalProperties: false
examples:
......
......@@ -67,7 +67,7 @@
*/
/* The name of the GSI firmware file relative to /lib/firmware */
#define IPA_FWS_PATH "ipa_fws.mdt"
#define IPA_FW_PATH_DEFAULT "ipa_fws.mdt"
#define IPA_PAS_ID 15
/* Shift of 19.2 MHz timestamp to achieve lower resolution timestamps */
......@@ -517,6 +517,7 @@ static int ipa_firmware_load(struct device *dev)
struct device_node *node;
struct resource res;
phys_addr_t phys;
const char *path;
ssize_t size;
void *virt;
int ret;
......@@ -534,9 +535,17 @@ static int ipa_firmware_load(struct device *dev)
return ret;
}
ret = request_firmware(&fw, IPA_FWS_PATH, dev);
/* Use name from DTB if specified; use default for *any* error */
ret = of_property_read_string(dev->of_node, "firmware-name", &path);
if (ret) {
dev_err(dev, "error %d requesting \"%s\"\n", ret, IPA_FWS_PATH);
dev_dbg(dev, "error %d getting \"firmware-name\" resource\n",
ret);
path = IPA_FW_PATH_DEFAULT;
}
ret = request_firmware(&fw, path, dev);
if (ret) {
dev_err(dev, "error %d requesting \"%s\"\n", ret, path);
return ret;
}
......@@ -549,13 +558,11 @@ static int ipa_firmware_load(struct device *dev)
goto out_release_firmware;
}
ret = qcom_mdt_load(dev, fw, IPA_FWS_PATH, IPA_PAS_ID,
virt, phys, size, NULL);
ret = qcom_mdt_load(dev, fw, path, IPA_PAS_ID, virt, phys, size, NULL);
if (ret)
dev_err(dev, "error %d loading \"%s\"\n", ret, IPA_FWS_PATH);
dev_err(dev, "error %d loading \"%s\"\n", ret, path);
else if ((ret = qcom_scm_pas_auth_and_reset(IPA_PAS_ID)))
dev_err(dev, "error %d authenticating \"%s\"\n", ret,
IPA_FWS_PATH);
dev_err(dev, "error %d authenticating \"%s\"\n", ret, path);
memunmap(virt);
out_release_firmware:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment