diff options
Diffstat (limited to 'src/fw/pciinit.c')
-rw-r--r-- | src/fw/pciinit.c | 30 |
1 files changed, 29 insertions, 1 deletions
diff --git a/src/fw/pciinit.c b/src/fw/pciinit.c index 4c16ea0..7f93a1f 100644 --- a/src/fw/pciinit.c +++ b/src/fw/pciinit.c @@ -536,6 +536,34 @@ static void dino_mem_addr_setup(struct pci_device *dev, void *arg) /* setup io address space */ pci_io_low_end = 0xa000; } + +static int astro_pci_slot_get_irq(struct pci_device *pci, int pin) +{ + int slot = pci_bdf_to_dev(pci->bdf); + return slot & 0x03; +} + +static void astro_mem_addr_setup(struct pci_device *dev, void *arg) +{ + pcimem_start = 0xf4000000ULL; + pcimem_end = pcimem_start + 0x4000000ULL; + +// outl(0x00000080, DINO_HPA + 0x038); /* IO_CONTROL - enable DINO PCI */ +// outl(0x7ffffffe, DINO_HPA + 0x060); /* Set DINO_IO_ADDR_EN */ + + pci_slot_get_irq = astro_pci_slot_get_irq; + + /* setup io address space */ + pci_io_low_end = 0x40000; +} + +static void parisc_mem_addr_setup(struct pci_device *dev, void *arg) +{ + if (has_astro) + return astro_mem_addr_setup(dev, arg); + else + return dino_mem_addr_setup(dev, arg); +} #endif /* CONFIG_PARISC */ @@ -558,7 +586,7 @@ static void pci_bios_init_platform(void) } #if CONFIG_PARISC - dino_mem_addr_setup(NULL, NULL); + parisc_mem_addr_setup(NULL, NULL); #endif } |