[PATCH] misc: atsha204a: Don't check for error when waking up the device

The device ignores any levels or transitions on the SCL pin when the device is idle, asleep or during waking up.
Linux kernel driver for atsha204a (atmel-sha204a.ko) also ignores return value from i2c wakeup send command, see: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/driv...
And also userspace Turris libatsha204 library ignores return value from wakeup send command, see: https://gitlab.nic.cz/turris/libatsha204/-/blob/v29.2/src/libatsha204/layer_...
U-Boot driver should do same thing.
Fixes waking up ATSHA204 on Turris 1.x boards.
Signed-off-by: Pali Rohár pali@kernel.org --- drivers/misc/atsha204a-i2c.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-)
diff --git a/drivers/misc/atsha204a-i2c.c b/drivers/misc/atsha204a-i2c.c index 81ecb5b6177b..fa2d5948f128 100644 --- a/drivers/misc/atsha204a-i2c.c +++ b/drivers/misc/atsha204a-i2c.c @@ -103,12 +103,13 @@ int atsha204a_wakeup(struct udevice *dev) for (try = 1; try <= 10; ++try) { debug("Try %i... ", try);
+ /* + * The device ignores any levels or transitions on the SCL pin + * when the device is idle, asleep or during waking up. + * Don't check for error when waking up the device. + */ memset(req, 0, 4); - res = atsha204a_send(dev, req, 4); - if (res) { - debug("failed on I2C send, trying again\n"); - continue; - } + atsha204a_send(dev, req, 4);
udelay(ATSHA204A_TWLO_US + ATSHA204A_TWHI_US);

On 04.08.22 13:03, Pali Rohár wrote:
The device ignores any levels or transitions on the SCL pin when the device is idle, asleep or during waking up.
Linux kernel driver for atsha204a (atmel-sha204a.ko) also ignores return value from i2c wakeup send command, see: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/driv...
And also userspace Turris libatsha204 library ignores return value from wakeup send command, see: https://gitlab.nic.cz/turris/libatsha204/-/blob/v29.2/src/libatsha204/layer_...
U-Boot driver should do same thing.
Fixes waking up ATSHA204 on Turris 1.x boards.
Signed-off-by: Pali Rohár pali@kernel.org
Reviewed-by: Stefan Roese sr@denx.de
Thanks, Stefan
drivers/misc/atsha204a-i2c.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-)
diff --git a/drivers/misc/atsha204a-i2c.c b/drivers/misc/atsha204a-i2c.c index 81ecb5b6177b..fa2d5948f128 100644 --- a/drivers/misc/atsha204a-i2c.c +++ b/drivers/misc/atsha204a-i2c.c @@ -103,12 +103,13 @@ int atsha204a_wakeup(struct udevice *dev) for (try = 1; try <= 10; ++try) { debug("Try %i... ", try);
/*
* The device ignores any levels or transitions on the SCL pin
* when the device is idle, asleep or during waking up.
* Don't check for error when waking up the device.
memset(req, 0, 4);*/
res = atsha204a_send(dev, req, 4);
if (res) {
debug("failed on I2C send, trying again\n");
continue;
}
atsha204a_send(dev, req, 4);
udelay(ATSHA204A_TWLO_US + ATSHA204A_TWHI_US);
Viele Grüße, Stefan Roese

Paweł, could you please test this change if it works on your board? I was that you were fixing another wakeup issue in patch "misc: atsha204a: Increase wake delay by tWHI".
On Thursday 04 August 2022 13:03:44 Pali Rohár wrote:
The device ignores any levels or transitions on the SCL pin when the device is idle, asleep or during waking up.
Linux kernel driver for atsha204a (atmel-sha204a.ko) also ignores return value from i2c wakeup send command, see: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/driv...
And also userspace Turris libatsha204 library ignores return value from wakeup send command, see: https://gitlab.nic.cz/turris/libatsha204/-/blob/v29.2/src/libatsha204/layer_...
U-Boot driver should do same thing.
Fixes waking up ATSHA204 on Turris 1.x boards.
Signed-off-by: Pali Rohár pali@kernel.org
drivers/misc/atsha204a-i2c.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-)
diff --git a/drivers/misc/atsha204a-i2c.c b/drivers/misc/atsha204a-i2c.c index 81ecb5b6177b..fa2d5948f128 100644 --- a/drivers/misc/atsha204a-i2c.c +++ b/drivers/misc/atsha204a-i2c.c @@ -103,12 +103,13 @@ int atsha204a_wakeup(struct udevice *dev) for (try = 1; try <= 10; ++try) { debug("Try %i... ", try);
/*
* The device ignores any levels or transitions on the SCL pin
* when the device is idle, asleep or during waking up.
* Don't check for error when waking up the device.
memset(req, 0, 4);*/
res = atsha204a_send(dev, req, 4);
if (res) {
debug("failed on I2C send, trying again\n");
continue;
}
atsha204a_send(dev, req, 4);
udelay(ATSHA204A_TWLO_US + ATSHA204A_TWHI_US);
-- 2.20.1

Hi Pali,
I applied the patch and it works fine on my board. Log from atsha204a_wakeup(): Waking up ATSHA204A Try 1... success
Tested-by: Paweł Anikiel pan@semihalf.com
Regards, Paweł
On Sun, Aug 7, 2022 at 9:30 PM Pali Rohár pali@kernel.org wrote:
Paweł, could you please test this change if it works on your board? I was that you were fixing another wakeup issue in patch "misc: atsha204a: Increase wake delay by tWHI".
On Thursday 04 August 2022 13:03:44 Pali Rohár wrote:
The device ignores any levels or transitions on the SCL pin when the device is idle, asleep or during waking up.
Linux kernel driver for atsha204a (atmel-sha204a.ko) also ignores return value from i2c wakeup send command, see: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/driv...
And also userspace Turris libatsha204 library ignores return value from wakeup send command, see: https://gitlab.nic.cz/turris/libatsha204/-/blob/v29.2/src/libatsha204/layer_...
U-Boot driver should do same thing.
Fixes waking up ATSHA204 on Turris 1.x boards.
Signed-off-by: Pali Rohár pali@kernel.org
drivers/misc/atsha204a-i2c.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-)
diff --git a/drivers/misc/atsha204a-i2c.c b/drivers/misc/atsha204a-i2c.c index 81ecb5b6177b..fa2d5948f128 100644 --- a/drivers/misc/atsha204a-i2c.c +++ b/drivers/misc/atsha204a-i2c.c @@ -103,12 +103,13 @@ int atsha204a_wakeup(struct udevice *dev) for (try = 1; try <= 10; ++try) { debug("Try %i... ", try);
/*
* The device ignores any levels or transitions on the SCL pin
* when the device is idle, asleep or during waking up.
* Don't check for error when waking up the device.
*/ memset(req, 0, 4);
res = atsha204a_send(dev, req, 4);
if (res) {
debug("failed on I2C send, trying again\n");
continue;
}
atsha204a_send(dev, req, 4); udelay(ATSHA204A_TWLO_US + ATSHA204A_TWHI_US);
-- 2.20.1

On Thu, 4 Aug 2022 13:03:44 +0200 Pali Rohár pali@kernel.org wrote:
The device ignores any levels or transitions on the SCL pin when the device is idle, asleep or during waking up.
Linux kernel driver for atsha204a (atmel-sha204a.ko) also ignores return value from i2c wakeup send command, see: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/driv...
And also userspace Turris libatsha204 library ignores return value from wakeup send command, see: https://gitlab.nic.cz/turris/libatsha204/-/blob/v29.2/src/libatsha204/layer_...
U-Boot driver should do same thing.
Fixes waking up ATSHA204 on Turris 1.x boards.
Signed-off-by: Pali Rohár pali@kernel.org
Reviewed-by: Marek Behún kabel@kernel.org
Stefan, will you apply this via marvell?

On 09.08.22 09:56, Marek Behún wrote:
On Thu, 4 Aug 2022 13:03:44 +0200 Pali Rohár pali@kernel.org wrote:
The device ignores any levels or transitions on the SCL pin when the device is idle, asleep or during waking up.
Linux kernel driver for atsha204a (atmel-sha204a.ko) also ignores return value from i2c wakeup send command, see: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/driv...
And also userspace Turris libatsha204 library ignores return value from wakeup send command, see: https://gitlab.nic.cz/turris/libatsha204/-/blob/v29.2/src/libatsha204/layer_...
U-Boot driver should do same thing.
Fixes waking up ATSHA204 on Turris 1.x boards.
Signed-off-by: Pali Rohár pali@kernel.org
Reviewed-by: Marek Behún kabel@kernel.org
Stefan, will you apply this via marvell?
I can do this, let me check. I plan to send a pull request soon anyways.
Thanks, Stefan

On 04.08.22 13:03, Pali Rohár wrote:
The device ignores any levels or transitions on the SCL pin when the device is idle, asleep or during waking up.
Linux kernel driver for atsha204a (atmel-sha204a.ko) also ignores return value from i2c wakeup send command, see: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/driv...
And also userspace Turris libatsha204 library ignores return value from wakeup send command, see: https://gitlab.nic.cz/turris/libatsha204/-/blob/v29.2/src/libatsha204/layer_...
U-Boot driver should do same thing.
Fixes waking up ATSHA204 on Turris 1.x boards.
Signed-off-by: Pali Rohár pali@kernel.org
Applied to u-boot-marvell/master
Thanks, Stefan
drivers/misc/atsha204a-i2c.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-)
diff --git a/drivers/misc/atsha204a-i2c.c b/drivers/misc/atsha204a-i2c.c index 81ecb5b6177b..fa2d5948f128 100644 --- a/drivers/misc/atsha204a-i2c.c +++ b/drivers/misc/atsha204a-i2c.c @@ -103,12 +103,13 @@ int atsha204a_wakeup(struct udevice *dev) for (try = 1; try <= 10; ++try) { debug("Try %i... ", try);
/*
* The device ignores any levels or transitions on the SCL pin
* when the device is idle, asleep or during waking up.
* Don't check for error when waking up the device.
memset(req, 0, 4);*/
res = atsha204a_send(dev, req, 4);
if (res) {
debug("failed on I2C send, trying again\n");
continue;
}
atsha204a_send(dev, req, 4);
udelay(ATSHA204A_TWLO_US + ATSHA204A_TWHI_US);
Viele Grüße, Stefan Roese
participants (4)
-
Marek Behún
-
Pali Rohár
-
Paweł Anikiel
-
Stefan Roese