Only book3s/64 may select default among several HPAGE_SHIFT at runtime.
8xx always defines 512K pages as default
FSL_BOOK3E always defines 4M pages as default
This patch limits HUGETLB_PAGE_SIZE_VARIABLE to book3s/64
moves the definitions in subarches files.
Signed-off-by: Christophe Leroy <christophe.leroy@c-s.fr>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
 
 config HUGETLB_PAGE_SIZE_VARIABLE
        bool
-       depends on HUGETLB_PAGE
+       depends on HUGETLB_PAGE && PPC_BOOK3S_64
        default y
 
 config MATH_EMULATION
 
 
 extern bool hugetlb_disabled;
 
+void hugetlbpage_init_default(void);
+
 void flush_dcache_icache_hugepage(struct page *page);
 
 int slice_is_hugepage_only_range(struct mm_struct *mm, unsigned long addr,
 
 #define PAGE_SIZE              (ASM_CONST(1) << PAGE_SHIFT)
 
 #ifndef __ASSEMBLY__
-#ifdef CONFIG_HUGETLB_PAGE
-extern unsigned int HPAGE_SHIFT;
-#else
+#ifndef CONFIG_HUGETLB_PAGE
 #define HPAGE_SHIFT PAGE_SHIFT
+#elif defined(CONFIG_PPC_BOOK3S_64)
+extern unsigned int hpage_shift;
+#define HPAGE_SHIFT hpage_shift
+#elif defined(CONFIG_PPC_8xx)
+#define HPAGE_SHIFT            19      /* 512k pages */
+#elif defined(CONFIG_PPC_FSL_BOOK3E)
+#define HPAGE_SHIFT            22      /* 4M pages */
 #endif
 #define HPAGE_SIZE             ((1UL) << HPAGE_SHIFT)
 #define HPAGE_MASK             (~(HPAGE_SIZE - 1))
 
 #include <asm/cacheflush.h>
 #include <asm/machdep.h>
 
+unsigned int hpage_shift;
+EXPORT_SYMBOL(hpage_shift);
+
 extern long hpte_insert_repeating(unsigned long hash, unsigned long vpn,
                                  unsigned long pa, unsigned long rlags,
                                  unsigned long vflags, int psize, int ssize);
                                                           old_pte, pte);
        set_huge_pte_at(vma->vm_mm, addr, ptep, pte);
 }
+
+void hugetlbpage_init_default(void)
+{
+       /* Set default large page size. Currently, we pick 16M or 1M
+        * depending on what is available
+        */
+       if (mmu_psize_defs[MMU_PAGE_16M].shift)
+               hpage_shift = mmu_psize_defs[MMU_PAGE_16M].shift;
+       else if (mmu_psize_defs[MMU_PAGE_1M].shift)
+               hpage_shift = mmu_psize_defs[MMU_PAGE_1M].shift;
+       else if (mmu_psize_defs[MMU_PAGE_2M].shift)
+               hpage_shift = mmu_psize_defs[MMU_PAGE_2M].shift;
+}
 
 
 bool hugetlb_disabled = false;
 
-unsigned int HPAGE_SHIFT;
-EXPORT_SYMBOL(HPAGE_SHIFT);
-
 #define hugepd_none(hpd)       (hpd_val(hpd) == 0)
 
 #define PTE_T_ORDER    (__builtin_ffs(sizeof(pte_t)) - __builtin_ffs(sizeof(void *)))
 #endif
        }
 
-#if defined(CONFIG_PPC_FSL_BOOK3E) || defined(CONFIG_PPC_8xx)
-       /* Default hpage size = 4M on FSL_BOOK3E and 512k on 8xx */
-       if (mmu_psize_defs[MMU_PAGE_4M].shift)
-               HPAGE_SHIFT = mmu_psize_defs[MMU_PAGE_4M].shift;
-       else if (mmu_psize_defs[MMU_PAGE_512K].shift)
-               HPAGE_SHIFT = mmu_psize_defs[MMU_PAGE_512K].shift;
-#else
-       /* Set default large page size. Currently, we pick 16M or 1M
-        * depending on what is available
-        */
-       if (mmu_psize_defs[MMU_PAGE_16M].shift)
-               HPAGE_SHIFT = mmu_psize_defs[MMU_PAGE_16M].shift;
-       else if (mmu_psize_defs[MMU_PAGE_1M].shift)
-               HPAGE_SHIFT = mmu_psize_defs[MMU_PAGE_1M].shift;
-       else if (mmu_psize_defs[MMU_PAGE_2M].shift)
-               HPAGE_SHIFT = mmu_psize_defs[MMU_PAGE_2M].shift;
-#endif
+       if (IS_ENABLED(HUGETLB_PAGE_SIZE_VARIABLE))
+               hugetlbpage_init_default();
+
        return 0;
 }