0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011 #ifndef _SSTFB_H_
0012 #define _SSTFB_H_
0013
0014
0015
0016
0017
0018
0019
0020 #ifdef SST_DEBUG
0021 # define dprintk(X...) printk("sstfb: " X)
0022 # define SST_DEBUG_REG 1
0023 # define SST_DEBUG_FUNC 1
0024 # define SST_DEBUG_VAR 1
0025 #else
0026 # define dprintk(X...) no_printk(X)
0027 # define SST_DEBUG_REG 0
0028 # define SST_DEBUG_FUNC 0
0029 # define SST_DEBUG_VAR 0
0030 #endif
0031
0032 #if (SST_DEBUG_REG > 0)
0033 # define r_dprintk(X...) dprintk(X)
0034 #else
0035 # define r_dprintk(X...)
0036 #endif
0037 #if (SST_DEBUG_REG > 1)
0038 # define r_ddprintk(X...) dprintk(" " X)
0039 #else
0040 # define r_ddprintk(X...)
0041 #endif
0042
0043 #if (SST_DEBUG_FUNC > 0)
0044 # define f_dprintk(X...) dprintk(X)
0045 #else
0046 # define f_dprintk(X...)
0047 #endif
0048 #if (SST_DEBUG_FUNC > 1)
0049 # define f_ddprintk(X...) dprintk(" " X)
0050 #else
0051 # define f_ddprintk(X...) no_printk(X)
0052 #endif
0053 #if (SST_DEBUG_FUNC > 2)
0054 # define f_dddprintk(X...) dprintk(" " X)
0055 #else
0056 # define f_dddprintk(X...)
0057 #endif
0058
0059 #if (SST_DEBUG_VAR > 0)
0060 # define v_dprintk(X...) dprintk(X)
0061 # define print_var(V, X...) \
0062 { \
0063 dprintk(X); \
0064 printk(" :\n"); \
0065 sst_dbg_print_var(V); \
0066 }
0067 #else
0068 # define v_dprintk(X...)
0069 # define print_var(X,Y...)
0070 #endif
0071
0072 #define POW2(x) (1ul<<(x))
0073
0074
0075
0076
0077
0078
0079
0080
0081 #define PCI_INIT_ENABLE 0x40
0082 # define PCI_EN_INIT_WR BIT(0)
0083 # define PCI_EN_FIFO_WR BIT(1)
0084 # define PCI_REMAP_DAC BIT(2)
0085 #define PCI_VCLK_ENABLE 0xc0
0086 #define PCI_VCLK_DISABLE 0xe0
0087
0088
0089 #define STATUS 0x0000
0090 # define STATUS_FBI_BUSY BIT(7)
0091 #define FBZMODE 0x0110
0092 # define EN_CLIPPING BIT(0)
0093 # define EN_RGB_WRITE BIT(9)
0094 # define EN_ALPHA_WRITE BIT(10)
0095 # define ENGINE_INVERT_Y BIT(17)
0096 #define LFBMODE 0x0114
0097 # define LFB_565 0
0098 # define LFB_888 4
0099 # define LFB_8888 5
0100 # define WR_BUFF_FRONT 0
0101 # define WR_BUFF_BACK (1 << 4)
0102 # define RD_BUFF_FRONT 0
0103 # define RD_BUFF_BACK (1 << 6)
0104 # define EN_PXL_PIPELINE BIT(8)
0105 # define LFB_WORD_SWIZZLE_WR BIT(11)
0106 # define LFB_BYTE_SWIZZLE_WR BIT(12)
0107 # define LFB_INVERT_Y BIT(13)
0108 # define LFB_WORD_SWIZZLE_RD BIT(15)
0109 # define LFB_BYTE_SWIZZLE_RD BIT(16)
0110 #define CLIP_LEFT_RIGHT 0x0118
0111 #define CLIP_LOWY_HIGHY 0x011c
0112 #define NOPCMD 0x0120
0113 #define FASTFILLCMD 0x0124
0114 #define SWAPBUFFCMD 0x0128
0115 #define FBIINIT4 0x0200
0116 # define FAST_PCI_READS 0
0117 # define SLOW_PCI_READS BIT(0)
0118 # define LFB_READ_AHEAD BIT(1)
0119 #define BACKPORCH 0x0208
0120 #define VIDEODIMENSIONS 0x020c
0121 #define FBIINIT0 0x0210
0122 # define DIS_VGA_PASSTHROUGH BIT(0)
0123 # define FBI_RESET BIT(1)
0124 # define FIFO_RESET BIT(2)
0125 #define FBIINIT1 0x0214
0126 # define VIDEO_MASK 0x8080010f
0127 # define FAST_PCI_WRITES 0
0128 # define SLOW_PCI_WRITES BIT(1)
0129 # define EN_LFB_READ BIT(3)
0130 # define TILES_IN_X_SHIFT 4
0131 # define VIDEO_RESET BIT(8)
0132 # define EN_BLANKING BIT(12)
0133 # define EN_DATA_OE BIT(13)
0134 # define EN_BLANK_OE BIT(14)
0135 # define EN_HVSYNC_OE BIT(15)
0136 # define EN_DCLK_OE BIT(16)
0137 # define SEL_INPUT_VCLK_2X 0
0138 # define SEL_INPUT_VCLK_SLAVE BIT(17)
0139 # define SEL_SOURCE_VCLK_SLAVE 0
0140 # define SEL_SOURCE_VCLK_2X_DIV2 (0x01 << 20)
0141 # define SEL_SOURCE_VCLK_2X_SEL (0x02 << 20)
0142 # define EN_24BPP BIT(22)
0143 # define TILES_IN_X_MSB_SHIFT 24
0144 # define VCLK_2X_SEL_DEL_SHIFT 27
0145 # define VCLK_DEL_SHIFT 29
0146 #define FBIINIT2 0x0218
0147 # define EN_FAST_RAS_READ BIT(5)
0148 # define EN_DRAM_OE BIT(6)
0149 # define EN_FAST_RD_AHEAD_WR BIT(7)
0150 # define VIDEO_OFFSET_SHIFT 11
0151 # define SWAP_DACVSYNC 0
0152 # define SWAP_DACDATA0 (1 << 9)
0153 # define SWAP_FIFO_STALL (2 << 9)
0154 # define EN_RD_AHEAD_FIFO BIT(21)
0155 # define EN_DRAM_REFRESH BIT(22)
0156 # define DRAM_REFRESH_16 (0x30 << 23)
0157 #define DAC_READ FBIINIT2
0158 #define FBIINIT3 0x021c
0159 # define DISABLE_TEXTURE BIT(6)
0160 # define Y_SWAP_ORIGIN_SHIFT 22
0161 #define HSYNC 0x0220
0162 #define VSYNC 0x0224
0163 #define DAC_DATA 0x022c
0164 # define DAC_READ_CMD BIT(11)
0165 #define FBIINIT5 0x0244
0166 # define FBIINIT5_MASK 0xfa40ffff
0167 # define HDOUBLESCAN BIT(20)
0168 # define VDOUBLESCAN BIT(21)
0169 # define HSYNC_HIGH BIT(23)
0170 # define VSYNC_HIGH BIT(24)
0171 # define INTERLACE BIT(26)
0172 #define FBIINIT6 0x0248
0173 # define TILES_IN_X_LSB_SHIFT 30
0174 #define FBIINIT7 0x024c
0175
0176 #define BLTSRCBASEADDR 0x02c0
0177 #define BLTDSTBASEADDR 0x02c4
0178 #define BLTXYSTRIDES 0x02c8
0179 #define BLTSRCCHROMARANGE 0x02cc
0180 #define BLTDSTCHROMARANGE 0x02d0
0181 #define BLTCLIPX 0x02d4
0182 #define BLTCLIPY 0x02d8
0183 #define BLTSRCXY 0x02e0
0184 #define BLTDSTXY 0x02e4
0185 #define BLTSIZE 0x02e8
0186 #define BLTROP 0x02ec
0187 # define BLTROP_COPY 0x0cccc
0188 # define BLTROP_INVERT 0x05555
0189 # define BLTROP_XOR 0x06666
0190 #define BLTCOLOR 0x02f0
0191 #define BLTCOMMAND 0x02f8
0192 # define BLT_SCR2SCR_BITBLT 0
0193 # define BLT_CPU2SCR_BITBLT 1
0194 # define BLT_RECFILL_BITBLT 2
0195 # define BLT_16BPP_FMT 2
0196 #define BLTDATA 0x02fc
0197 # define LAUNCH_BITBLT BIT(31)
0198
0199
0200 #define DACREG_WMA 0x0
0201 #define DACREG_LUT 0x01
0202 #define DACREG_RMR 0x02
0203 #define DACREG_RMA 0x03
0204
0205 #define DACREG_ADDR_I DACREG_WMA
0206 #define DACREG_DATA_I DACREG_RMR
0207 #define DACREG_RMR_I 0x00
0208 #define DACREG_CR0_I 0x01
0209 # define DACREG_CR0_EN_INDEXED BIT(0)
0210 # define DACREG_CR0_8BIT BIT(1)
0211 # define DACREG_CR0_PWDOWN BIT(3)
0212 # define DACREG_CR0_16BPP 0x30
0213 # define DACREG_CR0_24BPP 0x50
0214 #define DACREG_CR1_I 0x05
0215 #define DACREG_CC_I 0x06
0216 # define DACREG_CC_CLKA BIT(7)
0217 # define DACREG_CC_CLKA_C (2<<4)
0218 # define DACREG_CC_CLKB BIT(3)
0219 # define DACREG_CC_CLKB_D 3
0220 #define DACREG_AC0_I 0x48
0221 #define DACREG_AC1_I 0x49
0222 #define DACREG_BD0_I 0x6c
0223 #define DACREG_BD1_I 0x6d
0224
0225
0226 #define DACREG_MIR_TI 0x97
0227 #define DACREG_DIR_TI 0x09
0228 #define DACREG_MIR_ATT 0x84
0229 #define DACREG_DIR_ATT 0x09
0230
0231 #define DACREG_ICS_PLLWMA 0x04
0232 #define DACREG_ICS_PLLDATA 0x05
0233 #define DACREG_ICS_CMD 0x06
0234 # define DACREG_ICS_CMD_16BPP 0x50
0235 # define DACREG_ICS_CMD_24BPP 0x70
0236 # define DACREG_ICS_CMD_PWDOWN BIT(0)
0237 #define DACREG_ICS_PLLRMA 0x07
0238
0239
0240
0241
0242
0243
0244
0245 #define DACREG_ICS_PLL_CLK0_1_INI 0x55
0246 #define DACREG_ICS_PLL_CLK0_7_INI 0x71
0247 #define DACREG_ICS_PLL_CLK1_B_INI 0x79
0248 #define DACREG_ICS_PLL_CTRL 0x0e
0249 # define DACREG_ICS_CLK0 BIT(5)
0250 # define DACREG_ICS_CLK0_0 0
0251 # define DACREG_ICS_CLK1_A 0
0252
0253
0254 #define FBIINIT0_DEFAULT DIS_VGA_PASSTHROUGH
0255
0256 #define FBIINIT1_DEFAULT \
0257 ( \
0258 FAST_PCI_WRITES \
0259 \
0260 | VIDEO_RESET \
0261 | 10 << TILES_IN_X_SHIFT\
0262 | SEL_SOURCE_VCLK_2X_SEL\
0263 | EN_LFB_READ \
0264 )
0265
0266 #define FBIINIT2_DEFAULT \
0267 ( \
0268 SWAP_DACVSYNC \
0269 | EN_DRAM_OE \
0270 | DRAM_REFRESH_16 \
0271 | EN_DRAM_REFRESH \
0272 | EN_FAST_RAS_READ \
0273 | EN_RD_AHEAD_FIFO \
0274 | EN_FAST_RD_AHEAD_WR \
0275 )
0276
0277 #define FBIINIT3_DEFAULT \
0278 ( DISABLE_TEXTURE )
0279
0280 #define FBIINIT4_DEFAULT \
0281 ( \
0282 FAST_PCI_READS \
0283 \
0284 | LFB_READ_AHEAD \
0285 )
0286
0287
0288
0289
0290
0291 #define FBIINIT6_DEFAULT (0x0)
0292
0293
0294
0295
0296
0297
0298
0299
0300 #define SSTFB_SET_VGAPASS _IOW('F', 0xdd, __u32)
0301 #define SSTFB_GET_VGAPASS _IOR('F', 0xdd, __u32)
0302
0303
0304
0305 enum {
0306 VID_CLOCK=0,
0307 GFX_CLOCK=1,
0308 };
0309
0310
0311 #define DAC_FREF 14318
0312 #define VCO_MAX 260000
0313
0314
0315
0316
0317
0318 struct pll_timing {
0319 unsigned int m;
0320 unsigned int n;
0321 unsigned int p;
0322 };
0323
0324 struct dac_switch {
0325 const char *name;
0326 int (*detect) (struct fb_info *info);
0327 int (*set_pll) (struct fb_info *info, const struct pll_timing *t, const int clock);
0328 void (*set_vidmod) (struct fb_info *info, const int bpp);
0329 };
0330
0331 struct sst_spec {
0332 char * name;
0333 int default_gfx_clock;
0334 int max_gfxclk;
0335 };
0336
0337 struct sstfb_par {
0338 u32 palette[16];
0339 unsigned int yDim;
0340 unsigned int hSyncOn;
0341 unsigned int hSyncOff;
0342 unsigned int hBackPorch;
0343 unsigned int vSyncOn;
0344 unsigned int vSyncOff;
0345 unsigned int vBackPorch;
0346 struct pll_timing pll;
0347 unsigned int tiles_in_X;
0348 u8 __iomem *mmio_vbase;
0349 struct dac_switch dac_sw;
0350 struct pci_dev *dev;
0351 int type;
0352 u8 revision;
0353 u8 vgapass;
0354 };
0355
0356 #endif