162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
262306a36Sopenharmony_ci#ifndef _TDFX_H
362306a36Sopenharmony_ci#define _TDFX_H
462306a36Sopenharmony_ci
562306a36Sopenharmony_ci#include <linux/i2c.h>
662306a36Sopenharmony_ci#include <linux/i2c-algo-bit.h>
762306a36Sopenharmony_ci
862306a36Sopenharmony_ci/* membase0 register offsets */
962306a36Sopenharmony_ci#define STATUS		0x00
1062306a36Sopenharmony_ci#define PCIINIT0	0x04
1162306a36Sopenharmony_ci#define SIPMONITOR	0x08
1262306a36Sopenharmony_ci#define LFBMEMORYCONFIG	0x0c
1362306a36Sopenharmony_ci#define MISCINIT0	0x10
1462306a36Sopenharmony_ci#define MISCINIT1	0x14
1562306a36Sopenharmony_ci#define DRAMINIT0	0x18
1662306a36Sopenharmony_ci#define DRAMINIT1	0x1c
1762306a36Sopenharmony_ci#define AGPINIT		0x20
1862306a36Sopenharmony_ci#define TMUGBEINIT	0x24
1962306a36Sopenharmony_ci#define VGAINIT0	0x28
2062306a36Sopenharmony_ci#define VGAINIT1	0x2c
2162306a36Sopenharmony_ci#define DRAMCOMMAND	0x30
2262306a36Sopenharmony_ci#define DRAMDATA	0x34
2362306a36Sopenharmony_ci/* reserved	0x38 */
2462306a36Sopenharmony_ci/* reserved	0x3c */
2562306a36Sopenharmony_ci#define PLLCTRL0	0x40
2662306a36Sopenharmony_ci#define PLLCTRL1	0x44
2762306a36Sopenharmony_ci#define PLLCTRL2	0x48
2862306a36Sopenharmony_ci#define DACMODE		0x4c
2962306a36Sopenharmony_ci#define DACADDR		0x50
3062306a36Sopenharmony_ci#define DACDATA		0x54
3162306a36Sopenharmony_ci#define RGBMAXDELTA	0x58
3262306a36Sopenharmony_ci#define VIDPROCCFG	0x5c
3362306a36Sopenharmony_ci#define HWCURPATADDR	0x60
3462306a36Sopenharmony_ci#define HWCURLOC	0x64
3562306a36Sopenharmony_ci#define HWCURC0		0x68
3662306a36Sopenharmony_ci#define HWCURC1		0x6c
3762306a36Sopenharmony_ci#define VIDINFORMAT	0x70
3862306a36Sopenharmony_ci#define VIDINSTATUS	0x74
3962306a36Sopenharmony_ci#define VIDSERPARPORT	0x78
4062306a36Sopenharmony_ci#define VIDINXDELTA	0x7c
4162306a36Sopenharmony_ci#define VIDININITERR	0x80
4262306a36Sopenharmony_ci#define VIDINYDELTA	0x84
4362306a36Sopenharmony_ci#define VIDPIXBUFTHOLD	0x88
4462306a36Sopenharmony_ci#define VIDCHRMIN	0x8c
4562306a36Sopenharmony_ci#define VIDCHRMAX	0x90
4662306a36Sopenharmony_ci#define VIDCURLIN	0x94
4762306a36Sopenharmony_ci#define VIDSCREENSIZE	0x98
4862306a36Sopenharmony_ci#define VIDOVRSTARTCRD	0x9c
4962306a36Sopenharmony_ci#define VIDOVRENDCRD	0xa0
5062306a36Sopenharmony_ci#define VIDOVRDUDX	0xa4
5162306a36Sopenharmony_ci#define VIDOVRDUDXOFF	0xa8
5262306a36Sopenharmony_ci#define VIDOVRDVDY	0xac
5362306a36Sopenharmony_ci/* ... */
5462306a36Sopenharmony_ci#define VIDOVRDVDYOFF	0xe0
5562306a36Sopenharmony_ci#define VIDDESKSTART	0xe4
5662306a36Sopenharmony_ci#define VIDDESKSTRIDE	0xe8
5762306a36Sopenharmony_ci#define VIDINADDR0	0xec
5862306a36Sopenharmony_ci#define VIDINADDR1	0xf0
5962306a36Sopenharmony_ci#define VIDINADDR2	0xf4
6062306a36Sopenharmony_ci#define VIDINSTRIDE	0xf8
6162306a36Sopenharmony_ci#define VIDCUROVRSTART	0xfc
6262306a36Sopenharmony_ci
6362306a36Sopenharmony_ci#define INTCTRL		(0x00100000 + 0x04)
6462306a36Sopenharmony_ci#define CLIP0MIN	(0x00100000 + 0x08)
6562306a36Sopenharmony_ci#define CLIP0MAX	(0x00100000 + 0x0c)
6662306a36Sopenharmony_ci#define DSTBASE		(0x00100000 + 0x10)
6762306a36Sopenharmony_ci#define DSTFORMAT	(0x00100000 + 0x14)
6862306a36Sopenharmony_ci#define SRCBASE		(0x00100000 + 0x34)
6962306a36Sopenharmony_ci#define COMMANDEXTRA_2D	(0x00100000 + 0x38)
7062306a36Sopenharmony_ci#define CLIP1MIN	(0x00100000 + 0x4c)
7162306a36Sopenharmony_ci#define CLIP1MAX	(0x00100000 + 0x50)
7262306a36Sopenharmony_ci#define SRCFORMAT	(0x00100000 + 0x54)
7362306a36Sopenharmony_ci#define SRCSIZE		(0x00100000 + 0x58)
7462306a36Sopenharmony_ci#define SRCXY		(0x00100000 + 0x5c)
7562306a36Sopenharmony_ci#define COLORBACK	(0x00100000 + 0x60)
7662306a36Sopenharmony_ci#define COLORFORE	(0x00100000 + 0x64)
7762306a36Sopenharmony_ci#define DSTSIZE		(0x00100000 + 0x68)
7862306a36Sopenharmony_ci#define DSTXY		(0x00100000 + 0x6c)
7962306a36Sopenharmony_ci#define COMMAND_2D	(0x00100000 + 0x70)
8062306a36Sopenharmony_ci#define LAUNCH_2D	(0x00100000 + 0x80)
8162306a36Sopenharmony_ci
8262306a36Sopenharmony_ci#define COMMAND_3D	(0x00200000 + 0x120)
8362306a36Sopenharmony_ci
8462306a36Sopenharmony_ci/* register bitfields (not all, only as needed) */
8562306a36Sopenharmony_ci
8662306a36Sopenharmony_ci/* COMMAND_2D reg. values */
8762306a36Sopenharmony_ci#define TDFX_ROP_COPY		0xcc	/* src */
8862306a36Sopenharmony_ci#define TDFX_ROP_INVERT		0x55	/* NOT dst */
8962306a36Sopenharmony_ci#define TDFX_ROP_XOR		0x66	/* src XOR dst */
9062306a36Sopenharmony_ci
9162306a36Sopenharmony_ci#define AUTOINC_DSTX			BIT(10)
9262306a36Sopenharmony_ci#define AUTOINC_DSTY			BIT(11)
9362306a36Sopenharmony_ci#define COMMAND_2D_FILLRECT		0x05
9462306a36Sopenharmony_ci#define COMMAND_2D_S2S_BITBLT		0x01	/* screen to screen */
9562306a36Sopenharmony_ci#define COMMAND_2D_H2S_BITBLT		0x03	/* host to screen */
9662306a36Sopenharmony_ci
9762306a36Sopenharmony_ci#define COMMAND_3D_NOP			0x00
9862306a36Sopenharmony_ci#define STATUS_RETRACE			BIT(6)
9962306a36Sopenharmony_ci#define STATUS_BUSY			BIT(9)
10062306a36Sopenharmony_ci#define MISCINIT1_CLUT_INV		BIT(0)
10162306a36Sopenharmony_ci#define MISCINIT1_2DBLOCK_DIS		BIT(15)
10262306a36Sopenharmony_ci#define DRAMINIT0_SGRAM_NUM		BIT(26)
10362306a36Sopenharmony_ci#define DRAMINIT0_SGRAM_TYPE		BIT(27)
10462306a36Sopenharmony_ci#define DRAMINIT0_SGRAM_TYPE_MASK       (BIT(27) | BIT(28) | BIT(29))
10562306a36Sopenharmony_ci#define DRAMINIT0_SGRAM_TYPE_SHIFT      27
10662306a36Sopenharmony_ci#define DRAMINIT1_MEM_SDRAM		BIT(30)
10762306a36Sopenharmony_ci#define VGAINIT0_VGA_DISABLE		BIT(0)
10862306a36Sopenharmony_ci#define VGAINIT0_EXT_TIMING		BIT(1)
10962306a36Sopenharmony_ci#define VGAINIT0_8BIT_DAC		BIT(2)
11062306a36Sopenharmony_ci#define VGAINIT0_EXT_ENABLE		BIT(6)
11162306a36Sopenharmony_ci#define VGAINIT0_WAKEUP_3C3		BIT(8)
11262306a36Sopenharmony_ci#define VGAINIT0_LEGACY_DISABLE		BIT(9)
11362306a36Sopenharmony_ci#define VGAINIT0_ALT_READBACK		BIT(10)
11462306a36Sopenharmony_ci#define VGAINIT0_FAST_BLINK		BIT(11)
11562306a36Sopenharmony_ci#define VGAINIT0_EXTSHIFTOUT		BIT(12)
11662306a36Sopenharmony_ci#define VGAINIT0_DECODE_3C6		BIT(13)
11762306a36Sopenharmony_ci#define VGAINIT0_SGRAM_HBLANK_DISABLE	BIT(22)
11862306a36Sopenharmony_ci#define VGAINIT1_MASK			0x1fffff
11962306a36Sopenharmony_ci#define VIDCFG_VIDPROC_ENABLE		BIT(0)
12062306a36Sopenharmony_ci#define VIDCFG_CURS_X11			BIT(1)
12162306a36Sopenharmony_ci#define VIDCFG_INTERLACE		BIT(3)
12262306a36Sopenharmony_ci#define VIDCFG_HALF_MODE		BIT(4)
12362306a36Sopenharmony_ci#define VIDCFG_DESK_ENABLE		BIT(7)
12462306a36Sopenharmony_ci#define VIDCFG_CLUT_BYPASS		BIT(10)
12562306a36Sopenharmony_ci#define VIDCFG_2X			BIT(26)
12662306a36Sopenharmony_ci#define VIDCFG_HWCURSOR_ENABLE		BIT(27)
12762306a36Sopenharmony_ci#define VIDCFG_PIXFMT_SHIFT             18
12862306a36Sopenharmony_ci#define DACMODE_2X			BIT(0)
12962306a36Sopenharmony_ci
13062306a36Sopenharmony_ci/* I2C bit locations in the VIDSERPARPORT register */
13162306a36Sopenharmony_ci#define DDC_ENAB	0x00040000
13262306a36Sopenharmony_ci#define DDC_SCL_OUT	0x00080000
13362306a36Sopenharmony_ci#define DDC_SDA_OUT	0x00100000
13462306a36Sopenharmony_ci#define DDC_SCL_IN	0x00200000
13562306a36Sopenharmony_ci#define DDC_SDA_IN	0x00400000
13662306a36Sopenharmony_ci#define I2C_ENAB	0x00800000
13762306a36Sopenharmony_ci#define I2C_SCL_OUT	0x01000000
13862306a36Sopenharmony_ci#define I2C_SDA_OUT	0x02000000
13962306a36Sopenharmony_ci#define I2C_SCL_IN	0x04000000
14062306a36Sopenharmony_ci#define I2C_SDA_IN	0x08000000
14162306a36Sopenharmony_ci
14262306a36Sopenharmony_ci/* VGA rubbish, need to change this for multihead support */
14362306a36Sopenharmony_ci#define MISC_W		0x3c2
14462306a36Sopenharmony_ci#define MISC_R		0x3cc
14562306a36Sopenharmony_ci#define SEQ_I		0x3c4
14662306a36Sopenharmony_ci#define SEQ_D		0x3c5
14762306a36Sopenharmony_ci#define CRT_I		0x3d4
14862306a36Sopenharmony_ci#define CRT_D		0x3d5
14962306a36Sopenharmony_ci#define ATT_IW		0x3c0
15062306a36Sopenharmony_ci#define IS1_R		0x3da
15162306a36Sopenharmony_ci#define GRA_I		0x3ce
15262306a36Sopenharmony_ci#define GRA_D		0x3cf
15362306a36Sopenharmony_ci
15462306a36Sopenharmony_ci#ifdef __KERNEL__
15562306a36Sopenharmony_ci
15662306a36Sopenharmony_cistruct banshee_reg {
15762306a36Sopenharmony_ci	/* VGA rubbish */
15862306a36Sopenharmony_ci	unsigned char att[21];
15962306a36Sopenharmony_ci	unsigned char crt[25];
16062306a36Sopenharmony_ci	unsigned char gra[9];
16162306a36Sopenharmony_ci	unsigned char misc[1];
16262306a36Sopenharmony_ci	unsigned char seq[5];
16362306a36Sopenharmony_ci
16462306a36Sopenharmony_ci	/* Banshee extensions */
16562306a36Sopenharmony_ci	unsigned char ext[2];
16662306a36Sopenharmony_ci	unsigned long vidcfg;
16762306a36Sopenharmony_ci	unsigned long vidpll;
16862306a36Sopenharmony_ci	unsigned long mempll;
16962306a36Sopenharmony_ci	unsigned long gfxpll;
17062306a36Sopenharmony_ci	unsigned long dacmode;
17162306a36Sopenharmony_ci	unsigned long vgainit0;
17262306a36Sopenharmony_ci	unsigned long vgainit1;
17362306a36Sopenharmony_ci	unsigned long screensize;
17462306a36Sopenharmony_ci	unsigned long stride;
17562306a36Sopenharmony_ci	unsigned long cursloc;
17662306a36Sopenharmony_ci	unsigned long curspataddr;
17762306a36Sopenharmony_ci	unsigned long cursc0;
17862306a36Sopenharmony_ci	unsigned long cursc1;
17962306a36Sopenharmony_ci	unsigned long startaddr;
18062306a36Sopenharmony_ci	unsigned long clip0min;
18162306a36Sopenharmony_ci	unsigned long clip0max;
18262306a36Sopenharmony_ci	unsigned long clip1min;
18362306a36Sopenharmony_ci	unsigned long clip1max;
18462306a36Sopenharmony_ci	unsigned long miscinit0;
18562306a36Sopenharmony_ci};
18662306a36Sopenharmony_ci
18762306a36Sopenharmony_cistruct tdfx_par;
18862306a36Sopenharmony_ci
18962306a36Sopenharmony_cistruct tdfxfb_i2c_chan {
19062306a36Sopenharmony_ci	struct tdfx_par *par;
19162306a36Sopenharmony_ci	struct i2c_adapter adapter;
19262306a36Sopenharmony_ci	struct i2c_algo_bit_data algo;
19362306a36Sopenharmony_ci};
19462306a36Sopenharmony_ci
19562306a36Sopenharmony_cistruct tdfx_par {
19662306a36Sopenharmony_ci	u32 max_pixclock;
19762306a36Sopenharmony_ci	u32 palette[16];
19862306a36Sopenharmony_ci	void __iomem *regbase_virt;
19962306a36Sopenharmony_ci	unsigned long iobase;
20062306a36Sopenharmony_ci	int wc_cookie;
20162306a36Sopenharmony_ci#ifdef CONFIG_FB_3DFX_I2C
20262306a36Sopenharmony_ci	struct tdfxfb_i2c_chan chan[2];
20362306a36Sopenharmony_ci#endif
20462306a36Sopenharmony_ci};
20562306a36Sopenharmony_ci
20662306a36Sopenharmony_ci#endif	/* __KERNEL__ */
20762306a36Sopenharmony_ci
20862306a36Sopenharmony_ci#endif	/* _TDFX_H */
20962306a36Sopenharmony_ci
210