xref: /freebsd/sys/dev/bhnd/bcma/bcma_eromreg.h (revision 2ff63af9b88c7413b7d71715b5532625752a248e)
14ad7e9b0SAdrian Chadd /*-
2*6e778a7eSPedro F. Giffuni  * SPDX-License-Identifier: ISC
3*6e778a7eSPedro F. Giffuni  *
44ad7e9b0SAdrian Chadd  * Copyright (c) 2015 Landon Fuller <landon@landonf.org>
54ad7e9b0SAdrian Chadd  * Copyright (c) 2010 Broadcom Corporation
64ad7e9b0SAdrian Chadd  *
74ad7e9b0SAdrian Chadd  * Portions of this file were derived from the aidmp.h header
84ad7e9b0SAdrian Chadd  * distributed with Broadcom's initial brcm80211 Linux driver release, as
94ad7e9b0SAdrian Chadd  * contributed to the Linux staging repository.
104ad7e9b0SAdrian Chadd  *
114ad7e9b0SAdrian Chadd  * Permission to use, copy, modify, and/or distribute this software for any
124ad7e9b0SAdrian Chadd  * purpose with or without fee is hereby granted, provided that the above
134ad7e9b0SAdrian Chadd  * copyright notice and this permission notice appear in all copies.
144ad7e9b0SAdrian Chadd  *
154ad7e9b0SAdrian Chadd  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
164ad7e9b0SAdrian Chadd  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
174ad7e9b0SAdrian Chadd  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
184ad7e9b0SAdrian Chadd  * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
194ad7e9b0SAdrian Chadd  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
204ad7e9b0SAdrian Chadd  * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
214ad7e9b0SAdrian Chadd  * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
224ad7e9b0SAdrian Chadd  *
234ad7e9b0SAdrian Chadd  */
244ad7e9b0SAdrian Chadd 
254ad7e9b0SAdrian Chadd #ifndef	_BCMA_BCMA_EROM_REG_H_
264ad7e9b0SAdrian Chadd #define	_BCMA_BCMA_EROM_REG_H_
274ad7e9b0SAdrian Chadd 
284ad7e9b0SAdrian Chadd /* Enumeration ROM device registers */
294ad7e9b0SAdrian Chadd #define	BCMA_EROM_TABLE_START	0x000	/**< device enumeration table offset */
304ad7e9b0SAdrian Chadd #define	BCMA_EROM_REMAPCONTROL	0xe00
314ad7e9b0SAdrian Chadd #define	BCMA_EROM_REMAPSELECT	0xe04
324ad7e9b0SAdrian Chadd #define	BCMA_EROM_MASTERSELECT	0xe10
334ad7e9b0SAdrian Chadd #define	BCMA_EROM_ITCR		0xf00
344ad7e9b0SAdrian Chadd #define	BCMA_EROM_ITIP		0xf04
354ad7e9b0SAdrian Chadd #define	BCMA_EROM_TABLE_SIZE	BCMA_EROM_REMAPCONTROL - BCMA_EROM_TABLE_START
364ad7e9b0SAdrian Chadd 
374ad7e9b0SAdrian Chadd /**
384ad7e9b0SAdrian Chadd  * Extract an entry attribute by applying _MASK and _SHIFT defines.
394ad7e9b0SAdrian Chadd  *
404ad7e9b0SAdrian Chadd  * @param _entry The entry containing the desired attribute
414ad7e9b0SAdrian Chadd  * @param _attr The BCMA EROM attribute name (e.g. ENTRY_ISVALID), to be
424ad7e9b0SAdrian Chadd  * concatenated with the `BCMA_EROM_` prefix and `_MASK`/`_SHIFT` suffixes.
434ad7e9b0SAdrian Chadd  */
444ad7e9b0SAdrian Chadd #define	BCMA_EROM_GET_ATTR(_entry, _attr)			\
454ad7e9b0SAdrian Chadd 	((_entry & BCMA_EROM_ ## _attr ## _MASK)	\
464ad7e9b0SAdrian Chadd 	>> BCMA_EROM_ ## _attr ## _SHIFT)
474ad7e9b0SAdrian Chadd 
484ad7e9b0SAdrian Chadd /**
494ad7e9b0SAdrian Chadd  * Test an EROM entry's validity and type.
504ad7e9b0SAdrian Chadd  *
514ad7e9b0SAdrian Chadd  * @param _entry The entry to test.
524ad7e9b0SAdrian Chadd  * @param _type The required type
534ad7e9b0SAdrian Chadd  * @retval true if the entry type matches and the BCMA_EROM_ENTRY_ISVALID flag
544ad7e9b0SAdrian Chadd  * is set.
554ad7e9b0SAdrian Chadd  * @retval false if the entry is not valid, or if the type does not match.
564ad7e9b0SAdrian Chadd  */
574ad7e9b0SAdrian Chadd #define	BCMA_EROM_ENTRY_IS(_entry, _type)					\
584ad7e9b0SAdrian Chadd 	(BCMA_EROM_GET_ATTR(_entry, ENTRY_ISVALID) &&			\
594ad7e9b0SAdrian Chadd 	 BCMA_EROM_GET_ATTR(_entry, ENTRY_TYPE) == BCMA_EROM_ENTRY_TYPE_ ## _type)
604ad7e9b0SAdrian Chadd 
614ad7e9b0SAdrian Chadd /*
624ad7e9b0SAdrian Chadd  * Enumeration ROM Constants
634ad7e9b0SAdrian Chadd  */
644ad7e9b0SAdrian Chadd #define	BCMA_EROM_TABLE_EOF		0xF		/* end of EROM table */
654ad7e9b0SAdrian Chadd 
664ad7e9b0SAdrian Chadd #define	BCMA_EROM_ENTRY_ISVALID_MASK	0x1		/* is entry valid? */
674ad7e9b0SAdrian Chadd #define	BCMA_EROM_ENTRY_ISVALID_SHIFT	0
684ad7e9b0SAdrian Chadd 
694ad7e9b0SAdrian Chadd /* EROM Entry Types */
704ad7e9b0SAdrian Chadd #define	BCMA_EROM_ENTRY_TYPE_MASK	0x6		/* entry type mask */
714ad7e9b0SAdrian Chadd #define	BCMA_EROM_ENTRY_TYPE_SHIFT	0
724ad7e9b0SAdrian Chadd #  define BCMA_EROM_ENTRY_TYPE_CORE	0x0		/* core descriptor */
734ad7e9b0SAdrian Chadd #  define BCMA_EROM_ENTRY_TYPE_MPORT	0x2		/* master port descriptor */
744ad7e9b0SAdrian Chadd #  define BCMA_EROM_ENTRY_TYPE_REGION	0x4		/* address region descriptor */
754ad7e9b0SAdrian Chadd 
764ad7e9b0SAdrian Chadd /* EROM Core DescriptorA (31:0) */
774ad7e9b0SAdrian Chadd #define	BCMA_EROM_COREA_DESIGNER_MASK	0xFFF00000	/* core designer (JEP-106 mfg id) */
784ad7e9b0SAdrian Chadd #define	BCMA_EROM_COREA_DESIGNER_SHIFT	20
794ad7e9b0SAdrian Chadd #define	BCMA_EROM_COREA_ID_MASK		0x000FFF00	/* broadcom-assigned core id */
804ad7e9b0SAdrian Chadd #define	BCMA_EROM_COREA_ID_SHIFT	8
814ad7e9b0SAdrian Chadd #define	BCMA_EROM_COREA_CLASS_MASK	0x000000F0	/* core class */
824ad7e9b0SAdrian Chadd #define	BCMA_EROM_COREA_CLASS_SHIFT	4
834ad7e9b0SAdrian Chadd 
844ad7e9b0SAdrian Chadd /* EROM Core DescriptorB (63:32) */
854ad7e9b0SAdrian Chadd #define	BCMA_EROM_COREB_NUM_MP_MASK	0x000001F0	/* master port count */
864ad7e9b0SAdrian Chadd #define	BCMA_EROM_COREB_NUM_MP_SHIFT	4
874ad7e9b0SAdrian Chadd #define	BCMA_EROM_COREB_NUM_DP_MASK	0x00003E00	/* device/bridge port count */
884ad7e9b0SAdrian Chadd #define	BCMA_EROM_COREB_NUM_DP_SHIFT	9
894ad7e9b0SAdrian Chadd #define	BCMA_EROM_COREB_NUM_WMP_MASK	0x0007C000	/* master wrapper port count */
904ad7e9b0SAdrian Chadd #define	BCMA_EROM_COREB_NUM_WMP_SHIFT	14
914ad7e9b0SAdrian Chadd #define	BCMA_EROM_COREB_NUM_WSP_MASK	0x00F80000	/* slave wrapper port count */
924ad7e9b0SAdrian Chadd #define	BCMA_EROM_COREB_NUM_WSP_SHIFT	19
934ad7e9b0SAdrian Chadd #define	BCMA_EROM_COREB_REV_MASK	0xFF000000	/* broadcom-assigned core revision */
944ad7e9b0SAdrian Chadd #define	BCMA_EROM_COREB_REV_SHIFT	24
954ad7e9b0SAdrian Chadd 
964ad7e9b0SAdrian Chadd /* EROM Master Port Descriptor
974ad7e9b0SAdrian Chadd  *
984ad7e9b0SAdrian Chadd  * The attribute descriptions are derived from background information
994ad7e9b0SAdrian Chadd  * on the AXI bus and PL301 interconnect, but are undocumented
1004ad7e9b0SAdrian Chadd  * by Broadcom and may be incorrect.
1014ad7e9b0SAdrian Chadd  */
1024ad7e9b0SAdrian Chadd #define	BCMA_EROM_MPORT_NUM_MASK	0x0000FF00	/* AXI master number (unique per interconnect) */
1034ad7e9b0SAdrian Chadd #define	BCMA_EROM_MPORT_NUM_SHIFT	8
1044ad7e9b0SAdrian Chadd #define	BCMA_EROM_MPORT_ID_MASK		0x000000F0	/* AXI master ID (unique per master). */
1054ad7e9b0SAdrian Chadd #define	BCMA_EROM_MPORT_ID_SHIFT	4
1064ad7e9b0SAdrian Chadd 
1074ad7e9b0SAdrian Chadd /* EROM Slave Port MMIO Region Descriptor */
1084ad7e9b0SAdrian Chadd #define	BCMA_EROM_REGION_BASE_MASK	0xFFFFF000	/* region base address */
1094ad7e9b0SAdrian Chadd #define	BCMA_EROM_REGION_BASE_SHIFT	0
1104ad7e9b0SAdrian Chadd #define	BCMA_EROM_REGION_64BIT_MASK	0x00000008	/* base address spans two 32-bit entries */
1114ad7e9b0SAdrian Chadd #define	BCMA_EROM_REGION_64BIT_SHIFT	0
1124ad7e9b0SAdrian Chadd #define	BCMA_EROM_REGION_PORT_MASK	0x00000F00	/* region's associated port */
1134ad7e9b0SAdrian Chadd #define	BCMA_EROM_REGION_PORT_SHIFT	8
1144ad7e9b0SAdrian Chadd #define	BCMA_EROM_REGION_TYPE_MASK	0x000000C0	/* region type */
1154ad7e9b0SAdrian Chadd #define	BCMA_EROM_REGION_TYPE_SHIFT	6
1164ad7e9b0SAdrian Chadd #define	  BCMA_EROM_REGION_TYPE_DEVICE	0		/* region maps to a device */
1174ad7e9b0SAdrian Chadd #define	  BCMA_EROM_REGION_TYPE_BRIDGE	1		/* region maps to a bridge (e.g. AXI2APB) */
1184ad7e9b0SAdrian Chadd #define	  BCMA_EROM_REGION_TYPE_SWRAP	2		/* region maps to a slave port's DMP agent/wrapper */
1194ad7e9b0SAdrian Chadd #define	  BCMA_EROM_REGION_TYPE_MWRAP	3		/* region maps to a master port's DMP agent/wrapper */
1204ad7e9b0SAdrian Chadd 
1214ad7e9b0SAdrian Chadd #define	BCMA_EROM_REGION_SIZE_MASK	0x00000030	/* region size encoding */
1224ad7e9b0SAdrian Chadd #define	BCMA_EROM_REGION_SIZE_SHIFT	4
1234ad7e9b0SAdrian Chadd #define	  BCMA_EROM_REGION_SIZE_4K	0		/* 4K region */
1244ad7e9b0SAdrian Chadd #define	  BCMA_EROM_REGION_SIZE_8K	1		/* 8K region */
1254ad7e9b0SAdrian Chadd #define	  BCMA_EROM_REGION_SIZE_16K	2		/* 16K region */
1264ad7e9b0SAdrian Chadd #define	  BCMA_EROM_REGION_SIZE_OTHER	3		/* defined by an additional size descriptor entry. */
1274ad7e9b0SAdrian Chadd #define	BCMA_EROM_REGION_SIZE_BASE	0x1000
1284ad7e9b0SAdrian Chadd 
1294ad7e9b0SAdrian Chadd /* Region Size Descriptor */
1304ad7e9b0SAdrian Chadd #define	BCMA_EROM_RSIZE_VAL_MASK	0xFFFFF000	/* region size */
1314ad7e9b0SAdrian Chadd #define	BCMA_EROM_RSIZE_VAL_SHIFT	0
1324ad7e9b0SAdrian Chadd #define	BCMA_EROM_RSIZE_64BIT_MASK	0x00000008	/* size spans two 32-bit entries */
1334ad7e9b0SAdrian Chadd #define	BCMA_EROM_RSIZE_64BIT_SHIFT	0
1344ad7e9b0SAdrian Chadd 
1354ad7e9b0SAdrian Chadd #endif /* _BCMA_BCMA_EROM_REG_H_ */
136