2014-02-10 10:46:11

by Michal Simek

[permalink] [raw]

2014-02-10 10:53:37

by Lars-Peter Clausen

[permalink] [raw]
Subject: Re: [PATCH] regmap: Check readable regs in _regmap_read

On 02/10/2014 11:46 AM, Michal Simek wrote:
> Check if regs are readable.
>
> Signed-off-by: Michal Simek <[email protected]>
> ---
>
> drivers/base/regmap/regmap.c | 3 +++
> 1 file changed, 3 insertions(+)
>
> diff --git a/drivers/base/regmap/regmap.c b/drivers/base/regmap/regmap.c
> index 6a19515..7569dfc 100644
> --- a/drivers/base/regmap/regmap.c
> +++ b/drivers/base/regmap/regmap.c
> @@ -1725,6 +1725,9 @@ static int _regmap_read(struct regmap *map, unsigned int reg,
> int ret;
> void *context = _regmap_map_get_context(map);
>
> + if (!regmap_readable(map, reg))
> + return -EIO;
> +

This will cause issues with devices where registers are writable, but not
readable, but we keep the register value in the cache.

> WARN_ON(!map->reg_read);
>
> if (!map->cache_bypass) {
> --
> 1.8.2.3
>

2014-02-10 11:01:07

by Michal Simek

[permalink] [raw]
Subject: Re: [PATCH] regmap: Check readable regs in _regmap_read

Hi Lars,

On 02/10/2014 11:53 AM, Lars-Peter Clausen wrote:
> On 02/10/2014 11:46 AM, Michal Simek wrote:
>> Check if regs are readable.
>>
>> Signed-off-by: Michal Simek <[email protected]>
>> ---
>>
>> drivers/base/regmap/regmap.c | 3 +++
>> 1 file changed, 3 insertions(+)
>>
>> diff --git a/drivers/base/regmap/regmap.c b/drivers/base/regmap/regmap.c
>> index 6a19515..7569dfc 100644
>> --- a/drivers/base/regmap/regmap.c
>> +++ b/drivers/base/regmap/regmap.c
>> @@ -1725,6 +1725,9 @@ static int _regmap_read(struct regmap *map, unsigned int reg,
>> int ret;
>> void *context = _regmap_map_get_context(map);
>>
>> + if (!regmap_readable(map, reg))
>> + return -EIO;
>> +
>
> This will cause issues with devices where registers are writable, but not readable, but we keep the register value in the cache.

And can you read from registers if they are not readable?
Even read from cache.

Thanks,
Michal

--
Michal Simek, Ing. (M.Eng), OpenPGP -> KeyID: FE3D1F91
w: http://www.monstr.eu p: +42-0-721842854
Maintainer of Linux kernel - Microblaze cpu - http://www.monstr.eu/fdt/
Maintainer of Linux kernel - Xilinx Zynq ARM architecture
Microblaze U-BOOT custodian and responsible for u-boot arm zynq platform



Attachments:
signature.asc (263.00 B)
OpenPGP digital signature

2014-02-10 11:49:38

by Mark Brown

[permalink] [raw]
Subject: Re: [PATCH] regmap: Check readable regs in _regmap_read

On Mon, Feb 10, 2014 at 11:53:38AM +0100, Lars-Peter Clausen wrote:
> On 02/10/2014 11:46 AM, Michal Simek wrote:
> >Check if regs are readable.

> >+ if (!regmap_readable(map, reg))
> >+ return -EIO;

> This will cause issues with devices where registers are writable,
> but not readable, but we keep the register value in the cache.

Yes, exactly - this is deliberately not done so we can fake up
readability using the cache. All the 7x9 devices are like this for
example, there's just no read support in the hardware (or if there is
it's not related to the register map). If we were going to check it
should be at the point where we are about to interact with the hardware.


Attachments:
(No filename) (680.00 B)
signature.asc (836.00 B)
Digital signature
Download all attachments

2014-02-10 11:54:57

by Michal Simek

[permalink] [raw]
Subject: Re: [PATCH] regmap: Check readable regs in _regmap_read

Hi Mark,

On 02/10/2014 12:49 PM, Mark Brown wrote:
> On Mon, Feb 10, 2014 at 11:53:38AM +0100, Lars-Peter Clausen wrote:
>> On 02/10/2014 11:46 AM, Michal Simek wrote:
>>> Check if regs are readable.
>
>>> + if (!regmap_readable(map, reg))
>>> + return -EIO;
>
>> This will cause issues with devices where registers are writable,
>> but not readable, but we keep the register value in the cache.
>
> Yes, exactly - this is deliberately not done so we can fake up
> readability using the cache. All the 7x9 devices are like this for
> example, there's just no read support in the hardware (or if there is
> it's not related to the register map). If we were going to check it
> should be at the point where we are about to interact with the hardware.

ok. Then let me send v2 and more this checking below cache
because missing this checking is also wrong.

Thanks,
Michal

--
Michal Simek, Ing. (M.Eng), OpenPGP -> KeyID: FE3D1F91
w: http://www.monstr.eu p: +42-0-721842854
Maintainer of Linux kernel - Microblaze cpu - http://www.monstr.eu/fdt/
Maintainer of Linux kernel - Xilinx Zynq ARM architecture
Microblaze U-BOOT custodian and responsible for u-boot arm zynq platform



Attachments:
signature.asc (263.00 B)
OpenPGP digital signature