14ad7e9b0SAdrian Chadd /*- 24ad7e9b0SAdrian Chadd * Copyright (c) 2015 Landon Fuller <landon@landonf.org> 34ad7e9b0SAdrian Chadd * Copyright (c) 2010 Broadcom Corporation 44ad7e9b0SAdrian Chadd * 54ad7e9b0SAdrian Chadd * Portions of this file were derived from the bcmdevs.h header contributed by 64ad7e9b0SAdrian Chadd * Broadcom to Android's bcmdhd driver module, and the pcicfg.h header 74ad7e9b0SAdrian Chadd * distributed with Broadcom's initial brcm80211 Linux driver release. 84ad7e9b0SAdrian Chadd * 94ad7e9b0SAdrian Chadd * Permission to use, copy, modify, and/or distribute this software for any 104ad7e9b0SAdrian Chadd * purpose with or without fee is hereby granted, provided that the above 114ad7e9b0SAdrian Chadd * copyright notice and this permission notice appear in all copies. 124ad7e9b0SAdrian Chadd * 134ad7e9b0SAdrian Chadd * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 144ad7e9b0SAdrian Chadd * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 154ad7e9b0SAdrian Chadd * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY 164ad7e9b0SAdrian Chadd * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 174ad7e9b0SAdrian Chadd * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION 184ad7e9b0SAdrian Chadd * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN 194ad7e9b0SAdrian Chadd * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 204ad7e9b0SAdrian Chadd * 214ad7e9b0SAdrian Chadd */ 224ad7e9b0SAdrian Chadd 234ad7e9b0SAdrian Chadd #ifndef _BHND_BHNDB_PCIREG_H_ 244ad7e9b0SAdrian Chadd #define _BHND_BHNDB_PCIREG_H_ 254ad7e9b0SAdrian Chadd 264ad7e9b0SAdrian Chadd /* 274ad7e9b0SAdrian Chadd * Common PCI/PCIE Bridge Configuration Registers. 284ad7e9b0SAdrian Chadd * 294ad7e9b0SAdrian Chadd * = MAJOR CORE REVISIONS = 304ad7e9b0SAdrian Chadd * 318ef24a0dSAdrian Chadd * There have been four revisions to the BAR0 memory mappings used 324ad7e9b0SAdrian Chadd * in BHND PCI/PCIE bridge cores: 334ad7e9b0SAdrian Chadd * 344ad7e9b0SAdrian Chadd * == PCI_V0 == 354ad7e9b0SAdrian Chadd * Applies to: 364ad7e9b0SAdrian Chadd * - PCI (cid=0x804, revision <= 12) 378ef24a0dSAdrian Chadd * BAR0 size: 8KB 384ad7e9b0SAdrian Chadd * Address Map: 394ad7e9b0SAdrian Chadd * [offset+ size] type description 404ad7e9b0SAdrian Chadd * [0x0000+0x1000] dynamic mapped backplane address space (window 0). 414ad7e9b0SAdrian Chadd * [0x1000+0x0800] fixed SPROM shadow 42*eaa5fb4bSLandon J. Fuller * [0x1800+0x0E00] fixed pci core device registers 43*eaa5fb4bSLandon J. Fuller * [0x1E00+0x0200] fixed pci core siba config registers 444ad7e9b0SAdrian Chadd * 454ad7e9b0SAdrian Chadd * == PCI_V1 == 464ad7e9b0SAdrian Chadd * Applies to: 474ad7e9b0SAdrian Chadd * - PCI (cid=0x804, revision >= 13) 484ad7e9b0SAdrian Chadd * - PCIE (cid=0x820) with ChipCommon (revision <= 31) 498ef24a0dSAdrian Chadd * BAR0 size: 16KB 504ad7e9b0SAdrian Chadd * Address Map: 514ad7e9b0SAdrian Chadd * [offset+ size] type description 524ad7e9b0SAdrian Chadd * [0x0000+0x1000] dynamic mapped backplane address space (window 0). 534ad7e9b0SAdrian Chadd * [0x1000+0x1000] fixed SPROM shadow 544ad7e9b0SAdrian Chadd * [0x2000+0x1000] fixed pci/pcie core registers 554ad7e9b0SAdrian Chadd * [0x3000+0x1000] fixed chipcommon core registers 564ad7e9b0SAdrian Chadd * 574ad7e9b0SAdrian Chadd * == PCI_V2 == 584ad7e9b0SAdrian Chadd * Applies to: 594ad7e9b0SAdrian Chadd * - PCIE (cid=0x820) with ChipCommon (revision >= 32) 608ef24a0dSAdrian Chadd * BAR0 size: 16KB 614ad7e9b0SAdrian Chadd * Address Map: 624ad7e9b0SAdrian Chadd * [offset+ size] type description 634ad7e9b0SAdrian Chadd * [0x0000+0x1000] dynamic mapped backplane address space (window 0). 644ad7e9b0SAdrian Chadd * [0x1000+0x1000] dynamic mapped backplane address space (window 1). 654ad7e9b0SAdrian Chadd * [0x2000+0x1000] fixed pci/pcie core registers 664ad7e9b0SAdrian Chadd * [0x3000+0x1000] fixed chipcommon core registers 674ad7e9b0SAdrian Chadd * 684ad7e9b0SAdrian Chadd * == PCI_V3 == 694ad7e9b0SAdrian Chadd * Applies to: 704ad7e9b0SAdrian Chadd * - PCIE Gen 2 (cid=0x83c) 718ef24a0dSAdrian Chadd * BAR0 size: 32KB 724ad7e9b0SAdrian Chadd * Address Map: 734ad7e9b0SAdrian Chadd * [offset+ size] type description 744ad7e9b0SAdrian Chadd * [0x0000+0x1000] dynamic mapped backplane address space (window 0). 754ad7e9b0SAdrian Chadd * [0x1000+0x1000] dynamic mapped backplane address space (window 1). 764ad7e9b0SAdrian Chadd * [0x2000+0x1000] fixed pci/pcie core registers 774ad7e9b0SAdrian Chadd * [0x3000+0x1000] fixed chipcommon core registers 784ad7e9b0SAdrian Chadd * [???] 798ef24a0dSAdrian Chadd * BAR1 size: varies 808ef24a0dSAdrian Chadd * Address Map: 818ef24a0dSAdrian Chadd * [offset+ size] type description 828ef24a0dSAdrian Chadd * [0x0000+0x????] fixed ARM tightly-coupled memory (TCM). 838ef24a0dSAdrian Chadd * While fullmac chipsets provided a fixed 848ef24a0dSAdrian Chadd * 4KB mapping, newer devices will vary. 854ad7e9b0SAdrian Chadd * 864ad7e9b0SAdrian Chadd * = MINOR CORE REVISIONS = 874ad7e9b0SAdrian Chadd * 884ad7e9b0SAdrian Chadd * == PCI Cores Revision >= 3 == 894ad7e9b0SAdrian Chadd * - Mapped GPIO CSRs into the PCI config space. Refer to 904ad7e9b0SAdrian Chadd * BHND_PCI_GPIO_*. 914ad7e9b0SAdrian Chadd * 924ad7e9b0SAdrian Chadd * == PCI/PCIE Cores Revision >= 14 == 934ad7e9b0SAdrian Chadd * - Mapped the clock CSR into the PCI config space. Refer to 944ad7e9b0SAdrian Chadd * BHND_PCI_CLK_CTL_ST 954ad7e9b0SAdrian Chadd */ 964ad7e9b0SAdrian Chadd 974ad7e9b0SAdrian Chadd /* Common PCI/PCIE Config Registers */ 984ad7e9b0SAdrian Chadd #define BHNDB_PCI_SPROM_CONTROL 0x88 /* sprom property control */ 994ad7e9b0SAdrian Chadd #define BHNDB_PCI_BAR1_CONTROL 0x8c /* BAR1 region prefetch/burst control */ 1004ad7e9b0SAdrian Chadd #define BHNDB_PCI_INT_STATUS 0x90 /* PCI and other cores interrupts */ 1014ad7e9b0SAdrian Chadd #define BHNDB_PCI_INT_MASK 0x94 /* mask of PCI and other cores interrupts */ 1024ad7e9b0SAdrian Chadd #define BHNDB_PCI_TO_SB_MB 0x98 /* signal backplane interrupts */ 1034ad7e9b0SAdrian Chadd #define BHNDB_PCI_BACKPLANE_ADDR 0xa0 /* address an arbitrary location on the system backplane */ 1044ad7e9b0SAdrian Chadd #define BHNDB_PCI_BACKPLANE_DATA 0xa4 /* data at the location specified by above address */ 1054ad7e9b0SAdrian Chadd 1064ad7e9b0SAdrian Chadd /* PCI (non-PCIe) GPIO/Clock Config Registers */ 1074ad7e9b0SAdrian Chadd #define BHNDB_PCI_CLK_CTL 0xa8 /* clock control/status (pci >=rev14) */ 1084ad7e9b0SAdrian Chadd #define BHNDB_PCI_GPIO_IN 0xb0 /* gpio input (pci >=rev3) */ 1094ad7e9b0SAdrian Chadd #define BHNDB_PCI_GPIO_OUT 0xb4 /* gpio output (pci >=rev3) */ 1104ad7e9b0SAdrian Chadd #define BHNDB_PCI_GPIO_OUTEN 0xb8 /* gpio output enable (pci >=rev3) */ 1114ad7e9b0SAdrian Chadd 1124ad7e9b0SAdrian Chadd /* Hardware revisions used to determine PCI revision */ 1134ad7e9b0SAdrian Chadd #define BHNDB_PCI_V0_MAX_PCI_HWREV 12 1144ad7e9b0SAdrian Chadd #define BHNDB_PCI_V1_MIN_PCI_HWREV 13 1154ad7e9b0SAdrian Chadd #define BHNDB_PCI_V1_MAX_CHIPC_HWREV 31 1164ad7e9b0SAdrian Chadd #define BHNDB_PCI_V2_MIN_CHIPC_HWREV 32 1174ad7e9b0SAdrian Chadd 1184ad7e9b0SAdrian Chadd /** 1194ad7e9b0SAdrian Chadd * Number of times to retry writing to a PCI window address register. 1204ad7e9b0SAdrian Chadd * 1214ad7e9b0SAdrian Chadd * On siba(4) devices, it's possible that writing a PCI window register may 1224ad7e9b0SAdrian Chadd * not succeed; it's necessary to immediately read the configuration register 1234ad7e9b0SAdrian Chadd * and retry if not set to the desired value. 1244ad7e9b0SAdrian Chadd */ 1254ad7e9b0SAdrian Chadd #define BHNDB_PCI_BARCTRL_WRITE_RETRY 50 1264ad7e9b0SAdrian Chadd 1274ad7e9b0SAdrian Chadd /* PCI_V0 */ 1284ad7e9b0SAdrian Chadd #define BHNDB_PCI_V0_BAR0_WIN0_CONTROL 0x80 /* backplane address space accessed by BAR0/WIN0 */ 1294ad7e9b0SAdrian Chadd #define BHNDB_PCI_V0_BAR1_WIN0_CONTROL 0x84 /* backplane address space accessed by BAR1/WIN0. */ 1304ad7e9b0SAdrian Chadd 1314ad7e9b0SAdrian Chadd #define BHNDB_PCI_V0_BAR0_SIZE 0x2000 /* 8KB BAR0 */ 1324ad7e9b0SAdrian Chadd #define BHNDB_PCI_V0_BAR0_WIN0_OFFSET 0x0 /* bar0 + 0x0 accesses configurable 4K region of backplane address space */ 1334ad7e9b0SAdrian Chadd #define BHNDB_PCI_V0_BAR0_WIN0_SIZE 0x1000 1344ad7e9b0SAdrian Chadd #define BHNDB_PCI_V0_BAR0_SPROM_OFFSET 0x1000 /* bar0 + 4K accesses sprom shadow (in pci core) */ 1354ad7e9b0SAdrian Chadd #define BHNDB_PCI_V0_BAR0_SPROM_SIZE 0x0800 136*eaa5fb4bSLandon J. Fuller #define BHNDB_PCI_V0_BAR0_PCIREG_OFFSET 0x1800 /* bar0 + 6K accesses pci core registers (not including SSB CFG registers) */ 137*eaa5fb4bSLandon J. Fuller #define BHNDB_PCI_V0_BAR0_PCIREG_SIZE 0x0E00 138*eaa5fb4bSLandon J. Fuller #define BHNDB_PCI_V0_BAR0_PCISB_OFFSET 0x1E00 /* bar0 + 7.5K accesses pci core's SSB CFG register blocks */ 139*eaa5fb4bSLandon J. Fuller #define BHNDB_PCI_V0_BAR0_PCISB_SIZE 0x0200 140*eaa5fb4bSLandon J. Fuller #define BHNDB_PCI_V0_BAR0_PCISB_COREOFF 0xE00 /* mapped offset relative to the core base address */ 1414ad7e9b0SAdrian Chadd 1424ad7e9b0SAdrian Chadd /* PCI_V1 */ 1434ad7e9b0SAdrian Chadd #define BHNDB_PCI_V1_BAR0_WIN0_CONTROL 0x80 /* backplane address space accessed by BAR0/WIN0 */ 1444ad7e9b0SAdrian Chadd #define BHNDB_PCI_V1_BAR1_WIN0_CONTROL 0x84 /* backplane address space accessed by BAR1/WIN0. */ 1454ad7e9b0SAdrian Chadd 1464ad7e9b0SAdrian Chadd #define BHNDB_PCI_V1_BAR0_SIZE 0x4000 /* 16KB BAR0 */ 1474ad7e9b0SAdrian Chadd #define BHNDB_PCI_V1_BAR0_WIN0_OFFSET 0x0 /* bar0 + 0x0 accesses configurable 4K region of backplane address space */ 1484ad7e9b0SAdrian Chadd #define BHNDB_PCI_V1_BAR0_WIN0_SIZE 0x1000 1494ad7e9b0SAdrian Chadd #define BHNDB_PCI_V1_BAR0_SPROM_OFFSET 0x1000 /* bar0 + 4K accesses sprom shadow (in pci core) */ 1504ad7e9b0SAdrian Chadd #define BHNDB_PCI_V1_BAR0_SPROM_SIZE 0x1000 1514ad7e9b0SAdrian Chadd #define BHNDB_PCI_V1_BAR0_PCIREG_OFFSET 0x2000 /* bar0 + 8K accesses pci/pcie core registers */ 1524ad7e9b0SAdrian Chadd #define BHNDB_PCI_V1_BAR0_PCIREG_SIZE 0x1000 1534ad7e9b0SAdrian Chadd #define BHNDB_PCI_V1_BAR0_CCREGS_OFFSET 0x3000 /* bar0 + 12K accesses chipc core registers */ 1544ad7e9b0SAdrian Chadd #define BHNDB_PCI_V1_BAR0_CCREGS_SIZE 0x1000 1554ad7e9b0SAdrian Chadd 1564ad7e9b0SAdrian Chadd /* PCI_V2 */ 1574ad7e9b0SAdrian Chadd #define BHNDB_PCI_V2_BAR0_WIN0_CONTROL 0x80 /* backplane address space accessed by BAR0/WIN0 */ 1584ad7e9b0SAdrian Chadd #define BHNDB_PCI_V2_BAR1_WIN0_CONTROL 0x84 /* backplane address space accessed by BAR1/WIN0. */ 1594ad7e9b0SAdrian Chadd #define BHNDB_PCI_V2_BAR0_WIN1_CONTROL 0xAC /* backplane address space accessed by BAR0/WIN1 */ 1604ad7e9b0SAdrian Chadd 1614ad7e9b0SAdrian Chadd #define BHNDB_PCI_V2_BAR0_SIZE 0x4000 /* 16KB BAR0 */ 1624ad7e9b0SAdrian Chadd #define BHNDB_PCI_V2_BAR0_WIN0_OFFSET 0x0 /* bar0 + 0x0 accesses configurable 4K region of backplane address space */ 1634ad7e9b0SAdrian Chadd #define BHNDB_PCI_V2_BAR0_WIN0_SIZE 0x1000 1644ad7e9b0SAdrian Chadd #define BHNDB_PCI_V2_BAR0_WIN1_OFFSET 0x1000 /* bar0 + 4K accesses second 4K window */ 1654ad7e9b0SAdrian Chadd #define BHNDB_PCI_V2_BAR0_WIN1_SIZE 0x1000 1664ad7e9b0SAdrian Chadd #define BHNDB_PCI_V2_BAR0_PCIREG_OFFSET 0x2000 /* bar0 + 8K accesses pci/pcie core registers */ 1674ad7e9b0SAdrian Chadd #define BHNDB_PCI_V2_BAR0_PCIREG_SIZE 0x1000 1684ad7e9b0SAdrian Chadd #define BHNDB_PCI_V2_BAR0_CCREGS_OFFSET 0x3000 /* bar0 + 12K accesses chipc core registers */ 1694ad7e9b0SAdrian Chadd #define BHNDB_PCI_V2_BAR0_CCREGS_SIZE 0x1000 1704ad7e9b0SAdrian Chadd 1718ef24a0dSAdrian Chadd /* PCI_V3 (PCIe-G2) */ 1724ad7e9b0SAdrian Chadd #define BHNDB_PCI_V3_BAR0_WIN0_CONTROL 0x80 /* backplane address space accessed by BAR0/WIN0 */ 1734ad7e9b0SAdrian Chadd #define BHNDB_PCI_V3_BAR0_WIN1_CONTROL 0x70 /* backplane address space accessed by BAR0/WIN1 */ 1744ad7e9b0SAdrian Chadd 1758ef24a0dSAdrian Chadd #define BHNDB_PCI_V3_BAR0_SIZE 0x8000 /* 32KB BAR0 */ 1764ad7e9b0SAdrian Chadd #define BHNDB_PCI_V3_BAR0_WIN0_OFFSET 0x0 /* bar0 + 0x0 accesses configurable 4K region of backplane address space */ 1774ad7e9b0SAdrian Chadd #define BHNDB_PCI_V3_BAR0_WIN0_SIZE 0x1000 1784ad7e9b0SAdrian Chadd #define BHNDB_PCI_V3_BAR0_WIN1_OFFSET 0x1000 /* bar0 + 4K accesses second 4K window */ 1794ad7e9b0SAdrian Chadd #define BHNDB_PCI_V3_BAR0_WIN1_SIZE 0x1000 1804ad7e9b0SAdrian Chadd #define BHNDB_PCI_V3_BAR0_PCIREG_OFFSET 0x2000 /* bar0 + 8K accesses pci/pcie core registers */ 1814ad7e9b0SAdrian Chadd #define BHNDB_PCI_V3_BAR0_PCIREG_SIZE 0x1000 1824ad7e9b0SAdrian Chadd #define BHNDB_PCI_V3_BAR0_CCREGS_OFFSET 0x3000 /* bar0 + 12K accesses chipc core registers */ 1834ad7e9b0SAdrian Chadd #define BHNDB_PCI_V3_BAR0_CCREGS_SIZE 0x1000 1844ad7e9b0SAdrian Chadd 1854ad7e9b0SAdrian Chadd /* BHNDB_PCI_INT_STATUS */ 1864ad7e9b0SAdrian Chadd #define BHNDB_PCI_SBIM_STATUS_SERR 0x4 /* backplane SBErr interrupt status */ 1874ad7e9b0SAdrian Chadd 1884ad7e9b0SAdrian Chadd /* BHNDB_PCI_INT_MASK */ 1894ad7e9b0SAdrian Chadd #define BHNDB_PCI_SBIM_SHIFT 8 /* backplane core interrupt mask bits offset */ 190caeff9a3SLandon J. Fuller #define BHNDB_PCI_SBIM_COREIDX_MAX 15 /**< maximum representible core index (in 16 bit field) */ 1914ad7e9b0SAdrian Chadd #define BHNDB_PCI_SBIM_MASK 0xff00 /* backplane core interrupt mask */ 1924ad7e9b0SAdrian Chadd #define BHNDB_PCI_SBIM_MASK_SERR 0x4 /* backplane SBErr interrupt mask */ 1934ad7e9b0SAdrian Chadd 1944ad7e9b0SAdrian Chadd /* BHNDB_PCI_SPROM_CONTROL */ 195e83ce340SAdrian Chadd #define BHNDB_PCI_SPROM_SZ_MASK 0x03 /**< sprom size mask */ 196e83ce340SAdrian Chadd #define BHNDB_PCI_SPROM_SZ_1KB 0x00 /**< 1KB sprom size */ 197e83ce340SAdrian Chadd #define BHNDB_PCI_SPROM_SZ_4KB 0x01 /**< 4KB sprom size */ 198e83ce340SAdrian Chadd #define BHNDB_PCI_SPROM_SZ_16KB 0x02 /**< 16KB sprom size */ 199e83ce340SAdrian Chadd #define BHNDB_PCI_SPROM_SZ_RESERVED 0x03 /**< unsupported sprom size */ 200e83ce340SAdrian Chadd #define BHNDB_PCI_SPROM_LOCKED 0x08 /**< sprom locked */ 201e83ce340SAdrian Chadd #define BHNDB_PCI_SPROM_BLANK 0x04 /**< sprom blank */ 202e83ce340SAdrian Chadd #define BHNDB_PCI_SPROM_WRITEEN 0x10 /**< sprom write enable */ 203e83ce340SAdrian Chadd #define BHNDB_PCI_SPROM_BOOTROM_WE 0x20 /**< external bootrom write enable */ 204e83ce340SAdrian Chadd #define BHNDB_PCI_SPROM_BACKPLANE_EN 0x40 /**< enable indirect backplane access (BHNDB_PCI_BACKPLANE_*) */ 205e83ce340SAdrian Chadd #define BHNDB_PCI_SPROM_OTPIN_USE 0x80 /**< device OTP in use */ 2064ad7e9b0SAdrian Chadd 2074ad7e9b0SAdrian Chadd /* PCI (non-PCIe) BHNDB_PCI_GPIO_OUTEN */ 2084ad7e9b0SAdrian Chadd #define BHNDB_PCI_GPIO_SCS 0x10 /* PCI config space bit 4 for 4306c0 slow clock source */ 2094ad7e9b0SAdrian Chadd #define BHNDB_PCI_GPIO_HWRAD_OFF 0x20 /* PCI config space GPIO 13 for hw radio disable */ 2104ad7e9b0SAdrian Chadd #define BHNDB_PCI_GPIO_XTAL_ON 0x40 /* PCI config space GPIO 14 for Xtal power-up */ 2114ad7e9b0SAdrian Chadd #define BHNDB_PCI_GPIO_PLL_OFF 0x80 /* PCI config space GPIO 15 for PLL power-down */ 2124ad7e9b0SAdrian Chadd 2134ad7e9b0SAdrian Chadd #endif /* _BHND_BHNDB_PCIREG_H_ */ 214