From 6d403070f28cd44860fdb3a53be5da0275c65cf4 Mon Sep 17 00:00:00 2001 From: Ralf Baechle Date: Mon, 19 Jun 2000 22:45:37 +0000 Subject: Merge with 2.4.0-test1-ac21 + pile of MIPS cleanups to make merging possible. Chainsawed RM200 kernel to compile again. Jazz machine status unknown. --- arch/mips/sni/pci.c | 73 ++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 69 insertions(+), 4 deletions(-) (limited to 'arch/mips/sni/pci.c') diff --git a/arch/mips/sni/pci.c b/arch/mips/sni/pci.c index cfbc4b3e7..cd6a869aa 100644 --- a/arch/mips/sni/pci.c +++ b/arch/mips/sni/pci.c @@ -1,15 +1,15 @@ -/* $Id: pci.c,v 1.9 1999/12/04 03:59:00 ralf Exp $ - * +/* * This file is subject to the terms and conditions of the GNU General Public * License. See the file "COPYING" in the main directory of this archive * for more details. * * SNI specific PCI support for RM200/RM300. * - * Copyright (C) 1997, 1998, 1999 Ralf Baechle + * Copyright (C) 1997 - 2000 Ralf Baechle */ #include #include +#include #include #include #include @@ -23,10 +23,11 @@ do { \ return -1; \ *(volatile u32 *)PCIMT_CONFIG_ADDRESS = \ ((dev->bus->number & 0xff) << 0x10) | \ - ((dev->dev_fn & 0xff) << 0x08) | \ + ((dev->devfn & 0xff) << 0x08) | \ (where & 0xfc); \ } while(0); +#if 0 /* To do: Bring this uptodate ... */ static void pcimt_pcibios_fixup (void) { @@ -62,6 +63,7 @@ static void pcimt_pcibios_fixup (void) } } } +#endif /* * We can't address 8 and 16 bit words directly. Instead we have to @@ -150,4 +152,67 @@ struct pci_ops sni_pci_ops = { pcimt_write_config_dword }; +void __init +pcibios_fixup_bus(struct pci_bus *b) +{ +} + +void +pcibios_update_resource(struct pci_dev *dev, struct resource *root, + struct resource *res, int resource) +{ + u32 new, check; + int reg; + + new = res->start | (res->flags & PCI_REGION_FLAG_MASK); + if (resource < 6) { + reg = PCI_BASE_ADDRESS_0 + 4*resource; + } else if (resource == PCI_ROM_RESOURCE) { + res->flags |= PCI_ROM_ADDRESS_ENABLE; + new |= PCI_ROM_ADDRESS_ENABLE; + reg = dev->rom_base_reg; + } else { + /* Somebody might have asked allocation of a non-standard resource */ + return; + } + + pci_write_config_dword(dev, reg, new); + pci_read_config_dword(dev, reg, &check); + if ((new ^ check) & ((new & PCI_BASE_ADDRESS_SPACE_IO) ? PCI_BASE_ADDRESS_IO_MASK : PCI_BASE_ADDRESS_MEM_MASK)) { + printk(KERN_ERR "PCI: Error while updating region " + "%s/%d (%08x != %08x)\n", dev->slot_name, resource, + new, check); + } +} + +void __init pcibios_init(void) +{ + struct pci_ops *ops = &sni_pci_ops; + + pci_scan_bus(0, ops, NULL); +} + +int __init pcibios_enable_device(struct pci_dev *dev) +{ + /* Not needed, since we enable all devices at startup. */ + return 0; +} + +void __init +pcibios_align_resource(void *data, struct resource *res, unsigned long size) +{ +} + +char * __init +pcibios_setup(char *str) +{ + /* Nothing to do for now. */ + + return str; +} + +struct pci_fixup pcibios_fixups[] = { + { 0 } +}; + #endif /* CONFIG_PCI */ -- cgit v1.2.3