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

« back to all changes in this revision

Viewing changes to arch/powerpc/sysdev/fsl_pci.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:
38
38
 
39
39
static void __init quirk_fsl_pcie_header(struct pci_dev *dev)
40
40
{
 
41
        u8 progif;
 
42
 
41
43
        /* if we aren't a PCIe don't bother */
42
44
        if (!pci_find_capability(dev, PCI_CAP_ID_EXP))
43
45
                return;
44
46
 
 
47
        /* if we aren't in host mode don't bother */
 
48
        pci_read_config_byte(dev, PCI_CLASS_PROG, &progif);
 
49
        if (progif & 0x1)
 
50
                return;
 
51
 
45
52
        dev->class = PCI_CLASS_BRIDGE_PCI << 8;
46
53
        fsl_pcie_bus_fixup = 1;
47
54
        return;
64
71
{
65
72
        resource_size_t pci_addr = res->start - offset;
66
73
        resource_size_t phys_addr = res->start;
67
 
        resource_size_t size = res->end - res->start + 1;
 
74
        resource_size_t size = resource_size(res);
68
75
        u32 flags = 0x80044000; /* enable & mem R/W */
69
76
        unsigned int i;
70
77
 
108
115
        char *name = hose->dn->full_name;
109
116
 
110
117
        pr_debug("PCI memory map start 0x%016llx, size 0x%016llx\n",
111
 
                    (u64)rsrc->start, (u64)rsrc->end - (u64)rsrc->start + 1);
 
118
                 (u64)rsrc->start, (u64)resource_size(rsrc));
112
119
 
113
120
        if (of_device_is_compatible(hose->dn, "fsl,qoriq-pcie-v2.2")) {
114
121
                win_idx = 2;
116
123
                end_idx = 3;
117
124
        }
118
125
 
119
 
        pci = ioremap(rsrc->start, rsrc->end - rsrc->start + 1);
 
126
        pci = ioremap(rsrc->start, resource_size(rsrc));
120
127
        if (!pci) {
121
128
            dev_err(hose->parent, "Unable to map ATMU registers\n");
122
129
            return;
153
160
                } else {
154
161
                        pr_debug("PCI IO resource start 0x%016llx, size 0x%016llx, "
155
162
                                 "phy base 0x%016llx.\n",
156
 
                                (u64)hose->io_resource.start,
157
 
                                (u64)hose->io_resource.end - (u64)hose->io_resource.start + 1,
158
 
                                (u64)hose->io_base_phys);
 
163
                                 (u64)hose->io_resource.start,
 
164
                                 (u64)resource_size(&hose->io_resource),
 
165
                                 (u64)hose->io_base_phys);
159
166
                        out_be32(&pci->pow[j].potar, (hose->io_resource.start >> 12));
160
167
                        out_be32(&pci->pow[j].potear, 0);
161
168
                        out_be32(&pci->pow[j].powbar, (hose->io_base_phys >> 12));
323
330
        struct pci_controller *hose;
324
331
        struct resource rsrc;
325
332
        const int *bus_range;
 
333
        u8 progif;
326
334
 
327
335
        if (!of_device_is_available(dev)) {
328
336
                pr_warning("%s: disabled\n", dev->full_name);
343
351
                printk(KERN_WARNING "Can't get bus-range for %s, assume"
344
352
                        " bus 0\n", dev->full_name);
345
353
 
346
 
        ppc_pci_add_flags(PPC_PCI_REASSIGN_ALL_BUS);
 
354
        pci_add_flags(PCI_REASSIGN_ALL_BUS);
347
355
        hose = pcibios_alloc_controller(dev);
348
356
        if (!hose)
349
357
                return -ENOMEM;
353
361
 
354
362
        setup_indirect_pci(hose, rsrc.start, rsrc.start + 0x4,
355
363
                PPC_INDIRECT_TYPE_BIG_ENDIAN);
 
364
 
 
365
        early_read_config_byte(hose, 0, 0, PCI_CLASS_PROG, &progif);
 
366
        if ((progif & 1) == 1) {
 
367
                /* unmap cfg_data & cfg_addr separately if not on same page */
 
368
                if (((unsigned long)hose->cfg_data & PAGE_MASK) !=
 
369
                    ((unsigned long)hose->cfg_addr & PAGE_MASK))
 
370
                        iounmap(hose->cfg_data);
 
371
                iounmap(hose->cfg_addr);
 
372
                pcibios_free_controller(hose);
 
373
                return 0;
 
374
        }
 
375
 
356
376
        setup_pci_cmd(hose);
357
377
 
358
378
        /* check PCI express link status */
380
400
 
381
401
        return 0;
382
402
}
383
 
 
384
 
DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_MPC8548E, quirk_fsl_pcie_header);
385
 
DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_MPC8548, quirk_fsl_pcie_header);
386
 
DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_MPC8543E, quirk_fsl_pcie_header);
387
 
DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_MPC8543, quirk_fsl_pcie_header);
388
 
DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_MPC8547E, quirk_fsl_pcie_header);
389
 
DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_MPC8545E, quirk_fsl_pcie_header);
390
 
DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_MPC8545, quirk_fsl_pcie_header);
391
 
DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_MPC8569E, quirk_fsl_pcie_header);
392
 
DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_MPC8569, quirk_fsl_pcie_header);
393
 
DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_MPC8568E, quirk_fsl_pcie_header);
394
 
DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_MPC8568, quirk_fsl_pcie_header);
395
 
DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_MPC8567E, quirk_fsl_pcie_header);
396
 
DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_MPC8567, quirk_fsl_pcie_header);
397
 
DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_MPC8533E, quirk_fsl_pcie_header);
398
 
DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_MPC8533, quirk_fsl_pcie_header);
399
 
DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_MPC8544E, quirk_fsl_pcie_header);
400
 
DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_MPC8544, quirk_fsl_pcie_header);
401
 
DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_MPC8572E, quirk_fsl_pcie_header);
402
 
DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_MPC8572, quirk_fsl_pcie_header);
403
 
DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_MPC8536E, quirk_fsl_pcie_header);
404
 
DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_MPC8536, quirk_fsl_pcie_header);
405
 
DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_MPC8641, quirk_fsl_pcie_header);
406
 
DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_MPC8641D, quirk_fsl_pcie_header);
407
 
DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_MPC8610, quirk_fsl_pcie_header);
408
 
DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_P1011E, quirk_fsl_pcie_header);
409
 
DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_P1011, quirk_fsl_pcie_header);
410
 
DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_P1013E, quirk_fsl_pcie_header);
411
 
DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_P1013, quirk_fsl_pcie_header);
412
 
DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_P1020E, quirk_fsl_pcie_header);
413
 
DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_P1020, quirk_fsl_pcie_header);
414
 
DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_P1021E, quirk_fsl_pcie_header);
415
 
DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_P1021, quirk_fsl_pcie_header);
416
 
DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_P1022E, quirk_fsl_pcie_header);
417
 
DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_P1022, quirk_fsl_pcie_header);
418
 
DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_P2010E, quirk_fsl_pcie_header);
419
 
DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_P2010, quirk_fsl_pcie_header);
420
 
DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_P2020E, quirk_fsl_pcie_header);
421
 
DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_P2020, quirk_fsl_pcie_header);
422
 
DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_P2040E, quirk_fsl_pcie_header);
423
 
DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_P2040, quirk_fsl_pcie_header);
424
 
DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_P3041E, quirk_fsl_pcie_header);
425
 
DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_P3041, quirk_fsl_pcie_header);
426
 
DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_P4040E, quirk_fsl_pcie_header);
427
 
DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_P4040, quirk_fsl_pcie_header);
428
 
DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_P4080E, quirk_fsl_pcie_header);
429
 
DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_P4080, quirk_fsl_pcie_header);
430
 
DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_P5010E, quirk_fsl_pcie_header);
431
 
DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_P5010, quirk_fsl_pcie_header);
432
 
DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_P5020E, quirk_fsl_pcie_header);
433
 
DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_P5020, quirk_fsl_pcie_header);
434
403
#endif /* CONFIG_FSL_SOC_BOOKE || CONFIG_PPC_86xx */
435
404
 
 
405
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_FREESCALE, PCI_ANY_ID, quirk_fsl_pcie_header);
 
406
 
436
407
#if defined(CONFIG_PPC_83xx) || defined(CONFIG_PPC_MPC512x)
437
 
DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_MPC8308, quirk_fsl_pcie_header);
438
 
DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_MPC8314E, quirk_fsl_pcie_header);
439
 
DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_MPC8314, quirk_fsl_pcie_header);
440
 
DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_MPC8315E, quirk_fsl_pcie_header);
441
 
DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_MPC8315, quirk_fsl_pcie_header);
442
 
DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_MPC8377E, quirk_fsl_pcie_header);
443
 
DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_MPC8377, quirk_fsl_pcie_header);
444
 
DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_MPC8378E, quirk_fsl_pcie_header);
445
 
DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_MPC8378, quirk_fsl_pcie_header);
446
 
 
447
408
struct mpc83xx_pcie_priv {
448
409
        void __iomem *cfg_type0;
449
410
        void __iomem *cfg_type1;
679
640
                       " bus 0\n", dev->full_name);
680
641
        }
681
642
 
682
 
        ppc_pci_add_flags(PPC_PCI_REASSIGN_ALL_BUS);
 
643
        pci_add_flags(PCI_REASSIGN_ALL_BUS);
683
644
        hose = pcibios_alloc_controller(dev);
684
645
        if (!hose)
685
646
                return -ENOMEM;