From: Christian Lamparter 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 --- a/drivers/net/wireless/ath/ath9k/ath9k_pci_owl_loader.c +++ b/drivers/net/wireless/ath/ath9k/ath9k_pci_owl_loader.c @@ -103,6 +103,7 @@ static void owl_fw_cb(const struct firmw { 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); @@ -118,6 +119,16 @@ static void owl_fw_cb(const struct firmw 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; @@ -137,8 +148,14 @@ release: 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);