if (!fname)
return log_msg_ret("dhc", -EINVAL);
- ret = dhcp_run(addr, fname, true);
+ if (IS_ENABLED(CONFIG_CMD_TFTPBOOT) && env_get_yesno("ip_dyn") == 0)
+ ret = tftpb_run(addr, fname);
+ else
+ ret = dhcp_run(addr, fname, true);
+
if (ret)
return log_msg_ret("dhc", ret);
fdtoverlay_addr_r (needed if overlays are used)
Address at which to load the overlay for the FDT, e.g. 0x02000000
+ip_dyn
+ Use dynamic IP (dhcp) or static IP (tftp) for loading the bootscript over
+ ethernet. Default is dhcp. e.g. no
+
kernel_addr_r
Address at which to load the kernel, e.g. 0x02080000
`filename-prefixes` property in the bootstd device.
For a network device, the filename is obtained from the `boot_script_dhcp`
-environment variable and the file is read using tftp. It must be in the
-top-level directory of the tftp server.
+environment variable. By setting the `ip_dyn` environment variable it can be
+decided if dynamic ip (dhcp command) or static ip (tftp command) is used for
+reading the file. By default dhcp is used. The file must be in the top-level
+directory of the tftp server.
In either case (file or network), the bootmeth searches for the file and creates
a bootflow if found. The bootmeth searches for "boot.scr.uimg" first, then
*/
int do_dhcp(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[]);
+/**
+ * tftpb_run() - Run TFTP on the current ethernet device
+ *
+ * @addr: Address to load the file into
+ * @fname: Filename of file to load (NULL to use the default filename)
+ * @return 0 if OK, -ENOENT if ant file was not found
+ */
+int tftpb_run(ulong addr, const char *fname);
+
/**
* do_ping - Run the ping command
*
return 0;
}
#endif
+
+#if defined(CONFIG_CMD_TFTPBOOT)
+int tftpb_run(ulong addr, const char *fname)
+{
+ char *tftp_argv[] = {"tftpboot", NULL, (char *)fname, NULL};
+ struct cmd_tbl cmdtp = {}; /* dummy */
+ char file_addr[17] = {0};
+
+ log_debug("addr=%lx, fname=%s\n", addr, fname);
+ sprintf(file_addr, "%lx", addr);
+ tftp_argv[1] = file_addr;
+
+ int result = do_tftpb(&cmdtp, 0, fname ? 3 : 2, tftp_argv);
+
+ if (result)
+ return log_msg_ret("res", -ENOENT);
+
+ return 0;
+}
+
+#endif