/** * read_eeprom - read the EEPROM into memory */ static int read_eeprom(void) { int ret; #ifdef CONFIG_SYS_EEPROM_BUS_NUM unsigned int bus; #endif if (has_been_read) return 0; #ifdef CONFIG_SYS_EEPROM_BUS_NUM bus = i2c_get_bus_num(); i2c_set_bus_num(CONFIG_SYS_EEPROM_BUS_NUM); #endif ret = i2c_read(CONFIG_SYS_I2C_EEPROM_ADDR, 0, CONFIG_SYS_I2C_EEPROM_ADDR_LEN, (void *)&e, sizeof(e)); #ifdef CONFIG_SYS_EEPROM_BUS_NUM i2c_set_bus_num(bus); #endif #ifdef DEBUG show_eeprom(); #endif has_been_read = (ret == 0) ? 1 : 0; return ret; }
int board_late_init(void) { int ret = 0; setup_ups(); if (!power_init()) setup_clocks(); ret = read_eeprom(); if (ret) printf("Error %d reading EEPROM content!\n", ret); eth_phy_reset(); show_eeprom(); read_board_id(); return ret; }
int do_mac(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) { char cmd; if (argc == 1) { show_eeprom(); return 0; } cmd = argv[1][0]; if (cmd == 'r') { read_eeprom(); return 0; } if (cmd == 'i') { #ifdef CONFIG_SYS_I2C_EEPROM_NXID memcpy(e.id, "NXID", sizeof(e.id)); e.version = 0; #else memcpy(e.id, "CCID", sizeof(e.id)); #endif return 0; } if (!is_valid) { printf("Please read the EEPROM ('r') and/or set the ID ('i') first.\n"); return 0; } if (argc == 2) { switch (cmd) { case 's': /* save */ prog_eeprom(); break; default: return cmd_usage(cmdtp); } return 0; } /* We know we have at least one parameter */ switch (cmd) { case 'n': /* serial number */ memset(e.sn, 0, sizeof(e.sn)); strncpy((char *)e.sn, argv[2], sizeof(e.sn) - 1); update_crc(); break; case 'e': /* errata */ #ifdef CONFIG_SYS_I2C_EEPROM_NXID memset(e.errata, 0, 5); strncpy((char *)e.errata, argv[2], 4); #else e.errata[0] = argv[2][0]; e.errata[1] = argv[2][1]; #endif update_crc(); break; case 'd': /* date BCD format YYMMDDhhmmss */ set_date(argv[2]); break; case 'p': /* MAC table size */ e.mac_count = simple_strtoul(argv[2], NULL, 16); update_crc(); break; case '0' ... '7': /* "mac 0" through "mac 7" */ set_mac_address(cmd - '0', argv[2]); break; case 'h': /* help */ default: return cmd_usage(cmdtp); } return 0; }
int do_mac(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) { char cmd; if (argc == 1) { show_eeprom(); return 0; } cmd = argv[1][0]; if (cmd == 'r') { #ifdef DEBUG printf("%s read\n", __func__); #endif read_eeprom(); return 0; } if (argc == 2) { switch (cmd) { case 's': /* save */ #ifdef DEBUG printf("%s save\n", __func__); #endif prog_eeprom(); break; default: return cmd_usage(cmdtp); } return 0; } /* We know we have at least one parameter */ switch (cmd) { case 'n': /* serial number */ #ifdef DEBUG printf("%s serial number\n", __func__); #endif memset(e.sn, 0, sizeof(e.sn)); strncpy((char *)e.sn, argv[2], sizeof(e.sn) - 1); update_crc(); break; case 'd': /* date BCD format YYMMDDhhmmss */ set_date(argv[2]); break; case 'e': /* errata */ printf("mac errata not implemented\n"); break; case 'i': /* id */ memset(e.id, 0, sizeof(e.id)); strncpy((char *)e.id, argv[2], sizeof(e.id) - 1); update_crc(); break; case 'p': /* ports */ printf("mac ports not implemented (always 1 port)\n"); break; case '0' ... '9': /* we only have "mac 0" but any digit can be used here */ set_mac_address(argv[2]); break; case 'h': /* help */ default: return cmd_usage(cmdtp); } return 0; }