~ubuntu-branches/ubuntu/trusty/linux-armadaxp/trusty

« back to all changes in this revision

Viewing changes to drivers/pci/quirks.c

  • Committer: Package Import Robot
  • Author(s): Michael Casadevall, Bryan Wu, Dann Frazier, Michael Casadeall
  • Date: 2012-03-10 15:00:54 UTC
  • mfrom: (1.1.1)
  • Revision ID: package-import@ubuntu.com-20120310150054-flugb39zon8vvgwe
Tags: 3.2.0-1600.1
[ Bryan Wu ]
* UBUNTU: import debian/debian.env and debian.armadaxp

[ Dann Frazier ]
* ARM: Armada XP: remove trailing '/' in dirnames in mvRules.mk

[ Michael Casadeall ]
* tools: add some tools for Marvell Armada XP processor
* kernel: timer tick hacking from Marvell
* kernel: Sheeva Errata: add delay on Sheeva when powering down
* net: add Marvell NFP netfilter
* net: socket and skb modifications made by Marvell
* miscdevice: add minor IDs for some Marvell Armada drivers
* fs: introduce memory pool for splice()
* video: EDID detection updates from Marvell Armada XP patchset
* video: backlight: add Marvell Dove LCD backlight driver
* video: display: add THS8200 display driver
* video: framebuffer: add Marvell Dove and Armada XP processor onchip LCD controller driver
* usbtest: add Interrupt transfer testing by Marvell Armada XP code
* usb: ehci: add support for Marvell EHCI controler
* tty/serial: 8250: add support for Marvell Armada XP processor and DeviceTree work
* rtc: add support for Marvell Armada XP onchip RTC controller
* net: pppoe: add Marvell ethernet NFP hook in PPPoE networking driver
* mtd: nand: add support for Marvell Armada XP Nand Flash Controller
* mtd: maps: add Marvell Armada XP specific map driver
* mmc: add support for Marvell Armada XP MMC/SD host controller
* i2c: add support for Marvell Armada XP onchip i2c bus controller
* hwmon: add Kconfig option for Armada XP onchip thermal sensor driver
* dmaengine: add Net DMA support for splice and update Marvell XOR DMA engine driver
* ata: add support for Marvell Armada XP SATA controller and update some quirks
* ARM: add Marvell Armada XP machine to mach-types
* ARM: oprofile: add support for Marvell PJ4B core
* ARM: mm: more ARMv6 switches for Marvell Armada XP
* ARM: remove static declaration to allow compilation
* ARM: alignment access fault trick
* ARM: mm: skip some fault fixing when run on NONE SMP ARMv6 mode during early abort event
* ARM: mm: add Marvell Sheeva CPU Architecture for PJ4B
* ARM: introduce optimized copy operation for Marvell Armada XP
* ARM: SAUCE: hardware breakpoint trick for Marvell Armada XP
* ARM: big endian and little endian tricks for Marvell Armada XP
* ARM: SAUCE: Add Marvell Armada XP build rules to arch/arm/kernel/Makefile
* ARM: vfp: add special handling for Marvell Armada XP
* ARM: add support for Marvell U-Boot
* ARM: add mv_controller_num for ARM PCI drivers
* ARM: add support for local PMUs, general SMP tweaks and cache flushing
* ARM: add Marvell device identifies in glue-proc.h
* ARM: add IPC driver support for Marvell platforms
* ARM: add DMA mapping for Marvell platforms
* ARM: add Sheeva errata and PJ4B code for booting
* ARM: update Kconfig and Makefile to include Marvell Armada XP platforms
* ARM: Armada XP: import LSP from Marvell for Armada XP 3.2 kernel enablement

Show diffs side-by-side

added added

removed removed

Lines of Context:
17
17
 
18
18
#include <linux/types.h>
19
19
#include <linux/kernel.h>
 
20
#include <linux/export.h>
20
21
#include <linux/pci.h>
21
22
#include <linux/init.h>
22
23
#include <linux/delay.h>
2788
2789
DECLARE_PCI_FIXUP_RESUME_EARLY(PCI_VENDOR_ID_RICOH, PCI_DEVICE_ID_RICOH_R5CE823, ricoh_mmc_fixup_r5c832);
2789
2790
#endif /*CONFIG_MMC_RICOH_MMC*/
2790
2791
 
2791
 
#if defined(CONFIG_DMAR) || defined(CONFIG_INTR_REMAP)
 
2792
#ifdef CONFIG_DMAR_TABLE
2792
2793
#define VTUNCERRMSK_REG 0x1ac
2793
2794
#define VTD_MSK_SPEC_ERRORS     (1 << 31)
2794
2795
/*
2822
2823
}
2823
2824
DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_TI, 0xb800, fixup_ti816x_class);
2824
2825
 
 
2826
/* Some PCIe devices do not work reliably with the claimed maximum
 
2827
 * payload size supported.
 
2828
 */
 
2829
static void __devinit fixup_mpss_256(struct pci_dev *dev)
 
2830
{
 
2831
        dev->pcie_mpss = 1; /* 256 bytes */
 
2832
}
 
2833
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_SOLARFLARE,
 
2834
                         PCI_DEVICE_ID_SOLARFLARE_SFC4000A_0, fixup_mpss_256);
 
2835
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_SOLARFLARE,
 
2836
                         PCI_DEVICE_ID_SOLARFLARE_SFC4000A_1, fixup_mpss_256);
 
2837
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_SOLARFLARE,
 
2838
                         PCI_DEVICE_ID_SOLARFLARE_SFC4000B, fixup_mpss_256);
 
2839
 
 
2840
/* Intel 5000 and 5100 Memory controllers have an errata with read completion
 
2841
 * coalescing (which is enabled by default on some BIOSes) and MPS of 256B.
 
2842
 * Since there is no way of knowing what the PCIE MPS on each fabric will be
 
2843
 * until all of the devices are discovered and buses walked, read completion
 
2844
 * coalescing must be disabled.  Unfortunately, it cannot be re-enabled because
 
2845
 * it is possible to hotplug a device with MPS of 256B.
 
2846
 */
 
2847
static void __devinit quirk_intel_mc_errata(struct pci_dev *dev)
 
2848
{
 
2849
        int err;
 
2850
        u16 rcc;
 
2851
 
 
2852
        if (pcie_bus_config == PCIE_BUS_TUNE_OFF)
 
2853
                return;
 
2854
 
 
2855
        /* Intel errata specifies bits to change but does not say what they are.
 
2856
         * Keeping them magical until such time as the registers and values can
 
2857
         * be explained.
 
2858
         */
 
2859
        err = pci_read_config_word(dev, 0x48, &rcc);
 
2860
        if (err) {
 
2861
                dev_err(&dev->dev, "Error attempting to read the read "
 
2862
                        "completion coalescing register.\n");
 
2863
                return;
 
2864
        }
 
2865
 
 
2866
        if (!(rcc & (1 << 10)))
 
2867
                return;
 
2868
 
 
2869
        rcc &= ~(1 << 10);
 
2870
 
 
2871
        err = pci_write_config_word(dev, 0x48, rcc);
 
2872
        if (err) {
 
2873
                dev_err(&dev->dev, "Error attempting to write the read "
 
2874
                        "completion coalescing register.\n");
 
2875
                return;
 
2876
        }
 
2877
 
 
2878
        pr_info_once("Read completion coalescing disabled due to hardware "
 
2879
                     "errata relating to 256B MPS.\n");
 
2880
}
 
2881
/* Intel 5000 series memory controllers and ports 2-7 */
 
2882
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x25c0, quirk_intel_mc_errata);
 
2883
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x25d0, quirk_intel_mc_errata);
 
2884
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x25d4, quirk_intel_mc_errata);
 
2885
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x25d8, quirk_intel_mc_errata);
 
2886
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x25e2, quirk_intel_mc_errata);
 
2887
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x25e3, quirk_intel_mc_errata);
 
2888
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x25e4, quirk_intel_mc_errata);
 
2889
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x25e5, quirk_intel_mc_errata);
 
2890
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x25e6, quirk_intel_mc_errata);
 
2891
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x25e7, quirk_intel_mc_errata);
 
2892
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x25f7, quirk_intel_mc_errata);
 
2893
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x25f8, quirk_intel_mc_errata);
 
2894
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x25f9, quirk_intel_mc_errata);
 
2895
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x25fa, quirk_intel_mc_errata);
 
2896
/* Intel 5100 series memory controllers and ports 2-7 */
 
2897
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x65c0, quirk_intel_mc_errata);
 
2898
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x65e2, quirk_intel_mc_errata);
 
2899
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x65e3, quirk_intel_mc_errata);
 
2900
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x65e4, quirk_intel_mc_errata);
 
2901
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x65e5, quirk_intel_mc_errata);
 
2902
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x65e6, quirk_intel_mc_errata);
 
2903
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x65e7, quirk_intel_mc_errata);
 
2904
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x65f7, quirk_intel_mc_errata);
 
2905
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x65f8, quirk_intel_mc_errata);
 
2906
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x65f9, quirk_intel_mc_errata);
 
2907
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x65fa, quirk_intel_mc_errata);
 
2908
 
2825
2909
static void pci_do_fixups(struct pci_dev *dev, struct pci_fixup *f,
2826
2910
                          struct pci_fixup *end)
2827
2911
{