X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;ds=sidebyside;f=arch%2Fmips%2Fpci%2Fops-tx4927.c;h=150419c8b41427717afd66328a655783993a3f59;hb=a2f44b27303a5353859d77a3e96a1d3f33f56ab7;hp=43863ab08c8cafc95795f5ce6bb02c9c79beed03;hpb=433e2af4175021d339b067f6e7ee0a4e4c4f7e2d;p=linux-2.6.git diff --git a/arch/mips/pci/ops-tx4927.c b/arch/mips/pci/ops-tx4927.c index 43863ab08..150419c8b 100644 --- a/arch/mips/pci/ops-tx4927.c +++ b/arch/mips/pci/ops-tx4927.c @@ -1,16 +1,16 @@ /* * Copyright 2001 MontaVista Software Inc. * Author: MontaVista Software, Inc. - * ahennessy@mvista.com + * ahennessy@mvista.com * - * Copyright (C) 2000-2001 Toshiba Corporation + * Copyright (C) 2000-2001 Toshiba Corporation * Copyright (C) 2004 by Ralf Baechle (ralf@linux-mips.org) * * Based on arch/mips/ddb5xxx/ddb5477/pci_ops.c * * Define the pci_ops for the Toshiba rbtx4927 * - * Much of the code is derived from the original DDB5074 port by + * Much of the code is derived from the original DDB5074 port by * Geert Uytterhoeven * * Copyright 2004 MontaVista Software Inc. @@ -42,8 +42,8 @@ #include #include +#include #include -#include /* initialize in setup */ struct resource pci_io_resource = { @@ -107,16 +107,6 @@ static int tx4927_pcibios_read_config(struct pci_bus *bus, unsigned int devfn, i dev = PCI_SLOT(devfn); func = PCI_FUNC(devfn); - if (size == 2) { - if (where & 1) - return PCIBIOS_BAD_REGISTER_NUMBER; - } - - if (size == 4) { - if (where & 3) - return PCIBIOS_BAD_REGISTER_NUMBER; - } - /* check if the bus is top-level */ if (bus->parent != NULL) { busno = bus->number; @@ -129,12 +119,22 @@ static int tx4927_pcibios_read_config(struct pci_bus *bus, unsigned int devfn, i switch (size) { case 1: - *val = *(volatile u8 *) ((ulong) & tx4927_pcicptr-> - g2pcfgdata | (where & 3)); + *val = *(volatile u8 *) ((unsigned long) & tx4927_pcicptr-> + g2pcfgdata | +#ifdef __LITTLE_ENDIAN + (where & 3)); +#else + ((where & 0x3) ^ 0x3)); +#endif break; case 2: - *val = *(volatile u16 *) ((ulong) & tx4927_pcicptr-> - g2pcfgdata | (where & 3)); + *val = *(volatile u16 *) ((unsigned long) & tx4927_pcicptr-> + g2pcfgdata | +#ifdef __LITTLE_ENDIAN + (where & 3)); +#else + ((where & 0x3) ^ 0x2)); +#endif break; case 4: *val = tx4927_pcicptr->g2pcfgdata; @@ -156,16 +156,6 @@ static int tx4927_pcibios_write_config(struct pci_bus *bus, unsigned int devfn, dev = PCI_SLOT(devfn); func = PCI_FUNC(devfn); - if (size == 1) { - if (where & 1) - return PCIBIOS_BAD_REGISTER_NUMBER; - } - - if (size == 4) { - if (where & 3) - return PCIBIOS_BAD_REGISTER_NUMBER; - } - /* check if the bus is top-level */ if (bus->parent != NULL) { busno = bus->number; @@ -178,13 +168,23 @@ static int tx4927_pcibios_write_config(struct pci_bus *bus, unsigned int devfn, switch (size) { case 1: - *(volatile u8 *) ((ulong) & tx4927_pcicptr-> - g2pcfgdata | (where & 3)) = val; + *(volatile u8 *) ((unsigned long) & tx4927_pcicptr-> + g2pcfgdata | +#ifdef __LITTLE_ENDIAN + (where & 3)) = val; +#else + ((where & 0x3) ^ 0x3)) = val; +#endif break; case 2: - *(volatile u16 *) ((ulong) & tx4927_pcicptr-> - g2pcfgdata | (where & 3)) = val; + *(volatile u16 *) ((unsigned long) & tx4927_pcicptr-> + g2pcfgdata | +#ifdef __LITTLE_ENDIAN + (where & 3)) = val; +#else + ((where & 0x3) ^ 0x2)) = val; +#endif break; case 4: tx4927_pcicptr->g2pcfgdata = val;