fsl_pci.c (08871c097ea5a11c95146ba8310272571d2bbfc4) fsl_pci.c (0e47ff1ce65bbd0b12a9421a2756b26987ea5083)
1/*
2 * MPC83xx/85xx/86xx PCI/PCIE support routing.
3 *
4 * Copyright 2007-2011 Freescale Semiconductor, Inc.
5 * Copyright 2008-2009 MontaVista Software, Inc.
6 *
7 * Initial author: Xianghua Xiao <x.xiao@freescale.com>
8 * Recode: ZHANG WEI <wei.zhang@freescale.com>

--- 24 unchanged lines hidden (view full) ---

33#include <asm/machdep.h>
34#include <sysdev/fsl_soc.h>
35#include <sysdev/fsl_pci.h>
36
37static int fsl_pcie_bus_fixup, is_mpc83xx_pci;
38
39static void __init quirk_fsl_pcie_header(struct pci_dev *dev)
40{
1/*
2 * MPC83xx/85xx/86xx PCI/PCIE support routing.
3 *
4 * Copyright 2007-2011 Freescale Semiconductor, Inc.
5 * Copyright 2008-2009 MontaVista Software, Inc.
6 *
7 * Initial author: Xianghua Xiao <x.xiao@freescale.com>
8 * Recode: ZHANG WEI <wei.zhang@freescale.com>

--- 24 unchanged lines hidden (view full) ---

33#include <asm/machdep.h>
34#include <sysdev/fsl_soc.h>
35#include <sysdev/fsl_pci.h>
36
37static int fsl_pcie_bus_fixup, is_mpc83xx_pci;
38
39static void __init quirk_fsl_pcie_header(struct pci_dev *dev)
40{
41 u8 progif;
42
43 /* if we aren't a PCIe don't bother */
44 if (!pci_find_capability(dev, PCI_CAP_ID_EXP))
45 return;
46
41 /* if we aren't a PCIe don't bother */
42 if (!pci_find_capability(dev, PCI_CAP_ID_EXP))
43 return;
44
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
52 dev->class = PCI_CLASS_BRIDGE_PCI << 8;
53 fsl_pcie_bus_fixup = 1;
54 return;
55}
56
57static int __init fsl_pcie_check_link(struct pci_controller *hose)
58{
59 u32 val;

--- 265 unchanged lines hidden (view full) ---

325}
326
327int __init fsl_add_bridge(struct device_node *dev, int is_primary)
328{
329 int len;
330 struct pci_controller *hose;
331 struct resource rsrc;
332 const int *bus_range;
45 dev->class = PCI_CLASS_BRIDGE_PCI << 8;
46 fsl_pcie_bus_fixup = 1;
47 return;
48}
49
50static int __init fsl_pcie_check_link(struct pci_controller *hose)
51{
52 u32 val;

--- 265 unchanged lines hidden (view full) ---

318}
319
320int __init fsl_add_bridge(struct device_node *dev, int is_primary)
321{
322 int len;
323 struct pci_controller *hose;
324 struct resource rsrc;
325 const int *bus_range;
333 u8 progif;
334
335 if (!of_device_is_available(dev)) {
336 pr_warning("%s: disabled\n", dev->full_name);
337 return -ENODEV;
338 }
339
340 pr_debug("Adding PCI host bridge %s\n", dev->full_name);
341

--- 4 unchanged lines hidden (view full) ---

346 }
347
348 /* Get bus range if any */
349 bus_range = of_get_property(dev, "bus-range", &len);
350 if (bus_range == NULL || len < 2 * sizeof(int))
351 printk(KERN_WARNING "Can't get bus-range for %s, assume"
352 " bus 0\n", dev->full_name);
353
326
327 if (!of_device_is_available(dev)) {
328 pr_warning("%s: disabled\n", dev->full_name);
329 return -ENODEV;
330 }
331
332 pr_debug("Adding PCI host bridge %s\n", dev->full_name);
333

--- 4 unchanged lines hidden (view full) ---

338 }
339
340 /* Get bus range if any */
341 bus_range = of_get_property(dev, "bus-range", &len);
342 if (bus_range == NULL || len < 2 * sizeof(int))
343 printk(KERN_WARNING "Can't get bus-range for %s, assume"
344 " bus 0\n", dev->full_name);
345
354 ppc_pci_add_flags(PPC_PCI_REASSIGN_ALL_BUS);
346 pci_add_flags(PCI_REASSIGN_ALL_BUS);
355 hose = pcibios_alloc_controller(dev);
356 if (!hose)
357 return -ENOMEM;
358
359 hose->first_busno = bus_range ? bus_range[0] : 0x0;
360 hose->last_busno = bus_range ? bus_range[1] : 0xff;
361
362 setup_indirect_pci(hose, rsrc.start, rsrc.start + 0x4,
363 PPC_INDIRECT_TYPE_BIG_ENDIAN);
347 hose = pcibios_alloc_controller(dev);
348 if (!hose)
349 return -ENOMEM;
350
351 hose->first_busno = bus_range ? bus_range[0] : 0x0;
352 hose->last_busno = bus_range ? bus_range[1] : 0xff;
353
354 setup_indirect_pci(hose, rsrc.start, rsrc.start + 0x4,
355 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
376 setup_pci_cmd(hose);
377
378 /* check PCI express link status */
379 if (early_find_capability(hose, 0, 0, PCI_CAP_ID_EXP)) {
380 hose->indirect_type |= PPC_INDIRECT_TYPE_EXT_REG |
381 PPC_INDIRECT_TYPE_SURPRESS_PRIMARY_BUS;
382 if (fsl_pcie_check_link(hose))
383 hose->indirect_type |= PPC_INDIRECT_TYPE_NO_PCIE_LINK;

--- 11 unchanged lines hidden (view full) ---

395 /* This also maps the I/O region and sets isa_io/mem_base */
396 pci_process_bridge_OF_ranges(hose, dev, is_primary);
397
398 /* Setup PEX window registers */
399 setup_pci_atmu(hose, &rsrc);
400
401 return 0;
402}
356 setup_pci_cmd(hose);
357
358 /* check PCI express link status */
359 if (early_find_capability(hose, 0, 0, PCI_CAP_ID_EXP)) {
360 hose->indirect_type |= PPC_INDIRECT_TYPE_EXT_REG |
361 PPC_INDIRECT_TYPE_SURPRESS_PRIMARY_BUS;
362 if (fsl_pcie_check_link(hose))
363 hose->indirect_type |= PPC_INDIRECT_TYPE_NO_PCIE_LINK;

--- 11 unchanged lines hidden (view full) ---

375 /* This also maps the I/O region and sets isa_io/mem_base */
376 pci_process_bridge_OF_ranges(hose, dev, is_primary);
377
378 /* Setup PEX window registers */
379 setup_pci_atmu(hose, &rsrc);
380
381 return 0;
382}
383
384DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_MPC8548E, quirk_fsl_pcie_header);
385DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_MPC8548, quirk_fsl_pcie_header);
386DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_MPC8543E, quirk_fsl_pcie_header);
387DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_MPC8543, quirk_fsl_pcie_header);
388DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_MPC8547E, quirk_fsl_pcie_header);
389DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_MPC8545E, quirk_fsl_pcie_header);
390DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_MPC8545, quirk_fsl_pcie_header);
391DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_MPC8569E, quirk_fsl_pcie_header);
392DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_MPC8569, quirk_fsl_pcie_header);
393DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_MPC8568E, quirk_fsl_pcie_header);
394DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_MPC8568, quirk_fsl_pcie_header);
395DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_MPC8567E, quirk_fsl_pcie_header);
396DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_MPC8567, quirk_fsl_pcie_header);
397DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_MPC8533E, quirk_fsl_pcie_header);
398DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_MPC8533, quirk_fsl_pcie_header);
399DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_MPC8544E, quirk_fsl_pcie_header);
400DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_MPC8544, quirk_fsl_pcie_header);
401DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_MPC8572E, quirk_fsl_pcie_header);
402DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_MPC8572, quirk_fsl_pcie_header);
403DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_MPC8536E, quirk_fsl_pcie_header);
404DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_MPC8536, quirk_fsl_pcie_header);
405DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_MPC8641, quirk_fsl_pcie_header);
406DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_MPC8641D, quirk_fsl_pcie_header);
407DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_MPC8610, quirk_fsl_pcie_header);
408DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_P1011E, quirk_fsl_pcie_header);
409DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_P1011, quirk_fsl_pcie_header);
410DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_P1013E, quirk_fsl_pcie_header);
411DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_P1013, quirk_fsl_pcie_header);
412DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_P1020E, quirk_fsl_pcie_header);
413DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_P1020, quirk_fsl_pcie_header);
414DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_P1021E, quirk_fsl_pcie_header);
415DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_P1021, quirk_fsl_pcie_header);
416DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_P1022E, quirk_fsl_pcie_header);
417DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_P1022, quirk_fsl_pcie_header);
418DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_P2010E, quirk_fsl_pcie_header);
419DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_P2010, quirk_fsl_pcie_header);
420DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_P2020E, quirk_fsl_pcie_header);
421DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_P2020, quirk_fsl_pcie_header);
422DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_P2040E, quirk_fsl_pcie_header);
423DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_P2040, quirk_fsl_pcie_header);
424DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_P3041E, quirk_fsl_pcie_header);
425DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_P3041, quirk_fsl_pcie_header);
426DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_P4040E, quirk_fsl_pcie_header);
427DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_P4040, quirk_fsl_pcie_header);
428DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_P4080E, quirk_fsl_pcie_header);
429DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_P4080, quirk_fsl_pcie_header);
430DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_P5010E, quirk_fsl_pcie_header);
431DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_P5010, quirk_fsl_pcie_header);
432DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_P5020E, quirk_fsl_pcie_header);
433DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_P5020, quirk_fsl_pcie_header);
403#endif /* CONFIG_FSL_SOC_BOOKE || CONFIG_PPC_86xx */
404
434#endif /* CONFIG_FSL_SOC_BOOKE || CONFIG_PPC_86xx */
435
405DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_FREESCALE, PCI_ANY_ID, quirk_fsl_pcie_header);
406
407#if defined(CONFIG_PPC_83xx) || defined(CONFIG_PPC_MPC512x)
436#if defined(CONFIG_PPC_83xx) || defined(CONFIG_PPC_MPC512x)
437DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_MPC8308, quirk_fsl_pcie_header);
438DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_MPC8314E, quirk_fsl_pcie_header);
439DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_MPC8314, quirk_fsl_pcie_header);
440DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_MPC8315E, quirk_fsl_pcie_header);
441DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_MPC8315, quirk_fsl_pcie_header);
442DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_MPC8377E, quirk_fsl_pcie_header);
443DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_MPC8377, quirk_fsl_pcie_header);
444DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_MPC8378E, quirk_fsl_pcie_header);
445DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_MPC8378, quirk_fsl_pcie_header);
446
408struct mpc83xx_pcie_priv {
409 void __iomem *cfg_type0;
410 void __iomem *cfg_type1;
411 u32 dev_base;
412};
413
414struct pex_inbound_window {
415 u32 ar;

--- 219 unchanged lines hidden (view full) ---

635
636 /* Get bus range if any */
637 bus_range = of_get_property(dev, "bus-range", &len);
638 if (bus_range == NULL || len < 2 * sizeof(int)) {
639 printk(KERN_WARNING "Can't get bus-range for %s, assume"
640 " bus 0\n", dev->full_name);
641 }
642
447struct mpc83xx_pcie_priv {
448 void __iomem *cfg_type0;
449 void __iomem *cfg_type1;
450 u32 dev_base;
451};
452
453struct pex_inbound_window {
454 u32 ar;

--- 219 unchanged lines hidden (view full) ---

674
675 /* Get bus range if any */
676 bus_range = of_get_property(dev, "bus-range", &len);
677 if (bus_range == NULL || len < 2 * sizeof(int)) {
678 printk(KERN_WARNING "Can't get bus-range for %s, assume"
679 " bus 0\n", dev->full_name);
680 }
681
643 ppc_pci_add_flags(PPC_PCI_REASSIGN_ALL_BUS);
682 pci_add_flags(PCI_REASSIGN_ALL_BUS);
644 hose = pcibios_alloc_controller(dev);
645 if (!hose)
646 return -ENOMEM;
647
648 hose->first_busno = bus_range ? bus_range[0] : 0;
649 hose->last_busno = bus_range ? bus_range[1] : 0xff;
650
651 if (of_device_is_compatible(dev, "fsl,mpc8314-pcie")) {

--- 63 unchanged lines hidden ---
683 hose = pcibios_alloc_controller(dev);
684 if (!hose)
685 return -ENOMEM;
686
687 hose->first_busno = bus_range ? bus_range[0] : 0;
688 hose->last_busno = bus_range ? bus_range[1] : 0xff;
689
690 if (of_device_is_compatible(dev, "fsl,mpc8314-pcie")) {

--- 63 unchanged lines hidden ---