Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 313722
b: refs/heads/master
c: 07e4f80
h: refs/heads/master
v: v3
  • Loading branch information
Scott Wood authored and Kumar Gala committed Jul 11, 2012
1 parent 0c5e7ba commit ea13d2a
Show file tree
Hide file tree
Showing 3 changed files with 79 additions and 2 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 478a4829d815865b919c1fa20f0f33543a2291fb
refs/heads/master: 07e4f8014f4d3404de7cdeaba3fe307cc6eecb79
71 changes: 70 additions & 1 deletion trunk/arch/powerpc/sysdev/fsl_pci.c
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
/*
* MPC83xx/85xx/86xx PCI/PCIE support routing.
*
* Copyright 2007-2011 Freescale Semiconductor, Inc.
* Copyright 2007-2012 Freescale Semiconductor, Inc.
* Copyright 2008-2009 MontaVista Software, Inc.
*
* Initial author: Xianghua Xiao <x.xiao@freescale.com>
Expand Down Expand Up @@ -807,3 +807,72 @@ u64 fsl_pci_immrbar_base(struct pci_controller *hose)

return 0;
}

#if defined(CONFIG_FSL_SOC_BOOKE) || defined(CONFIG_PPC_86xx)
static const struct of_device_id pci_ids[] = {
{ .compatible = "fsl,mpc8540-pci", },
{ .compatible = "fsl,mpc8548-pcie", },
{ .compatible = "fsl,mpc8610-pci", },
{ .compatible = "fsl,mpc8641-pcie", },
{ .compatible = "fsl,p1022-pcie", },
{ .compatible = "fsl,p1010-pcie", },
{ .compatible = "fsl,p1023-pcie", },
{ .compatible = "fsl,p4080-pcie", },
{ .compatible = "fsl,qoriq-pcie-v2.3", },
{ .compatible = "fsl,qoriq-pcie-v2.2", },
{},
};

struct device_node *fsl_pci_primary;

void __devinit fsl_pci_init(void)
{
struct device_node *node;
struct pci_controller *hose;
dma_addr_t max = 0xffffffff;

/* Callers can specify the primary bus using other means. */
if (!fsl_pci_primary) {
/* If a PCI host bridge contains an ISA node, it's primary. */
node = of_find_node_by_type(NULL, "isa");
while ((fsl_pci_primary = of_get_parent(node))) {
of_node_put(node);
node = fsl_pci_primary;

if (of_match_node(pci_ids, node))
break;
}
}

node = NULL;
for_each_node_by_type(node, "pci") {
if (of_match_node(pci_ids, node)) {
/*
* If there's no PCI host bridge with ISA, arbitrarily
* designate one as primary. This can go away once
* various bugs with primary-less systems are fixed.
*/
if (!fsl_pci_primary)
fsl_pci_primary = node;

fsl_add_bridge(node, fsl_pci_primary == node);
hose = pci_find_hose_for_OF_device(node);
max = min(max, hose->dma_window_base_cur +
hose->dma_window_size);
}
}

#ifdef CONFIG_SWIOTLB
/*
* if we couldn't map all of DRAM via the dma windows
* we need SWIOTLB to handle buffers located outside of
* dma capable memory region
*/
if (memblock_end_of_DRAM() - 1 > max) {
ppc_swiotlb_enable = 1;
set_pci_dma_ops(&swiotlb_dma_ops);
ppc_md.pci_dma_dev_setup = pci_dma_dev_setup_swiotlb;
}
#endif
}
#endif
8 changes: 8 additions & 0 deletions trunk/arch/powerpc/sysdev/fsl_pci.h
Original file line number Diff line number Diff line change
Expand Up @@ -93,5 +93,13 @@ extern void fsl_pcibios_fixup_bus(struct pci_bus *bus);
extern int mpc83xx_add_bridge(struct device_node *dev);
u64 fsl_pci_immrbar_base(struct pci_controller *hose);

extern struct device_node *fsl_pci_primary;

#ifdef CONFIG_FSL_PCI
void fsl_pci_init(void);
#else
static inline void fsl_pci_init(void) {}
#endif

#endif /* __POWERPC_FSL_PCI_H */
#endif /* __KERNEL__ */

0 comments on commit ea13d2a

Please sign in to comment.