These changes are the raw update to linux-4.4.6-rt14. Kernel sources
[kvmfornfv.git] / kernel / arch / arm / mach-keystone / keystone.c
index 0662087..c279293 100644 (file)
@@ -27,7 +27,6 @@
 
 #include "keystone.h"
 
-static struct notifier_block platform_nb;
 static unsigned long keystone_dma_pfn_offset __read_mostly;
 
 static int keystone_platform_notifier(struct notifier_block *nb,
@@ -49,11 +48,18 @@ static int keystone_platform_notifier(struct notifier_block *nb,
        return NOTIFY_OK;
 }
 
+static struct notifier_block platform_nb = {
+       .notifier_call = keystone_platform_notifier,
+};
+
 static void __init keystone_init(void)
 {
-       keystone_pm_runtime_init();
-       if (platform_nb.notifier_call)
+       if (PHYS_OFFSET >= KEYSTONE_HIGH_PHYS_START) {
+               keystone_dma_pfn_offset = PFN_DOWN(KEYSTONE_HIGH_PHYS_START -
+                                                  KEYSTONE_LOW_PHYS_START);
                bus_register_notifier(&platform_bus_type, &platform_nb);
+       }
+       keystone_pm_runtime_init();
        of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL);
 }
 
@@ -62,11 +68,9 @@ static phys_addr_t keystone_virt_to_idmap(unsigned long x)
        return (phys_addr_t)(x) - CONFIG_PAGE_OFFSET + KEYSTONE_LOW_PHYS_START;
 }
 
-static void __init keystone_init_meminfo(void)
+static long long __init keystone_pv_fixup(void)
 {
-       bool lpae = IS_ENABLED(CONFIG_ARM_LPAE);
-       bool pvpatch = IS_ENABLED(CONFIG_ARM_PATCH_PHYS_VIRT);
-       phys_addr_t offset = PHYS_OFFSET - KEYSTONE_LOW_PHYS_START;
+       long long offset;
        phys_addr_t mem_start, mem_end;
 
        mem_start = memblock_start_of_DRAM();
@@ -75,35 +79,27 @@ static void __init keystone_init_meminfo(void)
        /* nothing to do if we are running out of the <32-bit space */
        if (mem_start >= KEYSTONE_LOW_PHYS_START &&
            mem_end   <= KEYSTONE_LOW_PHYS_END)
-               return;
-
-       if (!lpae || !pvpatch) {
-               pr_crit("Enable %s%s%s to run outside 32-bit space\n",
-                     !lpae ? __stringify(CONFIG_ARM_LPAE) : "",
-                     (!lpae && !pvpatch) ? " and " : "",
-                     !pvpatch ? __stringify(CONFIG_ARM_PATCH_PHYS_VIRT) : "");
-       }
+               return 0;
 
        if (mem_start < KEYSTONE_HIGH_PHYS_START ||
            mem_end   > KEYSTONE_HIGH_PHYS_END) {
                pr_crit("Invalid address space for memory (%08llx-%08llx)\n",
-                     (u64)mem_start, (u64)mem_end);
+                       (u64)mem_start, (u64)mem_end);
+               return 0;
        }
 
-       offset += KEYSTONE_HIGH_PHYS_START;
-       __pv_phys_pfn_offset = PFN_DOWN(offset);
-       __pv_offset = (offset - PAGE_OFFSET);
+       offset = KEYSTONE_HIGH_PHYS_START - KEYSTONE_LOW_PHYS_START;
 
        /* Populate the arch idmap hook */
        arch_virt_to_idmap = keystone_virt_to_idmap;
-       platform_nb.notifier_call = keystone_platform_notifier;
-       keystone_dma_pfn_offset = PFN_DOWN(KEYSTONE_HIGH_PHYS_START -
-                                               KEYSTONE_LOW_PHYS_START);
 
-       pr_info("Switching to high address space at 0x%llx\n", (u64)offset);
+       return offset;
 }
 
 static const char *const keystone_match[] __initconst = {
+       "ti,k2hk",
+       "ti,k2e",
+       "ti,k2l",
        "ti,keystone",
        NULL,
 };
@@ -115,5 +111,5 @@ DT_MACHINE_START(KEYSTONE, "Keystone")
        .smp            = smp_ops(keystone_smp_ops),
        .init_machine   = keystone_init,
        .dt_compat      = keystone_match,
-       .init_meminfo   = keystone_init_meminfo,
+       .pv_fixup       = keystone_pv_fixup,
 MACHINE_END