aboutsummaryrefslogtreecommitdiffstats
path: root/arch/ia64/pci
diff options
context:
space:
mode:
authorJesse Barnes <jbarnes@virtuousgeek.org>2009-10-26 16:20:44 -0400
committerJesse Barnes <jbarnes@virtuousgeek.org>2009-11-04 11:47:10 -0500
commitac1aa47b131416a6ff37eb1005a0a1d2541aad6c (patch)
tree1d7efa15a16f61664a240520970e729b1a47e4a5 /arch/ia64/pci
parent99935a7a59eaca0292c1a5880e10bae03f4a5e3d (diff)
PCI: determine CLS more intelligently
Till now, CLS has been determined either by arch code or as L1_CACHE_BYTES. Only x86 and ia64 set CLS explicitly and x86 doesn't always get it right. On most configurations, the chance is that firmware configures the correct value during boot. This patch makes pci_init() determine CLS by looking at what firmware has configured. It scans all devices and if all non-zero values agree, the value is used. If none is configured or there is a disagreement, pci_dfl_cache_line_size is used. arch can set the dfl value (via PCI_CACHE_LINE_BYTES or pci_dfl_cache_line_size) or override the actual one. ia64, x86 and sparc64 updated to set the default cls instead of the actual one. While at it, declare pci_cache_line_size and pci_dfl_cache_line_size in pci.h and drop private declarations from arch code. Signed-off-by: Tejun Heo <tj@kernel.org> Acked-by: David Miller <davem@davemloft.net> Acked-by: Greg KH <gregkh@suse.de> Cc: Ingo Molnar <mingo@elte.hu> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: Tony Luck <tony.luck@intel.com> Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
Diffstat (limited to 'arch/ia64/pci')
-rw-r--r--arch/ia64/pci/pci.c9
1 files changed, 3 insertions, 6 deletions
diff --git a/arch/ia64/pci/pci.c b/arch/ia64/pci/pci.c
index c0fca2c1c85..d60e7195b7d 100644
--- a/arch/ia64/pci/pci.c
+++ b/arch/ia64/pci/pci.c
@@ -720,9 +720,6 @@ int ia64_pci_legacy_write(struct pci_bus *bus, u16 port, u32 val, u8 size)
720 return ret; 720 return ret;
721} 721}
722 722
723/* It's defined in drivers/pci/pci.c */
724extern u8 pci_cache_line_size;
725
726/** 723/**
727 * set_pci_cacheline_size - determine cacheline size for PCI devices 724 * set_pci_cacheline_size - determine cacheline size for PCI devices
728 * 725 *
@@ -731,7 +728,7 @@ extern u8 pci_cache_line_size;
731 * 728 *
732 * Code mostly taken from arch/ia64/kernel/palinfo.c:cache_info(). 729 * Code mostly taken from arch/ia64/kernel/palinfo.c:cache_info().
733 */ 730 */
734static void __init set_pci_cacheline_size(void) 731static void __init set_pci_dfl_cacheline_size(void)
735{ 732{
736 unsigned long levels, unique_caches; 733 unsigned long levels, unique_caches;
737 long status; 734 long status;
@@ -751,7 +748,7 @@ static void __init set_pci_cacheline_size(void)
751 "(status=%ld)\n", __func__, status); 748 "(status=%ld)\n", __func__, status);
752 return; 749 return;
753 } 750 }
754 pci_cache_line_size = (1 << cci.pcci_line_size) / 4; 751 pci_dfl_cache_line_size = (1 << cci.pcci_line_size) / 4;
755} 752}
756 753
757u64 ia64_dma_get_required_mask(struct device *dev) 754u64 ia64_dma_get_required_mask(struct device *dev)
@@ -782,7 +779,7 @@ EXPORT_SYMBOL_GPL(dma_get_required_mask);
782 779
783static int __init pcibios_init(void) 780static int __init pcibios_init(void)
784{ 781{
785 set_pci_cacheline_size(); 782 set_pci_dfl_cacheline_size();
786 return 0; 783 return 0;
787} 784}
788 785