All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] power: supply: sbs-battery: chromebook workaround for PEC
@ 2020-10-04 22:46 Sebastian Reichel
  2020-10-05 17:53 ` Vicente Bergas
  2020-10-08 19:07 ` Milan P. Stanić
  0 siblings, 2 replies; 6+ messages in thread
From: Sebastian Reichel @ 2020-10-04 22:46 UTC (permalink / raw)
  To: Sebastian Reichel
  Cc: linux-pm, kernel, Sebastian Reichel, Milan P. Stanić,
	Vicente Bergas, Enric Balletbo i Serra

Looks like the I2C tunnel implementation from Chromebook's
embedded controller does not handle PEC correctly. Fix this
by disabling PEC for batteries behind those I2C tunnels as
a workaround.

Reported-by: "Milan P. Stanić" <mps@arvanta.net>
Reported-by: Vicente Bergas <vicencb@gmail.com>
CC: Enric Balletbo i Serra <enric.balletbo@collabora.com>
Fixes: 7222bd603dd2 ("power: supply: sbs-battery: add PEC support")
Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com>
---
Hi,

This is compile-tested only, since I do not have a chromebook at
hand. Please test if this fixes your issue.

-- Sebastian
---
 drivers/power/supply/sbs-battery.c | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/drivers/power/supply/sbs-battery.c b/drivers/power/supply/sbs-battery.c
index 13192cbcce71..b6a538ebb378 100644
--- a/drivers/power/supply/sbs-battery.c
+++ b/drivers/power/supply/sbs-battery.c
@@ -279,6 +279,12 @@ static int sbs_update_presence(struct sbs_info *chip, bool is_present)
 	else
 		client->flags &= ~I2C_CLIENT_PEC;
 
+	if (of_device_is_compatible(client->dev.parent->of_node, "google,cros-ec-i2c-tunnel")
+	    && client->flags & I2C_CLIENT_PEC) {
+		dev_info(&client->dev, "Disabling PEC because of broken Cros-EC implementation\n");
+		client->flags &= ~I2C_CLIENT_PEC;
+	}
+
 	dev_dbg(&client->dev, "PEC: %s\n", (client->flags & I2C_CLIENT_PEC) ?
 		"enabled" : "disabled");
 
-- 
2.28.0


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [PATCH] power: supply: sbs-battery: chromebook workaround for PEC
  2020-10-04 22:46 [PATCH] power: supply: sbs-battery: chromebook workaround for PEC Sebastian Reichel
@ 2020-10-05 17:53 ` Vicente Bergas
  2020-10-05 18:47   ` Milan P. Stanić
  2020-10-08 19:07 ` Milan P. Stanić
  1 sibling, 1 reply; 6+ messages in thread
From: Vicente Bergas @ 2020-10-05 17:53 UTC (permalink / raw)
  To: Sebastian Reichel
  Cc: Sebastian Reichel, linux-pm, kernel, Milan P. Stanić,
	Enric Balletbo i Serra

On Monday, October 5, 2020 12:46:01 AM CEST, Sebastian Reichel wrote:
> Looks like the I2C tunnel implementation from Chromebook's
> embedded controller does not handle PEC correctly. Fix this
> by disabling PEC for batteries behind those I2C tunnels as
> a workaround.
>
> Reported-by: "Milan P. Stanić" <mps@arvanta.net>
> Reported-by: Vicente Bergas <vicencb@gmail.com>
> CC: Enric Balletbo i Serra <enric.balletbo@collabora.com>
> Fixes: 7222bd603dd2 ("power: supply: sbs-battery: add PEC support")
> Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com>
> ---
> Hi,
>
> This is compile-tested only, since I do not have a chromebook at
> hand. Please test if this fixes your issue.

Hi Sebastian,
tested on rk3399-gru-kevin with 5.9.0-rc8 and now the CPU usage is 0 when 
idling.
dmesg reports:
[    1.370249] sbs-battery 9-000b: Disabling PEC because of broken Cros-EC 
implementation

So,
Tested-by: Vicente Bergas <vicencb@gmail.com>

Thanks,
  Vicente.

> -- Sebastian
> ---
>  drivers/power/supply/sbs-battery.c | 6 ++++++
>  1 file changed, 6 insertions(+)
>
> diff --git a/drivers/power/supply/sbs-battery.c 
> b/drivers/power/supply/sbs-battery.c
> index 13192cbcce71..b6a538ebb378 100644
> --- a/drivers/power/supply/sbs-battery.c
> +++ b/drivers/power/supply/sbs-battery.c
> @@ -279,6 +279,12 @@ static int sbs_update_presence(struct 
> sbs_info *chip, bool is_present)
>  	else
>  		client->flags &= ~I2C_CLIENT_PEC;
>  
> +	if (of_device_is_compatible(client->dev.parent->of_node, 
> "google,cros-ec-i2c-tunnel")
> +	    && client->flags & I2C_CLIENT_PEC) {
> +		dev_info(&client->dev, "Disabling PEC because of broken 
> Cros-EC implementation\n");
> +		client->flags &= ~I2C_CLIENT_PEC;
> +	}
> +
>  	dev_dbg(&client->dev, "PEC: %s\n", (client->flags & I2C_CLIENT_PEC) ?
>  		"enabled" : "disabled");
>  


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH] power: supply: sbs-battery: chromebook workaround for PEC
  2020-10-05 17:53 ` Vicente Bergas
@ 2020-10-05 18:47   ` Milan P. Stanić
  2020-10-05 20:33     ` Milan P. Stanić
  0 siblings, 1 reply; 6+ messages in thread
From: Milan P. Stanić @ 2020-10-05 18:47 UTC (permalink / raw)
  To: Vicente Bergas
  Cc: Sebastian Reichel, Sebastian Reichel, linux-pm, kernel,
	Enric Balletbo i Serra

Hi all,

On Mon, 2020-10-05 at 19:53, Vicente Bergas wrote:
> On Monday, October 5, 2020 12:46:01 AM CEST, Sebastian Reichel wrote:
> > Looks like the I2C tunnel implementation from Chromebook's
> > embedded controller does not handle PEC correctly. Fix this
> > by disabling PEC for batteries behind those I2C tunnels as
> > a workaround.
> > 
> > Reported-by: "Milan P. Stanić" <mps@arvanta.net>
> > Reported-by: Vicente Bergas <vicencb@gmail.com>
> > CC: Enric Balletbo i Serra <enric.balletbo@collabora.com>
> > Fixes: 7222bd603dd2 ("power: supply: sbs-battery: add PEC support")
> > Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com>
> > ---
> > Hi,
> > 
> > This is compile-tested only, since I do not have a chromebook at
> > hand. Please test if this fixes your issue.
> 
> Hi Sebastian,
> tested on rk3399-gru-kevin with 5.9.0-rc8 and now the CPU usage is 0 when
> idling.
> dmesg reports:
> [    1.370249] sbs-battery 9-000b: Disabling PEC because of broken Cros-EC
> implementation

Also I tested on same board and same kernel version and can confirm
this.
 
> So,
> Tested-by: Vicente Bergas <vicencb@gmail.com>
> 
> Thanks,
>  Vicente.
> 
> > -- Sebastian
> > ---
> >  drivers/power/supply/sbs-battery.c | 6 ++++++
> >  1 file changed, 6 insertions(+)
> > 
> > diff --git a/drivers/power/supply/sbs-battery.c
> > b/drivers/power/supply/sbs-battery.c
> > index 13192cbcce71..b6a538ebb378 100644
> > --- a/drivers/power/supply/sbs-battery.c
> > +++ b/drivers/power/supply/sbs-battery.c
> > @@ -279,6 +279,12 @@ static int sbs_update_presence(struct sbs_info
> > *chip, bool is_present)
> >  	else
> >  		client->flags &= ~I2C_CLIENT_PEC;
> >   +	if (of_device_is_compatible(client->dev.parent->of_node,
> > "google,cros-ec-i2c-tunnel")
> > +	    && client->flags & I2C_CLIENT_PEC) {
> > +		dev_info(&client->dev, "Disabling PEC because of broken Cros-EC
> > implementation\n");
> > +		client->flags &= ~I2C_CLIENT_PEC;
> > +	}
> > +
> >  	dev_dbg(&client->dev, "PEC: %s\n", (client->flags & I2C_CLIENT_PEC) ?
> >  		"enabled" : "disabled");
> 

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH] power: supply: sbs-battery: chromebook workaround for PEC
  2020-10-05 18:47   ` Milan P. Stanić
@ 2020-10-05 20:33     ` Milan P. Stanić
  0 siblings, 0 replies; 6+ messages in thread
From: Milan P. Stanić @ 2020-10-05 20:33 UTC (permalink / raw)
  To: Vicente Bergas
  Cc: Sebastian Reichel, Sebastian Reichel, linux-pm, kernel,
	Enric Balletbo i Serra

On Mon, 2020-10-05 at 20:48, Milan P. Stanić wrote:
> Hi all,
> 
> On Mon, 2020-10-05 at 19:53, Vicente Bergas wrote:
> > On Monday, October 5, 2020 12:46:01 AM CEST, Sebastian Reichel wrote:
> > > Looks like the I2C tunnel implementation from Chromebook's
> > > embedded controller does not handle PEC correctly. Fix this
> > > by disabling PEC for batteries behind those I2C tunnels as
> > > a workaround.
> > > 
> > > Reported-by: "Milan P. Stanić" <mps@arvanta.net>
> > > Reported-by: Vicente Bergas <vicencb@gmail.com>
> > > CC: Enric Balletbo i Serra <enric.balletbo@collabora.com>
> > > Fixes: 7222bd603dd2 ("power: supply: sbs-battery: add PEC support")
> > > Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com>
> > > ---
> > > Hi,
> > > 
> > > This is compile-tested only, since I do not have a chromebook at
> > > hand. Please test if this fixes your issue.
> > 
> > Hi Sebastian,
> > tested on rk3399-gru-kevin with 5.9.0-rc8 and now the CPU usage is 0 when
> > idling.
> > dmesg reports:
> > [    1.370249] sbs-battery 9-000b: Disabling PEC because of broken Cros-EC
> > implementation
> 
> Also I tested on same board and same kernel version and can confirm
> this.

And I forgot to mention that I opened bug report. sorry.
https://bugzilla.kernel.org/show_bug.cgi?id=209409
  
> > So,
> > Tested-by: Vicente Bergas <vicencb@gmail.com>
> > 
> > Thanks,
> >  Vicente.
> > 
> > > -- Sebastian
> > > ---
> > >  drivers/power/supply/sbs-battery.c | 6 ++++++
> > >  1 file changed, 6 insertions(+)
> > > 
> > > diff --git a/drivers/power/supply/sbs-battery.c
> > > b/drivers/power/supply/sbs-battery.c
> > > index 13192cbcce71..b6a538ebb378 100644
> > > --- a/drivers/power/supply/sbs-battery.c
> > > +++ b/drivers/power/supply/sbs-battery.c
> > > @@ -279,6 +279,12 @@ static int sbs_update_presence(struct sbs_info
> > > *chip, bool is_present)
> > >  	else
> > >  		client->flags &= ~I2C_CLIENT_PEC;
> > >   +	if (of_device_is_compatible(client->dev.parent->of_node,
> > > "google,cros-ec-i2c-tunnel")
> > > +	    && client->flags & I2C_CLIENT_PEC) {
> > > +		dev_info(&client->dev, "Disabling PEC because of broken Cros-EC
> > > implementation\n");
> > > +		client->flags &= ~I2C_CLIENT_PEC;
> > > +	}
> > > +
> > >  	dev_dbg(&client->dev, "PEC: %s\n", (client->flags & I2C_CLIENT_PEC) ?
> > >  		"enabled" : "disabled");
> > 

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH] power: supply: sbs-battery: chromebook workaround for PEC
  2020-10-04 22:46 [PATCH] power: supply: sbs-battery: chromebook workaround for PEC Sebastian Reichel
  2020-10-05 17:53 ` Vicente Bergas
@ 2020-10-08 19:07 ` Milan P. Stanić
  2020-10-10 11:09   ` Sebastian Reichel
  1 sibling, 1 reply; 6+ messages in thread
From: Milan P. Stanić @ 2020-10-08 19:07 UTC (permalink / raw)
  To: Sebastian Reichel
  Cc: Sebastian Reichel, linux-pm, kernel, Vicente Bergas,
	Enric Balletbo i Serra

Hi,

On Mon, 2020-10-05 at 00:46, Sebastian Reichel wrote:
> Looks like the I2C tunnel implementation from Chromebook's
> embedded controller does not handle PEC correctly. Fix this
> by disabling PEC for batteries behind those I2C tunnels as
> a workaround.
> 
> Reported-by: "Milan P. Stanić" <mps@arvanta.net>
> Reported-by: Vicente Bergas <vicencb@gmail.com>
> CC: Enric Balletbo i Serra <enric.balletbo@collabora.com>
> Fixes: 7222bd603dd2 ("power: supply: sbs-battery: add PEC support")
> Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com>
> ---
> Hi,
> 
> This is compile-tested only, since I do not have a chromebook at
> hand. Please test if this fixes your issue.
> 
> -- Sebastian
> ---
>  drivers/power/supply/sbs-battery.c | 6 ++++++
>  1 file changed, 6 insertions(+)
> 
> diff --git a/drivers/power/supply/sbs-battery.c b/drivers/power/supply/sbs-battery.c
> index 13192cbcce71..b6a538ebb378 100644
> --- a/drivers/power/supply/sbs-battery.c
> +++ b/drivers/power/supply/sbs-battery.c
> @@ -279,6 +279,12 @@ static int sbs_update_presence(struct sbs_info *chip, bool is_present)
>  	else
>  		client->flags &= ~I2C_CLIENT_PEC;
>  
> +	if (of_device_is_compatible(client->dev.parent->of_node, "google,cros-ec-i2c-tunnel")
> +	    && client->flags & I2C_CLIENT_PEC) {
> +		dev_info(&client->dev, "Disabling PEC because of broken Cros-EC implementation\n");
> +		client->flags &= ~I2C_CLIENT_PEC;
> +	}
> +
>  	dev_dbg(&client->dev, "PEC: %s\n", (client->flags & I2C_CLIENT_PEC) ?
>  		"enabled" : "disabled");
  
Just for info, yesterday I built kernel 5.9-rc8 from:
https://gitlab.collabora.com/eballetbo/linux/-/commits/topic/chromeos/somewhat-stable-next
for Acer R13 chromebook (Mediatek mt8173, Machine model: Google Elm)
without above patch, and on it sbs-battery works without any problem.

Maybe problem is only on rk3399 (just guessing)

-- 
regards


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH] power: supply: sbs-battery: chromebook workaround for PEC
  2020-10-08 19:07 ` Milan P. Stanić
@ 2020-10-10 11:09   ` Sebastian Reichel
  0 siblings, 0 replies; 6+ messages in thread
From: Sebastian Reichel @ 2020-10-10 11:09 UTC (permalink / raw)
  To: Milan P. Stanić
  Cc: linux-pm, kernel, Vicente Bergas, Enric Balletbo i Serra

[-- Attachment #1: Type: text/plain, Size: 2560 bytes --]

Hi,

On Thu, Oct 08, 2020 at 09:07:01PM +0200, Milan P. Stanić wrote:
> On Mon, 2020-10-05 at 00:46, Sebastian Reichel wrote:
> > Looks like the I2C tunnel implementation from Chromebook's
> > embedded controller does not handle PEC correctly. Fix this
> > by disabling PEC for batteries behind those I2C tunnels as
> > a workaround.
> > 
> > Reported-by: "Milan P. Stanić" <mps@arvanta.net>
> > Reported-by: Vicente Bergas <vicencb@gmail.com>
> > CC: Enric Balletbo i Serra <enric.balletbo@collabora.com>
> > Fixes: 7222bd603dd2 ("power: supply: sbs-battery: add PEC support")
> > Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com>
> > ---
> > Hi,
> > 
> > This is compile-tested only, since I do not have a chromebook at
> > hand. Please test if this fixes your issue.
> > 
> > -- Sebastian
> > ---
> >  drivers/power/supply/sbs-battery.c | 6 ++++++
> >  1 file changed, 6 insertions(+)
> > 
> > diff --git a/drivers/power/supply/sbs-battery.c b/drivers/power/supply/sbs-battery.c
> > index 13192cbcce71..b6a538ebb378 100644
> > --- a/drivers/power/supply/sbs-battery.c
> > +++ b/drivers/power/supply/sbs-battery.c
> > @@ -279,6 +279,12 @@ static int sbs_update_presence(struct sbs_info *chip, bool is_present)
> >  	else
> >  		client->flags &= ~I2C_CLIENT_PEC;
> >  
> > +	if (of_device_is_compatible(client->dev.parent->of_node, "google,cros-ec-i2c-tunnel")
> > +	    && client->flags & I2C_CLIENT_PEC) {
> > +		dev_info(&client->dev, "Disabling PEC because of broken Cros-EC implementation\n");
> > +		client->flags &= ~I2C_CLIENT_PEC;
> > +	}
> > +
> >  	dev_dbg(&client->dev, "PEC: %s\n", (client->flags & I2C_CLIENT_PEC) ?
> >  		"enabled" : "disabled");
>   
> Just for info, yesterday I built kernel 5.9-rc8 from:
> https://gitlab.collabora.com/eballetbo/linux/-/commits/topic/chromeos/somewhat-stable-next
> for Acer R13 chromebook (Mediatek mt8173, Machine model: Google Elm)
> without above patch, and on it sbs-battery works without any problem.

Thanks for the info. I updated the commit message stating that not
all Chromebooks are affected.

> Maybe problem is only on rk3399 (just guessing)

Maybe. I did not take a close look how the cros-ec-i2c-tunnel is
implemented in hardware. It might also be completly unrelated to the
cros-ec-i2c-tunnel and a defect battery controller instead.

For now I sent above fix to Linus, so that the final 5.9 release
works on all Chromebooks. It's better to do further investigation
with a workaround in place :)

-- Sebastian

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2020-10-10 22:57 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-10-04 22:46 [PATCH] power: supply: sbs-battery: chromebook workaround for PEC Sebastian Reichel
2020-10-05 17:53 ` Vicente Bergas
2020-10-05 18:47   ` Milan P. Stanić
2020-10-05 20:33     ` Milan P. Stanić
2020-10-08 19:07 ` Milan P. Stanić
2020-10-10 11:09   ` Sebastian Reichel

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.