bhndb_pcireg.h revision 299241
1296077Sadrian/*- 2296077Sadrian * Copyright (c) 2015 Landon Fuller <landon@landonf.org> 3296077Sadrian * Copyright (c) 2010 Broadcom Corporation 4296077Sadrian * 5296077Sadrian * Portions of this file were derived from the bcmdevs.h header contributed by 6296077Sadrian * Broadcom to Android's bcmdhd driver module, and the pcicfg.h header 7296077Sadrian * distributed with Broadcom's initial brcm80211 Linux driver release. 8296077Sadrian * 9296077Sadrian * Permission to use, copy, modify, and/or distribute this software for any 10296077Sadrian * purpose with or without fee is hereby granted, provided that the above 11296077Sadrian * copyright notice and this permission notice appear in all copies. 12296077Sadrian * 13296077Sadrian * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 14296077Sadrian * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 15296077Sadrian * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY 16296077Sadrian * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 17296077Sadrian * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION 18296077Sadrian * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN 19296077Sadrian * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 20296077Sadrian * 21296077Sadrian * $FreeBSD: head/sys/dev/bhnd/bhndb/bhndb_pcireg.h 299241 2016-05-08 19:14:05Z adrian $ 22296077Sadrian */ 23296077Sadrian 24296077Sadrian#ifndef _BHND_BHNDB_PCIREG_H_ 25296077Sadrian#define _BHND_BHNDB_PCIREG_H_ 26296077Sadrian 27296077Sadrian/* 28296077Sadrian * Common PCI/PCIE Bridge Configuration Registers. 29296077Sadrian * 30296077Sadrian * = MAJOR CORE REVISIONS = 31296077Sadrian * 32296077Sadrian * There have been four revisions to the BAR0/BAR1 memory mappings used 33296077Sadrian * in BHND PCI/PCIE bridge cores: 34296077Sadrian * 35296077Sadrian * == PCI_V0 == 36296077Sadrian * Applies to: 37296077Sadrian * - PCI (cid=0x804, revision <= 12) 38296077Sadrian * BAR size: 8KB 39296077Sadrian * Address Map: 40296077Sadrian * [offset+ size] type description 41296077Sadrian * [0x0000+0x1000] dynamic mapped backplane address space (window 0). 42296077Sadrian * [0x1000+0x0800] fixed SPROM shadow 43296077Sadrian * [0x1800+0x0800] fixed pci core registers 44296077Sadrian * 45296077Sadrian * == PCI_V1 == 46296077Sadrian * Applies to: 47296077Sadrian * - PCI (cid=0x804, revision >= 13) 48296077Sadrian * - PCIE (cid=0x820) with ChipCommon (revision <= 31) 49296077Sadrian * BAR size: 16KB 50296077Sadrian * Address Map: 51296077Sadrian * [offset+ size] type description 52296077Sadrian * [0x0000+0x1000] dynamic mapped backplane address space (window 0). 53296077Sadrian * [0x1000+0x1000] fixed SPROM shadow 54296077Sadrian * [0x2000+0x1000] fixed pci/pcie core registers 55296077Sadrian * [0x3000+0x1000] fixed chipcommon core registers 56296077Sadrian * 57296077Sadrian * == PCI_V2 == 58296077Sadrian * Applies to: 59296077Sadrian * - PCIE (cid=0x820) with ChipCommon (revision >= 32) 60296077Sadrian * BAR size: 16KB 61296077Sadrian * Address Map: 62296077Sadrian * [offset+ size] type description 63296077Sadrian * [0x0000+0x1000] dynamic mapped backplane address space (window 0). 64296077Sadrian * [0x1000+0x1000] dynamic mapped backplane address space (window 1). 65296077Sadrian * [0x2000+0x1000] fixed pci/pcie core registers 66296077Sadrian * [0x3000+0x1000] fixed chipcommon core registers 67296077Sadrian * 68296077Sadrian * == PCI_V3 == 69296077Sadrian * Applies to: 70296077Sadrian * - PCIE Gen 2 (cid=0x83c) 71296077Sadrian * BAR size: 32KB? 72296077Sadrian * Address Map: 73296077Sadrian * [offset+ size] type description 74296077Sadrian * [0x0000+0x1000] dynamic mapped backplane address space (window 0). 75296077Sadrian * [0x1000+0x1000] dynamic mapped backplane address space (window 1). 76296077Sadrian * [0x2000+0x1000] fixed pci/pcie core registers 77296077Sadrian * [0x3000+0x1000] fixed chipcommon core registers 78296077Sadrian * [???] 79296077Sadrian * 80296077Sadrian * = MINOR CORE REVISIONS = 81296077Sadrian * 82296077Sadrian * == PCI Cores Revision >= 3 == 83296077Sadrian * - Mapped GPIO CSRs into the PCI config space. Refer to 84296077Sadrian * BHND_PCI_GPIO_*. 85296077Sadrian * 86296077Sadrian * == PCI/PCIE Cores Revision >= 14 == 87296077Sadrian * - Mapped the clock CSR into the PCI config space. Refer to 88296077Sadrian * BHND_PCI_CLK_CTL_ST 89296077Sadrian * 90296077Sadrian * = Hardware Bugs = 91296077Sadrian * == BAR1 == 92296077Sadrian * 93296077Sadrian * The BHND PCI(e) cores hypothetically support an additional memory mapping 94296077Sadrian * of the backplane address space via BAR1, but this appears to be subject 95296077Sadrian * to a hardware bug in which BAR1 is initially configured with a 4 byte 96296077Sadrian * length. 97296077Sadrian * 98296077Sadrian * A work-around for this bug may be possible by writing to the PCI core's 99296077Sadrian * BAR1 config register (0x4e0), but this requires further research -- I've 100296077Sadrian * found three sources for information on the BAR1 PCI core configuration that 101296077Sadrian * may be relevant: 102296077Sadrian * - The QLogix NetXTreme 10GB PCIe NIC seems to use the same PCIE 103296077Sadrian * core IP block as is used in other BHND devices. The bxe(4) driver 104296077Sadrian * contains example initialization code and register constants 105296077Sadrian * that may apply (e.g. GRC_BAR2_CONFIG/PCI_CONFIG_2_BAR2_SIZE). 106296077Sadrian * - The publicly available Broadcom BCM440X data sheet (440X-PG02-R) 107296077Sadrian * appears to (partially) document a Broadcom PCI(e) core that has a 108296077Sadrian * seemingly compatible programming model. 109296077Sadrian * - The Android bcmdhd driver sources include a possible work-around 110296077Sadrian * implementation (writing to 0x4e0) in dhd_pcie.c 111296077Sadrian */ 112296077Sadrian 113296077Sadrian/* Common PCI/PCIE Config Registers */ 114296077Sadrian#define BHNDB_PCI_SPROM_CONTROL 0x88 /* sprom property control */ 115296077Sadrian#define BHNDB_PCI_BAR1_CONTROL 0x8c /* BAR1 region prefetch/burst control */ 116296077Sadrian#define BHNDB_PCI_INT_STATUS 0x90 /* PCI and other cores interrupts */ 117296077Sadrian#define BHNDB_PCI_INT_MASK 0x94 /* mask of PCI and other cores interrupts */ 118296077Sadrian#define BHNDB_PCI_TO_SB_MB 0x98 /* signal backplane interrupts */ 119296077Sadrian#define BHNDB_PCI_BACKPLANE_ADDR 0xa0 /* address an arbitrary location on the system backplane */ 120296077Sadrian#define BHNDB_PCI_BACKPLANE_DATA 0xa4 /* data at the location specified by above address */ 121296077Sadrian 122296077Sadrian/* PCI (non-PCIe) GPIO/Clock Config Registers */ 123296077Sadrian#define BHNDB_PCI_CLK_CTL 0xa8 /* clock control/status (pci >=rev14) */ 124296077Sadrian#define BHNDB_PCI_GPIO_IN 0xb0 /* gpio input (pci >=rev3) */ 125296077Sadrian#define BHNDB_PCI_GPIO_OUT 0xb4 /* gpio output (pci >=rev3) */ 126296077Sadrian#define BHNDB_PCI_GPIO_OUTEN 0xb8 /* gpio output enable (pci >=rev3) */ 127296077Sadrian 128296077Sadrian/* Hardware revisions used to determine PCI revision */ 129296077Sadrian#define BHNDB_PCI_V0_MAX_PCI_HWREV 12 130296077Sadrian#define BHNDB_PCI_V1_MIN_PCI_HWREV 13 131296077Sadrian#define BHNDB_PCI_V1_MAX_CHIPC_HWREV 31 132296077Sadrian#define BHNDB_PCI_V2_MIN_CHIPC_HWREV 32 133296077Sadrian 134296077Sadrian/** 135296077Sadrian * Number of times to retry writing to a PCI window address register. 136296077Sadrian * 137296077Sadrian * On siba(4) devices, it's possible that writing a PCI window register may 138296077Sadrian * not succeed; it's necessary to immediately read the configuration register 139296077Sadrian * and retry if not set to the desired value. 140296077Sadrian */ 141296077Sadrian#define BHNDB_PCI_BARCTRL_WRITE_RETRY 50 142296077Sadrian 143296077Sadrian/* PCI_V0 */ 144296077Sadrian#define BHNDB_PCI_V0_BAR0_WIN0_CONTROL 0x80 /* backplane address space accessed by BAR0/WIN0 */ 145296077Sadrian#define BHNDB_PCI_V0_BAR1_WIN0_CONTROL 0x84 /* backplane address space accessed by BAR1/WIN0. */ 146296077Sadrian 147296077Sadrian#define BHNDB_PCI_V0_BAR0_SIZE 0x2000 /* 8KB BAR0 */ 148296077Sadrian#define BHNDB_PCI_V0_BAR0_WIN0_OFFSET 0x0 /* bar0 + 0x0 accesses configurable 4K region of backplane address space */ 149296077Sadrian#define BHNDB_PCI_V0_BAR0_WIN0_SIZE 0x1000 150296077Sadrian#define BHNDB_PCI_V0_BAR0_SPROM_OFFSET 0x1000 /* bar0 + 4K accesses sprom shadow (in pci core) */ 151296077Sadrian#define BHNDB_PCI_V0_BAR0_SPROM_SIZE 0x0800 152296077Sadrian#define BHNDB_PCI_V0_BAR0_PCIREG_OFFSET 0x1800 /* bar0 + 6K accesses pci core registers */ 153296077Sadrian#define BHNDB_PCI_V0_BAR0_PCIREG_SIZE 0x0800 154296077Sadrian 155296077Sadrian/* PCI_V1 */ 156296077Sadrian#define BHNDB_PCI_V1_BAR0_WIN0_CONTROL 0x80 /* backplane address space accessed by BAR0/WIN0 */ 157296077Sadrian#define BHNDB_PCI_V1_BAR1_WIN0_CONTROL 0x84 /* backplane address space accessed by BAR1/WIN0. */ 158296077Sadrian 159296077Sadrian#define BHNDB_PCI_V1_BAR0_SIZE 0x4000 /* 16KB BAR0 */ 160296077Sadrian#define BHNDB_PCI_V1_BAR0_WIN0_OFFSET 0x0 /* bar0 + 0x0 accesses configurable 4K region of backplane address space */ 161296077Sadrian#define BHNDB_PCI_V1_BAR0_WIN0_SIZE 0x1000 162296077Sadrian#define BHNDB_PCI_V1_BAR0_SPROM_OFFSET 0x1000 /* bar0 + 4K accesses sprom shadow (in pci core) */ 163296077Sadrian#define BHNDB_PCI_V1_BAR0_SPROM_SIZE 0x1000 164296077Sadrian#define BHNDB_PCI_V1_BAR0_PCIREG_OFFSET 0x2000 /* bar0 + 8K accesses pci/pcie core registers */ 165296077Sadrian#define BHNDB_PCI_V1_BAR0_PCIREG_SIZE 0x1000 166296077Sadrian#define BHNDB_PCI_V1_BAR0_CCREGS_OFFSET 0x3000 /* bar0 + 12K accesses chipc core registers */ 167296077Sadrian#define BHNDB_PCI_V1_BAR0_CCREGS_SIZE 0x1000 168296077Sadrian 169296077Sadrian/* PCI_V2 */ 170296077Sadrian#define BHNDB_PCI_V2_BAR0_WIN0_CONTROL 0x80 /* backplane address space accessed by BAR0/WIN0 */ 171296077Sadrian#define BHNDB_PCI_V2_BAR1_WIN0_CONTROL 0x84 /* backplane address space accessed by BAR1/WIN0. */ 172296077Sadrian#define BHNDB_PCI_V2_BAR0_WIN1_CONTROL 0xAC /* backplane address space accessed by BAR0/WIN1 */ 173296077Sadrian 174296077Sadrian#define BHNDB_PCI_V2_BAR0_SIZE 0x4000 /* 16KB BAR0 */ 175296077Sadrian#define BHNDB_PCI_V2_BAR0_WIN0_OFFSET 0x0 /* bar0 + 0x0 accesses configurable 4K region of backplane address space */ 176296077Sadrian#define BHNDB_PCI_V2_BAR0_WIN0_SIZE 0x1000 177296077Sadrian#define BHNDB_PCI_V2_BAR0_WIN1_OFFSET 0x1000 /* bar0 + 4K accesses second 4K window */ 178296077Sadrian#define BHNDB_PCI_V2_BAR0_WIN1_SIZE 0x1000 179296077Sadrian#define BHNDB_PCI_V2_BAR0_PCIREG_OFFSET 0x2000 /* bar0 + 8K accesses pci/pcie core registers */ 180296077Sadrian#define BHNDB_PCI_V2_BAR0_PCIREG_SIZE 0x1000 181296077Sadrian#define BHNDB_PCI_V2_BAR0_CCREGS_OFFSET 0x3000 /* bar0 + 12K accesses chipc core registers */ 182296077Sadrian#define BHNDB_PCI_V2_BAR0_CCREGS_SIZE 0x1000 183296077Sadrian 184296077Sadrian/* PCI_V3 */ 185296077Sadrian#define BHNDB_PCI_V3_BAR0_WIN0_CONTROL 0x80 /* backplane address space accessed by BAR0/WIN0 */ 186296077Sadrian#define BHNDB_PCI_V3_BAR1_WIN0_CONTROL 0x84 /* backplane address space accessed by BAR1/WIN0. */ 187296077Sadrian#define BHNDB_PCI_V3_BAR0_WIN1_CONTROL 0x70 /* backplane address space accessed by BAR0/WIN1 */ 188296077Sadrian 189296077Sadrian#define BHNDB_PCI_V3_BAR0_SIZE 0x8000 /* 32KB BAR0 (?) */ 190296077Sadrian#define BHNDB_PCI_V3_BAR0_WIN0_OFFSET 0x0 /* bar0 + 0x0 accesses configurable 4K region of backplane address space */ 191296077Sadrian#define BHNDB_PCI_V3_BAR0_WIN0_SIZE 0x1000 192296077Sadrian#define BHNDB_PCI_V3_BAR0_WIN1_OFFSET 0x1000 /* bar0 + 4K accesses second 4K window */ 193296077Sadrian#define BHNDB_PCI_V3_BAR0_WIN1_SIZE 0x1000 194296077Sadrian#define BHNDB_PCI_V3_BAR0_PCIREG_OFFSET 0x2000 /* bar0 + 8K accesses pci/pcie core registers */ 195296077Sadrian#define BHNDB_PCI_V3_BAR0_PCIREG_SIZE 0x1000 196296077Sadrian#define BHNDB_PCI_V3_BAR0_CCREGS_OFFSET 0x3000 /* bar0 + 12K accesses chipc core registers */ 197296077Sadrian#define BHNDB_PCI_V3_BAR0_CCREGS_SIZE 0x1000 198296077Sadrian 199296077Sadrian/* BHNDB_PCI_INT_STATUS */ 200296077Sadrian#define BHNDB_PCI_SBIM_STATUS_SERR 0x4 /* backplane SBErr interrupt status */ 201296077Sadrian 202296077Sadrian/* BHNDB_PCI_INT_MASK */ 203296077Sadrian#define BHNDB_PCI_SBIM_SHIFT 8 /* backplane core interrupt mask bits offset */ 204296077Sadrian#define BHNDB_PCI_SBIM_MASK 0xff00 /* backplane core interrupt mask */ 205296077Sadrian#define BHNDB_PCI_SBIM_MASK_SERR 0x4 /* backplane SBErr interrupt mask */ 206296077Sadrian 207296077Sadrian/* BHNDB_PCI_SPROM_CONTROL */ 208299241Sadrian#define BHNDB_PCI_SPROM_SZ_MASK 0x03 /**< sprom size mask */ 209299241Sadrian#define BHNDB_PCI_SPROM_SZ_1KB 0x00 /**< 1KB sprom size */ 210299241Sadrian#define BHNDB_PCI_SPROM_SZ_4KB 0x01 /**< 4KB sprom size */ 211299241Sadrian#define BHNDB_PCI_SPROM_SZ_16KB 0x02 /**< 16KB sprom size */ 212299241Sadrian#define BHNDB_PCI_SPROM_SZ_RESERVED 0x03 /**< unsupported sprom size */ 213299241Sadrian#define BHNDB_PCI_SPROM_LOCKED 0x08 /**< sprom locked */ 214299241Sadrian#define BHNDB_PCI_SPROM_BLANK 0x04 /**< sprom blank */ 215299241Sadrian#define BHNDB_PCI_SPROM_WRITEEN 0x10 /**< sprom write enable */ 216299241Sadrian#define BHNDB_PCI_SPROM_BOOTROM_WE 0x20 /**< external bootrom write enable */ 217299241Sadrian#define BHNDB_PCI_SPROM_BACKPLANE_EN 0x40 /**< enable indirect backplane access (BHNDB_PCI_BACKPLANE_*) */ 218299241Sadrian#define BHNDB_PCI_SPROM_OTPIN_USE 0x80 /**< device OTP in use */ 219296077Sadrian 220296077Sadrian 221296077Sadrian/* PCI (non-PCIe) BHNDB_PCI_GPIO_OUTEN */ 222296077Sadrian#define BHNDB_PCI_GPIO_SCS 0x10 /* PCI config space bit 4 for 4306c0 slow clock source */ 223296077Sadrian#define BHNDB_PCI_GPIO_HWRAD_OFF 0x20 /* PCI config space GPIO 13 for hw radio disable */ 224296077Sadrian#define BHNDB_PCI_GPIO_XTAL_ON 0x40 /* PCI config space GPIO 14 for Xtal power-up */ 225296077Sadrian#define BHNDB_PCI_GPIO_PLL_OFF 0x80 /* PCI config space GPIO 15 for PLL power-down */ 226296077Sadrian 227296077Sadrian#endif /* _BHND_BHNDB_PCIREG_H_ */ 228