diff mbox series

[4/5] soc: qcom: wcnss_ctrl: Allow reading firmware-name from DT

Message ID 20210312003318.3273536-5-bjorn.andersson@linaro.org
State Accepted
Commit 82ec0c290d1a731a2b33b8a713c5bc96b03fb2d3
Headers show
Series qcom: wcnss: Allow overriding firmware form DT | expand

Commit Message

Bjorn Andersson March 12, 2021, 12:33 a.m. UTC
The WLAN NV firmware blob differs between platforms, and possibly
devices, so add support in the wcnss_ctrl driver for reading the path of
this file from DT in order to allow these files to live in a generic
file system (or linux-firmware).

The new property is optional and the code falls back to the old filename
if the property isn't specified.

Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>
---
 drivers/soc/qcom/wcnss_ctrl.c | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

Comments

Bryan O'Donoghue March 15, 2021, 11:57 a.m. UTC | #1
On 12/03/2021 00:33, Bjorn Andersson wrote:
> The WLAN NV firmware blob differs between platforms, and possibly
> devices, so add support in the wcnss_ctrl driver for reading the path of
> this file from DT in order to allow these files to live in a generic
> file system (or linux-firmware).
> 
> The new property is optional and the code falls back to the old filename
> if the property isn't specified.
> 
> Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>
> ---
>   drivers/soc/qcom/wcnss_ctrl.c | 10 +++++++---
>   1 file changed, 7 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/soc/qcom/wcnss_ctrl.c b/drivers/soc/qcom/wcnss_ctrl.c
> index 358526b9de06..2a06d631e415 100644
> --- a/drivers/soc/qcom/wcnss_ctrl.c
> +++ b/drivers/soc/qcom/wcnss_ctrl.c
> @@ -200,6 +200,7 @@ static int wcnss_download_nv(struct wcnss_ctrl *wcnss, bool *expect_cbc)
>   	struct wcnss_download_nv_req *req;
>   	const struct firmware *fw;
>   	struct device *dev = wcnss->dev;
> +	const char *nvbin = NVBIN_FILE;
>   	const void *data;
>   	ssize_t left;
>   	int ret;
> @@ -208,10 +209,13 @@ static int wcnss_download_nv(struct wcnss_ctrl *wcnss, bool *expect_cbc)
>   	if (!req)
>   		return -ENOMEM;
>   
> -	ret = request_firmware(&fw, NVBIN_FILE, dev);
> +	ret = of_property_read_string(dev->of_node, "firmware-name", &nvbin);
> +	if (ret < 0 && ret != -EINVAL)
> +		goto free_req;
> +
> +	ret = request_firmware(&fw, nvbin, dev);
>   	if (ret < 0) {
> -		dev_err(dev, "Failed to load nv file %s: %d\n",
> -			NVBIN_FILE, ret);
> +		dev_err(dev, "Failed to load nv file %s: %d\n", nvbin, ret);
>   		goto free_req;
>   	}
>   
> 

Tested-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Anibal Limon March 22, 2021, 9:02 p.m. UTC | #2
On 3/11/21 6:33 PM, Bjorn Andersson wrote:
> The WLAN NV firmware blob differs between platforms, and possibly

> devices, so add support in the wcnss_ctrl driver for reading the path of

> this file from DT in order to allow these files to live in a generic

> file system (or linux-firmware).

> 

> The new property is optional and the code falls back to the old filename

> if the property isn't specified.

> 

> Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>

Tested-by: Aníbal Limón <anibal.limon@linaro.org>

> ---

>   drivers/soc/qcom/wcnss_ctrl.c | 10 +++++++---

>   1 file changed, 7 insertions(+), 3 deletions(-)

> 

> diff --git a/drivers/soc/qcom/wcnss_ctrl.c b/drivers/soc/qcom/wcnss_ctrl.c

> index 358526b9de06..2a06d631e415 100644

> --- a/drivers/soc/qcom/wcnss_ctrl.c

> +++ b/drivers/soc/qcom/wcnss_ctrl.c

> @@ -200,6 +200,7 @@ static int wcnss_download_nv(struct wcnss_ctrl *wcnss, bool *expect_cbc)

>   	struct wcnss_download_nv_req *req;

>   	const struct firmware *fw;

>   	struct device *dev = wcnss->dev;

> +	const char *nvbin = NVBIN_FILE;

>   	const void *data;

>   	ssize_t left;

>   	int ret;

> @@ -208,10 +209,13 @@ static int wcnss_download_nv(struct wcnss_ctrl *wcnss, bool *expect_cbc)

>   	if (!req)

>   		return -ENOMEM;

>   

> -	ret = request_firmware(&fw, NVBIN_FILE, dev);

> +	ret = of_property_read_string(dev->of_node, "firmware-name", &nvbin);

> +	if (ret < 0 && ret != -EINVAL)

> +		goto free_req;

> +

> +	ret = request_firmware(&fw, nvbin, dev);

>   	if (ret < 0) {

> -		dev_err(dev, "Failed to load nv file %s: %d\n",

> -			NVBIN_FILE, ret);

> +		dev_err(dev, "Failed to load nv file %s: %d\n", nvbin, ret);

>   		goto free_req;

>   	}

>   

>
diff mbox series

Patch

diff --git a/drivers/soc/qcom/wcnss_ctrl.c b/drivers/soc/qcom/wcnss_ctrl.c
index 358526b9de06..2a06d631e415 100644
--- a/drivers/soc/qcom/wcnss_ctrl.c
+++ b/drivers/soc/qcom/wcnss_ctrl.c
@@ -200,6 +200,7 @@  static int wcnss_download_nv(struct wcnss_ctrl *wcnss, bool *expect_cbc)
 	struct wcnss_download_nv_req *req;
 	const struct firmware *fw;
 	struct device *dev = wcnss->dev;
+	const char *nvbin = NVBIN_FILE;
 	const void *data;
 	ssize_t left;
 	int ret;
@@ -208,10 +209,13 @@  static int wcnss_download_nv(struct wcnss_ctrl *wcnss, bool *expect_cbc)
 	if (!req)
 		return -ENOMEM;
 
-	ret = request_firmware(&fw, NVBIN_FILE, dev);
+	ret = of_property_read_string(dev->of_node, "firmware-name", &nvbin);
+	if (ret < 0 && ret != -EINVAL)
+		goto free_req;
+
+	ret = request_firmware(&fw, nvbin, dev);
 	if (ret < 0) {
-		dev_err(dev, "Failed to load nv file %s: %d\n",
-			NVBIN_FILE, ret);
+		dev_err(dev, "Failed to load nv file %s: %d\n", nvbin, ret);
 		goto free_req;
 	}