xref: /freebsd/sys/dev/bhnd/bhndb/bhndb_pcireg.h (revision 2ff63af9b88c7413b7d71715b5532625752a248e)
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