Skip to content

Commit 04ca7f5

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 f63efc7 commit 04ca7f5

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
@@ -353,6 +353,8 @@ struct brcmf_pcie_console {
353353
struct brcmf_pcie_shared_info {
354354
u32 tcm_base_address;
355355
u32 flags;
356+
u32 flags2;
357+
u32 flags3;
356358
struct brcmf_pcie_ringbuf *commonrings[BRCMF_NROF_COMMON_MSGRINGS];
357359
struct brcmf_pcie_ringbuf *flowrings;
358360
u16 max_rxbufpost;
@@ -1680,12 +1682,16 @@ brcmf_pcie_init_share_ram_info(struct brcmf_pciedev_info *devinfo,
16801682
{
16811683
struct brcmf_bus *bus = dev_get_drvdata(&devinfo->pdev->dev);
16821684
struct brcmf_pcie_shared_info *shared;
1685+
u32 host_cap;
1686+
u32 host_cap2;
16831687
u32 addr;
16841688

16851689
shared = &devinfo->shared;
16861690
shared->tcm_base_address = sharedram_addr;
16871691

1688-
shared->flags = brcmf_pcie_read_tcm32(devinfo, sharedram_addr);
1692+
shared->flags = brcmf_pcie_read_tcm32(devinfo, sharedram_addr +
1693+
BRCMF_SHARED_FLAGS_OFFSET);
1694+
16891695
shared->version = (u8)(shared->flags & BRCMF_PCIE_SHARED_VERSION_MASK);
16901696
brcmf_dbg(PCIE, "PCIe protocol version %d\n", shared->version);
16911697
if ((shared->version > BRCMF_PCIE_MAX_SHARED_VERSION) ||
@@ -1726,6 +1732,33 @@ brcmf_pcie_init_share_ram_info(struct brcmf_pciedev_info *devinfo,
17261732
brcmf_pcie_bus_console_init(devinfo);
17271733
brcmf_pcie_bus_console_read(devinfo, false);
17281734

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

0 commit comments

Comments
 (0)