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