115fb4814Smrg/*
215fb4814Smrg * Copyright (c) 2005 ASPEED Technology Inc.
315fb4814Smrg *
415fb4814Smrg * Permission to use, copy, modify, distribute, and sell this software and its
515fb4814Smrg * documentation for any purpose is hereby granted without fee, provided that
615fb4814Smrg * the above copyright notice appear in all copies and that both that
715fb4814Smrg * copyright notice and this permission notice appear in supporting
815fb4814Smrg * documentation, and that the name of the authors not be used in
915fb4814Smrg * advertising or publicity pertaining to distribution of the software without
1015fb4814Smrg * specific, written prior permission.  The authors makes no representations
1115fb4814Smrg * about the suitability of this software for any purpose.  It is provided
1215fb4814Smrg * "as is" without express or implied warranty.
1315fb4814Smrg *
1415fb4814Smrg * THE AUTHORS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
1515fb4814Smrg * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
1615fb4814Smrg * EVENT SHALL THE AUTHORS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
1715fb4814Smrg * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
1815fb4814Smrg * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
1915fb4814Smrg * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
2015fb4814Smrg * PERFORMANCE OF THIS SOFTWARE.
2115fb4814Smrg */
2215fb4814Smrg
2315fb4814Smrg/* VRAM Size Definition */
2415fb4814Smrg#define VIDEOMEM_SIZE_08M	0x00800000
2515fb4814Smrg#define VIDEOMEM_SIZE_16M	0x01000000
2615fb4814Smrg#define VIDEOMEM_SIZE_32M	0x02000000
2715fb4814Smrg#define VIDEOMEM_SIZE_64M	0x04000000
28de78e416Smrg#define VIDEOMEM_SIZE_128M	0x08000000
29de78e416Smrg
30b534f209Smrg#define DRAM_SIZE_016M		0x01000000
31b534f209Smrg#define DRAM_SIZE_032M		0x02000000
32b534f209Smrg#define DRAM_SIZE_064M		0x04000000
33b534f209Smrg#define DRAM_SIZE_128M		0x08000000
34b534f209Smrg#define DRAM_SIZE_256M		0x10000000
35b534f209Smrg
36de78e416Smrg#define DRAMTYPE_512Mx16	0
37de78e416Smrg#define DRAMTYPE_1Gx16		1
38de78e416Smrg#define DRAMTYPE_512Mx32	2
39de78e416Smrg#define DRAMTYPE_1Gx32		3
40b534f209Smrg#define DRAMTYPE_2Gx16		6
41b534f209Smrg#define DRAMTYPE_4Gx16		7
4215fb4814Smrg
43b4d38c65Smrg#define AR_PORT_WRITE		(pAST->MMIOVirtualAddr + 0x3c0)
44b4d38c65Smrg#define MISC_PORT_WRITE		(pAST->MMIOVirtualAddr + 0x3c2)
45b4d38c65Smrg#define VGA_ENABLE_PORT		(pAST->MMIOVirtualAddr + 0x3c3)
46b4d38c65Smrg#define SEQ_PORT		(pAST->MMIOVirtualAddr + 0x3c4)
47b534f209Smrg#define DAC_INDEX_READ		(pAST->MMIOVirtualAddr + 0x3c7)
48b4d38c65Smrg#define DAC_INDEX_WRITE		(pAST->MMIOVirtualAddr + 0x3c8)
49b4d38c65Smrg#define DAC_DATA		(pAST->MMIOVirtualAddr + 0x3c9)
50b4d38c65Smrg#define GR_PORT			(pAST->MMIOVirtualAddr + 0x3cE)
51b4d38c65Smrg#define CRTC_PORT		(pAST->MMIOVirtualAddr + 0x3d4)
52b4d38c65Smrg#define INPUT_STATUS1_READ	(pAST->MMIOVirtualAddr + 0x3dA)
53b4d38c65Smrg#define MISC_PORT_READ		(pAST->MMIOVirtualAddr + 0x3cc)
5415fb4814Smrg
55b4d38c65Smrg#define GetReg(base)				MMIO_IN8(base, 0)
56b4d38c65Smrg#define SetReg(base,val)			MMIO_OUT8(base, 0, val)
57b4d38c65Smrg#define GetIndexReg(base,index,val)		{ \
58b4d38c65Smrg						MMIO_OUT8(base, 0, index);	\
59b4d38c65Smrg						val = MMIO_IN8(base, 1);	\
60b4d38c65Smrg						}
61b4d38c65Smrg#define SetIndexReg(base,index, val)		{ \
62b4d38c65Smrg						MMIO_OUT8(base, 0, index);	\
63b4d38c65Smrg						MMIO_OUT8(base, 1, val);	\
64b4d38c65Smrg						}
65b4d38c65Smrg#define GetIndexRegMask(base,index, and, val)	{ \
66b4d38c65Smrg						MMIO_OUT8(base, 0, index);	\
67b4d38c65Smrg						val = MMIO_IN8(base, 1) & and;	\
68b4d38c65Smrg						}
69b4d38c65Smrg#define SetIndexRegMask(base,index, and, val)	{ \
70b4d38c65Smrg						UCHAR __Temp;	\
71b4d38c65Smrg						MMIO_OUT8(base, 0, index);	\
72b4d38c65Smrg						__Temp = (MMIO_IN8(base, 1)&(and))|(val);	\
73b4d38c65Smrg						SetIndexReg(base,index,__Temp);			\
74b4d38c65Smrg						}
7515fb4814Smrg
76b534f209Smrg#define VGA_GET_PALETTE_INDEX(index, red, green, blue) \
77b534f209Smrg{ \
78b534f209Smrg   UCHAR __junk;				\
79b534f209Smrg   SetReg(DAC_INDEX_READ,(UCHAR)(index));	\
80b534f209Smrg   __junk = GetReg(SEQ_PORT);			\
81b534f209Smrg   red = GetReg(DAC_DATA);		\
82b534f209Smrg   __junk = GetReg(SEQ_PORT);			\
83b534f209Smrg   green = GetReg(DAC_DATA);		\
84b534f209Smrg   __junk = GetReg(SEQ_PORT);			\
85b534f209Smrg   blue = GetReg(DAC_DATA);		\
86b534f209Smrg   __junk = GetReg(SEQ_PORT);			\
87b4d38c65Smrg   (void)__junk;				\
88b534f209Smrg}
89b534f209Smrg
9015fb4814Smrg#define VGA_LOAD_PALETTE_INDEX(index, red, green, blue) \
9115fb4814Smrg{ \
9215fb4814Smrg   UCHAR __junk;				\
9315fb4814Smrg   SetReg(DAC_INDEX_WRITE,(UCHAR)(index));	\
9415fb4814Smrg   __junk = GetReg(SEQ_PORT);			\
9515fb4814Smrg   SetReg(DAC_DATA,(UCHAR)(red));		\
9615fb4814Smrg   __junk = GetReg(SEQ_PORT);			\
9715fb4814Smrg   SetReg(DAC_DATA,(UCHAR)(green));		\
9815fb4814Smrg   __junk = GetReg(SEQ_PORT);			\
9915fb4814Smrg   SetReg(DAC_DATA,(UCHAR)(blue));		\
100b4d38c65Smrg   __junk = GetReg(SEQ_PORT);			\
101b4d38c65Smrg   (void)__junk;				\
10215fb4814Smrg}
103b534f209Smrg
104b534f209Smrg/* Reg. Definition */
105b534f209Smrg#define AST1180_MEM_BASE		0x40000000
106b534f209Smrg#define AST1180_MMC_BASE		0x80FC8000
107b534f209Smrg#define AST1180_SCU_BASE		0x80FC8200
108b534f209Smrg#define AST1180_GFX_BASE		0x80FC9000
109b534f209Smrg#define AST1180_VIDEO_BASE		0x80FCD000
110b534f209Smrg
111b534f209Smrg/* AST1180 GFX */
112b534f209Smrg#define AST1180_VGA1_CTRL 	        0x60
113b534f209Smrg#define AST1180_VGA1_CTRL2	        0x64
114b534f209Smrg#define AST1180_VGA1_STATUS 	        0x68
115b534f209Smrg#define AST1180_VGA1_PLL 	        0x6C
116b534f209Smrg#define AST1180_VGA1_HTREG              0x70
117b534f209Smrg#define AST1180_VGA1_HRREG              0x74
118b534f209Smrg#define AST1180_VGA1_VTREG              0x78
119b534f209Smrg#define AST1180_VGA1_VRREG              0x7C
120b534f209Smrg#define AST1180_VGA1_STARTADDR          0x80
121b534f209Smrg#define AST1180_VGA1_OFFSET 	        0x84
122b534f209Smrg#define AST1180_VGA1_THRESHOLD		0x88
123b534f209Smrg
124b534f209Smrg#define AST1180_HWC1_OFFSET		0x90
125b534f209Smrg#define AST1180_HWC1_POSITION		0x94
126b534f209Smrg#define AST1180_HWC1_PATTERNADDR	0x98
127b534f209Smrg
128b534f209Smrg#define CRT_LOW_THRESHOLD_VALUE         0x40
129b534f209Smrg#define CRT_HIGH_THRESHOLD_VALUE        0x7E
130b534f209Smrg
131b534f209Smrg/* GFX Ctrl Reg */
132b534f209Smrg#define AST1180_ENABLECRT		0x00000001
133b534f209Smrg#define AST1180_ENABLEHWC		0x00000002
134b534f209Smrg#define AST1180_MONOHWC			0x00000000
135b534f209Smrg#define AST1180_ALPHAHWC		0x00000400
136b534f209Smrg#define AST1180_HSYNCOFF		0x00040000
137b534f209Smrg#define AST1180_VSYNCOFF		0x00080000
138b534f209Smrg#define AST1180_VGAOFF			0x00100000
139b534f209Smrg
140b534f209Smrg#define ReadAST1180SOC(addr, data)	\
141b534f209Smrg{	\
142b534f209Smrg        *(ULONG *) (pAST->MMIOVirtualAddr + 0xF004) = (addr) & 0xFFFF0000;	\
143b534f209Smrg        *(ULONG *) (pAST->MMIOVirtualAddr + 0xF000) = 0x1;	\
144b534f209Smrg        data = (*(ULONG *) (pAST->MMIOVirtualAddr + 0x10000 + ((addr) & 0x0000FFFF)));	\
145b534f209Smrg}
146b534f209Smrg
147b534f209Smrg#define WriteAST1180SOC(addr, data)	\
148b534f209Smrg{	\
149f010a93dSmrg        ULONG temp _X_UNUSED;	\
150b534f209Smrg        *(ULONG *) (pAST->MMIOVirtualAddr + 0xF004) = (addr) & 0xFFFF0000;	\
151b534f209Smrg        *(ULONG *) (pAST->MMIOVirtualAddr + 0xF000) = 0x1;	\
152b534f209Smrg        *(ULONG *) (pAST->MMIOVirtualAddr + 0x10000 + ((addr) & 0x0000FFFF)) = (data);	\
153b534f209Smrg        temp = *(ULONG *) (pAST->MMIOVirtualAddr + 0x10000 + ((addr) & 0x0000FFFF));	\
154b534f209Smrg}
155b534f209Smrg
156b534f209Smrg#define ReadAST1180MEM(addr, data)	\
157b534f209Smrg{	\
158b534f209Smrg        *(ULONG *) (pAST->MMIOVirtualAddr + 0xF004) = (addr) & 0xFFFF0000;	\
159b534f209Smrg        *(ULONG *) (pAST->MMIOVirtualAddr + 0xF000) = 0x1;	\
160b534f209Smrg        data = (*(ULONG *) (pAST->MMIOVirtualAddr + 0x10000 + ((addr) & 0x0000FFFF)));	\
161b534f209Smrg}
162b534f209Smrg
163b534f209Smrg#define WriteAST1180MEM(addr, data)	\
164b534f209Smrg{	\
165b534f209Smrg        *(ULONG *) (pAST->MMIOVirtualAddr + 0xF004) = (addr) & 0xFFFF0000;	\
166b534f209Smrg        *(ULONG *) (pAST->MMIOVirtualAddr + 0xF000) = 0x1;	\
167b534f209Smrg        *(ULONG *) (pAST->MMIOVirtualAddr + 0x10000 + ((addr) & 0x0000FFFF)) = (data);	\
168b534f209Smrg}
169cf503b78Smrg
170cf503b78Smrg/* Delay */
171cf503b78Smrg#define DelayUS(x)		usleep(x)
172cf503b78Smrg#define DelayMS(x)		DelayUS(1000*x)
173