ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • static int initf_dm(void)
    Boot Loader/U-BOOT 2019. 9. 30. 15:38

    /common/board_f.c

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    static 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_EARLY
        ret = dm_timer_init();
        if (ret)
            return ret;
    #endif
     
        return 0;
    }
     
     

     

     

    /drivers/core/root.c

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    int 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;
    }
     
     

     

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    int 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();
    #endif
     
        ret = device_bind_by_name(NULLfalse&root_info, &DM_ROOT_NON_CONST);
        if (ret)
            return ret;
    #if CONFIG_IS_ENABLED(OF_CONTROL)
        DM_ROOT_NON_CONST->of_offset = 0;
    #endif
        ret = device_probe(DM_ROOT_NON_CONST);
        if (ret)
            return ret;
     
        return 0;
    }
     
     

     

    /include/linux/list.h

    1
    2
    3
    4
    5
    static inline void INIT_LIST_HEAD(struct list_head *list)
    {
        list->next = list;
        list->prev = list;
    }
     
     

     

     

    /include/dm/device-internal.h

    1
    2
    #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

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    int 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;
    #endif
        return 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

    댓글

Designed by Tistory.