aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Rini <trini@konsulko.com>2022-03-23 09:10:34 -0400
committerTom Rini <trini@konsulko.com>2022-03-23 09:10:34 -0400
commit5bc486286f4f54d9f399adaa560720d4bf9f6566 (patch)
tree23c2e67a3c2a0068a0879e1669d02da5adc476df
parent3789b6a92fe958174da8d045c1f5d39822eaba7d (diff)
parentfc1383ae2b5ca69e51bee68e4047589a5ee7b386 (diff)
downloadu-boot-WIP/23Mar2022.zip
u-boot-WIP/23Mar2022.tar.gz
u-boot-WIP/23Mar2022.tar.bz2
Merge tag 'i2c-2022-04-rc5' of https://source.denx.de/u-boot/custodians/u-boot-i2cWIP/23Mar2022
i2c changes for fixes-for-2022.04 - atsha204a-i2c.c DTS and I2C fixes for Atmel ATSHA204 from Adrian - i2c: fix always-true condition in i2c_probe_chip() from Nikita - eeprom: Do not rewrite EEPROM I2C bus with DM I2C enabled from Marek - clarify bootcount documentation fix from Michael
-rw-r--r--cmd/eeprom.c2
-rw-r--r--doc/README.bootcount34
-rw-r--r--drivers/bootcount/Kconfig10
-rw-r--r--drivers/i2c/i2c-uclass.c2
-rw-r--r--drivers/misc/atsha204a-i2c.c8
5 files changed, 29 insertions, 27 deletions
diff --git a/cmd/eeprom.c b/cmd/eeprom.c
index cdd65af..fc0d444 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 b1c2290..f6c5f82 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 607027c..65c052f 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 5539bec..335911c 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 715dabb..b89463b 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;