726d956f6a298ae3500c55f207fc3594a7daf211
[firefly-linux-kernel-4.4.55.git] / drivers / base / regmap / regcache.c
1 /*
2  * Register cache access API
3  *
4  * Copyright 2011 Wolfson Microelectronics plc
5  *
6  * Author: Dimitris Papastamos <dp@opensource.wolfsonmicro.com>
7  *
8  * This program is free software; you can redistribute it and/or modify
9  * it under the terms of the GNU General Public License version 2 as
10  * published by the Free Software Foundation.
11  */
12
13 #include <linux/slab.h>
14 #include <linux/export.h>
15 #include <linux/device.h>
16 #include <trace/events/regmap.h>
17 #include <linux/bsearch.h>
18 #include <linux/sort.h>
19
20 #include "internal.h"
21
22 static const struct regcache_ops *cache_types[] = {
23         &regcache_rbtree_ops,
24         &regcache_lzo_ops,
25         &regcache_flat_ops,
26 };
27
28 static int regcache_hw_init(struct regmap *map)
29 {
30         int i, j;
31         int ret;
32         int count;
33         unsigned int val;
34         void *tmp_buf;
35
36         if (!map->num_reg_defaults_raw)
37                 return -EINVAL;
38
39         if (!map->reg_defaults_raw) {
40                 u32 cache_bypass = map->cache_bypass;
41                 dev_warn(map->dev, "No cache defaults, reading back from HW\n");
42
43                 /* Bypass the cache access till data read from HW*/
44                 map->cache_bypass = 1;
45                 tmp_buf = kmalloc(map->cache_size_raw, GFP_KERNEL);
46                 if (!tmp_buf)
47                         return -ENOMEM;
48                 ret = regmap_raw_read(map, 0, tmp_buf,
49                                       map->num_reg_defaults_raw);
50                 map->cache_bypass = cache_bypass;
51                 if (ret < 0) {
52                         kfree(tmp_buf);
53                         return ret;
54                 }
55                 map->reg_defaults_raw = tmp_buf;
56                 map->cache_free = 1;
57         }
58
59         /* calculate the size of reg_defaults */
60         for (count = 0, i = 0; i < map->num_reg_defaults_raw; i++)
61                 if (!regmap_volatile(map, i * map->reg_stride))
62                         count++;
63
64         map->reg_defaults = kmalloc_array(count, sizeof(struct reg_default),
65                                           GFP_KERNEL);
66         if (!map->reg_defaults) {
67                 ret = -ENOMEM;
68                 goto err_free;
69         }
70
71         /* fill the reg_defaults */
72         map->num_reg_defaults = count;
73         for (i = 0, j = 0; i < map->num_reg_defaults_raw; i++) {
74                 if (regmap_volatile(map, i * map->reg_stride))
75                         continue;
76                 val = regcache_get_val(map, map->reg_defaults_raw, i);
77                 map->reg_defaults[j].reg = i * map->reg_stride;
78                 map->reg_defaults[j].def = val;
79                 j++;
80         }
81
82         return 0;
83
84 err_free:
85         if (map->cache_free)
86                 kfree(map->reg_defaults_raw);
87
88         return ret;
89 }
90
91 int regcache_init(struct regmap *map, const struct regmap_config *config)
92 {
93         int ret;
94         int i;
95         void *tmp_buf;
96
97         for (i = 0; i < config->num_reg_defaults; i++)
98                 if (config->reg_defaults[i].reg % map->reg_stride)
99                         return -EINVAL;
100
101         if (map->cache_type == REGCACHE_NONE) {
102                 map->cache_bypass = true;
103                 return 0;
104         }
105
106         for (i = 0; i < ARRAY_SIZE(cache_types); i++)
107                 if (cache_types[i]->type == map->cache_type)
108                         break;
109
110         if (i == ARRAY_SIZE(cache_types)) {
111                 dev_err(map->dev, "Could not match compress type: %d\n",
112                         map->cache_type);
113                 return -EINVAL;
114         }
115
116         map->num_reg_defaults = config->num_reg_defaults;
117         map->num_reg_defaults_raw = config->num_reg_defaults_raw;
118         map->reg_defaults_raw = config->reg_defaults_raw;
119         map->cache_word_size = DIV_ROUND_UP(config->val_bits, 8);
120         map->cache_size_raw = map->cache_word_size * config->num_reg_defaults_raw;
121
122         map->cache = NULL;
123         map->cache_ops = cache_types[i];
124
125         if (!map->cache_ops->read ||
126             !map->cache_ops->write ||
127             !map->cache_ops->name)
128                 return -EINVAL;
129
130         /* We still need to ensure that the reg_defaults
131          * won't vanish from under us.  We'll need to make
132          * a copy of it.
133          */
134         if (config->reg_defaults) {
135                 if (!map->num_reg_defaults)
136                         return -EINVAL;
137                 tmp_buf = kmemdup(config->reg_defaults, map->num_reg_defaults *
138                                   sizeof(struct reg_default), GFP_KERNEL);
139                 if (!tmp_buf)
140                         return -ENOMEM;
141                 map->reg_defaults = tmp_buf;
142         } else if (map->num_reg_defaults_raw) {
143                 /* Some devices such as PMICs don't have cache defaults,
144                  * we cope with this by reading back the HW registers and
145                  * crafting the cache defaults by hand.
146                  */
147                 ret = regcache_hw_init(map);
148                 if (ret < 0)
149                         return ret;
150         }
151
152         if (!map->max_register)
153                 map->max_register = map->num_reg_defaults_raw;
154
155         if (map->cache_ops->init) {
156                 dev_dbg(map->dev, "Initializing %s cache\n",
157                         map->cache_ops->name);
158                 ret = map->cache_ops->init(map);
159                 if (ret)
160                         goto err_free;
161         }
162         return 0;
163
164 err_free:
165         kfree(map->reg_defaults);
166         if (map->cache_free)
167                 kfree(map->reg_defaults_raw);
168
169         return ret;
170 }
171
172 void regcache_exit(struct regmap *map)
173 {
174         if (map->cache_type == REGCACHE_NONE)
175                 return;
176
177         BUG_ON(!map->cache_ops);
178
179         kfree(map->reg_defaults);
180         if (map->cache_free)
181                 kfree(map->reg_defaults_raw);
182
183         if (map->cache_ops->exit) {
184                 dev_dbg(map->dev, "Destroying %s cache\n",
185                         map->cache_ops->name);
186                 map->cache_ops->exit(map);
187         }
188 }
189
190 /**
191  * regcache_read: Fetch the value of a given register from the cache.
192  *
193  * @map: map to configure.
194  * @reg: The register index.
195  * @value: The value to be returned.
196  *
197  * Return a negative value on failure, 0 on success.
198  */
199 int regcache_read(struct regmap *map,
200                   unsigned int reg, unsigned int *value)
201 {
202         int ret;
203
204         if (map->cache_type == REGCACHE_NONE)
205                 return -ENOSYS;
206
207         BUG_ON(!map->cache_ops);
208
209         if (!regmap_volatile(map, reg)) {
210                 ret = map->cache_ops->read(map, reg, value);
211
212                 if (ret == 0)
213                         trace_regmap_reg_read_cache(map->dev, reg, *value);
214
215                 return ret;
216         }
217
218         return -EINVAL;
219 }
220
221 /**
222  * regcache_write: Set the value of a given register in the cache.
223  *
224  * @map: map to configure.
225  * @reg: The register index.
226  * @value: The new register value.
227  *
228  * Return a negative value on failure, 0 on success.
229  */
230 int regcache_write(struct regmap *map,
231                    unsigned int reg, unsigned int value)
232 {
233         if (map->cache_type == REGCACHE_NONE)
234                 return 0;
235
236         BUG_ON(!map->cache_ops);
237
238         if (!regmap_volatile(map, reg))
239                 return map->cache_ops->write(map, reg, value);
240
241         return 0;
242 }
243
244 static int regcache_default_sync(struct regmap *map, unsigned int min,
245                                  unsigned int max)
246 {
247         unsigned int reg;
248
249         for (reg = min; reg <= max; reg += map->reg_stride) {
250                 unsigned int val;
251                 int ret;
252
253                 if (regmap_volatile(map, reg) ||
254                     !regmap_writeable(map, reg))
255                         continue;
256
257                 ret = regcache_read(map, reg, &val);
258                 if (ret)
259                         return ret;
260
261                 /* Is this the hardware default?  If so skip. */
262                 ret = regcache_lookup_reg(map, reg);
263                 if (ret >= 0 && val == map->reg_defaults[ret].def)
264                         continue;
265
266                 map->cache_bypass = 1;
267                 ret = _regmap_write(map, reg, val);
268                 map->cache_bypass = 0;
269                 if (ret) {
270                         dev_err(map->dev, "Unable to sync register %#x. %d\n",
271                                 reg, ret);
272                         return ret;
273                 }
274                 dev_dbg(map->dev, "Synced register %#x, value %#x\n", reg, val);
275         }
276
277         return 0;
278 }
279
280 /**
281  * regcache_sync: Sync the register cache with the hardware.
282  *
283  * @map: map to configure.
284  *
285  * Any registers that should not be synced should be marked as
286  * volatile.  In general drivers can choose not to use the provided
287  * syncing functionality if they so require.
288  *
289  * Return a negative value on failure, 0 on success.
290  */
291 int regcache_sync(struct regmap *map)
292 {
293         int ret = 0;
294         unsigned int i;
295         const char *name;
296         unsigned int bypass;
297
298         BUG_ON(!map->cache_ops);
299
300         map->lock(map->lock_arg);
301         /* Remember the initial bypass state */
302         bypass = map->cache_bypass;
303         dev_dbg(map->dev, "Syncing %s cache\n",
304                 map->cache_ops->name);
305         name = map->cache_ops->name;
306         trace_regcache_sync(map->dev, name, "start");
307
308         if (!map->cache_dirty)
309                 goto out;
310
311         map->async = true;
312
313         /* Apply any patch first */
314         map->cache_bypass = 1;
315         for (i = 0; i < map->patch_regs; i++) {
316                 ret = _regmap_write(map, map->patch[i].reg, map->patch[i].def);
317                 if (ret != 0) {
318                         dev_err(map->dev, "Failed to write %x = %x: %d\n",
319                                 map->patch[i].reg, map->patch[i].def, ret);
320                         goto out;
321                 }
322         }
323         map->cache_bypass = 0;
324
325         if (map->cache_ops->sync)
326                 ret = map->cache_ops->sync(map, 0, map->max_register);
327         else
328                 ret = regcache_default_sync(map, 0, map->max_register);
329
330         if (ret == 0)
331                 map->cache_dirty = false;
332
333 out:
334         /* Restore the bypass state */
335         map->async = false;
336         map->cache_bypass = bypass;
337         map->unlock(map->lock_arg);
338
339         regmap_async_complete(map);
340
341         trace_regcache_sync(map->dev, name, "stop");
342
343         return ret;
344 }
345 EXPORT_SYMBOL_GPL(regcache_sync);
346
347 /**
348  * regcache_sync_region: Sync part  of the register cache with the hardware.
349  *
350  * @map: map to sync.
351  * @min: first register to sync
352  * @max: last register to sync
353  *
354  * Write all non-default register values in the specified region to
355  * the hardware.
356  *
357  * Return a negative value on failure, 0 on success.
358  */
359 int regcache_sync_region(struct regmap *map, unsigned int min,
360                          unsigned int max)
361 {
362         int ret = 0;
363         const char *name;
364         unsigned int bypass;
365
366         BUG_ON(!map->cache_ops);
367
368         map->lock(map->lock_arg);
369
370         /* Remember the initial bypass state */
371         bypass = map->cache_bypass;
372
373         name = map->cache_ops->name;
374         dev_dbg(map->dev, "Syncing %s cache from %d-%d\n", name, min, max);
375
376         trace_regcache_sync(map->dev, name, "start region");
377
378         if (!map->cache_dirty)
379                 goto out;
380
381         map->async = true;
382
383         if (map->cache_ops->sync)
384                 ret = map->cache_ops->sync(map, min, max);
385         else
386                 ret = regcache_default_sync(map, min, max);
387
388 out:
389         /* Restore the bypass state */
390         map->cache_bypass = bypass;
391         map->async = false;
392         map->unlock(map->lock_arg);
393
394         regmap_async_complete(map);
395
396         trace_regcache_sync(map->dev, name, "stop region");
397
398         return ret;
399 }
400 EXPORT_SYMBOL_GPL(regcache_sync_region);
401
402 /**
403  * regcache_drop_region: Discard part of the register cache
404  *
405  * @map: map to operate on
406  * @min: first register to discard
407  * @max: last register to discard
408  *
409  * Discard part of the register cache.
410  *
411  * Return a negative value on failure, 0 on success.
412  */
413 int regcache_drop_region(struct regmap *map, unsigned int min,
414                          unsigned int max)
415 {
416         int ret = 0;
417
418         if (!map->cache_ops || !map->cache_ops->drop)
419                 return -EINVAL;
420
421         map->lock(map->lock_arg);
422
423         trace_regcache_drop_region(map->dev, min, max);
424
425         ret = map->cache_ops->drop(map, min, max);
426
427         map->unlock(map->lock_arg);
428
429         return ret;
430 }
431 EXPORT_SYMBOL_GPL(regcache_drop_region);
432
433 /**
434  * regcache_cache_only: Put a register map into cache only mode
435  *
436  * @map: map to configure
437  * @cache_only: flag if changes should be written to the hardware
438  *
439  * When a register map is marked as cache only writes to the register
440  * map API will only update the register cache, they will not cause
441  * any hardware changes.  This is useful for allowing portions of
442  * drivers to act as though the device were functioning as normal when
443  * it is disabled for power saving reasons.
444  */
445 void regcache_cache_only(struct regmap *map, bool enable)
446 {
447         map->lock(map->lock_arg);
448         WARN_ON(map->cache_bypass && enable);
449         map->cache_only = enable;
450         trace_regmap_cache_only(map->dev, enable);
451         map->unlock(map->lock_arg);
452 }
453 EXPORT_SYMBOL_GPL(regcache_cache_only);
454
455 /**
456  * regcache_mark_dirty: Mark the register cache as dirty
457  *
458  * @map: map to mark
459  *
460  * Mark the register cache as dirty, for example due to the device
461  * having been powered down for suspend.  If the cache is not marked
462  * as dirty then the cache sync will be suppressed.
463  */
464 void regcache_mark_dirty(struct regmap *map)
465 {
466         map->lock(map->lock_arg);
467         map->cache_dirty = true;
468         map->unlock(map->lock_arg);
469 }
470 EXPORT_SYMBOL_GPL(regcache_mark_dirty);
471
472 /**
473  * regcache_cache_bypass: Put a register map into cache bypass mode
474  *
475  * @map: map to configure
476  * @cache_bypass: flag if changes should not be written to the hardware
477  *
478  * When a register map is marked with the cache bypass option, writes
479  * to the register map API will only update the hardware and not the
480  * the cache directly.  This is useful when syncing the cache back to
481  * the hardware.
482  */
483 void regcache_cache_bypass(struct regmap *map, bool enable)
484 {
485         map->lock(map->lock_arg);
486         WARN_ON(map->cache_only && enable);
487         map->cache_bypass = enable;
488         trace_regmap_cache_bypass(map->dev, enable);
489         map->unlock(map->lock_arg);
490 }
491 EXPORT_SYMBOL_GPL(regcache_cache_bypass);
492
493 bool regcache_set_val(struct regmap *map, void *base, unsigned int idx,
494                       unsigned int val)
495 {
496         if (regcache_get_val(map, base, idx) == val)
497                 return true;
498
499         /* Use device native format if possible */
500         if (map->format.format_val) {
501                 map->format.format_val(base + (map->cache_word_size * idx),
502                                        val, 0);
503                 return false;
504         }
505
506         switch (map->cache_word_size) {
507         case 1: {
508                 u8 *cache = base;
509                 cache[idx] = val;
510                 break;
511         }
512         case 2: {
513                 u16 *cache = base;
514                 cache[idx] = val;
515                 break;
516         }
517         case 4: {
518                 u32 *cache = base;
519                 cache[idx] = val;
520                 break;
521         }
522         default:
523                 BUG();
524         }
525         return false;
526 }
527
528 unsigned int regcache_get_val(struct regmap *map, const void *base,
529                               unsigned int idx)
530 {
531         if (!base)
532                 return -EINVAL;
533
534         /* Use device native format if possible */
535         if (map->format.parse_val)
536                 return map->format.parse_val(regcache_get_val_addr(map, base,
537                                                                    idx));
538
539         switch (map->cache_word_size) {
540         case 1: {
541                 const u8 *cache = base;
542                 return cache[idx];
543         }
544         case 2: {
545                 const u16 *cache = base;
546                 return cache[idx];
547         }
548         case 4: {
549                 const u32 *cache = base;
550                 return cache[idx];
551         }
552         default:
553                 BUG();
554         }
555         /* unreachable */
556         return -1;
557 }
558
559 static int regcache_default_cmp(const void *a, const void *b)
560 {
561         const struct reg_default *_a = a;
562         const struct reg_default *_b = b;
563
564         return _a->reg - _b->reg;
565 }
566
567 int regcache_lookup_reg(struct regmap *map, unsigned int reg)
568 {
569         struct reg_default key;
570         struct reg_default *r;
571
572         key.reg = reg;
573         key.def = 0;
574
575         r = bsearch(&key, map->reg_defaults, map->num_reg_defaults,
576                     sizeof(struct reg_default), regcache_default_cmp);
577
578         if (r)
579                 return r - map->reg_defaults;
580         else
581                 return -ENOENT;
582 }
583
584 static bool regcache_reg_present(unsigned long *cache_present, unsigned int idx)
585 {
586         if (!cache_present)
587                 return true;
588
589         return test_bit(idx, cache_present);
590 }
591
592 static int regcache_sync_block_single(struct regmap *map, void *block,
593                                       unsigned long *cache_present,
594                                       unsigned int block_base,
595                                       unsigned int start, unsigned int end)
596 {
597         unsigned int i, regtmp, val;
598         int ret;
599
600         for (i = start; i < end; i++) {
601                 regtmp = block_base + (i * map->reg_stride);
602
603                 if (!regcache_reg_present(cache_present, i))
604                         continue;
605
606                 val = regcache_get_val(map, block, i);
607
608                 /* Is this the hardware default?  If so skip. */
609                 ret = regcache_lookup_reg(map, regtmp);
610                 if (ret >= 0 && val == map->reg_defaults[ret].def)
611                         continue;
612
613                 map->cache_bypass = 1;
614
615                 ret = _regmap_write(map, regtmp, val);
616
617                 map->cache_bypass = 0;
618                 if (ret != 0) {
619                         dev_err(map->dev, "Unable to sync register %#x. %d\n",
620                                 regtmp, ret);
621                         return ret;
622                 }
623                 dev_dbg(map->dev, "Synced register %#x, value %#x\n",
624                         regtmp, val);
625         }
626
627         return 0;
628 }
629
630 static int regcache_sync_block_raw_flush(struct regmap *map, const void **data,
631                                          unsigned int base, unsigned int cur)
632 {
633         size_t val_bytes = map->format.val_bytes;
634         int ret, count;
635
636         if (*data == NULL)
637                 return 0;
638
639         count = (cur - base) / map->reg_stride;
640
641         dev_dbg(map->dev, "Writing %zu bytes for %d registers from 0x%x-0x%x\n",
642                 count * val_bytes, count, base, cur - map->reg_stride);
643
644         map->cache_bypass = 1;
645
646         ret = _regmap_raw_write(map, base, *data, count * val_bytes);
647         if (ret)
648                 dev_err(map->dev, "Unable to sync registers %#x-%#x. %d\n",
649                         base, cur - map->reg_stride, ret);
650
651         map->cache_bypass = 0;
652
653         *data = NULL;
654
655         return ret;
656 }
657
658 static int regcache_sync_block_raw(struct regmap *map, void *block,
659                             unsigned long *cache_present,
660                             unsigned int block_base, unsigned int start,
661                             unsigned int end)
662 {
663         unsigned int i, val;
664         unsigned int regtmp = 0;
665         unsigned int base = 0;
666         const void *data = NULL;
667         int ret;
668
669         for (i = start; i < end; i++) {
670                 regtmp = block_base + (i * map->reg_stride);
671
672                 if (!regcache_reg_present(cache_present, i)) {
673                         ret = regcache_sync_block_raw_flush(map, &data,
674                                                             base, regtmp);
675                         if (ret != 0)
676                                 return ret;
677                         continue;
678                 }
679
680                 val = regcache_get_val(map, block, i);
681
682                 /* Is this the hardware default?  If so skip. */
683                 ret = regcache_lookup_reg(map, regtmp);
684                 if (ret >= 0 && val == map->reg_defaults[ret].def) {
685                         ret = regcache_sync_block_raw_flush(map, &data,
686                                                             base, regtmp);
687                         if (ret != 0)
688                                 return ret;
689                         continue;
690                 }
691
692                 if (!data) {
693                         data = regcache_get_val_addr(map, block, i);
694                         base = regtmp;
695                 }
696         }
697
698         return regcache_sync_block_raw_flush(map, &data, base, regtmp +
699                         map->reg_stride);
700 }
701
702 int regcache_sync_block(struct regmap *map, void *block,
703                         unsigned long *cache_present,
704                         unsigned int block_base, unsigned int start,
705                         unsigned int end)
706 {
707         if (regmap_can_raw_write(map) && !map->use_single_rw)
708                 return regcache_sync_block_raw(map, block, cache_present,
709                                                block_base, start, end);
710         else
711                 return regcache_sync_block_single(map, block, cache_present,
712                                                   block_base, start, end);
713 }