* [PATCH v10 0/4] add support for FRAM
@ 2021-06-11 9:45 Jiri Prchal
2021-06-11 9:45 ` [PATCH v10 1/4] nvmem: prepare basics for FRAM support Jiri Prchal
` (4 more replies)
0 siblings, 5 replies; 14+ messages in thread
From: Jiri Prchal @ 2021-06-11 9:45 UTC (permalink / raw)
To: devicetree, linux-kernel
Cc: Rob Herring, Christian Eggers, Arnd Bergmann, Greg Kroah-Hartman,
Jiri Prchal
Adds support for Cypress FRAMs.
Jiri Prchal (4):
nvmem: prepare basics for FRAM support
nvmem: eeprom: at25: add support for FRAM
dt-bindings: nvmem: at25: add for FRAM support
nvmem: eeprom: at25: export FRAM serial num
.../ABI/testing/sysfs-class-spi-eeprom | 19 +++
.../devicetree/bindings/eeprom/at25.yaml | 31 +++-
drivers/misc/eeprom/Kconfig | 5 +-
drivers/misc/eeprom/at25.c | 161 ++++++++++++++----
drivers/nvmem/core.c | 4 +
include/linux/nvmem-provider.h | 1 +
6 files changed, 183 insertions(+), 38 deletions(-)
create mode 100644 Documentation/ABI/testing/sysfs-class-spi-eeprom
--
2.25.1
^ permalink raw reply [flat|nested] 14+ messages in thread
* [PATCH v10 1/4] nvmem: prepare basics for FRAM support
2021-06-11 9:45 [PATCH v10 0/4] add support for FRAM Jiri Prchal
@ 2021-06-11 9:45 ` Jiri Prchal
2021-06-11 9:45 ` [PATCH v10 2/4] nvmem: eeprom: at25: add support for FRAM Jiri Prchal
` (3 subsequent siblings)
4 siblings, 0 replies; 14+ messages in thread
From: Jiri Prchal @ 2021-06-11 9:45 UTC (permalink / raw)
To: devicetree, linux-kernel
Cc: Rob Herring, Christian Eggers, Arnd Bergmann, Greg Kroah-Hartman,
Jiri Prchal
Added enum and string for FRAM (ferroelectric RAM) to expose it as file
named "fram".
Added documentation of sysfs file.
Signed-off-by: Jiri Prchal <jiri.prchal@aksignal.cz>
---
v2: no change here
v3: resend and added more recipients
v4: resend
v5: no change here
v6: changed commit subject
v7: no change here
v8: changed subject
v9: no change here
v10: moved documentation to here
---
Documentation/ABI/testing/sysfs-class-spi-eeprom | 8 ++++++++
drivers/nvmem/core.c | 4 ++++
include/linux/nvmem-provider.h | 1 +
3 files changed, 13 insertions(+)
create mode 100644 Documentation/ABI/testing/sysfs-class-spi-eeprom
diff --git a/Documentation/ABI/testing/sysfs-class-spi-eeprom b/Documentation/ABI/testing/sysfs-class-spi-eeprom
new file mode 100644
index 000000000000..7447e242d415
--- /dev/null
+++ b/Documentation/ABI/testing/sysfs-class-spi-eeprom
@@ -0,0 +1,8 @@
+What: /sys/class/spi_master/spi<bus>/spi<bus>.<dev>/fram
+Date: June 2021
+KernelVersion: 5.14
+Contact: Jiri Prchal <jiri.prchal@aksignal.cz>
+Description:
+ Contains the FRAM binary data. Same as EEPROM, just another file
+ name to indicate that it employs ferroelectric process.
+ It performs write operations at bus speed - no write delays.
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] 14+ messages in thread
* [PATCH v10 2/4] nvmem: eeprom: at25: add support for FRAM
2021-06-11 9:45 [PATCH v10 0/4] add support for FRAM Jiri Prchal
2021-06-11 9:45 ` [PATCH v10 1/4] nvmem: prepare basics for FRAM support Jiri Prchal
@ 2021-06-11 9:45 ` Jiri Prchal
2021-06-16 18:59 ` kernel test robot
2021-06-22 7:44 ` kernel test robot
2021-06-11 9:46 ` [PATCH v10 3/4] dt-bindings: nvmem: at25: add for FRAM support Jiri Prchal
` (2 subsequent siblings)
4 siblings, 2 replies; 14+ messages in thread
From: Jiri Prchal @ 2021-06-11 9:45 UTC (permalink / raw)
To: devicetree, linux-kernel
Cc: Rob Herring, Christian Eggers, Arnd Bergmann, Greg Kroah-Hartman,
Jiri Prchal, kernel test robot
Added support for Cypress FRAMs FM25V[N]*.
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>
---
v2: fixed warning at %zd at int
Reported-by: kernel test robot <lkp@intel.com>
v3: resend and added more recipients
v4: resend
v5: used in-kernel function int_pow
v6: no change here
v7: moved definition of sernum size to patch 4
v8: changed buffer type to u8
v9: removed needless has_sernum
v10: removed double cast, added types of FRAM
---
drivers/misc/eeprom/Kconfig | 5 +-
drivers/misc/eeprom/at25.c | 134 ++++++++++++++++++++++++++++--------
2 files changed, 107 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..6ac2ddfd6833 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,9 @@
#include <linux/spi/spi.h>
#include <linux/spi/eeprom.h>
#include <linux/property.h>
+#include <linux/of.h>
+#include <linux/of_device.h>
+#include <linux/math.h>
/*
* NOTE: this is an *EEPROM* driver. The vagaries of product naming
@@ -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,8 @@ struct at25_data {
#define AT25_INSTR_BIT3 0x08 /* Additional address bit in instr */
+#define FM25_ID_LEN 9 /* ID 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 +67,9 @@ struct at25_data {
*/
#define EE_TIMEOUT 25
+#define IS_EEPROM 0
+#define IS_FRAM 1
+
/*-------------------------------------------------------------------------*/
#define io_limit PAGE_SIZE /* bytes */
@@ -129,6 +141,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, u8 *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 %d aux bytes --> %d\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 +345,37 @@ 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 at25_probe(struct spi_device *spi)
{
struct at25_data *at25 = NULL;
struct spi_eeprom chip;
int err;
int sr;
- int addrlen;
+ u8 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)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 +394,44 @@ 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 = int_pow(2, id[7] - 0x21 + 4) * 1024;
+
+ if (at25->chip.byte_len > 64 * 1024)
+ at25->chip.flags |= EE_ADDR3;
+ else
+ at25->chip.flags |= EE_ADDR2;
+
+ 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 +450,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] 14+ messages in thread
* [PATCH v10 3/4] dt-bindings: nvmem: at25: add for FRAM support
2021-06-11 9:45 [PATCH v10 0/4] add support for FRAM Jiri Prchal
2021-06-11 9:45 ` [PATCH v10 1/4] nvmem: prepare basics for FRAM support Jiri Prchal
2021-06-11 9:45 ` [PATCH v10 2/4] nvmem: eeprom: at25: add support for FRAM Jiri Prchal
@ 2021-06-11 9:46 ` Jiri Prchal
2021-06-11 9:46 ` [PATCH v10 4/4] nvmem: eeprom: at25: export FRAM serial num Jiri Prchal
2021-06-11 10:25 ` [PATCH v10 0/4] add support for FRAM Greg Kroah-Hartman
4 siblings, 0 replies; 14+ messages in thread
From: Jiri Prchal @ 2021-06-11 9:46 UTC (permalink / raw)
To: devicetree, linux-kernel
Cc: Rob Herring, Christian Eggers, Arnd Bergmann, Greg Kroah-Hartman,
Jiri Prchal, Rob Herring
Added dt binding documentation.
Signed-off-by: Jiri Prchal <jiri.prchal@aksignal.cz>
Reviewed-by: Rob Herring <robh@kernel.org>
---
v2: fixed dt_binding_check warnings thanks to Rob Herring
v3: resend and added more recipients
v4: resend
v5: no change here
v6: no change here
v7: no change here
v8: changed subject
v9: no change here
v10: no change here
---
.../devicetree/bindings/eeprom/at25.yaml | 31 +++++++++++++++----
1 file changed, 25 insertions(+), 6 deletions(-)
diff --git a/Documentation/devicetree/bindings/eeprom/at25.yaml b/Documentation/devicetree/bindings/eeprom/at25.yaml
index 121a601db22e..840ee7a83a14 100644
--- a/Documentation/devicetree/bindings/eeprom/at25.yaml
+++ b/Documentation/devicetree/bindings/eeprom/at25.yaml
@@ -4,14 +4,16 @@
$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>
properties:
$nodename:
- pattern: "^eeprom@[0-9a-f]{1,2}$"
+ anyOf:
+ - pattern: "^eeprom@[0-9a-f]{1,2}$"
+ - pattern: "^fram@[0-9a-f]{1,2}$"
# There are multiple known vendors who manufacture EEPROM chips compatible
# with Atmel's AT25. The compatible string requires two items where the
@@ -31,6 +33,7 @@ properties:
- microchip,25lc040
- st,m95m02
- st,m95256
+ - cypress,fm25
- const: atmel,at25
@@ -48,7 +51,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,9 +104,19 @@ required:
- compatible
- reg
- spi-max-frequency
- - pagesize
- - size
- - address-width
+
+allOf:
+ - if:
+ properties:
+ compatible:
+ not:
+ contains:
+ const: cypress,fm25
+ then:
+ required:
+ - pagesize
+ - size
+ - address-width
additionalProperties: false
@@ -126,4 +139,10 @@ examples:
size = <32768>;
address-width = <16>;
};
+
+ fram@1 {
+ compatible = "cypress,fm25", "atmel,at25";
+ reg = <1>;
+ spi-max-frequency = <40000000>;
+ };
};
--
2.25.1
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH v10 4/4] nvmem: eeprom: at25: export FRAM serial num
2021-06-11 9:45 [PATCH v10 0/4] add support for FRAM Jiri Prchal
` (2 preceding siblings ...)
2021-06-11 9:46 ` [PATCH v10 3/4] dt-bindings: nvmem: at25: add for FRAM support Jiri Prchal
@ 2021-06-11 9:46 ` Jiri Prchal
2021-06-16 20:10 ` kernel test robot
2021-06-22 9:33 ` kernel test robot
2021-06-11 10:25 ` [PATCH v10 0/4] add support for FRAM Greg Kroah-Hartman
4 siblings, 2 replies; 14+ messages in thread
From: Jiri Prchal @ 2021-06-11 9:46 UTC (permalink / raw)
To: devicetree, linux-kernel
Cc: Rob Herring, Christian Eggers, Arnd Bergmann, Greg Kroah-Hartman,
Jiri Prchal
This exports serial number of FRAM in sysfs file named "sernum".
Formatted in hex, each byte separated by space.
Example:
$ cat /sys/class/spi_master/spi0/spi0.0/sernum
ef cd ab 89 67 45 23 01
Signed-off-by: Jiri Prchal <jiri.prchal@aksignal.cz>
---
v2: no change here
v3: resend and added more recipients
v4: resend
v5: reworked up on Greg comments: no spaces in string, sysfs done correctly
v6: no change here
v7: moved FM25_SN_LEN, static array, used sysfs_emit, DEVICE_ATTR_RO
v8: clarify sysfs_emit format
v9: sizeof parentheses, export with spaces MSB first
v10: moved documentation to here
---
.../ABI/testing/sysfs-class-spi-eeprom | 11 ++++++++
drivers/misc/eeprom/at25.c | 27 +++++++++++++++++++
2 files changed, 38 insertions(+)
diff --git a/Documentation/ABI/testing/sysfs-class-spi-eeprom b/Documentation/ABI/testing/sysfs-class-spi-eeprom
index 7447e242d415..1ff757982079 100644
--- a/Documentation/ABI/testing/sysfs-class-spi-eeprom
+++ b/Documentation/ABI/testing/sysfs-class-spi-eeprom
@@ -6,3 +6,14 @@ Description:
Contains the FRAM binary data. Same as EEPROM, just another file
name to indicate that it employs ferroelectric process.
It performs write operations at bus speed - no write delays.
+
+What: /sys/class/spi_master/spi<bus>/spi<bus>.<dev>/sernum
+Date: May 2021
+KernelVersion: 5.14
+Contact: Jiri Prchal <jiri.prchal@aksignal.cz>
+Description:
+ Contains the serial number of the Cypress FRAM (FM25VN) if it is
+ present. It will be displayed as a 8 byte hex string, as read
+ from the device.
+
+ This is a read-only attribute.
diff --git a/drivers/misc/eeprom/at25.c b/drivers/misc/eeprom/at25.c
index 6ac2ddfd6833..6e26de68a001 100644
--- a/drivers/misc/eeprom/at25.c
+++ b/drivers/misc/eeprom/at25.c
@@ -31,6 +31,7 @@
* AT25M02, AT25128B
*/
+#define FM25_SN_LEN 8 /* serial number length */
struct at25_data {
struct spi_device *spi;
struct mutex lock;
@@ -38,6 +39,7 @@ struct at25_data {
unsigned addrlen;
struct nvmem_config nvmem_config;
struct nvmem_device *nvmem;
+ u8 sernum[FM25_SN_LEN];
};
#define AT25_WREN 0x06 /* latch the write enable */
@@ -171,6 +173,21 @@ static int fm25_aux_read(struct at25_data *at25, u8 *buf, uint8_t command,
return status;
}
+static ssize_t sernum_show(struct device *dev, struct device_attribute *attr, char *buf)
+{
+ struct at25_data *at25;
+
+ at25 = dev_get_drvdata(dev);
+ return sysfs_emit(buf, "%*ph\n", sizeof(at25->sernum), at25->sernum);
+}
+static DEVICE_ATTR_RO(sernum);
+
+static struct attribute *sernum_attrs[] = {
+ &dev_attr_sernum.attr,
+ NULL,
+};
+ATTRIBUTE_GROUPS(sernum);
+
static int at25_ee_write(void *priv, unsigned int off, void *val, size_t count)
{
struct at25_data *at25 = priv;
@@ -359,6 +376,8 @@ static int at25_probe(struct spi_device *spi)
int err;
int sr;
u8 id[FM25_ID_LEN];
+ u8 sernum[FM25_SN_LEN];
+ int i;
const struct of_device_id *match;
int is_fram = 0;
@@ -415,6 +434,13 @@ static int at25_probe(struct spi_device *spi)
else
at25->chip.flags |= EE_ADDR2;
+ if (id[8]) {
+ fm25_aux_read(at25, sernum, FM25_RDSN, FM25_SN_LEN);
+ /* swap byte order */
+ for (i = 0; i < FM25_SN_LEN; i++)
+ at25->sernum[i] = sernum[FM25_SN_LEN - 1 - i];
+ }
+
at25->chip.page_size = PAGE_SIZE;
strncpy(at25->chip.name, "fm25", sizeof(at25->chip.name));
}
@@ -465,6 +491,7 @@ static struct spi_driver at25_driver = {
.driver = {
.name = "at25",
.of_match_table = at25_of_match,
+ .dev_groups = sernum_groups,
},
.probe = at25_probe,
};
--
2.25.1
^ permalink raw reply related [flat|nested] 14+ messages in thread
* Re: [PATCH v10 0/4] add support for FRAM
2021-06-11 9:45 [PATCH v10 0/4] add support for FRAM Jiri Prchal
` (3 preceding siblings ...)
2021-06-11 9:46 ` [PATCH v10 4/4] nvmem: eeprom: at25: export FRAM serial num Jiri Prchal
@ 2021-06-11 10:25 ` Greg Kroah-Hartman
4 siblings, 0 replies; 14+ messages in thread
From: Greg Kroah-Hartman @ 2021-06-11 10:25 UTC (permalink / raw)
To: Jiri Prchal
Cc: devicetree, linux-kernel, Rob Herring, Christian Eggers, Arnd Bergmann
On Fri, Jun 11, 2021 at 11:45:57AM +0200, Jiri Prchal wrote:
> Adds support for Cypress FRAMs.
>
> Jiri Prchal (4):
> nvmem: prepare basics for FRAM support
> nvmem: eeprom: at25: add support for FRAM
> dt-bindings: nvmem: at25: add for FRAM support
> nvmem: eeprom: at25: export FRAM serial num
>
> .../ABI/testing/sysfs-class-spi-eeprom | 19 +++
> .../devicetree/bindings/eeprom/at25.yaml | 31 +++-
> drivers/misc/eeprom/Kconfig | 5 +-
> drivers/misc/eeprom/at25.c | 161 ++++++++++++++----
> drivers/nvmem/core.c | 4 +
> include/linux/nvmem-provider.h | 1 +
> 6 files changed, 183 insertions(+), 38 deletions(-)
> create mode 100644 Documentation/ABI/testing/sysfs-class-spi-eeprom
>
> --
> 2.25.1
>
Looks good to me, now queued up. Thanks for sticking with this!
greg k-h
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH v10 2/4] nvmem: eeprom: at25: add support for FRAM
2021-06-11 9:45 ` [PATCH v10 2/4] nvmem: eeprom: at25: add support for FRAM Jiri Prchal
@ 2021-06-16 18:59 ` kernel test robot
2021-06-22 7:44 ` kernel test robot
1 sibling, 0 replies; 14+ messages in thread
From: kernel test robot @ 2021-06-16 18:59 UTC (permalink / raw)
To: Jiri Prchal, devicetree, linux-kernel
Cc: kbuild-all, clang-built-linux, Rob Herring, Christian Eggers,
Arnd Bergmann, Greg Kroah-Hartman, Jiri Prchal,
kernel test robot
[-- Attachment #1: Type: text/plain, Size: 5861 bytes --]
Hi Jiri,
Thank you for the patch! Perhaps something to improve:
[auto build test WARNING on robh/for-next]
[also build test WARNING on linux/master linus/master v5.13-rc6]
[cannot apply to char-misc/char-misc-testing next-20210616]
[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/add-support-for-FRAM/20210616-203024
base: https://git.kernel.org/pub/scm/linux/kernel/git/robh/linux.git for-next
config: x86_64-randconfig-a015-20210615 (attached as .config)
compiler: clang version 13.0.0 (https://github.com/llvm/llvm-project 64720f57bea6a6bf033feef4a5751ab9c0c3b401)
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 x86_64 cross compiling tool for clang build
# apt-get install binutils-x86-64-linux-gnu
# https://github.com/0day-ci/linux/commit/663658b01091a6ef4239088cc41d96821ab6d43e
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review Jiri-Prchal/add-support-for-FRAM/20210616-203024
git checkout 663658b01091a6ef4239088cc41d96821ab6d43e
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=x86_64
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:367:13: warning: cast to smaller integer type 'int' from 'const void *' [-Wvoid-pointer-to-int-cast]
is_fram = (int)match->data;
^~~~~~~~~~~~~~~~
1 warning generated.
vim +367 drivers/misc/eeprom/at25.c
354
355 static int at25_probe(struct spi_device *spi)
356 {
357 struct at25_data *at25 = NULL;
358 struct spi_eeprom chip;
359 int err;
360 int sr;
361 u8 id[FM25_ID_LEN];
362 const struct of_device_id *match;
363 int is_fram = 0;
364
365 match = of_match_device(of_match_ptr(at25_of_match), &spi->dev);
366 if (match)
> 367 is_fram = (int)match->data;
368
369 /* Chip description */
370 if (!spi->dev.platform_data) {
371 if (!is_fram) {
372 err = at25_fw_to_chip(&spi->dev, &chip);
373 if (err)
374 return err;
375 }
376 } else
377 chip = *(struct spi_eeprom *)spi->dev.platform_data;
378
379 /* Ping the chip ... the status register is pretty portable,
380 * unlike probing manufacturer IDs. We do expect that system
381 * firmware didn't write it in the past few milliseconds!
382 */
383 sr = spi_w8r8(spi, AT25_RDSR);
384 if (sr < 0 || sr & AT25_SR_nRDY) {
385 dev_dbg(&spi->dev, "rdsr --> %d (%02x)\n", sr, sr);
386 return -ENXIO;
387 }
388
389 at25 = devm_kzalloc(&spi->dev, sizeof(struct at25_data), GFP_KERNEL);
390 if (!at25)
391 return -ENOMEM;
392
393 mutex_init(&at25->lock);
394 at25->chip = chip;
395 at25->spi = spi;
396 spi_set_drvdata(spi, at25);
397
398 if (is_fram) {
399 /* Get ID of chip */
400 fm25_aux_read(at25, id, FM25_RDID, FM25_ID_LEN);
401 if (id[6] != 0xc2) {
402 dev_err(&spi->dev,
403 "Error: no Cypress FRAM (id %02x)\n", id[6]);
404 return -ENODEV;
405 }
406 /* set size found in ID */
407 if (id[7] < 0x21 || id[7] > 0x26) {
408 dev_err(&spi->dev, "Error: unsupported size (id %02x)\n", id[7]);
409 return -ENODEV;
410 }
411 chip.byte_len = int_pow(2, id[7] - 0x21 + 4) * 1024;
412
413 if (at25->chip.byte_len > 64 * 1024)
414 at25->chip.flags |= EE_ADDR3;
415 else
416 at25->chip.flags |= EE_ADDR2;
417
418 at25->chip.page_size = PAGE_SIZE;
419 strncpy(at25->chip.name, "fm25", sizeof(at25->chip.name));
420 }
421
422 /* For now we only support 8/16/24 bit addressing */
423 if (at25->chip.flags & EE_ADDR1)
424 at25->addrlen = 1;
425 else if (at25->chip.flags & EE_ADDR2)
426 at25->addrlen = 2;
427 else if (at25->chip.flags & EE_ADDR3)
428 at25->addrlen = 3;
429 else {
430 dev_dbg(&spi->dev, "unsupported address type\n");
431 return -EINVAL;
432 }
433
434 at25->nvmem_config.type = is_fram ? NVMEM_TYPE_FRAM : NVMEM_TYPE_EEPROM;
435 at25->nvmem_config.name = dev_name(&spi->dev);
436 at25->nvmem_config.dev = &spi->dev;
437 at25->nvmem_config.read_only = chip.flags & EE_READONLY;
438 at25->nvmem_config.root_only = true;
439 at25->nvmem_config.owner = THIS_MODULE;
440 at25->nvmem_config.compat = true;
441 at25->nvmem_config.base_dev = &spi->dev;
442 at25->nvmem_config.reg_read = at25_ee_read;
443 at25->nvmem_config.reg_write = at25_ee_write;
444 at25->nvmem_config.priv = at25;
445 at25->nvmem_config.stride = 1;
446 at25->nvmem_config.word_size = 1;
447 at25->nvmem_config.size = chip.byte_len;
448
449 at25->nvmem = devm_nvmem_register(&spi->dev, &at25->nvmem_config);
450 if (IS_ERR(at25->nvmem))
451 return PTR_ERR(at25->nvmem);
452
453 dev_info(&spi->dev, "%d %s %s %s%s, pagesize %u\n",
454 (chip.byte_len < 1024) ? chip.byte_len : (chip.byte_len / 1024),
455 (chip.byte_len < 1024) ? "Byte" : "KByte",
456 at25->chip.name, is_fram ? "fram" : "eeprom",
457 (chip.flags & EE_READONLY) ? " (readonly)" : "",
458 at25->chip.page_size);
459 return 0;
460 }
461
---
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: 40655 bytes --]
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH v10 2/4] nvmem: eeprom: at25: add support for FRAM
@ 2021-06-16 18:59 ` kernel test robot
0 siblings, 0 replies; 14+ messages in thread
From: kernel test robot @ 2021-06-16 18:59 UTC (permalink / raw)
To: kbuild-all
[-- Attachment #1: Type: text/plain, Size: 6015 bytes --]
Hi Jiri,
Thank you for the patch! Perhaps something to improve:
[auto build test WARNING on robh/for-next]
[also build test WARNING on linux/master linus/master v5.13-rc6]
[cannot apply to char-misc/char-misc-testing next-20210616]
[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/add-support-for-FRAM/20210616-203024
base: https://git.kernel.org/pub/scm/linux/kernel/git/robh/linux.git for-next
config: x86_64-randconfig-a015-20210615 (attached as .config)
compiler: clang version 13.0.0 (https://github.com/llvm/llvm-project 64720f57bea6a6bf033feef4a5751ab9c0c3b401)
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 x86_64 cross compiling tool for clang build
# apt-get install binutils-x86-64-linux-gnu
# https://github.com/0day-ci/linux/commit/663658b01091a6ef4239088cc41d96821ab6d43e
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review Jiri-Prchal/add-support-for-FRAM/20210616-203024
git checkout 663658b01091a6ef4239088cc41d96821ab6d43e
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=x86_64
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:367:13: warning: cast to smaller integer type 'int' from 'const void *' [-Wvoid-pointer-to-int-cast]
is_fram = (int)match->data;
^~~~~~~~~~~~~~~~
1 warning generated.
vim +367 drivers/misc/eeprom/at25.c
354
355 static int at25_probe(struct spi_device *spi)
356 {
357 struct at25_data *at25 = NULL;
358 struct spi_eeprom chip;
359 int err;
360 int sr;
361 u8 id[FM25_ID_LEN];
362 const struct of_device_id *match;
363 int is_fram = 0;
364
365 match = of_match_device(of_match_ptr(at25_of_match), &spi->dev);
366 if (match)
> 367 is_fram = (int)match->data;
368
369 /* Chip description */
370 if (!spi->dev.platform_data) {
371 if (!is_fram) {
372 err = at25_fw_to_chip(&spi->dev, &chip);
373 if (err)
374 return err;
375 }
376 } else
377 chip = *(struct spi_eeprom *)spi->dev.platform_data;
378
379 /* Ping the chip ... the status register is pretty portable,
380 * unlike probing manufacturer IDs. We do expect that system
381 * firmware didn't write it in the past few milliseconds!
382 */
383 sr = spi_w8r8(spi, AT25_RDSR);
384 if (sr < 0 || sr & AT25_SR_nRDY) {
385 dev_dbg(&spi->dev, "rdsr --> %d (%02x)\n", sr, sr);
386 return -ENXIO;
387 }
388
389 at25 = devm_kzalloc(&spi->dev, sizeof(struct at25_data), GFP_KERNEL);
390 if (!at25)
391 return -ENOMEM;
392
393 mutex_init(&at25->lock);
394 at25->chip = chip;
395 at25->spi = spi;
396 spi_set_drvdata(spi, at25);
397
398 if (is_fram) {
399 /* Get ID of chip */
400 fm25_aux_read(at25, id, FM25_RDID, FM25_ID_LEN);
401 if (id[6] != 0xc2) {
402 dev_err(&spi->dev,
403 "Error: no Cypress FRAM (id %02x)\n", id[6]);
404 return -ENODEV;
405 }
406 /* set size found in ID */
407 if (id[7] < 0x21 || id[7] > 0x26) {
408 dev_err(&spi->dev, "Error: unsupported size (id %02x)\n", id[7]);
409 return -ENODEV;
410 }
411 chip.byte_len = int_pow(2, id[7] - 0x21 + 4) * 1024;
412
413 if (at25->chip.byte_len > 64 * 1024)
414 at25->chip.flags |= EE_ADDR3;
415 else
416 at25->chip.flags |= EE_ADDR2;
417
418 at25->chip.page_size = PAGE_SIZE;
419 strncpy(at25->chip.name, "fm25", sizeof(at25->chip.name));
420 }
421
422 /* For now we only support 8/16/24 bit addressing */
423 if (at25->chip.flags & EE_ADDR1)
424 at25->addrlen = 1;
425 else if (at25->chip.flags & EE_ADDR2)
426 at25->addrlen = 2;
427 else if (at25->chip.flags & EE_ADDR3)
428 at25->addrlen = 3;
429 else {
430 dev_dbg(&spi->dev, "unsupported address type\n");
431 return -EINVAL;
432 }
433
434 at25->nvmem_config.type = is_fram ? NVMEM_TYPE_FRAM : NVMEM_TYPE_EEPROM;
435 at25->nvmem_config.name = dev_name(&spi->dev);
436 at25->nvmem_config.dev = &spi->dev;
437 at25->nvmem_config.read_only = chip.flags & EE_READONLY;
438 at25->nvmem_config.root_only = true;
439 at25->nvmem_config.owner = THIS_MODULE;
440 at25->nvmem_config.compat = true;
441 at25->nvmem_config.base_dev = &spi->dev;
442 at25->nvmem_config.reg_read = at25_ee_read;
443 at25->nvmem_config.reg_write = at25_ee_write;
444 at25->nvmem_config.priv = at25;
445 at25->nvmem_config.stride = 1;
446 at25->nvmem_config.word_size = 1;
447 at25->nvmem_config.size = chip.byte_len;
448
449 at25->nvmem = devm_nvmem_register(&spi->dev, &at25->nvmem_config);
450 if (IS_ERR(at25->nvmem))
451 return PTR_ERR(at25->nvmem);
452
453 dev_info(&spi->dev, "%d %s %s %s%s, pagesize %u\n",
454 (chip.byte_len < 1024) ? chip.byte_len : (chip.byte_len / 1024),
455 (chip.byte_len < 1024) ? "Byte" : "KByte",
456 at25->chip.name, is_fram ? "fram" : "eeprom",
457 (chip.flags & EE_READONLY) ? " (readonly)" : "",
458 at25->chip.page_size);
459 return 0;
460 }
461
---
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: 40655 bytes --]
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH v10 4/4] nvmem: eeprom: at25: export FRAM serial num
2021-06-11 9:46 ` [PATCH v10 4/4] nvmem: eeprom: at25: export FRAM serial num Jiri Prchal
@ 2021-06-16 20:10 ` kernel test robot
2021-06-22 9:33 ` kernel test robot
1 sibling, 0 replies; 14+ messages in thread
From: kernel test robot @ 2021-06-16 20:10 UTC (permalink / raw)
To: Jiri Prchal, devicetree, linux-kernel
Cc: kbuild-all, clang-built-linux, Rob Herring, Christian Eggers,
Arnd Bergmann, Greg Kroah-Hartman, Jiri Prchal
[-- Attachment #1: Type: text/plain, Size: 2662 bytes --]
Hi Jiri,
Thank you for the patch! Perhaps something to improve:
[auto build test WARNING on robh/for-next]
[also build test WARNING on linux/master linus/master v5.13-rc6]
[cannot apply to char-misc/char-misc-testing next-20210616]
[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/add-support-for-FRAM/20210616-203024
base: https://git.kernel.org/pub/scm/linux/kernel/git/robh/linux.git for-next
config: x86_64-randconfig-a015-20210615 (attached as .config)
compiler: clang version 13.0.0 (https://github.com/llvm/llvm-project 64720f57bea6a6bf033feef4a5751ab9c0c3b401)
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 x86_64 cross compiling tool for clang build
# apt-get install binutils-x86-64-linux-gnu
# https://github.com/0day-ci/linux/commit/a1e83140e4bcb84fc663fdb074e2cbb5a771bfc8
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review Jiri-Prchal/add-support-for-FRAM/20210616-203024
git checkout a1e83140e4bcb84fc663fdb074e2cbb5a771bfc8
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=x86_64
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:181:28: warning: field width should have type 'int', but argument has type 'unsigned long' [-Wformat]
return sysfs_emit(buf, "%*ph\n", sizeof(at25->sernum), at25->sernum);
~~^ ~~~~~~~~~~~~~~~~~~~~
drivers/misc/eeprom/at25.c:386:13: warning: cast to smaller integer type 'int' from 'const void *' [-Wvoid-pointer-to-int-cast]
is_fram = (int)match->data;
^~~~~~~~~~~~~~~~
2 warnings generated.
vim +181 drivers/misc/eeprom/at25.c
175
176 static ssize_t sernum_show(struct device *dev, struct device_attribute *attr, char *buf)
177 {
178 struct at25_data *at25;
179
180 at25 = dev_get_drvdata(dev);
> 181 return sysfs_emit(buf, "%*ph\n", sizeof(at25->sernum), at25->sernum);
182 }
183 static DEVICE_ATTR_RO(sernum);
184
---
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: 40655 bytes --]
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH v10 4/4] nvmem: eeprom: at25: export FRAM serial num
@ 2021-06-16 20:10 ` kernel test robot
0 siblings, 0 replies; 14+ messages in thread
From: kernel test robot @ 2021-06-16 20:10 UTC (permalink / raw)
To: kbuild-all
[-- Attachment #1: Type: text/plain, Size: 2721 bytes --]
Hi Jiri,
Thank you for the patch! Perhaps something to improve:
[auto build test WARNING on robh/for-next]
[also build test WARNING on linux/master linus/master v5.13-rc6]
[cannot apply to char-misc/char-misc-testing next-20210616]
[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/add-support-for-FRAM/20210616-203024
base: https://git.kernel.org/pub/scm/linux/kernel/git/robh/linux.git for-next
config: x86_64-randconfig-a015-20210615 (attached as .config)
compiler: clang version 13.0.0 (https://github.com/llvm/llvm-project 64720f57bea6a6bf033feef4a5751ab9c0c3b401)
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 x86_64 cross compiling tool for clang build
# apt-get install binutils-x86-64-linux-gnu
# https://github.com/0day-ci/linux/commit/a1e83140e4bcb84fc663fdb074e2cbb5a771bfc8
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review Jiri-Prchal/add-support-for-FRAM/20210616-203024
git checkout a1e83140e4bcb84fc663fdb074e2cbb5a771bfc8
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=x86_64
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:181:28: warning: field width should have type 'int', but argument has type 'unsigned long' [-Wformat]
return sysfs_emit(buf, "%*ph\n", sizeof(at25->sernum), at25->sernum);
~~^ ~~~~~~~~~~~~~~~~~~~~
drivers/misc/eeprom/at25.c:386:13: warning: cast to smaller integer type 'int' from 'const void *' [-Wvoid-pointer-to-int-cast]
is_fram = (int)match->data;
^~~~~~~~~~~~~~~~
2 warnings generated.
vim +181 drivers/misc/eeprom/at25.c
175
176 static ssize_t sernum_show(struct device *dev, struct device_attribute *attr, char *buf)
177 {
178 struct at25_data *at25;
179
180 at25 = dev_get_drvdata(dev);
> 181 return sysfs_emit(buf, "%*ph\n", sizeof(at25->sernum), at25->sernum);
182 }
183 static DEVICE_ATTR_RO(sernum);
184
---
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: 40655 bytes --]
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH v10 2/4] nvmem: eeprom: at25: add support for FRAM
2021-06-11 9:45 ` [PATCH v10 2/4] nvmem: eeprom: at25: add support for FRAM Jiri Prchal
@ 2021-06-22 7:44 ` kernel test robot
2021-06-22 7:44 ` kernel test robot
1 sibling, 0 replies; 14+ messages in thread
From: kernel test robot @ 2021-06-22 7:44 UTC (permalink / raw)
To: Jiri Prchal, devicetree, linux-kernel
Cc: kbuild-all, Rob Herring, Christian Eggers, Arnd Bergmann,
Greg Kroah-Hartman, Jiri Prchal, kernel test robot
[-- Attachment #1: Type: text/plain, Size: 5668 bytes --]
Hi Jiri,
Thank you for the patch! Perhaps something to improve:
[auto build test WARNING on robh/for-next]
[also build test WARNING on linux/master linus/master v5.13-rc7]
[cannot apply to char-misc/char-misc-testing next-20210621]
[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/add-support-for-FRAM/20210616-203024
base: https://git.kernel.org/pub/scm/linux/kernel/git/robh/linux.git for-next
config: mips-randconfig-r035-20210622 (attached as .config)
compiler: mips64-linux-gcc (GCC) 9.3.0
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
# https://github.com/0day-ci/linux/commit/663658b01091a6ef4239088cc41d96821ab6d43e
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review Jiri-Prchal/add-support-for-FRAM/20210616-203024
git checkout 663658b01091a6ef4239088cc41d96821ab6d43e
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross ARCH=mips
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: In function 'at25_probe':
>> drivers/misc/eeprom/at25.c:367:13: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
367 | is_fram = (int)match->data;
| ^
vim +367 drivers/misc/eeprom/at25.c
354
355 static int at25_probe(struct spi_device *spi)
356 {
357 struct at25_data *at25 = NULL;
358 struct spi_eeprom chip;
359 int err;
360 int sr;
361 u8 id[FM25_ID_LEN];
362 const struct of_device_id *match;
363 int is_fram = 0;
364
365 match = of_match_device(of_match_ptr(at25_of_match), &spi->dev);
366 if (match)
> 367 is_fram = (int)match->data;
368
369 /* Chip description */
370 if (!spi->dev.platform_data) {
371 if (!is_fram) {
372 err = at25_fw_to_chip(&spi->dev, &chip);
373 if (err)
374 return err;
375 }
376 } else
377 chip = *(struct spi_eeprom *)spi->dev.platform_data;
378
379 /* Ping the chip ... the status register is pretty portable,
380 * unlike probing manufacturer IDs. We do expect that system
381 * firmware didn't write it in the past few milliseconds!
382 */
383 sr = spi_w8r8(spi, AT25_RDSR);
384 if (sr < 0 || sr & AT25_SR_nRDY) {
385 dev_dbg(&spi->dev, "rdsr --> %d (%02x)\n", sr, sr);
386 return -ENXIO;
387 }
388
389 at25 = devm_kzalloc(&spi->dev, sizeof(struct at25_data), GFP_KERNEL);
390 if (!at25)
391 return -ENOMEM;
392
393 mutex_init(&at25->lock);
394 at25->chip = chip;
395 at25->spi = spi;
396 spi_set_drvdata(spi, at25);
397
398 if (is_fram) {
399 /* Get ID of chip */
400 fm25_aux_read(at25, id, FM25_RDID, FM25_ID_LEN);
401 if (id[6] != 0xc2) {
402 dev_err(&spi->dev,
403 "Error: no Cypress FRAM (id %02x)\n", id[6]);
404 return -ENODEV;
405 }
406 /* set size found in ID */
407 if (id[7] < 0x21 || id[7] > 0x26) {
408 dev_err(&spi->dev, "Error: unsupported size (id %02x)\n", id[7]);
409 return -ENODEV;
410 }
411 chip.byte_len = int_pow(2, id[7] - 0x21 + 4) * 1024;
412
413 if (at25->chip.byte_len > 64 * 1024)
414 at25->chip.flags |= EE_ADDR3;
415 else
416 at25->chip.flags |= EE_ADDR2;
417
418 at25->chip.page_size = PAGE_SIZE;
419 strncpy(at25->chip.name, "fm25", sizeof(at25->chip.name));
420 }
421
422 /* For now we only support 8/16/24 bit addressing */
423 if (at25->chip.flags & EE_ADDR1)
424 at25->addrlen = 1;
425 else if (at25->chip.flags & EE_ADDR2)
426 at25->addrlen = 2;
427 else if (at25->chip.flags & EE_ADDR3)
428 at25->addrlen = 3;
429 else {
430 dev_dbg(&spi->dev, "unsupported address type\n");
431 return -EINVAL;
432 }
433
434 at25->nvmem_config.type = is_fram ? NVMEM_TYPE_FRAM : NVMEM_TYPE_EEPROM;
435 at25->nvmem_config.name = dev_name(&spi->dev);
436 at25->nvmem_config.dev = &spi->dev;
437 at25->nvmem_config.read_only = chip.flags & EE_READONLY;
438 at25->nvmem_config.root_only = true;
439 at25->nvmem_config.owner = THIS_MODULE;
440 at25->nvmem_config.compat = true;
441 at25->nvmem_config.base_dev = &spi->dev;
442 at25->nvmem_config.reg_read = at25_ee_read;
443 at25->nvmem_config.reg_write = at25_ee_write;
444 at25->nvmem_config.priv = at25;
445 at25->nvmem_config.stride = 1;
446 at25->nvmem_config.word_size = 1;
447 at25->nvmem_config.size = chip.byte_len;
448
449 at25->nvmem = devm_nvmem_register(&spi->dev, &at25->nvmem_config);
450 if (IS_ERR(at25->nvmem))
451 return PTR_ERR(at25->nvmem);
452
453 dev_info(&spi->dev, "%d %s %s %s%s, pagesize %u\n",
454 (chip.byte_len < 1024) ? chip.byte_len : (chip.byte_len / 1024),
455 (chip.byte_len < 1024) ? "Byte" : "KByte",
456 at25->chip.name, is_fram ? "fram" : "eeprom",
457 (chip.flags & EE_READONLY) ? " (readonly)" : "",
458 at25->chip.page_size);
459 return 0;
460 }
461
---
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: 25700 bytes --]
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH v10 2/4] nvmem: eeprom: at25: add support for FRAM
@ 2021-06-22 7:44 ` kernel test robot
0 siblings, 0 replies; 14+ messages in thread
From: kernel test robot @ 2021-06-22 7:44 UTC (permalink / raw)
To: kbuild-all
[-- Attachment #1: Type: text/plain, Size: 5820 bytes --]
Hi Jiri,
Thank you for the patch! Perhaps something to improve:
[auto build test WARNING on robh/for-next]
[also build test WARNING on linux/master linus/master v5.13-rc7]
[cannot apply to char-misc/char-misc-testing next-20210621]
[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/add-support-for-FRAM/20210616-203024
base: https://git.kernel.org/pub/scm/linux/kernel/git/robh/linux.git for-next
config: mips-randconfig-r035-20210622 (attached as .config)
compiler: mips64-linux-gcc (GCC) 9.3.0
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
# https://github.com/0day-ci/linux/commit/663658b01091a6ef4239088cc41d96821ab6d43e
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review Jiri-Prchal/add-support-for-FRAM/20210616-203024
git checkout 663658b01091a6ef4239088cc41d96821ab6d43e
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross ARCH=mips
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: In function 'at25_probe':
>> drivers/misc/eeprom/at25.c:367:13: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
367 | is_fram = (int)match->data;
| ^
vim +367 drivers/misc/eeprom/at25.c
354
355 static int at25_probe(struct spi_device *spi)
356 {
357 struct at25_data *at25 = NULL;
358 struct spi_eeprom chip;
359 int err;
360 int sr;
361 u8 id[FM25_ID_LEN];
362 const struct of_device_id *match;
363 int is_fram = 0;
364
365 match = of_match_device(of_match_ptr(at25_of_match), &spi->dev);
366 if (match)
> 367 is_fram = (int)match->data;
368
369 /* Chip description */
370 if (!spi->dev.platform_data) {
371 if (!is_fram) {
372 err = at25_fw_to_chip(&spi->dev, &chip);
373 if (err)
374 return err;
375 }
376 } else
377 chip = *(struct spi_eeprom *)spi->dev.platform_data;
378
379 /* Ping the chip ... the status register is pretty portable,
380 * unlike probing manufacturer IDs. We do expect that system
381 * firmware didn't write it in the past few milliseconds!
382 */
383 sr = spi_w8r8(spi, AT25_RDSR);
384 if (sr < 0 || sr & AT25_SR_nRDY) {
385 dev_dbg(&spi->dev, "rdsr --> %d (%02x)\n", sr, sr);
386 return -ENXIO;
387 }
388
389 at25 = devm_kzalloc(&spi->dev, sizeof(struct at25_data), GFP_KERNEL);
390 if (!at25)
391 return -ENOMEM;
392
393 mutex_init(&at25->lock);
394 at25->chip = chip;
395 at25->spi = spi;
396 spi_set_drvdata(spi, at25);
397
398 if (is_fram) {
399 /* Get ID of chip */
400 fm25_aux_read(at25, id, FM25_RDID, FM25_ID_LEN);
401 if (id[6] != 0xc2) {
402 dev_err(&spi->dev,
403 "Error: no Cypress FRAM (id %02x)\n", id[6]);
404 return -ENODEV;
405 }
406 /* set size found in ID */
407 if (id[7] < 0x21 || id[7] > 0x26) {
408 dev_err(&spi->dev, "Error: unsupported size (id %02x)\n", id[7]);
409 return -ENODEV;
410 }
411 chip.byte_len = int_pow(2, id[7] - 0x21 + 4) * 1024;
412
413 if (at25->chip.byte_len > 64 * 1024)
414 at25->chip.flags |= EE_ADDR3;
415 else
416 at25->chip.flags |= EE_ADDR2;
417
418 at25->chip.page_size = PAGE_SIZE;
419 strncpy(at25->chip.name, "fm25", sizeof(at25->chip.name));
420 }
421
422 /* For now we only support 8/16/24 bit addressing */
423 if (at25->chip.flags & EE_ADDR1)
424 at25->addrlen = 1;
425 else if (at25->chip.flags & EE_ADDR2)
426 at25->addrlen = 2;
427 else if (at25->chip.flags & EE_ADDR3)
428 at25->addrlen = 3;
429 else {
430 dev_dbg(&spi->dev, "unsupported address type\n");
431 return -EINVAL;
432 }
433
434 at25->nvmem_config.type = is_fram ? NVMEM_TYPE_FRAM : NVMEM_TYPE_EEPROM;
435 at25->nvmem_config.name = dev_name(&spi->dev);
436 at25->nvmem_config.dev = &spi->dev;
437 at25->nvmem_config.read_only = chip.flags & EE_READONLY;
438 at25->nvmem_config.root_only = true;
439 at25->nvmem_config.owner = THIS_MODULE;
440 at25->nvmem_config.compat = true;
441 at25->nvmem_config.base_dev = &spi->dev;
442 at25->nvmem_config.reg_read = at25_ee_read;
443 at25->nvmem_config.reg_write = at25_ee_write;
444 at25->nvmem_config.priv = at25;
445 at25->nvmem_config.stride = 1;
446 at25->nvmem_config.word_size = 1;
447 at25->nvmem_config.size = chip.byte_len;
448
449 at25->nvmem = devm_nvmem_register(&spi->dev, &at25->nvmem_config);
450 if (IS_ERR(at25->nvmem))
451 return PTR_ERR(at25->nvmem);
452
453 dev_info(&spi->dev, "%d %s %s %s%s, pagesize %u\n",
454 (chip.byte_len < 1024) ? chip.byte_len : (chip.byte_len / 1024),
455 (chip.byte_len < 1024) ? "Byte" : "KByte",
456 at25->chip.name, is_fram ? "fram" : "eeprom",
457 (chip.flags & EE_READONLY) ? " (readonly)" : "",
458 at25->chip.page_size);
459 return 0;
460 }
461
---
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: 25700 bytes --]
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH v10 4/4] nvmem: eeprom: at25: export FRAM serial num
2021-06-11 9:46 ` [PATCH v10 4/4] nvmem: eeprom: at25: export FRAM serial num Jiri Prchal
@ 2021-06-22 9:33 ` kernel test robot
2021-06-22 9:33 ` kernel test robot
1 sibling, 0 replies; 14+ messages in thread
From: kernel test robot @ 2021-06-22 9:33 UTC (permalink / raw)
To: Jiri Prchal, devicetree, linux-kernel
Cc: kbuild-all, Rob Herring, Christian Eggers, Arnd Bergmann,
Greg Kroah-Hartman, Jiri Prchal
[-- Attachment #1: Type: text/plain, Size: 2667 bytes --]
Hi Jiri,
Thank you for the patch! Perhaps something to improve:
[auto build test WARNING on robh/for-next]
[also build test WARNING on linux/master linus/master v5.13-rc7]
[cannot apply to char-misc/char-misc-testing next-20210621]
[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/add-support-for-FRAM/20210616-203024
base: https://git.kernel.org/pub/scm/linux/kernel/git/robh/linux.git for-next
config: mips-randconfig-r035-20210622 (attached as .config)
compiler: mips64-linux-gcc (GCC) 9.3.0
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
# https://github.com/0day-ci/linux/commit/a1e83140e4bcb84fc663fdb074e2cbb5a771bfc8
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review Jiri-Prchal/add-support-for-FRAM/20210616-203024
git checkout a1e83140e4bcb84fc663fdb074e2cbb5a771bfc8
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross ARCH=mips
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: In function 'sernum_show':
>> drivers/misc/eeprom/at25.c:181:27: warning: field width specifier '*' expects argument of type 'int', but argument 3 has type 'long unsigned int' [-Wformat=]
181 | return sysfs_emit(buf, "%*ph\n", sizeof(at25->sernum), at25->sernum);
| ~^~ ~~~~~~~~~~~~~~~~~~~~
| | |
| int long unsigned int
drivers/misc/eeprom/at25.c: In function 'at25_probe':
drivers/misc/eeprom/at25.c:386:13: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
386 | is_fram = (int)match->data;
| ^
vim +181 drivers/misc/eeprom/at25.c
175
176 static ssize_t sernum_show(struct device *dev, struct device_attribute *attr, char *buf)
177 {
178 struct at25_data *at25;
179
180 at25 = dev_get_drvdata(dev);
> 181 return sysfs_emit(buf, "%*ph\n", sizeof(at25->sernum), at25->sernum);
182 }
183 static DEVICE_ATTR_RO(sernum);
184
---
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: 25700 bytes --]
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH v10 4/4] nvmem: eeprom: at25: export FRAM serial num
@ 2021-06-22 9:33 ` kernel test robot
0 siblings, 0 replies; 14+ messages in thread
From: kernel test robot @ 2021-06-22 9:33 UTC (permalink / raw)
To: kbuild-all
[-- Attachment #1: Type: text/plain, Size: 2727 bytes --]
Hi Jiri,
Thank you for the patch! Perhaps something to improve:
[auto build test WARNING on robh/for-next]
[also build test WARNING on linux/master linus/master v5.13-rc7]
[cannot apply to char-misc/char-misc-testing next-20210621]
[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/add-support-for-FRAM/20210616-203024
base: https://git.kernel.org/pub/scm/linux/kernel/git/robh/linux.git for-next
config: mips-randconfig-r035-20210622 (attached as .config)
compiler: mips64-linux-gcc (GCC) 9.3.0
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
# https://github.com/0day-ci/linux/commit/a1e83140e4bcb84fc663fdb074e2cbb5a771bfc8
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review Jiri-Prchal/add-support-for-FRAM/20210616-203024
git checkout a1e83140e4bcb84fc663fdb074e2cbb5a771bfc8
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross ARCH=mips
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: In function 'sernum_show':
>> drivers/misc/eeprom/at25.c:181:27: warning: field width specifier '*' expects argument of type 'int', but argument 3 has type 'long unsigned int' [-Wformat=]
181 | return sysfs_emit(buf, "%*ph\n", sizeof(at25->sernum), at25->sernum);
| ~^~ ~~~~~~~~~~~~~~~~~~~~
| | |
| int long unsigned int
drivers/misc/eeprom/at25.c: In function 'at25_probe':
drivers/misc/eeprom/at25.c:386:13: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
386 | is_fram = (int)match->data;
| ^
vim +181 drivers/misc/eeprom/at25.c
175
176 static ssize_t sernum_show(struct device *dev, struct device_attribute *attr, char *buf)
177 {
178 struct at25_data *at25;
179
180 at25 = dev_get_drvdata(dev);
> 181 return sysfs_emit(buf, "%*ph\n", sizeof(at25->sernum), at25->sernum);
182 }
183 static DEVICE_ATTR_RO(sernum);
184
---
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: 25700 bytes --]
^ permalink raw reply [flat|nested] 14+ messages in thread
end of thread, other threads:[~2021-06-22 9:33 UTC | newest]
Thread overview: 14+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-06-11 9:45 [PATCH v10 0/4] add support for FRAM Jiri Prchal
2021-06-11 9:45 ` [PATCH v10 1/4] nvmem: prepare basics for FRAM support Jiri Prchal
2021-06-11 9:45 ` [PATCH v10 2/4] nvmem: eeprom: at25: add support for FRAM Jiri Prchal
2021-06-16 18:59 ` kernel test robot
2021-06-16 18:59 ` kernel test robot
2021-06-22 7:44 ` kernel test robot
2021-06-22 7:44 ` kernel test robot
2021-06-11 9:46 ` [PATCH v10 3/4] dt-bindings: nvmem: at25: add for FRAM support Jiri Prchal
2021-06-11 9:46 ` [PATCH v10 4/4] nvmem: eeprom: at25: export FRAM serial num Jiri Prchal
2021-06-16 20:10 ` kernel test robot
2021-06-16 20:10 ` kernel test robot
2021-06-22 9:33 ` kernel test robot
2021-06-22 9:33 ` kernel test robot
2021-06-11 10:25 ` [PATCH v10 0/4] add support for FRAM Greg Kroah-Hartman
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.