1 /* 2 * Copyright (C) 2012 Russell King 3 * Rewritten from the dovefb driver, and Armada510 manuals. 4 * 5 * This program is free software; you can redistribute it and/or modify 6 * it under the terms of the GNU General Public License version 2 as 7 * published by the Free Software Foundation. 8 */ 9 #ifndef ARMADA_HW_H 10 #define ARMADA_HW_H 11 12 /* 13 * Note: the following registers are written from IRQ context: 14 * LCD_SPU_V_PORCH, LCD_SPU_ADV_REG, LCD_SPUT_V_H_TOTAL 15 * LCD_SPU_DMA_START_ADDR_[YUV][01], LCD_SPU_DMA_PITCH_YC, 16 * LCD_SPU_DMA_PITCH_UV, LCD_SPU_DMA_OVSA_HPXL_VLN, 17 * LCD_SPU_DMA_HPXL_VLN, LCD_SPU_DZM_HPXL_VLN, LCD_SPU_DMA_CTRL0 18 */ 19 enum { 20 LCD_SPU_ADV_REG = 0x0084, /* Armada 510 */ 21 LCD_SPU_DMA_START_ADDR_Y0 = 0x00c0, 22 LCD_SPU_DMA_START_ADDR_U0 = 0x00c4, 23 LCD_SPU_DMA_START_ADDR_V0 = 0x00c8, 24 LCD_CFG_DMA_START_ADDR_0 = 0x00cc, 25 LCD_SPU_DMA_START_ADDR_Y1 = 0x00d0, 26 LCD_SPU_DMA_START_ADDR_U1 = 0x00d4, 27 LCD_SPU_DMA_START_ADDR_V1 = 0x00d8, 28 LCD_CFG_DMA_START_ADDR_1 = 0x00dc, 29 LCD_SPU_DMA_PITCH_YC = 0x00e0, 30 LCD_SPU_DMA_PITCH_UV = 0x00e4, 31 LCD_SPU_DMA_OVSA_HPXL_VLN = 0x00e8, 32 LCD_SPU_DMA_HPXL_VLN = 0x00ec, 33 LCD_SPU_DZM_HPXL_VLN = 0x00f0, 34 LCD_CFG_GRA_START_ADDR0 = 0x00f4, 35 LCD_CFG_GRA_START_ADDR1 = 0x00f8, 36 LCD_CFG_GRA_PITCH = 0x00fc, 37 LCD_SPU_GRA_OVSA_HPXL_VLN = 0x0100, 38 LCD_SPU_GRA_HPXL_VLN = 0x0104, 39 LCD_SPU_GZM_HPXL_VLN = 0x0108, 40 LCD_SPU_HWC_OVSA_HPXL_VLN = 0x010c, 41 LCD_SPU_HWC_HPXL_VLN = 0x0110, 42 LCD_SPUT_V_H_TOTAL = 0x0114, 43 LCD_SPU_V_H_ACTIVE = 0x0118, 44 LCD_SPU_H_PORCH = 0x011c, 45 LCD_SPU_V_PORCH = 0x0120, 46 LCD_SPU_BLANKCOLOR = 0x0124, 47 LCD_SPU_ALPHA_COLOR1 = 0x0128, 48 LCD_SPU_ALPHA_COLOR2 = 0x012c, 49 LCD_SPU_COLORKEY_Y = 0x0130, 50 LCD_SPU_COLORKEY_U = 0x0134, 51 LCD_SPU_COLORKEY_V = 0x0138, 52 LCD_CFG_RDREG4F = 0x013c, /* Armada 510 */ 53 LCD_SPU_SPI_RXDATA = 0x0140, 54 LCD_SPU_ISA_RXDATA = 0x0144, 55 LCD_SPU_HWC_RDDAT = 0x0158, 56 LCD_SPU_GAMMA_RDDAT = 0x015c, 57 LCD_SPU_PALETTE_RDDAT = 0x0160, 58 LCD_SPU_IOPAD_IN = 0x0178, 59 LCD_CFG_RDREG5F = 0x017c, 60 LCD_SPU_SPI_CTRL = 0x0180, 61 LCD_SPU_SPI_TXDATA = 0x0184, 62 LCD_SPU_SMPN_CTRL = 0x0188, 63 LCD_SPU_DMA_CTRL0 = 0x0190, 64 LCD_SPU_DMA_CTRL1 = 0x0194, 65 LCD_SPU_SRAM_CTRL = 0x0198, 66 LCD_SPU_SRAM_WRDAT = 0x019c, 67 LCD_SPU_SRAM_PARA0 = 0x01a0, /* Armada 510 */ 68 LCD_SPU_SRAM_PARA1 = 0x01a4, 69 LCD_CFG_SCLK_DIV = 0x01a8, 70 LCD_SPU_CONTRAST = 0x01ac, 71 LCD_SPU_SATURATION = 0x01b0, 72 LCD_SPU_CBSH_HUE = 0x01b4, 73 LCD_SPU_DUMB_CTRL = 0x01b8, 74 LCD_SPU_IOPAD_CONTROL = 0x01bc, 75 LCD_SPU_IRQ_ENA = 0x01c0, 76 LCD_SPU_IRQ_ISR = 0x01c4, 77 }; 78 79 /* For LCD_SPU_ADV_REG */ 80 enum { 81 ADV_VSYNC_L_OFF = 0xfff << 20, 82 ADV_GRACOLORKEY = 1 << 19, 83 ADV_VIDCOLORKEY = 1 << 18, 84 ADV_HWC32BLEND = 1 << 15, 85 ADV_HWC32ARGB = 1 << 14, 86 ADV_HWC32ENABLE = 1 << 13, 87 ADV_VSYNCOFFEN = 1 << 12, 88 ADV_VSYNC_H_OFF = 0xfff << 0, 89 }; 90 91 /* LCD_CFG_RDREG4F - Armada 510 only */ 92 enum { 93 CFG_SRAM_WAIT = BIT(11), 94 CFG_SMPN_FASTTX = BIT(10), 95 CFG_DMA_ARB = BIT(9), 96 CFG_DMA_WM_EN = BIT(8), 97 CFG_DMA_WM_MASK = 0xff, 98 #define CFG_DMA_WM(x) ((x) & CFG_DMA_WM_MASK) 99 }; 100 101 enum { 102 CFG_565 = 0, 103 CFG_1555 = 1, 104 CFG_888PACK = 2, 105 CFG_X888 = 3, 106 CFG_8888 = 4, 107 CFG_422PACK = 5, 108 CFG_422 = 6, 109 CFG_420 = 7, 110 CFG_PSEUDO4 = 9, 111 CFG_PSEUDO8 = 10, 112 CFG_SWAPRB = 1 << 4, 113 CFG_SWAPUV = 1 << 3, 114 CFG_SWAPYU = 1 << 2, 115 CFG_YUV2RGB = 1 << 1, 116 }; 117 118 /* For LCD_SPU_DMA_CTRL0 */ 119 enum { 120 CFG_NOBLENDING = 1 << 31, 121 CFG_GAMMA_ENA = 1 << 30, 122 CFG_CBSH_ENA = 1 << 29, 123 CFG_PALETTE_ENA = 1 << 28, 124 CFG_ARBFAST_ENA = 1 << 27, 125 CFG_HWC_1BITMOD = 1 << 26, 126 CFG_HWC_1BITENA = 1 << 25, 127 CFG_HWC_ENA = 1 << 24, 128 CFG_DMAFORMAT = 0xf << 20, 129 #define CFG_DMA_FMT(x) ((x) << 20) 130 CFG_GRAFORMAT = 0xf << 16, 131 #define CFG_GRA_FMT(x) ((x) << 16) 132 #define CFG_GRA_MOD(x) ((x) << 8) 133 CFG_GRA_FTOGGLE = 1 << 15, 134 CFG_GRA_HSMOOTH = 1 << 14, 135 CFG_GRA_TSTMODE = 1 << 13, 136 CFG_GRA_ENA = 1 << 8, 137 #define CFG_DMA_MOD(x) ((x) << 0) 138 CFG_DMA_FTOGGLE = 1 << 7, 139 CFG_DMA_HSMOOTH = 1 << 6, 140 CFG_DMA_TSTMODE = 1 << 5, 141 CFG_DMA_ENA = 1 << 0, 142 }; 143 144 enum { 145 CKMODE_DISABLE = 0, 146 CKMODE_Y = 1, 147 CKMODE_U = 2, 148 CKMODE_RGB = 3, 149 CKMODE_V = 4, 150 CKMODE_R = 5, 151 CKMODE_G = 6, 152 CKMODE_B = 7, 153 }; 154 155 /* For LCD_SPU_DMA_CTRL1 */ 156 enum { 157 CFG_FRAME_TRIG = 1 << 31, 158 CFG_VSYNC_INV = 1 << 27, 159 CFG_CKMODE_MASK = 0x7 << 24, 160 #define CFG_CKMODE(x) ((x) << 24) 161 CFG_CARRY = 1 << 23, 162 CFG_GATED_CLK = 1 << 21, 163 CFG_PWRDN_ENA = 1 << 20, 164 CFG_DSCALE_MASK = 0x3 << 18, 165 CFG_DSCALE_NONE = 0x0 << 18, 166 CFG_DSCALE_HALF = 0x1 << 18, 167 CFG_DSCALE_QUAR = 0x2 << 18, 168 CFG_ALPHAM_MASK = 0x3 << 16, 169 CFG_ALPHAM_VIDEO = 0x0 << 16, 170 CFG_ALPHAM_GRA = 0x1 << 16, 171 CFG_ALPHAM_CFG = 0x2 << 16, 172 CFG_ALPHA_MASK = 0xff << 8, 173 #define CFG_ALPHA(x) ((x) << 8) 174 CFG_PIXCMD_MASK = 0xff, 175 }; 176 177 /* For LCD_SPU_SRAM_CTRL */ 178 enum { 179 SRAM_READ = 0 << 14, 180 SRAM_WRITE = 2 << 14, 181 SRAM_INIT = 3 << 14, 182 SRAM_GAMMA_YR = 0x0 << 8, 183 SRAM_GAMMA_UG = 0x1 << 8, 184 SRAM_GAMMA_VB = 0x2 << 8, 185 SRAM_PALETTE = 0x3 << 8, 186 SRAM_HWC32_RAM1 = 0xc << 8, 187 SRAM_HWC32_RAM2 = 0xd << 8, 188 SRAM_HWC32_RAMR = SRAM_HWC32_RAM1, 189 SRAM_HWC32_RAMG = SRAM_HWC32_RAM2, 190 SRAM_HWC32_RAMB = 0xe << 8, 191 SRAM_HWC32_TRAN = 0xf << 8, 192 SRAM_HWC = 0xf << 8, 193 }; 194 195 /* For LCD_SPU_SRAM_PARA1 */ 196 enum { 197 CFG_CSB_256x32 = 1 << 15, /* cursor */ 198 CFG_CSB_256x24 = 1 << 14, /* palette */ 199 CFG_CSB_256x8 = 1 << 13, /* gamma */ 200 CFG_PDWN1920x32 = 1 << 8, /* Armada 510: power down vscale ram */ 201 CFG_PDWN256x32 = 1 << 7, /* power down cursor */ 202 CFG_PDWN256x24 = 1 << 6, /* power down palette */ 203 CFG_PDWN256x8 = 1 << 5, /* power down gamma */ 204 CFG_PDWNHWC = 1 << 4, /* Armada 510: power down all hwc ram */ 205 CFG_PDWN32x32 = 1 << 3, /* power down slave->smart ram */ 206 CFG_PDWN16x66 = 1 << 2, /* power down UV fifo */ 207 CFG_PDWN32x66 = 1 << 1, /* power down Y fifo */ 208 CFG_PDWN64x66 = 1 << 0, /* power down graphic fifo */ 209 }; 210 211 /* For LCD_CFG_SCLK_DIV */ 212 enum { 213 /* Armada 510 */ 214 SCLK_510_AXI = 0x0 << 30, 215 SCLK_510_EXTCLK0 = 0x1 << 30, 216 SCLK_510_PLL = 0x2 << 30, 217 SCLK_510_EXTCLK1 = 0x3 << 30, 218 SCLK_510_DIV_CHANGE = 1 << 29, 219 SCLK_510_FRAC_DIV_MASK = 0xfff << 16, 220 SCLK_510_INT_DIV_MASK = 0xffff << 0, 221 222 /* Armada 16x */ 223 SCLK_16X_AHB = 0x0 << 28, 224 SCLK_16X_PCLK = 0x1 << 28, 225 SCLK_16X_AXI = 0x4 << 28, 226 SCLK_16X_PLL = 0x8 << 28, 227 SCLK_16X_FRAC_DIV_MASK = 0xfff << 16, 228 SCLK_16X_INT_DIV_MASK = 0xffff << 0, 229 }; 230 231 /* For LCD_SPU_DUMB_CTRL */ 232 enum { 233 DUMB16_RGB565_0 = 0x0 << 28, 234 DUMB16_RGB565_1 = 0x1 << 28, 235 DUMB18_RGB666_0 = 0x2 << 28, 236 DUMB18_RGB666_1 = 0x3 << 28, 237 DUMB12_RGB444_0 = 0x4 << 28, 238 DUMB12_RGB444_1 = 0x5 << 28, 239 DUMB24_RGB888_0 = 0x6 << 28, 240 DUMB_BLANK = 0x7 << 28, 241 DUMB_MASK = 0xf << 28, 242 CFG_BIAS_OUT = 1 << 8, 243 CFG_REV_RGB = 1 << 7, 244 CFG_INV_CBLANK = 1 << 6, 245 CFG_INV_CSYNC = 1 << 5, /* Normally active high */ 246 CFG_INV_HENA = 1 << 4, 247 CFG_INV_VSYNC = 1 << 3, /* Normally active high */ 248 CFG_INV_HSYNC = 1 << 2, /* Normally active high */ 249 CFG_INV_PCLK = 1 << 1, 250 CFG_DUMB_ENA = 1 << 0, 251 }; 252 253 /* For LCD_SPU_IOPAD_CONTROL */ 254 enum { 255 CFG_VSCALE_LN_EN = 3 << 18, 256 CFG_GRA_VM_ENA = 1 << 15, 257 CFG_DMA_VM_ENA = 1 << 13, 258 CFG_CMD_VM_ENA = 1 << 11, 259 CFG_CSC_MASK = 3 << 8, 260 CFG_CSC_YUV_CCIR709 = 1 << 9, 261 CFG_CSC_YUV_CCIR601 = 0 << 9, 262 CFG_CSC_RGB_STUDIO = 1 << 8, 263 CFG_CSC_RGB_COMPUTER = 0 << 8, 264 CFG_IOPAD_MASK = 0xf << 0, 265 CFG_IOPAD_DUMB24 = 0x0 << 0, 266 CFG_IOPAD_DUMB18SPI = 0x1 << 0, 267 CFG_IOPAD_DUMB18GPIO = 0x2 << 0, 268 CFG_IOPAD_DUMB16SPI = 0x3 << 0, 269 CFG_IOPAD_DUMB16GPIO = 0x4 << 0, 270 CFG_IOPAD_DUMB12GPIO = 0x5 << 0, 271 CFG_IOPAD_SMART18 = 0x6 << 0, 272 CFG_IOPAD_SMART16 = 0x7 << 0, 273 CFG_IOPAD_SMART8 = 0x8 << 0, 274 }; 275 276 #define IOPAD_DUMB24 0x0 277 278 /* For LCD_SPU_IRQ_ENA */ 279 enum { 280 DMA_FRAME_IRQ0_ENA = 1 << 31, 281 DMA_FRAME_IRQ1_ENA = 1 << 30, 282 DMA_FRAME_IRQ_ENA = DMA_FRAME_IRQ0_ENA | DMA_FRAME_IRQ1_ENA, 283 DMA_FF_UNDERFLOW_ENA = 1 << 29, 284 GRA_FRAME_IRQ0_ENA = 1 << 27, 285 GRA_FRAME_IRQ1_ENA = 1 << 26, 286 GRA_FRAME_IRQ_ENA = GRA_FRAME_IRQ0_ENA | GRA_FRAME_IRQ1_ENA, 287 GRA_FF_UNDERFLOW_ENA = 1 << 25, 288 VSYNC_IRQ_ENA = 1 << 23, 289 DUMB_FRAMEDONE_ENA = 1 << 22, 290 TWC_FRAMEDONE_ENA = 1 << 21, 291 HWC_FRAMEDONE_ENA = 1 << 20, 292 SLV_IRQ_ENA = 1 << 19, 293 SPI_IRQ_ENA = 1 << 18, 294 PWRDN_IRQ_ENA = 1 << 17, 295 ERR_IRQ_ENA = 1 << 16, 296 CLEAN_SPU_IRQ_ISR = 0xffff, 297 }; 298 299 /* For LCD_SPU_IRQ_ISR */ 300 enum { 301 DMA_FRAME_IRQ0 = 1 << 31, 302 DMA_FRAME_IRQ1 = 1 << 30, 303 DMA_FRAME_IRQ = DMA_FRAME_IRQ0 | DMA_FRAME_IRQ1, 304 DMA_FF_UNDERFLOW = 1 << 29, 305 GRA_FRAME_IRQ0 = 1 << 27, 306 GRA_FRAME_IRQ1 = 1 << 26, 307 GRA_FRAME_IRQ = GRA_FRAME_IRQ0 | GRA_FRAME_IRQ1, 308 GRA_FF_UNDERFLOW = 1 << 25, 309 VSYNC_IRQ = 1 << 23, 310 DUMB_FRAMEDONE = 1 << 22, 311 TWC_FRAMEDONE = 1 << 21, 312 HWC_FRAMEDONE = 1 << 20, 313 SLV_IRQ = 1 << 19, 314 SPI_IRQ = 1 << 18, 315 PWRDN_IRQ = 1 << 17, 316 ERR_IRQ = 1 << 16, 317 DMA_FRAME_IRQ0_LEVEL = 1 << 15, 318 DMA_FRAME_IRQ1_LEVEL = 1 << 14, 319 DMA_FRAME_CNT_ISR = 3 << 12, 320 GRA_FRAME_IRQ0_LEVEL = 1 << 11, 321 GRA_FRAME_IRQ1_LEVEL = 1 << 10, 322 GRA_FRAME_CNT_ISR = 3 << 8, 323 VSYNC_IRQ_LEVEL = 1 << 7, 324 DUMB_FRAMEDONE_LEVEL = 1 << 6, 325 TWC_FRAMEDONE_LEVEL = 1 << 5, 326 HWC_FRAMEDONE_LEVEL = 1 << 4, 327 SLV_FF_EMPTY = 1 << 3, 328 DMA_FF_ALLEMPTY = 1 << 2, 329 GRA_FF_ALLEMPTY = 1 << 1, 330 PWRDN_IRQ_LEVEL = 1 << 0, 331 }; 332 333 #endif 334