Stefan Reinauer | 76ce5de | 2006-03-16 00:52:58 +0000 | [diff] [blame] | 1 | /* |
| 2 | * dump mmcr of Elan520 uController (incomplete, see 22005b pg23+). |
| 3 | * |
Stefan Reinauer | e079ce3 | 2010-09-26 15:04:14 +0000 | [diff] [blame] | 4 | * Copyright 2005 Ronald G. Minnich |
Stefan Reinauer | 14e2277 | 2010-04-27 06:56:47 +0000 | [diff] [blame] | 5 | * Copyright 2006 coresystems GmbH |
Stefan Reinauer | 14e2277 | 2010-04-27 06:56:47 +0000 | [diff] [blame] | 6 | * |
Stefan Reinauer | e079ce3 | 2010-09-26 15:04:14 +0000 | [diff] [blame] | 7 | * This program is free software; you can redistribute it and/or modify |
| 8 | * it under the terms of the GNU General Public License as published by |
| 9 | * the Free Software Foundation; either version 2 of the License, or |
| 10 | * (at your option) any later version. |
Stefan Reinauer | 76ce5de | 2006-03-16 00:52:58 +0000 | [diff] [blame] | 11 | * |
Stefan Reinauer | e079ce3 | 2010-09-26 15:04:14 +0000 | [diff] [blame] | 12 | * This program is distributed in the hope that it will be useful, |
| 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| 15 | * GNU General Public License for more details. |
Stefan Reinauer | 76ce5de | 2006-03-16 00:52:58 +0000 | [diff] [blame] | 16 | * |
Stefan Reinauer | e079ce3 | 2010-09-26 15:04:14 +0000 | [diff] [blame] | 17 | * You should have received a copy of the GNU General Public License |
| 18 | * along with this program; if not, write to the Free Software |
| 19 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. |
Stefan Reinauer | 76ce5de | 2006-03-16 00:52:58 +0000 | [diff] [blame] | 20 | */ |
| 21 | |
Stefan Reinauer | e079ce3 | 2010-09-26 15:04:14 +0000 | [diff] [blame] | 22 | |
Stefan Reinauer | 76ce5de | 2006-03-16 00:52:58 +0000 | [diff] [blame] | 23 | #include <errno.h> |
| 24 | #include <fcntl.h> |
| 25 | #include <sys/mman.h> |
| 26 | #include <unistd.h> |
| 27 | #include <stdio.h> |
| 28 | #include <string.h> |
| 29 | #include <stdlib.h> |
| 30 | #include <stdint.h> |
| 31 | #include <getopt.h> |
Stefan Reinauer | f4001cd | 2006-03-17 22:35:56 +0000 | [diff] [blame] | 32 | #include "../../src/include/cpu/amd/sc520.h" |
Stefan Reinauer | 76ce5de | 2006-03-16 00:52:58 +0000 | [diff] [blame] | 33 | |
Stefan Reinauer | f4001cd | 2006-03-17 22:35:56 +0000 | [diff] [blame] | 34 | #define val(x,y) (x->y) |
| 35 | |
| 36 | int print_mmcr(struct mmcr *mmcr) |
| 37 | { |
| 38 | int i; |
| 39 | printf("revid is 0x%x\n\n", val(mmcr, revid)); |
| 40 | printf("cpucontrol is 0x%x\n\n", val(mmcr, cpucontrol)); |
Stefan Reinauer | 14e2277 | 2010-04-27 06:56:47 +0000 | [diff] [blame] | 41 | |
Stefan Reinauer | f4001cd | 2006-03-17 22:35:56 +0000 | [diff] [blame] | 42 | printf("\n"); |
| 43 | printf("drcctl is 0x%x\n", val(mmcr, memregs.drcctl)); |
| 44 | printf("drctmctl is 0x%x\n", val(mmcr, memregs.drctmctl)); |
| 45 | printf("drccfg is 0x%x\n", val(mmcr, memregs.drccfg)); |
Stefan Reinauer | 14e2277 | 2010-04-27 06:56:47 +0000 | [diff] [blame] | 46 | printf("bendaddr is 0x%02x%02x%02x%02x\n", |
Stefan Reinauer | 677267a | 2006-03-18 00:10:29 +0000 | [diff] [blame] | 47 | val(mmcr, memregs.drcbendadr[3]), |
Stefan Reinauer | f4001cd | 2006-03-17 22:35:56 +0000 | [diff] [blame] | 48 | val(mmcr, memregs.drcbendadr[2]), |
Stefan Reinauer | 677267a | 2006-03-18 00:10:29 +0000 | [diff] [blame] | 49 | val(mmcr, memregs.drcbendadr[1]), |
| 50 | val(mmcr, memregs.drcbendadr[0])); |
Stefan Reinauer | f4001cd | 2006-03-17 22:35:56 +0000 | [diff] [blame] | 51 | printf("eccctl is 0x%x\n", val(mmcr, memregs.eccctl)); |
| 52 | printf("eccsta is 0x%x\n", val(mmcr, memregs.eccsta)); |
| 53 | printf("ckbpos is 0x%x\n", val(mmcr, memregs.eccckbpos)); |
| 54 | printf("cktest is 0x%x\n", val(mmcr, memregs.ecccktest)); |
Vikram Narayanan | d2b31bd | 2012-01-25 17:44:20 +0530 | [diff] [blame] | 55 | printf("sbadd is 0x%lx\n", val(mmcr, memregs.eccsbadd)); |
| 56 | printf("mbadd is 0x%lx\n", val(mmcr, memregs.eccmbadd)); |
Stefan Reinauer | 14e2277 | 2010-04-27 06:56:47 +0000 | [diff] [blame] | 57 | |
Stefan Reinauer | f4001cd | 2006-03-17 22:35:56 +0000 | [diff] [blame] | 58 | printf("\n"); |
| 59 | printf("dbctl is 0x%x\n", val(mmcr, dbctl.dbctl)); |
Stefan Reinauer | 14e2277 | 2010-04-27 06:56:47 +0000 | [diff] [blame] | 60 | |
Stefan Reinauer | f4001cd | 2006-03-17 22:35:56 +0000 | [diff] [blame] | 61 | printf("\n"); |
| 62 | printf("bootcs is 0x%x\n", val(mmcr, romregs.bootcs)); |
| 63 | printf("romcs1 is 0x%x\n", val(mmcr, romregs.romcs1)); |
| 64 | printf("romcs2 is 0x%x\n", val(mmcr, romregs.romcs2)); |
Stefan Reinauer | 14e2277 | 2010-04-27 06:56:47 +0000 | [diff] [blame] | 65 | |
Stefan Reinauer | f4001cd | 2006-03-17 22:35:56 +0000 | [diff] [blame] | 66 | printf("\n"); |
| 67 | printf("hbctl is 0x%x\n", val(mmcr, hostbridge.ctl)); |
| 68 | printf("hbtgtirqctl is 0x%x\n", val(mmcr, hostbridge.tgtirqctl)); |
| 69 | printf("hbtgtirqsta is 0x%x\n", val(mmcr, hostbridge.tgtirqsta)); |
| 70 | printf("hbmstirqctl is 0x%x\n", val(mmcr, hostbridge.mstirqctl)); |
| 71 | printf("hbmstirqsta is 0x%x\n", val(mmcr, hostbridge.mstirqsta)); |
Vikram Narayanan | d2b31bd | 2012-01-25 17:44:20 +0530 | [diff] [blame] | 72 | printf("mstintadd is 0x%lx\n", val(mmcr, hostbridge.mstintadd)); |
Stefan Reinauer | 14e2277 | 2010-04-27 06:56:47 +0000 | [diff] [blame] | 73 | |
| 74 | |
Stefan Reinauer | f4001cd | 2006-03-17 22:35:56 +0000 | [diff] [blame] | 75 | printf("\n"); |
| 76 | printf("sysarbctl is 0x%x\n", val(mmcr, sysarb.ctl)); |
| 77 | printf("pciarbsta is 0x%x\n", val(mmcr, sysarb.sta)); |
| 78 | printf("sysarbmenb is 0x%x\n", val(mmcr, sysarb.menb)); |
Vikram Narayanan | d2b31bd | 2012-01-25 17:44:20 +0530 | [diff] [blame] | 79 | printf("arbprictl is 0x%lx\n", val(mmcr, sysarb.prictl)); |
Stefan Reinauer | 14e2277 | 2010-04-27 06:56:47 +0000 | [diff] [blame] | 80 | |
Stefan Reinauer | f4001cd | 2006-03-17 22:35:56 +0000 | [diff] [blame] | 81 | printf("\n"); |
| 82 | printf("adddecctl is 0x%x\n", val(mmcr, sysmap.adddecctl)); |
| 83 | printf("wpvsta is 0x%x\n", val(mmcr, sysmap.wpvsta)); |
| 84 | for (i=0; i<16; i++) |
Vikram Narayanan | d2b31bd | 2012-01-25 17:44:20 +0530 | [diff] [blame] | 85 | printf("par %d is 0x%lx\n", i, val(mmcr, sysmap.par[i])); |
Stefan Reinauer | 14e2277 | 2010-04-27 06:56:47 +0000 | [diff] [blame] | 86 | |
Stefan Reinauer | f4001cd | 2006-03-17 22:35:56 +0000 | [diff] [blame] | 87 | printf("\n"); |
| 88 | printf("gpecho is 0x%x\n", val(mmcr, gpctl.gpecho)); |
| 89 | printf("gpcsdw is 0x%x\n", val(mmcr, gpctl.gpcsdw)); |
| 90 | printf("gpcsqual is 0x%x\n", val(mmcr, gpctl.gpcsqual)); |
| 91 | printf("gpcsrt is 0x%x\n", val(mmcr, gpctl.gpcsrt)); |
| 92 | printf("gpcspw is 0x%x\n", val(mmcr, gpctl.gpcspw)); |
| 93 | printf("gpcsoff is 0x%x\n", val(mmcr, gpctl.gpcsoff)); |
| 94 | printf("gprdw is 0x%x\n", val(mmcr, gpctl.gprdw)); |
| 95 | printf("gprdoff is 0x%x\n", val(mmcr, gpctl.gprdoff)); |
| 96 | printf("gpwrw is 0x%x\n", val(mmcr, gpctl.gpwrw)); |
| 97 | printf("gpwroff is 0x%x\n", val(mmcr, gpctl.gpwroff)); |
| 98 | printf("gpalew is 0x%x\n", val(mmcr, gpctl.gpalew)); |
| 99 | printf("gpaleoff is 0x%x\n", val(mmcr, gpctl.gpaleoff)); |
Stefan Reinauer | 14e2277 | 2010-04-27 06:56:47 +0000 | [diff] [blame] | 100 | |
Stefan Reinauer | f4001cd | 2006-03-17 22:35:56 +0000 | [diff] [blame] | 101 | printf("\n"); |
Stefan Reinauer | 14e2277 | 2010-04-27 06:56:47 +0000 | [diff] [blame] | 102 | |
Stefan Reinauer | f4001cd | 2006-03-17 22:35:56 +0000 | [diff] [blame] | 103 | printf("piopfs15_0 is 0x%x\n", val(mmcr, pio.pfs15_0)); |
| 104 | printf("piopfs31_16 is 0x%x\n", val(mmcr, pio.pfs31_16)); |
| 105 | printf("cspfs is 0x%x\n", val(mmcr, pio.cspfs)); |
| 106 | printf("clksel is 0x%x\n", val(mmcr, pio.clksel)); |
| 107 | printf("dsctl is 0x%x\n", val(mmcr, pio.dsctl)); |
| 108 | printf("piodir15_0 is 0x%x\n", val(mmcr, pio.dir15_0)); |
| 109 | printf("piodir31_16 is 0x%x\n", val(mmcr, pio.dir31_16)); |
| 110 | printf("piodata15_0 is 0x%x\n", val(mmcr, pio.data15_0)); |
| 111 | printf("piodata31_16 is 0x%x\n", val(mmcr, pio.data31_16)); |
| 112 | printf("pioset15_0 is 0x%x\n", val(mmcr, pio.set15_0)); |
| 113 | printf("pioset31_16 is 0x%x\n", val(mmcr, pio.set31_16)); |
| 114 | printf("pioclr15_0 is 0x%x\n", val(mmcr, pio.clr15_0)); |
| 115 | printf("pioclr31_16 is 0x%x\n", val(mmcr, pio.clr31_16)); |
Stefan Reinauer | 14e2277 | 2010-04-27 06:56:47 +0000 | [diff] [blame] | 116 | |
Stefan Reinauer | f4001cd | 2006-03-17 22:35:56 +0000 | [diff] [blame] | 117 | printf("swtmrmilli is 0x%x\n", val(mmcr, swtmr.swtmrmilli)); |
| 118 | printf("swtmrmicro is 0x%x\n", val(mmcr, swtmr.swtmrmicro)); |
| 119 | printf("swtmrcfg is 0x%x\n", val(mmcr, swtmr.swtmrcfg)); |
Stefan Reinauer | 14e2277 | 2010-04-27 06:56:47 +0000 | [diff] [blame] | 120 | |
Stefan Reinauer | f4001cd | 2006-03-17 22:35:56 +0000 | [diff] [blame] | 121 | printf("status is 0x%x\n", val(mmcr, gptimers.status)); |
| 122 | printf("pad is 0x%x\n", val(mmcr, gptimers.pad)); |
Stefan Reinauer | 14e2277 | 2010-04-27 06:56:47 +0000 | [diff] [blame] | 123 | |
Stefan Reinauer | f4001cd | 2006-03-17 22:35:56 +0000 | [diff] [blame] | 124 | printf("timers[0].ctl is 0x%x\n", val(mmcr, gptimers.timer[0].ctl)); |
| 125 | printf("timers[0].cnt is 0x%x\n", val(mmcr, gptimers.timer[0].cnt)); |
| 126 | printf("timers[0].maxcmpa is 0x%x\n", val(mmcr, gptimers.timer[0].maxcmpa)); |
| 127 | printf("timers[0].maxcmpb is 0x%x\n", val(mmcr, gptimers.timer[0].maxcmpb)); |
Stefan Reinauer | 14e2277 | 2010-04-27 06:56:47 +0000 | [diff] [blame] | 128 | |
Stefan Reinauer | f4001cd | 2006-03-17 22:35:56 +0000 | [diff] [blame] | 129 | printf("timers[1].ctl is 0x%x\n", val(mmcr, gptimers.timer[1].ctl)); |
| 130 | printf("timers[1].cnt is 0x%x\n", val(mmcr, gptimers.timer[1].cnt)); |
| 131 | printf("timers[1].maxcmpa is 0x%x\n", val(mmcr, gptimers.timer[1].maxcmpa)); |
| 132 | printf("timers[1].maxcmpb is 0x%x\n", val(mmcr, gptimers.timer[1].maxcmpb)); |
| 133 | printf("timers[2].ctl is 0x%x\n", val(mmcr, gptimers.ctl2)); |
| 134 | printf("timers[2].cnt is 0x%x\n", val(mmcr, gptimers.cnt2)); |
| 135 | printf("timers[2].maxcmpa is 0x%x\n", val(mmcr, gptimers.maxcmpa2)); |
Stefan Reinauer | 14e2277 | 2010-04-27 06:56:47 +0000 | [diff] [blame] | 136 | |
Stefan Reinauer | f4001cd | 2006-03-17 22:35:56 +0000 | [diff] [blame] | 137 | printf("ctl is 0x%x\n", val(mmcr, watchdog.ctl)); |
| 138 | printf("cntll is 0x%x\n", val(mmcr, watchdog.cntll)); |
| 139 | printf("cntlh is 0x%x\n", val(mmcr, watchdog.cntlh)); |
Stefan Reinauer | 14e2277 | 2010-04-27 06:56:47 +0000 | [diff] [blame] | 140 | |
Stefan Reinauer | f4001cd | 2006-03-17 22:35:56 +0000 | [diff] [blame] | 141 | printf("uart 1 ctl is 0x%x\n", val(mmcr, uarts.uart[0].ctl)); |
| 142 | printf("uart 1 sta is 0x%x\n", val(mmcr, uarts.uart[0].sta)); |
| 143 | printf("uart 1 fcrshad is 0x%x\n", val(mmcr, uarts.uart[0].fcrshad)); |
| 144 | printf("uart 2 ctl is 0x%x\n", val(mmcr, uarts.uart[1].ctl)); |
| 145 | printf("uart 2 sta is 0x%x\n", val(mmcr, uarts.uart[1].sta)); |
| 146 | printf("uart 2 fcrshad is 0x%x\n", val(mmcr, uarts.uart[1].fcrshad)); |
Stefan Reinauer | 14e2277 | 2010-04-27 06:56:47 +0000 | [diff] [blame] | 147 | |
Stefan Reinauer | f4001cd | 2006-03-17 22:35:56 +0000 | [diff] [blame] | 148 | printf("ssi ctl is 0x%x\n", val(mmcr, ssi.ctl)); |
| 149 | printf("ssi xmit is 0x%x\n", val(mmcr, ssi.xmit)); |
| 150 | printf("ssi cmd is 0x%x\n", val(mmcr, ssi.cmd)); |
| 151 | printf("ssi sta is 0x%x\n", val(mmcr, ssi.sta)); |
| 152 | printf("ssi rcv is 0x%x\n", val(mmcr, ssi.rcv)); |
Stefan Reinauer | 14e2277 | 2010-04-27 06:56:47 +0000 | [diff] [blame] | 153 | |
Stefan Reinauer | f4001cd | 2006-03-17 22:35:56 +0000 | [diff] [blame] | 154 | printf("pcicr is 0x%x\n", val(mmcr, pic.pcicr)); |
| 155 | printf("mpicmode is 0x%x\n", val(mmcr, pic.mpicmode)); |
| 156 | printf("sl1picmode is 0x%x\n", val(mmcr, pic.sl1picmode)); |
| 157 | printf("sl2picmode is 0x%x\n", val(mmcr, pic.sl2picmode)); |
| 158 | printf("swint16_1 is 0x%x\n", val(mmcr, pic.swint16_1)); |
| 159 | printf("swint22_17 is 0x%x\n", val(mmcr, pic.swint22_17)); |
| 160 | printf("intpinpol is 0x%x\n", val(mmcr, pic.intpinpol)); |
| 161 | printf("pichostmap is 0x%x\n", val(mmcr, pic.pichostmap)); |
| 162 | printf("eccmap is 0x%x\n", val(mmcr, pic.eccmap)); |
| 163 | printf("gptmr0map is 0x%x\n", val(mmcr, pic.gptmr0map)); |
| 164 | printf("gptmr1map is 0x%x\n", val(mmcr, pic.gptmr1map)); |
| 165 | printf("gptmr2map is 0x%x\n", val(mmcr, pic.gptmr2map)); |
| 166 | printf("pit0map is 0x%x\n", val(mmcr, pic.pit0map)); |
| 167 | printf("pit1map is 0x%x\n", val(mmcr, pic.pit1map)); |
| 168 | printf("pit2map is 0x%x\n", val(mmcr, pic.pit2map)); |
| 169 | printf("uart1map is 0x%x\n", val(mmcr, pic.uart1map)); |
| 170 | printf("uart2map is 0x%x\n", val(mmcr, pic.uart2map)); |
| 171 | printf("pciintamap is 0x%x\n", val(mmcr, pic.pciintamap)); |
| 172 | printf("pciintbmap is 0x%x\n", val(mmcr, pic.pciintbmap)); |
| 173 | printf("pciintcmap is 0x%x\n", val(mmcr, pic.pciintcmap)); |
| 174 | printf("pciintdmap is 0x%x\n", val(mmcr, pic.pciintdmap)); |
| 175 | printf("dmabcintmap is 0x%x\n", val(mmcr, pic.dmabcintmap)); |
| 176 | printf("ssimap is 0x%x\n", val(mmcr, pic.ssimap)); |
| 177 | printf("wdtmap is 0x%x\n", val(mmcr, pic.wdtmap)); |
| 178 | printf("rtcmap is 0x%x\n", val(mmcr, pic.rtcmap)); |
| 179 | printf("wpvmap is 0x%x\n", val(mmcr, pic.wpvmap)); |
| 180 | printf("icemap is 0x%x\n", val(mmcr, pic.icemap)); |
| 181 | printf("ferrmap is 0x%x\n", val(mmcr, pic.ferrmap)); |
| 182 | printf("gp0imap is 0x%x\n", val(mmcr, pic.gp0imap)); |
| 183 | printf("gp1imap is 0x%x\n", val(mmcr, pic.gp1imap)); |
| 184 | printf("gp2imap is 0x%x\n", val(mmcr, pic.gp2imap)); |
| 185 | printf("gp3imap is 0x%x\n", val(mmcr, pic.gp3imap)); |
| 186 | printf("gp4imap is 0x%x\n", val(mmcr, pic.gp4imap)); |
| 187 | printf("gp5imap is 0x%x\n", val(mmcr, pic.gp5imap)); |
| 188 | printf("gp6imap is 0x%x\n", val(mmcr, pic.gp6imap)); |
| 189 | printf("gp7imap is 0x%x\n", val(mmcr, pic.gp7imap)); |
| 190 | printf("gp8imap is 0x%x\n", val(mmcr, pic.gp8imap)); |
| 191 | printf("gp9imap is 0x%x\n", val(mmcr, pic.gp9imap)); |
| 192 | printf("gp10imap is 0x%x\n", val(mmcr, pic.gp10imap)); |
Stefan Reinauer | 14e2277 | 2010-04-27 06:56:47 +0000 | [diff] [blame] | 193 | |
Stefan Reinauer | f4001cd | 2006-03-17 22:35:56 +0000 | [diff] [blame] | 194 | printf("sysinfo is 0x%x\n", val(mmcr, reset.sysinfo)); |
| 195 | printf("rescfg is 0x%x\n", val(mmcr, reset.rescfg)); |
| 196 | printf("ressta is 0x%x\n", val(mmcr, reset.ressta)); |
Stefan Reinauer | 14e2277 | 2010-04-27 06:56:47 +0000 | [diff] [blame] | 197 | |
| 198 | |
Stefan Reinauer | f4001cd | 2006-03-17 22:35:56 +0000 | [diff] [blame] | 199 | printf("ctl is 0x%x\n", val(mmcr, dmacontrol.ctl)); |
| 200 | printf("mmio is 0x%x\n", val(mmcr, dmacontrol.mmio)); |
| 201 | printf("extchanmapa is 0x%x\n", val(mmcr, dmacontrol.extchanmapa)); |
| 202 | printf("extchanmapb is 0x%x\n", val(mmcr, dmacontrol.extchanmapb)); |
| 203 | printf("extpg0 is 0x%x\n", val(mmcr, dmacontrol.extpg0)); |
| 204 | printf("extpg1 is 0x%x\n", val(mmcr, dmacontrol.extpg1)); |
| 205 | printf("extpg2 is 0x%x\n", val(mmcr, dmacontrol.extpg2)); |
| 206 | printf("extpg3 is 0x%x\n", val(mmcr, dmacontrol.extpg3)); |
| 207 | printf("extpg5 is 0x%x\n", val(mmcr, dmacontrol.extpg5)); |
| 208 | printf("extpg6 is 0x%x\n", val(mmcr, dmacontrol.extpg6)); |
| 209 | printf("extpg7 is 0x%x\n", val(mmcr, dmacontrol.extpg7)); |
| 210 | printf("exttc3 is 0x%x\n", val(mmcr, dmacontrol.exttc3)); |
| 211 | printf("exttc5 is 0x%x\n", val(mmcr, dmacontrol.exttc5)); |
| 212 | printf("exttc6 is 0x%x\n", val(mmcr, dmacontrol.exttc6)); |
| 213 | printf("exttc7 is 0x%x\n", val(mmcr, dmacontrol.exttc7)); |
| 214 | printf("bcctl is 0x%x\n", val(mmcr, dmacontrol.bcctl)); |
| 215 | printf("bcsta is 0x%x\n", val(mmcr, dmacontrol.bcsta)); |
| 216 | printf("bsintenb is 0x%x\n", val(mmcr, dmacontrol.bsintenb)); |
| 217 | printf("bcval is 0x%x\n", val(mmcr, dmacontrol.bcval)); |
| 218 | printf("nxtaddl3 is 0x%x\n", val(mmcr, dmacontrol.nxtaddl3)); |
| 219 | printf("nxtaddh3 is 0x%x\n", val(mmcr, dmacontrol.nxtaddh3)); |
| 220 | printf("nxtaddl5 is 0x%x\n", val(mmcr, dmacontrol.nxtaddl5)); |
| 221 | printf("nxtaddh5 is 0x%x\n", val(mmcr, dmacontrol.nxtaddh5)); |
| 222 | printf("nxtaddl6 is 0x%x\n", val(mmcr, dmacontrol.nxtaddl6)); |
| 223 | printf("nxtaddh6 is 0x%x\n", val(mmcr, dmacontrol.nxtaddh6)); |
| 224 | printf("nxtaddl7 is 0x%x\n", val(mmcr, dmacontrol.nxtaddl7)); |
| 225 | printf("nxtaddh7 is 0x%x\n", val(mmcr, dmacontrol.nxtaddh7)); |
| 226 | printf("nxtttcl3 is 0x%x\n", val(mmcr, dmacontrol.nxtttcl3)); |
| 227 | printf("nxtttch3 is 0x%x\n", val(mmcr, dmacontrol.nxtttch3)); |
| 228 | printf("nxtttcl5 is 0x%x\n", val(mmcr, dmacontrol.nxtttcl5)); |
| 229 | printf("nxtttch5 is 0x%x\n", val(mmcr, dmacontrol.nxtttch5)); |
| 230 | printf("nxtttcl6 is 0x%x\n", val(mmcr, dmacontrol.nxtttcl6)); |
| 231 | printf("nxtttch6 is 0x%x\n", val(mmcr, dmacontrol.nxtttch6)); |
| 232 | printf("nxtttcl7 is 0x%x\n", val(mmcr, dmacontrol.nxtttcl7)); |
| 233 | printf("nxtttch7 is 0x%x\n", val(mmcr, dmacontrol.nxtttch7)); |
Stefan Reinauer | 14e2277 | 2010-04-27 06:56:47 +0000 | [diff] [blame] | 234 | |
Stefan Reinauer | f4001cd | 2006-03-17 22:35:56 +0000 | [diff] [blame] | 235 | return 0; |
| 236 | } |
| 237 | |
| 238 | int map_mmcr(void) |
Stefan Reinauer | 76ce5de | 2006-03-16 00:52:58 +0000 | [diff] [blame] | 239 | { |
| 240 | int fd_mem; |
| 241 | volatile uint8_t *mmcr; |
| 242 | unsigned long size=4096; |
| 243 | |
| 244 | if ((fd_mem = open("/dev/mem", O_RDWR)) < 0) { |
| 245 | perror("Can not open /dev/mem"); |
| 246 | exit(1); |
| 247 | } |
| 248 | |
| 249 | if (getpagesize() > size) { |
| 250 | size = getpagesize(); |
| 251 | } |
Stefan Reinauer | 14e2277 | 2010-04-27 06:56:47 +0000 | [diff] [blame] | 252 | |
Stefan Reinauer | 76ce5de | 2006-03-16 00:52:58 +0000 | [diff] [blame] | 253 | mmcr = mmap(0, size, PROT_WRITE | PROT_READ, MAP_SHARED, |
| 254 | fd_mem, (off_t) (0xFFFEF000)); |
Stefan Reinauer | 14e2277 | 2010-04-27 06:56:47 +0000 | [diff] [blame] | 255 | |
Stefan Reinauer | 76ce5de | 2006-03-16 00:52:58 +0000 | [diff] [blame] | 256 | if (mmcr == MAP_FAILED) { |
| 257 | perror("Error MMAP /dev/mem"); |
| 258 | exit(1); |
| 259 | } |
Stefan Reinauer | 14e2277 | 2010-04-27 06:56:47 +0000 | [diff] [blame] | 260 | |
Stefan Reinauer | f4001cd | 2006-03-17 22:35:56 +0000 | [diff] [blame] | 261 | |
| 262 | print_mmcr((struct mmcr *)mmcr); |
| 263 | #if 0 |
| 264 | |
Stefan Reinauer | 76ce5de | 2006-03-16 00:52:58 +0000 | [diff] [blame] | 265 | printf("ElanSC520 uC Rev. ID : %04x\n",*(uint16_t *)mmcr); |
| 266 | printf("Am5x86 CPU Control : %04x\n",*(uint16_t *)(mmcr+2)); |
| 267 | printf("\n"); |
| 268 | printf("SDRAM Control : %04x\n",*(uint16_t *)(mmcr+0x10)); |
| 269 | printf("SDRAM Timing Control : %04x\n",*(uint16_t *)(mmcr+0x12)); |
| 270 | printf("SDRAM Bank Config : %04x\n",*(uint16_t *)(mmcr+0x14)); |
| 271 | printf("SDRAM Bank 0-3 Ending : %04x\n",*(uint16_t *)(mmcr+0x18)); |
| 272 | printf("ECC Control : %04x\n",*(uint16_t *)(mmcr+0x20)); |
| 273 | printf("ECC Status : %04x\n",*(uint16_t *)(mmcr+0x21)); |
| 274 | printf("ECC Check Bit Position: %04x\n",*(uint16_t *)(mmcr+0x22)); |
| 275 | printf("ECC Check Code Test : %04x\n",*(uint16_t *)(mmcr+0x23)); |
| 276 | printf("ECC Single Bit ErrAddr: %04x\n",*(uint16_t *)(mmcr+0x24)); |
| 277 | printf("ECC Multi Bit ErrAddr : %04x\n",*(uint16_t *)(mmcr+0x28)); |
| 278 | printf("\n"); |
| 279 | printf("SDRAM Buffer Control : %04x\n",*(uint16_t *)(mmcr+0x40)); |
| 280 | printf("\n"); |
| 281 | printf("BOOTCS Control : %04x\n",*(uint16_t *)(mmcr+0x50)); |
| 282 | printf("BOOTCS1 Control : %04x\n",*(uint16_t *)(mmcr+0x54)); |
| 283 | printf("BOOTCS2 Control : %04x\n",*(uint16_t *)(mmcr+0x56)); |
| 284 | printf("\n"); |
| 285 | |
| 286 | printf("Adr Decode Control : %02x\n",*(uint8_t *)(mmcr+0x80)); |
| 287 | printf("WrProt Violation Stat.: %04x\n",*(uint16_t *)(mmcr+0x82)); |
| 288 | printf("PAR 0 : %08x\n",*(uint32_t *)(mmcr+0x88)); |
| 289 | printf("PAR 1 : %08x\n",*(uint32_t *)(mmcr+0x8C)); |
| 290 | printf("PAR 2 : %08x\n",*(uint32_t *)(mmcr+0x90)); |
| 291 | printf("PAR 3 : %08x\n",*(uint32_t *)(mmcr+0x94)); |
| 292 | printf("PAR 4 : %08x\n",*(uint32_t *)(mmcr+0x98)); |
| 293 | printf("PAR 5 : %08x\n",*(uint32_t *)(mmcr+0x9C)); |
| 294 | printf("PAR 6 : %08x\n",*(uint32_t *)(mmcr+0xA0)); |
| 295 | printf("PAR 7 : %08x\n",*(uint32_t *)(mmcr+0xA4)); |
| 296 | printf("PAR 8 : %08x\n",*(uint32_t *)(mmcr+0xA8)); |
| 297 | printf("PAR 9 : %08x\n",*(uint32_t *)(mmcr+0xAC)); |
| 298 | printf("PAR 10 : %08x\n",*(uint32_t *)(mmcr+0xB0)); |
| 299 | printf("PAR 11 : %08x\n",*(uint32_t *)(mmcr+0xB4)); |
| 300 | printf("PAR 12 : %08x\n",*(uint32_t *)(mmcr+0xB8)); |
| 301 | printf("PAR 13 : %08x\n",*(uint32_t *)(mmcr+0xBC)); |
| 302 | printf("PAR 14 : %08x\n",*(uint32_t *)(mmcr+0xC0)); |
| 303 | printf("PAR 15 : %08x\n",*(uint32_t *)(mmcr+0xC4)); |
Stefan Reinauer | f4001cd | 2006-03-17 22:35:56 +0000 | [diff] [blame] | 304 | #endif |
Stefan Reinauer | 76ce5de | 2006-03-16 00:52:58 +0000 | [diff] [blame] | 305 | munmap((void *) mmcr, size); |
| 306 | return 0; |
| 307 | } |
| 308 | |
| 309 | int main(int argc, char *argv[]) |
| 310 | { |
Stefan Reinauer | f4001cd | 2006-03-17 22:35:56 +0000 | [diff] [blame] | 311 | map_mmcr(); |
Stefan Reinauer | 76ce5de | 2006-03-16 00:52:58 +0000 | [diff] [blame] | 312 | return 0; |
| 313 | } |