aboutsummaryrefslogtreecommitdiff
path: root/src/fw/pciinit.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/fw/pciinit.c')
-rw-r--r--src/fw/pciinit.c30
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
}