1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0-or-later */ 2*4882a593Smuzhiyun /* 3*4882a593Smuzhiyun * OMAP3XXX L3 Interconnect Driver header 4*4882a593Smuzhiyun * 5*4882a593Smuzhiyun * Copyright (C) 2011 Texas Corporation 6*4882a593Smuzhiyun * Felipe Balbi <balbi@ti.com> 7*4882a593Smuzhiyun * Santosh Shilimkar <santosh.shilimkar@ti.com> 8*4882a593Smuzhiyun * sricharan <r.sricharan@ti.com> 9*4882a593Smuzhiyun */ 10*4882a593Smuzhiyun #ifndef __ARCH_ARM_MACH_OMAP2_L3_INTERCONNECT_3XXX_H 11*4882a593Smuzhiyun #define __ARCH_ARM_MACH_OMAP2_L3_INTERCONNECT_3XXX_H 12*4882a593Smuzhiyun 13*4882a593Smuzhiyun /* Register definitions. All 64-bit wide */ 14*4882a593Smuzhiyun #define L3_COMPONENT 0x000 15*4882a593Smuzhiyun #define L3_CORE 0x018 16*4882a593Smuzhiyun #define L3_AGENT_CONTROL 0x020 17*4882a593Smuzhiyun #define L3_AGENT_STATUS 0x028 18*4882a593Smuzhiyun #define L3_ERROR_LOG 0x058 19*4882a593Smuzhiyun 20*4882a593Smuzhiyun #define L3_ERROR_LOG_MULTI (1 << 31) 21*4882a593Smuzhiyun #define L3_ERROR_LOG_SECONDARY (1 << 30) 22*4882a593Smuzhiyun 23*4882a593Smuzhiyun #define L3_ERROR_LOG_ADDR 0x060 24*4882a593Smuzhiyun 25*4882a593Smuzhiyun /* Register definitions for Sideband Interconnect */ 26*4882a593Smuzhiyun #define L3_SI_CONTROL 0x020 27*4882a593Smuzhiyun #define L3_SI_FLAG_STATUS_0 0x510 28*4882a593Smuzhiyun 29*4882a593Smuzhiyun static const u64 shift = 1; 30*4882a593Smuzhiyun 31*4882a593Smuzhiyun #define L3_STATUS_0_MPUIA_BRST (shift << 0) 32*4882a593Smuzhiyun #define L3_STATUS_0_MPUIA_RSP (shift << 1) 33*4882a593Smuzhiyun #define L3_STATUS_0_MPUIA_INBAND (shift << 2) 34*4882a593Smuzhiyun #define L3_STATUS_0_IVAIA_BRST (shift << 6) 35*4882a593Smuzhiyun #define L3_STATUS_0_IVAIA_RSP (shift << 7) 36*4882a593Smuzhiyun #define L3_STATUS_0_IVAIA_INBAND (shift << 8) 37*4882a593Smuzhiyun #define L3_STATUS_0_SGXIA_BRST (shift << 9) 38*4882a593Smuzhiyun #define L3_STATUS_0_SGXIA_RSP (shift << 10) 39*4882a593Smuzhiyun #define L3_STATUS_0_SGXIA_MERROR (shift << 11) 40*4882a593Smuzhiyun #define L3_STATUS_0_CAMIA_BRST (shift << 12) 41*4882a593Smuzhiyun #define L3_STATUS_0_CAMIA_RSP (shift << 13) 42*4882a593Smuzhiyun #define L3_STATUS_0_CAMIA_INBAND (shift << 14) 43*4882a593Smuzhiyun #define L3_STATUS_0_DISPIA_BRST (shift << 15) 44*4882a593Smuzhiyun #define L3_STATUS_0_DISPIA_RSP (shift << 16) 45*4882a593Smuzhiyun #define L3_STATUS_0_DMARDIA_BRST (shift << 18) 46*4882a593Smuzhiyun #define L3_STATUS_0_DMARDIA_RSP (shift << 19) 47*4882a593Smuzhiyun #define L3_STATUS_0_DMAWRIA_BRST (shift << 21) 48*4882a593Smuzhiyun #define L3_STATUS_0_DMAWRIA_RSP (shift << 22) 49*4882a593Smuzhiyun #define L3_STATUS_0_USBOTGIA_BRST (shift << 24) 50*4882a593Smuzhiyun #define L3_STATUS_0_USBOTGIA_RSP (shift << 25) 51*4882a593Smuzhiyun #define L3_STATUS_0_USBOTGIA_INBAND (shift << 26) 52*4882a593Smuzhiyun #define L3_STATUS_0_USBHOSTIA_BRST (shift << 27) 53*4882a593Smuzhiyun #define L3_STATUS_0_USBHOSTIA_INBAND (shift << 28) 54*4882a593Smuzhiyun #define L3_STATUS_0_SMSTA_REQ (shift << 48) 55*4882a593Smuzhiyun #define L3_STATUS_0_GPMCTA_REQ (shift << 49) 56*4882a593Smuzhiyun #define L3_STATUS_0_OCMRAMTA_REQ (shift << 50) 57*4882a593Smuzhiyun #define L3_STATUS_0_OCMROMTA_REQ (shift << 51) 58*4882a593Smuzhiyun #define L3_STATUS_0_IVATA_REQ (shift << 54) 59*4882a593Smuzhiyun #define L3_STATUS_0_SGXTA_REQ (shift << 55) 60*4882a593Smuzhiyun #define L3_STATUS_0_SGXTA_SERROR (shift << 56) 61*4882a593Smuzhiyun #define L3_STATUS_0_GPMCTA_SERROR (shift << 57) 62*4882a593Smuzhiyun #define L3_STATUS_0_L4CORETA_REQ (shift << 58) 63*4882a593Smuzhiyun #define L3_STATUS_0_L4PERTA_REQ (shift << 59) 64*4882a593Smuzhiyun #define L3_STATUS_0_L4EMUTA_REQ (shift << 60) 65*4882a593Smuzhiyun #define L3_STATUS_0_MAD2DTA_REQ (shift << 61) 66*4882a593Smuzhiyun 67*4882a593Smuzhiyun #define L3_STATUS_0_TIMEOUT_MASK (L3_STATUS_0_MPUIA_BRST \ 68*4882a593Smuzhiyun | L3_STATUS_0_MPUIA_RSP \ 69*4882a593Smuzhiyun | L3_STATUS_0_IVAIA_BRST \ 70*4882a593Smuzhiyun | L3_STATUS_0_IVAIA_RSP \ 71*4882a593Smuzhiyun | L3_STATUS_0_SGXIA_BRST \ 72*4882a593Smuzhiyun | L3_STATUS_0_SGXIA_RSP \ 73*4882a593Smuzhiyun | L3_STATUS_0_CAMIA_BRST \ 74*4882a593Smuzhiyun | L3_STATUS_0_CAMIA_RSP \ 75*4882a593Smuzhiyun | L3_STATUS_0_DISPIA_BRST \ 76*4882a593Smuzhiyun | L3_STATUS_0_DISPIA_RSP \ 77*4882a593Smuzhiyun | L3_STATUS_0_DMARDIA_BRST \ 78*4882a593Smuzhiyun | L3_STATUS_0_DMARDIA_RSP \ 79*4882a593Smuzhiyun | L3_STATUS_0_DMAWRIA_BRST \ 80*4882a593Smuzhiyun | L3_STATUS_0_DMAWRIA_RSP \ 81*4882a593Smuzhiyun | L3_STATUS_0_USBOTGIA_BRST \ 82*4882a593Smuzhiyun | L3_STATUS_0_USBOTGIA_RSP \ 83*4882a593Smuzhiyun | L3_STATUS_0_USBHOSTIA_BRST \ 84*4882a593Smuzhiyun | L3_STATUS_0_SMSTA_REQ \ 85*4882a593Smuzhiyun | L3_STATUS_0_GPMCTA_REQ \ 86*4882a593Smuzhiyun | L3_STATUS_0_OCMRAMTA_REQ \ 87*4882a593Smuzhiyun | L3_STATUS_0_OCMROMTA_REQ \ 88*4882a593Smuzhiyun | L3_STATUS_0_IVATA_REQ \ 89*4882a593Smuzhiyun | L3_STATUS_0_SGXTA_REQ \ 90*4882a593Smuzhiyun | L3_STATUS_0_L4CORETA_REQ \ 91*4882a593Smuzhiyun | L3_STATUS_0_L4PERTA_REQ \ 92*4882a593Smuzhiyun | L3_STATUS_0_L4EMUTA_REQ \ 93*4882a593Smuzhiyun | L3_STATUS_0_MAD2DTA_REQ) 94*4882a593Smuzhiyun 95*4882a593Smuzhiyun #define L3_SI_FLAG_STATUS_1 0x530 96*4882a593Smuzhiyun 97*4882a593Smuzhiyun #define L3_STATUS_1_MPU_DATAIA (1 << 0) 98*4882a593Smuzhiyun #define L3_STATUS_1_DAPIA0 (1 << 3) 99*4882a593Smuzhiyun #define L3_STATUS_1_DAPIA1 (1 << 4) 100*4882a593Smuzhiyun #define L3_STATUS_1_IVAIA (1 << 6) 101*4882a593Smuzhiyun 102*4882a593Smuzhiyun #define L3_PM_ERROR_LOG 0x020 103*4882a593Smuzhiyun #define L3_PM_CONTROL 0x028 104*4882a593Smuzhiyun #define L3_PM_ERROR_CLEAR_SINGLE 0x030 105*4882a593Smuzhiyun #define L3_PM_ERROR_CLEAR_MULTI 0x038 106*4882a593Smuzhiyun #define L3_PM_REQ_INFO_PERMISSION(n) (0x048 + (0x020 * n)) 107*4882a593Smuzhiyun #define L3_PM_READ_PERMISSION(n) (0x050 + (0x020 * n)) 108*4882a593Smuzhiyun #define L3_PM_WRITE_PERMISSION(n) (0x058 + (0x020 * n)) 109*4882a593Smuzhiyun #define L3_PM_ADDR_MATCH(n) (0x060 + (0x020 * n)) 110*4882a593Smuzhiyun 111*4882a593Smuzhiyun /* L3 error log bit fields. Common for IA and TA */ 112*4882a593Smuzhiyun #define L3_ERROR_LOG_CODE 24 113*4882a593Smuzhiyun #define L3_ERROR_LOG_INITID 8 114*4882a593Smuzhiyun #define L3_ERROR_LOG_CMD 0 115*4882a593Smuzhiyun 116*4882a593Smuzhiyun /* L3 agent status bit fields. */ 117*4882a593Smuzhiyun #define L3_AGENT_STATUS_CLEAR_IA 0x10000000 118*4882a593Smuzhiyun #define L3_AGENT_STATUS_CLEAR_TA 0x01000000 119*4882a593Smuzhiyun 120*4882a593Smuzhiyun #define OMAP34xx_IRQ_L3_APP 10 121*4882a593Smuzhiyun #define L3_APPLICATION_ERROR 0x0 122*4882a593Smuzhiyun #define L3_DEBUG_ERROR 0x1 123*4882a593Smuzhiyun 124*4882a593Smuzhiyun enum omap3_l3_initiator_id { 125*4882a593Smuzhiyun /* LCD has 1 ID */ 126*4882a593Smuzhiyun OMAP_L3_LCD = 29, 127*4882a593Smuzhiyun /* SAD2D has 1 ID */ 128*4882a593Smuzhiyun OMAP_L3_SAD2D = 28, 129*4882a593Smuzhiyun /* MPU has 5 IDs */ 130*4882a593Smuzhiyun OMAP_L3_IA_MPU_SS_1 = 27, 131*4882a593Smuzhiyun OMAP_L3_IA_MPU_SS_2 = 26, 132*4882a593Smuzhiyun OMAP_L3_IA_MPU_SS_3 = 25, 133*4882a593Smuzhiyun OMAP_L3_IA_MPU_SS_4 = 24, 134*4882a593Smuzhiyun OMAP_L3_IA_MPU_SS_5 = 23, 135*4882a593Smuzhiyun /* IVA2.2 SS has 3 IDs*/ 136*4882a593Smuzhiyun OMAP_L3_IA_IVA_SS_1 = 22, 137*4882a593Smuzhiyun OMAP_L3_IA_IVA_SS_2 = 21, 138*4882a593Smuzhiyun OMAP_L3_IA_IVA_SS_3 = 20, 139*4882a593Smuzhiyun /* IVA 2.2 SS DMA has 6 IDS */ 140*4882a593Smuzhiyun OMAP_L3_IA_IVA_SS_DMA_1 = 19, 141*4882a593Smuzhiyun OMAP_L3_IA_IVA_SS_DMA_2 = 18, 142*4882a593Smuzhiyun OMAP_L3_IA_IVA_SS_DMA_3 = 17, 143*4882a593Smuzhiyun OMAP_L3_IA_IVA_SS_DMA_4 = 16, 144*4882a593Smuzhiyun OMAP_L3_IA_IVA_SS_DMA_5 = 15, 145*4882a593Smuzhiyun OMAP_L3_IA_IVA_SS_DMA_6 = 14, 146*4882a593Smuzhiyun /* SGX has 1 ID */ 147*4882a593Smuzhiyun OMAP_L3_IA_SGX = 13, 148*4882a593Smuzhiyun /* CAM has 3 ID */ 149*4882a593Smuzhiyun OMAP_L3_IA_CAM_1 = 12, 150*4882a593Smuzhiyun OMAP_L3_IA_CAM_2 = 11, 151*4882a593Smuzhiyun OMAP_L3_IA_CAM_3 = 10, 152*4882a593Smuzhiyun /* DAP has 1 ID */ 153*4882a593Smuzhiyun OMAP_L3_IA_DAP = 9, 154*4882a593Smuzhiyun /* SDMA WR has 2 IDs */ 155*4882a593Smuzhiyun OMAP_L3_SDMA_WR_1 = 8, 156*4882a593Smuzhiyun OMAP_L3_SDMA_WR_2 = 7, 157*4882a593Smuzhiyun /* SDMA RD has 4 IDs */ 158*4882a593Smuzhiyun OMAP_L3_SDMA_RD_1 = 6, 159*4882a593Smuzhiyun OMAP_L3_SDMA_RD_2 = 5, 160*4882a593Smuzhiyun OMAP_L3_SDMA_RD_3 = 4, 161*4882a593Smuzhiyun OMAP_L3_SDMA_RD_4 = 3, 162*4882a593Smuzhiyun /* HSUSB OTG has 1 ID */ 163*4882a593Smuzhiyun OMAP_L3_USBOTG = 2, 164*4882a593Smuzhiyun /* HSUSB HOST has 1 ID */ 165*4882a593Smuzhiyun OMAP_L3_USBHOST = 1, 166*4882a593Smuzhiyun }; 167*4882a593Smuzhiyun 168*4882a593Smuzhiyun enum omap3_l3_code { 169*4882a593Smuzhiyun OMAP_L3_CODE_NOERROR = 0, 170*4882a593Smuzhiyun OMAP_L3_CODE_UNSUP_CMD = 1, 171*4882a593Smuzhiyun OMAP_L3_CODE_ADDR_HOLE = 2, 172*4882a593Smuzhiyun OMAP_L3_CODE_PROTECT_VIOLATION = 3, 173*4882a593Smuzhiyun OMAP_L3_CODE_IN_BAND_ERR = 4, 174*4882a593Smuzhiyun /* codes 5 and 6 are reserved */ 175*4882a593Smuzhiyun OMAP_L3_CODE_REQ_TOUT_NOT_ACCEPT = 7, 176*4882a593Smuzhiyun OMAP_L3_CODE_REQ_TOUT_NO_RESP = 8, 177*4882a593Smuzhiyun /* codes 9 - 15 are also reserved */ 178*4882a593Smuzhiyun }; 179*4882a593Smuzhiyun 180*4882a593Smuzhiyun struct omap3_l3 { 181*4882a593Smuzhiyun struct device *dev; 182*4882a593Smuzhiyun struct clk *ick; 183*4882a593Smuzhiyun 184*4882a593Smuzhiyun /* memory base*/ 185*4882a593Smuzhiyun void __iomem *rt; 186*4882a593Smuzhiyun 187*4882a593Smuzhiyun int debug_irq; 188*4882a593Smuzhiyun int app_irq; 189*4882a593Smuzhiyun 190*4882a593Smuzhiyun /* true when and inband functional error occurs */ 191*4882a593Smuzhiyun unsigned inband:1; 192*4882a593Smuzhiyun }; 193*4882a593Smuzhiyun 194*4882a593Smuzhiyun /* offsets for l3 agents in order with the Flag status register */ 195*4882a593Smuzhiyun static unsigned int omap3_l3_app_bases[] = { 196*4882a593Smuzhiyun /* MPU IA */ 197*4882a593Smuzhiyun 0x1400, 198*4882a593Smuzhiyun 0x1400, 199*4882a593Smuzhiyun 0x1400, 200*4882a593Smuzhiyun /* RESERVED */ 201*4882a593Smuzhiyun 0, 202*4882a593Smuzhiyun 0, 203*4882a593Smuzhiyun 0, 204*4882a593Smuzhiyun /* IVA 2.2 IA */ 205*4882a593Smuzhiyun 0x1800, 206*4882a593Smuzhiyun 0x1800, 207*4882a593Smuzhiyun 0x1800, 208*4882a593Smuzhiyun /* SGX IA */ 209*4882a593Smuzhiyun 0x1c00, 210*4882a593Smuzhiyun 0x1c00, 211*4882a593Smuzhiyun /* RESERVED */ 212*4882a593Smuzhiyun 0, 213*4882a593Smuzhiyun /* CAMERA IA */ 214*4882a593Smuzhiyun 0x5800, 215*4882a593Smuzhiyun 0x5800, 216*4882a593Smuzhiyun 0x5800, 217*4882a593Smuzhiyun /* DISPLAY IA */ 218*4882a593Smuzhiyun 0x5400, 219*4882a593Smuzhiyun 0x5400, 220*4882a593Smuzhiyun /* RESERVED */ 221*4882a593Smuzhiyun 0, 222*4882a593Smuzhiyun /*SDMA RD IA */ 223*4882a593Smuzhiyun 0x4c00, 224*4882a593Smuzhiyun 0x4c00, 225*4882a593Smuzhiyun /* RESERVED */ 226*4882a593Smuzhiyun 0, 227*4882a593Smuzhiyun /* SDMA WR IA */ 228*4882a593Smuzhiyun 0x5000, 229*4882a593Smuzhiyun 0x5000, 230*4882a593Smuzhiyun /* RESERVED */ 231*4882a593Smuzhiyun 0, 232*4882a593Smuzhiyun /* USB OTG IA */ 233*4882a593Smuzhiyun 0x4400, 234*4882a593Smuzhiyun 0x4400, 235*4882a593Smuzhiyun 0x4400, 236*4882a593Smuzhiyun /* USB HOST IA */ 237*4882a593Smuzhiyun 0x4000, 238*4882a593Smuzhiyun 0x4000, 239*4882a593Smuzhiyun /* RESERVED */ 240*4882a593Smuzhiyun 0, 241*4882a593Smuzhiyun 0, 242*4882a593Smuzhiyun 0, 243*4882a593Smuzhiyun 0, 244*4882a593Smuzhiyun /* SAD2D IA */ 245*4882a593Smuzhiyun 0x3000, 246*4882a593Smuzhiyun 0x3000, 247*4882a593Smuzhiyun 0x3000, 248*4882a593Smuzhiyun /* RESERVED */ 249*4882a593Smuzhiyun 0, 250*4882a593Smuzhiyun 0, 251*4882a593Smuzhiyun 0, 252*4882a593Smuzhiyun 0, 253*4882a593Smuzhiyun 0, 254*4882a593Smuzhiyun 0, 255*4882a593Smuzhiyun 0, 256*4882a593Smuzhiyun 0, 257*4882a593Smuzhiyun 0, 258*4882a593Smuzhiyun 0, 259*4882a593Smuzhiyun 0, 260*4882a593Smuzhiyun 0, 261*4882a593Smuzhiyun /* SMA TA */ 262*4882a593Smuzhiyun 0x2000, 263*4882a593Smuzhiyun /* GPMC TA */ 264*4882a593Smuzhiyun 0x2400, 265*4882a593Smuzhiyun /* OCM RAM TA */ 266*4882a593Smuzhiyun 0x2800, 267*4882a593Smuzhiyun /* OCM ROM TA */ 268*4882a593Smuzhiyun 0x2C00, 269*4882a593Smuzhiyun /* L4 CORE TA */ 270*4882a593Smuzhiyun 0x6800, 271*4882a593Smuzhiyun /* L4 PER TA */ 272*4882a593Smuzhiyun 0x6c00, 273*4882a593Smuzhiyun /* IVA 2.2 TA */ 274*4882a593Smuzhiyun 0x6000, 275*4882a593Smuzhiyun /* SGX TA */ 276*4882a593Smuzhiyun 0x6400, 277*4882a593Smuzhiyun /* L4 EMU TA */ 278*4882a593Smuzhiyun 0x7000, 279*4882a593Smuzhiyun /* GPMC TA */ 280*4882a593Smuzhiyun 0x2400, 281*4882a593Smuzhiyun /* L4 CORE TA */ 282*4882a593Smuzhiyun 0x6800, 283*4882a593Smuzhiyun /* L4 PER TA */ 284*4882a593Smuzhiyun 0x6c00, 285*4882a593Smuzhiyun /* L4 EMU TA */ 286*4882a593Smuzhiyun 0x7000, 287*4882a593Smuzhiyun /* MAD2D TA */ 288*4882a593Smuzhiyun 0x3400, 289*4882a593Smuzhiyun /* RESERVED */ 290*4882a593Smuzhiyun 0, 291*4882a593Smuzhiyun 0, 292*4882a593Smuzhiyun }; 293*4882a593Smuzhiyun 294*4882a593Smuzhiyun static unsigned int omap3_l3_debug_bases[] = { 295*4882a593Smuzhiyun /* MPU DATA IA */ 296*4882a593Smuzhiyun 0x1400, 297*4882a593Smuzhiyun /* RESERVED */ 298*4882a593Smuzhiyun 0, 299*4882a593Smuzhiyun 0, 300*4882a593Smuzhiyun /* DAP IA */ 301*4882a593Smuzhiyun 0x5c00, 302*4882a593Smuzhiyun 0x5c00, 303*4882a593Smuzhiyun /* RESERVED */ 304*4882a593Smuzhiyun 0, 305*4882a593Smuzhiyun /* IVA 2.2 IA */ 306*4882a593Smuzhiyun 0x1800, 307*4882a593Smuzhiyun /* REST RESERVED */ 308*4882a593Smuzhiyun }; 309*4882a593Smuzhiyun 310*4882a593Smuzhiyun static u32 *omap3_l3_bases[] = { 311*4882a593Smuzhiyun omap3_l3_app_bases, 312*4882a593Smuzhiyun omap3_l3_debug_bases, 313*4882a593Smuzhiyun }; 314*4882a593Smuzhiyun 315*4882a593Smuzhiyun /* 316*4882a593Smuzhiyun * REVISIT define __raw_readll/__raw_writell here, but move them to 317*4882a593Smuzhiyun * <asm/io.h> at some point 318*4882a593Smuzhiyun */ 319*4882a593Smuzhiyun #define __raw_writell(v, a) (__chk_io_ptr(a), \ 320*4882a593Smuzhiyun *(volatile u64 __force *)(a) = (v)) 321*4882a593Smuzhiyun #define __raw_readll(a) (__chk_io_ptr(a), \ 322*4882a593Smuzhiyun *(volatile u64 __force *)(a)) 323*4882a593Smuzhiyun 324*4882a593Smuzhiyun #endif 325