1*4882a593Smuzhiyun /* 2*4882a593Smuzhiyun * Broadcom SiliconBackplane ARM definitions 3*4882a593Smuzhiyun * 4*4882a593Smuzhiyun * Copyright (C) 2020, Broadcom. 5*4882a593Smuzhiyun * 6*4882a593Smuzhiyun * Unless you and Broadcom execute a separate written software license 7*4882a593Smuzhiyun * agreement governing use of this software, this software is licensed to you 8*4882a593Smuzhiyun * under the terms of the GNU General Public License version 2 (the "GPL"), 9*4882a593Smuzhiyun * available at http://www.broadcom.com/licenses/GPLv2.php, with the 10*4882a593Smuzhiyun * following added to such license: 11*4882a593Smuzhiyun * 12*4882a593Smuzhiyun * As a special exception, the copyright holders of this software give you 13*4882a593Smuzhiyun * permission to link this software with independent modules, and to copy and 14*4882a593Smuzhiyun * distribute the resulting executable under terms of your choice, provided that 15*4882a593Smuzhiyun * you also meet, for each linked independent module, the terms and conditions of 16*4882a593Smuzhiyun * the license of that module. An independent module is a module which is not 17*4882a593Smuzhiyun * derived from this software. The special exception does not apply to any 18*4882a593Smuzhiyun * modifications of the software. 19*4882a593Smuzhiyun * 20*4882a593Smuzhiyun * 21*4882a593Smuzhiyun * <<Broadcom-WL-IPTag/Dual:>> 22*4882a593Smuzhiyun */ 23*4882a593Smuzhiyun 24*4882a593Smuzhiyun #ifndef _sbhndarm_h_ 25*4882a593Smuzhiyun #define _sbhndarm_h_ 26*4882a593Smuzhiyun 27*4882a593Smuzhiyun #ifdef DONGLEBUILD 28*4882a593Smuzhiyun 29*4882a593Smuzhiyun #include <arminc.h> 30*4882a593Smuzhiyun #include <sbconfig.h> 31*4882a593Smuzhiyun 32*4882a593Smuzhiyun /* register offsets */ 33*4882a593Smuzhiyun #define ARM7_CORECTL 0 34*4882a593Smuzhiyun 35*4882a593Smuzhiyun /* bits in corecontrol */ 36*4882a593Smuzhiyun #define ACC_FORCED_RST 0x1 37*4882a593Smuzhiyun #define ACC_SERRINT 0x2 38*4882a593Smuzhiyun #define ACC_WFICLKSTOP 0x4 39*4882a593Smuzhiyun 40*4882a593Smuzhiyun #if !defined(__ARM_ARCH_7A__) 41*4882a593Smuzhiyun #define ACC_NOTSLEEPINGCLKREQ_SHIFT 24 42*4882a593Smuzhiyun #endif /* !__ARM_ARCH_7A__ */ 43*4882a593Smuzhiyun 44*4882a593Smuzhiyun #if defined(__ARM_ARCH_7A__) 45*4882a593Smuzhiyun 46*4882a593Smuzhiyun #define ACC_FORCECLOCKRATIO (0x1u << 8) 47*4882a593Smuzhiyun #define ACC_CLOCKRATIO_SHIFT (9u) 48*4882a593Smuzhiyun #define ACC_CLOCKRATIO_MASK (0xFu << ACC_CLOCKRATIO_SHIFT) 49*4882a593Smuzhiyun 50*4882a593Smuzhiyun #define ACC_CLOCKRATIO_1_TO_1 (0u) 51*4882a593Smuzhiyun #define ACC_CLOCKRATIO_2_TO_1 (1u) 52*4882a593Smuzhiyun #define ACC_CLOCKRATIO_3_TO_1 (2u) 53*4882a593Smuzhiyun #define ACC_CLOCKRATIO_4_TO_1 (3u) 54*4882a593Smuzhiyun 55*4882a593Smuzhiyun #define ACC_FASTCLOCKCHANNEL_SHIFT (24u) 56*4882a593Smuzhiyun #define ACC_FASTCLOCKCHANNEL_MASK (0x3u << ACC_FASTCLOCKCHANNEL_SHIFT) 57*4882a593Smuzhiyun #define ACC_NUM_FASTCLOCKS_SHIFT (2u) 58*4882a593Smuzhiyun #define ACC_NUM_FASTCLOCKS_MASK (0x3u << ACC_NUM_FASTCLOCKS_SHIFT) 59*4882a593Smuzhiyun 60*4882a593Smuzhiyun #define ACC_NOTSLEEPINGCLKREQ_SHIFT (4u) 61*4882a593Smuzhiyun #define ACC_NOTSLEEPINGCLKREQ_MASK (0x3u << ACC_NOT_SLEEPING_CLKREQ_SHIFT) 62*4882a593Smuzhiyun #define ACC_NOTSLEEPING_ALP (0u) 63*4882a593Smuzhiyun #define ACC_NOTSLEEPING_HT (1u) 64*4882a593Smuzhiyun #define ACC_NOTSLEEPING_ALP_HT_AVAIL (2u) 65*4882a593Smuzhiyun #define ACC_NOTSLEEPING_HT_AVAIL (3u) 66*4882a593Smuzhiyun 67*4882a593Smuzhiyun #elif defined(__ARM_ARCH_7R__) /* CR4 */ 68*4882a593Smuzhiyun 69*4882a593Smuzhiyun #define ACC_FORCECLOCKRATIO (1u << 7u) 70*4882a593Smuzhiyun #define ACC_CLOCKRATIO_SHIFT 8u 71*4882a593Smuzhiyun #define ACC_CLOCKRATIO_MASK (0xFu << ACC_CLOCKRATIO_SHIFT) 72*4882a593Smuzhiyun #define ACC_CLOCKMODE_SHIFT 12u 73*4882a593Smuzhiyun #define ACC_CLOCKMODE_MASK (7u << ACC_CLOCKMODE_SHIFT) 74*4882a593Smuzhiyun #define ACC_NOTSLEEPCLKREQ0 3u 75*4882a593Smuzhiyun #define ACC_NOTSLEEPCLKREQ1 18u 76*4882a593Smuzhiyun #define ACC_FLOPSPROTECT (1u << 20u) 77*4882a593Smuzhiyun 78*4882a593Smuzhiyun #define ACC_CLOCKRATIO_1_TO_1 (0u) 79*4882a593Smuzhiyun #define ACC_CLOCKRATIO_2_TO_1 (4u) 80*4882a593Smuzhiyun 81*4882a593Smuzhiyun #endif /* __ARM_ARCH_7A__ */ 82*4882a593Smuzhiyun 83*4882a593Smuzhiyun #define ACC_CLOCKMODE_SAME (0) /**< BP and CPU clock are the same */ 84*4882a593Smuzhiyun #define ACC_CLOCKMODE_ASYNC (1) /**< BP and CPU clock are asynchronous */ 85*4882a593Smuzhiyun #define ACC_CLOCKMODE_SYNCH (2) /**< BP and CPU clock are synch, ratio 1:1 or 1:2 */ 86*4882a593Smuzhiyun 87*4882a593Smuzhiyun /* Request ALP on backplane bit 3 and 18 */ 88*4882a593Smuzhiyun #define ACC_REQALP ((1<<ACC_NOTSLEEPCLKREQ0) | (1<<ACC_NOTSLEEPCLKREQ1)) 89*4882a593Smuzhiyun 90*4882a593Smuzhiyun #define ACC_MPU_SHIFT 25u 91*4882a593Smuzhiyun #define ACC_MPU_MASK (0x1u << ACC_MPU_SHIFT) 92*4882a593Smuzhiyun 93*4882a593Smuzhiyun #define ACC_MPU_REGION_CNT_MASK 0x7u 94*4882a593Smuzhiyun #define ACC_MPU_REGION_CNT_SHIFT 3u 95*4882a593Smuzhiyun 96*4882a593Smuzhiyun #define ACC_MPU_SECURE_SHIFT 27u 97*4882a593Smuzhiyun #define ACC_MPU_SECURE_MASK (0x1u << ACC_MPU_SECURE_SHIFT) 98*4882a593Smuzhiyun #define ACC_MPU_READ_SHIFT 30u 99*4882a593Smuzhiyun #define ACC_MPU_READ_MASK (0x1u << ACC_MPU_READ_SHIFT) 100*4882a593Smuzhiyun #define ACC_MPU_WRITE_SHIFT 29u 101*4882a593Smuzhiyun #define ACC_MPU_WRITE_MASK (0x1u << ACC_MPU_WRITE_SHIFT) 102*4882a593Smuzhiyun #define ACC_MPU_VALID_SHIFT 31u 103*4882a593Smuzhiyun #define ACC_MPU_VALID_MASK (0x1u << ACC_MPU_VALID_SHIFT) 104*4882a593Smuzhiyun 105*4882a593Smuzhiyun /* arm resetlog */ 106*4882a593Smuzhiyun #define SBRESETLOG 0x1 107*4882a593Smuzhiyun #define SERRORLOG 0x2 108*4882a593Smuzhiyun 109*4882a593Smuzhiyun /* arm core-specific control flags */ 110*4882a593Smuzhiyun #define SICF_REMAP_MSK 0x001c 111*4882a593Smuzhiyun #define SICF_REMAP_NONE 0 112*4882a593Smuzhiyun #define SICF_REMAP_ROM 0x0004 113*4882a593Smuzhiyun #define SIFC_REMAP_FLASH 0x0008 114*4882a593Smuzhiyun 115*4882a593Smuzhiyun /* misc core-specific defines */ 116*4882a593Smuzhiyun #if defined(__ARM_ARCH_7M__) 117*4882a593Smuzhiyun /* cortex-m3 */ 118*4882a593Smuzhiyun /* backplane related stuff */ 119*4882a593Smuzhiyun #define ARM_CORE_ID ARMCM3_CORE_ID /**< arm coreid */ 120*4882a593Smuzhiyun #define SI_ARM_ROM SI_ARMCM3_ROM /**< ROM backplane/system address */ 121*4882a593Smuzhiyun #define SI_ARM_SRAM2 SI_ARMCM3_SRAM2 /**< RAM backplane address when remap is 1 or 2 */ 122*4882a593Smuzhiyun /* core registers offsets */ 123*4882a593Smuzhiyun #define ARMCM3_CYCLECNT 0x90 /**< Cortex-M3 core registers offsets */ 124*4882a593Smuzhiyun #define ARMCM3_INTTIMER 0x94 125*4882a593Smuzhiyun #define ARMCM3_INTMASK 0x98 126*4882a593Smuzhiyun #define ARMCM3_INTSTATUS 0x9c 127*4882a593Smuzhiyun /* interrupt/exception */ 128*4882a593Smuzhiyun #define ARMCM3_NUMINTS 16 /**< # of external interrupts */ 129*4882a593Smuzhiyun #define ARMCM3_INTALL ((1 << ARMCM3_NUMINTS) - 1) /**< Interrupt mask */ 130*4882a593Smuzhiyun #define ARMCM3_SHARED_INT 0 /**< Interrupt shared by multiple cores */ 131*4882a593Smuzhiyun #define ARMCM3_INT(i) (1 << (i)) /**< Individual interrupt enable/disable */ 132*4882a593Smuzhiyun /* intmask/intstatus bits */ 133*4882a593Smuzhiyun #define ARMCM3_INTMASK_TIMER 0x1 134*4882a593Smuzhiyun #define ARMCM3_INTMASK_SYSRESET 0x4 135*4882a593Smuzhiyun #define ARMCM3_INTMASK_LOCKUP 0x8 136*4882a593Smuzhiyun 137*4882a593Smuzhiyun /* 138*4882a593Smuzhiyun * Overlay Support in Rev 5 139*4882a593Smuzhiyun */ 140*4882a593Smuzhiyun #define ARMCM3_OVL_VALID_SHIFT 0 141*4882a593Smuzhiyun #define ARMCM3_OVL_VALID 1 142*4882a593Smuzhiyun #define ARMCM3_OVL_SZ_SHIFT 1 143*4882a593Smuzhiyun #define ARMCM3_OVL_SZ_MASK 0x0000000e 144*4882a593Smuzhiyun #define ARMCM3_OVL_SZ_512B 0 /* 512B */ 145*4882a593Smuzhiyun #define ARMCM3_OVL_SZ_1KB 1 /* 1KB */ 146*4882a593Smuzhiyun #define ARMCM3_OVL_SZ_2KB 2 /* 2KB */ 147*4882a593Smuzhiyun #define ARMCM3_OVL_SZ_4KB 3 /* 4KB */ 148*4882a593Smuzhiyun #define ARMCM3_OVL_SZ_8KB 4 /* 8KB */ 149*4882a593Smuzhiyun #define ARMCM3_OVL_SZ_16KB 5 /* 16KB */ 150*4882a593Smuzhiyun #define ARMCM3_OVL_SZ_32KB 6 /* 32KB */ 151*4882a593Smuzhiyun #define ARMCM3_OVL_SZ_64KB 7 /* 64KB */ 152*4882a593Smuzhiyun #define ARMCM3_OVL_ADDR_SHIFT 9 153*4882a593Smuzhiyun #define ARMCM3_OVL_ADDR_MASK 0x003FFE00 154*4882a593Smuzhiyun #define ARMCM3_OVL_MAX 16 155*4882a593Smuzhiyun 156*4882a593Smuzhiyun #elif defined(__ARM_ARCH_7R__) 157*4882a593Smuzhiyun /* cortex-r4 */ 158*4882a593Smuzhiyun /* backplane related stuff */ 159*4882a593Smuzhiyun #define ARM_CORE_ID ARMCR4_CORE_ID /**< arm coreid */ 160*4882a593Smuzhiyun #define SI_ARM_ROM SI_ARMCR4_ROM /**< ROM backplane/system address */ 161*4882a593Smuzhiyun #define SI_ARM_SRAM2 0x0 /**< In the cr4 the RAM is just not available 162*4882a593Smuzhiyun * when remap is 1 163*4882a593Smuzhiyun */ 164*4882a593Smuzhiyun 165*4882a593Smuzhiyun /* core registers offsets */ 166*4882a593Smuzhiyun #define ARMCR4_CORECTL 0 167*4882a593Smuzhiyun #define ARMCR4_CORECAP 4 168*4882a593Smuzhiyun #define ARMCR4_COREST 8 169*4882a593Smuzhiyun 170*4882a593Smuzhiyun #define ARMCR4_FIQRSTATUS 0x10 171*4882a593Smuzhiyun #define ARMCR4_FIQMASK 0x14 172*4882a593Smuzhiyun #define ARMCR4_IRQMASK 0x18 173*4882a593Smuzhiyun 174*4882a593Smuzhiyun #define ARMCR4_INTSTATUS 0x20 175*4882a593Smuzhiyun #define ARMCR4_INTMASK 0x24 176*4882a593Smuzhiyun #define ARMCR4_CYCLECNT 0x28 177*4882a593Smuzhiyun #define ARMCR4_INTTIMER 0x2c 178*4882a593Smuzhiyun 179*4882a593Smuzhiyun #define ARMCR4_GPIOSEL 0x30 180*4882a593Smuzhiyun #define ARMCR4_GPIOEN 0x34 181*4882a593Smuzhiyun 182*4882a593Smuzhiyun #define ARMCR4_BANKIDX 0x40 183*4882a593Smuzhiyun #define ARMCR4_BANKINFO 0x44 184*4882a593Smuzhiyun #define ARMCR4_BANKSTBY 0x48 185*4882a593Smuzhiyun #define ARMCR4_BANKPDA 0x4c 186*4882a593Smuzhiyun 187*4882a593Smuzhiyun #define ARMCR4_TCAMPATCHCTRL 0x68 188*4882a593Smuzhiyun #define ARMCR4_TCAMPATCHTBLBASEADDR 0x6C 189*4882a593Smuzhiyun #define ARMCR4_TCAMCMDREG 0x70 190*4882a593Smuzhiyun #define ARMCR4_TCAMDATAREG 0x74 191*4882a593Smuzhiyun #define ARMCR4_TCAMBANKXMASKREG 0x78 192*4882a593Smuzhiyun 193*4882a593Smuzhiyun #define ARMCR4_ROMNB_MASK 0xf00 194*4882a593Smuzhiyun #define ARMCR4_ROMNB_SHIFT 8 195*4882a593Smuzhiyun #define ARMCR4_MSB_ROMNB_MASK 0x1E00000 196*4882a593Smuzhiyun /* adjusted shift to fit 4-LSB (21 - 4 = 17) */ 197*4882a593Smuzhiyun #define ARMCR4_MSB_ROMNB_SHIFT 17 198*4882a593Smuzhiyun #define ARMCR4_TCBBNB_MASK 0xf0 199*4882a593Smuzhiyun #define ARMCR4_TCBBNB_SHIFT 4 200*4882a593Smuzhiyun #define ARMCR4_TCBANB_MASK 0xf 201*4882a593Smuzhiyun #define ARMCR4_TCBANB_SHIFT 0 202*4882a593Smuzhiyun 203*4882a593Smuzhiyun #define ARMCR4_MT_MASK 0x300 204*4882a593Smuzhiyun #define ARMCR4_MT_SHIFT 8 205*4882a593Smuzhiyun #define ARMCR4_MT_ROM 0x100 206*4882a593Smuzhiyun #define ARMCR4_MT_RAM 0 207*4882a593Smuzhiyun 208*4882a593Smuzhiyun #define ARMCR4_BSZ_MASK 0x7f 209*4882a593Smuzhiyun #define ARMCR4_BUNITSZ_MASK 0x200 210*4882a593Smuzhiyun #define ARMCR4_BSZ_8K 8192 211*4882a593Smuzhiyun #define ARMCR4_BSZ_1K 1024 212*4882a593Smuzhiyun 213*4882a593Smuzhiyun #define ARMCR4_STBY_SUPPORTED 0x400 214*4882a593Smuzhiyun #define ARMCR4_STBY_TIMER_PRESENT 0x800 215*4882a593Smuzhiyun 216*4882a593Smuzhiyun #define ARMCR4_TIMER_VAL_MASK 0xfffff 217*4882a593Smuzhiyun #define ARMCR4_STBY_TIMER_ENABLE (1 << 24) 218*4882a593Smuzhiyun #define ARMCR4_STBY_OVERRIDE (1 << 31) 219*4882a593Smuzhiyun 220*4882a593Smuzhiyun #define ARMCR4_TCAM_ENABLE (1u << 31u) 221*4882a593Smuzhiyun #define ARMCR4_TCAM_CLKENAB (1u << 30u) 222*4882a593Smuzhiyun #define ARMCR4_TCAM_WRITEPROT (1u << 29u) 223*4882a593Smuzhiyun #define ARMCR4_TCAM_PATCHCNT_MASK 0xfu 224*4882a593Smuzhiyun 225*4882a593Smuzhiyun #define ARMCR4_TCAM_CMD_DONE (1u << 31) 226*4882a593Smuzhiyun #define ARMCR4_TCAM_MATCH (1u << 24) 227*4882a593Smuzhiyun #define ARMCR4_TCAM_OPCODE_MASK (3 << 16) 228*4882a593Smuzhiyun #define ARMCR4_TCAM_OPCODE_SHIFT 16 229*4882a593Smuzhiyun #define ARMCR4_TCAM_ADDR_MASK 0xffff 230*4882a593Smuzhiyun #define ARMCR4_TCAM_NONE (0 << ARMCR4_TCAM_OPCODE_SHIFT) 231*4882a593Smuzhiyun #define ARMCR4_TCAM_READ (1 << ARMCR4_TCAM_OPCODE_SHIFT) 232*4882a593Smuzhiyun #define ARMCR4_TCAM_WRITE (2 << ARMCR4_TCAM_OPCODE_SHIFT) 233*4882a593Smuzhiyun #define ARMCR4_TCAM_COMPARE (3 << ARMCR4_TCAM_OPCODE_SHIFT) 234*4882a593Smuzhiyun #define ARMCR4_TCAM_CMD_DONE_DLY 1000 235*4882a593Smuzhiyun 236*4882a593Smuzhiyun #define ARMCR4_DATA_MASK (~0x7) 237*4882a593Smuzhiyun #define ARMCR4_DATA_VALID (1u << 0) 238*4882a593Smuzhiyun 239*4882a593Smuzhiyun /* intmask/intstatus bits */ 240*4882a593Smuzhiyun #define ARMCR4_INTMASK_TIMER (0x1) 241*4882a593Smuzhiyun #define ARMCR4_INTMASK_CLOCKSTABLE (0x20000000) 242*4882a593Smuzhiyun 243*4882a593Smuzhiyun #define CHIP_SDRENABLE(sih) (sih->boardflags2 & BFL2_SDR_EN) 244*4882a593Smuzhiyun #define CHIP_TCMPROTENAB(sih) (si_arm_sflags(sih) & SISF_TCMPROT) 245*4882a593Smuzhiyun 246*4882a593Smuzhiyun /* Power Control */ 247*4882a593Smuzhiyun #define ARM_ENAB_MEM_CLK_GATE_SHIFT 5 248*4882a593Smuzhiyun 249*4882a593Smuzhiyun #define ROM_STBY_TIMER_4378 0xb0 250*4882a593Smuzhiyun #define RAM_STBY_TIMER_4378 0x64 251*4882a593Smuzhiyun 252*4882a593Smuzhiyun #define ROM_STBY_TIMER_4387 0x10 253*4882a593Smuzhiyun #define RAM_STBY_TIMER_4387 0x100 254*4882a593Smuzhiyun 255*4882a593Smuzhiyun #define RAM_STBY_DEFAULT_WAIT_TIME (3u) 256*4882a593Smuzhiyun #define ROM_STBY_DEFAULT_WAIT_TIME (4u) 257*4882a593Smuzhiyun #define DEFAULT_FORCE_STBY_IN_WFI (1u) 258*4882a593Smuzhiyun #define ARMCR4_DYN_STBY_CTRL_RAM_STBY_WAIT_TIMER_SHIFT (0u) 259*4882a593Smuzhiyun #define ARMCR4_DYN_STBY_CTRL_RAM_STBY_WAIT_TIMER_MASK (0xF << \ 260*4882a593Smuzhiyun ARMCR4_DYN_STBY_CTRL_RAM_STBY_WAIT_TIMER_SHIFT) 261*4882a593Smuzhiyun #define ARMCR4_DYN_STBY_CTRL_ROM_STBY_WAIT_TIMER_SHIFT (8u) 262*4882a593Smuzhiyun #define ARMCR4_DYN_STBY_CTRL_ROM_STBY_WAIT_TIMER_MASK (0x3F << \ 263*4882a593Smuzhiyun ARMCR4_DYN_STBY_CTRL_ROM_STBY_WAIT_TIMER_SHIFT) 264*4882a593Smuzhiyun #define ARMCR4_DYN_STBY_CTRL_FORCE_STBY_IN_WFI_SHIFT (16u) 265*4882a593Smuzhiyun #define ARMCR4_DYN_STBY_CTRL_FORCE_STBY_IN_WFI_MASK (0x1 << \ 266*4882a593Smuzhiyun ARMCR4_DYN_STBY_CTRL_FORCE_STBY_IN_WFI_SHIFT) 267*4882a593Smuzhiyun 268*4882a593Smuzhiyun /* using CHIPID because no capabilities bit */ 269*4882a593Smuzhiyun #define ARM_CLKGATING_CAP(sih) ((void)(sih), (BCM4378_CHIP(sih->chip) ||\ 270*4882a593Smuzhiyun BCM4387_CHIP(sih->chip))) 271*4882a593Smuzhiyun 272*4882a593Smuzhiyun #define ARM_CLKGATING_ENAB(sih) (ARM_CLKGATING_CAP(sih) && 1) 273*4882a593Smuzhiyun 274*4882a593Smuzhiyun #elif defined(__ARM_ARCH_7A__) 275*4882a593Smuzhiyun 276*4882a593Smuzhiyun #if defined(CA7) 277*4882a593Smuzhiyun /* backplane related stuff */ 278*4882a593Smuzhiyun #define ARM_CORE_ID ARMCA7_CORE_ID 279*4882a593Smuzhiyun #define SI_ARM_ROM SI_ARMCA7_ROM /**< ROM backplane/system address */ 280*4882a593Smuzhiyun 281*4882a593Smuzhiyun #else 282*4882a593Smuzhiyun /* backplane related stuff */ 283*4882a593Smuzhiyun #define ARM_CORE_ID ARMCA9_CORE_ID /* arm coreid */ 284*4882a593Smuzhiyun #endif /* __ARM_ARCH_7A__ */ 285*4882a593Smuzhiyun #else /* !__ARM_ARCH_7M__ && !__ARM_ARCH_7R__ */ 286*4882a593Smuzhiyun #error Unrecognized ARM Architecture 287*4882a593Smuzhiyun #endif /* !__ARM_ARCH_7M__ && !__ARM_ARCH_7R__ */ 288*4882a593Smuzhiyun 289*4882a593Smuzhiyun #endif /* DONGLEBUILD */ 290*4882a593Smuzhiyun 291*4882a593Smuzhiyun #ifndef _LANGUAGE_ASSEMBLY 292*4882a593Smuzhiyun 293*4882a593Smuzhiyun /* cpp contortions to concatenate w/arg prescan */ 294*4882a593Smuzhiyun #ifndef PAD 295*4882a593Smuzhiyun #define _PADLINE(line) pad ## line 296*4882a593Smuzhiyun #define _XSTR(line) _PADLINE(line) 297*4882a593Smuzhiyun #define PAD _XSTR(__LINE__) 298*4882a593Smuzhiyun #endif /* PAD */ 299*4882a593Smuzhiyun 300*4882a593Smuzhiyun /* cortex-m3 */ 301*4882a593Smuzhiyun typedef volatile struct { 302*4882a593Smuzhiyun uint32 corecontrol; /* 0x0 */ 303*4882a593Smuzhiyun uint32 corestatus; /* 0x4 */ 304*4882a593Smuzhiyun uint32 PAD[1]; 305*4882a593Smuzhiyun uint32 biststatus; /* 0xc */ 306*4882a593Smuzhiyun uint32 nmiisrst; /* 0x10 */ 307*4882a593Smuzhiyun uint32 nmimask; /* 0x14 */ 308*4882a593Smuzhiyun uint32 isrmask; /* 0x18 */ 309*4882a593Smuzhiyun uint32 PAD[1]; 310*4882a593Smuzhiyun uint32 resetlog; /* 0x20 */ 311*4882a593Smuzhiyun uint32 gpioselect; /* 0x24 */ 312*4882a593Smuzhiyun uint32 gpioenable; /* 0x28 */ 313*4882a593Smuzhiyun uint32 PAD[1]; 314*4882a593Smuzhiyun uint32 bpaddrlo; /* 0x30 */ 315*4882a593Smuzhiyun uint32 bpaddrhi; /* 0x34 */ 316*4882a593Smuzhiyun uint32 bpdata; /* 0x38 */ 317*4882a593Smuzhiyun uint32 bpindaccess; /* 0x3c */ 318*4882a593Smuzhiyun uint32 ovlidx; /* 0x40 */ 319*4882a593Smuzhiyun uint32 ovlmatch; /* 0x44 */ 320*4882a593Smuzhiyun uint32 ovladdr; /* 0x48 */ 321*4882a593Smuzhiyun uint32 PAD[13]; 322*4882a593Smuzhiyun uint32 bwalloc; /* 0x80 */ 323*4882a593Smuzhiyun uint32 PAD[3]; 324*4882a593Smuzhiyun uint32 cyclecnt; /* 0x90 */ 325*4882a593Smuzhiyun uint32 inttimer; /* 0x94 */ 326*4882a593Smuzhiyun uint32 intmask; /* 0x98 */ 327*4882a593Smuzhiyun uint32 intstatus; /* 0x9c */ 328*4882a593Smuzhiyun uint32 PAD[80]; 329*4882a593Smuzhiyun uint32 clk_ctl_st; /* 0x1e0 */ 330*4882a593Smuzhiyun uint32 PAD[1]; 331*4882a593Smuzhiyun uint32 powerctl; /* 0x1e8 */ 332*4882a593Smuzhiyun } cm3regs_t; 333*4882a593Smuzhiyun #define ARM_CM3_REG(regs, reg) (&((cm3regs_t *)regs)->reg) 334*4882a593Smuzhiyun 335*4882a593Smuzhiyun /* cortex-R4 */ 336*4882a593Smuzhiyun typedef volatile struct { 337*4882a593Smuzhiyun uint32 corecontrol; /* 0x0 */ 338*4882a593Smuzhiyun uint32 corecapabilities; /* 0x4 */ 339*4882a593Smuzhiyun uint32 corestatus; /* 0x8 */ 340*4882a593Smuzhiyun uint32 biststatus; /* 0xc */ 341*4882a593Smuzhiyun uint32 nmiisrst; /* 0x10 */ 342*4882a593Smuzhiyun uint32 nmimask; /* 0x14 */ 343*4882a593Smuzhiyun uint32 isrmask; /* 0x18 */ 344*4882a593Smuzhiyun uint32 swintreg; /* 0x1C */ 345*4882a593Smuzhiyun uint32 intstatus; /* 0x20 */ 346*4882a593Smuzhiyun uint32 intmask; /* 0x24 */ 347*4882a593Smuzhiyun uint32 cyclecnt; /* 0x28 */ 348*4882a593Smuzhiyun uint32 inttimer; /* 0x2c */ 349*4882a593Smuzhiyun uint32 gpioselect; /* 0x30 */ 350*4882a593Smuzhiyun uint32 gpioenable; /* 0x34 */ 351*4882a593Smuzhiyun uint32 PAD[2]; 352*4882a593Smuzhiyun uint32 bankidx; /* 0x40 */ 353*4882a593Smuzhiyun uint32 bankinfo; /* 0x44 */ 354*4882a593Smuzhiyun uint32 bankstbyctl; /* 0x48 */ 355*4882a593Smuzhiyun uint32 bankpda; /* 0x4c */ 356*4882a593Smuzhiyun uint32 dyn_stby_control; /* 0x50 */ 357*4882a593Smuzhiyun uint32 PAD[5]; 358*4882a593Smuzhiyun uint32 tcampatchctrl; /* 0x68 */ 359*4882a593Smuzhiyun uint32 tcampatchtblbaseaddr; /* 0x6c */ 360*4882a593Smuzhiyun uint32 tcamcmdreg; /* 0x70 */ 361*4882a593Smuzhiyun uint32 tcamdatareg; /* 0x74 */ 362*4882a593Smuzhiyun uint32 tcambankxmaskreg; /* 0x78 */ 363*4882a593Smuzhiyun uint32 PAD[5]; 364*4882a593Smuzhiyun uint32 mpucontrol; /* 0x90 */ 365*4882a593Smuzhiyun uint32 mpucapabilities; /* 0x94 */ 366*4882a593Smuzhiyun uint32 rom_reloc_addr; /* 0x98 */ 367*4882a593Smuzhiyun uint32 PAD[1]; 368*4882a593Smuzhiyun uint32 region_n_regs[16]; /* 0xa0 - 0xdc */ 369*4882a593Smuzhiyun uint32 PAD[16]; 370*4882a593Smuzhiyun uint32 initiat_n_masks[16]; /* 0x120 - 0x15c */ 371*4882a593Smuzhiyun uint32 PAD[32]; 372*4882a593Smuzhiyun uint32 clk_ctl_st; /* 0x1e0 */ 373*4882a593Smuzhiyun uint32 hw_war; /* 0x1e4 */ 374*4882a593Smuzhiyun uint32 powerctl; /* 0x1e8 */ 375*4882a593Smuzhiyun uint32 powerctl2; /* 0x1ec */ 376*4882a593Smuzhiyun } cr4regs_t; 377*4882a593Smuzhiyun #define ARM_CR4_REG(regs, reg) (&((cr4regs_t *)regs)->reg) 378*4882a593Smuzhiyun 379*4882a593Smuzhiyun #define SBRESETLOG_CR4 0x4 380*4882a593Smuzhiyun 381*4882a593Smuzhiyun /* cortex-A7 */ 382*4882a593Smuzhiyun typedef volatile struct { 383*4882a593Smuzhiyun uint32 corecontrol; /* 0x0 */ 384*4882a593Smuzhiyun uint32 corecapabilities; /* 0x4 */ 385*4882a593Smuzhiyun uint32 corestatus; /* 0x8 */ 386*4882a593Smuzhiyun uint32 tracecontrol; /* 0xc */ 387*4882a593Smuzhiyun uint32 gpioselect; /* 0x10 */ 388*4882a593Smuzhiyun uint32 gpioenable; /* 0x14 */ 389*4882a593Smuzhiyun uint32 PAD[114]; 390*4882a593Smuzhiyun uint32 clk_ctl_st; /* 0x1e0 */ 391*4882a593Smuzhiyun uint32 workaround; /* 0x1e4 */ 392*4882a593Smuzhiyun uint32 powerctl; /* 0x1e8 */ 393*4882a593Smuzhiyun uint32 powerctl2; /* 0x1ec */ 394*4882a593Smuzhiyun } ca7regs_t; 395*4882a593Smuzhiyun #define ARM_CA7_REG(regs, reg) (&((ca7regs_t *)regs)->reg) 396*4882a593Smuzhiyun 397*4882a593Smuzhiyun #if defined(__ARM_ARCH_7M__) 398*4882a593Smuzhiyun #define ARMREG(regs, reg) ARM_CM3_REG(regs, reg) 399*4882a593Smuzhiyun #endif /* __ARM_ARCH_7M__ */ 400*4882a593Smuzhiyun 401*4882a593Smuzhiyun #if defined(__ARM_ARCH_7R__) 402*4882a593Smuzhiyun #define ARMREG(regs, reg) ARM_CR4_REG(regs, reg) 403*4882a593Smuzhiyun #endif /* __ARM_ARCH_7R__ */ 404*4882a593Smuzhiyun 405*4882a593Smuzhiyun #if defined(__ARM_ARCH_7A__) 406*4882a593Smuzhiyun #define ARMREG(regs, reg) ARM_CA7_REG(regs, reg) 407*4882a593Smuzhiyun #endif /* __ARM_ARCH_7A__ */ 408*4882a593Smuzhiyun 409*4882a593Smuzhiyun /* MPU is present mask of ca7regs_t->corecapabilities */ 410*4882a593Smuzhiyun #define CAP_MPU_MASK 2000000u 411*4882a593Smuzhiyun 412*4882a593Smuzhiyun #endif /* _LANGUAGE_ASSEMBLY */ 413*4882a593Smuzhiyun 414*4882a593Smuzhiyun #endif /* _sbhndarm_h_ */ 415