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