X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=arch%2Fmips%2Fpci%2Fops-titan.c;h=ebf8fc40e9b293ff924e2584a772f1a57090b9bb;hb=refs%2Fheads%2Fvserver;hp=1ac7880dd2a0ec23072159cd8bca75986e4c0140;hpb=9bf4aaab3e101692164d49b7ca357651eb691cb6;p=linux-2.6.git diff --git a/arch/mips/pci/ops-titan.c b/arch/mips/pci/ops-titan.c index 1ac7880dd..ebf8fc40e 100644 --- a/arch/mips/pci/ops-titan.c +++ b/arch/mips/pci/ops-titan.c @@ -22,16 +22,19 @@ * with this program; if not, write to the Free Software Foundation, Inc., * 675 Mass Ave, Cambridge, MA 02139, USA. */ -#include #include #include #include -#include -#include #include #include -#include +#include + +/* + * PCI specific defines + */ +#define TITAN_PCI_0_CONFIG_ADDRESS 0x780 +#define TITAN_PCI_0_CONFIG_DATA 0x784 /* * Titan PCI Config Read Byte @@ -39,74 +42,60 @@ static int titan_read_config(struct pci_bus *bus, unsigned int devfn, int reg, int size, u32 * val) { + uint32_t address, tmp; int dev, busno, func; - uint32_t address_reg, data_reg; - uint32_t address; busno = bus->number; dev = PCI_SLOT(devfn); func = PCI_FUNC(devfn); - address_reg = TITAN_PCI_0_CONFIG_ADDRESS; - data_reg = TITAN_PCI_0_CONFIG_DATA; - address = (busno << 16) | (dev << 11) | (func << 8) | (reg & 0xfc) | 0x80000000; + /* start the configuration cycle */ - TITAN_WRITE(address_reg, address); + ocd_writel(address, TITAN_PCI_0_CONFIG_ADDRESS); + tmp = ocd_readl(TITAN_PCI_0_CONFIG_DATA) >> ((reg & 3) << 3); switch (size) { case 1: - TITAN_READ_8(data_reg + (reg & 0x3), val); - break; - + tmp &= 0xff; case 2: - TITAN_READ_16(data_reg + (reg & 0x2), val); - break; - - case 4: - TITAN_READ(data_reg, val); - break; + tmp &= 0xffff; } + *val = tmp; return PCIBIOS_SUCCESSFUL; } -/* - * Titan PCI Config Byte Write - */ static int titan_write_config(struct pci_bus *bus, unsigned int devfn, int reg, int size, u32 val) { - uint32_t address_reg, data_reg, address; + uint32_t address; int dev, busno, func; busno = bus->number; dev = PCI_SLOT(devfn); func = PCI_FUNC(devfn); - address_reg = TITAN_PCI_0_CONFIG_ADDRESS; - data_reg = TITAN_PCI_0_CONFIG_DATA; - address = (busno << 16) | (dev << 11) | (func << 8) | (reg & 0xfc) | 0x80000000; /* start the configuration cycle */ - TITAN_WRITE(address_reg, address); + ocd_writel(address, TITAN_PCI_0_CONFIG_ADDRESS); /* write the data */ switch (size) { case 1: - TITAN_WRITE_8(data_reg + (reg & 0x3), val); + ocd_writeb(val, TITAN_PCI_0_CONFIG_DATA + (~reg & 0x3)); break; case 2: - TITAN_WRITE_16(data_reg + (reg & 0x2), val); + ocd_writew(val, TITAN_PCI_0_CONFIG_DATA + (~reg & 0x2)); break; case 4: - TITAN_WRITE(data_reg, val); + ocd_writel(val, TITAN_PCI_0_CONFIG_DATA); break; } @@ -120,16 +109,3 @@ struct pci_ops titan_pci_ops = { titan_read_config, titan_write_config, }; - -void __init pcibios_init(void) -{ - /* - * XXX These values below need to change - */ - ioport_resource.start = 0xe0000000; - ioport_resource.end = 0xe0000000 + 0x20000000 - 1; - iomem_resource.start = 0xc0000000; - iomem_resource.end = 0xc0000000 + 0x20000000 - 1; - - pci_scan_bus(0, &titan_pci_ops, NULL); -}