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