2015-12-03 02:27:54

by Xiubo Li

[permalink] [raw]
Subject: [PATCH] regmap: speed up the regcache_init()

If the cache is not used by the device driver, there is not need to
check the striding of the registers. It will just return 0 from
regcache_init() and let the register striding be checked in proper
place when needed.

Signed-off-by: Xiubo Li <[email protected]>
---
drivers/base/regmap/regcache.c | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/drivers/base/regmap/regcache.c b/drivers/base/regmap/regcache.c
index 4c07802..edc3bd9 100644
--- a/drivers/base/regmap/regcache.c
+++ b/drivers/base/regmap/regcache.c
@@ -100,15 +100,15 @@ int regcache_init(struct regmap *map, const struct regmap_config *config)
int i;
void *tmp_buf;

- for (i = 0; i < config->num_reg_defaults; i++)
- if (config->reg_defaults[i].reg % map->reg_stride)
- return -EINVAL;
-
if (map->cache_type == REGCACHE_NONE) {
map->cache_bypass = true;
return 0;
}

+ for (i = 0; i < config->num_reg_defaults; i++)
+ if (config->reg_defaults[i].reg % map->reg_stride)
+ return -EINVAL;
+
for (i = 0; i < ARRAY_SIZE(cache_types); i++)
if (cache_types[i]->type == map->cache_type)
break;
--
1.8.3.1


2015-12-08 17:05:32

by Mark Brown

[permalink] [raw]
Subject: Re: [PATCH] regmap: speed up the regcache_init()

On Thu, Dec 03, 2015 at 10:19:10AM +0800, Xiubo Li wrote:

> If the cache is not used by the device driver, there is not need to
> check the striding of the registers. It will just return 0 from
> regcache_init() and let the register striding be checked in proper
> place when needed.

> - for (i = 0; i < config->num_reg_defaults; i++)
> - if (config->reg_defaults[i].reg % map->reg_stride)
> - return -EINVAL;
> -
> if (map->cache_type == REGCACHE_NONE) {
> map->cache_bypass = true;
> return 0;
> }

If we're not using the register cache why are there defaults in the
first place?


Attachments:
(No filename) (597.00 B)
signature.asc (473.00 B)
Download all attachments

2015-12-09 03:26:03

by Xiubo Li

[permalink] [raw]
Subject: Re: [PATCH] regmap: speed up the regcache_init()



On 09/12/2015 01:05, Mark Brown wrote:
> On Thu, Dec 03, 2015 at 10:19:10AM +0800, Xiubo Li wrote:
>
>> If the cache is not used by the device driver, there is not need to
>> check the striding of the registers. It will just return 0 from
>> regcache_init() and let the register striding be checked in proper
>> place when needed.
>> - for (i = 0; i < config->num_reg_defaults; i++)
>> - if (config->reg_defaults[i].reg % map->reg_stride)
>> - return -EINVAL;
>> -
>> if (map->cache_type == REGCACHE_NONE) {
>> map->cache_bypass = true;
>> return 0;
>> }
> If we're not using the register cache why are there defaults in the
> first place?
Yes, usually when the register cache is not used, the number of the
defaults should be zero, but for some drivers like drv2267.c/led_lp8860.c
will add the defaults register values though the cache type is
REGCACHE_NONE for some reasons.

This patch may be not the best, but will be a bit meaningful for some
drivers like drv2267.c/led_lp8860.c for now.

Thanks,

BRs

Xiubo







2015-12-09 15:06:01

by Mark Brown

[permalink] [raw]
Subject: Re: [PATCH] regmap: speed up the regcache_init()

On Wed, Dec 09, 2015 at 11:17:22AM +0800, Xiubo Li wrote:

> Yes, usually when the register cache is not used, the number of the
> defaults should be zero, but for some drivers like drv2267.c/led_lp8860.c
> will add the defaults register values though the cache type is
> REGCACHE_NONE for some reasons.

I can't find either of those in the kernel tree...

> This patch may be not the best, but will be a bit meaningful for some
> drivers like drv2267.c/led_lp8860.c for now.

TBH if we're going to do something here it might be as well to print a
warning if something is providing register defaults but no cache.


Attachments:
(No filename) (614.00 B)
signature.asc (473.00 B)
Download all attachments

2015-12-10 01:37:05

by Xiubo Li

[permalink] [raw]
Subject: Re: [PATCH] regmap: speed up the regcache_init()



On 09/12/2015 23:05, Mark Brown wrote:
> On Wed, Dec 09, 2015 at 11:17:22AM +0800, Xiubo Li wrote:
>
>> Yes, usually when the register cache is not used, the number of the
>> defaults should be zero, but for some drivers like drv2267.c/led_lp8860.c
>> will add the defaults register values though the cache type is
>> REGCACHE_NONE for some reasons.
> I can't find either of those in the kernel tree...
This could be found in the for-next branch of regmap tree.


>> This patch may be not the best, but will be a bit meaningful for some
>> drivers like drv2267.c/led_lp8860.c for now.
> TBH if we're going to do something here it might be as well to print a
> warning if something is providing register defaults but no cache.
Yes, Agreed.

I will enhance this later in another patch, just abandon this one please.