Skip to content

Commit

Permalink
Merge branch 'ipa-fw-names'
Browse files Browse the repository at this point in the history
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: David S. Miller <davem@davemloft.net>
  • Loading branch information
David S. Miller committed Apr 16, 2021
2 parents fb32856 + 9ce062b commit d8214c7
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 8 deletions.
19 changes: 19 additions & 0 deletions Documentation/devicetree/bindings/net/qcom,ipa.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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:
Expand Down
23 changes: 15 additions & 8 deletions drivers/net/ipa/ipa_main.c
Original file line number Diff line number Diff line change
Expand Up @@ -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 */
Expand Down Expand Up @@ -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;
Expand All @@ -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;
}

Expand All @@ -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:
Expand Down

0 comments on commit d8214c7

Please sign in to comment.