Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0 */
0002 #ifndef LINUX_BCMA_DRIVER_CC_H_
0003 #define LINUX_BCMA_DRIVER_CC_H_
0004 
0005 #include <linux/platform_device.h>
0006 #include <linux/platform_data/brcmnand.h>
0007 #include <linux/gpio.h>
0008 
0009 /** ChipCommon core registers. **/
0010 #define BCMA_CC_ID          0x0000
0011 #define  BCMA_CC_ID_ID          0x0000FFFF
0012 #define  BCMA_CC_ID_ID_SHIFT        0
0013 #define  BCMA_CC_ID_REV         0x000F0000
0014 #define  BCMA_CC_ID_REV_SHIFT       16
0015 #define  BCMA_CC_ID_PKG         0x00F00000
0016 #define  BCMA_CC_ID_PKG_SHIFT       20
0017 #define  BCMA_CC_ID_NRCORES     0x0F000000
0018 #define  BCMA_CC_ID_NRCORES_SHIFT   24
0019 #define  BCMA_CC_ID_TYPE        0xF0000000
0020 #define  BCMA_CC_ID_TYPE_SHIFT      28
0021 #define BCMA_CC_CAP         0x0004      /* Capabilities */
0022 #define  BCMA_CC_CAP_NRUART     0x00000003  /* # of UARTs */
0023 #define  BCMA_CC_CAP_MIPSEB     0x00000004  /* MIPS in BigEndian Mode */
0024 #define  BCMA_CC_CAP_UARTCLK        0x00000018  /* UART clock select */
0025 #define   BCMA_CC_CAP_UARTCLK_INT   0x00000008  /* UARTs are driven by internal divided clock */
0026 #define  BCMA_CC_CAP_UARTGPIO       0x00000020  /* UARTs on GPIO 15-12 */
0027 #define  BCMA_CC_CAP_EXTBUS     0x000000C0  /* External buses present */
0028 #define  BCMA_CC_CAP_FLASHT     0x00000700  /* Flash Type */
0029 #define   BCMA_CC_FLASHT_NONE       0x00000000  /* No flash */
0030 #define   BCMA_CC_FLASHT_STSER      0x00000100  /* ST serial flash */
0031 #define   BCMA_CC_FLASHT_ATSER      0x00000200  /* Atmel serial flash */
0032 #define   BCMA_CC_FLASHT_NAND       0x00000300  /* NAND flash */
0033 #define   BCMA_CC_FLASHT_PARA       0x00000700  /* Parallel flash */
0034 #define  BCMA_CC_CAP_PLLT       0x00038000  /* PLL Type */
0035 #define   BCMA_PLLTYPE_NONE     0x00000000
0036 #define   BCMA_PLLTYPE_1        0x00010000  /* 48Mhz base, 3 dividers */
0037 #define   BCMA_PLLTYPE_2        0x00020000  /* 48Mhz, 4 dividers */
0038 #define   BCMA_PLLTYPE_3        0x00030000  /* 25Mhz, 2 dividers */
0039 #define   BCMA_PLLTYPE_4        0x00008000  /* 48Mhz, 4 dividers */
0040 #define   BCMA_PLLTYPE_5        0x00018000  /* 25Mhz, 4 dividers */
0041 #define   BCMA_PLLTYPE_6        0x00028000  /* 100/200 or 120/240 only */
0042 #define   BCMA_PLLTYPE_7        0x00038000  /* 25Mhz, 4 dividers */
0043 #define  BCMA_CC_CAP_PCTL       0x00040000  /* Power Control */
0044 #define  BCMA_CC_CAP_OTPS       0x00380000  /* OTP size */
0045 #define  BCMA_CC_CAP_OTPS_SHIFT     19
0046 #define  BCMA_CC_CAP_OTPS_BASE      5
0047 #define  BCMA_CC_CAP_JTAGM      0x00400000  /* JTAG master present */
0048 #define  BCMA_CC_CAP_BROM       0x00800000  /* Internal boot ROM active */
0049 #define  BCMA_CC_CAP_64BIT      0x08000000  /* 64-bit Backplane */
0050 #define  BCMA_CC_CAP_PMU        0x10000000  /* PMU available (rev >= 20) */
0051 #define  BCMA_CC_CAP_ECI        0x20000000  /* ECI available (rev >= 20) */
0052 #define  BCMA_CC_CAP_SPROM      0x40000000  /* SPROM present */
0053 #define  BCMA_CC_CAP_NFLASH     0x80000000  /* NAND flash present (rev >= 35 or BCM4706?) */
0054 #define BCMA_CC_CORECTL         0x0008
0055 #define  BCMA_CC_CORECTL_UARTCLK0   0x00000001  /* Drive UART with internal clock */
0056 #define  BCMA_CC_CORECTL_SE     0x00000002  /* sync clk out enable (corerev >= 3) */
0057 #define  BCMA_CC_CORECTL_UARTCLKEN  0x00000008  /* UART clock enable (rev >= 21) */
0058 #define BCMA_CC_BIST            0x000C
0059 #define BCMA_CC_OTPS            0x0010      /* OTP status */
0060 #define  BCMA_CC_OTPS_PROGFAIL      0x80000000
0061 #define  BCMA_CC_OTPS_PROTECT       0x00000007
0062 #define  BCMA_CC_OTPS_HW_PROTECT    0x00000001
0063 #define  BCMA_CC_OTPS_SW_PROTECT    0x00000002
0064 #define  BCMA_CC_OTPS_CID_PROTECT   0x00000004
0065 #define  BCMA_CC_OTPS_GU_PROG_IND   0x00000F00  /* General Use programmed indication */
0066 #define  BCMA_CC_OTPS_GU_PROG_IND_SHIFT 8
0067 #define  BCMA_CC_OTPS_GU_PROG_HW    0x00000100  /* HW region programmed */
0068 #define BCMA_CC_OTPC            0x0014      /* OTP control */
0069 #define  BCMA_CC_OTPC_RECWAIT       0xFF000000
0070 #define  BCMA_CC_OTPC_PROGWAIT      0x00FFFF00
0071 #define  BCMA_CC_OTPC_PRW_SHIFT     8
0072 #define  BCMA_CC_OTPC_MAXFAIL       0x00000038
0073 #define  BCMA_CC_OTPC_VSEL      0x00000006
0074 #define  BCMA_CC_OTPC_SELVL     0x00000001
0075 #define BCMA_CC_OTPP            0x0018      /* OTP prog */
0076 #define  BCMA_CC_OTPP_COL       0x000000FF
0077 #define  BCMA_CC_OTPP_ROW       0x0000FF00
0078 #define  BCMA_CC_OTPP_ROW_SHIFT     8
0079 #define  BCMA_CC_OTPP_READERR       0x10000000
0080 #define  BCMA_CC_OTPP_VALUE     0x20000000
0081 #define  BCMA_CC_OTPP_READ      0x40000000
0082 #define  BCMA_CC_OTPP_START     0x80000000
0083 #define  BCMA_CC_OTPP_BUSY      0x80000000
0084 #define BCMA_CC_OTPL            0x001C      /* OTP layout */
0085 #define  BCMA_CC_OTPL_GURGN_OFFSET  0x00000FFF  /* offset of general use region */
0086 #define BCMA_CC_IRQSTAT         0x0020
0087 #define BCMA_CC_IRQMASK         0x0024
0088 #define  BCMA_CC_IRQ_GPIO       0x00000001  /* gpio intr */
0089 #define  BCMA_CC_IRQ_EXT        0x00000002  /* ro: ext intr pin (corerev >= 3) */
0090 #define  BCMA_CC_IRQ_WDRESET        0x80000000  /* watchdog reset occurred */
0091 #define BCMA_CC_CHIPCTL         0x0028      /* Rev >= 11 only */
0092 #define BCMA_CC_CHIPSTAT        0x002C      /* Rev >= 11 only */
0093 #define  BCMA_CC_CHIPST_4313_SPROM_PRESENT  1
0094 #define  BCMA_CC_CHIPST_4313_OTP_PRESENT    2
0095 #define  BCMA_CC_CHIPST_4331_SPROM_PRESENT  2
0096 #define  BCMA_CC_CHIPST_4331_OTP_PRESENT    4
0097 #define  BCMA_CC_CHIPST_43228_ILP_DIV_EN    0x00000001
0098 #define  BCMA_CC_CHIPST_43228_OTP_PRESENT   0x00000002
0099 #define  BCMA_CC_CHIPST_43228_SERDES_REFCLK_PADSEL  0x00000004
0100 #define  BCMA_CC_CHIPST_43228_SDIO_MODE     0x00000008
0101 #define  BCMA_CC_CHIPST_43228_SDIO_OTP_PRESENT  0x00000010
0102 #define  BCMA_CC_CHIPST_43228_SDIO_RESET    0x00000020
0103 #define  BCMA_CC_CHIPST_4706_PKG_OPTION     BIT(0) /* 0: full-featured package 1: low-cost package */
0104 #define  BCMA_CC_CHIPST_4706_SFLASH_PRESENT BIT(1) /* 0: parallel, 1: serial flash is present */
0105 #define  BCMA_CC_CHIPST_4706_SFLASH_TYPE    BIT(2) /* 0: 8b-p/ST-s flash, 1: 16b-p/Atmal-s flash */
0106 #define  BCMA_CC_CHIPST_4706_MIPS_BENDIAN   BIT(3) /* 0: little, 1: big endian */
0107 #define  BCMA_CC_CHIPST_4706_PCIE1_DISABLE  BIT(5) /* PCIE1 enable strap pin */
0108 #define  BCMA_CC_CHIPST_5357_NAND_BOOT      BIT(4) /* NAND boot, valid for CC rev 38 and/or BCM5357 */
0109 #define  BCMA_CC_CHIPST_4360_XTAL_40MZ      0x00000001
0110 #define BCMA_CC_JCMD            0x0030      /* Rev >= 10 only */
0111 #define  BCMA_CC_JCMD_START     0x80000000
0112 #define  BCMA_CC_JCMD_BUSY      0x80000000
0113 #define  BCMA_CC_JCMD_PAUSE     0x40000000
0114 #define  BCMA_CC_JCMD0_ACC_MASK     0x0000F000
0115 #define  BCMA_CC_JCMD0_ACC_IRDR     0x00000000
0116 #define  BCMA_CC_JCMD0_ACC_DR       0x00001000
0117 #define  BCMA_CC_JCMD0_ACC_IR       0x00002000
0118 #define  BCMA_CC_JCMD0_ACC_RESET    0x00003000
0119 #define  BCMA_CC_JCMD0_ACC_IRPDR    0x00004000
0120 #define  BCMA_CC_JCMD0_ACC_PDR      0x00005000
0121 #define  BCMA_CC_JCMD0_IRW_MASK     0x00000F00
0122 #define  BCMA_CC_JCMD_ACC_MASK      0x000F0000  /* Changes for corerev 11 */
0123 #define  BCMA_CC_JCMD_ACC_IRDR      0x00000000
0124 #define  BCMA_CC_JCMD_ACC_DR        0x00010000
0125 #define  BCMA_CC_JCMD_ACC_IR        0x00020000
0126 #define  BCMA_CC_JCMD_ACC_RESET     0x00030000
0127 #define  BCMA_CC_JCMD_ACC_IRPDR     0x00040000
0128 #define  BCMA_CC_JCMD_ACC_PDR       0x00050000
0129 #define  BCMA_CC_JCMD_IRW_MASK      0x00001F00
0130 #define  BCMA_CC_JCMD_IRW_SHIFT     8
0131 #define  BCMA_CC_JCMD_DRW_MASK      0x0000003F
0132 #define BCMA_CC_JIR         0x0034      /* Rev >= 10 only */
0133 #define BCMA_CC_JDR         0x0038      /* Rev >= 10 only */
0134 #define BCMA_CC_JCTL            0x003C      /* Rev >= 10 only */
0135 #define  BCMA_CC_JCTL_FORCE_CLK     4       /* Force clock */
0136 #define  BCMA_CC_JCTL_EXT_EN        2       /* Enable external targets */
0137 #define  BCMA_CC_JCTL_EN        1       /* Enable Jtag master */
0138 #define BCMA_CC_FLASHCTL        0x0040
0139 /* Start/busy bit in flashcontrol */
0140 #define  BCMA_CC_FLASHCTL_OPCODE    0x000000ff
0141 #define  BCMA_CC_FLASHCTL_ACTION    0x00000700
0142 #define  BCMA_CC_FLASHCTL_CS_ACTIVE 0x00001000  /* Chip Select Active, rev >= 20 */
0143 #define  BCMA_CC_FLASHCTL_START     0x80000000
0144 #define  BCMA_CC_FLASHCTL_BUSY      BCMA_CC_FLASHCTL_START
0145 /* Flashcontrol action + opcodes for ST flashes */
0146 #define  BCMA_CC_FLASHCTL_ST_WREN   0x0006      /* Write Enable */
0147 #define  BCMA_CC_FLASHCTL_ST_WRDIS  0x0004      /* Write Disable */
0148 #define  BCMA_CC_FLASHCTL_ST_RDSR   0x0105      /* Read Status Register */
0149 #define  BCMA_CC_FLASHCTL_ST_WRSR   0x0101      /* Write Status Register */
0150 #define  BCMA_CC_FLASHCTL_ST_READ   0x0303      /* Read Data Bytes */
0151 #define  BCMA_CC_FLASHCTL_ST_PP     0x0302      /* Page Program */
0152 #define  BCMA_CC_FLASHCTL_ST_SE     0x02d8      /* Sector Erase */
0153 #define  BCMA_CC_FLASHCTL_ST_BE     0x00c7      /* Bulk Erase */
0154 #define  BCMA_CC_FLASHCTL_ST_DP     0x00b9      /* Deep Power-down */
0155 #define  BCMA_CC_FLASHCTL_ST_RES    0x03ab      /* Read Electronic Signature */
0156 #define  BCMA_CC_FLASHCTL_ST_CSA    0x1000      /* Keep chip select asserted */
0157 #define  BCMA_CC_FLASHCTL_ST_SSE    0x0220      /* Sub-sector Erase */
0158 /* Flashcontrol action + opcodes for Atmel flashes */
0159 #define  BCMA_CC_FLASHCTL_AT_READ           0x07e8
0160 #define  BCMA_CC_FLASHCTL_AT_PAGE_READ          0x07d2
0161 #define  BCMA_CC_FLASHCTL_AT_STATUS         0x01d7
0162 #define  BCMA_CC_FLASHCTL_AT_BUF1_WRITE         0x0384
0163 #define  BCMA_CC_FLASHCTL_AT_BUF2_WRITE         0x0387
0164 #define  BCMA_CC_FLASHCTL_AT_BUF1_ERASE_PROGRAM     0x0283
0165 #define  BCMA_CC_FLASHCTL_AT_BUF2_ERASE_PROGRAM     0x0286
0166 #define  BCMA_CC_FLASHCTL_AT_BUF1_PROGRAM       0x0288
0167 #define  BCMA_CC_FLASHCTL_AT_BUF2_PROGRAM       0x0289
0168 #define  BCMA_CC_FLASHCTL_AT_PAGE_ERASE         0x0281
0169 #define  BCMA_CC_FLASHCTL_AT_BLOCK_ERASE        0x0250
0170 #define  BCMA_CC_FLASHCTL_AT_BUF1_WRITE_ERASE_PROGRAM   0x0382
0171 #define  BCMA_CC_FLASHCTL_AT_BUF2_WRITE_ERASE_PROGRAM   0x0385
0172 #define  BCMA_CC_FLASHCTL_AT_BUF1_LOAD          0x0253
0173 #define  BCMA_CC_FLASHCTL_AT_BUF2_LOAD          0x0255
0174 #define  BCMA_CC_FLASHCTL_AT_BUF1_COMPARE       0x0260
0175 #define  BCMA_CC_FLASHCTL_AT_BUF2_COMPARE       0x0261
0176 #define  BCMA_CC_FLASHCTL_AT_BUF1_REPROGRAM     0x0258
0177 #define  BCMA_CC_FLASHCTL_AT_BUF2_REPROGRAM     0x0259
0178 #define BCMA_CC_FLASHADDR       0x0044
0179 #define BCMA_CC_FLASHDATA       0x0048
0180 /* Status register bits for ST flashes */
0181 #define  BCMA_CC_FLASHDATA_ST_WIP   0x01        /* Write In Progress */
0182 #define  BCMA_CC_FLASHDATA_ST_WEL   0x02        /* Write Enable Latch */
0183 #define  BCMA_CC_FLASHDATA_ST_BP_MASK   0x1c        /* Block Protect */
0184 #define  BCMA_CC_FLASHDATA_ST_BP_SHIFT  2
0185 #define  BCMA_CC_FLASHDATA_ST_SRWD  0x80        /* Status Register Write Disable */
0186 /* Status register bits for Atmel flashes */
0187 #define  BCMA_CC_FLASHDATA_AT_READY 0x80
0188 #define  BCMA_CC_FLASHDATA_AT_MISMATCH  0x40
0189 #define  BCMA_CC_FLASHDATA_AT_ID_MASK   0x38
0190 #define  BCMA_CC_FLASHDATA_AT_ID_SHIFT  3
0191 #define BCMA_CC_BCAST_ADDR      0x0050
0192 #define BCMA_CC_BCAST_DATA      0x0054
0193 #define BCMA_CC_GPIOPULLUP      0x0058      /* Rev >= 20 only */
0194 #define BCMA_CC_GPIOPULLDOWN        0x005C      /* Rev >= 20 only */
0195 #define BCMA_CC_GPIOIN          0x0060
0196 #define BCMA_CC_GPIOOUT         0x0064
0197 #define BCMA_CC_GPIOOUTEN       0x0068
0198 #define BCMA_CC_GPIOCTL         0x006C
0199 #define BCMA_CC_GPIOPOL         0x0070
0200 #define BCMA_CC_GPIOIRQ         0x0074
0201 #define BCMA_CC_WATCHDOG        0x0080
0202 #define BCMA_CC_GPIOTIMER       0x0088      /* LED powersave (corerev >= 16) */
0203 #define  BCMA_CC_GPIOTIMER_OFFTIME  0x0000FFFF
0204 #define  BCMA_CC_GPIOTIMER_OFFTIME_SHIFT    0
0205 #define  BCMA_CC_GPIOTIMER_ONTIME   0xFFFF0000
0206 #define  BCMA_CC_GPIOTIMER_ONTIME_SHIFT 16
0207 #define BCMA_CC_GPIOTOUTM       0x008C      /* LED powersave (corerev >= 16) */
0208 #define BCMA_CC_CLOCK_N         0x0090
0209 #define BCMA_CC_CLOCK_SB        0x0094
0210 #define BCMA_CC_CLOCK_PCI       0x0098
0211 #define BCMA_CC_CLOCK_M2        0x009C
0212 #define BCMA_CC_CLOCK_MIPS      0x00A0
0213 #define BCMA_CC_CLKDIV          0x00A4      /* Rev >= 3 only */
0214 #define  BCMA_CC_CLKDIV_SFLASH      0x0F000000
0215 #define  BCMA_CC_CLKDIV_SFLASH_SHIFT    24
0216 #define  BCMA_CC_CLKDIV_OTP     0x000F0000
0217 #define  BCMA_CC_CLKDIV_OTP_SHIFT   16
0218 #define  BCMA_CC_CLKDIV_JTAG        0x00000F00
0219 #define  BCMA_CC_CLKDIV_JTAG_SHIFT  8
0220 #define  BCMA_CC_CLKDIV_UART        0x000000FF
0221 #define BCMA_CC_CAP_EXT         0x00AC      /* Capabilities */
0222 #define  BCMA_CC_CAP_EXT_SECI_PRESENT   0x00000001
0223 #define  BCMA_CC_CAP_EXT_GSIO_PRESENT   0x00000002
0224 #define  BCMA_CC_CAP_EXT_GCI_PRESENT    0x00000004
0225 #define  BCMA_CC_CAP_EXT_SECI_PUART_PRESENT     0x00000008    /* UART present */
0226 #define  BCMA_CC_CAP_EXT_AOB_PRESENT    0x00000040
0227 #define BCMA_CC_PLLONDELAY      0x00B0      /* Rev >= 4 only */
0228 #define BCMA_CC_FREFSELDELAY        0x00B4      /* Rev >= 4 only */
0229 #define BCMA_CC_SLOWCLKCTL      0x00B8      /* 6 <= Rev <= 9 only */
0230 #define  BCMA_CC_SLOWCLKCTL_SRC     0x00000007  /* slow clock source mask */
0231 #define   BCMA_CC_SLOWCLKCTL_SRC_LPO    0x00000000  /* source of slow clock is LPO */
0232 #define   BCMA_CC_SLOWCLKCTL_SRC_XTAL   0x00000001  /* source of slow clock is crystal */
0233 #define   BCMA_CC_SLOECLKCTL_SRC_PCI    0x00000002  /* source of slow clock is PCI */
0234 #define  BCMA_CC_SLOWCLKCTL_LPOFREQ 0x00000200  /* LPOFreqSel, 1: 160Khz, 0: 32KHz */
0235 #define  BCMA_CC_SLOWCLKCTL_LPOPD   0x00000400  /* LPOPowerDown, 1: LPO is disabled, 0: LPO is enabled */
0236 #define  BCMA_CC_SLOWCLKCTL_FSLOW   0x00000800  /* ForceSlowClk, 1: sb/cores running on slow clock, 0: power logic control */
0237 #define  BCMA_CC_SLOWCLKCTL_IPLL    0x00001000  /* IgnorePllOffReq, 1/0: power logic ignores/honors PLL clock disable requests from core */
0238 #define  BCMA_CC_SLOWCLKCTL_ENXTAL  0x00002000  /* XtalControlEn, 1/0: power logic does/doesn't disable crystal when appropriate */
0239 #define  BCMA_CC_SLOWCLKCTL_XTALPU  0x00004000  /* XtalPU (RO), 1/0: crystal running/disabled */
0240 #define  BCMA_CC_SLOWCLKCTL_CLKDIV  0xFFFF0000  /* ClockDivider (SlowClk = 1/(4+divisor)) */
0241 #define  BCMA_CC_SLOWCLKCTL_CLKDIV_SHIFT    16
0242 #define BCMA_CC_SYSCLKCTL       0x00C0      /* Rev >= 3 only */
0243 #define  BCMA_CC_SYSCLKCTL_IDLPEN   0x00000001  /* ILPen: Enable Idle Low Power */
0244 #define  BCMA_CC_SYSCLKCTL_ALPEN    0x00000002  /* ALPen: Enable Active Low Power */
0245 #define  BCMA_CC_SYSCLKCTL_PLLEN    0x00000004  /* ForcePLLOn */
0246 #define  BCMA_CC_SYSCLKCTL_FORCEALP 0x00000008  /* Force ALP (or HT if ALPen is not set */
0247 #define  BCMA_CC_SYSCLKCTL_FORCEHT  0x00000010  /* Force HT */
0248 #define  BCMA_CC_SYSCLKCTL_CLKDIV   0xFFFF0000  /* ClkDiv  (ILP = 1/(4+divisor)) */
0249 #define  BCMA_CC_SYSCLKCTL_CLKDIV_SHIFT 16
0250 #define BCMA_CC_CLKSTSTR        0x00C4      /* Rev >= 3 only */
0251 #define BCMA_CC_EROM            0x00FC
0252 #define BCMA_CC_PCMCIA_CFG      0x0100
0253 #define BCMA_CC_PCMCIA_MEMWAIT      0x0104
0254 #define BCMA_CC_PCMCIA_ATTRWAIT     0x0108
0255 #define BCMA_CC_PCMCIA_IOWAIT       0x010C
0256 #define BCMA_CC_IDE_CFG         0x0110
0257 #define BCMA_CC_IDE_MEMWAIT     0x0114
0258 #define BCMA_CC_IDE_ATTRWAIT        0x0118
0259 #define BCMA_CC_IDE_IOWAIT      0x011C
0260 #define BCMA_CC_PROG_CFG        0x0120
0261 #define BCMA_CC_PROG_WAITCNT        0x0124
0262 #define BCMA_CC_FLASH_CFG       0x0128
0263 #define  BCMA_CC_FLASH_CFG_DS       0x0010  /* Data size, 0=8bit, 1=16bit */
0264 #define BCMA_CC_FLASH_WAITCNT       0x012C
0265 #define BCMA_CC_SROM_CONTROL        0x0190
0266 #define  BCMA_CC_SROM_CONTROL_START 0x80000000
0267 #define  BCMA_CC_SROM_CONTROL_BUSY  0x80000000
0268 #define  BCMA_CC_SROM_CONTROL_OPCODE    0x60000000
0269 #define  BCMA_CC_SROM_CONTROL_OP_READ   0x00000000
0270 #define  BCMA_CC_SROM_CONTROL_OP_WRITE  0x20000000
0271 #define  BCMA_CC_SROM_CONTROL_OP_WRDIS  0x40000000
0272 #define  BCMA_CC_SROM_CONTROL_OP_WREN   0x60000000
0273 #define  BCMA_CC_SROM_CONTROL_OTPSEL    0x00000010
0274 #define  BCMA_CC_SROM_CONTROL_LOCK  0x00000008
0275 #define  BCMA_CC_SROM_CONTROL_SIZE_MASK 0x00000006
0276 #define  BCMA_CC_SROM_CONTROL_SIZE_1K   0x00000000
0277 #define  BCMA_CC_SROM_CONTROL_SIZE_4K   0x00000002
0278 #define  BCMA_CC_SROM_CONTROL_SIZE_16K  0x00000004
0279 #define  BCMA_CC_SROM_CONTROL_SIZE_SHIFT    1
0280 #define  BCMA_CC_SROM_CONTROL_PRESENT   0x00000001
0281 /* Block 0x140 - 0x190 registers are chipset specific */
0282 #define BCMA_CC_4706_FLASHSCFG      0x18C       /* Flash struct configuration */
0283 #define  BCMA_CC_4706_FLASHSCFG_MASK    0x000000ff
0284 #define  BCMA_CC_4706_FLASHSCFG_SF1 0x00000001  /* 2nd serial flash present */
0285 #define  BCMA_CC_4706_FLASHSCFG_PF1 0x00000002  /* 2nd parallel flash present */
0286 #define  BCMA_CC_4706_FLASHSCFG_SF1_TYPE    0x00000004  /* 2nd serial flash type : 0 : ST, 1 : Atmel */
0287 #define  BCMA_CC_4706_FLASHSCFG_NF1 0x00000008  /* 2nd NAND flash present */
0288 #define  BCMA_CC_4706_FLASHSCFG_1ST_MADDR_SEG_MASK  0x000000f0
0289 #define  BCMA_CC_4706_FLASHSCFG_1ST_MADDR_SEG_4MB   0x00000010  /* 4MB */
0290 #define  BCMA_CC_4706_FLASHSCFG_1ST_MADDR_SEG_8MB   0x00000020  /* 8MB */
0291 #define  BCMA_CC_4706_FLASHSCFG_1ST_MADDR_SEG_16MB  0x00000030  /* 16MB */
0292 #define  BCMA_CC_4706_FLASHSCFG_1ST_MADDR_SEG_32MB  0x00000040  /* 32MB */
0293 #define  BCMA_CC_4706_FLASHSCFG_1ST_MADDR_SEG_64MB  0x00000050  /* 64MB */
0294 #define  BCMA_CC_4706_FLASHSCFG_1ST_MADDR_SEG_128MB 0x00000060  /* 128MB */
0295 #define  BCMA_CC_4706_FLASHSCFG_1ST_MADDR_SEG_256MB 0x00000070  /* 256MB */
0296 /* NAND flash registers for BCM4706 (corerev = 31) */
0297 #define BCMA_CC_NFLASH_CTL      0x01A0
0298 #define  BCMA_CC_NFLASH_CTL_ERR     0x08000000
0299 #define BCMA_CC_NFLASH_CONF     0x01A4
0300 #define BCMA_CC_NFLASH_COL_ADDR     0x01A8
0301 #define BCMA_CC_NFLASH_ROW_ADDR     0x01AC
0302 #define BCMA_CC_NFLASH_DATA     0x01B0
0303 #define BCMA_CC_NFLASH_WAITCNT0     0x01B4
0304 /* 0x1E0 is defined as shared BCMA_CLKCTLST */
0305 #define BCMA_CC_HW_WORKAROUND       0x01E4 /* Hardware workaround (rev >= 20) */
0306 #define BCMA_CC_UART0_DATA      0x0300
0307 #define BCMA_CC_UART0_IMR       0x0304
0308 #define BCMA_CC_UART0_FCR       0x0308
0309 #define BCMA_CC_UART0_LCR       0x030C
0310 #define BCMA_CC_UART0_MCR       0x0310
0311 #define BCMA_CC_UART0_LSR       0x0314
0312 #define BCMA_CC_UART0_MSR       0x0318
0313 #define BCMA_CC_UART0_SCRATCH       0x031C
0314 #define BCMA_CC_UART1_DATA      0x0400
0315 #define BCMA_CC_UART1_IMR       0x0404
0316 #define BCMA_CC_UART1_FCR       0x0408
0317 #define BCMA_CC_UART1_LCR       0x040C
0318 #define BCMA_CC_UART1_MCR       0x0410
0319 #define BCMA_CC_UART1_LSR       0x0414
0320 #define BCMA_CC_UART1_MSR       0x0418
0321 #define BCMA_CC_UART1_SCRATCH       0x041C
0322 /* PMU registers (rev >= 20) */
0323 #define BCMA_CC_PMU_CTL         0x0600 /* PMU control */
0324 #define  BCMA_CC_PMU_CTL_ILP_DIV    0xFFFF0000 /* ILP div mask */
0325 #define  BCMA_CC_PMU_CTL_ILP_DIV_SHIFT  16
0326 #define  BCMA_CC_PMU_CTL_RES        0x00006000 /* reset control mask */
0327 #define  BCMA_CC_PMU_CTL_RES_SHIFT  13
0328 #define  BCMA_CC_PMU_CTL_RES_RELOAD 0x2 /* reload POR values */
0329 #define  BCMA_CC_PMU_CTL_PLL_UPD    0x00000400
0330 #define  BCMA_CC_PMU_CTL_NOILPONW   0x00000200 /* No ILP on wait */
0331 #define  BCMA_CC_PMU_CTL_HTREQEN    0x00000100 /* HT req enable */
0332 #define  BCMA_CC_PMU_CTL_ALPREQEN   0x00000080 /* ALP req enable */
0333 #define  BCMA_CC_PMU_CTL_XTALFREQ   0x0000007C /* Crystal freq */
0334 #define  BCMA_CC_PMU_CTL_XTALFREQ_SHIFT 2
0335 #define  BCMA_CC_PMU_CTL_ILPDIVEN   0x00000002 /* ILP div enable */
0336 #define  BCMA_CC_PMU_CTL_LPOSEL     0x00000001 /* LPO sel */
0337 #define BCMA_CC_PMU_CAP         0x0604 /* PMU capabilities */
0338 #define  BCMA_CC_PMU_CAP_REVISION   0x000000FF /* Revision mask */
0339 #define BCMA_CC_PMU_STAT        0x0608 /* PMU status */
0340 #define  BCMA_CC_PMU_STAT_EXT_LPO_AVAIL 0x00000100
0341 #define  BCMA_CC_PMU_STAT_WDRESET   0x00000080
0342 #define  BCMA_CC_PMU_STAT_INTPEND   0x00000040 /* Interrupt pending */
0343 #define  BCMA_CC_PMU_STAT_SBCLKST   0x00000030 /* Backplane clock status? */
0344 #define  BCMA_CC_PMU_STAT_HAVEALP   0x00000008 /* ALP available */
0345 #define  BCMA_CC_PMU_STAT_HAVEHT    0x00000004 /* HT available */
0346 #define  BCMA_CC_PMU_STAT_RESINIT   0x00000003 /* Res init */
0347 #define BCMA_CC_PMU_RES_STAT        0x060C /* PMU res status */
0348 #define BCMA_CC_PMU_RES_PEND        0x0610 /* PMU res pending */
0349 #define BCMA_CC_PMU_TIMER       0x0614 /* PMU timer */
0350 #define BCMA_CC_PMU_MINRES_MSK      0x0618 /* PMU min res mask */
0351 #define BCMA_CC_PMU_MAXRES_MSK      0x061C /* PMU max res mask */
0352 #define BCMA_CC_PMU_RES_TABSEL      0x0620 /* PMU res table sel */
0353 #define BCMA_CC_PMU_RES_DEPMSK      0x0624 /* PMU res dep mask */
0354 #define BCMA_CC_PMU_RES_UPDNTM      0x0628 /* PMU res updown timer */
0355 #define BCMA_CC_PMU_RES_TIMER       0x062C /* PMU res timer */
0356 #define BCMA_CC_PMU_CLKSTRETCH      0x0630 /* PMU clockstretch */
0357 #define BCMA_CC_PMU_WATCHDOG        0x0634 /* PMU watchdog */
0358 #define BCMA_CC_PMU_RES_REQTS       0x0640 /* PMU res req timer sel */
0359 #define BCMA_CC_PMU_RES_REQT        0x0644 /* PMU res req timer */
0360 #define BCMA_CC_PMU_RES_REQM        0x0648 /* PMU res req mask */
0361 #define BCMA_CC_PMU_CHIPCTL_ADDR    0x0650
0362 #define BCMA_CC_PMU_CHIPCTL_DATA    0x0654
0363 #define BCMA_CC_PMU_REGCTL_ADDR     0x0658
0364 #define BCMA_CC_PMU_REGCTL_DATA     0x065C
0365 #define BCMA_CC_PMU_PLLCTL_ADDR     0x0660
0366 #define BCMA_CC_PMU_PLLCTL_DATA     0x0664
0367 #define BCMA_CC_PMU_STRAPOPT        0x0668 /* (corerev >= 28) */
0368 #define BCMA_CC_PMU_XTAL_FREQ       0x066C /* (pmurev >= 10) */
0369 #define  BCMA_CC_PMU_XTAL_FREQ_ILPCTL_MASK  0x00001FFF
0370 #define  BCMA_CC_PMU_XTAL_FREQ_MEASURE_MASK 0x80000000
0371 #define  BCMA_CC_PMU_XTAL_FREQ_MEASURE_SHIFT    31
0372 #define BCMA_CC_SPROM           0x0800 /* SPROM beginning */
0373 /* NAND flash MLC controller registers (corerev >= 38) */
0374 #define BCMA_CC_NAND_REVISION       0x0C00
0375 #define BCMA_CC_NAND_CMD_START      0x0C04
0376 #define BCMA_CC_NAND_CMD_ADDR_X     0x0C08
0377 #define BCMA_CC_NAND_CMD_ADDR       0x0C0C
0378 #define BCMA_CC_NAND_CMD_END_ADDR   0x0C10
0379 #define BCMA_CC_NAND_CS_NAND_SELECT 0x0C14
0380 #define BCMA_CC_NAND_CS_NAND_XOR    0x0C18
0381 #define BCMA_CC_NAND_SPARE_RD0      0x0C20
0382 #define BCMA_CC_NAND_SPARE_RD4      0x0C24
0383 #define BCMA_CC_NAND_SPARE_RD8      0x0C28
0384 #define BCMA_CC_NAND_SPARE_RD12     0x0C2C
0385 #define BCMA_CC_NAND_SPARE_WR0      0x0C30
0386 #define BCMA_CC_NAND_SPARE_WR4      0x0C34
0387 #define BCMA_CC_NAND_SPARE_WR8      0x0C38
0388 #define BCMA_CC_NAND_SPARE_WR12     0x0C3C
0389 #define BCMA_CC_NAND_ACC_CONTROL    0x0C40
0390 #define BCMA_CC_NAND_CONFIG     0x0C48
0391 #define BCMA_CC_NAND_TIMING_1       0x0C50
0392 #define BCMA_CC_NAND_TIMING_2       0x0C54
0393 #define BCMA_CC_NAND_SEMAPHORE      0x0C58
0394 #define BCMA_CC_NAND_DEVID      0x0C60
0395 #define BCMA_CC_NAND_DEVID_X        0x0C64
0396 #define BCMA_CC_NAND_BLOCK_LOCK_STATUS  0x0C68
0397 #define BCMA_CC_NAND_INTFC_STATUS   0x0C6C
0398 #define BCMA_CC_NAND_ECC_CORR_ADDR_X    0x0C70
0399 #define BCMA_CC_NAND_ECC_CORR_ADDR  0x0C74
0400 #define BCMA_CC_NAND_ECC_UNC_ADDR_X 0x0C78
0401 #define BCMA_CC_NAND_ECC_UNC_ADDR   0x0C7C
0402 #define BCMA_CC_NAND_READ_ERROR_COUNT   0x0C80
0403 #define BCMA_CC_NAND_CORR_STAT_THRESHOLD    0x0C84
0404 #define BCMA_CC_NAND_READ_ADDR_X    0x0C90
0405 #define BCMA_CC_NAND_READ_ADDR      0x0C94
0406 #define BCMA_CC_NAND_PAGE_PROGRAM_ADDR_X    0x0C98
0407 #define BCMA_CC_NAND_PAGE_PROGRAM_ADDR  0x0C9C
0408 #define BCMA_CC_NAND_COPY_BACK_ADDR_X   0x0CA0
0409 #define BCMA_CC_NAND_COPY_BACK_ADDR 0x0CA4
0410 #define BCMA_CC_NAND_BLOCK_ERASE_ADDR_X 0x0CA8
0411 #define BCMA_CC_NAND_BLOCK_ERASE_ADDR   0x0CAC
0412 #define BCMA_CC_NAND_INV_READ_ADDR_X    0x0CB0
0413 #define BCMA_CC_NAND_INV_READ_ADDR  0x0CB4
0414 #define BCMA_CC_NAND_BLK_WR_PROTECT 0x0CC0
0415 #define BCMA_CC_NAND_ACC_CONTROL_CS1    0x0CD0
0416 #define BCMA_CC_NAND_CONFIG_CS1     0x0CD4
0417 #define BCMA_CC_NAND_TIMING_1_CS1   0x0CD8
0418 #define BCMA_CC_NAND_TIMING_2_CS1   0x0CDC
0419 #define BCMA_CC_NAND_SPARE_RD16     0x0D30
0420 #define BCMA_CC_NAND_SPARE_RD20     0x0D34
0421 #define BCMA_CC_NAND_SPARE_RD24     0x0D38
0422 #define BCMA_CC_NAND_SPARE_RD28     0x0D3C
0423 #define BCMA_CC_NAND_CACHE_ADDR     0x0D40
0424 #define BCMA_CC_NAND_CACHE_DATA     0x0D44
0425 #define BCMA_CC_NAND_CTRL_CONFIG    0x0D48
0426 #define BCMA_CC_NAND_CTRL_STATUS    0x0D4C
0427 
0428 /* Divider allocation in 4716/47162/5356 */
0429 #define BCMA_CC_PMU5_MAINPLL_CPU    1
0430 #define BCMA_CC_PMU5_MAINPLL_MEM    2
0431 #define BCMA_CC_PMU5_MAINPLL_SSB    3
0432 
0433 /* PLL usage in 4716/47162 */
0434 #define BCMA_CC_PMU4716_MAINPLL_PLL0    12
0435 
0436 /* PLL usage in 5356/5357 */
0437 #define BCMA_CC_PMU5356_MAINPLL_PLL0    0
0438 #define BCMA_CC_PMU5357_MAINPLL_PLL0    0
0439 
0440 /* 4706 PMU */
0441 #define BCMA_CC_PMU4706_MAINPLL_PLL0    0
0442 #define BCMA_CC_PMU6_4706_PROCPLL_OFF   4   /* The CPU PLL */
0443 #define  BCMA_CC_PMU6_4706_PROC_P2DIV_MASK  0x000f0000
0444 #define  BCMA_CC_PMU6_4706_PROC_P2DIV_SHIFT 16
0445 #define  BCMA_CC_PMU6_4706_PROC_P1DIV_MASK  0x0000f000
0446 #define  BCMA_CC_PMU6_4706_PROC_P1DIV_SHIFT 12
0447 #define  BCMA_CC_PMU6_4706_PROC_NDIV_INT_MASK   0x00000ff8
0448 #define  BCMA_CC_PMU6_4706_PROC_NDIV_INT_SHIFT  3
0449 #define  BCMA_CC_PMU6_4706_PROC_NDIV_MODE_MASK  0x00000007
0450 #define  BCMA_CC_PMU6_4706_PROC_NDIV_MODE_SHIFT 0
0451 
0452 /* PMU rev 15 */
0453 #define BCMA_CC_PMU15_PLL_PLLCTL0   0
0454 #define  BCMA_CC_PMU15_PLL_PC0_CLKSEL_MASK  0x00000003
0455 #define  BCMA_CC_PMU15_PLL_PC0_CLKSEL_SHIFT 0
0456 #define  BCMA_CC_PMU15_PLL_PC0_FREQTGT_MASK 0x003FFFFC
0457 #define  BCMA_CC_PMU15_PLL_PC0_FREQTGT_SHIFT    2
0458 #define  BCMA_CC_PMU15_PLL_PC0_PRESCALE_MASK    0x00C00000
0459 #define  BCMA_CC_PMU15_PLL_PC0_PRESCALE_SHIFT   22
0460 #define  BCMA_CC_PMU15_PLL_PC0_KPCTRL_MASK  0x07000000
0461 #define  BCMA_CC_PMU15_PLL_PC0_KPCTRL_SHIFT 24
0462 #define  BCMA_CC_PMU15_PLL_PC0_FCNTCTRL_MASK    0x38000000
0463 #define  BCMA_CC_PMU15_PLL_PC0_FCNTCTRL_SHIFT   27
0464 #define  BCMA_CC_PMU15_PLL_PC0_FDCMODE_MASK 0x40000000
0465 #define  BCMA_CC_PMU15_PLL_PC0_FDCMODE_SHIFT    30
0466 #define  BCMA_CC_PMU15_PLL_PC0_CTRLBIAS_MASK    0x80000000
0467 #define  BCMA_CC_PMU15_PLL_PC0_CTRLBIAS_SHIFT   31
0468 
0469 /* ALP clock on pre-PMU chips */
0470 #define BCMA_CC_PMU_ALP_CLOCK       20000000
0471 /* HT clock for systems with PMU-enabled chipcommon */
0472 #define BCMA_CC_PMU_HT_CLOCK        80000000
0473 
0474 /* PMU rev 5 (& 6) */
0475 #define BCMA_CC_PPL_P1P2_OFF        0
0476 #define BCMA_CC_PPL_P1_MASK     0x0f000000
0477 #define BCMA_CC_PPL_P1_SHIFT        24
0478 #define BCMA_CC_PPL_P2_MASK     0x00f00000
0479 #define BCMA_CC_PPL_P2_SHIFT        20
0480 #define BCMA_CC_PPL_M14_OFF     1
0481 #define BCMA_CC_PPL_MDIV_MASK       0x000000ff
0482 #define BCMA_CC_PPL_MDIV_WIDTH      8
0483 #define BCMA_CC_PPL_NM5_OFF     2
0484 #define BCMA_CC_PPL_NDIV_MASK       0xfff00000
0485 #define BCMA_CC_PPL_NDIV_SHIFT      20
0486 #define BCMA_CC_PPL_FMAB_OFF        3
0487 #define BCMA_CC_PPL_MRAT_MASK       0xf0000000
0488 #define BCMA_CC_PPL_MRAT_SHIFT      28
0489 #define BCMA_CC_PPL_ABRAT_MASK      0x08000000
0490 #define BCMA_CC_PPL_ABRAT_SHIFT     27
0491 #define BCMA_CC_PPL_FDIV_MASK       0x07ffffff
0492 #define BCMA_CC_PPL_PLLCTL_OFF      4
0493 #define BCMA_CC_PPL_PCHI_OFF        5
0494 #define BCMA_CC_PPL_PCHI_MASK       0x0000003f
0495 
0496 #define BCMA_CC_PMU_PLL_CTL0        0
0497 #define BCMA_CC_PMU_PLL_CTL1        1
0498 #define BCMA_CC_PMU_PLL_CTL2        2
0499 #define BCMA_CC_PMU_PLL_CTL3        3
0500 #define BCMA_CC_PMU_PLL_CTL4        4
0501 #define BCMA_CC_PMU_PLL_CTL5        5
0502 
0503 #define BCMA_CC_PMU1_PLL0_PC0_P1DIV_MASK    0x00f00000
0504 #define BCMA_CC_PMU1_PLL0_PC0_P1DIV_SHIFT   20
0505 
0506 #define BCMA_CC_PMU1_PLL0_PC2_NDIV_INT_MASK 0x1ff00000
0507 #define BCMA_CC_PMU1_PLL0_PC2_NDIV_INT_SHIFT    20
0508 
0509 #define BCMA_CCB_MII_MNG_CTL        0x0000
0510 #define BCMA_CCB_MII_MNG_CMD_DATA   0x0004
0511 
0512 /* BCM4331 ChipControl numbers. */
0513 #define BCMA_CHIPCTL_4331_BT_COEXIST        BIT(0)  /* 0 disable */
0514 #define BCMA_CHIPCTL_4331_SECI          BIT(1)  /* 0 SECI is disabled (JATG functional) */
0515 #define BCMA_CHIPCTL_4331_EXT_LNA       BIT(2)  /* 0 disable */
0516 #define BCMA_CHIPCTL_4331_SPROM_GPIO13_15   BIT(3)  /* sprom/gpio13-15 mux */
0517 #define BCMA_CHIPCTL_4331_EXTPA_EN      BIT(4)  /* 0 ext pa disable, 1 ext pa enabled */
0518 #define BCMA_CHIPCTL_4331_GPIOCLK_ON_SPROMCS    BIT(5)  /* set drive out GPIO_CLK on sprom_cs pin */
0519 #define BCMA_CHIPCTL_4331_PCIE_MDIO_ON_SPROMCS  BIT(6)  /* use sprom_cs pin as PCIE mdio interface */
0520 #define BCMA_CHIPCTL_4331_EXTPA_ON_GPIO2_5  BIT(7)  /* aband extpa will be at gpio2/5 and sprom_dout */
0521 #define BCMA_CHIPCTL_4331_OVR_PIPEAUXCLKEN  BIT(8)  /* override core control on pipe_AuxClkEnable */
0522 #define BCMA_CHIPCTL_4331_OVR_PIPEAUXPWRDOWN    BIT(9)  /* override core control on pipe_AuxPowerDown */
0523 #define BCMA_CHIPCTL_4331_PCIE_AUXCLKEN     BIT(10) /* pcie_auxclkenable */
0524 #define BCMA_CHIPCTL_4331_PCIE_PIPE_PLLDOWN BIT(11) /* pcie_pipe_pllpowerdown */
0525 #define BCMA_CHIPCTL_4331_EXTPA_EN2     BIT(12) /* 0 ext pa disable, 1 ext pa enabled */
0526 #define BCMA_CHIPCTL_4331_BT_SHD0_ON_GPIO4  BIT(16) /* enable bt_shd0 at gpio4 */
0527 #define BCMA_CHIPCTL_4331_BT_SHD1_ON_GPIO5  BIT(17) /* enable bt_shd1 at gpio5 */
0528 
0529 /* 43224 chip-specific ChipControl register bits */
0530 #define BCMA_CCTRL_43224_GPIO_TOGGLE        0x8000      /* gpio[3:0] pins as btcoex or s/w gpio */
0531 #define BCMA_CCTRL_43224A0_12MA_LED_DRIVE   0x00F000F0  /* 12 mA drive strength */
0532 #define BCMA_CCTRL_43224B0_12MA_LED_DRIVE   0xF0        /* 12 mA drive strength for later 43224s */
0533 
0534 /* 4313 Chip specific ChipControl register bits */
0535 #define BCMA_CCTRL_4313_12MA_LED_DRIVE      0x00000007  /* 12 mA drive strengh for later 4313 */
0536 
0537 /* BCM5357 ChipControl register bits */
0538 #define BCMA_CHIPCTL_5357_EXTPA         BIT(14)
0539 #define BCMA_CHIPCTL_5357_ANT_MUX_2O3       BIT(15)
0540 #define BCMA_CHIPCTL_5357_NFLASH        BIT(16)
0541 #define BCMA_CHIPCTL_5357_I2S_PINS_ENABLE   BIT(18)
0542 #define BCMA_CHIPCTL_5357_I2CSPI_PINS_ENABLE    BIT(19)
0543 
0544 #define BCMA_RES_4314_LPLDO_PU          BIT(0)
0545 #define BCMA_RES_4314_PMU_SLEEP_DIS     BIT(1)
0546 #define BCMA_RES_4314_PMU_BG_PU         BIT(2)
0547 #define BCMA_RES_4314_CBUCK_LPOM_PU     BIT(3)
0548 #define BCMA_RES_4314_CBUCK_PFM_PU      BIT(4)
0549 #define BCMA_RES_4314_CLDO_PU           BIT(5)
0550 #define BCMA_RES_4314_LPLDO2_LVM        BIT(6)
0551 #define BCMA_RES_4314_WL_PMU_PU         BIT(7)
0552 #define BCMA_RES_4314_LNLDO_PU          BIT(8)
0553 #define BCMA_RES_4314_LDO3P3_PU         BIT(9)
0554 #define BCMA_RES_4314_OTP_PU            BIT(10)
0555 #define BCMA_RES_4314_XTAL_PU           BIT(11)
0556 #define BCMA_RES_4314_WL_PWRSW_PU       BIT(12)
0557 #define BCMA_RES_4314_LQ_AVAIL          BIT(13)
0558 #define BCMA_RES_4314_LOGIC_RET         BIT(14)
0559 #define BCMA_RES_4314_MEM_SLEEP         BIT(15)
0560 #define BCMA_RES_4314_MACPHY_RET        BIT(16)
0561 #define BCMA_RES_4314_WL_CORE_READY     BIT(17)
0562 #define BCMA_RES_4314_ILP_REQ           BIT(18)
0563 #define BCMA_RES_4314_ALP_AVAIL         BIT(19)
0564 #define BCMA_RES_4314_MISC_PWRSW_PU     BIT(20)
0565 #define BCMA_RES_4314_SYNTH_PWRSW_PU        BIT(21)
0566 #define BCMA_RES_4314_RX_PWRSW_PU       BIT(22)
0567 #define BCMA_RES_4314_RADIO_PU          BIT(23)
0568 #define BCMA_RES_4314_VCO_LDO_PU        BIT(24)
0569 #define BCMA_RES_4314_AFE_LDO_PU        BIT(25)
0570 #define BCMA_RES_4314_RX_LDO_PU         BIT(26)
0571 #define BCMA_RES_4314_TX_LDO_PU         BIT(27)
0572 #define BCMA_RES_4314_HT_AVAIL          BIT(28)
0573 #define BCMA_RES_4314_MACPHY_CLK_AVAIL      BIT(29)
0574 
0575 /* Data for the PMU, if available.
0576  * Check availability with ((struct bcma_chipcommon)->capabilities & BCMA_CC_CAP_PMU)
0577  */
0578 struct bcma_chipcommon_pmu {
0579     struct bcma_device *core;   /* Can be separated core or just ChipCommon one */
0580     u8 rev;         /* PMU revision */
0581     u32 crystalfreq;    /* The active crystal frequency (in kHz) */
0582 };
0583 
0584 #ifdef CONFIG_BCMA_PFLASH
0585 struct bcma_pflash {
0586     bool present;
0587 };
0588 #endif
0589 
0590 #ifdef CONFIG_BCMA_SFLASH
0591 struct mtd_info;
0592 
0593 struct bcma_sflash {
0594     bool present;
0595     u32 blocksize;
0596     u16 numblocks;
0597     u32 size;
0598 };
0599 #endif
0600 
0601 #ifdef CONFIG_BCMA_NFLASH
0602 struct bcma_nflash {
0603     /* Must be the fist member for the brcmnand driver to
0604      * de-reference that structure.
0605      */
0606     struct brcmnand_platform_data brcmnand_info;
0607     bool present;
0608     bool boot;      /* This is the flash the SoC boots from */
0609 };
0610 #endif
0611 
0612 #ifdef CONFIG_BCMA_DRIVER_MIPS
0613 struct bcma_serial_port {
0614     void *regs;
0615     unsigned long clockspeed;
0616     unsigned int irq;
0617     unsigned int baud_base;
0618     unsigned int reg_shift;
0619 };
0620 #endif /* CONFIG_BCMA_DRIVER_MIPS */
0621 
0622 struct bcma_drv_cc {
0623     struct bcma_device *core;
0624     u32 status;
0625     u32 capabilities;
0626     u32 capabilities_ext;
0627     u8 setup_done:1;
0628     u8 early_setup_done:1;
0629     /* Fast Powerup Delay constant */
0630     u16 fast_pwrup_delay;
0631     struct bcma_chipcommon_pmu pmu;
0632 #ifdef CONFIG_BCMA_PFLASH
0633     struct bcma_pflash pflash;
0634 #endif
0635 #ifdef CONFIG_BCMA_SFLASH
0636     struct bcma_sflash sflash;
0637 #endif
0638 #ifdef CONFIG_BCMA_NFLASH
0639     struct bcma_nflash nflash;
0640 #endif
0641 
0642 #ifdef CONFIG_BCMA_DRIVER_MIPS
0643     int nr_serial_ports;
0644     struct bcma_serial_port serial_ports[4];
0645 #endif /* CONFIG_BCMA_DRIVER_MIPS */
0646     u32 ticks_per_ms;
0647     struct platform_device *watchdog;
0648 
0649     /* Lock for GPIO register access. */
0650     spinlock_t gpio_lock;
0651 #ifdef CONFIG_BCMA_DRIVER_GPIO
0652     struct gpio_chip gpio;
0653 #endif
0654 };
0655 
0656 struct bcma_drv_cc_b {
0657     struct bcma_device *core;
0658     u8 setup_done:1;
0659     void __iomem *mii;
0660 };
0661 
0662 /* Register access */
0663 #define bcma_cc_read32(cc, offset) \
0664     bcma_read32((cc)->core, offset)
0665 #define bcma_cc_write32(cc, offset, val) \
0666     bcma_write32((cc)->core, offset, val)
0667 
0668 #define bcma_cc_mask32(cc, offset, mask) \
0669     bcma_cc_write32(cc, offset, bcma_cc_read32(cc, offset) & (mask))
0670 #define bcma_cc_set32(cc, offset, set) \
0671     bcma_cc_write32(cc, offset, bcma_cc_read32(cc, offset) | (set))
0672 #define bcma_cc_maskset32(cc, offset, mask, set) \
0673     bcma_cc_write32(cc, offset, (bcma_cc_read32(cc, offset) & (mask)) | (set))
0674 
0675 /* PMU registers access */
0676 #define bcma_pmu_read32(cc, offset) \
0677     bcma_read32((cc)->pmu.core, offset)
0678 #define bcma_pmu_write32(cc, offset, val) \
0679     bcma_write32((cc)->pmu.core, offset, val)
0680 
0681 #define bcma_pmu_mask32(cc, offset, mask) \
0682     bcma_pmu_write32(cc, offset, bcma_pmu_read32(cc, offset) & (mask))
0683 #define bcma_pmu_set32(cc, offset, set) \
0684     bcma_pmu_write32(cc, offset, bcma_pmu_read32(cc, offset) | (set))
0685 #define bcma_pmu_maskset32(cc, offset, mask, set) \
0686     bcma_pmu_write32(cc, offset, (bcma_pmu_read32(cc, offset) & (mask)) | (set))
0687 
0688 extern u32 bcma_chipco_watchdog_timer_set(struct bcma_drv_cc *cc, u32 ticks);
0689 
0690 extern u32 bcma_chipco_get_alp_clock(struct bcma_drv_cc *cc);
0691 
0692 void bcma_chipco_irq_mask(struct bcma_drv_cc *cc, u32 mask, u32 value);
0693 
0694 u32 bcma_chipco_irq_status(struct bcma_drv_cc *cc, u32 mask);
0695 
0696 /* Chipcommon GPIO pin access. */
0697 u32 bcma_chipco_gpio_in(struct bcma_drv_cc *cc, u32 mask);
0698 u32 bcma_chipco_gpio_out(struct bcma_drv_cc *cc, u32 mask, u32 value);
0699 u32 bcma_chipco_gpio_outen(struct bcma_drv_cc *cc, u32 mask, u32 value);
0700 u32 bcma_chipco_gpio_control(struct bcma_drv_cc *cc, u32 mask, u32 value);
0701 u32 bcma_chipco_gpio_intmask(struct bcma_drv_cc *cc, u32 mask, u32 value);
0702 u32 bcma_chipco_gpio_polarity(struct bcma_drv_cc *cc, u32 mask, u32 value);
0703 u32 bcma_chipco_gpio_pullup(struct bcma_drv_cc *cc, u32 mask, u32 value);
0704 u32 bcma_chipco_gpio_pulldown(struct bcma_drv_cc *cc, u32 mask, u32 value);
0705 
0706 /* PMU support */
0707 extern void bcma_chipco_pll_write(struct bcma_drv_cc *cc, u32 offset,
0708                   u32 value);
0709 extern void bcma_chipco_pll_maskset(struct bcma_drv_cc *cc, u32 offset,
0710                     u32 mask, u32 set);
0711 extern void bcma_chipco_chipctl_maskset(struct bcma_drv_cc *cc,
0712                     u32 offset, u32 mask, u32 set);
0713 extern void bcma_chipco_regctl_maskset(struct bcma_drv_cc *cc,
0714                        u32 offset, u32 mask, u32 set);
0715 extern void bcma_pmu_spuravoid_pllupdate(struct bcma_drv_cc *cc, int spuravoid);
0716 
0717 extern u32 bcma_pmu_get_bus_clock(struct bcma_drv_cc *cc);
0718 
0719 void bcma_chipco_b_mii_write(struct bcma_drv_cc_b *ccb, u32 offset, u32 value);
0720 
0721 #endif /* LINUX_BCMA_DRIVER_CC_H_ */