2019-11-16 16:08:07 +00:00
|
|
|
From: Christian Lamparter <chunkeey@gmail.com>
|
|
|
|
Date: Sat, 16 Nov 2019 19:25:24 +0100
|
|
|
|
Subject: [PATCH] owl_loader: compatibility patch
|
|
|
|
|
|
|
|
This patch includes OpenWrt specific changes that are
|
|
|
|
not included in the upstream owl-loader.
|
|
|
|
|
|
|
|
This includes a platform data handling changes for ar71xx.
|
|
|
|
|
|
|
|
Signed-off-by: Christian Lamparter <chunkeey@gmail.com>
|
|
|
|
|
|
|
|
--- a/drivers/net/wireless/ath/ath9k/ath9k_pci_owl_loader.c
|
|
|
|
+++ b/drivers/net/wireless/ath/ath9k/ath9k_pci_owl_loader.c
|
2020-03-13 13:26:51 +00:00
|
|
|
@@ -103,6 +103,7 @@ static void owl_fw_cb(const struct firmw
|
2019-11-16 16:08:07 +00:00
|
|
|
{
|
|
|
|
struct pci_dev *pdev = (struct pci_dev *)context;
|
|
|
|
struct owl_ctx *ctx = (struct owl_ctx *)pci_get_drvdata(pdev);
|
|
|
|
+ struct ath9k_platform_data *pdata = dev_get_platdata(&pdev->dev);
|
|
|
|
struct pci_bus *bus;
|
|
|
|
|
|
|
|
complete(&ctx->eeprom_load);
|
2020-03-13 13:26:51 +00:00
|
|
|
@@ -118,6 +119,16 @@ static void owl_fw_cb(const struct firmw
|
2019-11-16 16:08:07 +00:00
|
|
|
goto release;
|
|
|
|
}
|
|
|
|
|
|
|
|
+ if (pdata) {
|
|
|
|
+ memcpy(pdata->eeprom_data, fw->data, fw->size);
|
|
|
|
+
|
|
|
|
+ /*
|
|
|
|
+ * eeprom has been successfully loaded - pass the data to ath9k
|
|
|
|
+ * but remove the eeprom_name, so it doesn't try to load it too.
|
|
|
|
+ */
|
|
|
|
+ pdata->eeprom_name = NULL;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
if (ath9k_pci_fixup(pdev, (const u16 *)fw->data, fw->size))
|
|
|
|
goto release;
|
|
|
|
|
2020-03-13 13:26:51 +00:00
|
|
|
@@ -137,8 +148,14 @@ release:
|
2019-11-16 16:08:07 +00:00
|
|
|
static const char *owl_get_eeprom_name(struct pci_dev *pdev)
|
|
|
|
{
|
|
|
|
struct device *dev = &pdev->dev;
|
|
|
|
+ struct ath9k_platform_data *pdata;
|
|
|
|
char *eeprom_name;
|
|
|
|
|
|
|
|
+ /* try the existing platform data first */
|
|
|
|
+ pdata = dev_get_platdata(dev);
|
|
|
|
+ if (pdata && pdata->eeprom_name)
|
|
|
|
+ return pdata->eeprom_name;
|
|
|
|
+
|
|
|
|
dev_dbg(dev, "using auto-generated eeprom filename\n");
|
|
|
|
|
|
|
|
eeprom_name = devm_kzalloc(dev, EEPROM_FILENAME_LEN, GFP_KERNEL);
|