cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

core.c (45563B)


      1// SPDX-License-Identifier: GPL-2.0
      2/*
      3 * nvmem framework core.
      4 *
      5 * Copyright (C) 2015 Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
      6 * Copyright (C) 2013 Maxime Ripard <maxime.ripard@free-electrons.com>
      7 */
      8
      9#include <linux/device.h>
     10#include <linux/export.h>
     11#include <linux/fs.h>
     12#include <linux/idr.h>
     13#include <linux/init.h>
     14#include <linux/kref.h>
     15#include <linux/module.h>
     16#include <linux/nvmem-consumer.h>
     17#include <linux/nvmem-provider.h>
     18#include <linux/gpio/consumer.h>
     19#include <linux/of.h>
     20#include <linux/slab.h>
     21
     22struct nvmem_device {
     23	struct module		*owner;
     24	struct device		dev;
     25	int			stride;
     26	int			word_size;
     27	int			id;
     28	struct kref		refcnt;
     29	size_t			size;
     30	bool			read_only;
     31	bool			root_only;
     32	int			flags;
     33	enum nvmem_type		type;
     34	struct bin_attribute	eeprom;
     35	struct device		*base_dev;
     36	struct list_head	cells;
     37	const struct nvmem_keepout *keepout;
     38	unsigned int		nkeepout;
     39	nvmem_reg_read_t	reg_read;
     40	nvmem_reg_write_t	reg_write;
     41	nvmem_cell_post_process_t cell_post_process;
     42	struct gpio_desc	*wp_gpio;
     43	void *priv;
     44};
     45
     46#define to_nvmem_device(d) container_of(d, struct nvmem_device, dev)
     47
     48#define FLAG_COMPAT		BIT(0)
     49struct nvmem_cell_entry {
     50	const char		*name;
     51	int			offset;
     52	int			bytes;
     53	int			bit_offset;
     54	int			nbits;
     55	struct device_node	*np;
     56	struct nvmem_device	*nvmem;
     57	struct list_head	node;
     58};
     59
     60struct nvmem_cell {
     61	struct nvmem_cell_entry *entry;
     62	const char		*id;
     63};
     64
     65static DEFINE_MUTEX(nvmem_mutex);
     66static DEFINE_IDA(nvmem_ida);
     67
     68static DEFINE_MUTEX(nvmem_cell_mutex);
     69static LIST_HEAD(nvmem_cell_tables);
     70
     71static DEFINE_MUTEX(nvmem_lookup_mutex);
     72static LIST_HEAD(nvmem_lookup_list);
     73
     74static BLOCKING_NOTIFIER_HEAD(nvmem_notifier);
     75
     76static int __nvmem_reg_read(struct nvmem_device *nvmem, unsigned int offset,
     77			    void *val, size_t bytes)
     78{
     79	if (nvmem->reg_read)
     80		return nvmem->reg_read(nvmem->priv, offset, val, bytes);
     81
     82	return -EINVAL;
     83}
     84
     85static int __nvmem_reg_write(struct nvmem_device *nvmem, unsigned int offset,
     86			     void *val, size_t bytes)
     87{
     88	int ret;
     89
     90	if (nvmem->reg_write) {
     91		gpiod_set_value_cansleep(nvmem->wp_gpio, 0);
     92		ret = nvmem->reg_write(nvmem->priv, offset, val, bytes);
     93		gpiod_set_value_cansleep(nvmem->wp_gpio, 1);
     94		return ret;
     95	}
     96
     97	return -EINVAL;
     98}
     99
    100static int nvmem_access_with_keepouts(struct nvmem_device *nvmem,
    101				      unsigned int offset, void *val,
    102				      size_t bytes, int write)
    103{
    104
    105	unsigned int end = offset + bytes;
    106	unsigned int kend, ksize;
    107	const struct nvmem_keepout *keepout = nvmem->keepout;
    108	const struct nvmem_keepout *keepoutend = keepout + nvmem->nkeepout;
    109	int rc;
    110
    111	/*
    112	 * Skip all keepouts before the range being accessed.
    113	 * Keepouts are sorted.
    114	 */
    115	while ((keepout < keepoutend) && (keepout->end <= offset))
    116		keepout++;
    117
    118	while ((offset < end) && (keepout < keepoutend)) {
    119		/* Access the valid portion before the keepout. */
    120		if (offset < keepout->start) {
    121			kend = min(end, keepout->start);
    122			ksize = kend - offset;
    123			if (write)
    124				rc = __nvmem_reg_write(nvmem, offset, val, ksize);
    125			else
    126				rc = __nvmem_reg_read(nvmem, offset, val, ksize);
    127
    128			if (rc)
    129				return rc;
    130
    131			offset += ksize;
    132			val += ksize;
    133		}
    134
    135		/*
    136		 * Now we're aligned to the start of this keepout zone. Go
    137		 * through it.
    138		 */
    139		kend = min(end, keepout->end);
    140		ksize = kend - offset;
    141		if (!write)
    142			memset(val, keepout->value, ksize);
    143
    144		val += ksize;
    145		offset += ksize;
    146		keepout++;
    147	}
    148
    149	/*
    150	 * If we ran out of keepouts but there's still stuff to do, send it
    151	 * down directly
    152	 */
    153	if (offset < end) {
    154		ksize = end - offset;
    155		if (write)
    156			return __nvmem_reg_write(nvmem, offset, val, ksize);
    157		else
    158			return __nvmem_reg_read(nvmem, offset, val, ksize);
    159	}
    160
    161	return 0;
    162}
    163
    164static int nvmem_reg_read(struct nvmem_device *nvmem, unsigned int offset,
    165			  void *val, size_t bytes)
    166{
    167	if (!nvmem->nkeepout)
    168		return __nvmem_reg_read(nvmem, offset, val, bytes);
    169
    170	return nvmem_access_with_keepouts(nvmem, offset, val, bytes, false);
    171}
    172
    173static int nvmem_reg_write(struct nvmem_device *nvmem, unsigned int offset,
    174			   void *val, size_t bytes)
    175{
    176	if (!nvmem->nkeepout)
    177		return __nvmem_reg_write(nvmem, offset, val, bytes);
    178
    179	return nvmem_access_with_keepouts(nvmem, offset, val, bytes, true);
    180}
    181
    182#ifdef CONFIG_NVMEM_SYSFS
    183static const char * const nvmem_type_str[] = {
    184	[NVMEM_TYPE_UNKNOWN] = "Unknown",
    185	[NVMEM_TYPE_EEPROM] = "EEPROM",
    186	[NVMEM_TYPE_OTP] = "OTP",
    187	[NVMEM_TYPE_BATTERY_BACKED] = "Battery backed",
    188	[NVMEM_TYPE_FRAM] = "FRAM",
    189};
    190
    191#ifdef CONFIG_DEBUG_LOCK_ALLOC
    192static struct lock_class_key eeprom_lock_key;
    193#endif
    194
    195static ssize_t type_show(struct device *dev,
    196			 struct device_attribute *attr, char *buf)
    197{
    198	struct nvmem_device *nvmem = to_nvmem_device(dev);
    199
    200	return sprintf(buf, "%s\n", nvmem_type_str[nvmem->type]);
    201}
    202
    203static DEVICE_ATTR_RO(type);
    204
    205static struct attribute *nvmem_attrs[] = {
    206	&dev_attr_type.attr,
    207	NULL,
    208};
    209
    210static ssize_t bin_attr_nvmem_read(struct file *filp, struct kobject *kobj,
    211				   struct bin_attribute *attr, char *buf,
    212				   loff_t pos, size_t count)
    213{
    214	struct device *dev;
    215	struct nvmem_device *nvmem;
    216	int rc;
    217
    218	if (attr->private)
    219		dev = attr->private;
    220	else
    221		dev = kobj_to_dev(kobj);
    222	nvmem = to_nvmem_device(dev);
    223
    224	/* Stop the user from reading */
    225	if (pos >= nvmem->size)
    226		return 0;
    227
    228	if (!IS_ALIGNED(pos, nvmem->stride))
    229		return -EINVAL;
    230
    231	if (count < nvmem->word_size)
    232		return -EINVAL;
    233
    234	if (pos + count > nvmem->size)
    235		count = nvmem->size - pos;
    236
    237	count = round_down(count, nvmem->word_size);
    238
    239	if (!nvmem->reg_read)
    240		return -EPERM;
    241
    242	rc = nvmem_reg_read(nvmem, pos, buf, count);
    243
    244	if (rc)
    245		return rc;
    246
    247	return count;
    248}
    249
    250static ssize_t bin_attr_nvmem_write(struct file *filp, struct kobject *kobj,
    251				    struct bin_attribute *attr, char *buf,
    252				    loff_t pos, size_t count)
    253{
    254	struct device *dev;
    255	struct nvmem_device *nvmem;
    256	int rc;
    257
    258	if (attr->private)
    259		dev = attr->private;
    260	else
    261		dev = kobj_to_dev(kobj);
    262	nvmem = to_nvmem_device(dev);
    263
    264	/* Stop the user from writing */
    265	if (pos >= nvmem->size)
    266		return -EFBIG;
    267
    268	if (!IS_ALIGNED(pos, nvmem->stride))
    269		return -EINVAL;
    270
    271	if (count < nvmem->word_size)
    272		return -EINVAL;
    273
    274	if (pos + count > nvmem->size)
    275		count = nvmem->size - pos;
    276
    277	count = round_down(count, nvmem->word_size);
    278
    279	if (!nvmem->reg_write)
    280		return -EPERM;
    281
    282	rc = nvmem_reg_write(nvmem, pos, buf, count);
    283
    284	if (rc)
    285		return rc;
    286
    287	return count;
    288}
    289
    290static umode_t nvmem_bin_attr_get_umode(struct nvmem_device *nvmem)
    291{
    292	umode_t mode = 0400;
    293
    294	if (!nvmem->root_only)
    295		mode |= 0044;
    296
    297	if (!nvmem->read_only)
    298		mode |= 0200;
    299
    300	if (!nvmem->reg_write)
    301		mode &= ~0200;
    302
    303	if (!nvmem->reg_read)
    304		mode &= ~0444;
    305
    306	return mode;
    307}
    308
    309static umode_t nvmem_bin_attr_is_visible(struct kobject *kobj,
    310					 struct bin_attribute *attr, int i)
    311{
    312	struct device *dev = kobj_to_dev(kobj);
    313	struct nvmem_device *nvmem = to_nvmem_device(dev);
    314
    315	attr->size = nvmem->size;
    316
    317	return nvmem_bin_attr_get_umode(nvmem);
    318}
    319
    320/* default read/write permissions */
    321static struct bin_attribute bin_attr_rw_nvmem = {
    322	.attr	= {
    323		.name	= "nvmem",
    324		.mode	= 0644,
    325	},
    326	.read	= bin_attr_nvmem_read,
    327	.write	= bin_attr_nvmem_write,
    328};
    329
    330static struct bin_attribute *nvmem_bin_attributes[] = {
    331	&bin_attr_rw_nvmem,
    332	NULL,
    333};
    334
    335static const struct attribute_group nvmem_bin_group = {
    336	.bin_attrs	= nvmem_bin_attributes,
    337	.attrs		= nvmem_attrs,
    338	.is_bin_visible = nvmem_bin_attr_is_visible,
    339};
    340
    341static const struct attribute_group *nvmem_dev_groups[] = {
    342	&nvmem_bin_group,
    343	NULL,
    344};
    345
    346static struct bin_attribute bin_attr_nvmem_eeprom_compat = {
    347	.attr	= {
    348		.name	= "eeprom",
    349	},
    350	.read	= bin_attr_nvmem_read,
    351	.write	= bin_attr_nvmem_write,
    352};
    353
    354/*
    355 * nvmem_setup_compat() - Create an additional binary entry in
    356 * drivers sys directory, to be backwards compatible with the older
    357 * drivers/misc/eeprom drivers.
    358 */
    359static int nvmem_sysfs_setup_compat(struct nvmem_device *nvmem,
    360				    const struct nvmem_config *config)
    361{
    362	int rval;
    363
    364	if (!config->compat)
    365		return 0;
    366
    367	if (!config->base_dev)
    368		return -EINVAL;
    369
    370	if (config->type == NVMEM_TYPE_FRAM)
    371		bin_attr_nvmem_eeprom_compat.attr.name = "fram";
    372
    373	nvmem->eeprom = bin_attr_nvmem_eeprom_compat;
    374	nvmem->eeprom.attr.mode = nvmem_bin_attr_get_umode(nvmem);
    375	nvmem->eeprom.size = nvmem->size;
    376#ifdef CONFIG_DEBUG_LOCK_ALLOC
    377	nvmem->eeprom.attr.key = &eeprom_lock_key;
    378#endif
    379	nvmem->eeprom.private = &nvmem->dev;
    380	nvmem->base_dev = config->base_dev;
    381
    382	rval = device_create_bin_file(nvmem->base_dev, &nvmem->eeprom);
    383	if (rval) {
    384		dev_err(&nvmem->dev,
    385			"Failed to create eeprom binary file %d\n", rval);
    386		return rval;
    387	}
    388
    389	nvmem->flags |= FLAG_COMPAT;
    390
    391	return 0;
    392}
    393
    394static void nvmem_sysfs_remove_compat(struct nvmem_device *nvmem,
    395			      const struct nvmem_config *config)
    396{
    397	if (config->compat)
    398		device_remove_bin_file(nvmem->base_dev, &nvmem->eeprom);
    399}
    400
    401#else /* CONFIG_NVMEM_SYSFS */
    402
    403static int nvmem_sysfs_setup_compat(struct nvmem_device *nvmem,
    404				    const struct nvmem_config *config)
    405{
    406	return -ENOSYS;
    407}
    408static void nvmem_sysfs_remove_compat(struct nvmem_device *nvmem,
    409				      const struct nvmem_config *config)
    410{
    411}
    412
    413#endif /* CONFIG_NVMEM_SYSFS */
    414
    415static void nvmem_release(struct device *dev)
    416{
    417	struct nvmem_device *nvmem = to_nvmem_device(dev);
    418
    419	ida_free(&nvmem_ida, nvmem->id);
    420	gpiod_put(nvmem->wp_gpio);
    421	kfree(nvmem);
    422}
    423
    424static const struct device_type nvmem_provider_type = {
    425	.release	= nvmem_release,
    426};
    427
    428static struct bus_type nvmem_bus_type = {
    429	.name		= "nvmem",
    430};
    431
    432static void nvmem_cell_entry_drop(struct nvmem_cell_entry *cell)
    433{
    434	blocking_notifier_call_chain(&nvmem_notifier, NVMEM_CELL_REMOVE, cell);
    435	mutex_lock(&nvmem_mutex);
    436	list_del(&cell->node);
    437	mutex_unlock(&nvmem_mutex);
    438	of_node_put(cell->np);
    439	kfree_const(cell->name);
    440	kfree(cell);
    441}
    442
    443static void nvmem_device_remove_all_cells(const struct nvmem_device *nvmem)
    444{
    445	struct nvmem_cell_entry *cell, *p;
    446
    447	list_for_each_entry_safe(cell, p, &nvmem->cells, node)
    448		nvmem_cell_entry_drop(cell);
    449}
    450
    451static void nvmem_cell_entry_add(struct nvmem_cell_entry *cell)
    452{
    453	mutex_lock(&nvmem_mutex);
    454	list_add_tail(&cell->node, &cell->nvmem->cells);
    455	mutex_unlock(&nvmem_mutex);
    456	blocking_notifier_call_chain(&nvmem_notifier, NVMEM_CELL_ADD, cell);
    457}
    458
    459static int nvmem_cell_info_to_nvmem_cell_entry_nodup(struct nvmem_device *nvmem,
    460						     const struct nvmem_cell_info *info,
    461						     struct nvmem_cell_entry *cell)
    462{
    463	cell->nvmem = nvmem;
    464	cell->offset = info->offset;
    465	cell->bytes = info->bytes;
    466	cell->name = info->name;
    467
    468	cell->bit_offset = info->bit_offset;
    469	cell->nbits = info->nbits;
    470	cell->np = info->np;
    471
    472	if (cell->nbits)
    473		cell->bytes = DIV_ROUND_UP(cell->nbits + cell->bit_offset,
    474					   BITS_PER_BYTE);
    475
    476	if (!IS_ALIGNED(cell->offset, nvmem->stride)) {
    477		dev_err(&nvmem->dev,
    478			"cell %s unaligned to nvmem stride %d\n",
    479			cell->name ?: "<unknown>", nvmem->stride);
    480		return -EINVAL;
    481	}
    482
    483	return 0;
    484}
    485
    486static int nvmem_cell_info_to_nvmem_cell_entry(struct nvmem_device *nvmem,
    487					       const struct nvmem_cell_info *info,
    488					       struct nvmem_cell_entry *cell)
    489{
    490	int err;
    491
    492	err = nvmem_cell_info_to_nvmem_cell_entry_nodup(nvmem, info, cell);
    493	if (err)
    494		return err;
    495
    496	cell->name = kstrdup_const(info->name, GFP_KERNEL);
    497	if (!cell->name)
    498		return -ENOMEM;
    499
    500	return 0;
    501}
    502
    503/**
    504 * nvmem_add_cells() - Add cell information to an nvmem device
    505 *
    506 * @nvmem: nvmem device to add cells to.
    507 * @info: nvmem cell info to add to the device
    508 * @ncells: number of cells in info
    509 *
    510 * Return: 0 or negative error code on failure.
    511 */
    512static int nvmem_add_cells(struct nvmem_device *nvmem,
    513		    const struct nvmem_cell_info *info,
    514		    int ncells)
    515{
    516	struct nvmem_cell_entry **cells;
    517	int i, rval;
    518
    519	cells = kcalloc(ncells, sizeof(*cells), GFP_KERNEL);
    520	if (!cells)
    521		return -ENOMEM;
    522
    523	for (i = 0; i < ncells; i++) {
    524		cells[i] = kzalloc(sizeof(**cells), GFP_KERNEL);
    525		if (!cells[i]) {
    526			rval = -ENOMEM;
    527			goto err;
    528		}
    529
    530		rval = nvmem_cell_info_to_nvmem_cell_entry(nvmem, &info[i], cells[i]);
    531		if (rval) {
    532			kfree(cells[i]);
    533			goto err;
    534		}
    535
    536		nvmem_cell_entry_add(cells[i]);
    537	}
    538
    539	/* remove tmp array */
    540	kfree(cells);
    541
    542	return 0;
    543err:
    544	while (i--)
    545		nvmem_cell_entry_drop(cells[i]);
    546
    547	kfree(cells);
    548
    549	return rval;
    550}
    551
    552/**
    553 * nvmem_register_notifier() - Register a notifier block for nvmem events.
    554 *
    555 * @nb: notifier block to be called on nvmem events.
    556 *
    557 * Return: 0 on success, negative error number on failure.
    558 */
    559int nvmem_register_notifier(struct notifier_block *nb)
    560{
    561	return blocking_notifier_chain_register(&nvmem_notifier, nb);
    562}
    563EXPORT_SYMBOL_GPL(nvmem_register_notifier);
    564
    565/**
    566 * nvmem_unregister_notifier() - Unregister a notifier block for nvmem events.
    567 *
    568 * @nb: notifier block to be unregistered.
    569 *
    570 * Return: 0 on success, negative error number on failure.
    571 */
    572int nvmem_unregister_notifier(struct notifier_block *nb)
    573{
    574	return blocking_notifier_chain_unregister(&nvmem_notifier, nb);
    575}
    576EXPORT_SYMBOL_GPL(nvmem_unregister_notifier);
    577
    578static int nvmem_add_cells_from_table(struct nvmem_device *nvmem)
    579{
    580	const struct nvmem_cell_info *info;
    581	struct nvmem_cell_table *table;
    582	struct nvmem_cell_entry *cell;
    583	int rval = 0, i;
    584
    585	mutex_lock(&nvmem_cell_mutex);
    586	list_for_each_entry(table, &nvmem_cell_tables, node) {
    587		if (strcmp(nvmem_dev_name(nvmem), table->nvmem_name) == 0) {
    588			for (i = 0; i < table->ncells; i++) {
    589				info = &table->cells[i];
    590
    591				cell = kzalloc(sizeof(*cell), GFP_KERNEL);
    592				if (!cell) {
    593					rval = -ENOMEM;
    594					goto out;
    595				}
    596
    597				rval = nvmem_cell_info_to_nvmem_cell_entry(nvmem, info, cell);
    598				if (rval) {
    599					kfree(cell);
    600					goto out;
    601				}
    602
    603				nvmem_cell_entry_add(cell);
    604			}
    605		}
    606	}
    607
    608out:
    609	mutex_unlock(&nvmem_cell_mutex);
    610	return rval;
    611}
    612
    613static struct nvmem_cell_entry *
    614nvmem_find_cell_entry_by_name(struct nvmem_device *nvmem, const char *cell_id)
    615{
    616	struct nvmem_cell_entry *iter, *cell = NULL;
    617
    618	mutex_lock(&nvmem_mutex);
    619	list_for_each_entry(iter, &nvmem->cells, node) {
    620		if (strcmp(cell_id, iter->name) == 0) {
    621			cell = iter;
    622			break;
    623		}
    624	}
    625	mutex_unlock(&nvmem_mutex);
    626
    627	return cell;
    628}
    629
    630static int nvmem_validate_keepouts(struct nvmem_device *nvmem)
    631{
    632	unsigned int cur = 0;
    633	const struct nvmem_keepout *keepout = nvmem->keepout;
    634	const struct nvmem_keepout *keepoutend = keepout + nvmem->nkeepout;
    635
    636	while (keepout < keepoutend) {
    637		/* Ensure keepouts are sorted and don't overlap. */
    638		if (keepout->start < cur) {
    639			dev_err(&nvmem->dev,
    640				"Keepout regions aren't sorted or overlap.\n");
    641
    642			return -ERANGE;
    643		}
    644
    645		if (keepout->end < keepout->start) {
    646			dev_err(&nvmem->dev,
    647				"Invalid keepout region.\n");
    648
    649			return -EINVAL;
    650		}
    651
    652		/*
    653		 * Validate keepouts (and holes between) don't violate
    654		 * word_size constraints.
    655		 */
    656		if ((keepout->end - keepout->start < nvmem->word_size) ||
    657		    ((keepout->start != cur) &&
    658		     (keepout->start - cur < nvmem->word_size))) {
    659
    660			dev_err(&nvmem->dev,
    661				"Keepout regions violate word_size constraints.\n");
    662
    663			return -ERANGE;
    664		}
    665
    666		/* Validate keepouts don't violate stride (alignment). */
    667		if (!IS_ALIGNED(keepout->start, nvmem->stride) ||
    668		    !IS_ALIGNED(keepout->end, nvmem->stride)) {
    669
    670			dev_err(&nvmem->dev,
    671				"Keepout regions violate stride.\n");
    672
    673			return -EINVAL;
    674		}
    675
    676		cur = keepout->end;
    677		keepout++;
    678	}
    679
    680	return 0;
    681}
    682
    683static int nvmem_add_cells_from_of(struct nvmem_device *nvmem)
    684{
    685	struct device_node *parent, *child;
    686	struct device *dev = &nvmem->dev;
    687	struct nvmem_cell_entry *cell;
    688	const __be32 *addr;
    689	int len;
    690
    691	parent = dev->of_node;
    692
    693	for_each_child_of_node(parent, child) {
    694		addr = of_get_property(child, "reg", &len);
    695		if (!addr)
    696			continue;
    697		if (len < 2 * sizeof(u32)) {
    698			dev_err(dev, "nvmem: invalid reg on %pOF\n", child);
    699			of_node_put(child);
    700			return -EINVAL;
    701		}
    702
    703		cell = kzalloc(sizeof(*cell), GFP_KERNEL);
    704		if (!cell) {
    705			of_node_put(child);
    706			return -ENOMEM;
    707		}
    708
    709		cell->nvmem = nvmem;
    710		cell->offset = be32_to_cpup(addr++);
    711		cell->bytes = be32_to_cpup(addr);
    712		cell->name = kasprintf(GFP_KERNEL, "%pOFn", child);
    713
    714		addr = of_get_property(child, "bits", &len);
    715		if (addr && len == (2 * sizeof(u32))) {
    716			cell->bit_offset = be32_to_cpup(addr++);
    717			cell->nbits = be32_to_cpup(addr);
    718		}
    719
    720		if (cell->nbits)
    721			cell->bytes = DIV_ROUND_UP(
    722					cell->nbits + cell->bit_offset,
    723					BITS_PER_BYTE);
    724
    725		if (!IS_ALIGNED(cell->offset, nvmem->stride)) {
    726			dev_err(dev, "cell %s unaligned to nvmem stride %d\n",
    727				cell->name, nvmem->stride);
    728			/* Cells already added will be freed later. */
    729			kfree_const(cell->name);
    730			kfree(cell);
    731			of_node_put(child);
    732			return -EINVAL;
    733		}
    734
    735		cell->np = of_node_get(child);
    736		nvmem_cell_entry_add(cell);
    737	}
    738
    739	return 0;
    740}
    741
    742/**
    743 * nvmem_register() - Register a nvmem device for given nvmem_config.
    744 * Also creates a binary entry in /sys/bus/nvmem/devices/dev-name/nvmem
    745 *
    746 * @config: nvmem device configuration with which nvmem device is created.
    747 *
    748 * Return: Will be an ERR_PTR() on error or a valid pointer to nvmem_device
    749 * on success.
    750 */
    751
    752struct nvmem_device *nvmem_register(const struct nvmem_config *config)
    753{
    754	struct nvmem_device *nvmem;
    755	int rval;
    756
    757	if (!config->dev)
    758		return ERR_PTR(-EINVAL);
    759
    760	if (!config->reg_read && !config->reg_write)
    761		return ERR_PTR(-EINVAL);
    762
    763	nvmem = kzalloc(sizeof(*nvmem), GFP_KERNEL);
    764	if (!nvmem)
    765		return ERR_PTR(-ENOMEM);
    766
    767	rval  = ida_alloc(&nvmem_ida, GFP_KERNEL);
    768	if (rval < 0) {
    769		kfree(nvmem);
    770		return ERR_PTR(rval);
    771	}
    772
    773	if (config->wp_gpio)
    774		nvmem->wp_gpio = config->wp_gpio;
    775	else if (!config->ignore_wp)
    776		nvmem->wp_gpio = gpiod_get_optional(config->dev, "wp",
    777						    GPIOD_OUT_HIGH);
    778	if (IS_ERR(nvmem->wp_gpio)) {
    779		ida_free(&nvmem_ida, nvmem->id);
    780		rval = PTR_ERR(nvmem->wp_gpio);
    781		kfree(nvmem);
    782		return ERR_PTR(rval);
    783	}
    784
    785	kref_init(&nvmem->refcnt);
    786	INIT_LIST_HEAD(&nvmem->cells);
    787
    788	nvmem->id = rval;
    789	nvmem->owner = config->owner;
    790	if (!nvmem->owner && config->dev->driver)
    791		nvmem->owner = config->dev->driver->owner;
    792	nvmem->stride = config->stride ?: 1;
    793	nvmem->word_size = config->word_size ?: 1;
    794	nvmem->size = config->size;
    795	nvmem->dev.type = &nvmem_provider_type;
    796	nvmem->dev.bus = &nvmem_bus_type;
    797	nvmem->dev.parent = config->dev;
    798	nvmem->root_only = config->root_only;
    799	nvmem->priv = config->priv;
    800	nvmem->type = config->type;
    801	nvmem->reg_read = config->reg_read;
    802	nvmem->reg_write = config->reg_write;
    803	nvmem->cell_post_process = config->cell_post_process;
    804	nvmem->keepout = config->keepout;
    805	nvmem->nkeepout = config->nkeepout;
    806	if (config->of_node)
    807		nvmem->dev.of_node = config->of_node;
    808	else if (!config->no_of_node)
    809		nvmem->dev.of_node = config->dev->of_node;
    810
    811	switch (config->id) {
    812	case NVMEM_DEVID_NONE:
    813		dev_set_name(&nvmem->dev, "%s", config->name);
    814		break;
    815	case NVMEM_DEVID_AUTO:
    816		dev_set_name(&nvmem->dev, "%s%d", config->name, nvmem->id);
    817		break;
    818	default:
    819		dev_set_name(&nvmem->dev, "%s%d",
    820			     config->name ? : "nvmem",
    821			     config->name ? config->id : nvmem->id);
    822		break;
    823	}
    824
    825	nvmem->read_only = device_property_present(config->dev, "read-only") ||
    826			   config->read_only || !nvmem->reg_write;
    827
    828#ifdef CONFIG_NVMEM_SYSFS
    829	nvmem->dev.groups = nvmem_dev_groups;
    830#endif
    831
    832	if (nvmem->nkeepout) {
    833		rval = nvmem_validate_keepouts(nvmem);
    834		if (rval) {
    835			ida_free(&nvmem_ida, nvmem->id);
    836			kfree(nvmem);
    837			return ERR_PTR(rval);
    838		}
    839	}
    840
    841	dev_dbg(&nvmem->dev, "Registering nvmem device %s\n", config->name);
    842
    843	rval = device_register(&nvmem->dev);
    844	if (rval)
    845		goto err_put_device;
    846
    847	if (config->compat) {
    848		rval = nvmem_sysfs_setup_compat(nvmem, config);
    849		if (rval)
    850			goto err_device_del;
    851	}
    852
    853	if (config->cells) {
    854		rval = nvmem_add_cells(nvmem, config->cells, config->ncells);
    855		if (rval)
    856			goto err_teardown_compat;
    857	}
    858
    859	rval = nvmem_add_cells_from_table(nvmem);
    860	if (rval)
    861		goto err_remove_cells;
    862
    863	rval = nvmem_add_cells_from_of(nvmem);
    864	if (rval)
    865		goto err_remove_cells;
    866
    867	blocking_notifier_call_chain(&nvmem_notifier, NVMEM_ADD, nvmem);
    868
    869	return nvmem;
    870
    871err_remove_cells:
    872	nvmem_device_remove_all_cells(nvmem);
    873err_teardown_compat:
    874	if (config->compat)
    875		nvmem_sysfs_remove_compat(nvmem, config);
    876err_device_del:
    877	device_del(&nvmem->dev);
    878err_put_device:
    879	put_device(&nvmem->dev);
    880
    881	return ERR_PTR(rval);
    882}
    883EXPORT_SYMBOL_GPL(nvmem_register);
    884
    885static void nvmem_device_release(struct kref *kref)
    886{
    887	struct nvmem_device *nvmem;
    888
    889	nvmem = container_of(kref, struct nvmem_device, refcnt);
    890
    891	blocking_notifier_call_chain(&nvmem_notifier, NVMEM_REMOVE, nvmem);
    892
    893	if (nvmem->flags & FLAG_COMPAT)
    894		device_remove_bin_file(nvmem->base_dev, &nvmem->eeprom);
    895
    896	nvmem_device_remove_all_cells(nvmem);
    897	device_unregister(&nvmem->dev);
    898}
    899
    900/**
    901 * nvmem_unregister() - Unregister previously registered nvmem device
    902 *
    903 * @nvmem: Pointer to previously registered nvmem device.
    904 */
    905void nvmem_unregister(struct nvmem_device *nvmem)
    906{
    907	if (nvmem)
    908		kref_put(&nvmem->refcnt, nvmem_device_release);
    909}
    910EXPORT_SYMBOL_GPL(nvmem_unregister);
    911
    912static void devm_nvmem_unregister(void *nvmem)
    913{
    914	nvmem_unregister(nvmem);
    915}
    916
    917/**
    918 * devm_nvmem_register() - Register a managed nvmem device for given
    919 * nvmem_config.
    920 * Also creates a binary entry in /sys/bus/nvmem/devices/dev-name/nvmem
    921 *
    922 * @dev: Device that uses the nvmem device.
    923 * @config: nvmem device configuration with which nvmem device is created.
    924 *
    925 * Return: Will be an ERR_PTR() on error or a valid pointer to nvmem_device
    926 * on success.
    927 */
    928struct nvmem_device *devm_nvmem_register(struct device *dev,
    929					 const struct nvmem_config *config)
    930{
    931	struct nvmem_device *nvmem;
    932	int ret;
    933
    934	nvmem = nvmem_register(config);
    935	if (IS_ERR(nvmem))
    936		return nvmem;
    937
    938	ret = devm_add_action_or_reset(dev, devm_nvmem_unregister, nvmem);
    939	if (ret)
    940		return ERR_PTR(ret);
    941
    942	return nvmem;
    943}
    944EXPORT_SYMBOL_GPL(devm_nvmem_register);
    945
    946static struct nvmem_device *__nvmem_device_get(void *data,
    947			int (*match)(struct device *dev, const void *data))
    948{
    949	struct nvmem_device *nvmem = NULL;
    950	struct device *dev;
    951
    952	mutex_lock(&nvmem_mutex);
    953	dev = bus_find_device(&nvmem_bus_type, NULL, data, match);
    954	if (dev)
    955		nvmem = to_nvmem_device(dev);
    956	mutex_unlock(&nvmem_mutex);
    957	if (!nvmem)
    958		return ERR_PTR(-EPROBE_DEFER);
    959
    960	if (!try_module_get(nvmem->owner)) {
    961		dev_err(&nvmem->dev,
    962			"could not increase module refcount for cell %s\n",
    963			nvmem_dev_name(nvmem));
    964
    965		put_device(&nvmem->dev);
    966		return ERR_PTR(-EINVAL);
    967	}
    968
    969	kref_get(&nvmem->refcnt);
    970
    971	return nvmem;
    972}
    973
    974static void __nvmem_device_put(struct nvmem_device *nvmem)
    975{
    976	put_device(&nvmem->dev);
    977	module_put(nvmem->owner);
    978	kref_put(&nvmem->refcnt, nvmem_device_release);
    979}
    980
    981#if IS_ENABLED(CONFIG_OF)
    982/**
    983 * of_nvmem_device_get() - Get nvmem device from a given id
    984 *
    985 * @np: Device tree node that uses the nvmem device.
    986 * @id: nvmem name from nvmem-names property.
    987 *
    988 * Return: ERR_PTR() on error or a valid pointer to a struct nvmem_device
    989 * on success.
    990 */
    991struct nvmem_device *of_nvmem_device_get(struct device_node *np, const char *id)
    992{
    993
    994	struct device_node *nvmem_np;
    995	struct nvmem_device *nvmem;
    996	int index = 0;
    997
    998	if (id)
    999		index = of_property_match_string(np, "nvmem-names", id);
   1000
   1001	nvmem_np = of_parse_phandle(np, "nvmem", index);
   1002	if (!nvmem_np)
   1003		return ERR_PTR(-ENOENT);
   1004
   1005	nvmem = __nvmem_device_get(nvmem_np, device_match_of_node);
   1006	of_node_put(nvmem_np);
   1007	return nvmem;
   1008}
   1009EXPORT_SYMBOL_GPL(of_nvmem_device_get);
   1010#endif
   1011
   1012/**
   1013 * nvmem_device_get() - Get nvmem device from a given id
   1014 *
   1015 * @dev: Device that uses the nvmem device.
   1016 * @dev_name: name of the requested nvmem device.
   1017 *
   1018 * Return: ERR_PTR() on error or a valid pointer to a struct nvmem_device
   1019 * on success.
   1020 */
   1021struct nvmem_device *nvmem_device_get(struct device *dev, const char *dev_name)
   1022{
   1023	if (dev->of_node) { /* try dt first */
   1024		struct nvmem_device *nvmem;
   1025
   1026		nvmem = of_nvmem_device_get(dev->of_node, dev_name);
   1027
   1028		if (!IS_ERR(nvmem) || PTR_ERR(nvmem) == -EPROBE_DEFER)
   1029			return nvmem;
   1030
   1031	}
   1032
   1033	return __nvmem_device_get((void *)dev_name, device_match_name);
   1034}
   1035EXPORT_SYMBOL_GPL(nvmem_device_get);
   1036
   1037/**
   1038 * nvmem_device_find() - Find nvmem device with matching function
   1039 *
   1040 * @data: Data to pass to match function
   1041 * @match: Callback function to check device
   1042 *
   1043 * Return: ERR_PTR() on error or a valid pointer to a struct nvmem_device
   1044 * on success.
   1045 */
   1046struct nvmem_device *nvmem_device_find(void *data,
   1047			int (*match)(struct device *dev, const void *data))
   1048{
   1049	return __nvmem_device_get(data, match);
   1050}
   1051EXPORT_SYMBOL_GPL(nvmem_device_find);
   1052
   1053static int devm_nvmem_device_match(struct device *dev, void *res, void *data)
   1054{
   1055	struct nvmem_device **nvmem = res;
   1056
   1057	if (WARN_ON(!nvmem || !*nvmem))
   1058		return 0;
   1059
   1060	return *nvmem == data;
   1061}
   1062
   1063static void devm_nvmem_device_release(struct device *dev, void *res)
   1064{
   1065	nvmem_device_put(*(struct nvmem_device **)res);
   1066}
   1067
   1068/**
   1069 * devm_nvmem_device_put() - put alredy got nvmem device
   1070 *
   1071 * @dev: Device that uses the nvmem device.
   1072 * @nvmem: pointer to nvmem device allocated by devm_nvmem_cell_get(),
   1073 * that needs to be released.
   1074 */
   1075void devm_nvmem_device_put(struct device *dev, struct nvmem_device *nvmem)
   1076{
   1077	int ret;
   1078
   1079	ret = devres_release(dev, devm_nvmem_device_release,
   1080			     devm_nvmem_device_match, nvmem);
   1081
   1082	WARN_ON(ret);
   1083}
   1084EXPORT_SYMBOL_GPL(devm_nvmem_device_put);
   1085
   1086/**
   1087 * nvmem_device_put() - put alredy got nvmem device
   1088 *
   1089 * @nvmem: pointer to nvmem device that needs to be released.
   1090 */
   1091void nvmem_device_put(struct nvmem_device *nvmem)
   1092{
   1093	__nvmem_device_put(nvmem);
   1094}
   1095EXPORT_SYMBOL_GPL(nvmem_device_put);
   1096
   1097/**
   1098 * devm_nvmem_device_get() - Get nvmem cell of device form a given id
   1099 *
   1100 * @dev: Device that requests the nvmem device.
   1101 * @id: name id for the requested nvmem device.
   1102 *
   1103 * Return: ERR_PTR() on error or a valid pointer to a struct nvmem_cell
   1104 * on success.  The nvmem_cell will be freed by the automatically once the
   1105 * device is freed.
   1106 */
   1107struct nvmem_device *devm_nvmem_device_get(struct device *dev, const char *id)
   1108{
   1109	struct nvmem_device **ptr, *nvmem;
   1110
   1111	ptr = devres_alloc(devm_nvmem_device_release, sizeof(*ptr), GFP_KERNEL);
   1112	if (!ptr)
   1113		return ERR_PTR(-ENOMEM);
   1114
   1115	nvmem = nvmem_device_get(dev, id);
   1116	if (!IS_ERR(nvmem)) {
   1117		*ptr = nvmem;
   1118		devres_add(dev, ptr);
   1119	} else {
   1120		devres_free(ptr);
   1121	}
   1122
   1123	return nvmem;
   1124}
   1125EXPORT_SYMBOL_GPL(devm_nvmem_device_get);
   1126
   1127static struct nvmem_cell *nvmem_create_cell(struct nvmem_cell_entry *entry, const char *id)
   1128{
   1129	struct nvmem_cell *cell;
   1130	const char *name = NULL;
   1131
   1132	cell = kzalloc(sizeof(*cell), GFP_KERNEL);
   1133	if (!cell)
   1134		return ERR_PTR(-ENOMEM);
   1135
   1136	if (id) {
   1137		name = kstrdup_const(id, GFP_KERNEL);
   1138		if (!name) {
   1139			kfree(cell);
   1140			return ERR_PTR(-ENOMEM);
   1141		}
   1142	}
   1143
   1144	cell->id = name;
   1145	cell->entry = entry;
   1146
   1147	return cell;
   1148}
   1149
   1150static struct nvmem_cell *
   1151nvmem_cell_get_from_lookup(struct device *dev, const char *con_id)
   1152{
   1153	struct nvmem_cell_entry *cell_entry;
   1154	struct nvmem_cell *cell = ERR_PTR(-ENOENT);
   1155	struct nvmem_cell_lookup *lookup;
   1156	struct nvmem_device *nvmem;
   1157	const char *dev_id;
   1158
   1159	if (!dev)
   1160		return ERR_PTR(-EINVAL);
   1161
   1162	dev_id = dev_name(dev);
   1163
   1164	mutex_lock(&nvmem_lookup_mutex);
   1165
   1166	list_for_each_entry(lookup, &nvmem_lookup_list, node) {
   1167		if ((strcmp(lookup->dev_id, dev_id) == 0) &&
   1168		    (strcmp(lookup->con_id, con_id) == 0)) {
   1169			/* This is the right entry. */
   1170			nvmem = __nvmem_device_get((void *)lookup->nvmem_name,
   1171						   device_match_name);
   1172			if (IS_ERR(nvmem)) {
   1173				/* Provider may not be registered yet. */
   1174				cell = ERR_CAST(nvmem);
   1175				break;
   1176			}
   1177
   1178			cell_entry = nvmem_find_cell_entry_by_name(nvmem,
   1179								   lookup->cell_name);
   1180			if (!cell_entry) {
   1181				__nvmem_device_put(nvmem);
   1182				cell = ERR_PTR(-ENOENT);
   1183			} else {
   1184				cell = nvmem_create_cell(cell_entry, con_id);
   1185				if (IS_ERR(cell))
   1186					__nvmem_device_put(nvmem);
   1187			}
   1188			break;
   1189		}
   1190	}
   1191
   1192	mutex_unlock(&nvmem_lookup_mutex);
   1193	return cell;
   1194}
   1195
   1196#if IS_ENABLED(CONFIG_OF)
   1197static struct nvmem_cell_entry *
   1198nvmem_find_cell_entry_by_node(struct nvmem_device *nvmem, struct device_node *np)
   1199{
   1200	struct nvmem_cell_entry *iter, *cell = NULL;
   1201
   1202	mutex_lock(&nvmem_mutex);
   1203	list_for_each_entry(iter, &nvmem->cells, node) {
   1204		if (np == iter->np) {
   1205			cell = iter;
   1206			break;
   1207		}
   1208	}
   1209	mutex_unlock(&nvmem_mutex);
   1210
   1211	return cell;
   1212}
   1213
   1214/**
   1215 * of_nvmem_cell_get() - Get a nvmem cell from given device node and cell id
   1216 *
   1217 * @np: Device tree node that uses the nvmem cell.
   1218 * @id: nvmem cell name from nvmem-cell-names property, or NULL
   1219 *      for the cell at index 0 (the lone cell with no accompanying
   1220 *      nvmem-cell-names property).
   1221 *
   1222 * Return: Will be an ERR_PTR() on error or a valid pointer
   1223 * to a struct nvmem_cell.  The nvmem_cell will be freed by the
   1224 * nvmem_cell_put().
   1225 */
   1226struct nvmem_cell *of_nvmem_cell_get(struct device_node *np, const char *id)
   1227{
   1228	struct device_node *cell_np, *nvmem_np;
   1229	struct nvmem_device *nvmem;
   1230	struct nvmem_cell_entry *cell_entry;
   1231	struct nvmem_cell *cell;
   1232	int index = 0;
   1233
   1234	/* if cell name exists, find index to the name */
   1235	if (id)
   1236		index = of_property_match_string(np, "nvmem-cell-names", id);
   1237
   1238	cell_np = of_parse_phandle(np, "nvmem-cells", index);
   1239	if (!cell_np)
   1240		return ERR_PTR(-ENOENT);
   1241
   1242	nvmem_np = of_get_next_parent(cell_np);
   1243	if (!nvmem_np)
   1244		return ERR_PTR(-EINVAL);
   1245
   1246	nvmem = __nvmem_device_get(nvmem_np, device_match_of_node);
   1247	of_node_put(nvmem_np);
   1248	if (IS_ERR(nvmem))
   1249		return ERR_CAST(nvmem);
   1250
   1251	cell_entry = nvmem_find_cell_entry_by_node(nvmem, cell_np);
   1252	if (!cell_entry) {
   1253		__nvmem_device_put(nvmem);
   1254		return ERR_PTR(-ENOENT);
   1255	}
   1256
   1257	cell = nvmem_create_cell(cell_entry, id);
   1258	if (IS_ERR(cell))
   1259		__nvmem_device_put(nvmem);
   1260
   1261	return cell;
   1262}
   1263EXPORT_SYMBOL_GPL(of_nvmem_cell_get);
   1264#endif
   1265
   1266/**
   1267 * nvmem_cell_get() - Get nvmem cell of device form a given cell name
   1268 *
   1269 * @dev: Device that requests the nvmem cell.
   1270 * @id: nvmem cell name to get (this corresponds with the name from the
   1271 *      nvmem-cell-names property for DT systems and with the con_id from
   1272 *      the lookup entry for non-DT systems).
   1273 *
   1274 * Return: Will be an ERR_PTR() on error or a valid pointer
   1275 * to a struct nvmem_cell.  The nvmem_cell will be freed by the
   1276 * nvmem_cell_put().
   1277 */
   1278struct nvmem_cell *nvmem_cell_get(struct device *dev, const char *id)
   1279{
   1280	struct nvmem_cell *cell;
   1281
   1282	if (dev->of_node) { /* try dt first */
   1283		cell = of_nvmem_cell_get(dev->of_node, id);
   1284		if (!IS_ERR(cell) || PTR_ERR(cell) == -EPROBE_DEFER)
   1285			return cell;
   1286	}
   1287
   1288	/* NULL cell id only allowed for device tree; invalid otherwise */
   1289	if (!id)
   1290		return ERR_PTR(-EINVAL);
   1291
   1292	return nvmem_cell_get_from_lookup(dev, id);
   1293}
   1294EXPORT_SYMBOL_GPL(nvmem_cell_get);
   1295
   1296static void devm_nvmem_cell_release(struct device *dev, void *res)
   1297{
   1298	nvmem_cell_put(*(struct nvmem_cell **)res);
   1299}
   1300
   1301/**
   1302 * devm_nvmem_cell_get() - Get nvmem cell of device form a given id
   1303 *
   1304 * @dev: Device that requests the nvmem cell.
   1305 * @id: nvmem cell name id to get.
   1306 *
   1307 * Return: Will be an ERR_PTR() on error or a valid pointer
   1308 * to a struct nvmem_cell.  The nvmem_cell will be freed by the
   1309 * automatically once the device is freed.
   1310 */
   1311struct nvmem_cell *devm_nvmem_cell_get(struct device *dev, const char *id)
   1312{
   1313	struct nvmem_cell **ptr, *cell;
   1314
   1315	ptr = devres_alloc(devm_nvmem_cell_release, sizeof(*ptr), GFP_KERNEL);
   1316	if (!ptr)
   1317		return ERR_PTR(-ENOMEM);
   1318
   1319	cell = nvmem_cell_get(dev, id);
   1320	if (!IS_ERR(cell)) {
   1321		*ptr = cell;
   1322		devres_add(dev, ptr);
   1323	} else {
   1324		devres_free(ptr);
   1325	}
   1326
   1327	return cell;
   1328}
   1329EXPORT_SYMBOL_GPL(devm_nvmem_cell_get);
   1330
   1331static int devm_nvmem_cell_match(struct device *dev, void *res, void *data)
   1332{
   1333	struct nvmem_cell **c = res;
   1334
   1335	if (WARN_ON(!c || !*c))
   1336		return 0;
   1337
   1338	return *c == data;
   1339}
   1340
   1341/**
   1342 * devm_nvmem_cell_put() - Release previously allocated nvmem cell
   1343 * from devm_nvmem_cell_get.
   1344 *
   1345 * @dev: Device that requests the nvmem cell.
   1346 * @cell: Previously allocated nvmem cell by devm_nvmem_cell_get().
   1347 */
   1348void devm_nvmem_cell_put(struct device *dev, struct nvmem_cell *cell)
   1349{
   1350	int ret;
   1351
   1352	ret = devres_release(dev, devm_nvmem_cell_release,
   1353				devm_nvmem_cell_match, cell);
   1354
   1355	WARN_ON(ret);
   1356}
   1357EXPORT_SYMBOL(devm_nvmem_cell_put);
   1358
   1359/**
   1360 * nvmem_cell_put() - Release previously allocated nvmem cell.
   1361 *
   1362 * @cell: Previously allocated nvmem cell by nvmem_cell_get().
   1363 */
   1364void nvmem_cell_put(struct nvmem_cell *cell)
   1365{
   1366	struct nvmem_device *nvmem = cell->entry->nvmem;
   1367
   1368	if (cell->id)
   1369		kfree_const(cell->id);
   1370
   1371	kfree(cell);
   1372	__nvmem_device_put(nvmem);
   1373}
   1374EXPORT_SYMBOL_GPL(nvmem_cell_put);
   1375
   1376static void nvmem_shift_read_buffer_in_place(struct nvmem_cell_entry *cell, void *buf)
   1377{
   1378	u8 *p, *b;
   1379	int i, extra, bit_offset = cell->bit_offset;
   1380
   1381	p = b = buf;
   1382	if (bit_offset) {
   1383		/* First shift */
   1384		*b++ >>= bit_offset;
   1385
   1386		/* setup rest of the bytes if any */
   1387		for (i = 1; i < cell->bytes; i++) {
   1388			/* Get bits from next byte and shift them towards msb */
   1389			*p |= *b << (BITS_PER_BYTE - bit_offset);
   1390
   1391			p = b;
   1392			*b++ >>= bit_offset;
   1393		}
   1394	} else {
   1395		/* point to the msb */
   1396		p += cell->bytes - 1;
   1397	}
   1398
   1399	/* result fits in less bytes */
   1400	extra = cell->bytes - DIV_ROUND_UP(cell->nbits, BITS_PER_BYTE);
   1401	while (--extra >= 0)
   1402		*p-- = 0;
   1403
   1404	/* clear msb bits if any leftover in the last byte */
   1405	if (cell->nbits % BITS_PER_BYTE)
   1406		*p &= GENMASK((cell->nbits % BITS_PER_BYTE) - 1, 0);
   1407}
   1408
   1409static int __nvmem_cell_read(struct nvmem_device *nvmem,
   1410		      struct nvmem_cell_entry *cell,
   1411		      void *buf, size_t *len, const char *id)
   1412{
   1413	int rc;
   1414
   1415	rc = nvmem_reg_read(nvmem, cell->offset, buf, cell->bytes);
   1416
   1417	if (rc)
   1418		return rc;
   1419
   1420	/* shift bits in-place */
   1421	if (cell->bit_offset || cell->nbits)
   1422		nvmem_shift_read_buffer_in_place(cell, buf);
   1423
   1424	if (nvmem->cell_post_process) {
   1425		rc = nvmem->cell_post_process(nvmem->priv, id,
   1426					      cell->offset, buf, cell->bytes);
   1427		if (rc)
   1428			return rc;
   1429	}
   1430
   1431	if (len)
   1432		*len = cell->bytes;
   1433
   1434	return 0;
   1435}
   1436
   1437/**
   1438 * nvmem_cell_read() - Read a given nvmem cell
   1439 *
   1440 * @cell: nvmem cell to be read.
   1441 * @len: pointer to length of cell which will be populated on successful read;
   1442 *	 can be NULL.
   1443 *
   1444 * Return: ERR_PTR() on error or a valid pointer to a buffer on success. The
   1445 * buffer should be freed by the consumer with a kfree().
   1446 */
   1447void *nvmem_cell_read(struct nvmem_cell *cell, size_t *len)
   1448{
   1449	struct nvmem_device *nvmem = cell->entry->nvmem;
   1450	u8 *buf;
   1451	int rc;
   1452
   1453	if (!nvmem)
   1454		return ERR_PTR(-EINVAL);
   1455
   1456	buf = kzalloc(cell->entry->bytes, GFP_KERNEL);
   1457	if (!buf)
   1458		return ERR_PTR(-ENOMEM);
   1459
   1460	rc = __nvmem_cell_read(nvmem, cell->entry, buf, len, cell->id);
   1461	if (rc) {
   1462		kfree(buf);
   1463		return ERR_PTR(rc);
   1464	}
   1465
   1466	return buf;
   1467}
   1468EXPORT_SYMBOL_GPL(nvmem_cell_read);
   1469
   1470static void *nvmem_cell_prepare_write_buffer(struct nvmem_cell_entry *cell,
   1471					     u8 *_buf, int len)
   1472{
   1473	struct nvmem_device *nvmem = cell->nvmem;
   1474	int i, rc, nbits, bit_offset = cell->bit_offset;
   1475	u8 v, *p, *buf, *b, pbyte, pbits;
   1476
   1477	nbits = cell->nbits;
   1478	buf = kzalloc(cell->bytes, GFP_KERNEL);
   1479	if (!buf)
   1480		return ERR_PTR(-ENOMEM);
   1481
   1482	memcpy(buf, _buf, len);
   1483	p = b = buf;
   1484
   1485	if (bit_offset) {
   1486		pbyte = *b;
   1487		*b <<= bit_offset;
   1488
   1489		/* setup the first byte with lsb bits from nvmem */
   1490		rc = nvmem_reg_read(nvmem, cell->offset, &v, 1);
   1491		if (rc)
   1492			goto err;
   1493		*b++ |= GENMASK(bit_offset - 1, 0) & v;
   1494
   1495		/* setup rest of the byte if any */
   1496		for (i = 1; i < cell->bytes; i++) {
   1497			/* Get last byte bits and shift them towards lsb */
   1498			pbits = pbyte >> (BITS_PER_BYTE - 1 - bit_offset);
   1499			pbyte = *b;
   1500			p = b;
   1501			*b <<= bit_offset;
   1502			*b++ |= pbits;
   1503		}
   1504	}
   1505
   1506	/* if it's not end on byte boundary */
   1507	if ((nbits + bit_offset) % BITS_PER_BYTE) {
   1508		/* setup the last byte with msb bits from nvmem */
   1509		rc = nvmem_reg_read(nvmem,
   1510				    cell->offset + cell->bytes - 1, &v, 1);
   1511		if (rc)
   1512			goto err;
   1513		*p |= GENMASK(7, (nbits + bit_offset) % BITS_PER_BYTE) & v;
   1514
   1515	}
   1516
   1517	return buf;
   1518err:
   1519	kfree(buf);
   1520	return ERR_PTR(rc);
   1521}
   1522
   1523static int __nvmem_cell_entry_write(struct nvmem_cell_entry *cell, void *buf, size_t len)
   1524{
   1525	struct nvmem_device *nvmem = cell->nvmem;
   1526	int rc;
   1527
   1528	if (!nvmem || nvmem->read_only ||
   1529	    (cell->bit_offset == 0 && len != cell->bytes))
   1530		return -EINVAL;
   1531
   1532	if (cell->bit_offset || cell->nbits) {
   1533		buf = nvmem_cell_prepare_write_buffer(cell, buf, len);
   1534		if (IS_ERR(buf))
   1535			return PTR_ERR(buf);
   1536	}
   1537
   1538	rc = nvmem_reg_write(nvmem, cell->offset, buf, cell->bytes);
   1539
   1540	/* free the tmp buffer */
   1541	if (cell->bit_offset || cell->nbits)
   1542		kfree(buf);
   1543
   1544	if (rc)
   1545		return rc;
   1546
   1547	return len;
   1548}
   1549
   1550/**
   1551 * nvmem_cell_write() - Write to a given nvmem cell
   1552 *
   1553 * @cell: nvmem cell to be written.
   1554 * @buf: Buffer to be written.
   1555 * @len: length of buffer to be written to nvmem cell.
   1556 *
   1557 * Return: length of bytes written or negative on failure.
   1558 */
   1559int nvmem_cell_write(struct nvmem_cell *cell, void *buf, size_t len)
   1560{
   1561	return __nvmem_cell_entry_write(cell->entry, buf, len);
   1562}
   1563
   1564EXPORT_SYMBOL_GPL(nvmem_cell_write);
   1565
   1566static int nvmem_cell_read_common(struct device *dev, const char *cell_id,
   1567				  void *val, size_t count)
   1568{
   1569	struct nvmem_cell *cell;
   1570	void *buf;
   1571	size_t len;
   1572
   1573	cell = nvmem_cell_get(dev, cell_id);
   1574	if (IS_ERR(cell))
   1575		return PTR_ERR(cell);
   1576
   1577	buf = nvmem_cell_read(cell, &len);
   1578	if (IS_ERR(buf)) {
   1579		nvmem_cell_put(cell);
   1580		return PTR_ERR(buf);
   1581	}
   1582	if (len != count) {
   1583		kfree(buf);
   1584		nvmem_cell_put(cell);
   1585		return -EINVAL;
   1586	}
   1587	memcpy(val, buf, count);
   1588	kfree(buf);
   1589	nvmem_cell_put(cell);
   1590
   1591	return 0;
   1592}
   1593
   1594/**
   1595 * nvmem_cell_read_u8() - Read a cell value as a u8
   1596 *
   1597 * @dev: Device that requests the nvmem cell.
   1598 * @cell_id: Name of nvmem cell to read.
   1599 * @val: pointer to output value.
   1600 *
   1601 * Return: 0 on success or negative errno.
   1602 */
   1603int nvmem_cell_read_u8(struct device *dev, const char *cell_id, u8 *val)
   1604{
   1605	return nvmem_cell_read_common(dev, cell_id, val, sizeof(*val));
   1606}
   1607EXPORT_SYMBOL_GPL(nvmem_cell_read_u8);
   1608
   1609/**
   1610 * nvmem_cell_read_u16() - Read a cell value as a u16
   1611 *
   1612 * @dev: Device that requests the nvmem cell.
   1613 * @cell_id: Name of nvmem cell to read.
   1614 * @val: pointer to output value.
   1615 *
   1616 * Return: 0 on success or negative errno.
   1617 */
   1618int nvmem_cell_read_u16(struct device *dev, const char *cell_id, u16 *val)
   1619{
   1620	return nvmem_cell_read_common(dev, cell_id, val, sizeof(*val));
   1621}
   1622EXPORT_SYMBOL_GPL(nvmem_cell_read_u16);
   1623
   1624/**
   1625 * nvmem_cell_read_u32() - Read a cell value as a u32
   1626 *
   1627 * @dev: Device that requests the nvmem cell.
   1628 * @cell_id: Name of nvmem cell to read.
   1629 * @val: pointer to output value.
   1630 *
   1631 * Return: 0 on success or negative errno.
   1632 */
   1633int nvmem_cell_read_u32(struct device *dev, const char *cell_id, u32 *val)
   1634{
   1635	return nvmem_cell_read_common(dev, cell_id, val, sizeof(*val));
   1636}
   1637EXPORT_SYMBOL_GPL(nvmem_cell_read_u32);
   1638
   1639/**
   1640 * nvmem_cell_read_u64() - Read a cell value as a u64
   1641 *
   1642 * @dev: Device that requests the nvmem cell.
   1643 * @cell_id: Name of nvmem cell to read.
   1644 * @val: pointer to output value.
   1645 *
   1646 * Return: 0 on success or negative errno.
   1647 */
   1648int nvmem_cell_read_u64(struct device *dev, const char *cell_id, u64 *val)
   1649{
   1650	return nvmem_cell_read_common(dev, cell_id, val, sizeof(*val));
   1651}
   1652EXPORT_SYMBOL_GPL(nvmem_cell_read_u64);
   1653
   1654static const void *nvmem_cell_read_variable_common(struct device *dev,
   1655						   const char *cell_id,
   1656						   size_t max_len, size_t *len)
   1657{
   1658	struct nvmem_cell *cell;
   1659	int nbits;
   1660	void *buf;
   1661
   1662	cell = nvmem_cell_get(dev, cell_id);
   1663	if (IS_ERR(cell))
   1664		return cell;
   1665
   1666	nbits = cell->entry->nbits;
   1667	buf = nvmem_cell_read(cell, len);
   1668	nvmem_cell_put(cell);
   1669	if (IS_ERR(buf))
   1670		return buf;
   1671
   1672	/*
   1673	 * If nbits is set then nvmem_cell_read() can significantly exaggerate
   1674	 * the length of the real data. Throw away the extra junk.
   1675	 */
   1676	if (nbits)
   1677		*len = DIV_ROUND_UP(nbits, 8);
   1678
   1679	if (*len > max_len) {
   1680		kfree(buf);
   1681		return ERR_PTR(-ERANGE);
   1682	}
   1683
   1684	return buf;
   1685}
   1686
   1687/**
   1688 * nvmem_cell_read_variable_le_u32() - Read up to 32-bits of data as a little endian number.
   1689 *
   1690 * @dev: Device that requests the nvmem cell.
   1691 * @cell_id: Name of nvmem cell to read.
   1692 * @val: pointer to output value.
   1693 *
   1694 * Return: 0 on success or negative errno.
   1695 */
   1696int nvmem_cell_read_variable_le_u32(struct device *dev, const char *cell_id,
   1697				    u32 *val)
   1698{
   1699	size_t len;
   1700	const u8 *buf;
   1701	int i;
   1702
   1703	buf = nvmem_cell_read_variable_common(dev, cell_id, sizeof(*val), &len);
   1704	if (IS_ERR(buf))
   1705		return PTR_ERR(buf);
   1706
   1707	/* Copy w/ implicit endian conversion */
   1708	*val = 0;
   1709	for (i = 0; i < len; i++)
   1710		*val |= buf[i] << (8 * i);
   1711
   1712	kfree(buf);
   1713
   1714	return 0;
   1715}
   1716EXPORT_SYMBOL_GPL(nvmem_cell_read_variable_le_u32);
   1717
   1718/**
   1719 * nvmem_cell_read_variable_le_u64() - Read up to 64-bits of data as a little endian number.
   1720 *
   1721 * @dev: Device that requests the nvmem cell.
   1722 * @cell_id: Name of nvmem cell to read.
   1723 * @val: pointer to output value.
   1724 *
   1725 * Return: 0 on success or negative errno.
   1726 */
   1727int nvmem_cell_read_variable_le_u64(struct device *dev, const char *cell_id,
   1728				    u64 *val)
   1729{
   1730	size_t len;
   1731	const u8 *buf;
   1732	int i;
   1733
   1734	buf = nvmem_cell_read_variable_common(dev, cell_id, sizeof(*val), &len);
   1735	if (IS_ERR(buf))
   1736		return PTR_ERR(buf);
   1737
   1738	/* Copy w/ implicit endian conversion */
   1739	*val = 0;
   1740	for (i = 0; i < len; i++)
   1741		*val |= (uint64_t)buf[i] << (8 * i);
   1742
   1743	kfree(buf);
   1744
   1745	return 0;
   1746}
   1747EXPORT_SYMBOL_GPL(nvmem_cell_read_variable_le_u64);
   1748
   1749/**
   1750 * nvmem_device_cell_read() - Read a given nvmem device and cell
   1751 *
   1752 * @nvmem: nvmem device to read from.
   1753 * @info: nvmem cell info to be read.
   1754 * @buf: buffer pointer which will be populated on successful read.
   1755 *
   1756 * Return: length of successful bytes read on success and negative
   1757 * error code on error.
   1758 */
   1759ssize_t nvmem_device_cell_read(struct nvmem_device *nvmem,
   1760			   struct nvmem_cell_info *info, void *buf)
   1761{
   1762	struct nvmem_cell_entry cell;
   1763	int rc;
   1764	ssize_t len;
   1765
   1766	if (!nvmem)
   1767		return -EINVAL;
   1768
   1769	rc = nvmem_cell_info_to_nvmem_cell_entry_nodup(nvmem, info, &cell);
   1770	if (rc)
   1771		return rc;
   1772
   1773	rc = __nvmem_cell_read(nvmem, &cell, buf, &len, NULL);
   1774	if (rc)
   1775		return rc;
   1776
   1777	return len;
   1778}
   1779EXPORT_SYMBOL_GPL(nvmem_device_cell_read);
   1780
   1781/**
   1782 * nvmem_device_cell_write() - Write cell to a given nvmem device
   1783 *
   1784 * @nvmem: nvmem device to be written to.
   1785 * @info: nvmem cell info to be written.
   1786 * @buf: buffer to be written to cell.
   1787 *
   1788 * Return: length of bytes written or negative error code on failure.
   1789 */
   1790int nvmem_device_cell_write(struct nvmem_device *nvmem,
   1791			    struct nvmem_cell_info *info, void *buf)
   1792{
   1793	struct nvmem_cell_entry cell;
   1794	int rc;
   1795
   1796	if (!nvmem)
   1797		return -EINVAL;
   1798
   1799	rc = nvmem_cell_info_to_nvmem_cell_entry_nodup(nvmem, info, &cell);
   1800	if (rc)
   1801		return rc;
   1802
   1803	return __nvmem_cell_entry_write(&cell, buf, cell.bytes);
   1804}
   1805EXPORT_SYMBOL_GPL(nvmem_device_cell_write);
   1806
   1807/**
   1808 * nvmem_device_read() - Read from a given nvmem device
   1809 *
   1810 * @nvmem: nvmem device to read from.
   1811 * @offset: offset in nvmem device.
   1812 * @bytes: number of bytes to read.
   1813 * @buf: buffer pointer which will be populated on successful read.
   1814 *
   1815 * Return: length of successful bytes read on success and negative
   1816 * error code on error.
   1817 */
   1818int nvmem_device_read(struct nvmem_device *nvmem,
   1819		      unsigned int offset,
   1820		      size_t bytes, void *buf)
   1821{
   1822	int rc;
   1823
   1824	if (!nvmem)
   1825		return -EINVAL;
   1826
   1827	rc = nvmem_reg_read(nvmem, offset, buf, bytes);
   1828
   1829	if (rc)
   1830		return rc;
   1831
   1832	return bytes;
   1833}
   1834EXPORT_SYMBOL_GPL(nvmem_device_read);
   1835
   1836/**
   1837 * nvmem_device_write() - Write cell to a given nvmem device
   1838 *
   1839 * @nvmem: nvmem device to be written to.
   1840 * @offset: offset in nvmem device.
   1841 * @bytes: number of bytes to write.
   1842 * @buf: buffer to be written.
   1843 *
   1844 * Return: length of bytes written or negative error code on failure.
   1845 */
   1846int nvmem_device_write(struct nvmem_device *nvmem,
   1847		       unsigned int offset,
   1848		       size_t bytes, void *buf)
   1849{
   1850	int rc;
   1851
   1852	if (!nvmem)
   1853		return -EINVAL;
   1854
   1855	rc = nvmem_reg_write(nvmem, offset, buf, bytes);
   1856
   1857	if (rc)
   1858		return rc;
   1859
   1860
   1861	return bytes;
   1862}
   1863EXPORT_SYMBOL_GPL(nvmem_device_write);
   1864
   1865/**
   1866 * nvmem_add_cell_table() - register a table of cell info entries
   1867 *
   1868 * @table: table of cell info entries
   1869 */
   1870void nvmem_add_cell_table(struct nvmem_cell_table *table)
   1871{
   1872	mutex_lock(&nvmem_cell_mutex);
   1873	list_add_tail(&table->node, &nvmem_cell_tables);
   1874	mutex_unlock(&nvmem_cell_mutex);
   1875}
   1876EXPORT_SYMBOL_GPL(nvmem_add_cell_table);
   1877
   1878/**
   1879 * nvmem_del_cell_table() - remove a previously registered cell info table
   1880 *
   1881 * @table: table of cell info entries
   1882 */
   1883void nvmem_del_cell_table(struct nvmem_cell_table *table)
   1884{
   1885	mutex_lock(&nvmem_cell_mutex);
   1886	list_del(&table->node);
   1887	mutex_unlock(&nvmem_cell_mutex);
   1888}
   1889EXPORT_SYMBOL_GPL(nvmem_del_cell_table);
   1890
   1891/**
   1892 * nvmem_add_cell_lookups() - register a list of cell lookup entries
   1893 *
   1894 * @entries: array of cell lookup entries
   1895 * @nentries: number of cell lookup entries in the array
   1896 */
   1897void nvmem_add_cell_lookups(struct nvmem_cell_lookup *entries, size_t nentries)
   1898{
   1899	int i;
   1900
   1901	mutex_lock(&nvmem_lookup_mutex);
   1902	for (i = 0; i < nentries; i++)
   1903		list_add_tail(&entries[i].node, &nvmem_lookup_list);
   1904	mutex_unlock(&nvmem_lookup_mutex);
   1905}
   1906EXPORT_SYMBOL_GPL(nvmem_add_cell_lookups);
   1907
   1908/**
   1909 * nvmem_del_cell_lookups() - remove a list of previously added cell lookup
   1910 *                            entries
   1911 *
   1912 * @entries: array of cell lookup entries
   1913 * @nentries: number of cell lookup entries in the array
   1914 */
   1915void nvmem_del_cell_lookups(struct nvmem_cell_lookup *entries, size_t nentries)
   1916{
   1917	int i;
   1918
   1919	mutex_lock(&nvmem_lookup_mutex);
   1920	for (i = 0; i < nentries; i++)
   1921		list_del(&entries[i].node);
   1922	mutex_unlock(&nvmem_lookup_mutex);
   1923}
   1924EXPORT_SYMBOL_GPL(nvmem_del_cell_lookups);
   1925
   1926/**
   1927 * nvmem_dev_name() - Get the name of a given nvmem device.
   1928 *
   1929 * @nvmem: nvmem device.
   1930 *
   1931 * Return: name of the nvmem device.
   1932 */
   1933const char *nvmem_dev_name(struct nvmem_device *nvmem)
   1934{
   1935	return dev_name(&nvmem->dev);
   1936}
   1937EXPORT_SYMBOL_GPL(nvmem_dev_name);
   1938
   1939static int __init nvmem_init(void)
   1940{
   1941	return bus_register(&nvmem_bus_type);
   1942}
   1943
   1944static void __exit nvmem_exit(void)
   1945{
   1946	bus_unregister(&nvmem_bus_type);
   1947}
   1948
   1949subsys_initcall(nvmem_init);
   1950module_exit(nvmem_exit);
   1951
   1952MODULE_AUTHOR("Srinivas Kandagatla <srinivas.kandagatla@linaro.org");
   1953MODULE_AUTHOR("Maxime Ripard <maxime.ripard@free-electrons.com");
   1954MODULE_DESCRIPTION("nvmem Driver Core");
   1955MODULE_LICENSE("GPL v2");