[U-Boot] bug when using environment in an i2c eeprom and SPI is enabled?

Hello Wolfgang,
I actually try to use Environment on an I2C EEprom with SPI enabled, and found in include/common.h the following defines @line 326ff:
/* * Set this up regardless of board * type, to prevent errors. */ #if defined(CONFIG_SPI) || !defined(CONFIG_SYS_I2C_EEPROM_ADDR) # define CONFIG_SYS_DEF_EEPROM_ADDR 0 #else # define CONFIG_SYS_DEF_EEPROM_ADDR CONFIG_SYS_I2C_EEPROM_ADDR #endif /* CONFIG_SPI || !defined(CONFIG_SYS_I2C_EEPROM_ADDR) */
So, it seems to me, that, if SPI is enabled, it is not possible to use an I2C EEprom with an address != 0, because in common/env_eeprom.c @line79 in env_init():
/* read old CRC */a eeprom_read (CONFIG_SYS_DEF_EEPROM_ADDR, CONFIG_ENV_OFFSET+offsetof(env_t,crc), (uchar *)&crc, sizeof(ulong));
CONFIG_SYS_DEF_EEPROM_ADDR is fix used ...
I tried to use "git blame" to find out where this comes from, but this is in code since the "initial revision" ... so I ask here on the mailinglist, if somebody knows, if this is a feature or a bug?
BTW, I think it should be:
diff --git a/include/common.h b/include/common.h index 9e4b859..411563b 100644 --- a/include/common.h +++ b/include/common.h @@ -327,7 +327,7 @@ extern void pic_write (uchar reg, uchar val); * Set this up regardless of board * type, to prevent errors. */ -#if defined(CONFIG_SPI) || !defined(CONFIG_SYS_I2C_EEPROM_ADDR) +#if defined(CONFIG_SPI) && !defined(CONFIG_SYS_I2C_EEPROM_ADDR) # define CONFIG_SYS_DEF_EEPROM_ADDR 0 #else # define CONFIG_SYS_DEF_EEPROM_ADDR CONFIG_SYS_I2C_EEPROM_ADDR
What do you think?
thanks Heiko

Dear Heiko Schocher,
In message 4A5ED846.90305@denx.de you wrote:
I actually try to use Environment on an I2C EEprom with SPI enabled, and found in include/common.h the following defines @line 326ff:
I'm not surprised...
So, it seems to me, that, if SPI is enabled, it is not possible to use an I2C EEprom with an address != 0, because in common/env_eeprom.c @line79 in env_init():
Actually you are most probably not supposed to use any I2C EEPROM at all.
I tried to use "git blame" to find out where this comes from, but this is in code since the "initial revision" ... so I ask here on the mailinglist, if somebody knows, if this is a feature or a bug?
I think this is a deficiency of the original implementation which assumed that if there was an EEPROM, it was either attached to the I2C or to the SPI bus, and that SPI would never be used in U-Boot for anything else than reading an EEPROM.
Please consider it a bug...
Best regards,
Wolfgang Denk
participants (2)
-
Heiko Schocher
-
Wolfgang Denk