From: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
To: gregkh@linuxfoundation.org
Cc: linux-kernel@vger.kernel.org,
Sean Anderson <sean.anderson@seco.com>,
Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
Subject: [PATCH 15/16] nvmem: sfp: Use regmap
Date: Fri, 29 Apr 2022 17:27:00 +0100 [thread overview]
Message-ID: <20220429162701.2222-16-srinivas.kandagatla@linaro.org> (raw)
In-Reply-To: <20220429162701.2222-1-srinivas.kandagatla@linaro.org>
From: Sean Anderson <sean.anderson@seco.com>
This converts the SFP driver to use regmap. This will allow easily
supporting devices with different endians. We disallow byte-level
access, as regmap_bulk_read doesn't support it (and it's unclear what
the correct result would be when we have an endianness difference).
Signed-off-by: Sean Anderson <sean.anderson@seco.com>
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
---
drivers/nvmem/Kconfig | 1 +
drivers/nvmem/layerscape-sfp.c | 30 ++++++++++++++++++++++--------
2 files changed, 23 insertions(+), 8 deletions(-)
diff --git a/drivers/nvmem/Kconfig b/drivers/nvmem/Kconfig
index 6283e09cc1e9..967d0084800e 100644
--- a/drivers/nvmem/Kconfig
+++ b/drivers/nvmem/Kconfig
@@ -304,6 +304,7 @@ config NVMEM_LAYERSCAPE_SFP
tristate "Layerscape SFP (Security Fuse Processor) support"
depends on ARCH_LAYERSCAPE || COMPILE_TEST
depends on HAS_IOMEM
+ select REGMAP_MMIO
help
This driver provides support to read the eFuses on Freescale
Layerscape SoC's. For example, the vendor provides a per part
diff --git a/drivers/nvmem/layerscape-sfp.c b/drivers/nvmem/layerscape-sfp.c
index e591c1511e33..59083f048921 100644
--- a/drivers/nvmem/layerscape-sfp.c
+++ b/drivers/nvmem/layerscape-sfp.c
@@ -13,15 +13,17 @@
#include <linux/nvmem-provider.h>
#include <linux/platform_device.h>
#include <linux/property.h>
+#include <linux/regmap.h>
#define LAYERSCAPE_SFP_OTP_OFFSET 0x0200
struct layerscape_sfp_priv {
- void __iomem *base;
+ struct regmap *regmap;
};
struct layerscape_sfp_data {
int size;
+ enum regmap_endian endian;
};
static int layerscape_sfp_read(void *context, unsigned int offset, void *val,
@@ -29,15 +31,16 @@ static int layerscape_sfp_read(void *context, unsigned int offset, void *val,
{
struct layerscape_sfp_priv *priv = context;
- memcpy_fromio(val, priv->base + LAYERSCAPE_SFP_OTP_OFFSET + offset,
- bytes);
-
- return 0;
+ return regmap_bulk_read(priv->regmap,
+ LAYERSCAPE_SFP_OTP_OFFSET + offset, val,
+ bytes / 4);
}
static struct nvmem_config layerscape_sfp_nvmem_config = {
.name = "fsl-sfp",
.reg_read = layerscape_sfp_read,
+ .word_size = 4,
+ .stride = 4,
};
static int layerscape_sfp_probe(struct platform_device *pdev)
@@ -45,16 +48,26 @@ static int layerscape_sfp_probe(struct platform_device *pdev)
const struct layerscape_sfp_data *data;
struct layerscape_sfp_priv *priv;
struct nvmem_device *nvmem;
+ struct regmap_config config = { 0 };
+ void __iomem *base;
priv = devm_kzalloc(&pdev->dev, sizeof(*priv), GFP_KERNEL);
if (!priv)
return -ENOMEM;
- priv->base = devm_platform_ioremap_resource(pdev, 0);
- if (IS_ERR(priv->base))
- return PTR_ERR(priv->base);
+ base = devm_platform_ioremap_resource(pdev, 0);
+ if (IS_ERR(base))
+ return PTR_ERR(base);
data = device_get_match_data(&pdev->dev);
+ config.reg_bits = 32;
+ config.reg_stride = 4;
+ config.val_bits = 32;
+ config.val_format_endian = data->endian;
+ config.max_register = LAYERSCAPE_SFP_OTP_OFFSET + data->size - 4;
+ priv->regmap = devm_regmap_init_mmio(&pdev->dev, base, &config);
+ if (IS_ERR(priv->regmap))
+ return PTR_ERR(priv->regmap);
layerscape_sfp_nvmem_config.size = data->size;
layerscape_sfp_nvmem_config.dev = &pdev->dev;
@@ -67,6 +80,7 @@ static int layerscape_sfp_probe(struct platform_device *pdev)
static const struct layerscape_sfp_data ls1028a_data = {
.size = 0x88,
+ .endian = REGMAP_ENDIAN_LITTLE,
};
static const struct of_device_id layerscape_sfp_dt_ids[] = {
--
2.21.0
next prev parent reply other threads:[~2022-04-29 16:28 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-04-29 16:26 [PATCH 00/16] nvmem: patches (set 1) for 5.19 Srinivas Kandagatla
2022-04-29 16:26 ` [PATCH 01/16] nvmem: core: support passing DT node in cell info Srinivas Kandagatla
2022-04-29 16:26 ` [PATCH 02/16] nvmem: brcm_nvram: find Device Tree nodes for NVMEM cells Srinivas Kandagatla
2022-04-29 16:26 ` [PATCH 03/16] MAINTAINERS: Add apple efuses nvmem files to ARM/APPLE MACHINE Srinivas Kandagatla
2022-04-29 16:26 ` [PATCH 04/16] dt-bindings: nvmem: Add apple,efuses Srinivas Kandagatla
2022-04-29 16:26 ` [PATCH 05/16] nvmem: Add Apple eFuse driver Srinivas Kandagatla
2022-04-29 16:26 ` [PATCH 06/16] nvmem: bcm-ocotp: mark ACPI device ID table as maybe unused Srinivas Kandagatla
2022-04-29 16:26 ` [PATCH 07/16] nvmem: sunplus-ocotp: drop useless probe confirmation Srinivas Kandagatla
2022-04-29 16:26 ` [PATCH 08/16] nvmem: sunplus-ocotp: staticize sp_otp_v0 Srinivas Kandagatla
2022-04-29 16:26 ` [PATCH 09/16] nvmem: qfprom: using pm_runtime_resume_and_get instead of pm_runtime_get_sync Srinivas Kandagatla
2022-04-29 16:26 ` [PATCH 10/16] nvmem: brcm_nvram: check for allocation failure Srinivas Kandagatla
2022-04-29 16:26 ` [PATCH 11/16] dt-bindings: nvmem: sfp: Fix typo Srinivas Kandagatla
2022-04-29 16:26 ` [PATCH 12/16] dt-bindings: nvmem: sfp: Add clock properties Srinivas Kandagatla
2022-04-29 16:26 ` [PATCH 13/16] dt-bindings: nvmem: sfp: Add TA_PROG_SFP supply Srinivas Kandagatla
2022-04-29 16:26 ` [PATCH 14/16] dt-bindings: nvmem: sfp: Add compatible binding for TA 2.1 SFPs Srinivas Kandagatla
2022-04-29 16:27 ` Srinivas Kandagatla [this message]
2022-04-29 16:27 ` [PATCH 16/16] nvmem: sfp: Add support for TA 2.1 devices Srinivas Kandagatla
2022-05-09 13:47 ` [PATCH 00/16] nvmem: patches (set 1) for 5.19 Greg KH
2022-05-10 9:29 ` Srinivas Kandagatla
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20220429162701.2222-16-srinivas.kandagatla@linaro.org \
--to=srinivas.kandagatla@linaro.org \
--cc=gregkh@linuxfoundation.org \
--cc=linux-kernel@vger.kernel.org \
--cc=sean.anderson@seco.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.