1*4882a593Smuzhiyun /* 2*4882a593Smuzhiyun * 3*4882a593Smuzhiyun * BRIEF MODULE DESCRIPTION 4*4882a593Smuzhiyun * Include file for Alchemy Semiconductor's Au1k CPU. 5*4882a593Smuzhiyun * 6*4882a593Smuzhiyun * Copyright 2004 Embedded Edge, LLC 7*4882a593Smuzhiyun * dan@embeddededge.com 8*4882a593Smuzhiyun * 9*4882a593Smuzhiyun * This program is free software; you can redistribute it and/or modify it 10*4882a593Smuzhiyun * under the terms of the GNU General Public License as published by the 11*4882a593Smuzhiyun * Free Software Foundation; either version 2 of the License, or (at your 12*4882a593Smuzhiyun * option) any later version. 13*4882a593Smuzhiyun * 14*4882a593Smuzhiyun * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED 15*4882a593Smuzhiyun * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 16*4882a593Smuzhiyun * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN 17*4882a593Smuzhiyun * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 18*4882a593Smuzhiyun * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 19*4882a593Smuzhiyun * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 20*4882a593Smuzhiyun * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 21*4882a593Smuzhiyun * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 22*4882a593Smuzhiyun * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 23*4882a593Smuzhiyun * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 24*4882a593Smuzhiyun * 25*4882a593Smuzhiyun * You should have received a copy of the GNU General Public License along 26*4882a593Smuzhiyun * with this program; if not, write to the Free Software Foundation, Inc., 27*4882a593Smuzhiyun * 675 Mass Ave, Cambridge, MA 02139, USA. 28*4882a593Smuzhiyun */ 29*4882a593Smuzhiyun 30*4882a593Smuzhiyun /* Specifics for the Au1xxx Programmable Serial Controllers, first 31*4882a593Smuzhiyun * seen in the AU1550 part. 32*4882a593Smuzhiyun */ 33*4882a593Smuzhiyun #ifndef _AU1000_PSC_H_ 34*4882a593Smuzhiyun #define _AU1000_PSC_H_ 35*4882a593Smuzhiyun 36*4882a593Smuzhiyun /* 37*4882a593Smuzhiyun * The PSC select and control registers are common to all protocols. 38*4882a593Smuzhiyun */ 39*4882a593Smuzhiyun #define PSC_SEL_OFFSET 0x00000000 40*4882a593Smuzhiyun #define PSC_CTRL_OFFSET 0x00000004 41*4882a593Smuzhiyun 42*4882a593Smuzhiyun #define PSC_SEL_CLK_MASK (3 << 4) 43*4882a593Smuzhiyun #define PSC_SEL_CLK_INTCLK (0 << 4) 44*4882a593Smuzhiyun #define PSC_SEL_CLK_EXTCLK (1 << 4) 45*4882a593Smuzhiyun #define PSC_SEL_CLK_SERCLK (2 << 4) 46*4882a593Smuzhiyun 47*4882a593Smuzhiyun #define PSC_SEL_PS_MASK 0x00000007 48*4882a593Smuzhiyun #define PSC_SEL_PS_DISABLED 0 49*4882a593Smuzhiyun #define PSC_SEL_PS_SPIMODE 2 50*4882a593Smuzhiyun #define PSC_SEL_PS_I2SMODE 3 51*4882a593Smuzhiyun #define PSC_SEL_PS_AC97MODE 4 52*4882a593Smuzhiyun #define PSC_SEL_PS_SMBUSMODE 5 53*4882a593Smuzhiyun 54*4882a593Smuzhiyun #define PSC_CTRL_DISABLE 0 55*4882a593Smuzhiyun #define PSC_CTRL_SUSPEND 2 56*4882a593Smuzhiyun #define PSC_CTRL_ENABLE 3 57*4882a593Smuzhiyun 58*4882a593Smuzhiyun /* AC97 Registers. */ 59*4882a593Smuzhiyun #define PSC_AC97CFG_OFFSET 0x00000008 60*4882a593Smuzhiyun #define PSC_AC97MSK_OFFSET 0x0000000c 61*4882a593Smuzhiyun #define PSC_AC97PCR_OFFSET 0x00000010 62*4882a593Smuzhiyun #define PSC_AC97STAT_OFFSET 0x00000014 63*4882a593Smuzhiyun #define PSC_AC97EVNT_OFFSET 0x00000018 64*4882a593Smuzhiyun #define PSC_AC97TXRX_OFFSET 0x0000001c 65*4882a593Smuzhiyun #define PSC_AC97CDC_OFFSET 0x00000020 66*4882a593Smuzhiyun #define PSC_AC97RST_OFFSET 0x00000024 67*4882a593Smuzhiyun #define PSC_AC97GPO_OFFSET 0x00000028 68*4882a593Smuzhiyun #define PSC_AC97GPI_OFFSET 0x0000002c 69*4882a593Smuzhiyun 70*4882a593Smuzhiyun /* AC97 Config Register. */ 71*4882a593Smuzhiyun #define PSC_AC97CFG_RT_MASK (3 << 30) 72*4882a593Smuzhiyun #define PSC_AC97CFG_RT_FIFO1 (0 << 30) 73*4882a593Smuzhiyun #define PSC_AC97CFG_RT_FIFO2 (1 << 30) 74*4882a593Smuzhiyun #define PSC_AC97CFG_RT_FIFO4 (2 << 30) 75*4882a593Smuzhiyun #define PSC_AC97CFG_RT_FIFO8 (3 << 30) 76*4882a593Smuzhiyun 77*4882a593Smuzhiyun #define PSC_AC97CFG_TT_MASK (3 << 28) 78*4882a593Smuzhiyun #define PSC_AC97CFG_TT_FIFO1 (0 << 28) 79*4882a593Smuzhiyun #define PSC_AC97CFG_TT_FIFO2 (1 << 28) 80*4882a593Smuzhiyun #define PSC_AC97CFG_TT_FIFO4 (2 << 28) 81*4882a593Smuzhiyun #define PSC_AC97CFG_TT_FIFO8 (3 << 28) 82*4882a593Smuzhiyun 83*4882a593Smuzhiyun #define PSC_AC97CFG_DD_DISABLE (1 << 27) 84*4882a593Smuzhiyun #define PSC_AC97CFG_DE_ENABLE (1 << 26) 85*4882a593Smuzhiyun #define PSC_AC97CFG_SE_ENABLE (1 << 25) 86*4882a593Smuzhiyun 87*4882a593Smuzhiyun #define PSC_AC97CFG_LEN_MASK (0xf << 21) 88*4882a593Smuzhiyun #define PSC_AC97CFG_TXSLOT_MASK (0x3ff << 11) 89*4882a593Smuzhiyun #define PSC_AC97CFG_RXSLOT_MASK (0x3ff << 1) 90*4882a593Smuzhiyun #define PSC_AC97CFG_GE_ENABLE (1) 91*4882a593Smuzhiyun 92*4882a593Smuzhiyun /* Enable slots 3-12. */ 93*4882a593Smuzhiyun #define PSC_AC97CFG_TXSLOT_ENA(x) (1 << (((x) - 3) + 11)) 94*4882a593Smuzhiyun #define PSC_AC97CFG_RXSLOT_ENA(x) (1 << (((x) - 3) + 1)) 95*4882a593Smuzhiyun 96*4882a593Smuzhiyun /* 97*4882a593Smuzhiyun * The word length equation is ((x) * 2) + 2, so choose 'x' appropriately. 98*4882a593Smuzhiyun * The only sensible numbers are 7, 9, or possibly 11. Nah, just do the 99*4882a593Smuzhiyun * arithmetic in the macro. 100*4882a593Smuzhiyun */ 101*4882a593Smuzhiyun #define PSC_AC97CFG_SET_LEN(x) (((((x) - 2) / 2) & 0xf) << 21) 102*4882a593Smuzhiyun #define PSC_AC97CFG_GET_LEN(x) (((((x) >> 21) & 0xf) * 2) + 2) 103*4882a593Smuzhiyun 104*4882a593Smuzhiyun /* AC97 Mask Register. */ 105*4882a593Smuzhiyun #define PSC_AC97MSK_GR (1 << 25) 106*4882a593Smuzhiyun #define PSC_AC97MSK_CD (1 << 24) 107*4882a593Smuzhiyun #define PSC_AC97MSK_RR (1 << 13) 108*4882a593Smuzhiyun #define PSC_AC97MSK_RO (1 << 12) 109*4882a593Smuzhiyun #define PSC_AC97MSK_RU (1 << 11) 110*4882a593Smuzhiyun #define PSC_AC97MSK_TR (1 << 10) 111*4882a593Smuzhiyun #define PSC_AC97MSK_TO (1 << 9) 112*4882a593Smuzhiyun #define PSC_AC97MSK_TU (1 << 8) 113*4882a593Smuzhiyun #define PSC_AC97MSK_RD (1 << 5) 114*4882a593Smuzhiyun #define PSC_AC97MSK_TD (1 << 4) 115*4882a593Smuzhiyun #define PSC_AC97MSK_ALLMASK (PSC_AC97MSK_GR | PSC_AC97MSK_CD | \ 116*4882a593Smuzhiyun PSC_AC97MSK_RR | PSC_AC97MSK_RO | \ 117*4882a593Smuzhiyun PSC_AC97MSK_RU | PSC_AC97MSK_TR | \ 118*4882a593Smuzhiyun PSC_AC97MSK_TO | PSC_AC97MSK_TU | \ 119*4882a593Smuzhiyun PSC_AC97MSK_RD | PSC_AC97MSK_TD) 120*4882a593Smuzhiyun 121*4882a593Smuzhiyun /* AC97 Protocol Control Register. */ 122*4882a593Smuzhiyun #define PSC_AC97PCR_RC (1 << 6) 123*4882a593Smuzhiyun #define PSC_AC97PCR_RP (1 << 5) 124*4882a593Smuzhiyun #define PSC_AC97PCR_RS (1 << 4) 125*4882a593Smuzhiyun #define PSC_AC97PCR_TC (1 << 2) 126*4882a593Smuzhiyun #define PSC_AC97PCR_TP (1 << 1) 127*4882a593Smuzhiyun #define PSC_AC97PCR_TS (1 << 0) 128*4882a593Smuzhiyun 129*4882a593Smuzhiyun /* AC97 Status register (read only). */ 130*4882a593Smuzhiyun #define PSC_AC97STAT_CB (1 << 26) 131*4882a593Smuzhiyun #define PSC_AC97STAT_CP (1 << 25) 132*4882a593Smuzhiyun #define PSC_AC97STAT_CR (1 << 24) 133*4882a593Smuzhiyun #define PSC_AC97STAT_RF (1 << 13) 134*4882a593Smuzhiyun #define PSC_AC97STAT_RE (1 << 12) 135*4882a593Smuzhiyun #define PSC_AC97STAT_RR (1 << 11) 136*4882a593Smuzhiyun #define PSC_AC97STAT_TF (1 << 10) 137*4882a593Smuzhiyun #define PSC_AC97STAT_TE (1 << 9) 138*4882a593Smuzhiyun #define PSC_AC97STAT_TR (1 << 8) 139*4882a593Smuzhiyun #define PSC_AC97STAT_RB (1 << 5) 140*4882a593Smuzhiyun #define PSC_AC97STAT_TB (1 << 4) 141*4882a593Smuzhiyun #define PSC_AC97STAT_DI (1 << 2) 142*4882a593Smuzhiyun #define PSC_AC97STAT_DR (1 << 1) 143*4882a593Smuzhiyun #define PSC_AC97STAT_SR (1 << 0) 144*4882a593Smuzhiyun 145*4882a593Smuzhiyun /* AC97 Event Register. */ 146*4882a593Smuzhiyun #define PSC_AC97EVNT_GR (1 << 25) 147*4882a593Smuzhiyun #define PSC_AC97EVNT_CD (1 << 24) 148*4882a593Smuzhiyun #define PSC_AC97EVNT_RR (1 << 13) 149*4882a593Smuzhiyun #define PSC_AC97EVNT_RO (1 << 12) 150*4882a593Smuzhiyun #define PSC_AC97EVNT_RU (1 << 11) 151*4882a593Smuzhiyun #define PSC_AC97EVNT_TR (1 << 10) 152*4882a593Smuzhiyun #define PSC_AC97EVNT_TO (1 << 9) 153*4882a593Smuzhiyun #define PSC_AC97EVNT_TU (1 << 8) 154*4882a593Smuzhiyun #define PSC_AC97EVNT_RD (1 << 5) 155*4882a593Smuzhiyun #define PSC_AC97EVNT_TD (1 << 4) 156*4882a593Smuzhiyun 157*4882a593Smuzhiyun /* CODEC Command Register. */ 158*4882a593Smuzhiyun #define PSC_AC97CDC_RD (1 << 25) 159*4882a593Smuzhiyun #define PSC_AC97CDC_ID_MASK (3 << 23) 160*4882a593Smuzhiyun #define PSC_AC97CDC_INDX_MASK (0x7f << 16) 161*4882a593Smuzhiyun #define PSC_AC97CDC_ID(x) (((x) & 0x03) << 23) 162*4882a593Smuzhiyun #define PSC_AC97CDC_INDX(x) (((x) & 0x7f) << 16) 163*4882a593Smuzhiyun 164*4882a593Smuzhiyun /* AC97 Reset Control Register. */ 165*4882a593Smuzhiyun #define PSC_AC97RST_RST (1 << 1) 166*4882a593Smuzhiyun #define PSC_AC97RST_SNC (1 << 0) 167*4882a593Smuzhiyun 168*4882a593Smuzhiyun /* PSC in I2S Mode. */ 169*4882a593Smuzhiyun typedef struct psc_i2s { 170*4882a593Smuzhiyun u32 psc_sel; 171*4882a593Smuzhiyun u32 psc_ctrl; 172*4882a593Smuzhiyun u32 psc_i2scfg; 173*4882a593Smuzhiyun u32 psc_i2smsk; 174*4882a593Smuzhiyun u32 psc_i2spcr; 175*4882a593Smuzhiyun u32 psc_i2sstat; 176*4882a593Smuzhiyun u32 psc_i2sevent; 177*4882a593Smuzhiyun u32 psc_i2stxrx; 178*4882a593Smuzhiyun u32 psc_i2sudf; 179*4882a593Smuzhiyun } psc_i2s_t; 180*4882a593Smuzhiyun 181*4882a593Smuzhiyun #define PSC_I2SCFG_OFFSET 0x08 182*4882a593Smuzhiyun #define PSC_I2SMASK_OFFSET 0x0C 183*4882a593Smuzhiyun #define PSC_I2SPCR_OFFSET 0x10 184*4882a593Smuzhiyun #define PSC_I2SSTAT_OFFSET 0x14 185*4882a593Smuzhiyun #define PSC_I2SEVENT_OFFSET 0x18 186*4882a593Smuzhiyun #define PSC_I2SRXTX_OFFSET 0x1C 187*4882a593Smuzhiyun #define PSC_I2SUDF_OFFSET 0x20 188*4882a593Smuzhiyun 189*4882a593Smuzhiyun /* I2S Config Register. */ 190*4882a593Smuzhiyun #define PSC_I2SCFG_RT_MASK (3 << 30) 191*4882a593Smuzhiyun #define PSC_I2SCFG_RT_FIFO1 (0 << 30) 192*4882a593Smuzhiyun #define PSC_I2SCFG_RT_FIFO2 (1 << 30) 193*4882a593Smuzhiyun #define PSC_I2SCFG_RT_FIFO4 (2 << 30) 194*4882a593Smuzhiyun #define PSC_I2SCFG_RT_FIFO8 (3 << 30) 195*4882a593Smuzhiyun 196*4882a593Smuzhiyun #define PSC_I2SCFG_TT_MASK (3 << 28) 197*4882a593Smuzhiyun #define PSC_I2SCFG_TT_FIFO1 (0 << 28) 198*4882a593Smuzhiyun #define PSC_I2SCFG_TT_FIFO2 (1 << 28) 199*4882a593Smuzhiyun #define PSC_I2SCFG_TT_FIFO4 (2 << 28) 200*4882a593Smuzhiyun #define PSC_I2SCFG_TT_FIFO8 (3 << 28) 201*4882a593Smuzhiyun 202*4882a593Smuzhiyun #define PSC_I2SCFG_DD_DISABLE (1 << 27) 203*4882a593Smuzhiyun #define PSC_I2SCFG_DE_ENABLE (1 << 26) 204*4882a593Smuzhiyun #define PSC_I2SCFG_SET_WS(x) (((((x) / 2) - 1) & 0x7f) << 16) 205*4882a593Smuzhiyun #define PSC_I2SCFG_WS(n) ((n & 0xFF) << 16) 206*4882a593Smuzhiyun #define PSC_I2SCFG_WS_MASK (PSC_I2SCFG_WS(0x3F)) 207*4882a593Smuzhiyun #define PSC_I2SCFG_WI (1 << 15) 208*4882a593Smuzhiyun 209*4882a593Smuzhiyun #define PSC_I2SCFG_DIV_MASK (3 << 13) 210*4882a593Smuzhiyun #define PSC_I2SCFG_DIV2 (0 << 13) 211*4882a593Smuzhiyun #define PSC_I2SCFG_DIV4 (1 << 13) 212*4882a593Smuzhiyun #define PSC_I2SCFG_DIV8 (2 << 13) 213*4882a593Smuzhiyun #define PSC_I2SCFG_DIV16 (3 << 13) 214*4882a593Smuzhiyun 215*4882a593Smuzhiyun #define PSC_I2SCFG_BI (1 << 12) 216*4882a593Smuzhiyun #define PSC_I2SCFG_BUF (1 << 11) 217*4882a593Smuzhiyun #define PSC_I2SCFG_MLJ (1 << 10) 218*4882a593Smuzhiyun #define PSC_I2SCFG_XM (1 << 9) 219*4882a593Smuzhiyun 220*4882a593Smuzhiyun /* The word length equation is simply LEN+1. */ 221*4882a593Smuzhiyun #define PSC_I2SCFG_SET_LEN(x) ((((x) - 1) & 0x1f) << 4) 222*4882a593Smuzhiyun #define PSC_I2SCFG_GET_LEN(x) ((((x) >> 4) & 0x1f) + 1) 223*4882a593Smuzhiyun 224*4882a593Smuzhiyun #define PSC_I2SCFG_LB (1 << 2) 225*4882a593Smuzhiyun #define PSC_I2SCFG_MLF (1 << 1) 226*4882a593Smuzhiyun #define PSC_I2SCFG_MS (1 << 0) 227*4882a593Smuzhiyun 228*4882a593Smuzhiyun /* I2S Mask Register. */ 229*4882a593Smuzhiyun #define PSC_I2SMSK_RR (1 << 13) 230*4882a593Smuzhiyun #define PSC_I2SMSK_RO (1 << 12) 231*4882a593Smuzhiyun #define PSC_I2SMSK_RU (1 << 11) 232*4882a593Smuzhiyun #define PSC_I2SMSK_TR (1 << 10) 233*4882a593Smuzhiyun #define PSC_I2SMSK_TO (1 << 9) 234*4882a593Smuzhiyun #define PSC_I2SMSK_TU (1 << 8) 235*4882a593Smuzhiyun #define PSC_I2SMSK_RD (1 << 5) 236*4882a593Smuzhiyun #define PSC_I2SMSK_TD (1 << 4) 237*4882a593Smuzhiyun #define PSC_I2SMSK_ALLMASK (PSC_I2SMSK_RR | PSC_I2SMSK_RO | \ 238*4882a593Smuzhiyun PSC_I2SMSK_RU | PSC_I2SMSK_TR | \ 239*4882a593Smuzhiyun PSC_I2SMSK_TO | PSC_I2SMSK_TU | \ 240*4882a593Smuzhiyun PSC_I2SMSK_RD | PSC_I2SMSK_TD) 241*4882a593Smuzhiyun 242*4882a593Smuzhiyun /* I2S Protocol Control Register. */ 243*4882a593Smuzhiyun #define PSC_I2SPCR_RC (1 << 6) 244*4882a593Smuzhiyun #define PSC_I2SPCR_RP (1 << 5) 245*4882a593Smuzhiyun #define PSC_I2SPCR_RS (1 << 4) 246*4882a593Smuzhiyun #define PSC_I2SPCR_TC (1 << 2) 247*4882a593Smuzhiyun #define PSC_I2SPCR_TP (1 << 1) 248*4882a593Smuzhiyun #define PSC_I2SPCR_TS (1 << 0) 249*4882a593Smuzhiyun 250*4882a593Smuzhiyun /* I2S Status register (read only). */ 251*4882a593Smuzhiyun #define PSC_I2SSTAT_RF (1 << 13) 252*4882a593Smuzhiyun #define PSC_I2SSTAT_RE (1 << 12) 253*4882a593Smuzhiyun #define PSC_I2SSTAT_RR (1 << 11) 254*4882a593Smuzhiyun #define PSC_I2SSTAT_TF (1 << 10) 255*4882a593Smuzhiyun #define PSC_I2SSTAT_TE (1 << 9) 256*4882a593Smuzhiyun #define PSC_I2SSTAT_TR (1 << 8) 257*4882a593Smuzhiyun #define PSC_I2SSTAT_RB (1 << 5) 258*4882a593Smuzhiyun #define PSC_I2SSTAT_TB (1 << 4) 259*4882a593Smuzhiyun #define PSC_I2SSTAT_DI (1 << 2) 260*4882a593Smuzhiyun #define PSC_I2SSTAT_DR (1 << 1) 261*4882a593Smuzhiyun #define PSC_I2SSTAT_SR (1 << 0) 262*4882a593Smuzhiyun 263*4882a593Smuzhiyun /* I2S Event Register. */ 264*4882a593Smuzhiyun #define PSC_I2SEVNT_RR (1 << 13) 265*4882a593Smuzhiyun #define PSC_I2SEVNT_RO (1 << 12) 266*4882a593Smuzhiyun #define PSC_I2SEVNT_RU (1 << 11) 267*4882a593Smuzhiyun #define PSC_I2SEVNT_TR (1 << 10) 268*4882a593Smuzhiyun #define PSC_I2SEVNT_TO (1 << 9) 269*4882a593Smuzhiyun #define PSC_I2SEVNT_TU (1 << 8) 270*4882a593Smuzhiyun #define PSC_I2SEVNT_RD (1 << 5) 271*4882a593Smuzhiyun #define PSC_I2SEVNT_TD (1 << 4) 272*4882a593Smuzhiyun 273*4882a593Smuzhiyun /* PSC in SPI Mode. */ 274*4882a593Smuzhiyun typedef struct psc_spi { 275*4882a593Smuzhiyun u32 psc_sel; 276*4882a593Smuzhiyun u32 psc_ctrl; 277*4882a593Smuzhiyun u32 psc_spicfg; 278*4882a593Smuzhiyun u32 psc_spimsk; 279*4882a593Smuzhiyun u32 psc_spipcr; 280*4882a593Smuzhiyun u32 psc_spistat; 281*4882a593Smuzhiyun u32 psc_spievent; 282*4882a593Smuzhiyun u32 psc_spitxrx; 283*4882a593Smuzhiyun } psc_spi_t; 284*4882a593Smuzhiyun 285*4882a593Smuzhiyun /* SPI Config Register. */ 286*4882a593Smuzhiyun #define PSC_SPICFG_RT_MASK (3 << 30) 287*4882a593Smuzhiyun #define PSC_SPICFG_RT_FIFO1 (0 << 30) 288*4882a593Smuzhiyun #define PSC_SPICFG_RT_FIFO2 (1 << 30) 289*4882a593Smuzhiyun #define PSC_SPICFG_RT_FIFO4 (2 << 30) 290*4882a593Smuzhiyun #define PSC_SPICFG_RT_FIFO8 (3 << 30) 291*4882a593Smuzhiyun 292*4882a593Smuzhiyun #define PSC_SPICFG_TT_MASK (3 << 28) 293*4882a593Smuzhiyun #define PSC_SPICFG_TT_FIFO1 (0 << 28) 294*4882a593Smuzhiyun #define PSC_SPICFG_TT_FIFO2 (1 << 28) 295*4882a593Smuzhiyun #define PSC_SPICFG_TT_FIFO4 (2 << 28) 296*4882a593Smuzhiyun #define PSC_SPICFG_TT_FIFO8 (3 << 28) 297*4882a593Smuzhiyun 298*4882a593Smuzhiyun #define PSC_SPICFG_DD_DISABLE (1 << 27) 299*4882a593Smuzhiyun #define PSC_SPICFG_DE_ENABLE (1 << 26) 300*4882a593Smuzhiyun #define PSC_SPICFG_CLR_BAUD(x) ((x) & ~((0x3f) << 15)) 301*4882a593Smuzhiyun #define PSC_SPICFG_SET_BAUD(x) (((x) & 0x3f) << 15) 302*4882a593Smuzhiyun 303*4882a593Smuzhiyun #define PSC_SPICFG_SET_DIV(x) (((x) & 0x03) << 13) 304*4882a593Smuzhiyun #define PSC_SPICFG_DIV2 0 305*4882a593Smuzhiyun #define PSC_SPICFG_DIV4 1 306*4882a593Smuzhiyun #define PSC_SPICFG_DIV8 2 307*4882a593Smuzhiyun #define PSC_SPICFG_DIV16 3 308*4882a593Smuzhiyun 309*4882a593Smuzhiyun #define PSC_SPICFG_BI (1 << 12) 310*4882a593Smuzhiyun #define PSC_SPICFG_PSE (1 << 11) 311*4882a593Smuzhiyun #define PSC_SPICFG_CGE (1 << 10) 312*4882a593Smuzhiyun #define PSC_SPICFG_CDE (1 << 9) 313*4882a593Smuzhiyun 314*4882a593Smuzhiyun #define PSC_SPICFG_CLR_LEN(x) ((x) & ~((0x1f) << 4)) 315*4882a593Smuzhiyun #define PSC_SPICFG_SET_LEN(x) (((x-1) & 0x1f) << 4) 316*4882a593Smuzhiyun 317*4882a593Smuzhiyun #define PSC_SPICFG_LB (1 << 3) 318*4882a593Smuzhiyun #define PSC_SPICFG_MLF (1 << 1) 319*4882a593Smuzhiyun #define PSC_SPICFG_MO (1 << 0) 320*4882a593Smuzhiyun 321*4882a593Smuzhiyun /* SPI Mask Register. */ 322*4882a593Smuzhiyun #define PSC_SPIMSK_MM (1 << 16) 323*4882a593Smuzhiyun #define PSC_SPIMSK_RR (1 << 13) 324*4882a593Smuzhiyun #define PSC_SPIMSK_RO (1 << 12) 325*4882a593Smuzhiyun #define PSC_SPIMSK_RU (1 << 11) 326*4882a593Smuzhiyun #define PSC_SPIMSK_TR (1 << 10) 327*4882a593Smuzhiyun #define PSC_SPIMSK_TO (1 << 9) 328*4882a593Smuzhiyun #define PSC_SPIMSK_TU (1 << 8) 329*4882a593Smuzhiyun #define PSC_SPIMSK_SD (1 << 5) 330*4882a593Smuzhiyun #define PSC_SPIMSK_MD (1 << 4) 331*4882a593Smuzhiyun #define PSC_SPIMSK_ALLMASK (PSC_SPIMSK_MM | PSC_SPIMSK_RR | \ 332*4882a593Smuzhiyun PSC_SPIMSK_RO | PSC_SPIMSK_TO | \ 333*4882a593Smuzhiyun PSC_SPIMSK_TU | PSC_SPIMSK_SD | \ 334*4882a593Smuzhiyun PSC_SPIMSK_MD) 335*4882a593Smuzhiyun 336*4882a593Smuzhiyun /* SPI Protocol Control Register. */ 337*4882a593Smuzhiyun #define PSC_SPIPCR_RC (1 << 6) 338*4882a593Smuzhiyun #define PSC_SPIPCR_SP (1 << 5) 339*4882a593Smuzhiyun #define PSC_SPIPCR_SS (1 << 4) 340*4882a593Smuzhiyun #define PSC_SPIPCR_TC (1 << 2) 341*4882a593Smuzhiyun #define PSC_SPIPCR_MS (1 << 0) 342*4882a593Smuzhiyun 343*4882a593Smuzhiyun /* SPI Status register (read only). */ 344*4882a593Smuzhiyun #define PSC_SPISTAT_RF (1 << 13) 345*4882a593Smuzhiyun #define PSC_SPISTAT_RE (1 << 12) 346*4882a593Smuzhiyun #define PSC_SPISTAT_RR (1 << 11) 347*4882a593Smuzhiyun #define PSC_SPISTAT_TF (1 << 10) 348*4882a593Smuzhiyun #define PSC_SPISTAT_TE (1 << 9) 349*4882a593Smuzhiyun #define PSC_SPISTAT_TR (1 << 8) 350*4882a593Smuzhiyun #define PSC_SPISTAT_SB (1 << 5) 351*4882a593Smuzhiyun #define PSC_SPISTAT_MB (1 << 4) 352*4882a593Smuzhiyun #define PSC_SPISTAT_DI (1 << 2) 353*4882a593Smuzhiyun #define PSC_SPISTAT_DR (1 << 1) 354*4882a593Smuzhiyun #define PSC_SPISTAT_SR (1 << 0) 355*4882a593Smuzhiyun 356*4882a593Smuzhiyun /* SPI Event Register. */ 357*4882a593Smuzhiyun #define PSC_SPIEVNT_MM (1 << 16) 358*4882a593Smuzhiyun #define PSC_SPIEVNT_RR (1 << 13) 359*4882a593Smuzhiyun #define PSC_SPIEVNT_RO (1 << 12) 360*4882a593Smuzhiyun #define PSC_SPIEVNT_RU (1 << 11) 361*4882a593Smuzhiyun #define PSC_SPIEVNT_TR (1 << 10) 362*4882a593Smuzhiyun #define PSC_SPIEVNT_TO (1 << 9) 363*4882a593Smuzhiyun #define PSC_SPIEVNT_TU (1 << 8) 364*4882a593Smuzhiyun #define PSC_SPIEVNT_SD (1 << 5) 365*4882a593Smuzhiyun #define PSC_SPIEVNT_MD (1 << 4) 366*4882a593Smuzhiyun 367*4882a593Smuzhiyun /* Transmit register control. */ 368*4882a593Smuzhiyun #define PSC_SPITXRX_LC (1 << 29) 369*4882a593Smuzhiyun #define PSC_SPITXRX_SR (1 << 28) 370*4882a593Smuzhiyun 371*4882a593Smuzhiyun /* SMBus Config Register. */ 372*4882a593Smuzhiyun #define PSC_SMBCFG_RT_MASK (3 << 30) 373*4882a593Smuzhiyun #define PSC_SMBCFG_RT_FIFO1 (0 << 30) 374*4882a593Smuzhiyun #define PSC_SMBCFG_RT_FIFO2 (1 << 30) 375*4882a593Smuzhiyun #define PSC_SMBCFG_RT_FIFO4 (2 << 30) 376*4882a593Smuzhiyun #define PSC_SMBCFG_RT_FIFO8 (3 << 30) 377*4882a593Smuzhiyun 378*4882a593Smuzhiyun #define PSC_SMBCFG_TT_MASK (3 << 28) 379*4882a593Smuzhiyun #define PSC_SMBCFG_TT_FIFO1 (0 << 28) 380*4882a593Smuzhiyun #define PSC_SMBCFG_TT_FIFO2 (1 << 28) 381*4882a593Smuzhiyun #define PSC_SMBCFG_TT_FIFO4 (2 << 28) 382*4882a593Smuzhiyun #define PSC_SMBCFG_TT_FIFO8 (3 << 28) 383*4882a593Smuzhiyun 384*4882a593Smuzhiyun #define PSC_SMBCFG_DD_DISABLE (1 << 27) 385*4882a593Smuzhiyun #define PSC_SMBCFG_DE_ENABLE (1 << 26) 386*4882a593Smuzhiyun 387*4882a593Smuzhiyun #define PSC_SMBCFG_SET_DIV(x) (((x) & 0x03) << 13) 388*4882a593Smuzhiyun #define PSC_SMBCFG_DIV2 0 389*4882a593Smuzhiyun #define PSC_SMBCFG_DIV4 1 390*4882a593Smuzhiyun #define PSC_SMBCFG_DIV8 2 391*4882a593Smuzhiyun #define PSC_SMBCFG_DIV16 3 392*4882a593Smuzhiyun 393*4882a593Smuzhiyun #define PSC_SMBCFG_GCE (1 << 9) 394*4882a593Smuzhiyun #define PSC_SMBCFG_SFM (1 << 8) 395*4882a593Smuzhiyun 396*4882a593Smuzhiyun #define PSC_SMBCFG_SET_SLV(x) (((x) & 0x7f) << 1) 397*4882a593Smuzhiyun 398*4882a593Smuzhiyun /* SMBus Mask Register. */ 399*4882a593Smuzhiyun #define PSC_SMBMSK_DN (1 << 30) 400*4882a593Smuzhiyun #define PSC_SMBMSK_AN (1 << 29) 401*4882a593Smuzhiyun #define PSC_SMBMSK_AL (1 << 28) 402*4882a593Smuzhiyun #define PSC_SMBMSK_RR (1 << 13) 403*4882a593Smuzhiyun #define PSC_SMBMSK_RO (1 << 12) 404*4882a593Smuzhiyun #define PSC_SMBMSK_RU (1 << 11) 405*4882a593Smuzhiyun #define PSC_SMBMSK_TR (1 << 10) 406*4882a593Smuzhiyun #define PSC_SMBMSK_TO (1 << 9) 407*4882a593Smuzhiyun #define PSC_SMBMSK_TU (1 << 8) 408*4882a593Smuzhiyun #define PSC_SMBMSK_SD (1 << 5) 409*4882a593Smuzhiyun #define PSC_SMBMSK_MD (1 << 4) 410*4882a593Smuzhiyun #define PSC_SMBMSK_ALLMASK (PSC_SMBMSK_DN | PSC_SMBMSK_AN | \ 411*4882a593Smuzhiyun PSC_SMBMSK_AL | PSC_SMBMSK_RR | \ 412*4882a593Smuzhiyun PSC_SMBMSK_RO | PSC_SMBMSK_TO | \ 413*4882a593Smuzhiyun PSC_SMBMSK_TU | PSC_SMBMSK_SD | \ 414*4882a593Smuzhiyun PSC_SMBMSK_MD) 415*4882a593Smuzhiyun 416*4882a593Smuzhiyun /* SMBus Protocol Control Register. */ 417*4882a593Smuzhiyun #define PSC_SMBPCR_DC (1 << 2) 418*4882a593Smuzhiyun #define PSC_SMBPCR_MS (1 << 0) 419*4882a593Smuzhiyun 420*4882a593Smuzhiyun /* SMBus Status register (read only). */ 421*4882a593Smuzhiyun #define PSC_SMBSTAT_BB (1 << 28) 422*4882a593Smuzhiyun #define PSC_SMBSTAT_RF (1 << 13) 423*4882a593Smuzhiyun #define PSC_SMBSTAT_RE (1 << 12) 424*4882a593Smuzhiyun #define PSC_SMBSTAT_RR (1 << 11) 425*4882a593Smuzhiyun #define PSC_SMBSTAT_TF (1 << 10) 426*4882a593Smuzhiyun #define PSC_SMBSTAT_TE (1 << 9) 427*4882a593Smuzhiyun #define PSC_SMBSTAT_TR (1 << 8) 428*4882a593Smuzhiyun #define PSC_SMBSTAT_SB (1 << 5) 429*4882a593Smuzhiyun #define PSC_SMBSTAT_MB (1 << 4) 430*4882a593Smuzhiyun #define PSC_SMBSTAT_DI (1 << 2) 431*4882a593Smuzhiyun #define PSC_SMBSTAT_DR (1 << 1) 432*4882a593Smuzhiyun #define PSC_SMBSTAT_SR (1 << 0) 433*4882a593Smuzhiyun 434*4882a593Smuzhiyun /* SMBus Event Register. */ 435*4882a593Smuzhiyun #define PSC_SMBEVNT_DN (1 << 30) 436*4882a593Smuzhiyun #define PSC_SMBEVNT_AN (1 << 29) 437*4882a593Smuzhiyun #define PSC_SMBEVNT_AL (1 << 28) 438*4882a593Smuzhiyun #define PSC_SMBEVNT_RR (1 << 13) 439*4882a593Smuzhiyun #define PSC_SMBEVNT_RO (1 << 12) 440*4882a593Smuzhiyun #define PSC_SMBEVNT_RU (1 << 11) 441*4882a593Smuzhiyun #define PSC_SMBEVNT_TR (1 << 10) 442*4882a593Smuzhiyun #define PSC_SMBEVNT_TO (1 << 9) 443*4882a593Smuzhiyun #define PSC_SMBEVNT_TU (1 << 8) 444*4882a593Smuzhiyun #define PSC_SMBEVNT_SD (1 << 5) 445*4882a593Smuzhiyun #define PSC_SMBEVNT_MD (1 << 4) 446*4882a593Smuzhiyun #define PSC_SMBEVNT_ALLCLR (PSC_SMBEVNT_DN | PSC_SMBEVNT_AN | \ 447*4882a593Smuzhiyun PSC_SMBEVNT_AL | PSC_SMBEVNT_RR | \ 448*4882a593Smuzhiyun PSC_SMBEVNT_RO | PSC_SMBEVNT_TO | \ 449*4882a593Smuzhiyun PSC_SMBEVNT_TU | PSC_SMBEVNT_SD | \ 450*4882a593Smuzhiyun PSC_SMBEVNT_MD) 451*4882a593Smuzhiyun 452*4882a593Smuzhiyun /* Transmit register control. */ 453*4882a593Smuzhiyun #define PSC_SMBTXRX_RSR (1 << 28) 454*4882a593Smuzhiyun #define PSC_SMBTXRX_STP (1 << 29) 455*4882a593Smuzhiyun #define PSC_SMBTXRX_DATAMASK 0xff 456*4882a593Smuzhiyun 457*4882a593Smuzhiyun /* SMBus protocol timers register. */ 458*4882a593Smuzhiyun #define PSC_SMBTMR_SET_TH(x) (((x) & 0x03) << 30) 459*4882a593Smuzhiyun #define PSC_SMBTMR_SET_PS(x) (((x) & 0x1f) << 25) 460*4882a593Smuzhiyun #define PSC_SMBTMR_SET_PU(x) (((x) & 0x1f) << 20) 461*4882a593Smuzhiyun #define PSC_SMBTMR_SET_SH(x) (((x) & 0x1f) << 15) 462*4882a593Smuzhiyun #define PSC_SMBTMR_SET_SU(x) (((x) & 0x1f) << 10) 463*4882a593Smuzhiyun #define PSC_SMBTMR_SET_CL(x) (((x) & 0x1f) << 5) 464*4882a593Smuzhiyun #define PSC_SMBTMR_SET_CH(x) (((x) & 0x1f) << 0) 465*4882a593Smuzhiyun 466*4882a593Smuzhiyun #endif /* _AU1000_PSC_H_ */ 467