* SEL_INPUT_OFS: 24..35 (12)
* MUX_MODE + SION: 36..40 (5)
* PAD_CTRL + PAD_CTRL_VALID: 41..58 (18)
- * SEL_INP: 59..61 (3)
- * reserved: 62..63 (2)
+ * SEL_INP: 59..62 (4)
+ * reserved: 63 (1)
*/
typedef u64 iomux_v3_cfg_t;
#define MUX_PAD_CTRL_SHIFT 41
#define MUX_PAD_CTRL_MASK ((iomux_v3_cfg_t)0x1ffff << MUX_PAD_CTRL_SHIFT)
#define MUX_SEL_INPUT_SHIFT 59
-#define MUX_SEL_INPUT_MASK ((iomux_v3_cfg_t)0x7 << MUX_SEL_INPUT_SHIFT)
+#define MUX_SEL_INPUT_MASK ((iomux_v3_cfg_t)0xf << MUX_SEL_INPUT_SHIFT)
#define __MUX_PAD_CTRL(x) ((x) | __PAD_CTRL_VALID)
#define MUX_PAD_CTRL(x) (((iomux_v3_cfg_t)__MUX_PAD_CTRL(x) << \
#include <libfdt.h>
#include <fdt_support.h>
#include <nand.h>
+#include <mxcfb.h>
#include <linux/list.h>
#include <linux/fb.h>
#include <jffs2/load_kernel.h>
continue;
}
fdt_disable_tp_node(blob, karo_touchpanels[i]);
- karo_set_fdtsize(blob);
}
+ karo_set_fdtsize(blob);
}
void karo_fdt_fixup_usb_otg(void *blob, const char *node, const char *phy)
prop = fdt_getprop(blob, off, "vsync-active", NULL);
if (prop)
fb_mode->sync |= *prop ? FB_SYNC_VERT_HIGH_ACT : 0;
-#if 0
+#if defined(CONFIG_MX51) || defined(CONFIG_MX53) || defined(CONFIG_MX6)
prop = fdt_getprop(blob, off, "de-active", NULL);
if (prop)
- fb_mode->sync |= *prop ? FB_SYNC_DATA_ENABLE_HIGH_ACT : 0;
+ fb_mode->sync |= *prop ? 0 : FB_SYNC_OE_LOW_ACT;
prop = fdt_getprop(blob, off, "pixelclk-active", NULL);
if (prop)
- fb_mode->sync |= *prop ? FB_SYNC_DOTCLK_FALLING_ACT : 0;
+ fb_mode->sync |= *prop ? 0 : FB_SYNC_CLK_LAT_FALL;
#endif
return 0;
}
int ret;
uint32_t ph;
+ ret = fdt_increase_size(blob, 32);
+ if (ret) {
+ printf("Warning: Failed to increase FDT size: %d\n", ret);
+ }
debug("Creating phandle at offset %d\n", off);
ph = fdt_create_phandle(blob, off);
- if (!ph) {
- ret = fdt_increase_size(blob, 512);
- if (ret) {
- printf("Failed to increase FDT size: %d\n", ret);
- return ret;
- }
- ph = fdt_create_phandle(blob, off);
- }
if (!ph) {
printf("Failed to create phandle for video timing\n");
return -ENOMEM;
}
}
if (off > 0) {
- fdt_init_fb_mode(blob, off, fb_mode);
- return fdt_update_native_fb_mode(blob, off);
+ return fdt_init_fb_mode(blob, off, fb_mode);
}
return -EINVAL;
}
if (ret)
goto out;
- /* TOTO: make these configurable */
+#if defined(CONFIG_MX51) || defined(CONFIG_MX53) || defined(CONFIG_MX6)
+ ret = SET_FB_PROP("de-active",
+ !(fb_mode->sync & FB_SYNC_OE_LOW_ACT));
+ if (ret)
+ goto out;
+ ret = SET_FB_PROP("pixelclk-active",
+ !(fb_mode->sync & FB_SYNC_CLK_LAT_FALL));
+ if (ret)
+ goto out;
+#else
+ /* TODO: make these configurable */
ret = SET_FB_PROP("de-active", 1);
if (ret)
goto out;
ret = SET_FB_PROP("pixelclk-active", 1);
if (ret)
goto out;
-
- return fdt_update_native_fb_mode(blob, off);
-
+#endif
out:
karo_set_fdtsize(blob);
return ret;
}
U_BOOT_CMD(romupdate, 11, 0, do_update,
- "Creates an FCB data structure and writes an U-Boot image to flash\n",
+ "Creates an FCB data structure and writes an U-Boot image to flash",
"[-b #] [-n #] [-f #] [-r [#]] [<address>] [<length>]\n"
"\t-b #\tfirst FCB block number (default 0)\n"
"\t-n #\ttotal number of FCB blocks (default 1)\n"
* Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
*
* This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation version 2.
+ * modify it under the terms of the GNU General Public License
+ * version 2 as published by the Free Software Foundation.
*
* This program is distributed "as is" WITHOUT ANY WARRANTY of any
* kind, whether express or implied; without even the implied warranty
#define IOMUX_SION IOMUX_PAD(0, 0, IOMUX_CONFIG_SION, 0, 0, 0)
-#define FEC_PAD_CTRL (PAD_CTL_DVS | PAD_CTL_DSE_HIGH | \
- PAD_CTL_SRE_FAST)
-#define FEC_PAD_CTRL2 (PAD_CTL_DVS | PAD_CTL_SRE_FAST)
-#define GPIO_PAD_CTRL (PAD_CTL_DVS | PAD_CTL_DSE_HIGH)
+#define FEC_PAD_CTRL MUX_PAD_CTRL(PAD_CTL_DVS | PAD_CTL_DSE_HIGH | \
+ PAD_CTL_SRE_FAST)
+#define FEC_PAD_CTRL2 MUX_PAD_CTRL(PAD_CTL_DVS | PAD_CTL_SRE_FAST)
+#define GPIO_PAD_CTRL MUX_PAD_CTRL(PAD_CTL_DVS | PAD_CTL_DSE_HIGH)
static iomux_v3_cfg_t tx51_pads[] = {
/* NAND flash pads are set up in lowlevel_init.S */
}
U_BOOT_CMD(romupdate, 11, 0, do_update,
- "Creates an FCB data structure and writes an U-Boot image to flash\n",
+ "Creates an FCB data structure and writes an U-Boot image to flash",
"[-f #] [-r [#]] [-e #] [<address>] [<length>]\n"
"\t-f #\twrite bootloader image at block #\n"
"\t-r\twrite redundant bootloader image at next free block after first image\n"
/*
- * Copyright (C) 2012 Lothar Waßmann <LW@KARO-electronics.de>
+ * Copyright (C) 2012,2013 Lothar Waßmann <LW@KARO-electronics.de>
*
* See file CREDITS for list of people who contributed to this
* project.
*
* This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of
- * the License, or (at your option) any later version.
+ * modify it under the terms of the GNU General Public License
+ * version 2 as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
- * MA 02111-1307 USA
*/
#include <common.h>
void lcd_disable(void)
{
- printf("Disabling LCD\n");
+ if (lcd_enabled) {
+ printf("Disabling LCD\n");
+ ipuv3_fb_shutdown();
+ }
}
void lcd_panel_disable(void)
PICOS2KHZ(p->pixclock) / 1000,
PICOS2KHZ(p->pixclock) % 1000);
+ if (p != &fb_mode) {
+ int ret;
+ char *modename = getenv("video_mode");
+
+ printf("Creating new display-timing node from '%s'\n",
+ modename);
+ ret = karo_fdt_create_fb_mode(working_fdt, modename, p);
+ if (ret)
+ printf("Failed to create new display-timing node from '%s': %d\n",
+ modename, ret);
+ }
+
gpio_request_array(stk5_lcd_gpios, ARRAY_SIZE(stk5_lcd_gpios));
imx_iomux_v3_setup_multiple_pads(stk5_lcd_pads,
ARRAY_SIZE(stk5_lcd_pads));
strcmp(baseboard, "stk5-v3") == 0) {
stk5v3_board_init();
} else if (strcmp(baseboard, "stk5-v5") == 0) {
+ const char *otg_mode = getenv("otg_mode");
+
+ if (otg_mode && strcmp(otg_mode, "host") == 0) {
+ printf("otg_mode='%s' is incompatible with baseboard %s; setting to 'none'\n",
+ otg_mode, baseboard);
+ setenv("otg_mode", "none");
+ }
stk5v5_board_init();
} else {
printf("WARNING: Unsupported STK5 board rev.: %s\n",
#define fdt_fixup_mtdparts(b,n,c) do { } while (0)
#endif
-static void tx6qdl_fixup_flexcan(void *blob)
+static int flexcan_enabled(void *blob)
{
- const char *baseboard = getenv("baseboard");
+ const char *can_ifs[] = {
+ "can0",
+ "can1",
+ };
+ size_t i;
+
+ for (i = 0; i < ARRAY_SIZE(can_ifs); i++) {
+ const char *status;
+ int off = fdt_path_offset(blob, can_ifs[i]);
+
+ if (off < 0) {
+ debug("node '%s' not found\n", can_ifs[i]);
+ continue;
+ }
+ status = fdt_getprop(blob, off, "status", NULL);
+ if (strcmp(status, "okay") == 0) {
+ debug("%s is enabled\n", can_ifs[i]);
+ return 1;
+ }
+ }
+ debug("can driver is disabled\n");
+ return 0;
+}
+
+static void tx6qdl_set_lcd_pins(void *blob, const char *name)
+{
+ int off = fdt_path_offset(blob, name);
+ u32 ph;
+ const struct fdt_property *pc;
+ int len;
+
+ if (off < 0)
+ return;
- if (baseboard && strcmp(baseboard, "stk5-v5") == 0)
+ ph = fdt_create_phandle(blob, off);
+ if (!ph)
return;
- karo_fdt_del_prop(blob, "fsl,p1010-flexcan", 0x02090000, "transceiver-switch");
- karo_fdt_del_prop(blob, "fsl,p1010-flexcan", 0x02094000, "transceiver-switch");
+ off = fdt_path_offset(blob, "display");
+ if (off < 0)
+ return;
+
+ pc = fdt_get_property(blob, off, "pinctrl-0", &len);
+ if (!pc || len < sizeof(ph))
+ return;
+
+ memcpy((void *)pc->data, &ph, sizeof(ph));
+ fdt_setprop_cell(blob, off, "pinctrl-0", ph);
+}
+
+static void tx6qdl_fixup_flexcan(void *blob, int stk5_v5)
+{
+ const char *xcvr_status = "disabled";
+
+ if (stk5_v5) {
+ if (flexcan_enabled(blob)) {
+ tx6qdl_set_lcd_pins(blob, "lcdif_23bit_pins_a");
+ xcvr_status = "okay";
+ } else {
+ tx6qdl_set_lcd_pins(blob, "lcdif_24bit_pins_a");
+ }
+ } else {
+ const char *otg_mode = getenv("otg_mode");
+
+ if (otg_mode && (strcmp(otg_mode, "host") == 0))
+ karo_fdt_enable_node(blob, "can1", 0);
+
+ tx6qdl_set_lcd_pins(blob, "lcdif_24bit_pins_a");
+ }
+ fdt_find_and_setprop(blob, "/regulators/can-xcvr", "status",
+ xcvr_status, strlen(xcvr_status) + 1, 1);
}
void ft_board_setup(void *blob, bd_t *bd)
{
+ const char *baseboard = getenv("baseboard");
+ int stk5_v5 = baseboard != NULL && (strcmp(baseboard, "stk5-v5") == 0);
+
+ karo_fdt_enable_node(blob, "stk5led", !stk5_v5);
+
fdt_fixup_mtdparts(blob, nodes, ARRAY_SIZE(nodes));
fdt_fixup_ethernet(blob);
karo_fdt_fixup_touchpanel(blob);
karo_fdt_fixup_usb_otg(blob, "usbotg", "fsl,usbphy");
- tx6qdl_fixup_flexcan(blob);
+ tx6qdl_fixup_flexcan(blob, stk5_v5);
karo_fdt_update_fb_mode(blob, getenv("video_mode"));
}
#endif
}
U_BOOT_CMD(
bootce, 2, 0, do_bootce,
- "Boot a Windows CE image from RAM\n",
+ "Boot a Windows CE image from RAM",
"[addr]\n"
- "\taddr\t\tboot image from address addr (default ${fileaddr})\n"
+ "\taddr\t\tboot image from address addr (default ${fileaddr})"
);
static int ce_nand_load(ce_bin *bin, loff_t *offset, void *buf, size_t max_len)
break;
}
} while (ret == CE_PR_MORE);
+ free(buffer);
if (ret != CE_PR_EOF)
return CMD_RET_FAILURE;
- free(buffer);
if (getenv_yesno("autostart") != 1) {
/*
* just use bootce to load the image to SDRAM;
}
U_BOOT_CMD(
nbootce, 2, 0, do_nbootce,
- "Boot a Windows CE image from NAND\n",
+ "Boot a Windows CE image from NAND",
"off|partitition\n"
"\toff\t\t- flash offset (hex)\n"
- "\tpartition\t- partition name\n"
+ "\tpartition\t- partition name"
);
static int ce_send_write_ack(ce_net *net)
} else {
int rc = ce_send_write_ack(net);
- printf("Dropping out of sequence packet with ID %d (expected %d)\n",
- blknum, nxt);
+ if (net->verbose)
+ printf("Dropping out of sequence packet with ID %d (expected %d)\n",
+ blknum, nxt);
if (rc != 0)
return rc;
net->state = BOOTME_DEBUG;
}
-debug("%s@%d\n", __func__, __LINE__);
switch (header.cmd) {
case EDBG_CMD_JUMPIMG:
-debug("%s@%d\n", __func__, __LINE__);
net->gotJumpingRequest = 1;
if (net->verbose) {
printf("Received JUMPING command\n");
}
/* Just pass through and copy CONFIG structure */
+ ret = BOOTME_DONE;
case EDBG_CMD_OS_CONFIG:
-debug("%s@%d\n", __func__, __LINE__);
/* Copy config structure */
- memcpy(&bin->edbgConfig, header.data,
+ memcpy(&bin->edbgConfig, &net->data[sizeof(header)],
sizeof(edbg_os_config_data));
if (net->verbose) {
printf("Received CONFIG command\n");
printf("--> Force clean boot\n");
}
}
- ret = BOOTME_DEBUG;
break;
default:
/* Respond with ack */
header.flags = EDBG_FL_FROM_DEV | EDBG_FL_ACK;
+ memcpy(net->data, &header, sizeof(header));
net->dataLen = EDBG_DATA_OFFSET;
-debug("%s@%d: sending packet %p len %u\n", __func__, __LINE__,
- net->data, net->dataLen);
- bootme_send_frame(net->data, net->dataLen);
- return ret;
+
+ int retries = 10;
+ int rc;
+ do {
+ rc = bootme_send_frame(net->data, net->dataLen);
+ if (rc != 0) {
+ printf("Failed to send ACK: %d\n", rc);
+ }
+ } while (rc && retries-- > 0);
+ return rc ?: ret;
}
static enum bootme_state ce_edbg_handler(const void *buf, size_t len)
i++;
if (argc > i) {
timeout = simple_strtoul(argv[i],
- NULL, 10);
+ NULL, 0);
if (timeout >= UINT_MAX / CONFIG_SYS_HZ) {
printf("Timeout value %lu out of range (max.: %lu)\n",
timeout, UINT_MAX / CONFIG_SYS_HZ - 1);
server_ip = string_to_ip(argv[i]);
printf("Using server %pI4\n", &server_ip);
} else {
- printf("Option requires an argument - t\n");
+ printf("Option requires an argument - h\n");
return CMD_RET_USAGE;
}
}
}
U_BOOT_CMD(
ceconnect, 6, 1, do_ceconnect,
- "Set up a connection to the CE host PC over TCP/IP and download the run-time image\n",
+ "Set up a connection to the CE host PC over TCP/IP and download the run-time image",
"[-v] [-t <timeout>] [-h host]\n"
" -v - verbose operation\n"
" -t <timeout> - max wait time (#sec) for the connection\n"
* SPDX-License-Identifier: GPL-2.0
*
*/
-#ifndef __CONFIGS_TX28_H
-#define __CONFIGS_TX28_H
-#define CONFIG_MX28 /* i.MX28 SoC */
+#ifndef __CONFIG_H
+#define __CONFIG_H
+
+#define CONFIG_MX28 /* must be defined before including regs-base.h */
#include <asm/sizes.h>
#include <asm/arch/regs-base.h>
"run bootm_cmd\0" \
"bootm_cmd=bootm ${loadaddr} - ${fdtaddr}\0" \
"default_bootargs=set bootargs " CONFIG_BOOTARGS \
- " video=${video_mode} ${append_bootargs}\0" \
+ " ${append_bootargs}\0" \
"cpu_clk=" xstr(CONFIG_SYS_CPU_CLK) "\0" \
"fdtaddr=91000000\0" \
"mtdids=" MTDIDS_DEFAULT "\0" \
"mtdparts=" MTDPARTS_DEFAULT "\0" \
"otg_mode=device\0" \
"touchpanel=tsc2007\0" \
- "video_mode=VGA-1:640x480MR-24@60\0"
+ "video_mode=VGA\0"
#define MTD_NAME "mxc_nand"
#define MTDIDS_DEFAULT "nand0=" MTD_NAME
"nfsroot=/tftpboot/rootfs\0" \
"otg_mode=device\0" \
"touchpanel=tsc2007\0" \
- "video_mode=VGA-1:640x480MR-24@60\0"
+ "video_mode=VGA\0"
#endif /* CONFIG_ENV_IS_NOWHERE */
#endif /* CONFIG_MFG */
enum bootme_state {
BOOTME_INIT,
BOOTME_DOWNLOAD,
+ BOOTME_DEBUG_INIT,
BOOTME_DEBUG,
BOOTME_DONE,
BOOTME_ERROR,
DECLARE_GLOBAL_DATA_PTR;
-#define WINCE_VRAM_BASE 0x80000000
-#define CE_FIX_ADDRESS(a) ((void *)((a) - WINCE_VRAM_BASE + CONFIG_SYS_SDRAM_BASE))
-
-#ifndef INT_MAX
-#define INT_MAX ((int)(~0 >> 1))
-#endif
-
-/* Bin image parse states */
-#define CE_PS_RTI_ADDR 0
-#define CE_PS_RTI_LEN 1
-#define CE_PS_E_ADDR 2
-#define CE_PS_E_LEN 3
-#define CE_PS_E_CHKSUM 4
-#define CE_PS_E_DATA 5
-
-#define CE_MIN(a, b) (((a) < (b)) ? (a) : (b))
-#define CE_MAX(a, b) (((a) > (b)) ? (a) : (b))
-
-#define _STRMAC(s) #s
-#define STRMAC(s) _STRMAC(s)
-
static enum bootme_state bootme_state;
static int bootme_src_port = 0xdeadface;
static int bootme_dst_port = 0xdeadbeef;
static uchar bootme_ether[ETH_ALEN];
static IPaddr_t bootme_ip;
static int bootme_timed_out;
-//static size_t input_len, input_size;
-//static void *input_packet;
static const char *output_packet; /* used by first send udp */
static int output_packet_len;
static unsigned long bootme_timeout;
static void bootme_timeout_handler(void)
{
+ printf("%s\n", __func__);
net_set_state(NETLOOP_SUCCESS);
bootme_timed_out++;
}
uchar *eth_pkt = pkt;
unsigned eth_len = len;
static char cursor = '|';
- enum bootme_state last_state = BOOTME_INIT;
-#if 1
+ enum bootme_state last_state = bootme_state;
+
debug("received packet of len %d from %pI4:%d to port %d\n",
len, &src_ip, src_port, dest_port);
ce_dump_block(pkt, len);
-#endif
+
if (!bootme_packet_handler) {
printf("No packet handler set for BOOTME protocol; dropping packet\n");
return;
printf("%c\x08", cursor);
cursor = next_cursor(cursor);
- if (is_broadcast(bootme_ip)) {
- bootme_ip = src_ip;
- } else if (src_ip != bootme_ip) {
+ if (!is_broadcast(bootme_ip) && src_ip != bootme_ip) {
debug("src_ip %pI4 does not match destination IP %pI4\n",
&src_ip, &bootme_ip);
return; /* not from our server */
}
-
- last_state = bootme_state;
- bootme_dst_port = src_port;
- debug("bootme_dst_port set to %d\n", bootme_dst_port);
+ if (bootme_state == BOOTME_INIT || bootme_state == BOOTME_DEBUG_INIT) {
+ struct ethernet_hdr *eth = (struct ethernet_hdr *)(pkt -
+ NetEthHdrSize() - IP_UDP_HDR_SIZE);
+ memcpy(bootme_ether, eth->et_src, sizeof(bootme_ether));
+ printf("Target MAC address set to %pM\n", bootme_ether);
+
+ if (is_broadcast(bootme_ip)) {
+ NetCopyIP(&bootme_ip, &src_ip);
+ }
+ }
if (bootme_state == BOOTME_INIT) {
bootme_src_port = EDBG_SVC_PORT;
debug("%s: bootme_src_port set to %d\n", __func__, bootme_src_port);
}
+
+ debug("bootme_dst_port %d -> %d\n", bootme_dst_port, src_port);
+ bootme_dst_port = src_port;
+
bootme_state = bootme_packet_handler(eth_pkt, eth_len);
debug("bootme_packet_handler() returned %d\n", bootme_state);
if (bootme_state != last_state)
- debug("bootme_state: %d -> %d\n", last_state, bootme_state);
+ debug("%s@%d: bootme_state: %d -> %d\n", __func__, __LINE__,
+ last_state, bootme_state);
switch (bootme_state) {
case BOOTME_INIT:
+ case BOOTME_DEBUG_INIT:
break;
case BOOTME_DOWNLOAD:
NetBootFileXferSize += len - 4;
/* fallthru */
case BOOTME_DEBUG:
- if (last_state == BOOTME_INIT) {
+ if (last_state == BOOTME_INIT ||
+ last_state == BOOTME_DEBUG_INIT)
bootme_timeout = 3 * 1000;
- }
NetSetTimeout(bootme_timeout, bootme_timeout_handler);
break;
assert(NetTxPacket != NULL);
pkt = (uchar *)NetTxPacket + NetEthHdrSize() + IP_UDP_HDR_SIZE;
memcpy(pkt, output_packet, output_packet_len);
+ debug("%s@%d: Sending ARP request:\n", __func__, __LINE__);
+ ce_dump_block(pkt, output_packet_len);
NetSendUDPPacket(bootme_ether, bootme_ip, bootme_dst_port,
bootme_src_port, output_packet_len);
+ output_packet_len = 0;
}
}
{
int ret;
struct eth_device *eth;
- int inited = 0;
uchar *pkt;
eth = eth_get_dev();
if (eth == NULL)
return -EINVAL;
- if (bootme_state == BOOTME_INIT)
+ if (bootme_state == BOOTME_INIT || bootme_state == BOOTME_DEBUG_INIT)
check_net_config();
debug("%s: buf: %p len: %u from %pI4:%d to %pI4:%d\n",
- __func__, buf, len, &NetOurIP, bootme_src_port, &bootme_ip, bootme_dst_port);
+ __func__, buf, len, &NetOurIP, bootme_src_port, &bootme_ip,
+ bootme_dst_port);
if (memcmp(bootme_ether, NetEtherNullAddr, ETH_ALEN) == 0) {
- if (eth->state == ETH_STATE_ACTIVE)
- return 0; /* inside net loop */
-
output_packet = buf;
output_packet_len = len;
/* wait for arp reply and send packet */
return 0;
}
- if (eth->state != ETH_STATE_ACTIVE) {
- if (eth_is_on_demand_init()) {
- ret = eth_init(gd->bd);
- if (ret < 0)
- return ret;
- eth_set_last_protocol(BOOTME);
- } else {
- eth_init_state_only(gd->bd);
- }
- inited = 1;
- }
-
assert(NetTxPacket != NULL);
pkt = (uchar *)NetTxPacket + NetEthHdrSize() + IP_UDP_HDR_SIZE;
memcpy(pkt, buf, len);
ret = NetSendUDPPacket(bootme_ether, bootme_ip, bootme_dst_port,
bootme_src_port, len);
- if (inited) {
- debug("Stopping network\n");
- if (eth_is_on_demand_init())
- eth_halt();
- else
- eth_halt_state_only();
- }
+ if (ret)
+ printf("Failed to send packet: %d\n", ret);
+
return ret;
}
static void bootme_init(IPaddr_t server_ip)
{
+ debug("%s@%d: bootme_state: %d -> %d\n", __func__, __LINE__,
+ bootme_state, BOOTME_INIT);
bootme_state = BOOTME_INIT;
bootme_ip = server_ip;
/* force reconfiguration in check_net_config() */
bootme_packet_handler = handler;
bootme_init(bootme_ip);
- bootme_state = BOOTME_DEBUG;
+ debug("%s@%d: bootme_state: %d -> %d\n", __func__, __LINE__,
+ bootme_state, BOOTME_DEBUG_INIT);
+ bootme_state = BOOTME_DEBUG_INIT;
+
bootme_timeout = 3 * 1000;
NetSetTimeout(bootme_timeout, bootme_timeout_handler);