Skip to content

Commit 26b705b

Browse files
committed
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 <[email protected]>
1 parent 500f017 commit 26b705b

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
@@ -351,6 +351,8 @@ struct brcmf_pcie_console {
351351
struct brcmf_pcie_shared_info {
352352
u32 tcm_base_address;
353353
u32 flags;
354+
u32 flags2;
355+
u32 flags3;
354356
struct brcmf_pcie_ringbuf *commonrings[BRCMF_NROF_COMMON_MSGRINGS];
355357
struct brcmf_pcie_ringbuf *flowrings;
356358
u16 max_rxbufpost;
@@ -1683,12 +1685,16 @@ brcmf_pcie_init_share_ram_info(struct brcmf_pciedev_info *devinfo,
16831685
{
16841686
struct brcmf_bus *bus = dev_get_drvdata(&devinfo->pdev->dev);
16851687
struct brcmf_pcie_shared_info *shared;
1688+
u32 host_cap;
1689+
u32 host_cap2;
16861690
u32 addr;
16871691

16881692
shared = &devinfo->shared;
16891693
shared->tcm_base_address = sharedram_addr;
16901694

1691-
shared->flags = brcmf_pcie_read_tcm32(devinfo, sharedram_addr);
1695+
shared->flags = brcmf_pcie_read_tcm32(devinfo, sharedram_addr +
1696+
BRCMF_SHARED_FLAGS_OFFSET);
1697+
16921698
shared->version = (u8)(shared->flags & BRCMF_PCIE_SHARED_VERSION_MASK);
16931699
brcmf_dbg(PCIE, "PCIe protocol version %d\n", shared->version);
16941700
if ((shared->version > BRCMF_PCIE_MAX_SHARED_VERSION) ||
@@ -1729,6 +1735,33 @@ brcmf_pcie_init_share_ram_info(struct brcmf_pciedev_info *devinfo,
17291735
brcmf_pcie_bus_console_init(devinfo);
17301736
brcmf_pcie_bus_console_read(devinfo, false);
17311737

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

0 commit comments

Comments
 (0)