Re: [PATCH 1/2] regmap: Allow installing custom reg_update_bits function

2015-10-02 Thread Mark Brown
On Thu, Oct 01, 2015 at 08:29:19AM -0400, Jon Ringle wrote:
> On Thu, 1 Oct 2015, Mark Brown wrote:

> > This completely bypasses and therefore breaks the cache infrastructure.

> Right after sending the v2 patch, I realized that calling the 
> custom reg_update_bits would only be applicable for registers that are 
> marked as volatile. Would the following solution be acceptable (it would 

Well, it should still *work* with a cache, though it's certainly true
that it's unlikely to have any performance benefit with cached register
since the read part of the read/modify/write cycle is essentially free 
with the cache.

> also simplify the regmap_update_bits in the encx24j600 driver):

>   if (regmap_volatile(map, reg) && map->reg_update_bits) {
>   return map->reg_update_bits(map->bus_context, reg, mask, 
>   val, change, force_write);

> The cache state should not matter for volatile registers, right?

Right.  I see you've sent a new patch already, I'll reply to that after
I've thought about it a little.


signature.asc
Description: Digital signature


Re: [PATCH 1/2] regmap: Allow installing custom reg_update_bits function

2015-10-01 Thread Jon Ringle


On Thu, 1 Oct 2015, Mark Brown wrote:

> On Thu, Oct 01, 2015 at 02:33:06AM -0400, j...@ringle.org wrote:
> 
> > @@ -2509,6 +2510,10 @@ static int _regmap_update_bits(struct regmap *map, 
> > unsigned int reg,
> > int ret;
> > unsigned int tmp, orig;
> >  
> > +   if (map->reg_update_bits)
> > +   return map->reg_update_bits(map->bus_context, reg, mask, val,
> > +   change, force_write);
> > +
> > ret = _regmap_read(map, reg, &orig);
> > if (ret != 0)
> > return ret;
> 
> This completely bypasses and therefore breaks the cache infrastructure.
> 

Hi Mark,

Right after sending the v2 patch, I realized that calling the 
custom reg_update_bits would only be applicable for registers that are 
marked as volatile. Would the following solution be acceptable (it would 
also simplify the regmap_update_bits in the encx24j600 driver):

if (regmap_volatile(map, reg) && map->reg_update_bits) {
return map->reg_update_bits(map->bus_context, reg, mask, 
val, change, force_write);

The cache state should not matter for volatile registers, right?

-Jon
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 1/2] regmap: Allow installing custom reg_update_bits function

2015-10-01 Thread Mark Brown
On Thu, Oct 01, 2015 at 02:33:06AM -0400, j...@ringle.org wrote:

> @@ -2509,6 +2510,10 @@ static int _regmap_update_bits(struct regmap *map, 
> unsigned int reg,
>   int ret;
>   unsigned int tmp, orig;
>  
> + if (map->reg_update_bits)
> + return map->reg_update_bits(map->bus_context, reg, mask, val,
> + change, force_write);
> +
>   ret = _regmap_read(map, reg, &orig);
>   if (ret != 0)
>   return ret;

This completely bypasses and therefore breaks the cache infrastructure.


signature.asc
Description: Digital signature