#include <asm/efi.h>
 #include <asm/sections.h>
+#include <asm/unaligned.h>
 
 #include "efistub.h"
 
 {
        const void *fdt;
        int chosen_node, len;
-       const fdt32_t *prop;
+       const void *prop;
 
        fdt = get_efi_config_table(DEVICE_TREE_GUID);
        if (!fdt)
                return -EINVAL;
 
        prop = fdt_getprop((void *)fdt, chosen_node, "boot-hartid", &len);
-       if (!prop || len != sizeof(u32))
+       if (!prop)
+               return -EINVAL;
+
+       if (len == sizeof(u32))
+               hartid = (unsigned long) fdt32_to_cpu(*(fdt32_t *)prop);
+       else if (len == sizeof(u64))
+               hartid = (unsigned long) fdt64_to_cpu(__get_unaligned_t(fdt64_t, prop));
+       else
                return -EINVAL;
 
-       hartid = fdt32_to_cpu(*prop);
        return 0;
 }