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,7 +70,7 @@ struct hwdef { | ||
70 | target_phys_addr_t iommu_base, slavio_base; | 70 | target_phys_addr_t iommu_base, slavio_base; |
71 | target_phys_addr_t intctl_base, counter_base, nvram_base, ms_kb_base; | 71 | target_phys_addr_t intctl_base, counter_base, nvram_base, ms_kb_base; |
72 | target_phys_addr_t serial_base, fd_base; | 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 | target_phys_addr_t tcx_base, cs_base, power_base; | 74 | target_phys_addr_t tcx_base, cs_base, power_base; |
75 | target_phys_addr_t ecc_base; | 75 | target_phys_addr_t ecc_base; |
76 | uint32_t ecc_version; | 76 | uint32_t ecc_version; |
@@ -397,6 +397,7 @@ static void sun4m_hw_init(const struct hwdef *hwdef, int RAM_size, | @@ -397,6 +397,7 @@ static void sun4m_hw_init(const struct hwdef *hwdef, int RAM_size, | ||
397 | buf); | 397 | buf); |
398 | exit(1); | 398 | exit(1); |
399 | } | 399 | } |
400 | + prom_offset += (ret + TARGET_PAGE_SIZE - 1) & TARGET_PAGE_MASK; | ||
400 | 401 | ||
401 | /* set up devices */ | 402 | /* set up devices */ |
402 | iommu = iommu_init(hwdef->iommu_base, hwdef->iommu_version); | 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,6 +408,13 @@ static void sun4m_hw_init(const struct hwdef *hwdef, int RAM_size, | ||
407 | cpu_irqs, | 408 | cpu_irqs, |
408 | hwdef->clock_irq); | 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 | espdma = sparc32_dma_init(hwdef->dma_base, slavio_irq[hwdef->esp_irq], | 418 | espdma = sparc32_dma_init(hwdef->dma_base, slavio_irq[hwdef->esp_irq], |
411 | iommu, &espdma_irq, &esp_reset); | 419 | iommu, &espdma_irq, &esp_reset); |
412 | 420 | ||
@@ -499,6 +507,7 @@ static const struct hwdef hwdefs[] = { | @@ -499,6 +507,7 @@ static const struct hwdef hwdefs[] = { | ||
499 | .fd_base = 0x71400000, | 507 | .fd_base = 0x71400000, |
500 | .counter_base = 0x71d00000, | 508 | .counter_base = 0x71d00000, |
501 | .intctl_base = 0x71e00000, | 509 | .intctl_base = 0x71e00000, |
510 | + .idreg_base = 0x78000000, | ||
502 | .dma_base = 0x78400000, | 511 | .dma_base = 0x78400000, |
503 | .esp_base = 0x78800000, | 512 | .esp_base = 0x78800000, |
504 | .le_base = 0x78c00000, | 513 | .le_base = 0x78c00000, |
@@ -536,6 +545,7 @@ static const struct hwdef hwdefs[] = { | @@ -536,6 +545,7 @@ static const struct hwdef hwdefs[] = { | ||
536 | .fd_base = 0xff1700000ULL, | 545 | .fd_base = 0xff1700000ULL, |
537 | .counter_base = 0xff1300000ULL, | 546 | .counter_base = 0xff1300000ULL, |
538 | .intctl_base = 0xff1400000ULL, | 547 | .intctl_base = 0xff1400000ULL, |
548 | + .idreg_base = 0xef0000000ULL, | ||
539 | .dma_base = 0xef0400000ULL, | 549 | .dma_base = 0xef0400000ULL, |
540 | .esp_base = 0xef0800000ULL, | 550 | .esp_base = 0xef0800000ULL, |
541 | .le_base = 0xef0c00000ULL, | 551 | .le_base = 0xef0c00000ULL, |
@@ -574,6 +584,7 @@ static const struct hwdef hwdefs[] = { | @@ -574,6 +584,7 @@ static const struct hwdef hwdefs[] = { | ||
574 | .fd_base = -1, | 584 | .fd_base = -1, |
575 | .counter_base = 0xff1300000ULL, | 585 | .counter_base = 0xff1300000ULL, |
576 | .intctl_base = 0xff1400000ULL, | 586 | .intctl_base = 0xff1400000ULL, |
587 | + .idreg_base = -1, | ||
577 | .dma_base = 0xef0081000ULL, | 588 | .dma_base = 0xef0081000ULL, |
578 | .esp_base = 0xef0080000ULL, | 589 | .esp_base = 0xef0080000ULL, |
579 | .le_base = 0xef0060000ULL, | 590 | .le_base = 0xef0060000ULL, |
@@ -612,6 +623,7 @@ static const struct hwdef hwdefs[] = { | @@ -612,6 +623,7 @@ static const struct hwdef hwdefs[] = { | ||
612 | .fd_base = 0xff1700000ULL, | 623 | .fd_base = 0xff1700000ULL, |
613 | .counter_base = 0xff1300000ULL, | 624 | .counter_base = 0xff1300000ULL, |
614 | .intctl_base = 0xff1400000ULL, | 625 | .intctl_base = 0xff1400000ULL, |
626 | + .idreg_base = 0xef0000000ULL, | ||
615 | .dma_base = 0xef0400000ULL, | 627 | .dma_base = 0xef0400000ULL, |
616 | .esp_base = 0xef0800000ULL, | 628 | .esp_base = 0xef0800000ULL, |
617 | .le_base = 0xef0c00000ULL, | 629 | .le_base = 0xef0c00000ULL, |