17ac2fe2dSIlya Yanok /* 27ac2fe2dSIlya Yanok * (C) Copyright 2000-2004 37ac2fe2dSIlya Yanok * Wolfgang Denk, DENX Software Engineering, wd@denx.de. 47ac2fe2dSIlya Yanok * 57ac2fe2dSIlya Yanok * (C) Copyright 2012 67ac2fe2dSIlya Yanok * Ilya Yanok <ilya.yanok@gmail.com> 77ac2fe2dSIlya Yanok * 81a459660SWolfgang Denk * SPDX-License-Identifier: GPL-2.0+ 97ac2fe2dSIlya Yanok */ 107ac2fe2dSIlya Yanok #include <common.h> 1136afd451SNikita Kiryanov #include <errno.h> 127ac2fe2dSIlya Yanok #include <spl.h> 137ac2fe2dSIlya Yanok #include <net.h> 147ac2fe2dSIlya Yanok 157ac2fe2dSIlya Yanok DECLARE_GLOBAL_DATA_PTR; 167ac2fe2dSIlya Yanok 17*ecdfd69aSSimon Glass int spl_net_load_image(struct spl_boot_device *bootdev) 187ac2fe2dSIlya Yanok { 197ac2fe2dSIlya Yanok int rv; 207ac2fe2dSIlya Yanok 217ac2fe2dSIlya Yanok env_init(); 227ac2fe2dSIlya Yanok env_relocate(); 237ac2fe2dSIlya Yanok setenv("autoload", "yes"); 247ac2fe2dSIlya Yanok load_addr = CONFIG_SYS_TEXT_BASE - sizeof(struct image_header); 25d2eaec60SJoe Hershberger rv = eth_initialize(); 267ac2fe2dSIlya Yanok if (rv == 0) { 277ac2fe2dSIlya Yanok printf("No Ethernet devices found\n"); 2836afd451SNikita Kiryanov return -ENODEV; 297ac2fe2dSIlya Yanok } 30*ecdfd69aSSimon Glass if (bootdev->boot_device_name) 31*ecdfd69aSSimon Glass setenv("ethact", bootdev->boot_device_name); 32bc0571fcSJoe Hershberger rv = net_loop(BOOTP); 337ac2fe2dSIlya Yanok if (rv < 0) { 347ac2fe2dSIlya Yanok printf("Problem booting with BOOTP\n"); 3536afd451SNikita Kiryanov return rv; 367ac2fe2dSIlya Yanok } 3771316c1dSSimon Glass return spl_parse_image_header(&spl_image, 3871316c1dSSimon Glass (struct image_header *)load_addr); 397ac2fe2dSIlya Yanok } 40