/* TODO: could x86/PPC have this also perhaps? */
#ifdef CONFIG_ARM
initr_caches,
+ #endif
+ initr_reloc_global_data,
+ initr_barrier,
+ initr_malloc,
+ bootstage_relocate,
+ #ifdef CONFIG_DM
+ initr_dm,
+ #endif
+ #ifdef CONFIG_ARM
board_init, /* Setup chipselects */
#endif
/*
#ifdef CONFIG_CLOCKS
set_cpu_clk_info, /* Setup clock information */
#endif
- initr_reloc_global_data,
+ stdio_init_tables,
initr_serial,
initr_announce,
INIT_FUNC_WATCHDOG_RESET
#endif
#ifdef CONFIG_WINBOND_83C553
initr_w83c553f,
- #endif
- initr_barrier,
- initr_malloc,
- bootstage_relocate,
- #ifdef CONFIG_DM
- initr_dm,
#endif
#ifdef CONFIG_ARCH_EARLY_INIT_R
arch_early_init_r,
*/
initr_pci,
#endif
- stdio_init,
+ stdio_add_devices,
initr_jumptable,
#ifdef CONFIG_API
initr_api,
int i;
#endif
-#ifndef CONFIG_X86
+#if !defined(CONFIG_X86) && !defined(CONFIG_ARM) && !defined(CONFIG_ARM64)
gd = new_gd;
#endif
COMPAT_SANDBOX_LCD_SDL, /* Sandbox LCD emulation with SDL */
COMPAT_TI_TPS65090, /* Texas Instrument TPS65090 */
COMPAT_NXP_PTN3460, /* NXP PTN3460 DP/LVDS bridge */
+ COMPAT_SAMSUNG_EXYNOS_SYSMMU, /* Exynos sysmmu */
+ COMPAT_PARADE_PS8625, /* Parade PS8622 EDP->LVDS bridge */
COMPAT_COUNT,
};
*/
int fdtdec_get_alias_node(const void *blob, const char *name);
+ /**
+ * Get the offset of the given chosen node
+ *
+ * This looks up a property in /chosen containing the path to another node,
+ * then finds the offset of that node.
+ *
+ * @param blob Device tree blob (if NULL, then error is returned)
+ * @param name Property name, e.g. "stdout-path"
+ * @return Node offset referred to by that chosen node, or -ve FDT_ERR_...
+ */
+ int fdtdec_get_chosen_node(const void *blob, const char *name);
+
/*
* Get the name for a compatible ID
*
COMPAT(SANDBOX_LCD_SDL, "sandbox,lcd-sdl"),
COMPAT(TI_TPS65090, "ti,tps65090"),
COMPAT(COMPAT_NXP_PTN3460, "nxp,ptn3460"),
+ COMPAT(SAMSUNG_EXYNOS_SYSMMU, "samsung,sysmmu-v3.3"),
+ COMPAT(PARADE_PS8625, "parade,ps8625"),
};
const char *fdtdec_get_compatible(enum fdt_compat_id id)
return fdt_path_offset(blob, prop);
}
+ int fdtdec_get_chosen_node(const void *blob, const char *name)
+ {
+ const char *prop;
+ int chosen_node;
+ int len;
+
+ if (!blob)
+ return -FDT_ERR_NOTFOUND;
+ chosen_node = fdt_path_offset(blob, "/chosen");
+ prop = fdt_getprop(blob, chosen_node, name, &len);
+ if (!prop)
+ return -FDT_ERR_NOTFOUND;
+ return fdt_path_offset(blob, prop);
+ }
+
int fdtdec_check_fdt(void)
{
/*