1/*- 2 * SPDX-License-Identifier: ISC 3 * 4 * Copyright (c) 2015 Landon Fuller <landon@landonf.org> 5 * Copyright (c) 2010 Broadcom Corporation 6 * 7 * Portions of this file were derived from the aidmp.h header 8 * distributed with Broadcom's initial brcm80211 Linux driver release, as 9 * contributed to the Linux staging repository. 10 * 11 * Permission to use, copy, modify, and/or distribute this software for any 12 * purpose with or without fee is hereby granted, provided that the above 13 * copyright notice and this permission notice appear in all copies. 14 * 15 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 16 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 17 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY 18 * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 19 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION 20 * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN 21 * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 22 * 23 * $FreeBSD$ 24 */ 25 26#ifndef _BCMA_BCMA_EROM_REG_H_ 27#define _BCMA_BCMA_EROM_REG_H_ 28 29/* Enumeration ROM device registers */ 30#define BCMA_EROM_TABLE_START 0x000 /**< device enumeration table offset */ 31#define BCMA_EROM_REMAPCONTROL 0xe00 32#define BCMA_EROM_REMAPSELECT 0xe04 33#define BCMA_EROM_MASTERSELECT 0xe10 34#define BCMA_EROM_ITCR 0xf00 35#define BCMA_EROM_ITIP 0xf04 36#define BCMA_EROM_TABLE_SIZE BCMA_EROM_REMAPCONTROL - BCMA_EROM_TABLE_START 37 38/** 39 * Extract an entry attribute by applying _MASK and _SHIFT defines. 40 * 41 * @param _entry The entry containing the desired attribute 42 * @param _attr The BCMA EROM attribute name (e.g. ENTRY_ISVALID), to be 43 * concatenated with the `BCMA_EROM_` prefix and `_MASK`/`_SHIFT` suffixes. 44 */ 45#define BCMA_EROM_GET_ATTR(_entry, _attr) \ 46 ((_entry & BCMA_EROM_ ## _attr ## _MASK) \ 47 >> BCMA_EROM_ ## _attr ## _SHIFT) 48 49/** 50 * Test an EROM entry's validity and type. 51 * 52 * @param _entry The entry to test. 53 * @param _type The required type 54 * @retval true if the entry type matches and the BCMA_EROM_ENTRY_ISVALID flag 55 * is set. 56 * @retval false if the entry is not valid, or if the type does not match. 57 */ 58#define BCMA_EROM_ENTRY_IS(_entry, _type) \ 59 (BCMA_EROM_GET_ATTR(_entry, ENTRY_ISVALID) && \ 60 BCMA_EROM_GET_ATTR(_entry, ENTRY_TYPE) == BCMA_EROM_ENTRY_TYPE_ ## _type) 61 62/* 63 * Enumeration ROM Constants 64 */ 65#define BCMA_EROM_TABLE_EOF 0xF /* end of EROM table */ 66 67#define BCMA_EROM_ENTRY_ISVALID_MASK 0x1 /* is entry valid? */ 68#define BCMA_EROM_ENTRY_ISVALID_SHIFT 0 69 70/* EROM Entry Types */ 71#define BCMA_EROM_ENTRY_TYPE_MASK 0x6 /* entry type mask */ 72#define BCMA_EROM_ENTRY_TYPE_SHIFT 0 73# define BCMA_EROM_ENTRY_TYPE_CORE 0x0 /* core descriptor */ 74# define BCMA_EROM_ENTRY_TYPE_MPORT 0x2 /* master port descriptor */ 75# define BCMA_EROM_ENTRY_TYPE_REGION 0x4 /* address region descriptor */ 76 77/* EROM Core DescriptorA (31:0) */ 78#define BCMA_EROM_COREA_DESIGNER_MASK 0xFFF00000 /* core designer (JEP-106 mfg id) */ 79#define BCMA_EROM_COREA_DESIGNER_SHIFT 20 80#define BCMA_EROM_COREA_ID_MASK 0x000FFF00 /* broadcom-assigned core id */ 81#define BCMA_EROM_COREA_ID_SHIFT 8 82#define BCMA_EROM_COREA_CLASS_MASK 0x000000F0 /* core class */ 83#define BCMA_EROM_COREA_CLASS_SHIFT 4 84 85/* EROM Core DescriptorB (63:32) */ 86#define BCMA_EROM_COREB_NUM_MP_MASK 0x000001F0 /* master port count */ 87#define BCMA_EROM_COREB_NUM_MP_SHIFT 4 88#define BCMA_EROM_COREB_NUM_DP_MASK 0x00003E00 /* device/bridge port count */ 89#define BCMA_EROM_COREB_NUM_DP_SHIFT 9 90#define BCMA_EROM_COREB_NUM_WMP_MASK 0x0007C000 /* master wrapper port count */ 91#define BCMA_EROM_COREB_NUM_WMP_SHIFT 14 92#define BCMA_EROM_COREB_NUM_WSP_MASK 0x00F80000 /* slave wrapper port count */ 93#define BCMA_EROM_COREB_NUM_WSP_SHIFT 19 94#define BCMA_EROM_COREB_REV_MASK 0xFF000000 /* broadcom-assigned core revision */ 95#define BCMA_EROM_COREB_REV_SHIFT 24 96 97/* EROM Master Port Descriptor 98 * 99 * The attribute descriptions are derived from background information 100 * on the AXI bus and PL301 interconnect, but are undocumented 101 * by Broadcom and may be incorrect. 102 */ 103#define BCMA_EROM_MPORT_NUM_MASK 0x0000FF00 /* AXI master number (unique per interconnect) */ 104#define BCMA_EROM_MPORT_NUM_SHIFT 8 105#define BCMA_EROM_MPORT_ID_MASK 0x000000F0 /* AXI master ID (unique per master). */ 106#define BCMA_EROM_MPORT_ID_SHIFT 4 107 108 109/* EROM Slave Port MMIO Region Descriptor */ 110#define BCMA_EROM_REGION_BASE_MASK 0xFFFFF000 /* region base address */ 111#define BCMA_EROM_REGION_BASE_SHIFT 0 112#define BCMA_EROM_REGION_64BIT_MASK 0x00000008 /* base address spans two 32-bit entries */ 113#define BCMA_EROM_REGION_64BIT_SHIFT 0 114#define BCMA_EROM_REGION_PORT_MASK 0x00000F00 /* region's associated port */ 115#define BCMA_EROM_REGION_PORT_SHIFT 8 116#define BCMA_EROM_REGION_TYPE_MASK 0x000000C0 /* region type */ 117#define BCMA_EROM_REGION_TYPE_SHIFT 6 118#define BCMA_EROM_REGION_TYPE_DEVICE 0 /* region maps to a device */ 119#define BCMA_EROM_REGION_TYPE_BRIDGE 1 /* region maps to a bridge (e.g. AXI2APB) */ 120#define BCMA_EROM_REGION_TYPE_SWRAP 2 /* region maps to a slave port's DMP agent/wrapper */ 121#define BCMA_EROM_REGION_TYPE_MWRAP 3 /* region maps to a master port's DMP agent/wrapper */ 122 123#define BCMA_EROM_REGION_SIZE_MASK 0x00000030 /* region size encoding */ 124#define BCMA_EROM_REGION_SIZE_SHIFT 4 125#define BCMA_EROM_REGION_SIZE_4K 0 /* 4K region */ 126#define BCMA_EROM_REGION_SIZE_8K 1 /* 8K region */ 127#define BCMA_EROM_REGION_SIZE_16K 2 /* 16K region */ 128#define BCMA_EROM_REGION_SIZE_OTHER 3 /* defined by an additional size descriptor entry. */ 129#define BCMA_EROM_REGION_SIZE_BASE 0x1000 130 131/* Region Size Descriptor */ 132#define BCMA_EROM_RSIZE_VAL_MASK 0xFFFFF000 /* region size */ 133#define BCMA_EROM_RSIZE_VAL_SHIFT 0 134#define BCMA_EROM_RSIZE_64BIT_MASK 0x00000008 /* size spans two 32-bit entries */ 135#define BCMA_EROM_RSIZE_64BIT_SHIFT 0 136 137#endif /* _BCMA_BCMA_EROM_REG_H_ */ 138