Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0 */
0002 /*
0003  * bcsr.h -- Db1xxx/Pb1xxx Devboard CPLD registers ("BCSR") abstraction.
0004  *
0005  * All Alchemy development boards (except, of course, the weird PB1000)
0006  * have a few registers in a CPLD with standardised layout; they mostly
0007  * only differ in base address and bit meanings in the RESETS and BOARD
0008  * registers.
0009  *
0010  * All data taken from the official AMD board documentation sheets.
0011  */
0012 
0013 #ifndef _DB1XXX_BCSR_H_
0014 #define _DB1XXX_BCSR_H_
0015 
0016 
0017 /* BCSR base addresses on various boards. BCSR base 2 refers to the
0018  * physical address of the first HEXLEDS register, which is usually
0019  * a variable offset from the WHOAMI register.
0020  */
0021 
0022 /* DB1000, DB1100, DB1500, PB1100, PB1500 */
0023 #define DB1000_BCSR_PHYS_ADDR   0x0E000000
0024 #define DB1000_BCSR_HEXLED_OFS  0x01000000
0025 
0026 #define DB1550_BCSR_PHYS_ADDR   0x0F000000
0027 #define DB1550_BCSR_HEXLED_OFS  0x00400000
0028 
0029 #define PB1550_BCSR_PHYS_ADDR   0x0F000000
0030 #define PB1550_BCSR_HEXLED_OFS  0x00800000
0031 
0032 #define DB1200_BCSR_PHYS_ADDR   0x19800000
0033 #define DB1200_BCSR_HEXLED_OFS  0x00400000
0034 
0035 #define PB1200_BCSR_PHYS_ADDR   0x0D800000
0036 #define PB1200_BCSR_HEXLED_OFS  0x00400000
0037 
0038 #define DB1300_BCSR_PHYS_ADDR   0x19800000
0039 #define DB1300_BCSR_HEXLED_OFS  0x00400000
0040 
0041 enum bcsr_id {
0042     /* BCSR base 1 */
0043     BCSR_WHOAMI = 0,
0044     BCSR_STATUS,
0045     BCSR_SWITCHES,
0046     BCSR_RESETS,
0047     BCSR_PCMCIA,
0048     BCSR_BOARD,
0049     BCSR_LEDS,
0050     BCSR_SYSTEM,
0051     /* Au1200/1300 based boards */
0052     BCSR_INTCLR,
0053     BCSR_INTSET,
0054     BCSR_MASKCLR,
0055     BCSR_MASKSET,
0056     BCSR_SIGSTAT,
0057     BCSR_INTSTAT,
0058 
0059     /* BCSR base 2 */
0060     BCSR_HEXLEDS,
0061     BCSR_RSVD1,
0062     BCSR_HEXCLEAR,
0063 
0064     BCSR_CNT,
0065 };
0066 
0067 /* register offsets, valid for all Db1xxx/Pb1xxx boards */
0068 #define BCSR_REG_WHOAMI     0x00
0069 #define BCSR_REG_STATUS     0x04
0070 #define BCSR_REG_SWITCHES   0x08
0071 #define BCSR_REG_RESETS     0x0c
0072 #define BCSR_REG_PCMCIA     0x10
0073 #define BCSR_REG_BOARD      0x14
0074 #define BCSR_REG_LEDS       0x18
0075 #define BCSR_REG_SYSTEM     0x1c
0076 /* Au1200/Au1300 based boards: CPLD IRQ muxer */
0077 #define BCSR_REG_INTCLR     0x20
0078 #define BCSR_REG_INTSET     0x24
0079 #define BCSR_REG_MASKCLR    0x28
0080 #define BCSR_REG_MASKSET    0x2c
0081 #define BCSR_REG_SIGSTAT    0x30
0082 #define BCSR_REG_INTSTAT    0x34
0083 
0084 /* hexled control, offset from BCSR base 2 */
0085 #define BCSR_REG_HEXLEDS    0x00
0086 #define BCSR_REG_HEXCLEAR   0x08
0087 
0088 /*
0089  * Register Bits and Pieces.
0090  */
0091 #define BCSR_WHOAMI_DCID(x)     ((x) & 0xf)
0092 #define BCSR_WHOAMI_CPLD(x)     (((x) >> 4) & 0xf)
0093 #define BCSR_WHOAMI_BOARD(x)        (((x) >> 8) & 0xf)
0094 
0095 /* register "WHOAMI" bits 11:8 identify the board */
0096 enum bcsr_whoami_boards {
0097     BCSR_WHOAMI_PB1500 = 1,
0098     BCSR_WHOAMI_PB1500R2,
0099     BCSR_WHOAMI_PB1100,
0100     BCSR_WHOAMI_DB1000,
0101     BCSR_WHOAMI_DB1100,
0102     BCSR_WHOAMI_DB1500,
0103     BCSR_WHOAMI_DB1550,
0104     BCSR_WHOAMI_PB1550_DDR,
0105     BCSR_WHOAMI_PB1550 = BCSR_WHOAMI_PB1550_DDR,
0106     BCSR_WHOAMI_PB1550_SDR,
0107     BCSR_WHOAMI_PB1200_DDR1,
0108     BCSR_WHOAMI_PB1200 = BCSR_WHOAMI_PB1200_DDR1,
0109     BCSR_WHOAMI_PB1200_DDR2,
0110     BCSR_WHOAMI_DB1200,
0111     BCSR_WHOAMI_DB1300,
0112 };
0113 
0114 /* STATUS reg.  Unless otherwise noted, they're valid on all boards.
0115  * PB1200 = DB1200.
0116  */
0117 #define BCSR_STATUS_PC0VS       0x0003
0118 #define BCSR_STATUS_PC1VS       0x000C
0119 #define BCSR_STATUS_PC0FI       0x0010
0120 #define BCSR_STATUS_PC1FI       0x0020
0121 #define BCSR_STATUS_PB1550_SWAPBOOT 0x0040
0122 #define BCSR_STATUS_SRAMWIDTH       0x0080
0123 #define BCSR_STATUS_FLASHBUSY       0x0100
0124 #define BCSR_STATUS_ROMBUSY     0x0400
0125 #define BCSR_STATUS_SD0WP       0x0400  /* DB1200/DB1300:SD1 */
0126 #define BCSR_STATUS_SD1WP       0x0800
0127 #define BCSR_STATUS_USBOTGID        0x0800  /* PB/DB1550 */
0128 #define BCSR_STATUS_DB1000_SWAPBOOT 0x2000
0129 #define BCSR_STATUS_DB1200_SWAPBOOT 0x0040  /* DB1200/1300 */
0130 #define BCSR_STATUS_IDECBLID        0x0200  /* DB1200/1300 */
0131 #define BCSR_STATUS_DB1200_U0RXD    0x1000  /* DB1200 */
0132 #define BCSR_STATUS_DB1200_U1RXD    0x2000  /* DB1200 */
0133 #define BCSR_STATUS_FLASHDEN        0xC000
0134 #define BCSR_STATUS_DB1550_U0RXD    0x1000  /* DB1550 */
0135 #define BCSR_STATUS_DB1550_U3RXD    0x2000  /* DB1550 */
0136 #define BCSR_STATUS_PB1550_U0RXD    0x1000  /* PB1550 */
0137 #define BCSR_STATUS_PB1550_U1RXD    0x2000  /* PB1550 */
0138 #define BCSR_STATUS_PB1550_U3RXD    0x8000  /* PB1550 */
0139 
0140 #define BCSR_STATUS_CFWP        0x4000  /* DB1300 */
0141 #define BCSR_STATUS_USBOCn      0x2000  /* DB1300 */
0142 #define BCSR_STATUS_OTGOCn      0x1000  /* DB1300 */
0143 #define BCSR_STATUS_DCDMARQ     0x0010  /* DB1300 */
0144 #define BCSR_STATUS_IDEDMARQ        0x0020  /* DB1300 */
0145 
0146 /* DB/PB1000,1100,1500,1550 */
0147 #define BCSR_RESETS_PHY0        0x0001
0148 #define BCSR_RESETS_PHY1        0x0002
0149 #define BCSR_RESETS_DC          0x0004
0150 #define BCSR_RESETS_FIR_SEL     0x2000
0151 #define BCSR_RESETS_IRDA_MODE_MASK  0xC000
0152 #define BCSR_RESETS_IRDA_MODE_FULL  0x0000
0153 #define BCSR_RESETS_PB1550_WSCFSM   0x2000
0154 #define BCSR_RESETS_IRDA_MODE_OFF   0x4000
0155 #define BCSR_RESETS_IRDA_MODE_2_3   0x8000
0156 #define BCSR_RESETS_IRDA_MODE_1_3   0xC000
0157 #define BCSR_RESETS_DMAREQ      0x8000  /* PB1550 */
0158 
0159 #define BCSR_BOARD_PCIM66EN     0x0001
0160 #define BCSR_BOARD_SD0PWR       0x0040
0161 #define BCSR_BOARD_SD1PWR       0x0080
0162 #define BCSR_BOARD_PCIM33       0x0100
0163 #define BCSR_BOARD_PCIEXTARB        0x0200
0164 #define BCSR_BOARD_GPIO200RST       0x0400
0165 #define BCSR_BOARD_PCICLKOUT        0x0800
0166 #define BCSR_BOARD_PB1100_SD0PWR    0x0400
0167 #define BCSR_BOARD_PB1100_SD1PWR    0x0800
0168 #define BCSR_BOARD_PCICFG       0x1000
0169 #define BCSR_BOARD_SPISEL       0x2000  /* PB/DB1550 */
0170 #define BCSR_BOARD_SD0WP        0x4000  /* DB1100 */
0171 #define BCSR_BOARD_SD1WP        0x8000  /* DB1100 */
0172 
0173 
0174 /* DB/PB1200/1300 */
0175 #define BCSR_RESETS_ETH         0x0001
0176 #define BCSR_RESETS_CAMERA      0x0002
0177 #define BCSR_RESETS_DC          0x0004
0178 #define BCSR_RESETS_IDE         0x0008
0179 #define BCSR_RESETS_TV          0x0010  /* DB1200/1300 */
0180 /* Not resets but in the same register */
0181 #define BCSR_RESETS_PWMR1MUX        0x0800  /* DB1200 */
0182 #define BCSR_RESETS_PB1200_WSCFSM   0x0800  /* PB1200 */
0183 #define BCSR_RESETS_PSC0MUX     0x1000
0184 #define BCSR_RESETS_PSC1MUX     0x2000
0185 #define BCSR_RESETS_SPISEL      0x4000
0186 #define BCSR_RESETS_SD1MUX      0x8000  /* PB1200 */
0187 
0188 #define BCSR_RESETS_VDDQSHDN        0x0200  /* DB1300 */
0189 #define BCSR_RESETS_OTPPGM      0x0400  /* DB1300 */
0190 #define BCSR_RESETS_OTPSCLK     0x0800  /* DB1300 */
0191 #define BCSR_RESETS_OTPWRPROT       0x1000  /* DB1300 */
0192 #define BCSR_RESETS_OTPCSB      0x2000  /* DB1300 */
0193 #define BCSR_RESETS_OTGPWR      0x4000  /* DB1300 */
0194 #define BCSR_RESETS_USBHPWR     0x8000  /* DB1300 */
0195 
0196 #define BCSR_BOARD_LCDVEE       0x0001
0197 #define BCSR_BOARD_LCDVDD       0x0002
0198 #define BCSR_BOARD_LCDBL        0x0004
0199 #define BCSR_BOARD_CAMSNAP      0x0010
0200 #define BCSR_BOARD_CAMPWR       0x0020
0201 #define BCSR_BOARD_SD0PWR       0x0040
0202 #define BCSR_BOARD_CAMCS        0x0010  /* DB1300 */
0203 #define BCSR_BOARD_HDMI_DE      0x0040  /* DB1300 */
0204 
0205 #define BCSR_SWITCHES_DIP       0x00FF
0206 #define BCSR_SWITCHES_DIP_1     0x0080
0207 #define BCSR_SWITCHES_DIP_2     0x0040
0208 #define BCSR_SWITCHES_DIP_3     0x0020
0209 #define BCSR_SWITCHES_DIP_4     0x0010
0210 #define BCSR_SWITCHES_DIP_5     0x0008
0211 #define BCSR_SWITCHES_DIP_6     0x0004
0212 #define BCSR_SWITCHES_DIP_7     0x0002
0213 #define BCSR_SWITCHES_DIP_8     0x0001
0214 #define BCSR_SWITCHES_ROTARY        0x0F00
0215 
0216 
0217 #define BCSR_PCMCIA_PC0VPP      0x0003
0218 #define BCSR_PCMCIA_PC0VCC      0x000C
0219 #define BCSR_PCMCIA_PC0DRVEN        0x0010
0220 #define BCSR_PCMCIA_PC0RST      0x0080
0221 #define BCSR_PCMCIA_PC1VPP      0x0300
0222 #define BCSR_PCMCIA_PC1VCC      0x0C00
0223 #define BCSR_PCMCIA_PC1DRVEN        0x1000
0224 #define BCSR_PCMCIA_PC1RST      0x8000
0225 
0226 
0227 #define BCSR_LEDS_DECIMALS      0x0003
0228 #define BCSR_LEDS_LED0          0x0100
0229 #define BCSR_LEDS_LED1          0x0200
0230 #define BCSR_LEDS_LED2          0x0400
0231 #define BCSR_LEDS_LED3          0x0800
0232 
0233 
0234 #define BCSR_SYSTEM_RESET       0x8000  /* clear to reset */
0235 #define BCSR_SYSTEM_PWROFF      0x4000  /* set to power off */
0236 #define BCSR_SYSTEM_VDDI        0x001F  /* PB1xxx boards */
0237 #define BCSR_SYSTEM_DEBUGCSMASK     0x003F  /* DB1300 */
0238 #define BCSR_SYSTEM_UDMAMODE        0x0100  /* DB1300 */
0239 #define BCSR_SYSTEM_WAKEONIRQ       0x0200  /* DB1300 */
0240 #define BCSR_SYSTEM_VDDI1300        0x3C00  /* DB1300 */
0241 
0242 
0243 
0244 /* initialize BCSR for a board. Provide the PHYSICAL addresses of both
0245  * BCSR spaces.
0246  */
0247 void __init bcsr_init(unsigned long bcsr1_phys, unsigned long bcsr2_phys);
0248 
0249 /* read a board register */
0250 unsigned short bcsr_read(enum bcsr_id reg);
0251 
0252 /* write to a board register */
0253 void bcsr_write(enum bcsr_id reg, unsigned short val);
0254 
0255 /* modify a register. clear bits set in 'clr', set bits set in 'set' */
0256 void bcsr_mod(enum bcsr_id reg, unsigned short clr, unsigned short set);
0257 
0258 /* install CPLD IRQ demuxer (DB1200/PB1200) */
0259 void __init bcsr_init_irq(int csc_start, int csc_end, int hook_irq);
0260 
0261 #endif