Commit 4c2485de385c52cbf3cba1bba37c49b99a47e58c
1 parent
f48c537d
Add ID register
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@3864 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
1 changed file
with
13 additions
and
1 deletions
hw/sun4m.c
... | ... | @@ -70,7 +70,7 @@ struct hwdef { |
70 | 70 | target_phys_addr_t iommu_base, slavio_base; |
71 | 71 | target_phys_addr_t intctl_base, counter_base, nvram_base, ms_kb_base; |
72 | 72 | target_phys_addr_t serial_base, fd_base; |
73 | - target_phys_addr_t dma_base, esp_base, le_base; | |
73 | + target_phys_addr_t idreg_base, dma_base, esp_base, le_base; | |
74 | 74 | target_phys_addr_t tcx_base, cs_base, power_base; |
75 | 75 | target_phys_addr_t ecc_base; |
76 | 76 | uint32_t ecc_version; |
... | ... | @@ -397,6 +397,7 @@ static void sun4m_hw_init(const struct hwdef *hwdef, int RAM_size, |
397 | 397 | buf); |
398 | 398 | exit(1); |
399 | 399 | } |
400 | + prom_offset += (ret + TARGET_PAGE_SIZE - 1) & TARGET_PAGE_MASK; | |
400 | 401 | |
401 | 402 | /* set up devices */ |
402 | 403 | iommu = iommu_init(hwdef->iommu_base, hwdef->iommu_version); |
... | ... | @@ -407,6 +408,13 @@ static void sun4m_hw_init(const struct hwdef *hwdef, int RAM_size, |
407 | 408 | cpu_irqs, |
408 | 409 | hwdef->clock_irq); |
409 | 410 | |
411 | + if (hwdef->idreg_base != (target_phys_addr_t)-1) { | |
412 | + stl_raw(phys_ram_base + prom_offset, 0xfe810103); | |
413 | + | |
414 | + cpu_register_physical_memory(hwdef->idreg_base, sizeof(uint32_t), | |
415 | + prom_offset | IO_MEM_ROM); | |
416 | + } | |
417 | + | |
410 | 418 | espdma = sparc32_dma_init(hwdef->dma_base, slavio_irq[hwdef->esp_irq], |
411 | 419 | iommu, &espdma_irq, &esp_reset); |
412 | 420 | |
... | ... | @@ -499,6 +507,7 @@ static const struct hwdef hwdefs[] = { |
499 | 507 | .fd_base = 0x71400000, |
500 | 508 | .counter_base = 0x71d00000, |
501 | 509 | .intctl_base = 0x71e00000, |
510 | + .idreg_base = 0x78000000, | |
502 | 511 | .dma_base = 0x78400000, |
503 | 512 | .esp_base = 0x78800000, |
504 | 513 | .le_base = 0x78c00000, |
... | ... | @@ -536,6 +545,7 @@ static const struct hwdef hwdefs[] = { |
536 | 545 | .fd_base = 0xff1700000ULL, |
537 | 546 | .counter_base = 0xff1300000ULL, |
538 | 547 | .intctl_base = 0xff1400000ULL, |
548 | + .idreg_base = 0xef0000000ULL, | |
539 | 549 | .dma_base = 0xef0400000ULL, |
540 | 550 | .esp_base = 0xef0800000ULL, |
541 | 551 | .le_base = 0xef0c00000ULL, |
... | ... | @@ -574,6 +584,7 @@ static const struct hwdef hwdefs[] = { |
574 | 584 | .fd_base = -1, |
575 | 585 | .counter_base = 0xff1300000ULL, |
576 | 586 | .intctl_base = 0xff1400000ULL, |
587 | + .idreg_base = -1, | |
577 | 588 | .dma_base = 0xef0081000ULL, |
578 | 589 | .esp_base = 0xef0080000ULL, |
579 | 590 | .le_base = 0xef0060000ULL, |
... | ... | @@ -612,6 +623,7 @@ static const struct hwdef hwdefs[] = { |
612 | 623 | .fd_base = 0xff1700000ULL, |
613 | 624 | .counter_base = 0xff1300000ULL, |
614 | 625 | .intctl_base = 0xff1400000ULL, |
626 | + .idreg_base = 0xef0000000ULL, | |
615 | 627 | .dma_base = 0xef0400000ULL, |
616 | 628 | .esp_base = 0xef0800000ULL, |
617 | 629 | .le_base = 0xef0c00000ULL, | ... | ... |