* This will work with 16M and 2M hugepage size
  */
 #define HUGETLB_SIZE   (16 << 20)
+#elif __aarch64__
+/*
+ * The default hugepage size for 64k base pagesize
+ * is 512MB.
+ */
+#define PAGE_SIZE      (64 << 10)
+#define HUGETLB_SIZE   (512 << 20)
 #else
 #define PAGE_SIZE      (4 << 10)
 #define HUGETLB_SIZE   (2 << 20)
  * >= 128TB is the hint addr value we used to select
  * large address space.
  */
-#define ADDR_SWITCH_HINT (1UL << 47)
+
+#define ADDR_MARK_128TB        (1UL << 47)
+#define ADDR_MARK_256TB        (1UL << 48)
+
+#define HIGH_ADDR_128TB        ((void *) (1UL << 48))
+#define HIGH_ADDR_256TB        ((void *) (1UL << 49))
+
 #define LOW_ADDR       ((void *) (1UL << 30))
-#define HIGH_ADDR      ((void *) (1UL << 48))
+
+#ifdef __aarch64__
+#define ADDR_SWITCH_HINT ADDR_MARK_256TB
+#define HIGH_ADDR       HIGH_ADDR_256TB
+#else
+#define ADDR_SWITCH_HINT ADDR_MARK_128TB
+#define HIGH_ADDR       HIGH_ADDR_128TB
+#endif
 
 struct testcase {
        void *addr;
        return 1;
 #elif defined(__x86_64__)
        return 1;
+#elif defined(__aarch64__)
+       return 1;
 #else
        return 0;
 #endif