This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

OMAPL137 U-Boot Error: "No ethernet found."

Other Parts Discussed in Thread: OMAP-L137

I am trying to boot a DA830 REV A board that was shipped to me with U-Boot loaded without Linux. I was able to build DaVinci Linux and a root file system, and now I want to load Linux using tftp. I booted the board but am getting an error that "No ethernet was found.". Following is what the board starts up with:

SF: Detected W25Q32 with page size 4 KiB, total 4 MiB
In:    serial
Out:   serial
Err:   serial
Net:   Read from EEPROM @ 0x50 failed
Board Net Initialization Failed
No ethernet found.
U-Boot >

I found one forum that suggested that the ethernet address was not set, and I checked with:

U-Boot > env print ethaddr
ethaddr=FF:FF:FF:FF:FF:FF

And indeed it is not set. I attempted set it with the following and got an error:

U-Boot > setenv ethaddr 01:02:03:04:05:06
Can't overwrite "ethaddr"

I also attempted to set it with the following, but it still does not set:

U-Boot > env set -f ethaddr 01:02:03:04:05:06
U-Boot > env print ethaddr
ethaddr=FF:FF:FF:FF:FF:FF

I don't know what to try next. Maybe my switches aren't configured properly??

  • Not sure about the DA830 board. The OMAP-L137 EVM uses an I2C EEPROM to hold the MAC address. The error message would suggest that there are problems with your I2C EEPROM at address 0x50. U-Boot is patched to disable modification of ethaddr.

  • Thank you for the quick answer. Looks like I would have to reload u-boot to get an ethernet address?? Sounds needlessly tedious. I can look into making the transfer over serial and there is also a USB port.

  • Both U-Boot and Linux assume a MAC address in the EEPROM. Both U-Boot and Linux appears to use the same config for both the DA830 and the OMAP-L137. Implies that both the DA830 and OMAP-L137 boards are supposed to have this EEPROM. Maybe check to see if your board has a bad or missing EEPROM. Changing U-Boot and Linux for a hard-coded MAC address is more than just tedious. Serial transfer should be possible if u-boot has been compiled with command "loady" (Ymodem).

  • Maybe I can find the location in code where the MAC address is read from and ovewrrite it?? Is therea nyway to see where the call to env print ethaddr pulls the MAC address from? How would I even check for a missing or bad EEPROM? A call to saveenv U-Boot completes successfully, seems like the EEPROM is working to me.

    As another boot option, I was able to load uImage with a serial connection using U-Boot's loadb and bootm commands. I booted the kernel and of course got a missing root file system error while it was booting. It doesn't look like there's enough space on the board to store both the kernel and a root file system, the board only has 4MB of SPI flash, uImage is 2MB and the root file system I found from Arago is 8MB. Is it possible to re-compile Linux to not load a root file system and instead start an application after the kernel loads?

  • I believe the U-Boot enviroment variables are stored in SPI Flash. Your U-Boot error message implies it cannot reach an I2C EEPROM at 0x54. It hasn'y gotten to the point of reading any MAC address. Be it good or bad. On my board, the MAC address is stored twice. Once at 0x7F00 and 0x7F10 in the EEPROM. I think you have to physically check the board for the EEPROM. Not familiar with the DA830 board. Maybe it never had one.

    My board came with the file system on the SD Card. Everything else in the 4MB SPI Flash. You might be able to squeeze a compressed ramdisk in there. But I doubt it.

  • Where is U-Boot code stored, on the processor? So I would have to use JTAG to re-install U-Boot? How did you determine the 2 addresses where your MAC address is stored? Is it possible for me to see where my MAC address is stored?

  • Remember that the following info is based upon my board OMAP-L137 using the Arago/DVSDK Linux. Your DA830 may be different. Quite probably MonteVista will be different.

    In U-Boot:
    File: board/davinci/common/misc.c or arch/arm/cpu/arm926ejs/davinci/misc.c
    ...
    int dvevm_read_mac_address(uint8_t *buf)
    {
    #ifdef CONFIG_SYS_I2C_EEPROM_ADDR
      /* Read MAC address. */
      if (i2c_read(CONFIG_SYS_I2C_EEPROM_ADDR, 0x7F00,
    ...

    In Linux:
    File: arch/arm/mach-davinci/common.c
    void davinci_get_mac_addr(struct memory_accessor *mem_acc, void *context)
    {
      char *mac_addr = davinci_soc_info.emac_pdata->mac_addr;
      off_t offset = (off_t)context;
      /* Read MAC addr from EEPROM */
      if (mem_acc->read(mem_acc, mac_addr, offset, ETH_ALEN) == ETH_ALEN)
        pr_info("Read MAC addr from EEPROM: %pM\n", mac_addr);
      ...
    }

    arch/arm/mach-davinci/board-da830-evm.c
    ...
    static struct at24_platform_data da830_evm_i2c_eeprom_info = {
      .byte_len       = SZ_256K / 8,
      .page_size      = 64,
      .flags          = AT24_FLAG_ADDR16,
      .setup          = davinci_get_mac_addr,
      .context        = (void *)0x7f00,
    };

    On totally new board, I had to use JTAG and an ARM app called spi_flash_writer. The app should be in your PSP or LSP or some TI package. It's in many places. On a board with u-boot, you could use u-boot to program the SPI flash. If you do it wrong and corrupt the u-boot in SPI flash, you are back to JTAG. I've heard of others using the UART boot to get a flash programmer onto the board.

    On my board, SPI flash is used to store the DSPUBL, ARMUBL, U-Boot code, U-Boot environment variables, kernel uImage and optionally a small ramdisk image. The location each component is hard-coded in the spi flash writer, u-boot env variables, u-boot header files and the linux board init file. They all have to match to work properly.