1 1.3 nonaka /* $NetBSD: arm_pxa2x0.cpp,v 1.3 2010/04/06 16:20:28 nonaka Exp $ */ 2 1.1 rafal 3 1.1 rafal /*- 4 1.1 rafal * Copyright (c) 2008 The NetBSD Foundation, Inc. 5 1.1 rafal * All rights reserved. 6 1.1 rafal * 7 1.1 rafal * This code is derived from software contributed to The NetBSD Foundation 8 1.1 rafal * by UCHIYAMA Yasushi. 9 1.1 rafal * 10 1.1 rafal * Redistribution and use in source and binary forms, with or without 11 1.1 rafal * modification, are permitted provided that the following conditions 12 1.1 rafal * are met: 13 1.1 rafal * 1. Redistributions of source code must retain the above copyright 14 1.1 rafal * notice, this list of conditions and the following disclaimer. 15 1.1 rafal * 2. Redistributions in binary form must reproduce the above copyright 16 1.1 rafal * notice, this list of conditions and the following disclaimer in the 17 1.1 rafal * documentation and/or other materials provided with the distribution. 18 1.1 rafal * 19 1.1 rafal * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 20 1.1 rafal * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 21 1.1 rafal * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 22 1.1 rafal * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 23 1.1 rafal * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 24 1.1 rafal * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 25 1.1 rafal * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 26 1.1 rafal * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 27 1.1 rafal * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 28 1.1 rafal * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 29 1.1 rafal * POSSIBILITY OF SUCH DAMAGE. 30 1.1 rafal */ 31 1.1 rafal 32 1.1 rafal #include <arm/arm_arch.h> 33 1.1 rafal #include <console.h> 34 1.1 rafal #include <memory.h> 35 1.1 rafal #include <arm/arm_pxa2x0.h> 36 1.1 rafal 37 1.1 rafal /* 38 1.1 rafal * Intel XScale PXA 2x0 39 1.1 rafal */ 40 1.1 rafal 41 1.1 rafal #define PAGE_SIZE 0x1000 42 1.1 rafal #define DRAM_BANK_NUM 4 /* total 256MByte */ 43 1.1 rafal #define DRAM_BANK_SIZE 0x04000000 /* 64Mbyte */ 44 1.1 rafal 45 1.1 rafal #define DRAM_BANK0_START 0xa0000000 46 1.1 rafal #define DRAM_BANK0_SIZE DRAM_BANK_SIZE 47 1.1 rafal #define DRAM_BANK1_START 0xa4000000 48 1.1 rafal #define DRAM_BANK1_SIZE DRAM_BANK_SIZE 49 1.1 rafal #define DRAM_BANK2_START 0xa8000000 50 1.1 rafal #define DRAM_BANK2_SIZE DRAM_BANK_SIZE 51 1.1 rafal #define DRAM_BANK3_START 0xac000000 52 1.1 rafal #define DRAM_BANK3_SIZE DRAM_BANK_SIZE 53 1.1 rafal #define ZERO_BANK_START 0xe0000000 54 1.1 rafal #define ZERO_BANK_SIZE DRAM_BANK_SIZE 55 1.1 rafal 56 1.1 rafal __BEGIN_DECLS 57 1.1 rafal 58 1.1 rafal // 2nd bootloader 59 1.3 nonaka void boot_func_pxa2x0(kaddr_t, kaddr_t, kaddr_t, kaddr_t); 60 1.3 nonaka extern char boot_func_end_pxa2x0[]; 61 1.3 nonaka #define BOOT_FUNC_START reinterpret_cast <vaddr_t>(boot_func_pxa2x0) 62 1.3 nonaka #define BOOT_FUNC_END reinterpret_cast <vaddr_t>(boot_func_end_pxa2x0) 63 1.1 rafal 64 1.1 rafal /* jump to 2nd loader */ 65 1.3 nonaka void FlatJump_pxa2x0(kaddr_t, kaddr_t, kaddr_t, kaddr_t); 66 1.1 rafal 67 1.1 rafal __END_DECLS 68 1.1 rafal 69 1.1 rafal PXA2X0Architecture::PXA2X0Architecture(Console *&cons, MemoryManager *&mem) 70 1.1 rafal : ARMArchitecture(cons, mem) 71 1.1 rafal { 72 1.1 rafal DPRINTF((TEXT("PXA-2x0 CPU.\n"))); 73 1.1 rafal } 74 1.1 rafal 75 1.1 rafal PXA2X0Architecture::~PXA2X0Architecture(void) 76 1.1 rafal { 77 1.1 rafal } 78 1.1 rafal 79 1.1 rafal BOOL 80 1.1 rafal PXA2X0Architecture::init(void) 81 1.1 rafal { 82 1.1 rafal if (!_mem->init()) { 83 1.1 rafal DPRINTF((TEXT("can't initialize memory manager.\n"))); 84 1.1 rafal return FALSE; 85 1.1 rafal } 86 1.1 rafal // set D-RAM information 87 1.1 rafal _mem->loadBank(DRAM_BANK0_START, DRAM_BANK_SIZE); 88 1.1 rafal _mem->loadBank(DRAM_BANK1_START, DRAM_BANK_SIZE); 89 1.1 rafal _mem->loadBank(DRAM_BANK2_START, DRAM_BANK_SIZE); 90 1.1 rafal _mem->loadBank(DRAM_BANK3_START, DRAM_BANK_SIZE); 91 1.1 rafal 92 1.3 nonaka // set D-cache information 93 1.3 nonaka dcachesize = 32768 * 2; 94 1.3 nonaka DPRINTF((TEXT("D-cache size = %d\n"), dcachesize)); 95 1.3 nonaka 96 1.1 rafal #ifdef HW_TEST 97 1.1 rafal DPRINTF((TEXT("Testing framebuffer.\n"))); 98 1.1 rafal testFramebuffer(); 99 1.1 rafal 100 1.1 rafal DPRINTF((TEXT("Testing UART.\n"))); 101 1.1 rafal testUART(); 102 1.1 rafal #endif 103 1.1 rafal 104 1.3 nonaka #ifdef REGDUMP 105 1.3 nonaka DPRINTF((TEXT("Dump peripheral registers.\n"))); 106 1.3 nonaka dumpPeripheralRegs(); 107 1.3 nonaka #endif 108 1.3 nonaka 109 1.3 nonaka #ifdef CS0DUMP 110 1.3 nonaka uint32_t dumpsize = 1024 * 1024; // 1MB 111 1.3 nonaka DPRINTF((TEXT("Dump CS area (size = %d)\n"), dumpsize)); 112 1.3 nonaka dumpCS0(dumpsize); 113 1.3 nonaka #endif 114 1.3 nonaka 115 1.1 rafal return TRUE; 116 1.1 rafal } 117 1.1 rafal 118 1.1 rafal void 119 1.1 rafal PXA2X0Architecture::testFramebuffer(void) 120 1.1 rafal { 121 1.1 rafal DPRINTF((TEXT("No framebuffer test yet.\n"))); 122 1.1 rafal } 123 1.1 rafal 124 1.1 rafal void 125 1.1 rafal PXA2X0Architecture::testUART(void) 126 1.1 rafal { 127 1.1 rafal #define COM_DATA VOLATILE_REF8(uart + 0x00) 128 1.1 rafal #define COM_IIR VOLATILE_REF8(uart + 0x08) 129 1.1 rafal #define COM_LSR VOLATILE_REF8(uart + 0x14) 130 1.1 rafal #define LSR_TXRDY 0x20 131 1.1 rafal #define COM_TX_CHECK while (!(COM_LSR & LSR_TXRDY)) 132 1.1 rafal #define COM_PUTCHAR(c) (COM_DATA = (c)) 133 1.1 rafal #define COM_CLR_INTS ((void)COM_IIR) 134 1.1 rafal #define _(c) \ 135 1.1 rafal __BEGIN_MACRO \ 136 1.1 rafal COM_TX_CHECK; \ 137 1.1 rafal COM_PUTCHAR(c); \ 138 1.1 rafal COM_TX_CHECK; \ 139 1.1 rafal COM_CLR_INTS; \ 140 1.1 rafal __END_MACRO 141 1.1 rafal 142 1.1 rafal vaddr_t uart = 143 1.1 rafal _mem->mapPhysicalPage(0x40100000, 0x100, PAGE_READWRITE); 144 1.1 rafal 145 1.1 rafal // Don't turn on the enable-UART bit in the IER; this seems to 146 1.1 rafal // result in WinCE losing the port (and nothing working later). 147 1.1 rafal // All that should be taken care of by using WinCE to open the 148 1.1 rafal // port before we actually use it. 149 1.1 rafal 150 1.1 rafal _('H');_('e');_('l');_('l');_('o');_(' '); 151 1.1 rafal _('W');_('o');_('r');_('l');_('d');_('\r');_('\n'); 152 1.1 rafal 153 1.1 rafal _mem->unmapPhysicalPage(uart); 154 1.1 rafal } 155 1.1 rafal 156 1.1 rafal BOOL 157 1.1 rafal PXA2X0Architecture::setupLoader(void) 158 1.1 rafal { 159 1.1 rafal vaddr_t v; 160 1.1 rafal vsize_t sz = BOOT_FUNC_END - BOOT_FUNC_START; 161 1.1 rafal 162 1.1 rafal // check 2nd bootloader size. 163 1.1 rafal if (sz > _mem->getPageSize()) { 164 1.1 rafal DPRINTF((TEXT("2nd bootloader size(%dbyte) is larger than page size(%d).\n"), 165 1.1 rafal sz, _mem->getPageSize())); 166 1.1 rafal return FALSE; 167 1.1 rafal } 168 1.1 rafal 169 1.1 rafal // get physical mapped page and copy loader to there. 170 1.1 rafal // don't writeback D-cache here. make sure to writeback before jump. 171 1.1 rafal if (!_mem->getPage(v , _loader_addr)) { 172 1.1 rafal DPRINTF((TEXT("can't get page for 2nd loader.\n"))); 173 1.1 rafal return FALSE; 174 1.1 rafal } 175 1.1 rafal DPRINTF((TEXT("2nd bootloader vaddr=0x%08x paddr=0x%08x\n"), 176 1.1 rafal (unsigned)v,(unsigned)_loader_addr)); 177 1.1 rafal 178 1.1 rafal memcpy(reinterpret_cast <LPVOID>(v), 179 1.1 rafal reinterpret_cast <LPVOID>(BOOT_FUNC_START), sz); 180 1.1 rafal DPRINTF((TEXT("2nd bootloader copy done.\n"))); 181 1.1 rafal 182 1.1 rafal return TRUE; 183 1.1 rafal } 184 1.1 rafal 185 1.1 rafal void 186 1.1 rafal PXA2X0Architecture::jump(paddr_t info, paddr_t pvec) 187 1.1 rafal { 188 1.1 rafal kaddr_t sp; 189 1.1 rafal vaddr_t v; 190 1.1 rafal paddr_t p; 191 1.1 rafal 192 1.1 rafal // stack for bootloader 193 1.1 rafal _mem->getPage(v, p); 194 1.1 rafal sp = ptokv(p) + _mem->getPageSize(); 195 1.1 rafal DPRINTF((TEXT("sp for bootloader = %08x + %08x = %08x\n"), 196 1.1 rafal ptokv(p), _mem->getPageSize(), sp)); 197 1.1 rafal 198 1.1 rafal // writeback whole D-cache 199 1.1 rafal WritebackDCache(); 200 1.1 rafal 201 1.1 rafal SetKMode(1); 202 1.3 nonaka FlatJump_pxa2x0(info, pvec, sp, _loader_addr); 203 1.1 rafal // NOTREACHED 204 1.3 nonaka SetKMode(0); 205 1.3 nonaka DPRINTF((TEXT("Return from FlatJump_pxa2x0.\n"))); 206 1.3 nonaka } 207 1.3 nonaka 208 1.3 nonaka 209 1.3 nonaka // 210 1.3 nonaka // dump CS0 211 1.3 nonaka // 212 1.3 nonaka void 213 1.3 nonaka PXA2X0Architecture::dumpCS0(uint32_t size) 214 1.3 nonaka { 215 1.3 nonaka static char buf[0x1000]; 216 1.3 nonaka vaddr_t mem; 217 1.3 nonaka uint32_t addr; 218 1.3 nonaka uint32_t off; 219 1.3 nonaka HANDLE fh; 220 1.3 nonaka unsigned long wrote; 221 1.3 nonaka 222 1.3 nonaka fh = CreateFile(TEXT("rom.bin"), GENERIC_WRITE, FILE_SHARE_READ, 223 1.3 nonaka 0, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0); 224 1.3 nonaka if (fh == INVALID_HANDLE_VALUE) { 225 1.3 nonaka DPRINTF((TEXT("can't open file. (%s)\n"), TEXT("rom.bin"))); 226 1.3 nonaka return; 227 1.3 nonaka } 228 1.3 nonaka 229 1.3 nonaka for (addr = 0; addr < size; addr += 0x1000) { 230 1.3 nonaka memset(buf, 0, sizeof(buf)); 231 1.3 nonaka mem = _mem->mapPhysicalPage(addr, 0x1000, PAGE_READWRITE); 232 1.3 nonaka for (off = 0; off < 0x1000; off++) { 233 1.3 nonaka buf[off] = VOLATILE_REF8(mem + off); 234 1.3 nonaka } 235 1.3 nonaka _mem->unmapPhysicalPage(mem); 236 1.3 nonaka WriteFile(fh, buf, 0x1000, &wrote, 0); 237 1.3 nonaka } 238 1.3 nonaka 239 1.3 nonaka CloseHandle(fh); 240 1.3 nonaka } 241 1.3 nonaka 242 1.3 nonaka // 243 1.3 nonaka // dump peripheral registers. 244 1.3 nonaka // 245 1.3 nonaka 246 1.3 nonaka #ifdef REGDUMP 247 1.3 nonaka #define PXA250_GPIO_REG_NUM 3 248 1.3 nonaka #define PXA250_GPIO_NUM 96 249 1.3 nonaka #define PXA270_GPIO_REG_NUM 4 250 1.3 nonaka #define PXA270_GPIO_NUM 121 251 1.3 nonaka 252 1.3 nonaka static const TCHAR *pxa270_gpioName[PXA270_GPIO_NUM][7] = 253 1.3 nonaka { 254 1.3 nonaka /*0*/ { TEXT("GPIO<0>"),TEXT(""),TEXT(""),TEXT(""),TEXT(""),TEXT(""),TEXT(""), }, 255 1.3 nonaka /*1*/ { TEXT("GPIO<1>/nRESET_GPIO"),TEXT(""),TEXT(""),TEXT(""),TEXT(""),TEXT(""),TEXT(""), }, 256 1.3 nonaka /*2*/ { TEXT("SYS_EN5"),TEXT(""),TEXT(""),TEXT(""),TEXT(""),TEXT(""),TEXT(""), }, 257 1.3 nonaka /*3*/ { TEXT("GPIO<3>/PWR_SCL"),TEXT(""),TEXT(""),TEXT(""),TEXT(""),TEXT(""),TEXT(""), }, 258 1.3 nonaka /*4*/ { TEXT("GPIO<4>/PWR_SDA"),TEXT(""),TEXT(""),TEXT(""),TEXT(""),TEXT(""),TEXT(""), }, 259 1.3 nonaka /*5*/ { TEXT("PWR_CAP<0>"),TEXT(""),TEXT(""),TEXT(""),TEXT(""),TEXT(""),TEXT(""), }, 260 1.3 nonaka /*6*/ { TEXT("PWR_CAP<1>"),TEXT(""),TEXT(""),TEXT(""),TEXT(""),TEXT(""),TEXT(""), }, 261 1.3 nonaka /*7*/ { TEXT("PWR_CAP<2>"),TEXT(""),TEXT(""),TEXT(""),TEXT(""),TEXT(""),TEXT(""), }, 262 1.3 nonaka /*8*/ { TEXT("PWR_CAP<3>"),TEXT(""),TEXT(""),TEXT(""),TEXT(""),TEXT(""),TEXT(""), }, 263 1.3 nonaka /*9*/ { TEXT("GPIO<9>"),TEXT(""),TEXT(""),TEXT("FFCTS"),TEXT("HZ_CLK"),TEXT(""),TEXT("CHOUT<0>"), }, 264 1.3 nonaka /*10*/ { TEXT("GPIO<10>"),TEXT("FFDCD"),TEXT(""),TEXT("USB_P3_57"),TEXT("HZ_CLK"),TEXT(""),TEXT("CHOUT<1>"), }, 265 1.3 nonaka /*11*/ { TEXT("GPIO<11>"),TEXT("EXT_SYNC<0>"),TEXT("SSPRXD2"),TEXT("USB_P3_1"),TEXT("CHOUT<0>"),TEXT("PWM_OUT<2>"),TEXT("48_MHz"), }, 266 1.3 nonaka /*12*/ { TEXT("GPIO<12>"),TEXT("EXT_SYNC<1>"),TEXT("CIF_DD<7>"),TEXT(""),TEXT("CHOUT<1>"),TEXT("PWM_OUT<3>"),TEXT("48_MHz"), }, 267 1.3 nonaka /*13*/ { TEXT("GPIO<13>"),TEXT("CLK_EXT"),TEXT("KP_DKIN<7>"),TEXT("KP_MKIN<7>"),TEXT("SSPTXD2"),TEXT(""),TEXT(""), }, 268 1.3 nonaka /*14*/ { TEXT("GPIO<14>"),TEXT("L_VSYNC"),TEXT("SSPSFRM2"),TEXT(""),TEXT(""),TEXT("SSPSFRM2"),TEXT("UCLK"), }, 269 1.3 nonaka /*15*/ { TEXT("GPIO<15>"),TEXT(""),TEXT(""),TEXT(""),TEXT("nPCE<1>"),TEXT("nCS<1>"),TEXT(""), }, 270 1.3 nonaka /*16*/ { TEXT("GPIO<16>"),TEXT("KP_MKIN<5>"),TEXT(""),TEXT(""),TEXT(""),TEXT("PWM_OUT<0>"),TEXT("FFTXD"), }, 271 1.3 nonaka /*17*/ { TEXT("GPIO<17>"),TEXT("KP_MKIN<6>"),TEXT("CIF_DD<6>"),TEXT(""),TEXT(""),TEXT("PWM_OUT<1>"),TEXT(""), }, 272 1.3 nonaka /*18*/ { TEXT("GPIO<18>"),TEXT("RDY"),TEXT(""),TEXT(""),TEXT(""),TEXT(""),TEXT(""), }, 273 1.3 nonaka /*19*/ { TEXT("GPIO<19>"),TEXT("SSPSCLK2"),TEXT(""),TEXT("FFRXD"),TEXT("SSPSCLK2"),TEXT("L_CS"),TEXT("nURST"), }, 274 1.3 nonaka /*20*/ { TEXT("GPIO<20>"),TEXT("DREQ<0>"),TEXT("MBREQ"),TEXT(""),TEXT("nSDCS<2>"),TEXT(""),TEXT(""), }, 275 1.3 nonaka /*21*/ { TEXT("GPIO<21>"),TEXT(""),TEXT(""),TEXT(""),TEXT("nSDCS<3>"),TEXT("DVAL<0>"),TEXT("MBGNT"), }, 276 1.3 nonaka /*22*/ { TEXT("GPIO<22>"),TEXT("SSPEXTCLK2"),TEXT("SSPSCLK2EN"),TEXT("SSPSCLK2"),TEXT("KP_MKOUT<7>"),TEXT("SSPSYSCLK2"),TEXT("SSPSCLK2"), }, 277 1.3 nonaka /*23*/ { TEXT("GPIO<23>"),TEXT(""),TEXT("SSPSCLK"),TEXT(""),TEXT("CIF_MCLK"),TEXT("SSPSCLK"),TEXT(""), }, 278 1.3 nonaka /*24*/ { TEXT("GPIO<24>"),TEXT("CIF_FV"),TEXT("SSPSFRM"),TEXT(""),TEXT("CIF_FV"),TEXT("SSPSFRM"),TEXT(""), }, 279 1.3 nonaka /*25*/ { TEXT("GPIO<25>"),TEXT("CIF_LV"),TEXT(""),TEXT(""),TEXT("CIF_LV"),TEXT("SSPTXD"),TEXT(""), }, 280 1.3 nonaka /*26*/ { TEXT("GPIO<26>"),TEXT("SSPRXD"),TEXT("CIF_PCLK"),TEXT("FFCTS"),TEXT(""),TEXT(""),TEXT(""), }, 281 1.3 nonaka /*27*/ { TEXT("GPIO<27>"),TEXT("SSPEXTCLK"),TEXT("SSPSCLKEN"),TEXT("CIF_DD<0>"),TEXT("SSPSYSCLK"),TEXT(""),TEXT("FFRTS"), }, 282 1.3 nonaka /*28*/ { TEXT("GPIO<28>"),TEXT("AC97_BITCLK"),TEXT("I2S_BITCLK"),TEXT("SSPSFRM"),TEXT("I2S_BITCLK"),TEXT(""),TEXT("SSPSFRM"), }, 283 1.3 nonaka /*29*/ { TEXT("GPIO<29>"),TEXT("AC97_SDATA_IN_0"),TEXT("I2S_SDATA_IN"),TEXT("SSPSCLK"),TEXT("SSPRXD2"),TEXT(""),TEXT("SSPSCLK"), }, 284 1.3 nonaka /*30*/ { TEXT("GPIO<30>"),TEXT(""),TEXT(""),TEXT(""),TEXT("I2S_SDATA_OUT"),TEXT("AC97_SDATA_OUT"),TEXT("USB_P3_2"), }, 285 1.3 nonaka /*31*/ { TEXT("GPIO<31>"),TEXT(""),TEXT(""),TEXT(""),TEXT("I2S_SYNC"),TEXT("AC97_SYNC"),TEXT("USB_P3_6"), }, 286 1.3 nonaka /*32*/ { TEXT("GPIO<32>"),TEXT(""),TEXT(""),TEXT(""),TEXT("MSSCLK"),TEXT("MMCLK"),TEXT(""), }, 287 1.3 nonaka /*33*/ { TEXT("GPIO<33>"),TEXT("FFRXD"),TEXT("FFDSR"),TEXT(""),TEXT("DVAL<1>"),TEXT("nCS<5>"),TEXT("MBGNT"), }, 288 1.3 nonaka /*34*/ { TEXT("GPIO<34>"),TEXT("FFRXD"),TEXT("KP_MKIN<3>"),TEXT("SSPSCLK3"),TEXT("USB_P2_2"),TEXT(""),TEXT("SSPSCLK3"), }, 289 1.3 nonaka /*35*/ { TEXT("GPIO<35>"),TEXT("FFCTS"),TEXT("USB_P2_1"),TEXT("SSPSFRM3"),TEXT(""),TEXT("KP_MKOUT<6>"),TEXT("SSPTXD3"), }, 290 1.3 nonaka /*36*/ { TEXT("GPIO<36>"),TEXT("FFDCD"),TEXT("SSPSCLK2"),TEXT("KP_MKIN<7>"),TEXT("USB_P2_4"),TEXT("SSPSCLK2"),TEXT(""), }, 291 1.3 nonaka /*37*/ { TEXT("GPIO<37>"),TEXT("FFDSR"),TEXT("SSPSFRM2"),TEXT("KP_MKIN<3>"),TEXT("USB_P2_8"),TEXT("SSPSFRM2"),TEXT("FFTXD"), }, 292 1.3 nonaka /*38*/ { TEXT("GPIO<38>"),TEXT("FFRI"),TEXT("KP_MKIN<4>"),TEXT("USB_P2_3"),TEXT("SSPTXD3"),TEXT("SSPTXD2"),TEXT("PWM_OUT<1>"), }, 293 1.3 nonaka /*39*/ { TEXT("GPIO<39>"),TEXT("KP_MKIN<4>"),TEXT(""),TEXT("SSPSFRM3"),TEXT("USB_P2_6"),TEXT("FFTXD"),TEXT("SSPSFRM3"), }, 294 1.3 nonaka /*40*/ { TEXT("GPIO<40>"),TEXT("SSPRXD2"),TEXT(""),TEXT("USB_P2_5"),TEXT("KP_MKOUT<6>"),TEXT("FFDTR"),TEXT("SSPSCLK3"), }, 295 1.3 nonaka /*41*/ { TEXT("GPIO<41>"),TEXT("FFRXD"),TEXT("USB_P2_7"),TEXT("SSPRXD3"),TEXT("KP_MKOUT<7>"),TEXT("FFRTS"),TEXT(""), }, 296 1.3 nonaka /*42*/ { TEXT("GPIO<42>"),TEXT("BTRXD"),TEXT("ICP_RXD"),TEXT(""),TEXT(""),TEXT(""),TEXT("CIF_MCLK"), }, 297 1.3 nonaka /*43*/ { TEXT("GPIO<43>"),TEXT(""),TEXT(""),TEXT("CIF_FV"),TEXT("ICP_TXD"),TEXT("BTTXD"),TEXT("CIF_FV"), }, 298 1.3 nonaka /*44*/ { TEXT("GPIO<44>"),TEXT("BTCTS"),TEXT(""),TEXT("CIF_LV"),TEXT(""),TEXT(""),TEXT("CIF_LV"), }, 299 1.3 nonaka /*45*/ { TEXT("GPIO<45>"),TEXT(""),TEXT(""),TEXT("CIF_PCLK"),TEXT("AC97_SYSCLK"),TEXT("BTRTS"),TEXT("SSPSYSCLK3"), }, 300 1.3 nonaka /*46*/ { TEXT("GPIO<46>"),TEXT("ICP_RXD"),TEXT("STD_RXD"),TEXT(""),TEXT(""),TEXT("PWM_OUT<2>"),TEXT(""), }, 301 1.3 nonaka /*47*/ { TEXT("GPIO<47>"),TEXT("CIF_DD<0>"),TEXT(""),TEXT(""),TEXT("STD_TXD"),TEXT("ICP_TXD"),TEXT("PWM_OUT<3>"), }, 302 1.3 nonaka /*48*/ { TEXT("GPIO<48>"),TEXT("CIF_DD<5>"),TEXT(""),TEXT(""),TEXT("BB_OB_DAT<1>"),TEXT("nPOE"),TEXT(""), }, 303 1.3 nonaka /*49*/ { TEXT("GPIO<49>"),TEXT(""),TEXT(""),TEXT(""),TEXT(""),TEXT("nPWE"),TEXT(""), }, 304 1.3 nonaka /*50*/ { TEXT("GPIO<50>"),TEXT("CIF_DD<3>"),TEXT(""),TEXT("SSPSCLK2"),TEXT("BB_OB_DAT<2>"),TEXT("nPIOR"),TEXT("SSPSCLK2"), }, 305 1.3 nonaka /*51*/ { TEXT("GPIO<51>"),TEXT("CIF_DD<2>"),TEXT(""),TEXT(""),TEXT("BB_OB_DAT<3>"),TEXT("nPIOW"),TEXT(""), }, 306 1.3 nonaka /*52*/ { TEXT("GPIO<52>"),TEXT("CIF_DD<4>"),TEXT("SSPSCLK3"),TEXT(""),TEXT("BB_OB_CLK"),TEXT("SSPSCLK3"),TEXT(""), }, 307 1.3 nonaka /*53*/ { TEXT("GPIO<53>"),TEXT("FFRXD"),TEXT("USB_P2_3"),TEXT(""),TEXT("BB_OB_STB"),TEXT("CIF_MCLK"),TEXT("SSPSYSCLK"), }, 308 1.3 nonaka /*54*/ { TEXT("GPIO<54>"),TEXT(""),TEXT("BB_OB_WAIT"),TEXT("CIF_PCLK"),TEXT(""),TEXT("nPCE<2>"),TEXT(""), }, 309 1.3 nonaka /*55*/ { TEXT("GPIO<55>"),TEXT("CIF_DD<1>"),TEXT("BB_IB_DAT<1>"),TEXT(""),TEXT(""),TEXT("nPREG"),TEXT(""), }, 310 1.3 nonaka /*56*/ { TEXT("GPIO<56>"),TEXT("nPWAIT"),TEXT("BB_IB_DAT<2>"),TEXT(""),TEXT("USB_P3_4"),TEXT(""),TEXT(""), }, 311 1.3 nonaka /*57*/ { TEXT("GPIO<57>"),TEXT("nIOIS16"),TEXT("BB_IB_DAT<3>"),TEXT(""),TEXT(""),TEXT(""),TEXT("SSPTXD"), }, 312 1.3 nonaka /*58*/ { TEXT("GPIO<58>"),TEXT(""),TEXT("LDD<0>"),TEXT(""),TEXT(""),TEXT("LDD<0>"),TEXT(""), }, 313 1.3 nonaka /*59*/ { TEXT("GPIO<59>"),TEXT(""),TEXT("LDD<1>"),TEXT(""),TEXT(""),TEXT("LDD<1>"),TEXT(""), }, 314 1.3 nonaka /*60*/ { TEXT("GPIO<60>"),TEXT(""),TEXT("LDD<2>"),TEXT(""),TEXT(""),TEXT("LDD<2>"),TEXT(""), }, 315 1.3 nonaka /*61*/ { TEXT("GPIO<61>"),TEXT(""),TEXT("LDD<3>"),TEXT(""),TEXT(""),TEXT("LDD<3>"),TEXT(""), }, 316 1.3 nonaka /*62*/ { TEXT("GPIO<62>"),TEXT(""),TEXT("LDD<4>"),TEXT(""),TEXT(""),TEXT("LDD<4>"),TEXT(""), }, 317 1.3 nonaka /*63*/ { TEXT("GPIO<63>"),TEXT(""),TEXT("LDD<5>"),TEXT(""),TEXT(""),TEXT("LDD<5>"),TEXT(""), }, 318 1.3 nonaka /*64*/ { TEXT("GPIO<64>"),TEXT(""),TEXT("LDD<6>"),TEXT(""),TEXT(""),TEXT("LDD<6>"),TEXT(""), }, 319 1.3 nonaka /*65*/ { TEXT("GPIO<65>"),TEXT(""),TEXT("LDD<7>"),TEXT(""),TEXT(""),TEXT("LDD<7>"),TEXT(""), }, 320 1.3 nonaka /*66*/ { TEXT("GPIO<66>"),TEXT(""),TEXT("LDD<8>"),TEXT(""),TEXT(""),TEXT("LDD<8>"),TEXT(""), }, 321 1.3 nonaka /*67*/ { TEXT("GPIO<67>"),TEXT(""),TEXT("LDD<9>"),TEXT(""),TEXT(""),TEXT("LDD<9>"),TEXT(""), }, 322 1.3 nonaka /*68*/ { TEXT("GPIO<68>"),TEXT(""),TEXT("LDD<10>"),TEXT(""),TEXT(""),TEXT("LDD<10>"),TEXT(""), }, 323 1.3 nonaka /*69*/ { TEXT("GPIO<69>"),TEXT(""),TEXT("LDD<11>"),TEXT(""),TEXT(""),TEXT("LDD<11>"),TEXT(""), }, 324 1.3 nonaka /*70*/ { TEXT("GPIO<70>"),TEXT(""),TEXT("LDD<12>"),TEXT(""),TEXT(""),TEXT("LDD<12>"),TEXT(""), }, 325 1.3 nonaka /*71*/ { TEXT("GPIO<71>"),TEXT(""),TEXT("LDD<13>"),TEXT(""),TEXT(""),TEXT("LDD<13>"),TEXT(""), }, 326 1.3 nonaka /*72*/ { TEXT("GPIO<72>"),TEXT(""),TEXT("LDD<14>"),TEXT(""),TEXT(""),TEXT("LDD<14>"),TEXT(""), }, 327 1.3 nonaka /*73*/ { TEXT("GPIO<73>"),TEXT(""),TEXT("LDD<15>"),TEXT(""),TEXT(""),TEXT("LDD<15>"),TEXT(""), }, 328 1.3 nonaka /*74*/ { TEXT("GPIO<74>"),TEXT(""),TEXT(""),TEXT(""),TEXT(""),TEXT("L_FCLK_RD"),TEXT(""), }, 329 1.3 nonaka /*75*/ { TEXT("GPIO<75>"),TEXT(""),TEXT(""),TEXT(""),TEXT(""),TEXT("L_LCLK_A0"),TEXT(""), }, 330 1.3 nonaka /*76*/ { TEXT("GPIO<76>"),TEXT(""),TEXT(""),TEXT(""),TEXT(""),TEXT("L_PCLK_WR"),TEXT(""), }, 331 1.3 nonaka /*77*/ { TEXT("GPIO<77>"),TEXT(""),TEXT(""),TEXT(""),TEXT(""),TEXT("L_BIAS"),TEXT(""), }, 332 1.3 nonaka /*78*/ { TEXT("GPIO<78>"),TEXT(""),TEXT(""),TEXT(""),TEXT("nPCE<2>"),TEXT("nCS<2>"),TEXT(""), }, 333 1.3 nonaka /*79*/ { TEXT("GPIO<79>"),TEXT(""),TEXT(""),TEXT(""),TEXT("PSKTSEL"),TEXT("nCS<3>"),TEXT("PWM_OUT<2>"), }, 334 1.3 nonaka /*80*/ { TEXT("GPIO<80>"),TEXT("DREQ<1>"),TEXT("MBREQ"),TEXT(""),TEXT(""),TEXT("nCS<4>"),TEXT("PWM_OUT<3>"), }, 335 1.3 nonaka /*81*/ { TEXT("GPIO<81>"),TEXT(""),TEXT("CIF_DD<0>"),TEXT(""),TEXT("SSPTXD3"),TEXT("BB_OB_DAT<0>"),TEXT(""), }, 336 1.3 nonaka /*82*/ { TEXT("GPIO<82>"),TEXT("SSPRXD3"),TEXT("BB_IB_DAT<0>"),TEXT("CIF_DD<5>"),TEXT(""),TEXT(""),TEXT("FFDTR"), }, 337 1.3 nonaka /*83*/ { TEXT("GPIO<83>"),TEXT("SSPSFRM3"),TEXT("BB_IB_CLK"),TEXT("CIF_DD<4>"),TEXT("SSPSFRM3"),TEXT("FFTXD"),TEXT("FFRTS"), }, 338 1.3 nonaka /*84*/ { TEXT("GPIO<84>"),TEXT("SSPCLK3"),TEXT("BB_IB_STB"),TEXT("CIF_FV"),TEXT("SSPCLK3"),TEXT(""),TEXT("CIF_FV"), }, 339 1.3 nonaka /*85*/ { TEXT("GPIO<85>"),TEXT("FFRXD"),TEXT("DREQ<2>"),TEXT("CIF_LV"),TEXT("nPCE<1>"),TEXT("BB_IB_WAIT"),TEXT("CIF_LV"), }, 340 1.3 nonaka /*86*/ { TEXT("GPIO<86>"),TEXT("SSPRXD2"),TEXT("LDD<16>"),TEXT("USB_P3_5"),TEXT("nPCE<1>"),TEXT("LDD<16>"),TEXT(""), }, 341 1.3 nonaka /*87*/ { TEXT("GPIO<87>"),TEXT("nPCE<2>"),TEXT("LDD<17>"),TEXT("USB_P3_1"),TEXT("SSPTXD2"),TEXT("LDD<17>"),TEXT("SSPSFRM2"), }, 342 1.3 nonaka /*88*/ { TEXT("GPIO<88>"),TEXT("USBHPWR<1>"),TEXT("SSPRXD2"),TEXT("SSPSFRM2"),TEXT(""),TEXT(""),TEXT("SSPSFRM2"), }, 343 1.3 nonaka /*89*/ { TEXT("GPIO<89>"),TEXT("SSPRXD3"),TEXT(""),TEXT("FFRI"),TEXT("AC97_SYSCLK"),TEXT("USBHPEN<1>"),TEXT("SSPTXD2"), }, 344 1.3 nonaka /*90*/ { TEXT("GPIO<90>"),TEXT("KP_MKIN<5>"),TEXT("USB_P3_5"),TEXT("CIF_DD<4>"),TEXT(""),TEXT("nURST"),TEXT(""), }, 345 1.3 nonaka /*91*/ { TEXT("GPIO<91>"),TEXT("KP_MKIN<6>"),TEXT("USB_P3_1"),TEXT("CIF_DD<5>"),TEXT(""),TEXT("UCLK"),TEXT(""), }, 346 1.3 nonaka /*92*/ { TEXT("GPIO<92>"),TEXT("MMDAT<0>"),TEXT(""),TEXT(""),TEXT("MMDAT<0>"),TEXT("MSBS"),TEXT(""), }, 347 1.3 nonaka /*93*/ { TEXT("GPIO<93>"),TEXT("KP_DKIN<0>"),TEXT("CIF_DD<6>"),TEXT(""),TEXT("AC97_SDATA_OUT"),TEXT(""),TEXT(""), }, 348 1.3 nonaka /*94*/ { TEXT("GPIO<94>"),TEXT("KP_DKIN<1>"),TEXT("CIF_DD<5>"),TEXT(""),TEXT("AC97_SYNC"),TEXT(""),TEXT(""), }, 349 1.3 nonaka /*95*/ { TEXT("GPIO<95>"),TEXT("KP_DKIN<2>"),TEXT("CIF_DD<4>"),TEXT("KP_MKIN<6>"),TEXT("AC97_RESET_n"),TEXT(""),TEXT(""), }, 350 1.3 nonaka /*96*/ { TEXT("GPIO<96>"),TEXT("KP_DKIN<3>"),TEXT("MBREQ"),TEXT("FFRXD"),TEXT(""),TEXT("DVAL<1>"),TEXT("KP_MKOUT<6>"), }, 351 1.3 nonaka /*97*/ { TEXT("GPIO<97>"),TEXT("KP_DKIN<4>"),TEXT("DREQ<1>"),TEXT("KP_MKIN<3>"),TEXT(""),TEXT("MBGNT"),TEXT(""), }, 352 1.3 nonaka /*98*/ { TEXT("GPIO<98>"),TEXT("KP_DKIN<5>"),TEXT("CIF_DD<0>"),TEXT("KP_MKIN<4>"),TEXT("AC97_SYSCLK"),TEXT(""),TEXT("FFRTS"), }, 353 1.3 nonaka /*99*/ { TEXT("GPIO<99>"),TEXT("KP_DKIN<6>"),TEXT("AC97_SDATA_IN_1"),TEXT("KP_MKIN<5>"),TEXT(""),TEXT(""),TEXT("FFTXD"), }, 354 1.3 nonaka /*100*/ { TEXT("GPIO<100>"),TEXT("KP_MKIN<0>"),TEXT("DREQ<2>"),TEXT("FFCTS"),TEXT(""),TEXT(""),TEXT(""), }, 355 1.3 nonaka /*101*/ { TEXT("GPIO<101>"),TEXT("KP_MKIN<1>"),TEXT(""),TEXT(""),TEXT(""),TEXT(""),TEXT(""), }, 356 1.3 nonaka /*102*/ { TEXT("GPIO<102>"),TEXT("KP_MKIN<2>"),TEXT(""),TEXT("FFRXD"),TEXT("nPCE<1>"),TEXT(""),TEXT(""), }, 357 1.3 nonaka /*103*/ { TEXT("GPIO<103>"),TEXT("CIF_DD<3>"),TEXT(""),TEXT(""),TEXT(""),TEXT("KP_MKOUT<0>"),TEXT(""), }, 358 1.3 nonaka /*104*/ { TEXT("GPIO<104>"),TEXT("CIF_DD<2>"),TEXT(""),TEXT(""),TEXT("PSKTSEL"),TEXT("KP_MKOUT<1>"),TEXT(""), }, 359 1.3 nonaka /*105*/ { TEXT("GPIO<105>"),TEXT("CIF_DD<1>"),TEXT(""),TEXT(""),TEXT("nPCE<2>"),TEXT("KP_MKOUT<2>"),TEXT(""), }, 360 1.3 nonaka /*106*/ { TEXT("GPIO<106>"),TEXT("CIF_DD<9>"),TEXT(""),TEXT(""),TEXT(""),TEXT("KP_MKOUT<3>"),TEXT(""), }, 361 1.3 nonaka /*107*/ { TEXT("GPIO<107>"),TEXT("CIF_DD<8>"),TEXT(""),TEXT(""),TEXT(""),TEXT("KP_MKOUT<4>"),TEXT(""), }, 362 1.3 nonaka /*108*/ { TEXT("GPIO<108>"),TEXT("CIF_DD<7>"),TEXT(""),TEXT(""),TEXT("CHOUT<0>"),TEXT("KP_MKOUT<5>"),TEXT(""), }, 363 1.3 nonaka /*109*/ { TEXT("GPIO<109>"),TEXT("MMDAT<1>"),TEXT("MSSDIO"),TEXT(""),TEXT("MMDAT<1>"),TEXT("MSSDIO"),TEXT(""), }, 364 1.3 nonaka /*110*/ { TEXT("GPIO<110>"),TEXT("MMDAT<2>/MMCCS<0>"),TEXT(""),TEXT(""),TEXT("MMDAT<2>/MMCCS<0>"),TEXT(""),TEXT(""), }, 365 1.3 nonaka /*111*/ { TEXT("GPIO<111>"),TEXT("MMDAT<3>/MMCCS<1>"),TEXT(""),TEXT(""),TEXT("MMDAT<3>/MMCCS<1>"),TEXT(""),TEXT(""), }, 366 1.3 nonaka /*112*/ { TEXT("GPIO<112>"),TEXT("MMCMD"),TEXT("nMSINS"),TEXT(""),TEXT("MMCMD"),TEXT(""),TEXT(""), }, 367 1.3 nonaka /*113*/ { TEXT("GPIO<113>"),TEXT(""),TEXT(""),TEXT("USB_P3_3"),TEXT("I2S_SYSCLK"),TEXT("AC97_RESET_n"),TEXT(""), }, 368 1.3 nonaka /*114*/ { TEXT("GPIO<114>"),TEXT("CIF_DD<1>"),TEXT(""),TEXT(""),TEXT("UEN"),TEXT("UVS0"),TEXT(""), }, 369 1.3 nonaka /*115*/ { TEXT("GPIO<115>"),TEXT("DREQ<0>"),TEXT("CIF_DD<3>"),TEXT("MBREQ"),TEXT("UEN"),TEXT("nUVS1"),TEXT("PWM_OUT<1>"), }, 370 1.3 nonaka /*116*/ { TEXT("GPIO<116>"),TEXT("CIF_DD<2>"),TEXT("AC97_SDATA_IN_0"),TEXT("UDET"),TEXT("DVAL<0>"),TEXT("nUVS2"),TEXT("MBGNT"), }, 371 1.3 nonaka /*117*/ { TEXT("GPIO<117>"),TEXT("SCL"),TEXT(""),TEXT(""),TEXT("SCL"),TEXT(""),TEXT(""), }, 372 1.3 nonaka /*118*/ { TEXT("GPIO<118>"),TEXT("SDA"),TEXT(""),TEXT(""),TEXT("SDA"),TEXT(""),TEXT(""), }, 373 1.3 nonaka /*119*/ { TEXT("GPIO<119>"),TEXT("USBHPWR<2>"),TEXT(""),TEXT(""),TEXT(""),TEXT(""),TEXT(""), }, 374 1.3 nonaka /*120*/ { TEXT("GPIO<120>"),TEXT("USBHPEN<2>"),TEXT(""),TEXT(""),TEXT(""),TEXT(""),TEXT(""), }, 375 1.3 nonaka }; 376 1.3 nonaka #endif 377 1.3 nonaka 378 1.3 nonaka void 379 1.3 nonaka PXA2X0Architecture::dumpPeripheralRegs(void) 380 1.3 nonaka { 381 1.3 nonaka #ifdef REGDUMP 382 1.3 nonaka uint32_t reg; 383 1.3 nonaka bool first; 384 1.3 nonaka int i, n; 385 1.3 nonaka 386 1.3 nonaka #define GPIO_OFFSET(r,o) ((r == 3) ? (o + 0x100) : (o + (r * 4))) 387 1.3 nonaka // GPIO 388 1.3 nonaka if (platid_match(&platid, &platid_mask_CPU_ARM_XSCALE_PXA270)) 389 1.3 nonaka n = PXA270_GPIO_REG_NUM; 390 1.3 nonaka else 391 1.3 nonaka n = PXA250_GPIO_REG_NUM; 392 1.3 nonaka 393 1.3 nonaka vaddr_t gpio = 394 1.3 nonaka _mem->mapPhysicalPage(0x40e00000, 0x1000, PAGE_READWRITE); 395 1.3 nonaka DPRINTF((TEXT("Dump GPIO registers.\n"))); 396 1.3 nonaka for (i = 0; i < n; i++) { 397 1.3 nonaka reg = VOLATILE_REF(gpio + GPIO_OFFSET(i, 0x00)); 398 1.3 nonaka DPRINTF((TEXT("GPLR%d: 0x%08x\n"), i, reg)); 399 1.3 nonaka } 400 1.3 nonaka for (i = 0; i < n; i++) { 401 1.3 nonaka reg = VOLATILE_REF(gpio + GPIO_OFFSET(i, 0x0c)); 402 1.3 nonaka DPRINTF((TEXT("GPDR%d: 0x%08x\n"), i, reg)); 403 1.3 nonaka } 404 1.3 nonaka #if 0 /* write-only register */ 405 1.3 nonaka for (i = 0; i < n; i++) { 406 1.3 nonaka reg = VOLATILE_REF(gpio + GPIO_OFFSET(i, 0x18)); 407 1.3 nonaka DPRINTF((TEXT("GPSR%d: 0x%08x\n"), reg)); 408 1.3 nonaka } 409 1.3 nonaka for (i = 0; i < n; i++) { 410 1.3 nonaka reg = VOLATILE_REF(gpio + GPIO_OFFSET(i, 0x24)); 411 1.3 nonaka DPRINTF((TEXT("GPCR%d: 0x%08x\n"), reg)); 412 1.3 nonaka } 413 1.3 nonaka #endif 414 1.3 nonaka for (i = 0; i < n; i++) { 415 1.3 nonaka reg = VOLATILE_REF(gpio + GPIO_OFFSET(i, 0x30)); 416 1.3 nonaka DPRINTF((TEXT("GRER%d: 0x%08x\n"), i, reg)); 417 1.3 nonaka } 418 1.3 nonaka for (i = 0; i < n; i++) { 419 1.3 nonaka reg = VOLATILE_REF(gpio + GPIO_OFFSET(i, 0x3c)); 420 1.3 nonaka DPRINTF((TEXT("GFER%d: 0x%08x\n"), i, reg)); 421 1.3 nonaka } 422 1.3 nonaka for (i = 0; i < n; i++) { 423 1.3 nonaka reg = VOLATILE_REF(gpio + GPIO_OFFSET(i, 0x48)); 424 1.3 nonaka DPRINTF((TEXT("GEDR%d: 0x%08x\n"), i, reg)); 425 1.3 nonaka } 426 1.3 nonaka for (i = 0; i < n; i++) { 427 1.3 nonaka reg = VOLATILE_REF(gpio + 0x54 + (i * 8)); 428 1.3 nonaka DPRINTF((TEXT("GAFR%d_L: 0x%08x\n"), i, reg)); 429 1.3 nonaka reg = VOLATILE_REF(gpio + 0x58 + (i * 8)); 430 1.3 nonaka DPRINTF((TEXT("GAFR%d_U: 0x%08x\n"), i, reg)); 431 1.3 nonaka } 432 1.3 nonaka 433 1.3 nonaka // 434 1.3 nonaka // display detail 435 1.3 nonaka // 436 1.3 nonaka 437 1.3 nonaka if (!platid_match(&platid, &platid_mask_CPU_ARM_XSCALE_PXA270)) 438 1.3 nonaka return; 439 1.3 nonaka 440 1.3 nonaka // header 441 1.3 nonaka DPRINTF((TEXT("pin#,function,name,rising,falling,status\n"))); 442 1.3 nonaka 443 1.3 nonaka n = PXA270_GPIO_NUM; 444 1.3 nonaka for (i = 0; i < n; i++) { 445 1.3 nonaka const TCHAR *fn_name, *pin_name; 446 1.3 nonaka uint32_t dir, altfn, redge, fedge, status; 447 1.3 nonaka 448 1.3 nonaka // pin function 449 1.3 nonaka dir = VOLATILE_REF(gpio + GPIO_OFFSET(i, 0x0c)); 450 1.3 nonaka dir = (dir >> (i % 32)) & 1; 451 1.3 nonaka altfn = VOLATILE_REF(gpio + 0x54 + ((i / 16) * 4)); 452 1.3 nonaka altfn = (altfn >> ((i % 16) * 2)) & 3; 453 1.3 nonaka if (altfn == 0) { 454 1.3 nonaka if (dir == 0) { 455 1.3 nonaka fn_name = TEXT("GPIO_IN"); 456 1.3 nonaka } else { 457 1.3 nonaka fn_name = TEXT("GPIO_OUT"); 458 1.3 nonaka } 459 1.3 nonaka DPRINTF((TEXT("%d,%s,%s,"), i, fn_name, 460 1.3 nonaka pxa270_gpioName[i][0])); 461 1.3 nonaka } else { 462 1.3 nonaka if (dir == 0) { 463 1.3 nonaka fn_name = TEXT("IN"); 464 1.3 nonaka pin_name = pxa270_gpioName[i][altfn]; 465 1.3 nonaka } else { 466 1.3 nonaka fn_name = TEXT("OUT"); 467 1.3 nonaka pin_name = pxa270_gpioName[i][altfn+3]; 468 1.3 nonaka } 469 1.3 nonaka DPRINTF((TEXT("%d,ALT_FN_%d_%s,%s,"), i, altfn, 470 1.3 nonaka fn_name, pin_name)); 471 1.3 nonaka } 472 1.3 nonaka 473 1.3 nonaka // edge detect 474 1.3 nonaka redge = VOLATILE_REF(gpio + GPIO_OFFSET(i, 0x30)); 475 1.3 nonaka redge = (redge >> (i % 32)) & 1; 476 1.3 nonaka fedge = VOLATILE_REF(gpio + GPIO_OFFSET(i, 0x3c)); 477 1.3 nonaka fedge = (fedge >> (i % 32)) & 1; 478 1.3 nonaka DPRINTF((TEXT("%s,%s,"), 479 1.3 nonaka redge ? TEXT("enable") : TEXT("disable"), 480 1.3 nonaka fedge ? TEXT("enable") : TEXT("disable"))); 481 1.3 nonaka 482 1.3 nonaka // status 483 1.3 nonaka status = VOLATILE_REF(gpio + GPIO_OFFSET(i, 0x00)); 484 1.3 nonaka status = (status >> (i % 32)) & 1; 485 1.3 nonaka DPRINTF((TEXT("%s"), status ? TEXT("high") : TEXT("low"))); 486 1.3 nonaka 487 1.3 nonaka DPRINTF((TEXT("\n"))); 488 1.3 nonaka } 489 1.3 nonaka _mem->unmapPhysicalPage(gpio); 490 1.3 nonaka 491 1.3 nonaka // LCDC 492 1.3 nonaka DPRINTF((TEXT("Dump LCDC registers.\n"))); 493 1.3 nonaka vaddr_t lcdc = 494 1.3 nonaka _mem->mapPhysicalPage(0x44000000, 0x1000, PAGE_READWRITE); 495 1.3 nonaka reg = VOLATILE_REF(lcdc + 0x00); 496 1.3 nonaka DPRINTF((TEXT("LCCR0: 0x%08x\n"), reg)); 497 1.3 nonaka DPRINTF((TEXT("-> "))); 498 1.3 nonaka first = true; 499 1.3 nonaka if (reg & (1U << 26)) { 500 1.3 nonaka DPRINTF((TEXT("%sLDDALT"), first ? TEXT("") : TEXT("/"))); 501 1.3 nonaka first = false; 502 1.3 nonaka } 503 1.3 nonaka if (reg & (1U << 25)) { 504 1.3 nonaka DPRINTF((TEXT("%sOUC"), first ? TEXT("") : TEXT("/"))); 505 1.3 nonaka first = false; 506 1.3 nonaka } 507 1.3 nonaka if (reg & (1U << 22)) { 508 1.3 nonaka DPRINTF((TEXT("%sLCDT"), first ? TEXT("") : TEXT("/"))); 509 1.3 nonaka first = false; 510 1.3 nonaka } 511 1.3 nonaka if (reg & (1U << 9)) { 512 1.3 nonaka DPRINTF((TEXT("%sDPD"), first ? TEXT("") : TEXT("/"))); 513 1.3 nonaka first = false; 514 1.3 nonaka } 515 1.3 nonaka if (reg & (1U << 7)) { 516 1.3 nonaka DPRINTF((TEXT("%sPAS"), first ? TEXT("") : TEXT("/"))); 517 1.3 nonaka first = false; 518 1.3 nonaka } 519 1.3 nonaka if (reg & (1U << 2)) { 520 1.3 nonaka DPRINTF((TEXT("%sSDS"), first ? TEXT("") : TEXT("/"))); 521 1.3 nonaka first = false; 522 1.3 nonaka } 523 1.3 nonaka if (reg & (1U << 1)) { 524 1.3 nonaka DPRINTF((TEXT("%sCMS"), first ? TEXT("") : TEXT("/"))); 525 1.3 nonaka first = false; 526 1.3 nonaka } 527 1.3 nonaka if (reg & (1U << 0)) { 528 1.3 nonaka DPRINTF((TEXT("%sENB"), first ? TEXT("") : TEXT("/"))); 529 1.3 nonaka first = false; 530 1.3 nonaka } 531 1.3 nonaka DPRINTF((TEXT("\n"))); 532 1.3 nonaka DPRINTF((TEXT("-> PDD = 0x%02x\n"), (reg >> 12) & 0xff)); 533 1.3 nonaka reg = VOLATILE_REF(lcdc + 0x04); 534 1.3 nonaka DPRINTF((TEXT("LCCR1: 0x%08x\n"), reg)); 535 1.3 nonaka DPRINTF((TEXT("-> BLW = 0x%02x, ELW = 0x%02x, HSW = 0x%02x, PPL = 0x%03x\n"), 536 1.3 nonaka (reg >> 24) & 0xff, (reg >> 16) & 0xff, (reg >> 10) & 0x3f, 537 1.3 nonaka reg & 0x3ff)); 538 1.3 nonaka reg = VOLATILE_REF(lcdc + 0x08); 539 1.3 nonaka DPRINTF((TEXT("LCCR2: 0x%08x\n"), reg)); 540 1.3 nonaka DPRINTF((TEXT("-> BFW = 0x%02x, EFW = 0x%02x, VSW = 0x%02x, LPP = 0x%03x\n"), 541 1.3 nonaka (reg >> 24) & 0xff, (reg >> 16) & 0xff, (reg >> 10) & 0x3f, 542 1.3 nonaka reg & 0x3ff)); 543 1.3 nonaka reg = VOLATILE_REF(lcdc + 0x0c); 544 1.3 nonaka DPRINTF((TEXT("LCCR3: 0x%08x\n"), reg)); 545 1.3 nonaka DPRINTF((TEXT("-> "))); 546 1.3 nonaka first = true; 547 1.3 nonaka if (reg & (1U << 27)) { 548 1.3 nonaka DPRINTF((TEXT("%sDPC"), first ? TEXT("") : TEXT("/"))); 549 1.3 nonaka first = false; 550 1.3 nonaka } 551 1.3 nonaka if (reg & (1U << 23)) { 552 1.3 nonaka DPRINTF((TEXT("%sOEP"), first ? TEXT("") : TEXT("/"))); 553 1.3 nonaka first = false; 554 1.3 nonaka } 555 1.3 nonaka if (reg & (1U << 22)) { 556 1.3 nonaka DPRINTF((TEXT("%sPCP"), first ? TEXT("") : TEXT("/"))); 557 1.3 nonaka first = false; 558 1.3 nonaka } 559 1.3 nonaka if (reg & (1U << 21)) { 560 1.3 nonaka DPRINTF((TEXT("%sHSP"), first ? TEXT("") : TEXT("/"))); 561 1.3 nonaka first = false; 562 1.3 nonaka } 563 1.3 nonaka if (reg & (1U << 20)) { 564 1.3 nonaka DPRINTF((TEXT("%sVSP"), first ? TEXT("") : TEXT("/"))); 565 1.3 nonaka first = false; 566 1.3 nonaka } 567 1.3 nonaka if (reg & (1U << 19)) { 568 1.3 nonaka DPRINTF((TEXT("%sVSP"), first ? TEXT("") : TEXT("/"))); 569 1.3 nonaka first = false; 570 1.3 nonaka } 571 1.3 nonaka DPRINTF((TEXT("\n"))); 572 1.3 nonaka DPRINTF((TEXT("-> PDFOR = %d\n"), (reg >> 30) & 3)); 573 1.3 nonaka DPRINTF((TEXT("-> BPP = 0x%02x\n"), ((reg >> 29) & 1 << 3) | ((reg >> 24) & 7))); 574 1.3 nonaka DPRINTF((TEXT("-> API = 0x%x\n"), (reg >> 16) & 0xf)); 575 1.3 nonaka DPRINTF((TEXT("-> ACB = 0x%02x\n"), (reg >> 8) & 0xff)); 576 1.3 nonaka DPRINTF((TEXT("-> PCD = 0x%02x\n"), reg & 0xff)); 577 1.3 nonaka reg = VOLATILE_REF(lcdc + 0x10); 578 1.3 nonaka DPRINTF((TEXT("LCCR4: 0x%08x\n"), reg)); 579 1.3 nonaka DPRINTF((TEXT("-> PCDDIV = %d\n"), (reg >> 31) & 1)); 580 1.3 nonaka DPRINTF((TEXT("-> PAL_FOR = %d\n"), (reg >> 15) & 3)); 581 1.3 nonaka DPRINTF((TEXT("-> K3 = 0x%x, K2 = 0x%x, K1 = 0x%x\n"), 582 1.3 nonaka (reg >> 6) & 7, (reg >> 3) & 7, reg & 7)); 583 1.3 nonaka reg = VOLATILE_REF(lcdc + 0x14); 584 1.3 nonaka DPRINTF((TEXT("LCCR5: 0x%08x\n"), reg)); 585 1.3 nonaka reg = VOLATILE_REF(lcdc + 0x54); 586 1.3 nonaka DPRINTF((TEXT("LCDBSCNTR: 0x%08x\n"), reg)); 587 1.3 nonaka _mem->unmapPhysicalPage(lcdc); 588 1.3 nonaka #endif 589 1.1 rafal } 590