Commit 59978129 authored by Alessandro Rubini's avatar Alessandro Rubini

Merge branch 'simplify-eeprom-calls'

parents 9db373ba 9e0d9fe8
......@@ -58,14 +58,20 @@
uint8_t has_eeprom = 0;
uint8_t eeprom_present(uint8_t i2cif, uint8_t i2c_addr)
static int i2cif, i2c_addr; /* globals, using the names we always used */
void eeprom_init(int chosen_i2cif, int chosen_i2c_addr)
{
/* Save these to globals, they are never passed any more */
i2cif = chosen_i2cif;
i2c_addr = chosen_i2c_addr;
has_eeprom = 1;
if (!mi2c_devprobe(i2cif, i2c_addr))
if (!mi2c_devprobe(i2cif, i2c_addr))
has_eeprom = 0;
return 0;
return;
}
static int eeprom_read(uint8_t i2cif, uint8_t i2c_addr, uint32_t offset,
......@@ -128,7 +134,7 @@ static int eeprom_write(uint8_t i2cif, uint8_t i2c_addr, uint32_t offset,
return size;
}
int32_t eeprom_sfpdb_erase(uint8_t i2cif, uint8_t i2c_addr)
int32_t eeprom_sfpdb_erase(void)
{
uint8_t sfpcount = 0;
......@@ -140,7 +146,7 @@ int32_t eeprom_sfpdb_erase(uint8_t i2cif, uint8_t i2c_addr)
return sfpcount;
}
int32_t eeprom_get_sfp(uint8_t i2cif, uint8_t i2c_addr, struct s_sfpinfo * sfp,
int eeprom_get_sfp(struct s_sfpinfo * sfp,
uint8_t add, uint8_t pos)
{
static uint8_t sfpcount = 0;
......@@ -195,15 +201,14 @@ int32_t eeprom_get_sfp(uint8_t i2cif, uint8_t i2c_addr, struct s_sfpinfo * sfp,
return sfpcount;
}
int8_t eeprom_match_sfp(uint8_t i2cif, uint8_t i2c_addr, struct s_sfpinfo * sfp)
int eeprom_match_sfp(struct s_sfpinfo * sfp)
{
uint8_t sfpcount = 1;
int8_t i, temp;
struct s_sfpinfo dbsfp;
for (i = 0; i < sfpcount; ++i) {
temp = eeprom_get_sfp(WRPC_FMC_I2C, FMC_EEPROM_ADR,
&dbsfp, 0, i);
temp = eeprom_get_sfp(&dbsfp, 0, i);
if (!i) {
sfpcount = temp; //only in first round valid sfpcount is returned from eeprom_get_sfp
if (sfpcount == 0 || sfpcount == 0xFF)
......@@ -222,7 +227,7 @@ int8_t eeprom_match_sfp(uint8_t i2cif, uint8_t i2c_addr, struct s_sfpinfo * sfp)
return 0;
}
int8_t eeprom_phtrans(uint8_t i2cif, uint8_t i2c_addr, uint32_t * val,
int eeprom_phtrans(uint32_t * val,
uint8_t write)
{
int8_t ret;
......@@ -249,7 +254,7 @@ int8_t eeprom_phtrans(uint8_t i2cif, uint8_t i2c_addr, uint32_t * val,
}
}
int8_t eeprom_init_erase(uint8_t i2cif, uint8_t i2c_addr)
int eeprom_init_erase(void)
{
uint16_t used = 0;
......@@ -263,7 +268,7 @@ int8_t eeprom_init_erase(uint8_t i2cif, uint8_t i2c_addr)
/*
* Appends a new shell command at the end of boot script
*/
int8_t eeprom_init_add(uint8_t i2cif, uint8_t i2c_addr, const char *args[])
int eeprom_init_add(const char *args[])
{
uint8_t i = 1;
uint8_t separator = ' ';
......@@ -306,7 +311,7 @@ int8_t eeprom_init_add(uint8_t i2cif, uint8_t i2c_addr, const char *args[])
return 0;
}
int32_t eeprom_init_show(uint8_t i2cif, uint8_t i2c_addr)
int eeprom_init_show(void)
{
uint16_t used, i;
uint8_t byte;
......@@ -330,8 +335,7 @@ int32_t eeprom_init_show(uint8_t i2cif, uint8_t i2c_addr)
return 0;
}
int8_t eeprom_init_readcmd(uint8_t i2cif, uint8_t i2c_addr, uint8_t *buf,
uint8_t bufsize, uint8_t next)
int eeprom_init_readcmd(uint8_t *buf, uint8_t bufsize, uint8_t next)
{
static uint16_t ptr;
static uint16_t used = 0;
......
......@@ -213,7 +213,7 @@ static int calib_t24p_master(uint32_t *value)
{
int rv;
rv = eeprom_phtrans(WRPC_FMC_I2C, FMC_EEPROM_ADR, value, 0);
rv = eeprom_phtrans(value, 0);
if(rv < 0) {
pp_printf("Error %d while reading EEPROM\n", rv);
return rv;
......@@ -241,9 +241,9 @@ static int calib_t24p_slave(uint32_t *value)
* Let's see if we have a matching value in EEPROM:
* accept a 200ps difference, otherwise rewrite eeprom
*/
rv = eeprom_phtrans(WRPC_FMC_I2C, FMC_EEPROM_ADR, &prev, 0 /* rd */);
rv = eeprom_phtrans(&prev, 0 /* rd */);
if (rv < 0 || (prev < *value - 200) || (prev > *value + 200)) {
rv = eeprom_phtrans(WRPC_FMC_I2C, FMC_EEPROM_ADR, value, 1);
rv = eeprom_phtrans(value, 1);
pp_printf("Wrote new t24p value: %d ps (%s)\n", *value,
rv < 0 ? "Failed" : "Success");
}
......
......@@ -138,11 +138,11 @@ static struct sdbfs wrc_sdb = {
uint8_t has_eeprom = 0; /* modified at init time */
/*
* Init: returns 0 for success; it changes has_eeprom above
* Init: sets "int has_eeprom" above
*
* This is called by wrc_main, after initializing both w1 and i2c
*/
uint8_t eeprom_present(uint8_t i2cif, uint8_t i2c_addr)
void eeprom_init(int chosen_i2cif, int chosen_i2c_addr)
{
uint32_t magic = 0;
static unsigned entry_points[] = {0, 64, 128, 256, 512, 1024};
......@@ -169,10 +169,10 @@ uint8_t eeprom_present(uint8_t i2cif, uint8_t i2c_addr)
/*
* If w1 failed, look for i2c: start from low offsets.
*/
if (!mi2c_devprobe(i2cif, i2c_addr))
return 0;
i2c_params.ifnum = i2cif;
i2c_params.addr = i2c_addr;
i2c_params.ifnum = chosen_i2cif;
i2c_params.addr = chosen_i2c_addr;
if (!mi2c_devprobe(i2c_params.ifnum, i2c_params.addr))
return;
/* While looking for the magic number, use sdb-based read function */
for (i = 0; i < ARRAY_SIZE(entry_points); i++) {
......@@ -185,7 +185,7 @@ uint8_t eeprom_present(uint8_t i2cif, uint8_t i2c_addr)
}
if (i == ARRAY_SIZE(entry_points)) {
pp_printf("No SDB filesystem in i2c eeprom\n");
return 0;
return;
}
found_exit:
......@@ -193,7 +193,7 @@ found_exit:
has_eeprom = 1;
sdbfs_dev_create(&wrc_sdb);
eeprom_sdb_list(&wrc_sdb);
return 0;
return;
}
/*
......@@ -275,7 +275,7 @@ int set_persistent_mac(uint8_t portnum, uint8_t * mac)
/* Just a dummy function that writes '0' to sfp count field of the SFP DB */
int32_t eeprom_sfpdb_erase(uint8_t i2cif, uint8_t i2c_addr)
int32_t eeprom_sfpdb_erase(void)
{
uint8_t sfpcount = 0;
int ret;
......@@ -287,7 +287,7 @@ int32_t eeprom_sfpdb_erase(uint8_t i2cif, uint8_t i2c_addr)
return ret == 1 ? 0 : -1;
}
int32_t eeprom_get_sfp(uint8_t i2cif, uint8_t i2c_addr, struct s_sfpinfo * sfp,
int eeprom_get_sfp(struct s_sfpinfo * sfp,
uint8_t add, uint8_t pos)
{
static uint8_t sfpcount = 0;
......@@ -350,15 +350,14 @@ out:
return 0;
}
int8_t eeprom_match_sfp(uint8_t i2cif, uint8_t i2c_addr, struct s_sfpinfo * sfp)
int eeprom_match_sfp(struct s_sfpinfo * sfp)
{
uint8_t sfpcount = 1;
int8_t i, temp;
struct s_sfpinfo dbsfp;
for (i = 0; i < sfpcount; ++i) {
temp = eeprom_get_sfp(i2cif, i2c_addr,
&dbsfp, 0, i);
temp = eeprom_get_sfp(&dbsfp, 0, i);
if (!i) {
// first round: valid sfpcount is returned
sfpcount = temp;
......@@ -382,7 +381,7 @@ int8_t eeprom_match_sfp(uint8_t i2cif, uint8_t i2c_addr, struct s_sfpinfo * sfp)
* Phase transition ("calibration" file)
*/
#define VALIDITY_BIT 0x80000000
int8_t eeprom_phtrans(uint8_t i2cif, uint8_t i2c_addr, uint32_t * valp,
int eeprom_phtrans(uint32_t * valp,
uint8_t write)
{
int ret = -1;
......@@ -421,7 +420,7 @@ out:
* ------------------------------------------------
*/
int8_t eeprom_init_erase(uint8_t i2cif, uint8_t i2c_addr)
int eeprom_init_erase(void)
{
uint16_t used = 0;
int ret;
......@@ -436,7 +435,7 @@ int8_t eeprom_init_erase(uint8_t i2cif, uint8_t i2c_addr)
/*
* Appends a new shell command at the end of boot script
*/
int8_t eeprom_init_add(uint8_t i2cif, uint8_t i2c_addr, const char *args[])
int eeprom_init_add(const char *args[])
{
int len, i = 1; /* args[0] is "add" */
uint8_t separator = ' ';
......@@ -482,7 +481,7 @@ out:
return ret;
}
int32_t eeprom_init_show(uint8_t i2cif, uint8_t i2c_addr)
int eeprom_init_show(void)
{
int i, ret = -1;
uint16_t used;
......@@ -512,8 +511,7 @@ out:
return ret;
}
int8_t eeprom_init_readcmd(uint8_t i2cif, uint8_t i2c_addr, uint8_t *buf,
uint8_t bufsize, uint8_t next)
int eeprom_init_readcmd(uint8_t *buf, uint8_t bufsize, uint8_t next)
{
int i = 0, ret = -1;
uint16_t used;
......
......@@ -27,23 +27,19 @@ struct s_sfpinfo {
uint8_t chksum;
} __attribute__ ((__packed__));
uint8_t eeprom_present(uint8_t i2cif, uint8_t i2c_addr);
void eeprom_init(int i2cif, int i2c_addr);
int32_t eeprom_sfpdb_erase(uint8_t i2cif, uint8_t i2c_addr);
int32_t eeprom_sfp_section(uint8_t i2cif, uint8_t i2c_addr, size_t size,
uint16_t * section_sz);
int8_t eeprom_match_sfp(uint8_t i2cif, uint8_t i2c_addr, struct s_sfpinfo *sfp);
int eeprom_sfpdb_erase(void);
int eeprom_match_sfp(struct s_sfpinfo *sfp);
int eeprom_get_sfp(struct s_sfpinfo * sfp,
uint8_t add, uint8_t pos);
int8_t eeprom_phtrans(uint8_t i2cif, uint8_t i2c_addr, uint32_t * val,
int eeprom_phtrans(uint32_t * val,
uint8_t write);
int8_t eeprom_init_erase(uint8_t i2cif, uint8_t i2c_addr);
int8_t eeprom_init_add(uint8_t i2cif, uint8_t i2c_addr, const char *args[]);
int32_t eeprom_init_show(uint8_t i2cif, uint8_t i2c_addr);
int8_t eeprom_init_readcmd(uint8_t i2cif, uint8_t i2c_addr, uint8_t *buf,
uint8_t bufsize, uint8_t next);
int32_t eeprom_get_sfp(uint8_t i2cif, uint8_t i2c_addr, struct s_sfpinfo * sfp,
uint8_t add, uint8_t pos);
int eeprom_init_erase(void);
int eeprom_init_add(const char *args[]);
int eeprom_init_show(void);
int eeprom_init_readcmd(uint8_t *buf, uint8_t bufsize, uint8_t next);
#endif
......@@ -27,9 +27,9 @@ static int cmd_calibration(const char *args[])
if (args[0] && !strcasecmp(args[0], "force")) {
if (measure_t24p(&trans) < 0)
return -1;
return eeprom_phtrans(WRPC_FMC_I2C, FMC_EEPROM_ADR, &trans, 1);
return eeprom_phtrans(&trans, 1);
} else if (!args[0]) {
if (eeprom_phtrans(WRPC_FMC_I2C, FMC_EEPROM_ADR, &trans, 0) > 0) {
if (eeprom_phtrans(&trans, 0) > 0) {
mprintf("Found phase transition in EEPROM: %dps\n",
trans);
cal_phase_transition = trans;
......@@ -39,8 +39,7 @@ static int cmd_calibration(const char *args[])
if (measure_t24p(&trans) < 0)
return -1;
cal_phase_transition = trans;
return eeprom_phtrans(WRPC_FMC_I2C, FMC_EEPROM_ADR,
&trans, 1);
return eeprom_phtrans(&trans, 1);
}
}
......
......@@ -22,15 +22,15 @@ static int cmd_init(const char *args[])
}
if (args[0] && !strcasecmp(args[0], "erase")) {
if (eeprom_init_erase(WRPC_FMC_I2C, FMC_EEPROM_ADR) < 0)
if (eeprom_init_erase() < 0)
mprintf("Could not erase init script\n");
} else if (args[1] && !strcasecmp(args[0], "add")) {
if (eeprom_init_add(WRPC_FMC_I2C, FMC_EEPROM_ADR, args) < 0)
if (eeprom_init_add(args) < 0)
mprintf("Could not add the command\n");
else
mprintf("OK.\n");
} else if (args[0] && !strcasecmp(args[0], "show")) {
eeprom_init_show(WRPC_FMC_I2C, FMC_EEPROM_ADR);
eeprom_init_show();
} else if (args[0] && !strcasecmp(args[0], "boot")) {
shell_boot_script();
}
......
......@@ -51,7 +51,7 @@ static int cmd_sfp(const char *args[])
// return 0;
// }
else if (!strcasecmp(args[0], "erase")) {
if (eeprom_sfpdb_erase(WRPC_FMC_I2C, FMC_EEPROM_ADR) ==
if (eeprom_sfpdb_erase() ==
EE_RET_I2CERR)
mprintf("Could not erase DB\n");
} else if (args[4] && !strcasecmp(args[0], "add")) {
......@@ -66,7 +66,7 @@ static int cmd_sfp(const char *args[])
sfp.dTx = atoi(args[2]);
sfp.dRx = atoi(args[3]);
sfp.alpha = atoi(args[4]);
temp = eeprom_get_sfp(WRPC_FMC_I2C, FMC_EEPROM_ADR, &sfp, 1, 0);
temp = eeprom_get_sfp(&sfp, 1, 0);
if (temp == EE_RET_DBFULL)
mprintf("SFP DB is full\n");
else if (temp == EE_RET_I2CERR)
......@@ -75,8 +75,7 @@ static int cmd_sfp(const char *args[])
mprintf("%d SFPs in DB\n", temp);
} else if (args[0] && !strcasecmp(args[0], "show")) {
for (i = 0; i < sfpcount; ++i) {
temp = eeprom_get_sfp(WRPC_FMC_I2C, FMC_EEPROM_ADR,
&sfp, 0, i);
temp = eeprom_get_sfp(&sfp, 0, i);
if (!i) {
sfpcount = temp; //only in first round valid sfpcount is returned from eeprom_get_sfp
if (sfpcount == 0 || sfpcount == 0xFF) {
......@@ -99,7 +98,7 @@ static int cmd_sfp(const char *args[])
return 0;
}
strncpy(sfp.pn, pn, SFP_PN_LEN);
if (eeprom_match_sfp(WRPC_FMC_I2C, FMC_EEPROM_ADR, &sfp) > 0) {
if (eeprom_match_sfp(&sfp) > 0) {
mprintf("SFP matched, dTx=%d, dRx=%d, alpha=%d\n",
sfp.dTx, sfp.dRx, sfp.alpha);
sfp_deltaTx = sfp.dTx;
......
......@@ -256,8 +256,7 @@ int shell_boot_script(void)
return -1;
while (1) {
cmd_len = eeprom_init_readcmd(WRPC_FMC_I2C, FMC_EEPROM_ADR,
(uint8_t *)cmd_buf,
cmd_len = eeprom_init_readcmd((uint8_t *)cmd_buf,
SH_MAX_LINE_LEN, next);
if (cmd_len <= 0) {
if (next == 0)
......
......@@ -60,7 +60,7 @@ static void wrc_initialize()
/*initialize I2C bus*/
mi2c_init(WRPC_FMC_I2C);
/*check if EEPROM is onboard*/
eeprom_present(WRPC_FMC_I2C, FMC_EEPROM_ADR);
eeprom_init(WRPC_FMC_I2C, FMC_EEPROM_ADR);
mac_addr[0] = 0x08; //
mac_addr[1] = 0x00; // CERN OUI
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment