/* SPDX-License-Identifier: GPL-2.0-only */
/*
* Copyright (C) 2012 Russell King
* Rewritten from the dovefb driver, and Armada510 manuals.
*/
#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 = 0 x0084, /* Armada 510 */
LCD_SPU_DMA_START_ADDR_Y0 = 0 x00c0,
LCD_SPU_DMA_START_ADDR_U0 = 0 x00c4,
LCD_SPU_DMA_START_ADDR_V0 = 0 x00c8,
LCD_CFG_DMA_START_ADDR_0 = 0 x00cc,
LCD_SPU_DMA_START_ADDR_Y1 = 0 x00d0,
LCD_SPU_DMA_START_ADDR_U1 = 0 x00d4,
LCD_SPU_DMA_START_ADDR_V1 = 0 x00d8,
LCD_CFG_DMA_START_ADDR_1 = 0 x00dc,
LCD_SPU_DMA_PITCH_YC = 0 x00e0,
LCD_SPU_DMA_PITCH_UV = 0 x00e4,
LCD_SPU_DMA_OVSA_HPXL_VLN = 0 x00e8,
LCD_SPU_DMA_HPXL_VLN = 0 x00ec,
LCD_SPU_DZM_HPXL_VLN = 0 x00f0,
LCD_CFG_GRA_START_ADDR0 = 0 x00f4,
LCD_CFG_GRA_START_ADDR1 = 0 x00f8,
LCD_CFG_GRA_PITCH = 0 x00fc,
LCD_SPU_GRA_OVSA_HPXL_VLN = 0 x0100,
LCD_SPU_GRA_HPXL_VLN = 0 x0104,
LCD_SPU_GZM_HPXL_VLN = 0 x0108,
LCD_SPU_HWC_OVSA_HPXL_VLN = 0 x010c,
LCD_SPU_HWC_HPXL_VLN = 0 x0110,
LCD_SPUT_V_H_TOTAL = 0 x0114,
LCD_SPU_V_H_ACTIVE = 0 x0118,
LCD_SPU_H_PORCH = 0 x011c,
LCD_SPU_V_PORCH = 0 x0120,
LCD_SPU_BLANKCOLOR = 0 x0124,
LCD_SPU_ALPHA_COLOR1 = 0 x0128,
LCD_SPU_ALPHA_COLOR2 = 0 x012c,
LCD_SPU_COLORKEY_Y = 0 x0130,
LCD_SPU_COLORKEY_U = 0 x0134,
LCD_SPU_COLORKEY_V = 0 x0138,
LCD_CFG_RDREG4F = 0 x013c, /* Armada 510 */
LCD_SPU_SPI_RXDATA = 0 x0140,
LCD_SPU_ISA_RXDATA = 0 x0144,
LCD_SPU_HWC_RDDAT = 0 x0158,
LCD_SPU_GAMMA_RDDAT = 0 x015c,
LCD_SPU_PALETTE_RDDAT = 0 x0160,
LCD_SPU_IOPAD_IN = 0 x0178,
LCD_CFG_RDREG5F = 0 x017c,
LCD_SPU_SPI_CTRL = 0 x0180,
LCD_SPU_SPI_TXDATA = 0 x0184,
LCD_SPU_SMPN_CTRL = 0 x0188,
LCD_SPU_DMA_CTRL0 = 0 x0190,
LCD_SPU_DMA_CTRL1 = 0 x0194,
LCD_SPU_SRAM_CTRL = 0 x0198,
LCD_SPU_SRAM_WRDAT = 0 x019c,
LCD_SPU_SRAM_PARA0 = 0 x01a0, /* Armada 510 */
LCD_SPU_SRAM_PARA1 = 0 x01a4,
LCD_CFG_SCLK_DIV = 0 x01a8,
LCD_SPU_CONTRAST = 0 x01ac,
LCD_SPU_SATURATION = 0 x01b0,
LCD_SPU_CBSH_HUE = 0 x01b4,
LCD_SPU_DUMB_CTRL = 0 x01b8,
LCD_SPU_IOPAD_CONTROL = 0 x01bc,
LCD_SPU_IRQ_ENA = 0 x01c0,
LCD_SPU_IRQ_ISR = 0 x01c4,
};
/* For LCD_SPU_ADV_REG */
enum {
ADV_VSYNC_L_OFF = 0 xfff << 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 = 0 xfff << 0 ,
};
/* LCD_CFG_RDREG4F - Armada 510 only */
enum {
CFG_SRAM_WAIT = BIT(11 ),
CFG_SMPN_FASTTX = BIT(10 ),
CFG_DMA_ARB = BIT(9 ),
CFG_DMA_WM_EN = BIT(8 ),
CFG_DMA_WM_MASK = 0 xff,
#define CFG_DMA_WM(x) ((x) & CFG_DMA_WM_MASK)
};
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 = 0 xf << 20 ,
#define CFG_DMA_FMT(x) ((x) << 20 )
CFG_GRAFORMAT = 0 xf << 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 = 0 x7 << 24 ,
#define CFG_CKMODE(x) ((x) << 24 )
CFG_CARRY = 1 << 23 ,
CFG_GATED_CLK = 1 << 21 ,
CFG_PWRDN_ENA = 1 << 20 ,
CFG_DSCALE_MASK = 0 x3 << 18 ,
CFG_DSCALE_NONE = 0 x0 << 18 ,
CFG_DSCALE_HALF = 0 x1 << 18 ,
CFG_DSCALE_QUAR = 0 x2 << 18 ,
CFG_ALPHAM_MASK = 0 x3 << 16 ,
CFG_ALPHAM_VIDEO = 0 x0 << 16 ,
CFG_ALPHAM_GRA = 0 x1 << 16 ,
CFG_ALPHAM_CFG = 0 x2 << 16 ,
CFG_ALPHA_MASK = 0 xff << 8 ,
#define CFG_ALPHA(x) ((x) << 8 )
CFG_PIXCMD_MASK = 0 xff,
};
/* For LCD_SPU_SRAM_CTRL */
enum {
SRAM_READ = 0 << 14 ,
SRAM_WRITE = 2 << 14 ,
SRAM_INIT = 3 << 14 ,
SRAM_GAMMA_YR = 0 x0 << 8 ,
SRAM_GAMMA_UG = 0 x1 << 8 ,
SRAM_GAMMA_VB = 0 x2 << 8 ,
SRAM_PALETTE = 0 x3 << 8 ,
SRAM_HWC32_RAM1 = 0 xc << 8 ,
SRAM_HWC32_RAM2 = 0 xd << 8 ,
SRAM_HWC32_RAMR = SRAM_HWC32_RAM1,
SRAM_HWC32_RAMG = SRAM_HWC32_RAM2,
SRAM_HWC32_RAMB = 0 xe << 8 ,
SRAM_HWC32_TRAN = 0 xf << 8 ,
SRAM_HWC = 0 xf << 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 = 0 x0 << 30 ,
SCLK_510_EXTCLK0 = 0 x1 << 30 ,
SCLK_510_PLL = 0 x2 << 30 ,
SCLK_510_EXTCLK1 = 0 x3 << 30 ,
SCLK_510_DIV_CHANGE = 1 << 29 ,
SCLK_510_FRAC_DIV_MASK = 0 xfff << 16 ,
SCLK_510_INT_DIV_MASK = 0 xffff << 0 ,
/* Armada 16x */
SCLK_16X_AHB = 0 x0 << 28 ,
SCLK_16X_PCLK = 0 x1 << 28 ,
SCLK_16X_AXI = 0 x4 << 28 ,
SCLK_16X_PLL = 0 x8 << 28 ,
SCLK_16X_FRAC_DIV_MASK = 0 xfff << 16 ,
SCLK_16X_INT_DIV_MASK = 0 xffff << 0 ,
};
/* For LCD_SPU_DUMB_CTRL */
enum {
DUMB16_RGB565_0 = 0 x0 << 28 ,
DUMB16_RGB565_1 = 0 x1 << 28 ,
DUMB18_RGB666_0 = 0 x2 << 28 ,
DUMB18_RGB666_1 = 0 x3 << 28 ,
DUMB12_RGB444_0 = 0 x4 << 28 ,
DUMB12_RGB444_1 = 0 x5 << 28 ,
DUMB24_RGB888_0 = 0 x6 << 28 ,
DUMB_BLANK = 0 x7 << 28 ,
DUMB_MASK = 0 xf << 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 = 0 xf << 0 ,
CFG_IOPAD_DUMB24 = 0 x0 << 0 ,
CFG_IOPAD_DUMB18SPI = 0 x1 << 0 ,
CFG_IOPAD_DUMB18GPIO = 0 x2 << 0 ,
CFG_IOPAD_DUMB16SPI = 0 x3 << 0 ,
CFG_IOPAD_DUMB16GPIO = 0 x4 << 0 ,
CFG_IOPAD_DUMB12GPIO = 0 x5 << 0 ,
CFG_IOPAD_SMART18 = 0 x6 << 0 ,
CFG_IOPAD_SMART16 = 0 x7 << 0 ,
CFG_IOPAD_SMART8 = 0 x8 << 0 ,
};
#define IOPAD_DUMB24 0 x0
/* 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 = 0 xffff,
};
/* 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
Messung V0.5 in Prozent C=97 H=94 G=95
¤ Dauer der Verarbeitung: 0.11 Sekunden
(vorverarbeitet am 2026-06-07)
¤
*© Formatika GbR, Deutschland