X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=include%2Ffdt_support.h;h=2bca4d7889180936b92e423c16a91740338c3090;hb=23af484b0156baaafd578222d73513418df78f09;hp=0edc4fa5b1445e594368ebd6ac7c214687c9ef3d;hpb=6f43ba70d15e15a08c25b3d956c70addb6740737;p=u-boot diff --git a/include/fdt_support.h b/include/fdt_support.h index 0edc4fa5b1..2bca4d7889 100644 --- a/include/fdt_support.h +++ b/include/fdt_support.h @@ -67,8 +67,42 @@ void do_fixup_by_compat(void *fdt, const char *compat, const char *prop, const void *val, int len, int create); void do_fixup_by_compat_u32(void *fdt, const char *compat, const char *prop, u32 val, int create); +/** + * Setup the memory node in the DT. Creates one if none was existing before. + * Calls fdt_fixup_memory_banks() to populate a single reg pair covering the + * whole memory. + * + * @param blob FDT blob to update + * @param start Begin of DRAM mapping in physical memory + * @param size Size of the single memory bank + * @return 0 if ok, or -1 or -FDT_ERR_... on error + */ int fdt_fixup_memory(void *blob, u64 start, u64 size); + +/** + * Fill the DT memory node with multiple memory banks. + * Creates the node if none was existing before. + * If banks is 0, it will not touch the existing reg property. This allows + * boards to not mess with the existing DT setup, which may have been + * filled in properly before. + * + * @param blob FDT blob to update + * @param start Array of size to hold the start addresses. + * @param size Array of size to hold the size of each region. + * @param banks Number of memory banks to create. If 0, the reg + * property will be left untouched. + * @return 0 if ok, or -1 or -FDT_ERR_... on error + */ +#ifdef CONFIG_ARCH_FIXUP_FDT_MEMORY int fdt_fixup_memory_banks(void *blob, u64 start[], u64 size[], int banks); +#else +static inline int fdt_fixup_memory_banks(void *blob, u64 start[], u64 size[], + int banks) +{ + return 0; +} +#endif + void fdt_fixup_ethernet(void *fdt); int fdt_find_and_setprop(void *fdt, const char *node, const char *prop, const void *val, int len, int create); @@ -87,11 +121,11 @@ void fdt_fixup_qe_firmware(void *fdt); */ int fdt_fixup_display(void *blob, const char *path, const char *display); -#if defined(CONFIG_HAS_FSL_DR_USB) || defined(CONFIG_HAS_FSL_MPH_USB) -void fdt_fixup_dr_usb(void *blob, bd_t *bd); +#if defined(CONFIG_USB_EHCI_FSL) || defined(CONFIG_USB_XHCI_FSL) +void fsl_fdt_fixup_dr_usb(void *blob, bd_t *bd); #else -static inline void fdt_fixup_dr_usb(void *blob, bd_t *bd) {} -#endif /* defined(CONFIG_HAS_FSL_DR_USB) || defined(CONFIG_HAS_FSL_MPH_USB) */ +static inline void fsl_fdt_fixup_dr_usb(void *blob, bd_t *bd) {} +#endif /* defined(CONFIG_USB_EHCI_FSL) || defined(CONFIG_USB_XHCI_FSL) */ #if defined(CONFIG_SYS_FSL_SEC_COMPAT) void fdt_fixup_crypto_node(void *blob, int sec_rev); @@ -141,14 +175,29 @@ void ft_pci_setup(void *blob, bd_t *bd); int ft_system_setup(void *blob, bd_t *bd); void set_working_fdt_addr(ulong addr); -int fdt_shrink_to_minimum(void *blob); + +/** + * shrink down the given blob to minimum size + some extrasize if required + * + * @param blob FDT blob to update + * @param extrasize additional bytes needed + * @return 0 if ok, or -FDT_ERR_... on error + */ +int fdt_shrink_to_minimum(void *blob, uint extrasize); int fdt_increase_size(void *fdt, int add_len); int fdt_fixup_nor_flash_size(void *blob); +#if defined(CONFIG_FDT_FIXUP_PARTITIONS) void fdt_fixup_mtdparts(void *fdt, void *node_info, int node_info_size); +#else +static inline void fdt_fixup_mtdparts(void *fdt, void *node_info, + int node_info_size) {} +#endif + void fdt_del_node_and_alias(void *blob, const char *alias); -u64 fdt_translate_address(void *blob, int node_offset, const __be32 *in_addr); +u64 fdt_translate_address(const void *blob, int node_offset, + const __be32 *in_addr); int fdt_node_offset_by_compat_reg(void *blob, const char *compat, phys_addr_t compat_off); int fdt_alloc_phandle(void *blob); @@ -158,7 +207,7 @@ int fdt_add_edid(void *blob, const char *compat, unsigned char *buf); int fdt_verify_alias_address(void *fdt, int anode, const char *alias, u64 addr); -u64 fdt_get_base_address(void *fdt, int node); +u64 fdt_get_base_address(const void *fdt, int node); int fdt_read_range(void *fdt, int node, int n, uint64_t *child_addr, uint64_t *addr, uint64_t *len); @@ -199,7 +248,7 @@ static inline int fdt_status_fail_by_alias(void *fdt, const char *alias) } /* Helper to read a big number; size is in cells (not bytes) */ -static inline u64 of_read_number(const fdt32_t *cell, int size) +static inline u64 fdt_read_number(const fdt32_t *cell, int size) { u64 r = 0; while (size--) @@ -207,7 +256,7 @@ static inline u64 of_read_number(const fdt32_t *cell, int size) return r; } -void of_bus_default_count_cells(void *blob, int parentoffset, +void fdt_support_default_count_cells(const void *blob, int parentoffset, int *addrc, int *sizec); int ft_verify_fdt(void *fdt); int arch_fixup_memory_node(void *blob); @@ -215,6 +264,8 @@ int arch_fixup_memory_node(void *blob); int fdt_setup_simplefb_node(void *fdt, int node, u64 base_address, u32 width, u32 height, u32 stride, const char *format); +int fdt_overlay_apply_verbose(void *fdt, void *fdto); + #endif /* ifdef CONFIG_OF_LIBFDT */ #ifdef USE_HOSTCC