/*
  * We have 32 bits total; 12 bits resolved at level 1, 8 bits at level 2,
- * and 12 bits in a page. With some carefully-chosen coefficients we can
- * hide the ugly inconsistencies behind these macros and at least let the
- * rest of the code pretend to be somewhat sane.
+ * and 12 bits in a page.
  */
 #define ARM_V7S_ADDR_BITS              32
-#define _ARM_V7S_LVL_BITS(lvl)         (16 - (lvl) * 4)
-#define ARM_V7S_LVL_SHIFT(lvl)         (ARM_V7S_ADDR_BITS - (4 + 8 * (lvl)))
+#define _ARM_V7S_LVL_BITS(lvl)         ((lvl) == 1 ? 12 : 8)
+#define ARM_V7S_LVL_SHIFT(lvl)         ((lvl) == 1 ? 20 : 12)
 #define ARM_V7S_TABLE_SHIFT            10
 
 #define ARM_V7S_PTES_PER_LVL(lvl)      (1 << _ARM_V7S_LVL_BITS(lvl))