123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319 |
- /*
- * Copyright (C) 2012 Russell King
- * Rewritten from the dovefb driver, and Armada510 manuals.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- */
- #ifndef ARMADA_HW_H
- #define ARMADA_HW_H
- /*
- * Note: the following registers are written from IRQ context:
- * LCD_SPU_V_PORCH, LCD_SPU_ADV_REG, LCD_SPUT_V_H_TOTAL
- * LCD_SPU_DMA_START_ADDR_[YUV][01], LCD_SPU_DMA_PITCH_YC,
- * LCD_SPU_DMA_PITCH_UV, LCD_SPU_DMA_OVSA_HPXL_VLN,
- * LCD_SPU_DMA_HPXL_VLN, LCD_SPU_DZM_HPXL_VLN, LCD_SPU_DMA_CTRL0
- */
- enum {
- LCD_SPU_ADV_REG = 0x0084, /* Armada 510 */
- LCD_SPU_DMA_START_ADDR_Y0 = 0x00c0,
- LCD_SPU_DMA_START_ADDR_U0 = 0x00c4,
- LCD_SPU_DMA_START_ADDR_V0 = 0x00c8,
- LCD_CFG_DMA_START_ADDR_0 = 0x00cc,
- LCD_SPU_DMA_START_ADDR_Y1 = 0x00d0,
- LCD_SPU_DMA_START_ADDR_U1 = 0x00d4,
- LCD_SPU_DMA_START_ADDR_V1 = 0x00d8,
- LCD_CFG_DMA_START_ADDR_1 = 0x00dc,
- LCD_SPU_DMA_PITCH_YC = 0x00e0,
- LCD_SPU_DMA_PITCH_UV = 0x00e4,
- LCD_SPU_DMA_OVSA_HPXL_VLN = 0x00e8,
- LCD_SPU_DMA_HPXL_VLN = 0x00ec,
- LCD_SPU_DZM_HPXL_VLN = 0x00f0,
- LCD_CFG_GRA_START_ADDR0 = 0x00f4,
- LCD_CFG_GRA_START_ADDR1 = 0x00f8,
- LCD_CFG_GRA_PITCH = 0x00fc,
- LCD_SPU_GRA_OVSA_HPXL_VLN = 0x0100,
- LCD_SPU_GRA_HPXL_VLN = 0x0104,
- LCD_SPU_GZM_HPXL_VLN = 0x0108,
- LCD_SPU_HWC_OVSA_HPXL_VLN = 0x010c,
- LCD_SPU_HWC_HPXL_VLN = 0x0110,
- LCD_SPUT_V_H_TOTAL = 0x0114,
- LCD_SPU_V_H_ACTIVE = 0x0118,
- LCD_SPU_H_PORCH = 0x011c,
- LCD_SPU_V_PORCH = 0x0120,
- LCD_SPU_BLANKCOLOR = 0x0124,
- LCD_SPU_ALPHA_COLOR1 = 0x0128,
- LCD_SPU_ALPHA_COLOR2 = 0x012c,
- LCD_SPU_COLORKEY_Y = 0x0130,
- LCD_SPU_COLORKEY_U = 0x0134,
- LCD_SPU_COLORKEY_V = 0x0138,
- LCD_CFG_RDREG4F = 0x013c, /* Armada 510 */
- LCD_SPU_SPI_RXDATA = 0x0140,
- LCD_SPU_ISA_RXDATA = 0x0144,
- LCD_SPU_HWC_RDDAT = 0x0158,
- LCD_SPU_GAMMA_RDDAT = 0x015c,
- LCD_SPU_PALETTE_RDDAT = 0x0160,
- LCD_SPU_IOPAD_IN = 0x0178,
- LCD_CFG_RDREG5F = 0x017c,
- LCD_SPU_SPI_CTRL = 0x0180,
- LCD_SPU_SPI_TXDATA = 0x0184,
- LCD_SPU_SMPN_CTRL = 0x0188,
- LCD_SPU_DMA_CTRL0 = 0x0190,
- LCD_SPU_DMA_CTRL1 = 0x0194,
- LCD_SPU_SRAM_CTRL = 0x0198,
- LCD_SPU_SRAM_WRDAT = 0x019c,
- LCD_SPU_SRAM_PARA0 = 0x01a0, /* Armada 510 */
- LCD_SPU_SRAM_PARA1 = 0x01a4,
- LCD_CFG_SCLK_DIV = 0x01a8,
- LCD_SPU_CONTRAST = 0x01ac,
- LCD_SPU_SATURATION = 0x01b0,
- LCD_SPU_CBSH_HUE = 0x01b4,
- LCD_SPU_DUMB_CTRL = 0x01b8,
- LCD_SPU_IOPAD_CONTROL = 0x01bc,
- LCD_SPU_IRQ_ENA = 0x01c0,
- LCD_SPU_IRQ_ISR = 0x01c4,
- };
- /* For LCD_SPU_ADV_REG */
- enum {
- ADV_VSYNC_L_OFF = 0xfff << 20,
- ADV_GRACOLORKEY = 1 << 19,
- ADV_VIDCOLORKEY = 1 << 18,
- ADV_HWC32BLEND = 1 << 15,
- ADV_HWC32ARGB = 1 << 14,
- ADV_HWC32ENABLE = 1 << 13,
- ADV_VSYNCOFFEN = 1 << 12,
- ADV_VSYNC_H_OFF = 0xfff << 0,
- };
- enum {
- CFG_565 = 0,
- CFG_1555 = 1,
- CFG_888PACK = 2,
- CFG_X888 = 3,
- CFG_8888 = 4,
- CFG_422PACK = 5,
- CFG_422 = 6,
- CFG_420 = 7,
- CFG_PSEUDO4 = 9,
- CFG_PSEUDO8 = 10,
- CFG_SWAPRB = 1 << 4,
- CFG_SWAPUV = 1 << 3,
- CFG_SWAPYU = 1 << 2,
- CFG_YUV2RGB = 1 << 1,
- };
- /* For LCD_SPU_DMA_CTRL0 */
- enum {
- CFG_NOBLENDING = 1 << 31,
- CFG_GAMMA_ENA = 1 << 30,
- CFG_CBSH_ENA = 1 << 29,
- CFG_PALETTE_ENA = 1 << 28,
- CFG_ARBFAST_ENA = 1 << 27,
- CFG_HWC_1BITMOD = 1 << 26,
- CFG_HWC_1BITENA = 1 << 25,
- CFG_HWC_ENA = 1 << 24,
- CFG_DMAFORMAT = 0xf << 20,
- #define CFG_DMA_FMT(x) ((x) << 20)
- CFG_GRAFORMAT = 0xf << 16,
- #define CFG_GRA_FMT(x) ((x) << 16)
- #define CFG_GRA_MOD(x) ((x) << 8)
- CFG_GRA_FTOGGLE = 1 << 15,
- CFG_GRA_HSMOOTH = 1 << 14,
- CFG_GRA_TSTMODE = 1 << 13,
- CFG_GRA_ENA = 1 << 8,
- #define CFG_DMA_MOD(x) ((x) << 0)
- CFG_DMA_FTOGGLE = 1 << 7,
- CFG_DMA_HSMOOTH = 1 << 6,
- CFG_DMA_TSTMODE = 1 << 5,
- CFG_DMA_ENA = 1 << 0,
- };
- enum {
- CKMODE_DISABLE = 0,
- CKMODE_Y = 1,
- CKMODE_U = 2,
- CKMODE_RGB = 3,
- CKMODE_V = 4,
- CKMODE_R = 5,
- CKMODE_G = 6,
- CKMODE_B = 7,
- };
- /* For LCD_SPU_DMA_CTRL1 */
- enum {
- CFG_FRAME_TRIG = 1 << 31,
- CFG_VSYNC_INV = 1 << 27,
- CFG_CKMODE_MASK = 0x7 << 24,
- #define CFG_CKMODE(x) ((x) << 24)
- CFG_CARRY = 1 << 23,
- CFG_GATED_CLK = 1 << 21,
- CFG_PWRDN_ENA = 1 << 20,
- CFG_DSCALE_MASK = 0x3 << 18,
- CFG_DSCALE_NONE = 0x0 << 18,
- CFG_DSCALE_HALF = 0x1 << 18,
- CFG_DSCALE_QUAR = 0x2 << 18,
- CFG_ALPHAM_MASK = 0x3 << 16,
- CFG_ALPHAM_VIDEO = 0x0 << 16,
- CFG_ALPHAM_GRA = 0x1 << 16,
- CFG_ALPHAM_CFG = 0x2 << 16,
- CFG_ALPHA_MASK = 0xff << 8,
- #define CFG_ALPHA(x) ((x) << 8)
- CFG_PIXCMD_MASK = 0xff,
- };
- /* For LCD_SPU_SRAM_CTRL */
- enum {
- SRAM_READ = 0 << 14,
- SRAM_WRITE = 2 << 14,
- SRAM_INIT = 3 << 14,
- SRAM_HWC32_RAM1 = 0xc << 8,
- SRAM_HWC32_RAM2 = 0xd << 8,
- SRAM_HWC32_RAMR = SRAM_HWC32_RAM1,
- SRAM_HWC32_RAMG = SRAM_HWC32_RAM2,
- SRAM_HWC32_RAMB = 0xe << 8,
- SRAM_HWC32_TRAN = 0xf << 8,
- SRAM_HWC = 0xf << 8,
- };
- /* For LCD_SPU_SRAM_PARA1 */
- enum {
- CFG_CSB_256x32 = 1 << 15, /* cursor */
- CFG_CSB_256x24 = 1 << 14, /* palette */
- CFG_CSB_256x8 = 1 << 13, /* gamma */
- CFG_PDWN1920x32 = 1 << 8, /* Armada 510: power down vscale ram */
- CFG_PDWN256x32 = 1 << 7, /* power down cursor */
- CFG_PDWN256x24 = 1 << 6, /* power down palette */
- CFG_PDWN256x8 = 1 << 5, /* power down gamma */
- CFG_PDWNHWC = 1 << 4, /* Armada 510: power down all hwc ram */
- CFG_PDWN32x32 = 1 << 3, /* power down slave->smart ram */
- CFG_PDWN16x66 = 1 << 2, /* power down UV fifo */
- CFG_PDWN32x66 = 1 << 1, /* power down Y fifo */
- CFG_PDWN64x66 = 1 << 0, /* power down graphic fifo */
- };
- /* For LCD_CFG_SCLK_DIV */
- enum {
- /* Armada 510 */
- SCLK_510_AXI = 0x0 << 30,
- SCLK_510_EXTCLK0 = 0x1 << 30,
- SCLK_510_PLL = 0x2 << 30,
- SCLK_510_EXTCLK1 = 0x3 << 30,
- SCLK_510_DIV_CHANGE = 1 << 29,
- SCLK_510_FRAC_DIV_MASK = 0xfff << 16,
- SCLK_510_INT_DIV_MASK = 0xffff << 0,
- /* Armada 16x */
- SCLK_16X_AHB = 0x0 << 28,
- SCLK_16X_PCLK = 0x1 << 28,
- SCLK_16X_AXI = 0x4 << 28,
- SCLK_16X_PLL = 0x8 << 28,
- SCLK_16X_FRAC_DIV_MASK = 0xfff << 16,
- SCLK_16X_INT_DIV_MASK = 0xffff << 0,
- };
- /* For LCD_SPU_DUMB_CTRL */
- enum {
- DUMB16_RGB565_0 = 0x0 << 28,
- DUMB16_RGB565_1 = 0x1 << 28,
- DUMB18_RGB666_0 = 0x2 << 28,
- DUMB18_RGB666_1 = 0x3 << 28,
- DUMB12_RGB444_0 = 0x4 << 28,
- DUMB12_RGB444_1 = 0x5 << 28,
- DUMB24_RGB888_0 = 0x6 << 28,
- DUMB_BLANK = 0x7 << 28,
- DUMB_MASK = 0xf << 28,
- CFG_BIAS_OUT = 1 << 8,
- CFG_REV_RGB = 1 << 7,
- CFG_INV_CBLANK = 1 << 6,
- CFG_INV_CSYNC = 1 << 5, /* Normally active high */
- CFG_INV_HENA = 1 << 4,
- CFG_INV_VSYNC = 1 << 3, /* Normally active high */
- CFG_INV_HSYNC = 1 << 2, /* Normally active high */
- CFG_INV_PCLK = 1 << 1,
- CFG_DUMB_ENA = 1 << 0,
- };
- /* For LCD_SPU_IOPAD_CONTROL */
- enum {
- CFG_VSCALE_LN_EN = 3 << 18,
- CFG_GRA_VM_ENA = 1 << 15,
- CFG_DMA_VM_ENA = 1 << 13,
- CFG_CMD_VM_ENA = 1 << 11,
- CFG_CSC_MASK = 3 << 8,
- CFG_CSC_YUV_CCIR709 = 1 << 9,
- CFG_CSC_YUV_CCIR601 = 0 << 9,
- CFG_CSC_RGB_STUDIO = 1 << 8,
- CFG_CSC_RGB_COMPUTER = 0 << 8,
- CFG_IOPAD_MASK = 0xf << 0,
- CFG_IOPAD_DUMB24 = 0x0 << 0,
- CFG_IOPAD_DUMB18SPI = 0x1 << 0,
- CFG_IOPAD_DUMB18GPIO = 0x2 << 0,
- CFG_IOPAD_DUMB16SPI = 0x3 << 0,
- CFG_IOPAD_DUMB16GPIO = 0x4 << 0,
- CFG_IOPAD_DUMB12GPIO = 0x5 << 0,
- CFG_IOPAD_SMART18 = 0x6 << 0,
- CFG_IOPAD_SMART16 = 0x7 << 0,
- CFG_IOPAD_SMART8 = 0x8 << 0,
- };
- #define IOPAD_DUMB24 0x0
- /* For LCD_SPU_IRQ_ENA */
- enum {
- DMA_FRAME_IRQ0_ENA = 1 << 31,
- DMA_FRAME_IRQ1_ENA = 1 << 30,
- DMA_FRAME_IRQ_ENA = DMA_FRAME_IRQ0_ENA | DMA_FRAME_IRQ1_ENA,
- DMA_FF_UNDERFLOW_ENA = 1 << 29,
- GRA_FRAME_IRQ0_ENA = 1 << 27,
- GRA_FRAME_IRQ1_ENA = 1 << 26,
- GRA_FRAME_IRQ_ENA = GRA_FRAME_IRQ0_ENA | GRA_FRAME_IRQ1_ENA,
- GRA_FF_UNDERFLOW_ENA = 1 << 25,
- VSYNC_IRQ_ENA = 1 << 23,
- DUMB_FRAMEDONE_ENA = 1 << 22,
- TWC_FRAMEDONE_ENA = 1 << 21,
- HWC_FRAMEDONE_ENA = 1 << 20,
- SLV_IRQ_ENA = 1 << 19,
- SPI_IRQ_ENA = 1 << 18,
- PWRDN_IRQ_ENA = 1 << 17,
- ERR_IRQ_ENA = 1 << 16,
- CLEAN_SPU_IRQ_ISR = 0xffff,
- };
- /* For LCD_SPU_IRQ_ISR */
- enum {
- DMA_FRAME_IRQ0 = 1 << 31,
- DMA_FRAME_IRQ1 = 1 << 30,
- DMA_FRAME_IRQ = DMA_FRAME_IRQ0 | DMA_FRAME_IRQ1,
- DMA_FF_UNDERFLOW = 1 << 29,
- GRA_FRAME_IRQ0 = 1 << 27,
- GRA_FRAME_IRQ1 = 1 << 26,
- GRA_FRAME_IRQ = GRA_FRAME_IRQ0 | GRA_FRAME_IRQ1,
- GRA_FF_UNDERFLOW = 1 << 25,
- VSYNC_IRQ = 1 << 23,
- DUMB_FRAMEDONE = 1 << 22,
- TWC_FRAMEDONE = 1 << 21,
- HWC_FRAMEDONE = 1 << 20,
- SLV_IRQ = 1 << 19,
- SPI_IRQ = 1 << 18,
- PWRDN_IRQ = 1 << 17,
- ERR_IRQ = 1 << 16,
- DMA_FRAME_IRQ0_LEVEL = 1 << 15,
- DMA_FRAME_IRQ1_LEVEL = 1 << 14,
- DMA_FRAME_CNT_ISR = 3 << 12,
- GRA_FRAME_IRQ0_LEVEL = 1 << 11,
- GRA_FRAME_IRQ1_LEVEL = 1 << 10,
- GRA_FRAME_CNT_ISR = 3 << 8,
- VSYNC_IRQ_LEVEL = 1 << 7,
- DUMB_FRAMEDONE_LEVEL = 1 << 6,
- TWC_FRAMEDONE_LEVEL = 1 << 5,
- HWC_FRAMEDONE_LEVEL = 1 << 4,
- SLV_FF_EMPTY = 1 << 3,
- DMA_FF_ALLEMPTY = 1 << 2,
- GRA_FF_ALLEMPTY = 1 << 1,
- PWRDN_IRQ_LEVEL = 1 << 0,
- };
- #endif
|