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