Commit a8f48dcc7c877593b1c99bf43e33fc63079570af

Authored by blueswir1
1 parent e64d7d59

Remove address masking after some rearranging

git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@5854 c046a42c-6fe2-441c-8c8c-71466251a162
hw/slavio_intctl.c
@@ -49,8 +49,9 @@ do { printf("IRQ: " fmt , ##args); } while (0) @@ -49,8 +49,9 @@ do { printf("IRQ: " fmt , ##args); } while (0)
49 #define MAX_CPUS 16 49 #define MAX_CPUS 16
50 #define MAX_PILS 16 50 #define MAX_PILS 16
51 51
  52 +struct SLAVIO_CPUINTCTLState;
  53 +
52 typedef struct SLAVIO_INTCTLState { 54 typedef struct SLAVIO_INTCTLState {
53 - uint32_t intreg_pending[MAX_CPUS];  
54 uint32_t intregm_pending; 55 uint32_t intregm_pending;
55 uint32_t intregm_disabled; 56 uint32_t intregm_disabled;
56 uint32_t target_cpu; 57 uint32_t target_cpu;
@@ -61,13 +62,18 @@ typedef struct SLAVIO_INTCTLState { @@ -61,13 +62,18 @@ typedef struct SLAVIO_INTCTLState {
61 const uint32_t *intbit_to_level; 62 const uint32_t *intbit_to_level;
62 uint32_t cputimer_lbit, cputimer_mbit; 63 uint32_t cputimer_lbit, cputimer_mbit;
63 uint32_t pil_out[MAX_CPUS]; 64 uint32_t pil_out[MAX_CPUS];
  65 + struct SLAVIO_CPUINTCTLState *slaves[MAX_CPUS];
64 } SLAVIO_INTCTLState; 66 } SLAVIO_INTCTLState;
65 67
  68 +typedef struct SLAVIO_CPUINTCTLState {
  69 + uint32_t intreg_pending;
  70 + SLAVIO_INTCTLState *master;
  71 + uint32_t cpu;
  72 +} SLAVIO_CPUINTCTLState;
  73 +
66 #define INTCTL_MAXADDR 0xf 74 #define INTCTL_MAXADDR 0xf
67 #define INTCTL_SIZE (INTCTL_MAXADDR + 1) 75 #define INTCTL_SIZE (INTCTL_MAXADDR + 1)
68 -#define INTCTLM_MAXADDR 0x13  
69 -#define INTCTLM_SIZE (INTCTLM_MAXADDR + 1)  
70 -#define INTCTLM_MASK 0x1f 76 +#define INTCTLM_SIZE 0x14
71 #define MASTER_IRQ_MASK ~0x0fa2007f 77 #define MASTER_IRQ_MASK ~0x0fa2007f
72 #define MASTER_DISABLE 0x80000000 78 #define MASTER_DISABLE 0x80000000
73 #define CPU_SOFTIRQ_MASK 0xfffe0000 79 #define CPU_SOFTIRQ_MASK 0xfffe0000
@@ -75,20 +81,18 @@ typedef struct SLAVIO_INTCTLState { @@ -75,20 +81,18 @@ typedef struct SLAVIO_INTCTLState {
75 #define CPU_IRQ_INT15_IN 0x0004000 81 #define CPU_IRQ_INT15_IN 0x0004000
76 #define CPU_IRQ_INT15_MASK 0x80000000 82 #define CPU_IRQ_INT15_MASK 0x80000000
77 83
78 -static void slavio_check_interrupts(void *opaque); 84 +static void slavio_check_interrupts(SLAVIO_INTCTLState *s);
79 85
80 // per-cpu interrupt controller 86 // per-cpu interrupt controller
81 static uint32_t slavio_intctl_mem_readl(void *opaque, target_phys_addr_t addr) 87 static uint32_t slavio_intctl_mem_readl(void *opaque, target_phys_addr_t addr)
82 { 88 {
83 - SLAVIO_INTCTLState *s = opaque; 89 + SLAVIO_CPUINTCTLState *s = opaque;
84 uint32_t saddr, ret; 90 uint32_t saddr, ret;
85 - int cpu;  
86 91
87 - cpu = (addr & (MAX_CPUS - 1) * TARGET_PAGE_SIZE) >> 12;  
88 - saddr = (addr & INTCTL_MAXADDR) >> 2; 92 + saddr = addr >> 2;
89 switch (saddr) { 93 switch (saddr) {
90 case 0: 94 case 0:
91 - ret = s->intreg_pending[cpu]; 95 + ret = s->intreg_pending;
92 break; 96 break;
93 default: 97 default:
94 ret = 0; 98 ret = 0;
@@ -102,29 +106,27 @@ static uint32_t slavio_intctl_mem_readl(void *opaque, target_phys_addr_t addr) @@ -102,29 +106,27 @@ static uint32_t slavio_intctl_mem_readl(void *opaque, target_phys_addr_t addr)
102 static void slavio_intctl_mem_writel(void *opaque, target_phys_addr_t addr, 106 static void slavio_intctl_mem_writel(void *opaque, target_phys_addr_t addr,
103 uint32_t val) 107 uint32_t val)
104 { 108 {
105 - SLAVIO_INTCTLState *s = opaque; 109 + SLAVIO_CPUINTCTLState *s = opaque;
106 uint32_t saddr; 110 uint32_t saddr;
107 - int cpu;  
108 111
109 - cpu = (addr & (MAX_CPUS - 1) * TARGET_PAGE_SIZE) >> 12;  
110 - saddr = (addr & INTCTL_MAXADDR) >> 2; 112 + saddr = addr >> 2;
111 DPRINTF("write cpu %d reg 0x" TARGET_FMT_plx " = %x\n", cpu, addr, val); 113 DPRINTF("write cpu %d reg 0x" TARGET_FMT_plx " = %x\n", cpu, addr, val);
112 switch (saddr) { 114 switch (saddr) {
113 case 1: // clear pending softints 115 case 1: // clear pending softints
114 if (val & CPU_IRQ_INT15_IN) 116 if (val & CPU_IRQ_INT15_IN)
115 val |= CPU_IRQ_INT15_MASK; 117 val |= CPU_IRQ_INT15_MASK;
116 val &= CPU_SOFTIRQ_MASK; 118 val &= CPU_SOFTIRQ_MASK;
117 - s->intreg_pending[cpu] &= ~val;  
118 - slavio_check_interrupts(s);  
119 - DPRINTF("Cleared cpu %d irq mask %x, curmask %x\n", cpu, val,  
120 - s->intreg_pending[cpu]); 119 + s->intreg_pending &= ~val;
  120 + slavio_check_interrupts(s->master);
  121 + DPRINTF("Cleared cpu %d irq mask %x, curmask %x\n", s->cpu, val,
  122 + s->intreg_pending);
121 break; 123 break;
122 case 2: // set softint 124 case 2: // set softint
123 val &= CPU_SOFTIRQ_MASK; 125 val &= CPU_SOFTIRQ_MASK;
124 - s->intreg_pending[cpu] |= val;  
125 - slavio_check_interrupts(s);  
126 - DPRINTF("Set cpu %d irq mask %x, curmask %x\n", cpu, val,  
127 - s->intreg_pending[cpu]); 126 + s->intreg_pending |= val;
  127 + slavio_check_interrupts(s->master);
  128 + DPRINTF("Set cpu %d irq mask %x, curmask %x\n", s->cpu, val,
  129 + s->intreg_pending);
128 break; 130 break;
129 default: 131 default:
130 break; 132 break;
@@ -149,7 +151,7 @@ static uint32_t slavio_intctlm_mem_readl(void *opaque, target_phys_addr_t addr) @@ -149,7 +151,7 @@ static uint32_t slavio_intctlm_mem_readl(void *opaque, target_phys_addr_t addr)
149 SLAVIO_INTCTLState *s = opaque; 151 SLAVIO_INTCTLState *s = opaque;
150 uint32_t saddr, ret; 152 uint32_t saddr, ret;
151 153
152 - saddr = (addr & INTCTLM_MASK) >> 2; 154 + saddr = addr >> 2;
153 switch (saddr) { 155 switch (saddr) {
154 case 0: 156 case 0:
155 ret = s->intregm_pending & ~MASTER_DISABLE; 157 ret = s->intregm_pending & ~MASTER_DISABLE;
@@ -175,7 +177,7 @@ static void slavio_intctlm_mem_writel(void *opaque, target_phys_addr_t addr, @@ -175,7 +177,7 @@ static void slavio_intctlm_mem_writel(void *opaque, target_phys_addr_t addr,
175 SLAVIO_INTCTLState *s = opaque; 177 SLAVIO_INTCTLState *s = opaque;
176 uint32_t saddr; 178 uint32_t saddr;
177 179
178 - saddr = (addr & INTCTLM_MASK) >> 2; 180 + saddr = addr >> 2;
179 DPRINTF("write system reg 0x" TARGET_FMT_plx " = %x\n", addr, val); 181 DPRINTF("write system reg 0x" TARGET_FMT_plx " = %x\n", addr, val);
180 switch (saddr) { 182 switch (saddr) {
181 case 2: // clear (enable) 183 case 2: // clear (enable)
@@ -223,7 +225,8 @@ void slavio_pic_info(void *opaque) @@ -223,7 +225,8 @@ void slavio_pic_info(void *opaque)
223 int i; 225 int i;
224 226
225 for (i = 0; i < MAX_CPUS; i++) { 227 for (i = 0; i < MAX_CPUS; i++) {
226 - term_printf("per-cpu %d: pending 0x%08x\n", i, s->intreg_pending[i]); 228 + term_printf("per-cpu %d: pending 0x%08x\n", i,
  229 + s->slaves[i]->intreg_pending);
227 } 230 }
228 term_printf("master: pending 0x%08x, disabled 0x%08x\n", 231 term_printf("master: pending 0x%08x, disabled 0x%08x\n",
229 s->intregm_pending, s->intregm_disabled); 232 s->intregm_pending, s->intregm_disabled);
@@ -247,9 +250,8 @@ void slavio_irq_info(void *opaque) @@ -247,9 +250,8 @@ void slavio_irq_info(void *opaque)
247 #endif 250 #endif
248 } 251 }
249 252
250 -static void slavio_check_interrupts(void *opaque) 253 +static void slavio_check_interrupts(SLAVIO_INTCTLState *s)
251 { 254 {
252 - SLAVIO_INTCTLState *s = opaque;  
253 uint32_t pending = s->intregm_pending, pil_pending; 255 uint32_t pending = s->intregm_pending, pil_pending;
254 unsigned int i, j; 256 unsigned int i, j;
255 257
@@ -265,7 +267,7 @@ static void slavio_check_interrupts(void *opaque) @@ -265,7 +267,7 @@ static void slavio_check_interrupts(void *opaque)
265 pil_pending |= 1 << s->intbit_to_level[j]; 267 pil_pending |= 1 << s->intbit_to_level[j];
266 } 268 }
267 } 269 }
268 - pil_pending |= (s->intreg_pending[i] & CPU_SOFTIRQ_MASK) >> 16; 270 + pil_pending |= (s->slaves[i]->intreg_pending & CPU_SOFTIRQ_MASK) >> 16;
269 271
270 for (j = 0; j < MAX_PILS; j++) { 272 for (j = 0; j < MAX_PILS; j++) {
271 if (pil_pending & (1 << j)) { 273 if (pil_pending & (1 << j)) {
@@ -298,10 +300,10 @@ static void slavio_set_irq(void *opaque, int irq, int level) @@ -298,10 +300,10 @@ static void slavio_set_irq(void *opaque, int irq, int level)
298 s->irq_count[pil]++; 300 s->irq_count[pil]++;
299 #endif 301 #endif
300 s->intregm_pending |= mask; 302 s->intregm_pending |= mask;
301 - s->intreg_pending[s->target_cpu] |= 1 << pil; 303 + s->slaves[s->target_cpu]->intreg_pending |= 1 << pil;
302 } else { 304 } else {
303 s->intregm_pending &= ~mask; 305 s->intregm_pending &= ~mask;
304 - s->intreg_pending[s->target_cpu] &= ~(1 << pil); 306 + s->slaves[s->target_cpu]->intreg_pending &= ~(1 << pil);
305 } 307 }
306 slavio_check_interrupts(s); 308 slavio_check_interrupts(s);
307 } 309 }
@@ -315,10 +317,10 @@ static void slavio_set_timer_irq_cpu(void *opaque, int cpu, int level) @@ -315,10 +317,10 @@ static void slavio_set_timer_irq_cpu(void *opaque, int cpu, int level)
315 317
316 if (level) { 318 if (level) {
317 s->intregm_pending |= s->cputimer_mbit; 319 s->intregm_pending |= s->cputimer_mbit;
318 - s->intreg_pending[cpu] |= s->cputimer_lbit; 320 + s->slaves[cpu]->intreg_pending |= s->cputimer_lbit;
319 } else { 321 } else {
320 s->intregm_pending &= ~s->cputimer_mbit; 322 s->intregm_pending &= ~s->cputimer_mbit;
321 - s->intreg_pending[cpu] &= ~s->cputimer_lbit; 323 + s->slaves[cpu]->intreg_pending &= ~s->cputimer_lbit;
322 } 324 }
323 325
324 slavio_check_interrupts(s); 326 slavio_check_interrupts(s);
@@ -330,7 +332,7 @@ static void slavio_intctl_save(QEMUFile *f, void *opaque) @@ -330,7 +332,7 @@ static void slavio_intctl_save(QEMUFile *f, void *opaque)
330 int i; 332 int i;
331 333
332 for (i = 0; i < MAX_CPUS; i++) { 334 for (i = 0; i < MAX_CPUS; i++) {
333 - qemu_put_be32s(f, &s->intreg_pending[i]); 335 + qemu_put_be32s(f, &s->slaves[i]->intreg_pending);
334 } 336 }
335 qemu_put_be32s(f, &s->intregm_pending); 337 qemu_put_be32s(f, &s->intregm_pending);
336 qemu_put_be32s(f, &s->intregm_disabled); 338 qemu_put_be32s(f, &s->intregm_disabled);
@@ -346,7 +348,7 @@ static int slavio_intctl_load(QEMUFile *f, void *opaque, int version_id) @@ -346,7 +348,7 @@ static int slavio_intctl_load(QEMUFile *f, void *opaque, int version_id)
346 return -EINVAL; 348 return -EINVAL;
347 349
348 for (i = 0; i < MAX_CPUS; i++) { 350 for (i = 0; i < MAX_CPUS; i++) {
349 - qemu_get_be32s(f, &s->intreg_pending[i]); 351 + qemu_get_be32s(f, &s->slaves[i]->intreg_pending);
350 } 352 }
351 qemu_get_be32s(f, &s->intregm_pending); 353 qemu_get_be32s(f, &s->intregm_pending);
352 qemu_get_be32s(f, &s->intregm_disabled); 354 qemu_get_be32s(f, &s->intregm_disabled);
@@ -361,7 +363,7 @@ static void slavio_intctl_reset(void *opaque) @@ -361,7 +363,7 @@ static void slavio_intctl_reset(void *opaque)
361 int i; 363 int i;
362 364
363 for (i = 0; i < MAX_CPUS; i++) { 365 for (i = 0; i < MAX_CPUS; i++) {
364 - s->intreg_pending[i] = 0; 366 + s->slaves[i]->intreg_pending = 0;
365 } 367 }
366 s->intregm_disabled = ~MASTER_IRQ_MASK; 368 s->intregm_disabled = ~MASTER_IRQ_MASK;
367 s->intregm_pending = 0; 369 s->intregm_pending = 0;
@@ -376,6 +378,7 @@ void *slavio_intctl_init(target_phys_addr_t addr, target_phys_addr_t addrg, @@ -376,6 +378,7 @@ void *slavio_intctl_init(target_phys_addr_t addr, target_phys_addr_t addrg,
376 { 378 {
377 int slavio_intctl_io_memory, slavio_intctlm_io_memory, i; 379 int slavio_intctl_io_memory, slavio_intctlm_io_memory, i;
378 SLAVIO_INTCTLState *s; 380 SLAVIO_INTCTLState *s;
  381 + SLAVIO_CPUINTCTLState *slave;
379 382
380 s = qemu_mallocz(sizeof(SLAVIO_INTCTLState)); 383 s = qemu_mallocz(sizeof(SLAVIO_INTCTLState));
381 if (!s) 384 if (!s)
@@ -383,12 +386,21 @@ void *slavio_intctl_init(target_phys_addr_t addr, target_phys_addr_t addrg, @@ -383,12 +386,21 @@ void *slavio_intctl_init(target_phys_addr_t addr, target_phys_addr_t addrg,
383 386
384 s->intbit_to_level = intbit_to_level; 387 s->intbit_to_level = intbit_to_level;
385 for (i = 0; i < MAX_CPUS; i++) { 388 for (i = 0; i < MAX_CPUS; i++) {
  389 + slave = qemu_mallocz(sizeof(SLAVIO_CPUINTCTLState));
  390 + if (!slave)
  391 + return NULL;
  392 +
  393 + slave->cpu = i;
  394 + slave->master = s;
  395 +
386 slavio_intctl_io_memory = cpu_register_io_memory(0, 396 slavio_intctl_io_memory = cpu_register_io_memory(0,
387 slavio_intctl_mem_read, 397 slavio_intctl_mem_read,
388 slavio_intctl_mem_write, 398 slavio_intctl_mem_write,
389 - s);  
390 - cpu_register_physical_memory_offset(addr + i * TARGET_PAGE_SIZE,  
391 - INTCTL_SIZE, slavio_intctl_io_memory, i * TARGET_PAGE_SIZE); 399 + slave);
  400 + cpu_register_physical_memory(addr + i * TARGET_PAGE_SIZE, INTCTL_SIZE,
  401 + slavio_intctl_io_memory);
  402 +
  403 + s->slaves[i] = slave;
392 s->cpu_irqs[i] = parent_irq[i]; 404 s->cpu_irqs[i] = parent_irq[i];
393 } 405 }
394 406
hw/slavio_misc.c
@@ -55,8 +55,7 @@ typedef struct MiscState { @@ -55,8 +55,7 @@ typedef struct MiscState {
55 } MiscState; 55 } MiscState;
56 56
57 #define MISC_SIZE 1 57 #define MISC_SIZE 1
58 -#define SYSCTRL_MAXADDR 3  
59 -#define SYSCTRL_SIZE (SYSCTRL_MAXADDR + 1) 58 +#define SYSCTRL_SIZE 4
60 #define LED_MAXADDR 1 59 #define LED_MAXADDR 1
61 #define LED_SIZE (LED_MAXADDR + 1) 60 #define LED_SIZE (LED_MAXADDR + 1)
62 61
@@ -112,62 +111,96 @@ void slavio_set_power_fail(void *opaque, int power_failing) @@ -112,62 +111,96 @@ void slavio_set_power_fail(void *opaque, int power_failing)
112 slavio_misc_update_irq(s); 111 slavio_misc_update_irq(s);
113 } 112 }
114 113
115 -static void slavio_misc_mem_writeb(void *opaque, target_phys_addr_t addr, 114 +static void slavio_cfg_mem_writeb(void *opaque, target_phys_addr_t addr,
  115 + uint32_t val)
  116 +{
  117 + MiscState *s = opaque;
  118 +
  119 + MISC_DPRINTF("Write config %2.2x\n", val & 0xff);
  120 + s->config = val & 0xff;
  121 + slavio_misc_update_irq(s);
  122 +}
  123 +
  124 +static uint32_t slavio_cfg_mem_readb(void *opaque, target_phys_addr_t addr)
  125 +{
  126 + MiscState *s = opaque;
  127 + uint32_t ret = 0;
  128 +
  129 + ret = s->config;
  130 + MISC_DPRINTF("Read config %2.2x\n", ret);
  131 + return ret;
  132 +}
  133 +
  134 +static CPUReadMemoryFunc *slavio_cfg_mem_read[3] = {
  135 + slavio_cfg_mem_readb,
  136 + NULL,
  137 + NULL,
  138 +};
  139 +
  140 +static CPUWriteMemoryFunc *slavio_cfg_mem_write[3] = {
  141 + slavio_cfg_mem_writeb,
  142 + NULL,
  143 + NULL,
  144 +};
  145 +
  146 +static void slavio_diag_mem_writeb(void *opaque, target_phys_addr_t addr,
116 uint32_t val) 147 uint32_t val)
117 { 148 {
118 MiscState *s = opaque; 149 MiscState *s = opaque;
119 150
120 - switch (addr & MISC_MASK) {  
121 - case MISC_CFG:  
122 - MISC_DPRINTF("Write config %2.2x\n", val & 0xff);  
123 - s->config = val & 0xff;  
124 - slavio_misc_update_irq(s);  
125 - break;  
126 - case MISC_DIAG:  
127 - MISC_DPRINTF("Write diag %2.2x\n", val & 0xff);  
128 - s->diag = val & 0xff;  
129 - break;  
130 - case MISC_MDM:  
131 - MISC_DPRINTF("Write modem control %2.2x\n", val & 0xff);  
132 - s->mctrl = val & 0xff;  
133 - break;  
134 - default:  
135 - break;  
136 - } 151 + MISC_DPRINTF("Write diag %2.2x\n", val & 0xff);
  152 + s->diag = val & 0xff;
137 } 153 }
138 154
139 -static uint32_t slavio_misc_mem_readb(void *opaque, target_phys_addr_t addr) 155 +static uint32_t slavio_diag_mem_readb(void *opaque, target_phys_addr_t addr)
140 { 156 {
141 MiscState *s = opaque; 157 MiscState *s = opaque;
142 uint32_t ret = 0; 158 uint32_t ret = 0;
143 159
144 - switch (addr & MISC_MASK) {  
145 - case MISC_CFG:  
146 - ret = s->config;  
147 - MISC_DPRINTF("Read config %2.2x\n", ret);  
148 - break;  
149 - case MISC_DIAG:  
150 - ret = s->diag;  
151 - MISC_DPRINTF("Read diag %2.2x\n", ret);  
152 - break;  
153 - case MISC_MDM:  
154 - ret = s->mctrl;  
155 - MISC_DPRINTF("Read modem control %2.2x\n", ret);  
156 - break;  
157 - default:  
158 - break;  
159 - } 160 + ret = s->diag;
  161 + MISC_DPRINTF("Read diag %2.2x\n", ret);
  162 + return ret;
  163 +}
  164 +
  165 +static CPUReadMemoryFunc *slavio_diag_mem_read[3] = {
  166 + slavio_diag_mem_readb,
  167 + NULL,
  168 + NULL,
  169 +};
  170 +
  171 +static CPUWriteMemoryFunc *slavio_diag_mem_write[3] = {
  172 + slavio_diag_mem_writeb,
  173 + NULL,
  174 + NULL,
  175 +};
  176 +
  177 +static void slavio_mdm_mem_writeb(void *opaque, target_phys_addr_t addr,
  178 + uint32_t val)
  179 +{
  180 + MiscState *s = opaque;
  181 +
  182 + MISC_DPRINTF("Write modem control %2.2x\n", val & 0xff);
  183 + s->mctrl = val & 0xff;
  184 +}
  185 +
  186 +static uint32_t slavio_mdm_mem_readb(void *opaque, target_phys_addr_t addr)
  187 +{
  188 + MiscState *s = opaque;
  189 + uint32_t ret = 0;
  190 +
  191 + ret = s->mctrl;
  192 + MISC_DPRINTF("Read modem control %2.2x\n", ret);
160 return ret; 193 return ret;
161 } 194 }
162 195
163 -static CPUReadMemoryFunc *slavio_misc_mem_read[3] = {  
164 - slavio_misc_mem_readb, 196 +static CPUReadMemoryFunc *slavio_mdm_mem_read[3] = {
  197 + slavio_mdm_mem_readb,
165 NULL, 198 NULL,
166 NULL, 199 NULL,
167 }; 200 };
168 201
169 -static CPUWriteMemoryFunc *slavio_misc_mem_write[3] = {  
170 - slavio_misc_mem_writeb, 202 +static CPUWriteMemoryFunc *slavio_mdm_mem_write[3] = {
  203 + slavio_mdm_mem_writeb,
171 NULL, 204 NULL,
172 NULL, 205 NULL,
173 }; 206 };
@@ -282,10 +315,9 @@ static CPUWriteMemoryFunc *apc_mem_write[3] = { @@ -282,10 +315,9 @@ static CPUWriteMemoryFunc *apc_mem_write[3] = {
282 static uint32_t slavio_sysctrl_mem_readl(void *opaque, target_phys_addr_t addr) 315 static uint32_t slavio_sysctrl_mem_readl(void *opaque, target_phys_addr_t addr)
283 { 316 {
284 MiscState *s = opaque; 317 MiscState *s = opaque;
285 - uint32_t ret = 0, saddr; 318 + uint32_t ret = 0;
286 319
287 - saddr = addr & SYSCTRL_MAXADDR;  
288 - switch (saddr) { 320 + switch (addr) {
289 case 0: 321 case 0:
290 ret = s->sysctrl; 322 ret = s->sysctrl;
291 break; 323 break;
@@ -301,12 +333,10 @@ static void slavio_sysctrl_mem_writel(void *opaque, target_phys_addr_t addr, @@ -301,12 +333,10 @@ static void slavio_sysctrl_mem_writel(void *opaque, target_phys_addr_t addr,
301 uint32_t val) 333 uint32_t val)
302 { 334 {
303 MiscState *s = opaque; 335 MiscState *s = opaque;
304 - uint32_t saddr;  
305 336
306 - saddr = addr & SYSCTRL_MAXADDR;  
307 MISC_DPRINTF("Write system control reg 0x" TARGET_FMT_plx " = %x\n", addr, 337 MISC_DPRINTF("Write system control reg 0x" TARGET_FMT_plx " = %x\n", addr,
308 val); 338 val);
309 - switch (saddr) { 339 + switch (addr) {
310 case 0: 340 case 0:
311 if (val & SYS_RESET) { 341 if (val & SYS_RESET) {
312 s->sysctrl = SYS_RESETSTAT; 342 s->sysctrl = SYS_RESETSTAT;
@@ -333,10 +363,9 @@ static CPUWriteMemoryFunc *slavio_sysctrl_mem_write[3] = { @@ -333,10 +363,9 @@ static CPUWriteMemoryFunc *slavio_sysctrl_mem_write[3] = {
333 static uint32_t slavio_led_mem_readw(void *opaque, target_phys_addr_t addr) 363 static uint32_t slavio_led_mem_readw(void *opaque, target_phys_addr_t addr)
334 { 364 {
335 MiscState *s = opaque; 365 MiscState *s = opaque;
336 - uint32_t ret = 0, saddr; 366 + uint32_t ret = 0;
337 367
338 - saddr = addr & LED_MAXADDR;  
339 - switch (saddr) { 368 + switch (addr) {
340 case 0: 369 case 0:
341 ret = s->leds; 370 ret = s->leds;
342 break; 371 break;
@@ -352,12 +381,10 @@ static void slavio_led_mem_writew(void *opaque, target_phys_addr_t addr, @@ -352,12 +381,10 @@ static void slavio_led_mem_writew(void *opaque, target_phys_addr_t addr,
352 uint32_t val) 381 uint32_t val)
353 { 382 {
354 MiscState *s = opaque; 383 MiscState *s = opaque;
355 - uint32_t saddr;  
356 384
357 - saddr = addr & LED_MAXADDR;  
358 MISC_DPRINTF("Write diagnostic LED reg 0x" TARGET_FMT_plx " = %x\n", addr, 385 MISC_DPRINTF("Write diagnostic LED reg 0x" TARGET_FMT_plx " = %x\n", addr,
359 val); 386 val);
360 - switch (saddr) { 387 + switch (addr) {
361 case 0: 388 case 0:
362 s->leds = val; 389 s->leds = val;
363 break; 390 break;
@@ -428,17 +455,21 @@ void *slavio_misc_init(target_phys_addr_t base, target_phys_addr_t power_base, @@ -428,17 +455,21 @@ void *slavio_misc_init(target_phys_addr_t base, target_phys_addr_t power_base,
428 455
429 if (base) { 456 if (base) {
430 /* 8 bit registers */ 457 /* 8 bit registers */
431 - io = cpu_register_io_memory(0, slavio_misc_mem_read,  
432 - slavio_misc_mem_write, s); 458 +
433 // Slavio control 459 // Slavio control
434 - cpu_register_physical_memory_offset(base + MISC_CFG, MISC_SIZE, io,  
435 - MISC_CFG); 460 + io = cpu_register_io_memory(0, slavio_cfg_mem_read,
  461 + slavio_cfg_mem_write, s);
  462 + cpu_register_physical_memory(base + MISC_CFG, MISC_SIZE, io);
  463 +
436 // Diagnostics 464 // Diagnostics
437 - cpu_register_physical_memory_offset(base + MISC_DIAG, MISC_SIZE, io,  
438 - MISC_DIAG); 465 + io = cpu_register_io_memory(0, slavio_diag_mem_read,
  466 + slavio_diag_mem_write, s);
  467 + cpu_register_physical_memory(base + MISC_DIAG, MISC_SIZE, io);
  468 +
439 // Modem control 469 // Modem control
440 - cpu_register_physical_memory_offset(base + MISC_MDM, MISC_SIZE, io,  
441 - MISC_MDM); 470 + io = cpu_register_io_memory(0, slavio_mdm_mem_read,
  471 + slavio_mdm_mem_write, s);
  472 + cpu_register_physical_memory(base + MISC_MDM, MISC_SIZE, io);
442 473
443 /* 16 bit registers */ 474 /* 16 bit registers */
444 io = cpu_register_io_memory(0, slavio_led_mem_read, 475 io = cpu_register_io_memory(0, slavio_led_mem_read,