diff options
-rw-r--r-- | cmd/eeprom.c | 2 | ||||
-rw-r--r-- | doc/README.bootcount | 34 | ||||
-rw-r--r-- | drivers/bootcount/Kconfig | 10 | ||||
-rw-r--r-- | drivers/i2c/i2c-uclass.c | 2 | ||||
-rw-r--r-- | drivers/misc/atsha204a-i2c.c | 8 |
5 files changed, 29 insertions, 27 deletions
diff --git a/cmd/eeprom.c b/cmd/eeprom.c index cdd65af763..fc0d444069 100644 --- a/cmd/eeprom.c +++ b/cmd/eeprom.c @@ -149,7 +149,7 @@ static int eeprom_rw(unsigned dev_addr, unsigned offset, uchar *buffer, int rcode = 0; uchar addr[3]; -#if defined(CONFIG_SYS_I2C_EEPROM_BUS) +#if !CONFIG_IS_ENABLED(DM_I2C) && defined(CONFIG_SYS_I2C_EEPROM_BUS) eeprom_init(CONFIG_SYS_I2C_EEPROM_BUS); #endif diff --git a/doc/README.bootcount b/doc/README.bootcount index b1c22905c6..f6c5f82f98 100644 --- a/doc/README.bootcount +++ b/doc/README.bootcount @@ -3,14 +3,16 @@ Boot Count Limit ================ +This is enabled by CONFIG_BOOTCOUNT_LIMIT. + This allows to detect multiple failed attempts to boot Linux. -After a power-on reset, "bootcount" variable will be initialized with 1, and +After a power-on reset, the "bootcount" variable will be initialized to 1, and each reboot will increment the value by 1. If, after a reboot, the new value of "bootcount" exceeds the value of "bootlimit", then instead of the standard boot action (executing the contents of -"bootcmd") an alternate boot action will be performed, and the contents of +"bootcmd"), an alternate boot action will be performed, and the contents of "altbootcmd" will be executed. If the variable "bootlimit" is not defined in the environment, the Boot Count @@ -18,18 +20,18 @@ Limit feature is disabled. If it is enabled, but "altbootcmd" is not defined, then U-Boot will drop into interactive mode and remain there. It is the responsibility of some application code (typically a Linux -application) to reset the variable "bootcount", thus allowing for more boot -cycles. +application) to reset the variable "bootcount" to 0 when the system booted +successfully, thus allowing for more boot cycles. -BOOTCOUNT_EXT -------------- +CONFIG_BOOTCOUNT_EXT +-------------------- This adds support for maintaining boot count in a file on an EXT filesystem. -The file to use is define by: +The file to use is defined by: -SYS_BOOTCOUNT_EXT_INTERFACE -SYS_BOOTCOUNT_EXT_DEVPART -SYS_BOOTCOUNT_EXT_NAME +CONFIG_SYS_BOOTCOUNT_EXT_INTERFACE +CONFIG_SYS_BOOTCOUNT_EXT_DEVPART +CONFIG_SYS_BOOTCOUNT_EXT_NAME The format of the file is: @@ -42,10 +44,10 @@ u8 bootcount u8 upgrade_available ==== ================= -To prevent unattended usage of "altbootcmd" the "upgrade_available" variable is +To prevent unattended usage of "altbootcmd", the "upgrade_available" variable is used. -If "upgrade_available" is 0, "bootcount" is not saved, if "upgrade_available" is -1 "bootcount" is save. -So the Userspace Application must set the "upgrade_available" and "bootcount" -variables to 0, if a boot was successfully. -This also prevents writes on all reboots. +If "upgrade_available" is 0, "bootcount" is not saved. +If "upgrade_available" is 1, "bootcount" is saved. +So a userspace application should take care of setting the "upgrade_available" +and "bootcount" variables to 0, if the system boots successfully. +This also avoids writing the "bootcount" information on all reboots. diff --git a/drivers/bootcount/Kconfig b/drivers/bootcount/Kconfig index 607027c968..65c052fc2e 100644 --- a/drivers/bootcount/Kconfig +++ b/drivers/bootcount/Kconfig @@ -68,15 +68,15 @@ config BOOTCOUNT_ENV "bootcount" is stored in the environment. To prevent a saveenv on all reboots, the environment variable "upgrade_available" is used. If "upgrade_available" is - 0, "bootcount" is always 0, if "upgrade_available" is - 1 "bootcount" is incremented in the environment. + 0, "bootcount" is always 0. If "upgrade_available" is 1, + "bootcount" is incremented in the environment. So the Userspace Application must set the "upgrade_available" - and "bootcount" variable to 0, if a boot was successfully. + and "bootcount" variables to 0, if the system booted successfully. config BOOTCOUNT_RAM bool "Boot counter in RAM" help - Store the bootcount in DRAM protected against against bit errors + Store the bootcount in DRAM protected against bit errors due to short power loss or holding a system in RESET. config BOOTCOUNT_I2C @@ -166,7 +166,7 @@ config BOOTCOUNT_BOOTLIMIT help Set the Maximum number of reboot cycles allowed without the boot counter being cleared. - If set to 0 do not set a boot limit in the environment. + If set to 0, do not set a boot limit in the environment. config BOOTCOUNT_ALEN int "I2C address length" diff --git a/drivers/i2c/i2c-uclass.c b/drivers/i2c/i2c-uclass.c index 5539becc19..335911c46b 100644 --- a/drivers/i2c/i2c-uclass.c +++ b/drivers/i2c/i2c-uclass.c @@ -280,7 +280,7 @@ static int i2c_probe_chip(struct udevice *bus, uint chip_addr, if (ops->probe_chip) { ret = ops->probe_chip(bus, chip_addr, chip_flags); - if (!ret || ret != -ENOSYS) + if (ret != -ENOSYS) return ret; } diff --git a/drivers/misc/atsha204a-i2c.c b/drivers/misc/atsha204a-i2c.c index 715dabb279..b89463babb 100644 --- a/drivers/misc/atsha204a-i2c.c +++ b/drivers/misc/atsha204a-i2c.c @@ -240,10 +240,10 @@ int atsha204a_wakeup(struct udevice *dev) } debug("success\n"); - break; + return 0; } - return 0; + return -ETIMEDOUT; } int atsha204a_idle(struct udevice *dev) @@ -280,6 +280,7 @@ static int atsha204a_transaction(struct udevice *dev, struct atsha204a_req *req, } do { + udelay(ATSHA204A_EXECTIME); res = atsha204a_recv_resp(dev, resp); if (!res || res == -EMSGSIZE || res == -EBADMSG) break; @@ -287,7 +288,6 @@ static int atsha204a_transaction(struct udevice *dev, struct atsha204a_req *req, debug("ATSHA204A transaction polling for response " "(timeout = %d)\n", timeout); - udelay(ATSHA204A_EXECTIME); timeout -= ATSHA204A_EXECTIME; } while (timeout > 0); @@ -388,7 +388,7 @@ static int atsha204a_of_to_plat(struct udevice *dev) fdt_addr_t *priv = dev_get_priv(dev); fdt_addr_t addr; - addr = fdtdec_get_addr(gd->fdt_blob, dev_of_offset(dev), "reg"); + addr = dev_read_addr(dev); if (addr == FDT_ADDR_T_NONE) { debug("Can't get ATSHA204A I2C base address\n"); return -ENXIO; |