hw/alpha: Set minimum PCI device ID to 1 to match Clipper IRQ mappings
Since we are emulating a Clipper device topology, we need to set the minimum PCI device ID to 1, as there is no IRQ mapping for a device at ID 0 (see sys_dp264.c:clipper_map_irq()). - Add a 'devfn_min' argument to typhoon_init(). Pass that argument along to pci_register_root_bus(). - In clipper_init(), pass PCI_DEVFN(1, 0) as the minimum PCI device ID/function. Signed-off-by: Jason Thorpe <thorpej@me.com> Message-Id: <20210613211549.18094-3-thorpej@me.com> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
		
							parent
							
								
									687f9f7834
								
							
						
					
					
						commit
						3a8233dc1f
					
				@ -11,7 +11,7 @@
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
PCIBus *typhoon_init(MemoryRegion *, ISABus **, qemu_irq *, AlphaCPU *[4],
 | 
			
		||||
                     pci_map_irq_fn);
 | 
			
		||||
                     pci_map_irq_fn, uint8_t devfn_min);
 | 
			
		||||
 | 
			
		||||
/* alpha_pci.c.  */
 | 
			
		||||
extern const MemoryRegionOps alpha_pci_ignore_ops;
 | 
			
		||||
 | 
			
		||||
@ -76,9 +76,12 @@ static void clipper_init(MachineState *machine)
 | 
			
		||||
    cpus[0]->env.trap_arg1 = 0;
 | 
			
		||||
    cpus[0]->env.trap_arg2 = smp_cpus;
 | 
			
		||||
 | 
			
		||||
    /* Init the chipset.  */
 | 
			
		||||
    /*
 | 
			
		||||
     * Init the chipset.  Because we're using CLIPPER IRQ mappings,
 | 
			
		||||
     * the minimum PCI device IdSel is 1.
 | 
			
		||||
     */
 | 
			
		||||
    pci_bus = typhoon_init(machine->ram, &isa_bus, &rtc_irq, cpus,
 | 
			
		||||
                           clipper_pci_map_irq);
 | 
			
		||||
                           clipper_pci_map_irq, PCI_DEVFN(1, 0));
 | 
			
		||||
 | 
			
		||||
    /* Since we have an SRM-compatible PALcode, use the SRM epoch.  */
 | 
			
		||||
    mc146818_rtc_init(isa_bus, 1900, rtc_irq);
 | 
			
		||||
 | 
			
		||||
@ -815,7 +815,8 @@ static void typhoon_alarm_timer(void *opaque)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
PCIBus *typhoon_init(MemoryRegion *ram, ISABus **isa_bus, qemu_irq *p_rtc_irq,
 | 
			
		||||
                     AlphaCPU *cpus[4], pci_map_irq_fn sys_map_irq)
 | 
			
		||||
                     AlphaCPU *cpus[4], pci_map_irq_fn sys_map_irq,
 | 
			
		||||
                     uint8_t devfn_min)
 | 
			
		||||
{
 | 
			
		||||
    MemoryRegion *addr_space = get_system_memory();
 | 
			
		||||
    DeviceState *dev;
 | 
			
		||||
@ -885,7 +886,7 @@ PCIBus *typhoon_init(MemoryRegion *ram, ISABus **isa_bus, qemu_irq *p_rtc_irq,
 | 
			
		||||
    b = pci_register_root_bus(dev, "pci",
 | 
			
		||||
                              typhoon_set_irq, sys_map_irq, s,
 | 
			
		||||
                              &s->pchip.reg_mem, &s->pchip.reg_io,
 | 
			
		||||
                              0, 64, TYPE_PCI_BUS);
 | 
			
		||||
                              devfn_min, 64, TYPE_PCI_BUS);
 | 
			
		||||
    phb->bus = b;
 | 
			
		||||
    sysbus_realize_and_unref(SYS_BUS_DEVICE(dev), &error_fatal);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user