Skip to content

Commit 21c9176

Browse files
marcanjannau
authored andcommitted
wifi: brcmfmac: Support v6+ flags and set host_cap properly
Interface versions 6 and above support having the host tell the dongle about what it supports via a host_cap field (it seems that if it is set to zero, some kind of unknown defaults are used). Explicitly support and set this. This also disables OOB deep sleep support; it doesn't look like deep sleep is properly supported yet at all (it needs more logic than merely acking requests, which is all pcie.c does right now). Signed-off-by: Hector Martin <marcan@marcan.st>
1 parent 110da1c commit 21c9176

1 file changed

Lines changed: 34 additions & 1 deletion

File tree

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

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

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -357,6 +357,8 @@ struct brcmf_pcie_console {
357357
struct brcmf_pcie_shared_info {
358358
u32 tcm_base_address;
359359
u32 flags;
360+
u32 flags2;
361+
u32 flags3;
360362
struct brcmf_pcie_ringbuf *commonrings[BRCMF_NROF_COMMON_MSGRINGS];
361363
struct brcmf_pcie_ringbuf *flowrings;
362364
u16 max_rxbufpost;
@@ -1687,12 +1689,16 @@ brcmf_pcie_init_share_ram_info(struct brcmf_pciedev_info *devinfo,
16871689
{
16881690
struct brcmf_bus *bus = dev_get_drvdata(&devinfo->pdev->dev);
16891691
struct brcmf_pcie_shared_info *shared;
1692+
u32 host_cap;
1693+
u32 host_cap2;
16901694
u32 addr;
16911695

16921696
shared = &devinfo->shared;
16931697
shared->tcm_base_address = sharedram_addr;
16941698

1695-
shared->flags = brcmf_pcie_read_tcm32(devinfo, sharedram_addr);
1699+
shared->flags = brcmf_pcie_read_tcm32(devinfo, sharedram_addr +
1700+
BRCMF_SHARED_FLAGS_OFFSET);
1701+
16961702
shared->version = (u8)(shared->flags & BRCMF_PCIE_SHARED_VERSION_MASK);
16971703
brcmf_dbg(PCIE, "PCIe protocol version %d\n", shared->version);
16981704
if ((shared->version > BRCMF_PCIE_MAX_SHARED_VERSION) ||
@@ -1733,6 +1739,33 @@ brcmf_pcie_init_share_ram_info(struct brcmf_pciedev_info *devinfo,
17331739
brcmf_pcie_bus_console_init(devinfo);
17341740
brcmf_pcie_bus_console_read(devinfo, false);
17351741

1742+
/* Features added in revision 6 follow */
1743+
if (shared->version < 6)
1744+
return 0;
1745+
1746+
shared->flags2 = brcmf_pcie_read_tcm32(devinfo, sharedram_addr +
1747+
BRCMF_SHARED_FLAGS2_OFFSET);
1748+
shared->flags3 = brcmf_pcie_read_tcm32(devinfo, sharedram_addr +
1749+
BRCMF_SHARED_FLAGS3_OFFSET);
1750+
1751+
/* Update host support flags */
1752+
host_cap = shared->version;
1753+
host_cap2 = 0;
1754+
1755+
if (shared->flags & BRCMF_PCIE_SHARED_HOSTRDY_DB1)
1756+
host_cap |= BRCMF_HOSTCAP_H2D_ENABLE_HOSTRDY;
1757+
1758+
if (shared->flags & BRCMF_PCIE_SHARED_DAR)
1759+
host_cap |= BRCMF_HOSTCAP_H2D_DAR;
1760+
1761+
/* Disable DS: this is not currently properly supported */
1762+
host_cap |= BRCMF_HOSTCAP_DS_NO_OOB_DW;
1763+
1764+
brcmf_pcie_write_tcm32(devinfo, sharedram_addr +
1765+
BRCMF_SHARED_HOST_CAP_OFFSET, host_cap);
1766+
brcmf_pcie_write_tcm32(devinfo, sharedram_addr +
1767+
BRCMF_SHARED_HOST_CAP2_OFFSET, host_cap2);
1768+
17361769
return 0;
17371770
}
17381771

0 commit comments

Comments
 (0)