static void init_ethernet_mac(void) { char mac_string[64]; char env_string[64]; int i; unsigned char *buf; buf = malloc(256); if (!buf) { printf("%s: malloc failed.\n", __func__); return; } get_sh_eth_mac_raw(buf, 256); /* Gigabit Ethernet */ for (i = 0; i < SH7753EVB_ETHERNET_NUM_CH; i++) { get_sh_eth_mac(i, mac_string, buf); if (i == 0) setenv("ethaddr", mac_string); else { sprintf(env_string, "eth%daddr", i); setenv(env_string, mac_string); } set_mac_to_sh_giga_eth_register(i, mac_string); } free(buf); }
int do_write_mac(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) { int i, ret; char mac_string[256]; struct spi_flash *spi; unsigned char *buf; if (argc != 5) { buf = malloc(256); if (!buf) { printf("%s: malloc error.\n", __func__); return 1; } get_sh_eth_mac_raw(buf, 256); /* print current MAC address */ for (i = 0; i < 4; i++) { get_sh_eth_mac(i, mac_string, buf); if (i < 2) printf(" ETHERC ch%d = %s\n", i, mac_string); else printf("GETHERC ch%d = %s\n", i-2, mac_string); } free(buf); return 0; } /* new setting */ memset(mac_string, 0xff, sizeof(mac_string)); sprintf(mac_string, "%s\t%s\t%s\t%s", argv[1], argv[2], argv[3], argv[4]); /* write MAC data to SPI rom */ spi = spi_flash_probe(0, 0, 1000000, SPI_MODE_3); if (!spi) { printf("%s: spi_flash probe error.\n", __func__); return 1; } ret = spi_flash_erase(spi, SH7757LCR_ETHERNET_MAC_BASE_SPI, SH7757LCR_SPI_SECTOR_SIZE); if (ret) { printf("%s: spi_flash erase error.\n", __func__); return 1; } ret = spi_flash_write(spi, SH7757LCR_ETHERNET_MAC_BASE_SPI, sizeof(mac_string), mac_string); if (ret) { printf("%s: spi_flash write error.\n", __func__); spi_flash_free(spi); return 1; } spi_flash_free(spi); puts("The writing of the MAC address to SPI ROM was completed.\n"); return 0; }