linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/1] nvmem: sunxi_sid: fix A64 SID controller support
@ 2019-07-31  7:14 Stefan Mavrodiev
  2019-07-31  7:14 ` [PATCH 1/1] " Stefan Mavrodiev
  0 siblings, 1 reply; 5+ messages in thread
From: Stefan Mavrodiev @ 2019-07-31  7:14 UTC (permalink / raw)
  To: Srinivas Kandagatla, Maxime Ripard, Chen-Yu Tsai,
	moderated list:ARM/Allwinner sunXi SoC support, open list
  Cc: linux-sunxi, Stefan Mavrodiev

A64 SID controller has some issues when readind data, To exampine the
problem I've done the following steps.


When reading the whole nvmem memory in one chunk the returned bytes
are valid:

dd if=/sys/bus/nvmem/devices/sunxi-sid0/nvmem 2>/dev/null | hexdump -C
00000000  ba 00 c0 92 20 46 10 84  00 45 34 50 0e 04 26 48  |.... F...E4P..&H|
00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
00000030  00 00 00 00 87 07 8d 07  8e 07 00 00 00 00 00 00  |................|
00000040  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
00000100


When bs is set to 4 bytes the data is no longer valid:

dd if=/sys/bus/nvmem/devices/sunxi-sid0/nvmem bs=4 2>/dev/null | hexdump -C
00000000  ba 00 c0 92 20 46 10 84  00 45 34 50 0e 04 26 48  |.... F...E4P..&H|
00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
00000030  00 00 00 00 87 00 00 00  8e 00 00 00 00 00 00 00  |................|
00000040  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
00000100


You can see that only the data at 0x34 and 0x38 is corrupted. It appears
that A64 needs minimun 8 bytes block size;

dd if=/sys/bus/nvmem/devices/sunxi-sid0/nvmem bs=8 2>/dev/null | hexdump -C
00000000  ba 00 c0 92 20 46 10 84  00 45 34 50 0e 04 26 48  |.... F...E4P..&H|
00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
00000030  00 00 00 00 87 07 8d 07  8e 07 00 00 00 00 00 00  |................|
00000040  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
00000100


In the driver stride is set to 4 and word_size to 1. When you're using
nvmem as thermal calibration data in the dts you write something like this:

sid: eeprom@1c14000 {
	compatible = "allwinner,sun50i-a64-sid";
	.....

	thermal_calibration: calib@34 {
		reg = <0x34 0x08>;
	};
};

This will return incorrect data.
One way to fix this is to set stride/word_size to 8, but this will be
inconvenient for the dts.
Other is to enable reading data via register access. After the fix:

dd if=/sys/bus/nvmem/devices/sunxi-sid0/nvmem bs=4 2>/dev/null | hexdump -C
00000000  ba 00 c0 92 20 46 10 84  00 45 34 50 0e 04 26 48  |.... F...E4P..&H|
00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
00000030  00 00 00 00 87 07 8d 07  8e 07 00 00 00 00 00 00  |................|
00000040  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
00000100


Stefan Mavrodiev (1):
  nvmem: sunxi_sid: fix A64 SID controller support

 drivers/nvmem/sunxi_sid.c | 1 +
 1 file changed, 1 insertion(+)

-- 
2.17.1


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

* [PATCH 1/1] nvmem: sunxi_sid: fix A64 SID controller support
  2019-07-31  7:14 [PATCH 0/1] nvmem: sunxi_sid: fix A64 SID controller support Stefan Mavrodiev
@ 2019-07-31  7:14 ` Stefan Mavrodiev
  2019-07-31  8:43   ` Chen-Yu Tsai
  2019-08-06 10:03   ` Srinivas Kandagatla
  0 siblings, 2 replies; 5+ messages in thread
From: Stefan Mavrodiev @ 2019-07-31  7:14 UTC (permalink / raw)
  To: Srinivas Kandagatla, Maxime Ripard, Chen-Yu Tsai,
	moderated list:ARM/Allwinner sunXi SoC support, open list
  Cc: linux-sunxi, Stefan Mavrodiev

Like in H3, A64 SID controller doesn't return correct data
when using direct access. It appears that on A64, SID needs
8 bytes of word_size.

Workaround is to enable read by registers.

Signed-off-by: Stefan Mavrodiev <stefan@olimex.com>
---
 drivers/nvmem/sunxi_sid.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/nvmem/sunxi_sid.c b/drivers/nvmem/sunxi_sid.c
index a079a80ddf2c..e26ef1bbf198 100644
--- a/drivers/nvmem/sunxi_sid.c
+++ b/drivers/nvmem/sunxi_sid.c
@@ -186,6 +186,7 @@ static const struct sunxi_sid_cfg sun8i_h3_cfg = {
 static const struct sunxi_sid_cfg sun50i_a64_cfg = {
 	.value_offset = 0x200,
 	.size = 0x100,
+	.need_register_readout = true,
 };
 
 static const struct sunxi_sid_cfg sun50i_h6_cfg = {
-- 
2.17.1


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

* Re: [PATCH 1/1] nvmem: sunxi_sid: fix A64 SID controller support
  2019-07-31  7:14 ` [PATCH 1/1] " Stefan Mavrodiev
@ 2019-07-31  8:43   ` Chen-Yu Tsai
  2019-08-01  1:42     ` [linux-sunxi] " Vasily Khoruzhick
  2019-08-06 10:03   ` Srinivas Kandagatla
  1 sibling, 1 reply; 5+ messages in thread
From: Chen-Yu Tsai @ 2019-07-31  8:43 UTC (permalink / raw)
  To: Stefan Mavrodiev
  Cc: Srinivas Kandagatla, Maxime Ripard,
	moderated list:ARM/Allwinner sunXi SoC support, open list,
	linux-sunxi

On Wed, Jul 31, 2019 at 3:15 PM Stefan Mavrodiev <stefan@olimex.com> wrote:
>
> Like in H3, A64 SID controller doesn't return correct data
> when using direct access. It appears that on A64, SID needs
> 8 bytes of word_size.
>
> Workaround is to enable read by registers.
>
> Signed-off-by: Stefan Mavrodiev <stefan@olimex.com>

Acked-by: Chen-Yu Tsai <wens@csie.org>

And for single patches, you don't need to write a separate cover letter.
Just put whatever you need to add after the "---" separator.

> ---
>  drivers/nvmem/sunxi_sid.c | 1 +
>  1 file changed, 1 insertion(+)
>
> diff --git a/drivers/nvmem/sunxi_sid.c b/drivers/nvmem/sunxi_sid.c
> index a079a80ddf2c..e26ef1bbf198 100644
> --- a/drivers/nvmem/sunxi_sid.c
> +++ b/drivers/nvmem/sunxi_sid.c
> @@ -186,6 +186,7 @@ static const struct sunxi_sid_cfg sun8i_h3_cfg = {
>  static const struct sunxi_sid_cfg sun50i_a64_cfg = {
>         .value_offset = 0x200,
>         .size = 0x100,
> +       .need_register_readout = true,
>  };
>
>  static const struct sunxi_sid_cfg sun50i_h6_cfg = {
> --
> 2.17.1
>

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

* Re: [linux-sunxi] Re: [PATCH 1/1] nvmem: sunxi_sid: fix A64 SID controller support
  2019-07-31  8:43   ` Chen-Yu Tsai
@ 2019-08-01  1:42     ` Vasily Khoruzhick
  0 siblings, 0 replies; 5+ messages in thread
From: Vasily Khoruzhick @ 2019-08-01  1:42 UTC (permalink / raw)
  To: wens
  Cc: Stefan Mavrodiev, Srinivas Kandagatla, Maxime Ripard,
	moderated list:ARM/Allwinner sunXi SoC support, open list,
	linux-sunxi

On Wed, Jul 31, 2019 at 1:43 AM Chen-Yu Tsai <wens@csie.org> wrote:
>
> On Wed, Jul 31, 2019 at 3:15 PM Stefan Mavrodiev <stefan@olimex.com> wrote:
> >
> > Like in H3, A64 SID controller doesn't return correct data
> > when using direct access. It appears that on A64, SID needs
> > 8 bytes of word_size.
> >
> > Workaround is to enable read by registers.

I came up with identical patch while adding A64 support into
sun8i-thermal driver, so:

> >
> > Signed-off-by: Stefan Mavrodiev <stefan@olimex.com>
>
> Acked-by: Chen-Yu Tsai <wens@csie.org>

Tested-by: Vasily Khoruzhick <anarsoul@gmail.com>

>
> And for single patches, you don't need to write a separate cover letter.
> Just put whatever you need to add after the "---" separator.
>
> > ---
> >  drivers/nvmem/sunxi_sid.c | 1 +
> >  1 file changed, 1 insertion(+)
> >
> > diff --git a/drivers/nvmem/sunxi_sid.c b/drivers/nvmem/sunxi_sid.c
> > index a079a80ddf2c..e26ef1bbf198 100644
> > --- a/drivers/nvmem/sunxi_sid.c
> > +++ b/drivers/nvmem/sunxi_sid.c
> > @@ -186,6 +186,7 @@ static const struct sunxi_sid_cfg sun8i_h3_cfg = {
> >  static const struct sunxi_sid_cfg sun50i_a64_cfg = {
> >         .value_offset = 0x200,
> >         .size = 0x100,
> > +       .need_register_readout = true,
> >  };
> >
> >  static const struct sunxi_sid_cfg sun50i_h6_cfg = {
> > --
> > 2.17.1
> >
>
> --
> You received this message because you are subscribed to the Google Groups "linux-sunxi" group.
> To unsubscribe from this group and stop receiving emails from it, send an email to linux-sunxi+unsubscribe@googlegroups.com.
> To view this discussion on the web, visit https://groups.google.com/d/msgid/linux-sunxi/CAGb2v64tzMypnB5Ho2A-gWPk2yYsmH9tNn%2BOKfb51c%2Bd6pK%3Dkw%40mail.gmail.com.

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

* Re: [PATCH 1/1] nvmem: sunxi_sid: fix A64 SID controller support
  2019-07-31  7:14 ` [PATCH 1/1] " Stefan Mavrodiev
  2019-07-31  8:43   ` Chen-Yu Tsai
@ 2019-08-06 10:03   ` Srinivas Kandagatla
  1 sibling, 0 replies; 5+ messages in thread
From: Srinivas Kandagatla @ 2019-08-06 10:03 UTC (permalink / raw)
  To: Stefan Mavrodiev, Maxime Ripard, Chen-Yu Tsai,
	moderated list:ARM/Allwinner sunXi SoC support, open list
  Cc: linux-sunxi



On 31/07/2019 08:14, Stefan Mavrodiev wrote:
> Like in H3, A64 SID controller doesn't return correct data
> when using direct access. It appears that on A64, SID needs
> 8 bytes of word_size.
> 
> Workaround is to enable read by registers.
> 
> Signed-off-by: Stefan Mavrodiev <stefan@olimex.com>

Applied Thanks,
srini

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

end of thread, other threads:[~2019-08-06 10:03 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-07-31  7:14 [PATCH 0/1] nvmem: sunxi_sid: fix A64 SID controller support Stefan Mavrodiev
2019-07-31  7:14 ` [PATCH 1/1] " Stefan Mavrodiev
2019-07-31  8:43   ` Chen-Yu Tsai
2019-08-01  1:42     ` [linux-sunxi] " Vasily Khoruzhick
2019-08-06 10:03   ` Srinivas Kandagatla

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).