-
static int initf_dm(void)Boot Loader/U-BOOT 2019. 9. 30. 15:38
/common/board_f.c
1234567891011121314151617static int initf_dm(void){#if defined(CONFIG_DM) && defined(CONFIG_SYS_MALLOC_F_LEN)int ret;ret = dm_init_and_scan(true);if (ret)return ret;#endif#ifdef CONFIG_TIMER_EARLYret = dm_timer_init();if (ret)return ret;#endifreturn 0;}/drivers/core/root.c
1234567891011121314151617181920212223242526272829int dm_init_and_scan(bool pre_reloc_only){int ret;ret = dm_init();if (ret) {debug("dm_init() failed: %d\n", ret);return ret;}ret = dm_scan_platdata(pre_reloc_only);if (ret) {debug("dm_scan_platdata() failed: %d\n", ret);return ret;}if (CONFIG_IS_ENABLED(OF_CONTROL) && !CONFIG_IS_ENABLED(OF_PLATDATA)) {ret = dm_scan_fdt(gd->fdt_blob, pre_reloc_only);if (ret) {debug("dm_scan_fdt() failed: %d\n", ret);return ret;}}ret = dm_scan_other(pre_reloc_only);if (ret)return ret;return 0;}12345678910111213141516171819202122232425262728int dm_init(void){int ret;if (gd->dm_root) {dm_warn("Virtual root driver already exists!\n");return -EINVAL;}INIT_LIST_HEAD(&DM_UCLASS_ROOT_NON_CONST);#if defined(CONFIG_NEEDS_MANUAL_RELOC)fix_drivers();fix_uclass();fix_devices();#endifret = device_bind_by_name(NULL, false, &root_info, &DM_ROOT_NON_CONST);if (ret)return ret;#if CONFIG_IS_ENABLED(OF_CONTROL)DM_ROOT_NON_CONST->of_offset = 0;#endifret = device_probe(DM_ROOT_NON_CONST);if (ret)return ret;return 0;}/include/linux/list.h
12345static inline void INIT_LIST_HEAD(struct list_head *list){list->next = list;list->prev = list;}/include/dm/device-internal.h
12#define DM_ROOT_NON_CONST (((gd_t *)gd)->dm_root)#define DM_UCLASS_ROOT_NON_CONST (((gd_t *)gd)->uclass_root)/drivers/core/device.c
12345678910111213141516171819int device_bind_by_name(struct udevice *parent, bool pre_reloc_only,const struct driver_info *info, struct udevice **devp){struct driver *drv;uint platdata_size = 0;drv = lists_driver_lookup_name(info->name);if (!drv)return -ENOENT;if (pre_reloc_only && !(drv->flags & DM_FLAG_PRE_RELOC))return -EPERM;#if CONFIG_IS_ENABLED(OF_PLATDATA)platdata_size = info->platdata_size;#endifreturn device_bind_common(parent, drv, info->name,(void *)info->platdata, 0, -1, platdata_size, devp);}'Boot Loader > U-BOOT' 카테고리의 다른 글
__weak int mach_cpu_init(void) (0) 2019.09.30 환경변수 Environment Variables (0) 2019.09.29 int arch_cpu_init(void) (0) 2019.09.27 static int initf_console_record(void) (0) 2019.09.26 int initf_malloc(void) (0) 2019.09.26