Commit 35f1de319299f043132702c36ebaadfc4a15db69
1 parent
451a4212
Fix GT-64xxx PCI mapping, by Aurelien Jarno.
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@2471 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
1 changed file
with
11 additions
and
5 deletions
hw/gt64xxx.c
... | ... | @@ -222,18 +222,24 @@ typedef PCIHostState GT64120PCIState; |
222 | 222 | typedef struct GT64120State { |
223 | 223 | GT64120PCIState *pci; |
224 | 224 | uint32_t regs[GT_REGS]; |
225 | + target_phys_addr_t PCI0IO_start; | |
226 | + target_phys_addr_t PCI0IO_length; | |
225 | 227 | } GT64120State; |
226 | 228 | |
227 | 229 | static void gt64120_pci_mapping(GT64120State *s) |
228 | 230 | { |
229 | - target_phys_addr_t start, length; | |
230 | - | |
231 | 231 | /* Update IO mapping */ |
232 | 232 | if ((s->regs[GT_PCI0IOLD] & 0x7f) <= s->regs[GT_PCI0IOHD]) |
233 | 233 | { |
234 | - start = s->regs[GT_PCI0IOLD] << 21; | |
235 | - length = ((s->regs[GT_PCI0IOHD] + 1) - (s->regs[GT_PCI0IOLD] & 0x7f)) << 21; | |
236 | - isa_mmio_init(start, length); | |
234 | + /* Unmap old IO address */ | |
235 | + if (s->PCI0IO_length) | |
236 | + { | |
237 | + cpu_register_physical_memory(s->PCI0IO_start, s->PCI0IO_length, IO_MEM_UNASSIGNED); | |
238 | + } | |
239 | + /* Map new IO address */ | |
240 | + s->PCI0IO_start = s->regs[GT_PCI0IOLD] << 21; | |
241 | + s->PCI0IO_length = ((s->regs[GT_PCI0IOHD] + 1) - (s->regs[GT_PCI0IOLD] & 0x7f)) << 21; | |
242 | + isa_mmio_init(s->PCI0IO_start, s->PCI0IO_length); | |
237 | 243 | } |
238 | 244 | } |
239 | 245 | ... | ... |