* [PATCH 0/3] nvmem: eeprom: add support for FRAM @ 2021-04-09 15:47 Jiri Prchal 2021-04-09 15:47 ` [PATCH 1/3] nvmem: add things " Jiri Prchal ` (3 more replies) 0 siblings, 4 replies; 9+ messages in thread From: Jiri Prchal @ 2021-04-09 15:47 UTC (permalink / raw) To: devicetree, linux-kernel; +Cc: Rob Herring, Christian Eggers, Jiri Prchal Adds sopport for Cypress FRAMs. Jiri Prchal (3): nvmem: eeprom: at25: add support for FRAM nvmem: eeprom: at25: add support for FRAM nvmem: eeprom: add documentation for FRAM .../devicetree/bindings/eeprom/at25.yaml | 12 +- drivers/misc/eeprom/Kconfig | 5 +- drivers/misc/eeprom/at25.c | 151 ++++++++++++++---- drivers/nvmem/core.c | 4 + include/linux/nvmem-provider.h | 1 + 5 files changed, 139 insertions(+), 34 deletions(-) -- 2.25.1 ^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH 1/3] nvmem: add things for FRAM 2021-04-09 15:47 [PATCH 0/3] nvmem: eeprom: add support for FRAM Jiri Prchal @ 2021-04-09 15:47 ` Jiri Prchal 2021-04-09 15:47 ` [PATCH 2/3] nvmem: eeprom: at25: add support " Jiri Prchal ` (2 subsequent siblings) 3 siblings, 0 replies; 9+ messages in thread From: Jiri Prchal @ 2021-04-09 15:47 UTC (permalink / raw) To: devicetree, linux-kernel; +Cc: Rob Herring, Christian Eggers, Jiri Prchal Added enum and string for FRAM to expose it as "fram". Signed-off-by: Jiri Prchal <jiri.prchal@aksignal.cz> --- drivers/nvmem/core.c | 4 ++++ include/linux/nvmem-provider.h | 1 + 2 files changed, 5 insertions(+) diff --git a/drivers/nvmem/core.c b/drivers/nvmem/core.c index 177f5bf27c6d..01ef9a934b0a 100644 --- a/drivers/nvmem/core.c +++ b/drivers/nvmem/core.c @@ -180,6 +180,7 @@ static const char * const nvmem_type_str[] = { [NVMEM_TYPE_EEPROM] = "EEPROM", [NVMEM_TYPE_OTP] = "OTP", [NVMEM_TYPE_BATTERY_BACKED] = "Battery backed", + [NVMEM_TYPE_FRAM] = "FRAM", }; #ifdef CONFIG_DEBUG_LOCK_ALLOC @@ -359,6 +360,9 @@ static int nvmem_sysfs_setup_compat(struct nvmem_device *nvmem, if (!config->base_dev) return -EINVAL; + if (config->type == NVMEM_TYPE_FRAM) + bin_attr_nvmem_eeprom_compat.attr.name = "fram"; + nvmem->eeprom = bin_attr_nvmem_eeprom_compat; nvmem->eeprom.attr.mode = nvmem_bin_attr_get_umode(nvmem); nvmem->eeprom.size = nvmem->size; diff --git a/include/linux/nvmem-provider.h b/include/linux/nvmem-provider.h index e162b757b6d5..890003565761 100644 --- a/include/linux/nvmem-provider.h +++ b/include/linux/nvmem-provider.h @@ -25,6 +25,7 @@ enum nvmem_type { NVMEM_TYPE_EEPROM, NVMEM_TYPE_OTP, NVMEM_TYPE_BATTERY_BACKED, + NVMEM_TYPE_FRAM, }; #define NVMEM_DEVID_NONE (-1) -- 2.25.1 ^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH 2/3] nvmem: eeprom: at25: add support for FRAM 2021-04-09 15:47 [PATCH 0/3] nvmem: eeprom: add support for FRAM Jiri Prchal 2021-04-09 15:47 ` [PATCH 1/3] nvmem: add things " Jiri Prchal @ 2021-04-09 15:47 ` Jiri Prchal 2021-04-09 18:34 ` kernel test robot 2021-04-09 15:47 ` [PATCH 3/3] nvmem: eeprom: add documentation " Jiri Prchal 2021-04-09 17:21 ` [PATCH 0/3] nvmem: eeprom: add support " Christian Eggers 3 siblings, 1 reply; 9+ messages in thread From: Jiri Prchal @ 2021-04-09 15:47 UTC (permalink / raw) To: devicetree, linux-kernel; +Cc: Rob Herring, Christian Eggers, Jiri Prchal Added support for Cypress FRAMs. These frams have ID and some of them have serial number too. Size of them is recognized by ID. They don't have pages, it could be read or written at once, but it's limited in this driver to io limit 4096. Signed-off-by: Jiri Prchal <jiri.prchal@aksignal.cz> --- drivers/misc/eeprom/Kconfig | 5 +- drivers/misc/eeprom/at25.c | 151 +++++++++++++++++++++++++++++------- 2 files changed, 124 insertions(+), 32 deletions(-) diff --git a/drivers/misc/eeprom/Kconfig b/drivers/misc/eeprom/Kconfig index 0f791bfdc1f5..f0a7531f354c 100644 --- a/drivers/misc/eeprom/Kconfig +++ b/drivers/misc/eeprom/Kconfig @@ -32,12 +32,13 @@ config EEPROM_AT24 will be called at24. config EEPROM_AT25 - tristate "SPI EEPROMs from most vendors" + tristate "SPI EEPROMs (FRAMs) from most vendors" depends on SPI && SYSFS select NVMEM select NVMEM_SYSFS help - Enable this driver to get read/write support to most SPI EEPROMs, + Enable this driver to get read/write support to most SPI EEPROMs + and Cypress FRAMs, after you configure the board init code to know about each eeprom on your target board. diff --git a/drivers/misc/eeprom/at25.c b/drivers/misc/eeprom/at25.c index b76e4901b4a4..0d0a00a0f7e7 100644 --- a/drivers/misc/eeprom/at25.c +++ b/drivers/misc/eeprom/at25.c @@ -1,6 +1,7 @@ // SPDX-License-Identifier: GPL-2.0-or-later /* * at25.c -- support most SPI EEPROMs, such as Atmel AT25 models + * and Cypress FRAMs FM25 models * * Copyright (C) 2006 David Brownell */ @@ -16,6 +17,8 @@ #include <linux/spi/spi.h> #include <linux/spi/eeprom.h> #include <linux/property.h> +#include <linux/of.h> +#include <linux/of_device.h> /* * NOTE: this is an *EEPROM* driver. The vagaries of product naming @@ -34,6 +37,7 @@ struct at25_data { unsigned addrlen; struct nvmem_config nvmem_config; struct nvmem_device *nvmem; + int has_sernum; }; #define AT25_WREN 0x06 /* latch the write enable */ @@ -42,6 +46,9 @@ struct at25_data { #define AT25_WRSR 0x01 /* write status register */ #define AT25_READ 0x03 /* read byte(s) */ #define AT25_WRITE 0x02 /* write byte(s)/sector */ +#define FM25_SLEEP 0xb9 /* enter sleep mode */ +#define FM25_RDID 0x9f /* read device ID */ +#define FM25_RDSN 0xc3 /* read S/N */ #define AT25_SR_nRDY 0x01 /* nRDY = write-in-progress */ #define AT25_SR_WEN 0x02 /* write enable (latched) */ @@ -51,6 +58,9 @@ struct at25_data { #define AT25_INSTR_BIT3 0x08 /* Additional address bit in instr */ +#define FM25_ID_LEN 9 /* ID length */ +#define FM25_SN_LEN 8 /* serial number length */ + #define EE_MAXADDRLEN 3 /* 24 bit addresses, up to 2 MBytes */ /* Specs often allow 5 msec for a page write, sometimes 20 msec; @@ -58,6 +68,9 @@ struct at25_data { */ #define EE_TIMEOUT 25 +#define IS_EEPROM 0 +#define IS_FRAM 1 + /*-------------------------------------------------------------------------*/ #define io_limit PAGE_SIZE /* bytes */ @@ -129,6 +142,36 @@ static int at25_ee_read(void *priv, unsigned int offset, return status; } +/* + * read extra registers as ID or serial number + */ +static int fm25_aux_read(struct at25_data *at25, char *buf, uint8_t command, + int len) +{ + int status; + struct spi_transfer t[2]; + struct spi_message m; + + spi_message_init(&m); + memset(t, 0, sizeof(t)); + + t[0].tx_buf = &command; + t[0].len = 1; + spi_message_add_tail(&t[0], &m); + + t[1].rx_buf = buf; + t[1].len = len; + spi_message_add_tail(&t[1], &m); + + mutex_lock(&at25->lock); + + status = spi_sync(at25->spi, &m); + dev_dbg(&at25->spi->dev, "read %zu aux bytes --> %zd\n", len, status); + + mutex_unlock(&at25->lock); + return status; +} + static int at25_ee_write(void *priv, unsigned int off, void *val, size_t count) { struct at25_data *at25 = priv; @@ -303,34 +346,48 @@ static int at25_fw_to_chip(struct device *dev, struct spi_eeprom *chip) return 0; } +static const struct of_device_id at25_of_match[] = { + { .compatible = "atmel,at25", .data = (const void *)IS_EEPROM }, + { .compatible = "cypress,fm25", .data = (const void *)IS_FRAM }, + { } +}; +MODULE_DEVICE_TABLE(of, at25_of_match); + +static int mypow(int x, int n) +{ + int i; + int res = 1; + + for (i = 0; i < n; ++i) + res *= x; + + return res; +} + static int at25_probe(struct spi_device *spi) { struct at25_data *at25 = NULL; struct spi_eeprom chip; int err; int sr; - int addrlen; + char id[FM25_ID_LEN]; + const struct of_device_id *match; + int is_fram = 0; + + match = of_match_device(of_match_ptr(at25_of_match), &spi->dev); + if (match) + is_fram = (int)(uintptr_t)match->data; /* Chip description */ if (!spi->dev.platform_data) { - err = at25_fw_to_chip(&spi->dev, &chip); - if (err) - return err; + if (!is_fram) { + err = at25_fw_to_chip(&spi->dev, &chip); + if (err) + return err; + } } else chip = *(struct spi_eeprom *)spi->dev.platform_data; - /* For now we only support 8/16/24 bit addressing */ - if (chip.flags & EE_ADDR1) - addrlen = 1; - else if (chip.flags & EE_ADDR2) - addrlen = 2; - else if (chip.flags & EE_ADDR3) - addrlen = 3; - else { - dev_dbg(&spi->dev, "unsupported address type\n"); - return -EINVAL; - } - /* Ping the chip ... the status register is pretty portable, * unlike probing manufacturer IDs. We do expect that system * firmware didn't write it in the past few milliseconds! @@ -349,9 +406,49 @@ static int at25_probe(struct spi_device *spi) at25->chip = chip; at25->spi = spi; spi_set_drvdata(spi, at25); - at25->addrlen = addrlen; - at25->nvmem_config.type = NVMEM_TYPE_EEPROM; + if (is_fram) { + /* Get ID of chip */ + fm25_aux_read(at25, id, FM25_RDID, FM25_ID_LEN); + if (id[6] != 0xc2) { + dev_err(&spi->dev, + "Error: no Cypress FRAM (id %02x)\n", id[6]); + return -ENODEV; + } + /* set size found in ID */ + if (id[7] < 0x21 || id[7] > 0x26) { + dev_err(&spi->dev, "Error: unsupported size (id %02x)\n", id[7]); + return -ENODEV; + } + chip.byte_len = mypow(2, id[7] - 0x21 + 4) * 1024; + + if (at25->chip.byte_len > 64 * 1024) + at25->chip.flags |= EE_ADDR3; + else + at25->chip.flags |= EE_ADDR2; + + if (id[8]) + at25->has_sernum = 1; + else + at25->has_sernum = 0; + + at25->chip.page_size = PAGE_SIZE; + strncpy(at25->chip.name, "fm25", sizeof(at25->chip.name)); + } + + /* For now we only support 8/16/24 bit addressing */ + if (at25->chip.flags & EE_ADDR1) + at25->addrlen = 1; + else if (at25->chip.flags & EE_ADDR2) + at25->addrlen = 2; + else if (at25->chip.flags & EE_ADDR3) + at25->addrlen = 3; + else { + dev_dbg(&spi->dev, "unsupported address type\n"); + return -EINVAL; + } + + at25->nvmem_config.type = is_fram ? NVMEM_TYPE_FRAM : NVMEM_TYPE_EEPROM; at25->nvmem_config.name = dev_name(&spi->dev); at25->nvmem_config.dev = &spi->dev; at25->nvmem_config.read_only = chip.flags & EE_READONLY; @@ -370,23 +467,17 @@ static int at25_probe(struct spi_device *spi) if (IS_ERR(at25->nvmem)) return PTR_ERR(at25->nvmem); - dev_info(&spi->dev, "%d %s %s eeprom%s, pagesize %u\n", - (chip.byte_len < 1024) ? chip.byte_len : (chip.byte_len / 1024), - (chip.byte_len < 1024) ? "Byte" : "KByte", - at25->chip.name, - (chip.flags & EE_READONLY) ? " (readonly)" : "", - at25->chip.page_size); + dev_info(&spi->dev, "%d %s %s %s%s, pagesize %u\n", + (chip.byte_len < 1024) ? chip.byte_len : (chip.byte_len / 1024), + (chip.byte_len < 1024) ? "Byte" : "KByte", + at25->chip.name, is_fram ? "fram" : "eeprom", + (chip.flags & EE_READONLY) ? " (readonly)" : "", + at25->chip.page_size); return 0; } /*-------------------------------------------------------------------------*/ -static const struct of_device_id at25_of_match[] = { - { .compatible = "atmel,at25", }, - { } -}; -MODULE_DEVICE_TABLE(of, at25_of_match); - static struct spi_driver at25_driver = { .driver = { .name = "at25", -- 2.25.1 ^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH 2/3] nvmem: eeprom: at25: add support for FRAM 2021-04-09 15:47 ` [PATCH 2/3] nvmem: eeprom: at25: add support " Jiri Prchal @ 2021-04-09 18:34 ` kernel test robot 0 siblings, 0 replies; 9+ messages in thread From: kernel test robot @ 2021-04-09 18:34 UTC (permalink / raw) To: Jiri Prchal, devicetree, linux-kernel Cc: kbuild-all, clang-built-linux, Rob Herring, Christian Eggers, Jiri Prchal [-- Attachment #1: Type: text/plain, Size: 5040 bytes --] Hi Jiri, Thank you for the patch! Perhaps something to improve: [auto build test WARNING on char-misc/char-misc-testing] [also build test WARNING on robh/for-next linux/master linus/master v5.12-rc6 next-20210409] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch] url: https://github.com/0day-ci/linux/commits/Jiri-Prchal/nvmem-eeprom-add-support-for-FRAM/20210409-235546 base: https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/char-misc.git b195b20b7145bcae22ad261abc52d68336f5e913 config: arm64-randconfig-r033-20210409 (attached as .config) compiler: clang version 13.0.0 (https://github.com/llvm/llvm-project dd453a1389b6a7e6d9214b449d3c54981b1a89b6) reproduce (this is a W=1 build): wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # install arm64 cross compiling tool for clang build # apt-get install binutils-aarch64-linux-gnu # https://github.com/0day-ci/linux/commit/d335df5f35cd09d8f9d7f14e0bfbad45ab2bc33a git remote add linux-review https://github.com/0day-ci/linux git fetch --no-tags linux-review Jiri-Prchal/nvmem-eeprom-add-support-for-FRAM/20210409-235546 git checkout d335df5f35cd09d8f9d7f14e0bfbad45ab2bc33a # save the attached .config to linux build tree COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=arm64 If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot <lkp@intel.com> All warnings (new ones prefixed by >>): >> drivers/misc/eeprom/at25.c:169:59: warning: format specifies type 'size_t' (aka 'unsigned long') but the argument has type 'int' [-Wformat] dev_dbg(&at25->spi->dev, "read %zu aux bytes --> %zd\n", len, status); ~~~ ^~~ %d include/linux/dev_printk.h:123:39: note: expanded from macro 'dev_dbg' dynamic_dev_dbg(dev, dev_fmt(fmt), ##__VA_ARGS__) ~~~ ^~~~~~~~~~~ include/linux/dynamic_debug.h:162:19: note: expanded from macro 'dynamic_dev_dbg' dev, fmt, ##__VA_ARGS__) ~~~ ^~~~~~~~~~~ include/linux/dynamic_debug.h:147:56: note: expanded from macro '_dynamic_func_call' __dynamic_func_call(__UNIQUE_ID(ddebug), fmt, func, ##__VA_ARGS__) ^~~~~~~~~~~ include/linux/dynamic_debug.h:129:15: note: expanded from macro '__dynamic_func_call' func(&id, ##__VA_ARGS__); \ ^~~~~~~~~~~ >> drivers/misc/eeprom/at25.c:169:64: warning: format specifies type 'ssize_t' (aka 'long') but the argument has type 'int' [-Wformat] dev_dbg(&at25->spi->dev, "read %zu aux bytes --> %zd\n", len, status); ~~~ ^~~~~~ %d include/linux/dev_printk.h:123:39: note: expanded from macro 'dev_dbg' dynamic_dev_dbg(dev, dev_fmt(fmt), ##__VA_ARGS__) ~~~ ^~~~~~~~~~~ include/linux/dynamic_debug.h:162:19: note: expanded from macro 'dynamic_dev_dbg' dev, fmt, ##__VA_ARGS__) ~~~ ^~~~~~~~~~~ include/linux/dynamic_debug.h:147:56: note: expanded from macro '_dynamic_func_call' __dynamic_func_call(__UNIQUE_ID(ddebug), fmt, func, ##__VA_ARGS__) ^~~~~~~~~~~ include/linux/dynamic_debug.h:129:15: note: expanded from macro '__dynamic_func_call' func(&id, ##__VA_ARGS__); \ ^~~~~~~~~~~ 2 warnings generated. vim +169 drivers/misc/eeprom/at25.c 144 145 /* 146 * read extra registers as ID or serial number 147 */ 148 static int fm25_aux_read(struct at25_data *at25, char *buf, uint8_t command, 149 int len) 150 { 151 int status; 152 struct spi_transfer t[2]; 153 struct spi_message m; 154 155 spi_message_init(&m); 156 memset(t, 0, sizeof(t)); 157 158 t[0].tx_buf = &command; 159 t[0].len = 1; 160 spi_message_add_tail(&t[0], &m); 161 162 t[1].rx_buf = buf; 163 t[1].len = len; 164 spi_message_add_tail(&t[1], &m); 165 166 mutex_lock(&at25->lock); 167 168 status = spi_sync(at25->spi, &m); > 169 dev_dbg(&at25->spi->dev, "read %zu aux bytes --> %zd\n", len, status); 170 171 mutex_unlock(&at25->lock); 172 return status; 173 } 174 --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org [-- Attachment #2: .config.gz --] [-- Type: application/gzip, Size: 35507 bytes --] ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 2/3] nvmem: eeprom: at25: add support for FRAM @ 2021-04-09 18:34 ` kernel test robot 0 siblings, 0 replies; 9+ messages in thread From: kernel test robot @ 2021-04-09 18:34 UTC (permalink / raw) To: kbuild-all [-- Attachment #1: Type: text/plain, Size: 5145 bytes --] Hi Jiri, Thank you for the patch! Perhaps something to improve: [auto build test WARNING on char-misc/char-misc-testing] [also build test WARNING on robh/for-next linux/master linus/master v5.12-rc6 next-20210409] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch] url: https://github.com/0day-ci/linux/commits/Jiri-Prchal/nvmem-eeprom-add-support-for-FRAM/20210409-235546 base: https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/char-misc.git b195b20b7145bcae22ad261abc52d68336f5e913 config: arm64-randconfig-r033-20210409 (attached as .config) compiler: clang version 13.0.0 (https://github.com/llvm/llvm-project dd453a1389b6a7e6d9214b449d3c54981b1a89b6) reproduce (this is a W=1 build): wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # install arm64 cross compiling tool for clang build # apt-get install binutils-aarch64-linux-gnu # https://github.com/0day-ci/linux/commit/d335df5f35cd09d8f9d7f14e0bfbad45ab2bc33a git remote add linux-review https://github.com/0day-ci/linux git fetch --no-tags linux-review Jiri-Prchal/nvmem-eeprom-add-support-for-FRAM/20210409-235546 git checkout d335df5f35cd09d8f9d7f14e0bfbad45ab2bc33a # save the attached .config to linux build tree COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=arm64 If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot <lkp@intel.com> All warnings (new ones prefixed by >>): >> drivers/misc/eeprom/at25.c:169:59: warning: format specifies type 'size_t' (aka 'unsigned long') but the argument has type 'int' [-Wformat] dev_dbg(&at25->spi->dev, "read %zu aux bytes --> %zd\n", len, status); ~~~ ^~~ %d include/linux/dev_printk.h:123:39: note: expanded from macro 'dev_dbg' dynamic_dev_dbg(dev, dev_fmt(fmt), ##__VA_ARGS__) ~~~ ^~~~~~~~~~~ include/linux/dynamic_debug.h:162:19: note: expanded from macro 'dynamic_dev_dbg' dev, fmt, ##__VA_ARGS__) ~~~ ^~~~~~~~~~~ include/linux/dynamic_debug.h:147:56: note: expanded from macro '_dynamic_func_call' __dynamic_func_call(__UNIQUE_ID(ddebug), fmt, func, ##__VA_ARGS__) ^~~~~~~~~~~ include/linux/dynamic_debug.h:129:15: note: expanded from macro '__dynamic_func_call' func(&id, ##__VA_ARGS__); \ ^~~~~~~~~~~ >> drivers/misc/eeprom/at25.c:169:64: warning: format specifies type 'ssize_t' (aka 'long') but the argument has type 'int' [-Wformat] dev_dbg(&at25->spi->dev, "read %zu aux bytes --> %zd\n", len, status); ~~~ ^~~~~~ %d include/linux/dev_printk.h:123:39: note: expanded from macro 'dev_dbg' dynamic_dev_dbg(dev, dev_fmt(fmt), ##__VA_ARGS__) ~~~ ^~~~~~~~~~~ include/linux/dynamic_debug.h:162:19: note: expanded from macro 'dynamic_dev_dbg' dev, fmt, ##__VA_ARGS__) ~~~ ^~~~~~~~~~~ include/linux/dynamic_debug.h:147:56: note: expanded from macro '_dynamic_func_call' __dynamic_func_call(__UNIQUE_ID(ddebug), fmt, func, ##__VA_ARGS__) ^~~~~~~~~~~ include/linux/dynamic_debug.h:129:15: note: expanded from macro '__dynamic_func_call' func(&id, ##__VA_ARGS__); \ ^~~~~~~~~~~ 2 warnings generated. vim +169 drivers/misc/eeprom/at25.c 144 145 /* 146 * read extra registers as ID or serial number 147 */ 148 static int fm25_aux_read(struct at25_data *at25, char *buf, uint8_t command, 149 int len) 150 { 151 int status; 152 struct spi_transfer t[2]; 153 struct spi_message m; 154 155 spi_message_init(&m); 156 memset(t, 0, sizeof(t)); 157 158 t[0].tx_buf = &command; 159 t[0].len = 1; 160 spi_message_add_tail(&t[0], &m); 161 162 t[1].rx_buf = buf; 163 t[1].len = len; 164 spi_message_add_tail(&t[1], &m); 165 166 mutex_lock(&at25->lock); 167 168 status = spi_sync(at25->spi, &m); > 169 dev_dbg(&at25->spi->dev, "read %zu aux bytes --> %zd\n", len, status); 170 171 mutex_unlock(&at25->lock); 172 return status; 173 } 174 --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org [-- Attachment #2: config.gz --] [-- Type: application/gzip, Size: 35507 bytes --] ^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH 3/3] nvmem: eeprom: add documentation for FRAM 2021-04-09 15:47 [PATCH 0/3] nvmem: eeprom: add support for FRAM Jiri Prchal 2021-04-09 15:47 ` [PATCH 1/3] nvmem: add things " Jiri Prchal 2021-04-09 15:47 ` [PATCH 2/3] nvmem: eeprom: at25: add support " Jiri Prchal @ 2021-04-09 15:47 ` Jiri Prchal 2021-04-09 18:57 ` Rob Herring 2021-04-09 17:21 ` [PATCH 0/3] nvmem: eeprom: add support " Christian Eggers 3 siblings, 1 reply; 9+ messages in thread From: Jiri Prchal @ 2021-04-09 15:47 UTC (permalink / raw) To: devicetree, linux-kernel; +Cc: Rob Herring, Christian Eggers, Jiri Prchal Added dt binding documentation. Signed-off-by: Jiri Prchal <jiri.prchal@aksignal.cz> --- Documentation/devicetree/bindings/eeprom/at25.yaml | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/Documentation/devicetree/bindings/eeprom/at25.yaml b/Documentation/devicetree/bindings/eeprom/at25.yaml index 121a601db22e..f9191b67080d 100644 --- a/Documentation/devicetree/bindings/eeprom/at25.yaml +++ b/Documentation/devicetree/bindings/eeprom/at25.yaml @@ -4,7 +4,7 @@ $id: "http://devicetree.org/schemas/eeprom/at25.yaml#" $schema: "http://devicetree.org/meta-schemas/core.yaml#" -title: SPI EEPROMs compatible with Atmel's AT25 +title: SPI EEPROMs or FRAMs compatible with Atmel's AT25 maintainers: - Christian Eggers <ceggers@arri.de> @@ -31,6 +31,7 @@ properties: - microchip,25lc040 - st,m95m02 - st,m95256 + - cypress,fm25 - const: atmel,at25 @@ -48,7 +49,7 @@ properties: $ref: /schemas/types.yaml#/definitions/uint32 enum: [1, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768, 65536, 131072] description: - Size of the eeprom page. + Size of the eeprom page. FRAMs don't have pages. size: $ref: /schemas/types.yaml#/definitions/uint32 @@ -101,6 +102,7 @@ required: - compatible - reg - spi-max-frequency + # these are for eeproms only - pagesize - size - address-width @@ -127,3 +129,9 @@ examples: address-width = <16>; }; }; + + fram@1 { + compatible = "cypress,fm25"; + reg = <1>; + spi-max-frequency = <40000000>; + }; -- 2.25.1 ^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH 3/3] nvmem: eeprom: add documentation for FRAM 2021-04-09 15:47 ` [PATCH 3/3] nvmem: eeprom: add documentation " Jiri Prchal @ 2021-04-09 18:57 ` Rob Herring 0 siblings, 0 replies; 9+ messages in thread From: Rob Herring @ 2021-04-09 18:57 UTC (permalink / raw) To: Jiri Prchal; +Cc: linux-kernel, devicetree, Christian Eggers, Rob Herring On Fri, 09 Apr 2021 17:47:20 +0200, Jiri Prchal wrote: > Added dt binding documentation. > > Signed-off-by: Jiri Prchal <jiri.prchal@aksignal.cz> > --- > Documentation/devicetree/bindings/eeprom/at25.yaml | 12 ++++++++++-- > 1 file changed, 10 insertions(+), 2 deletions(-) > My bot found errors running 'make DT_CHECKER_FLAGS=-m dt_binding_check' on your patch (DT_CHECKER_FLAGS is new in v5.13): yamllint warnings/errors: dtschema/dtc warnings/errors: Documentation/devicetree/bindings/eeprom/at25.example.dts:40.17-27: Warning (reg_format): /example-0/fram@1:reg: property has invalid length (4 bytes) (#address-cells == 1, #size-cells == 1) Documentation/devicetree/bindings/eeprom/at25.example.dt.yaml: Warning (pci_device_reg): Failed prerequisite 'reg_format' Documentation/devicetree/bindings/eeprom/at25.example.dt.yaml: Warning (pci_device_bus_num): Failed prerequisite 'reg_format' Documentation/devicetree/bindings/eeprom/at25.example.dt.yaml: Warning (simple_bus_reg): Failed prerequisite 'reg_format' Documentation/devicetree/bindings/eeprom/at25.example.dt.yaml: Warning (i2c_bus_reg): Failed prerequisite 'reg_format' Documentation/devicetree/bindings/eeprom/at25.example.dt.yaml: Warning (spi_bus_reg): Failed prerequisite 'reg_format' /builds/robherring/linux-dt-review/Documentation/devicetree/bindings/eeprom/at25.example.dt.yaml: example-0: fram@1:reg:0: [1] is too short From schema: /usr/local/lib/python3.8/dist-packages/dtschema/schemas/reg.yaml /builds/robherring/linux-dt-review/Documentation/devicetree/bindings/eeprom/at25.example.dt.yaml: fram@1: $nodename:0: 'fram@1' does not match '^eeprom@[0-9a-f]{1,2}$' From schema: /builds/robherring/linux-dt-review/Documentation/devicetree/bindings/eeprom/at25.yaml /builds/robherring/linux-dt-review/Documentation/devicetree/bindings/eeprom/at25.example.dt.yaml: fram@1: compatible: 'oneOf' conditional failed, one must be fixed: ['cypress,fm25'] is too short 'atmel,at25' was expected From schema: /builds/robherring/linux-dt-review/Documentation/devicetree/bindings/eeprom/at25.yaml /builds/robherring/linux-dt-review/Documentation/devicetree/bindings/eeprom/at25.example.dt.yaml: fram@1: 'pagesize' is a required property From schema: /builds/robherring/linux-dt-review/Documentation/devicetree/bindings/eeprom/at25.yaml /builds/robherring/linux-dt-review/Documentation/devicetree/bindings/eeprom/at25.example.dt.yaml: fram@1: 'size' is a required property From schema: /builds/robherring/linux-dt-review/Documentation/devicetree/bindings/eeprom/at25.yaml /builds/robherring/linux-dt-review/Documentation/devicetree/bindings/eeprom/at25.example.dt.yaml: fram@1: 'address-width' is a required property From schema: /builds/robherring/linux-dt-review/Documentation/devicetree/bindings/eeprom/at25.yaml See https://patchwork.ozlabs.org/patch/1464448 This check can fail if there are any dependencies. The base for a patch series is generally the most recent rc1. If you already ran 'make dt_binding_check' and didn't see the above error(s), then make sure 'yamllint' is installed and dt-schema is up to date: pip3 install dtschema --upgrade Please check and re-submit. ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 0/3] nvmem: eeprom: add support for FRAM 2021-04-09 15:47 [PATCH 0/3] nvmem: eeprom: add support for FRAM Jiri Prchal ` (2 preceding siblings ...) 2021-04-09 15:47 ` [PATCH 3/3] nvmem: eeprom: add documentation " Jiri Prchal @ 2021-04-09 17:21 ` Christian Eggers 2021-04-12 6:06 ` Jiří Prchal 3 siblings, 1 reply; 9+ messages in thread From: Christian Eggers @ 2021-04-09 17:21 UTC (permalink / raw) To: devicetree, linux-kernel, Jiri Prchal; +Cc: Rob Herring, Jiri Prchal Hi Jiri, I have two Fujitsu different FRAMs running with the stock at25 driver. I set the page size equal to the device size (as FRAMs have no pages). Are you able to run your FRAM with the unmodified driver? I assume that getting the device geometry from the chip is vendor specific (in contrast to flash devices which have standard commands for this). I suppose that there is no much value getting vendor specific information from a chip. If the drivers knows the vendor, it should also know the chip (e.g. from the dt). regards Christian On Friday, 9 April 2021, 17:47:17 CEST, Jiri Prchal wrote: > Adds sopport for Cypress FRAMs. > > Jiri Prchal (3): > nvmem: eeprom: at25: add support for FRAM > nvmem: eeprom: at25: add support for FRAM > nvmem: eeprom: add documentation for FRAM > > .../devicetree/bindings/eeprom/at25.yaml | 12 +- > drivers/misc/eeprom/Kconfig | 5 +- > drivers/misc/eeprom/at25.c | 151 ++++++++++++++---- > drivers/nvmem/core.c | 4 + > include/linux/nvmem-provider.h | 1 + > 5 files changed, 139 insertions(+), 34 deletions(-) > > ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 0/3] nvmem: eeprom: add support for FRAM 2021-04-09 17:21 ` [PATCH 0/3] nvmem: eeprom: add support " Christian Eggers @ 2021-04-12 6:06 ` Jiří Prchal 0 siblings, 0 replies; 9+ messages in thread From: Jiří Prchal @ 2021-04-12 6:06 UTC (permalink / raw) To: Christian Eggers, devicetree, linux-kernel; +Cc: Rob Herring On 09. 04. 21 19:21, Christian Eggers wrote: > Hi Jiri, > > I have two Fujitsu different FRAMs running with the stock at25 driver. I set > the page size equal to the device size (as FRAMs have no pages). > > Are you able to run your FRAM with the unmodified driver? > > I assume that getting the device geometry from the chip is vendor specific (in > contrast to flash devices which have standard commands for this). I suppose > that there is no much value getting vendor specific information from a chip. If > the drivers knows the vendor, it should also know the chip (e.g. from the dt). Hi Christian, main purpose of this patch is to get serial number from this chip. I don't have it done yet, in older kernels I expose it as separate file in sysfs, but in this kernel no luck. So a post first things while I'm working on sernum exposing. Does your chip has serial number? Can you read it? Any help welcomed. Thanks Jiri PS: If standard EEPROMs has some commands to get size etc., why it's not used? I guess that size is increased as time goes while board is still the same, so isn't it annoying changing dt every new lot with bigger eeproms. ^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2021-04-12 6:06 UTC | newest] Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2021-04-09 15:47 [PATCH 0/3] nvmem: eeprom: add support for FRAM Jiri Prchal 2021-04-09 15:47 ` [PATCH 1/3] nvmem: add things " Jiri Prchal 2021-04-09 15:47 ` [PATCH 2/3] nvmem: eeprom: at25: add support " Jiri Prchal 2021-04-09 18:34 ` kernel test robot 2021-04-09 18:34 ` kernel test robot 2021-04-09 15:47 ` [PATCH 3/3] nvmem: eeprom: add documentation " Jiri Prchal 2021-04-09 18:57 ` Rob Herring 2021-04-09 17:21 ` [PATCH 0/3] nvmem: eeprom: add support " Christian Eggers 2021-04-12 6:06 ` Jiří Prchal
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.