#include "pmsu.h"
  #include "coherency.h"
  
+ #define AXP_BOOTROM_BASE 0xfff00000
+ #define AXP_BOOTROM_SIZE 0x100000
+ 
 +static struct clk *__init get_cpu_clk(int cpu)
 +{
 +      struct clk *cpu_clk;
 +      struct device_node *np = of_get_cpu_node(cpu, NULL);
 +
 +      if (WARN(!np, "missing cpu node\n"))
 +              return NULL;
 +      cpu_clk = of_clk_get(np, 0);
 +      if (WARN_ON(IS_ERR(cpu_clk)))
 +              return NULL;
 +      return cpu_clk;
 +}
 +
  void __init set_secondary_cpus_clock(void)
  {
 -      int thiscpu;
 +      int thiscpu, cpu;
        unsigned long rate;
 -      struct clk *cpu_clk = NULL;
 -      struct device_node *np = NULL;
 +      struct clk *cpu_clk;
  
        thiscpu = smp_processor_id();
 -      for_each_node_by_type(np, "cpu") {
 -              int err;
 -              int cpu;
 -
 -              err = of_property_read_u32(np, "reg", &cpu);
 -              if (WARN_ON(err))
 -                      return;
 -
 -              if (cpu == thiscpu) {
 -                      cpu_clk = of_clk_get(np, 0);
 -                      break;
 -              }
 -      }
 -      if (WARN_ON(IS_ERR(cpu_clk)))
 +      cpu_clk = get_cpu_clk(thiscpu);
 +      if (!cpu_clk)
                return;
        clk_prepare_enable(cpu_clk);
        rate = clk_get_rate(cpu_clk);
 
         * devices
         */
  out:
 -      of_platform_populate(NULL, of_default_bus_match_table,
 -                              tegra20_auxdata_lookup, parent);
 +      of_platform_populate(NULL, of_default_bus_match_table, NULL, parent);
  }
  
- static void __init trimslice_init(void)
- {
- #ifdef CONFIG_TEGRA_PCI
-       int ret;
- 
-       ret = tegra_pcie_init(true, true);
-       if (ret)
-               pr_err("tegra_pci_init() failed: %d\n", ret);
- #endif
- }
- 
- static void __init harmony_init(void)
- {
- #ifdef CONFIG_TEGRA_PCI
-       int ret;
- 
-       ret = harmony_pcie_init();
-       if (ret)
-               pr_err("harmony_pcie_init() failed: %d\n", ret);
- #endif
- }
- 
  static void __init paz00_init(void)
  {
        if (IS_ENABLED(CONFIG_ARCH_TEGRA_2x_SOC))
 
  
        ret = of_address_to_resource(np, 0, ®s);
        if (ret)
 -              return NULL;
 +              return ERR_PTR(ret);
  
 -      return devm_request_and_ioremap(&pdev->dev, ®s);
 +      return devm_ioremap_resource(&pdev->dev, ®s);
  }
  
+ #define DT_FLAGS_TO_TYPE(flags)       (((flags) >> 24) & 0x03)
+ #define    DT_TYPE_IO                 0x1
+ #define    DT_TYPE_MEM32              0x2
+ #define DT_CPUADDR_TO_TARGET(cpuaddr) (((cpuaddr) >> 56) & 0xFF)
+ #define DT_CPUADDR_TO_ATTR(cpuaddr)   (((cpuaddr) >> 48) & 0xFF)
+ 
+ static int mvebu_get_tgt_attr(struct device_node *np, int devfn,
+                             unsigned long type, int *tgt, int *attr)
+ {
+       const int na = 3, ns = 2;
+       const __be32 *range;
+       int rlen, nranges, rangesz, pna, i;
+ 
+       range = of_get_property(np, "ranges", &rlen);
+       if (!range)
+               return -EINVAL;
+ 
+       pna = of_n_addr_cells(np);
+       rangesz = pna + na + ns;
+       nranges = rlen / sizeof(__be32) / rangesz;
+ 
+       for (i = 0; i < nranges; i++) {
+               u32 flags = of_read_number(range, 1);
+               u32 slot = of_read_number(range, 2);
+               u64 cpuaddr = of_read_number(range + na, pna);
+               unsigned long rtype;
+ 
+               if (DT_FLAGS_TO_TYPE(flags) == DT_TYPE_IO)
+                       rtype = IORESOURCE_IO;
+               else if (DT_FLAGS_TO_TYPE(flags) == DT_TYPE_MEM32)
+                       rtype = IORESOURCE_MEM;
+ 
+               if (slot == PCI_SLOT(devfn) && type == rtype) {
+                       *tgt = DT_CPUADDR_TO_TARGET(cpuaddr);
+                       *attr = DT_CPUADDR_TO_ATTR(cpuaddr);
+                       return 0;
+               }
+ 
+               range += rangesz;
+       }
+ 
+       return -ENOENT;
+ }
+ 
  static int __init mvebu_pcie_probe(struct platform_device *pdev)
  {
        struct mvebu_pcie *pcie;
                if (port->devfn < 0)
                        continue;
  
+               ret = mvebu_get_tgt_attr(np, port->devfn, IORESOURCE_MEM,
+                                        &port->mem_target, &port->mem_attr);
+               if (ret < 0) {
+                       dev_err(&pdev->dev, "PCIe%d.%d: cannot get tgt/attr for mem window\n",
+                               port->port, port->lane);
+                       continue;
+               }
+ 
+               ret = mvebu_get_tgt_attr(np, port->devfn, IORESOURCE_IO,
+                                        &port->io_target, &port->io_attr);
+               if (ret < 0) {
+                       dev_err(&pdev->dev, "PCIe%d.%d: cannot get tgt/attr for io window\n",
+                               port->port, port->lane);
+                       continue;
+               }
+ 
                port->base = mvebu_pcie_map_registers(pdev, child, port);
 -              if (!port->base) {
 +              if (IS_ERR(port->base)) {
                        dev_err(&pdev->dev, "PCIe%d.%d: cannot map registers\n",
                                port->port, port->lane);
 +                      port->base = NULL;
                        continue;
                }