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
>
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
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.
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