sh: pci: Set pci_cache_line_size on SH7780 via the PCICLS register.
authorPaul Mundt <lethal@linux-sh.org>
Fri, 17 Apr 2009 07:38:00 +0000 (16:38 +0900)
committerPaul Mundt <lethal@linux-sh.org>
Fri, 17 Apr 2009 07:38:00 +0000 (16:38 +0900)
The SH7780 PCIC contains a read-only cache line size register that we can
derive pci_cache_line_size from. So, make sure that the software idea of
the cache line size actually matches the host controller's idea.

Signed-off-by: Paul Mundt <lethal@linux-sh.org>
arch/sh/drivers/pci/pci-sh7780.c

index 19bac21..fa73b0d 100644 (file)
 #include <linux/delay.h>
 #include "pci-sh4.h"
 
-/*
- * Initialization. Try all known PCI access methods. Note that we support
- * using both PCI BIOS and direct access: in such cases, we use I/O ports
- * to access config space.
- *
- * Note that the platform specific initialization (BSC registers, and memory
- * space mapping) will be called via the platform defined function
- * pcibios_init_platform().
- */
 int __init sh7780_pci_init(struct pci_channel *chan)
 {
        unsigned int id;
@@ -70,19 +61,31 @@ int __init sh7780_pci_init(struct pci_channel *chan)
        if ((ret = sh4_pci_check_direct(chan)) != 0)
                return ret;
 
+       /*
+        * Platform specific initialization (BSC registers, and memory space
+        * mapping) will be called via the platform defined function
+        * pcibios_init_platform().
+        */
        return pcibios_init_platform();
 }
 
+extern u8 pci_cache_line_size;
+
 int __init sh7780_pcic_init(struct pci_channel *chan,
                            struct sh4_pci_address_map *map)
 {
        u32 word;
 
+       /*
+        * Set the class and sub-class codes.
+        */
        __raw_writeb(PCI_CLASS_BRIDGE_HOST >> 8,
                     chan->reg_base + SH7780_PCIBCC);
        __raw_writeb(PCI_CLASS_BRIDGE_HOST & 0xff,
                     chan->reg_base + SH7780_PCISUB);
 
+       pci_cache_line_size = pci_read_reg(chan, SH7780_PCICLS) / 4;
+
        /* set the command/status bits to:
         * Wait Cycle Control + Parity Enable + Bus Master +
         * Mem space enable