Skip to content

Commit 25db749

Browse files
committed
brcmfmac: pcie: Load and provide TxCap blobs
These blobs are named .txcap_blob, and exist alongside the existing .clm_blob files. Use the existing firmware machinery to provide them to the core. Reviewed-by: Linus Walleij <[email protected]> Signed-off-by: Hector Martin <[email protected]>
1 parent c9a300b commit 25db749

1 file changed

Lines changed: 13 additions & 0 deletions

File tree

  • drivers/net/wireless/broadcom/brcm80211/brcmfmac

drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@ MODULE_FIRMWARE(BRCMF_FW_DEFAULT_PATH "brcmfmac*-pcie.*.txt");
7676
/* per-board firmware binaries */
7777
MODULE_FIRMWARE(BRCMF_FW_DEFAULT_PATH "brcmfmac*-pcie.*.bin");
7878
MODULE_FIRMWARE(BRCMF_FW_DEFAULT_PATH "brcmfmac*-pcie.*.clm_blob");
79+
MODULE_FIRMWARE(BRCMF_FW_DEFAULT_PATH "brcmfmac*-pcie.*.txcap_blob");
7980

8081
static const struct brcmf_firmware_mapping brcmf_pcie_fwnames[] = {
8182
BRCMF_FW_ENTRY(BRCM_CC_43602_CHIP_ID, 0xFFFFFFFF, 43602),
@@ -329,7 +330,9 @@ struct brcmf_pciedev_info {
329330
char fw_name[BRCMF_FW_NAME_LEN];
330331
char nvram_name[BRCMF_FW_NAME_LEN];
331332
char clm_name[BRCMF_FW_NAME_LEN];
333+
char txcap_name[BRCMF_FW_NAME_LEN];
332334
const struct firmware *clm_fw;
335+
const struct firmware *txcap_fw;
333336
const struct brcmf_pcie_reginfo *reginfo;
334337
void __iomem *regs;
335338
void __iomem *tcm;
@@ -1520,6 +1523,10 @@ static int brcmf_pcie_get_blob(struct device *dev, const struct firmware **fw,
15201523
*fw = devinfo->clm_fw;
15211524
devinfo->clm_fw = NULL;
15221525
break;
1526+
case BRCMF_BLOB_TXCAP:
1527+
*fw = devinfo->txcap_fw;
1528+
devinfo->txcap_fw = NULL;
1529+
break;
15231530
default:
15241531
return -ENOENT;
15251532
}
@@ -2109,6 +2116,7 @@ static int brcmf_pcie_read_otp(struct brcmf_pciedev_info *devinfo)
21092116
#define BRCMF_PCIE_FW_CODE 0
21102117
#define BRCMF_PCIE_FW_NVRAM 1
21112118
#define BRCMF_PCIE_FW_CLM 2
2119+
#define BRCMF_PCIE_FW_TXCAP 3
21122120

21132121
static void brcmf_pcie_setup(struct device *dev, int ret,
21142122
struct brcmf_fw_request *fwreq)
@@ -2135,6 +2143,7 @@ static void brcmf_pcie_setup(struct device *dev, int ret,
21352143
nvram = fwreq->items[BRCMF_PCIE_FW_NVRAM].nv_data.data;
21362144
nvram_len = fwreq->items[BRCMF_PCIE_FW_NVRAM].nv_data.len;
21372145
devinfo->clm_fw = fwreq->items[BRCMF_PCIE_FW_CLM].binary;
2146+
devinfo->txcap_fw = fwreq->items[BRCMF_PCIE_FW_TXCAP].binary;
21382147
kfree(fwreq);
21392148

21402149
ret = brcmf_chip_get_raminfo(devinfo->ci);
@@ -2216,6 +2225,7 @@ brcmf_pcie_prepare_fw_request(struct brcmf_pciedev_info *devinfo)
22162225
{ ".bin", devinfo->fw_name },
22172226
{ ".txt", devinfo->nvram_name },
22182227
{ ".clm_blob", devinfo->clm_name },
2228+
{ ".txcap_blob", devinfo->txcap_name },
22192229
};
22202230

22212231
fwreq = brcmf_fw_alloc_request(devinfo->ci->chip, devinfo->ci->chiprev,
@@ -2230,6 +2240,8 @@ brcmf_pcie_prepare_fw_request(struct brcmf_pciedev_info *devinfo)
22302240
fwreq->items[BRCMF_PCIE_FW_NVRAM].flags = BRCMF_FW_REQF_OPTIONAL;
22312241
fwreq->items[BRCMF_PCIE_FW_CLM].type = BRCMF_FW_TYPE_BINARY;
22322242
fwreq->items[BRCMF_PCIE_FW_CLM].flags = BRCMF_FW_REQF_OPTIONAL;
2243+
fwreq->items[BRCMF_PCIE_FW_TXCAP].type = BRCMF_FW_TYPE_BINARY;
2244+
fwreq->items[BRCMF_PCIE_FW_TXCAP].flags = BRCMF_FW_REQF_OPTIONAL;
22332245
/* NVRAM reserves PCI domain 0 for Broadcom's SDK faked bus */
22342246
fwreq->domain_nr = pci_domain_nr(devinfo->pdev->bus) + 1;
22352247
fwreq->bus_nr = devinfo->pdev->bus->number;
@@ -2527,6 +2539,7 @@ brcmf_pcie_remove(struct pci_dev *pdev)
25272539
brcmf_pcie_reset_device(devinfo);
25282540
brcmf_pcie_release_resource(devinfo);
25292541
release_firmware(devinfo->clm_fw);
2542+
release_firmware(devinfo->txcap_fw);
25302543

25312544
if (devinfo->ci)
25322545
brcmf_chip_detach(devinfo->ci);

0 commit comments

Comments
 (0)