#endif
        mov     x0, x21                         // pass FDT address in x0
        bl      early_fdt_map                   // Try mapping the FDT early
+       mov     x0, x22                         // pass FDT address in x0
        bl      init_feature_override           // Parse cpu feature overrides
 #ifdef CONFIG_RANDOMIZE_BASE
        tst     x23, ~(MIN_KIMG_ALIGN - 1)      // already running randomized?
 
        } while (1);
 }
 
-static __init const u8 *get_bootargs_cmdline(void)
+static __init const u8 *get_bootargs_cmdline(const void *fdt)
 {
        const u8 *prop;
-       void *fdt;
        int node;
 
-       fdt = get_early_fdt_ptr();
-       if (!fdt)
-               return NULL;
-
        node = fdt_path_offset(fdt, "/chosen");
        if (node < 0)
                return NULL;
        return strlen(prop) ? prop : NULL;
 }
 
-static __init void parse_cmdline(void)
+static __init void parse_cmdline(const void *fdt)
 {
-       const u8 *prop = get_bootargs_cmdline();
+       const u8 *prop = get_bootargs_cmdline(fdt);
 
        if (IS_ENABLED(CONFIG_CMDLINE_FORCE) || !prop)
                __parse_cmdline(CONFIG_CMDLINE, true);
 }
 
 /* Keep checkers quiet */
-void init_feature_override(void);
+void init_feature_override(const void *fdt);
 
-asmlinkage void __init init_feature_override(void)
+asmlinkage void __init init_feature_override(const void *fdt)
 {
        int i;
 
                }
        }
 
-       parse_cmdline();
+       parse_cmdline(fdt);
 
        for (i = 0; i < ARRAY_SIZE(regs); i++) {
                if (regs[i]->override)