|
@@ -20,6 +20,7 @@
|
|
|
#include <linux/seq_file.h>
|
|
|
#include <linux/interrupt.h>
|
|
|
#include <linux/of_platform.h>
|
|
|
+#include <linux/lmb.h>
|
|
|
|
|
|
#include <asm/system.h>
|
|
|
#include <asm/time.h>
|
|
@@ -30,6 +31,7 @@
|
|
|
#include <asm/udbg.h>
|
|
|
#include <asm/mpic.h>
|
|
|
#include <asm/i8259.h>
|
|
|
+#include <asm/swiotlb.h>
|
|
|
|
|
|
#include <sysdev/fsl_soc.h>
|
|
|
#include <sysdev/fsl_pci.h>
|
|
@@ -155,7 +157,9 @@ static void __init mpc85xx_ds_setup_arch(void)
|
|
|
{
|
|
|
#ifdef CONFIG_PCI
|
|
|
struct device_node *np;
|
|
|
+ struct pci_controller *hose;
|
|
|
#endif
|
|
|
+ dma_addr_t max = 0xffffffff;
|
|
|
|
|
|
if (ppc_md.progress)
|
|
|
ppc_md.progress("mpc85xx_ds_setup_arch()", 0);
|
|
@@ -171,6 +175,10 @@ static void __init mpc85xx_ds_setup_arch(void)
|
|
|
fsl_add_bridge(np, 1);
|
|
|
else
|
|
|
fsl_add_bridge(np, 0);
|
|
|
+
|
|
|
+ hose = pci_find_hose_for_OF_device(np);
|
|
|
+ max = min(max, hose->dma_window_base_cur +
|
|
|
+ hose->dma_window_size);
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -181,6 +189,13 @@ static void __init mpc85xx_ds_setup_arch(void)
|
|
|
mpc85xx_smp_init();
|
|
|
#endif
|
|
|
|
|
|
+#ifdef CONFIG_SWIOTLB
|
|
|
+ if (lmb_end_of_DRAM() > max) {
|
|
|
+ ppc_swiotlb_enable = 1;
|
|
|
+ set_pci_dma_ops(&swiotlb_pci_dma_ops);
|
|
|
+ }
|
|
|
+#endif
|
|
|
+
|
|
|
printk("MPC85xx DS board from Freescale Semiconductor\n");
|
|
|
}
|
|
|
|
|
@@ -217,6 +232,10 @@ machine_device_initcall(mpc8544_ds, mpc85xxds_publish_devices);
|
|
|
machine_device_initcall(mpc8572_ds, mpc85xxds_publish_devices);
|
|
|
machine_device_initcall(p2020_ds, mpc85xxds_publish_devices);
|
|
|
|
|
|
+machine_arch_initcall(mpc8544_ds, swiotlb_setup_bus_notifier);
|
|
|
+machine_arch_initcall(mpc8572_ds, swiotlb_setup_bus_notifier);
|
|
|
+machine_arch_initcall(p2020_ds, swiotlb_setup_bus_notifier);
|
|
|
+
|
|
|
/*
|
|
|
* Called very early, device-tree isn't unflattened
|
|
|
*/
|