include: fdtdec: decouple fdt_addr_t and phys_addr_t size

The DT specification supports CPUs with both 32-bit and 64-bit addressing
capabilities. In U-boot the fdt_addr_t and phys_addr_t size are coupled
by a typedef. The MTD NAND drivers for 32-bit CPU's can describe partitions
with a 64-bit reg property. These partitions synced from Linux end up with
the wrong offset and sizes when only the lower 32-bit is passed.
Decouple the fdt_addr_t and phys_addr_t size as they don't necessary
match.

Signed-off-by: Johan Jonker <jbx6244@gmail.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Kever Yang <kever.yang@rock-chips.com>
This commit is contained in:
Johan Jonker 2023-03-13 01:33:23 +01:00 committed by Kever Yang
parent 55cd74d691
commit 53c5093b2e
2 changed files with 17 additions and 4 deletions

View file

@ -397,11 +397,19 @@ endif # EXPERT
config PHYS_64BIT config PHYS_64BIT
bool "64bit physical address support" bool "64bit physical address support"
select FDT_64BIT
help help
Say Y here to support 64bit physical memory address. Say Y here to support 64bit physical memory address.
This can be used not only for 64bit SoCs, but also for This can be used not only for 64bit SoCs, but also for
large physical address extension on 32bit SoCs. large physical address extension on 32bit SoCs.
config FDT_64BIT
bool "64bit fdt address support"
help
Say Y here to support 64bit fdt addresses.
This can be used not only for 64bit SoCs, but also
for large address extensions on 32bit SoCs.
config HAS_ROM config HAS_ROM
bool bool
select BINMAN select BINMAN

View file

@ -18,15 +18,18 @@
#include <pci.h> #include <pci.h>
/* /*
* A typedef for a physical address. Note that fdt data is always big * Support for 64bit fdt addresses.
* This can be used not only for 64bit SoCs, but also
* for large address extensions on 32bit SoCs.
* Note that fdt data is always big
* endian even on a litle endian machine. * endian even on a litle endian machine.
*/ */
typedef phys_addr_t fdt_addr_t;
typedef phys_size_t fdt_size_t;
#define FDT_SIZE_T_NONE (-1U) #define FDT_SIZE_T_NONE (-1U)
#ifdef CONFIG_PHYS_64BIT #ifdef CONFIG_FDT_64BIT
typedef u64 fdt_addr_t;
typedef u64 fdt_size_t;
#define FDT_ADDR_T_NONE ((ulong)(-1)) #define FDT_ADDR_T_NONE ((ulong)(-1))
#define fdt_addr_to_cpu(reg) be64_to_cpu(reg) #define fdt_addr_to_cpu(reg) be64_to_cpu(reg)
@ -35,6 +38,8 @@ typedef phys_size_t fdt_size_t;
#define cpu_to_fdt_size(reg) cpu_to_be64(reg) #define cpu_to_fdt_size(reg) cpu_to_be64(reg)
typedef fdt64_t fdt_val_t; typedef fdt64_t fdt_val_t;
#else #else
typedef u32 fdt_addr_t;
typedef u32 fdt_size_t;
#define FDT_ADDR_T_NONE (-1U) #define FDT_ADDR_T_NONE (-1U)
#define fdt_addr_to_cpu(reg) be32_to_cpu(reg) #define fdt_addr_to_cpu(reg) be32_to_cpu(reg)