Commit 91d848ebf3bc7fd73fb1a4fc11bdb04225b3f37d
1 parent
e2733d20
disable PCI device for PMAC
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@966 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
2 changed files
with
34 additions
and
27 deletions
hw/openpic.c
| @@ -164,6 +164,7 @@ typedef struct IRQ_dst_t { | @@ -164,6 +164,7 @@ typedef struct IRQ_dst_t { | ||
| 164 | 164 | ||
| 165 | struct openpic_t { | 165 | struct openpic_t { |
| 166 | PCIDevice pci_dev; | 166 | PCIDevice pci_dev; |
| 167 | + int mem_index; | ||
| 167 | /* Global registers */ | 168 | /* Global registers */ |
| 168 | uint32_t frep; /* Feature reporting register */ | 169 | uint32_t frep; /* Feature reporting register */ |
| 169 | uint32_t glbc; /* Global configuration register */ | 170 | uint32_t glbc; /* Global configuration register */ |
| @@ -937,7 +938,6 @@ static void openpic_map(PCIDevice *pci_dev, int region_num, | @@ -937,7 +938,6 @@ static void openpic_map(PCIDevice *pci_dev, int region_num, | ||
| 937 | uint32_t addr, uint32_t size, int type) | 938 | uint32_t addr, uint32_t size, int type) |
| 938 | { | 939 | { |
| 939 | openpic_t *opp; | 940 | openpic_t *opp; |
| 940 | - int opp_io_memory; | ||
| 941 | 941 | ||
| 942 | DPRINTF("Map OpenPIC\n"); | 942 | DPRINTF("Map OpenPIC\n"); |
| 943 | opp = (openpic_t *)pci_dev; | 943 | opp = (openpic_t *)pci_dev; |
| @@ -953,9 +953,7 @@ static void openpic_map(PCIDevice *pci_dev, int region_num, | @@ -953,9 +953,7 @@ static void openpic_map(PCIDevice *pci_dev, int region_num, | ||
| 953 | /* Per CPU registers */ | 953 | /* Per CPU registers */ |
| 954 | DPRINTF("Register OPENPIC dst %08x => %08x\n", | 954 | DPRINTF("Register OPENPIC dst %08x => %08x\n", |
| 955 | addr + 0x20000, addr + 0x20000 + 0x1000 * MAX_CPU); | 955 | addr + 0x20000, addr + 0x20000 + 0x1000 * MAX_CPU); |
| 956 | - opp_io_memory = cpu_register_io_memory(0, openpic_read, | ||
| 957 | - openpic_write, opp); | ||
| 958 | - cpu_register_physical_memory(addr, 0x40000, opp_io_memory); | 956 | + cpu_register_physical_memory(addr, 0x40000, opp->mem_index); |
| 959 | #if 0 // Don't implement ISU for now | 957 | #if 0 // Don't implement ISU for now |
| 960 | opp_io_memory = cpu_register_io_memory(0, openpic_src_read, | 958 | opp_io_memory = cpu_register_io_memory(0, openpic_src_read, |
| 961 | openpic_src_write); | 959 | openpic_src_write); |
| @@ -964,8 +962,7 @@ static void openpic_map(PCIDevice *pci_dev, int region_num, | @@ -964,8 +962,7 @@ static void openpic_map(PCIDevice *pci_dev, int region_num, | ||
| 964 | #endif | 962 | #endif |
| 965 | } | 963 | } |
| 966 | 964 | ||
| 967 | -openpic_t *openpic_init (PCIBus *bus, | ||
| 968 | - uint32_t isu_base, uint32_t idu_base, int nb_cpus) | 965 | +openpic_t *openpic_init (PCIBus *bus, int *pmem_index, int nb_cpus) |
| 969 | { | 966 | { |
| 970 | openpic_t *opp; | 967 | openpic_t *opp; |
| 971 | uint8_t *pci_conf; | 968 | uint8_t *pci_conf; |
| @@ -974,25 +971,32 @@ openpic_t *openpic_init (PCIBus *bus, | @@ -974,25 +971,32 @@ openpic_t *openpic_init (PCIBus *bus, | ||
| 974 | /* XXX: for now, only one CPU is supported */ | 971 | /* XXX: for now, only one CPU is supported */ |
| 975 | if (nb_cpus != 1) | 972 | if (nb_cpus != 1) |
| 976 | return NULL; | 973 | return NULL; |
| 977 | - opp = (openpic_t *)pci_register_device(bus, "OpenPIC", sizeof(openpic_t), | ||
| 978 | - -1, NULL, NULL); | ||
| 979 | - if (opp == NULL) | ||
| 980 | - return NULL; | ||
| 981 | - pci_conf = opp->pci_dev.config; | ||
| 982 | - pci_conf[0x00] = 0x14; // IBM MPIC2 | ||
| 983 | - pci_conf[0x01] = 0x10; | ||
| 984 | - pci_conf[0x02] = 0xFF; | ||
| 985 | - pci_conf[0x03] = 0xFF; | ||
| 986 | - pci_conf[0x0a] = 0x80; // PIC | ||
| 987 | - pci_conf[0x0b] = 0x08; | ||
| 988 | - pci_conf[0x0e] = 0x00; // header_type | ||
| 989 | - pci_conf[0x3d] = 0x00; // no interrupt pin | ||
| 990 | - | ||
| 991 | - /* Register I/O spaces */ | ||
| 992 | - pci_register_io_region((PCIDevice *)opp, 0, 0x40000, | ||
| 993 | - PCI_ADDRESS_SPACE_MEM, &openpic_map); | ||
| 994 | - | ||
| 995 | - isu_base &= 0xFFFC0000; | 974 | + if (bus) { |
| 975 | + opp = (openpic_t *)pci_register_device(bus, "OpenPIC", sizeof(openpic_t), | ||
| 976 | + -1, NULL, NULL); | ||
| 977 | + if (opp == NULL) | ||
| 978 | + return NULL; | ||
| 979 | + pci_conf = opp->pci_dev.config; | ||
| 980 | + pci_conf[0x00] = 0x14; // IBM MPIC2 | ||
| 981 | + pci_conf[0x01] = 0x10; | ||
| 982 | + pci_conf[0x02] = 0xFF; | ||
| 983 | + pci_conf[0x03] = 0xFF; | ||
| 984 | + pci_conf[0x0a] = 0x80; // PIC | ||
| 985 | + pci_conf[0x0b] = 0x08; | ||
| 986 | + pci_conf[0x0e] = 0x00; // header_type | ||
| 987 | + pci_conf[0x3d] = 0x00; // no interrupt pin | ||
| 988 | + | ||
| 989 | + /* Register I/O spaces */ | ||
| 990 | + pci_register_io_region((PCIDevice *)opp, 0, 0x40000, | ||
| 991 | + PCI_ADDRESS_SPACE_MEM, &openpic_map); | ||
| 992 | + } else { | ||
| 993 | + opp = qemu_mallocz(sizeof(openpic_t)); | ||
| 994 | + } | ||
| 995 | + | ||
| 996 | + opp->mem_index = cpu_register_io_memory(0, openpic_read, | ||
| 997 | + openpic_write, opp); | ||
| 998 | + | ||
| 999 | + // isu_base &= 0xFFFC0000; | ||
| 996 | opp->nb_cpus = nb_cpus; | 1000 | opp->nb_cpus = nb_cpus; |
| 997 | /* Set IRQ types */ | 1001 | /* Set IRQ types */ |
| 998 | for (i = 0; i < EXT_IRQ; i++) { | 1002 | for (i = 0; i < EXT_IRQ; i++) { |
| @@ -1013,6 +1017,7 @@ openpic_t *openpic_init (PCIBus *bus, | @@ -1013,6 +1017,7 @@ openpic_t *openpic_init (PCIBus *bus, | ||
| 1013 | opp->src[i].type = IRQ_INTERNAL; | 1017 | opp->src[i].type = IRQ_INTERNAL; |
| 1014 | } | 1018 | } |
| 1015 | openpic_reset(opp); | 1019 | openpic_reset(opp); |
| 1016 | - | 1020 | + if (pmem_index) |
| 1021 | + *pmem_index = opp->mem_index; | ||
| 1017 | return opp; | 1022 | return opp; |
| 1018 | } | 1023 | } |
hw/ppc_chrp.c
| @@ -36,6 +36,7 @@ static int dbdma_mem_index; | @@ -36,6 +36,7 @@ static int dbdma_mem_index; | ||
| 36 | static int cuda_mem_index; | 36 | static int cuda_mem_index; |
| 37 | static int ide0_mem_index; | 37 | static int ide0_mem_index; |
| 38 | static int ide1_mem_index; | 38 | static int ide1_mem_index; |
| 39 | +static int openpic_mem_index; | ||
| 39 | 40 | ||
| 40 | /* DBDMA: currently no op - should suffice right now */ | 41 | /* DBDMA: currently no op - should suffice right now */ |
| 41 | 42 | ||
| @@ -87,6 +88,7 @@ static void macio_map(PCIDevice *pci_dev, int region_num, | @@ -87,6 +88,7 @@ static void macio_map(PCIDevice *pci_dev, int region_num, | ||
| 87 | cpu_register_physical_memory(addr + 0x16000, 0x2000, cuda_mem_index); | 88 | cpu_register_physical_memory(addr + 0x16000, 0x2000, cuda_mem_index); |
| 88 | cpu_register_physical_memory(addr + 0x1f000, 0x1000, ide0_mem_index); | 89 | cpu_register_physical_memory(addr + 0x1f000, 0x1000, ide0_mem_index); |
| 89 | cpu_register_physical_memory(addr + 0x20000, 0x1000, ide1_mem_index); | 90 | cpu_register_physical_memory(addr + 0x20000, 0x1000, ide1_mem_index); |
| 91 | + cpu_register_physical_memory(addr + 0x40000, 0x40000, openpic_mem_index); | ||
| 90 | } | 92 | } |
| 91 | 93 | ||
| 92 | static void macio_init(PCIBus *bus) | 94 | static void macio_init(PCIBus *bus) |
| @@ -191,7 +193,7 @@ void ppc_chrp_init(int ram_size, int vga_ram_size, int boot_device, | @@ -191,7 +193,7 @@ void ppc_chrp_init(int ram_size, int vga_ram_size, int boot_device, | ||
| 191 | /* init basic PC hardware */ | 193 | /* init basic PC hardware */ |
| 192 | vga_initialize(pci_bus, ds, phys_ram_base + ram_size, ram_size, | 194 | vga_initialize(pci_bus, ds, phys_ram_base + ram_size, ram_size, |
| 193 | vga_ram_size); | 195 | vga_ram_size); |
| 194 | - openpic = openpic_init(pci_bus, 0x00000000, 0xF0000000, 1); | 196 | + openpic = openpic_init(NULL, &openpic_mem_index, 1); |
| 195 | pci_pmac_set_openpic(pci_bus, openpic); | 197 | pci_pmac_set_openpic(pci_bus, openpic); |
| 196 | 198 | ||
| 197 | /* XXX: suppress that */ | 199 | /* XXX: suppress that */ |