From: Scott Wood <scottwood@freescale.com>
To: Yangbo Lu <yangbo.lu@freescale.com>,
linux-mmc@vger.kernel.org, ulf.hansson@linaro.org
Cc: X.Xie@freescale.com, LeoLi@freescale.com
Subject: Re: [v4, 1/6] soc: fsl: add GUTS driver for QorIQ platforms
Date: Mon, 14 Dec 2015 16:07:54 -0600 [thread overview]
Message-ID: <1450130874.15946.385.camel@freescale.com> (raw)
In-Reply-To: <1450067067-44869-2-git-send-email-yangbo.lu@freescale.com>
On Mon, 2015-12-14 at 12:24 +0800, Yangbo Lu wrote:
> The global utilities block controls power management, I/O device
> enabling, power-onreset(POR) configuration monitoring, alternate
> function selection for multiplexed signals,and clock control.
>
> This patch adds GUTS driver to manage and access global utilities
> block.
>
> Signed-off-by: Yangbo Lu <yangbo.lu@freescale.com>
> ---
> Changes for v2:
> - None
> Changes for v3:
> - None
> Changes for v4:
> - Added this patch
> ---
> drivers/soc/Kconfig | 1 +
> drivers/soc/Makefile | 1 +
> drivers/soc/fsl/Kconfig | 19 ++++++++
> drivers/soc/fsl/Makefile | 4 ++
> drivers/soc/fsl/guts.c | 112
> +++++++++++++++++++++++++++++++++++++++++++++++
> include/linux/fsl/guts.h | 103 +++++++++++++++++++++++--------------------
> 6 files changed, 192 insertions(+), 48 deletions(-)
> create mode 100644 drivers/soc/fsl/Kconfig
> create mode 100644 drivers/soc/fsl/Makefile
> create mode 100644 drivers/soc/fsl/guts.c
>
> diff --git a/drivers/soc/Kconfig b/drivers/soc/Kconfig
> index 4e853ed..68b5b90 100644
> --- a/drivers/soc/Kconfig
> +++ b/drivers/soc/Kconfig
> @@ -7,5 +7,6 @@ source "drivers/soc/rockchip/Kconfig"
> source "drivers/soc/sunxi/Kconfig"
> source "drivers/soc/ti/Kconfig"
> source "drivers/soc/versatile/Kconfig"
> +source "drivers/soc/fsl/Kconfig"
>
> endmenu
> diff --git a/drivers/soc/Makefile b/drivers/soc/Makefile
> index f2ba2e9..2747e58 100644
> --- a/drivers/soc/Makefile
> +++ b/drivers/soc/Makefile
> @@ -11,3 +11,4 @@ obj-$(CONFIG_ARCH_SUNXI) += sunxi/
> obj-$(CONFIG_ARCH_TEGRA) += tegra/
> obj-$(CONFIG_SOC_TI) += ti/
> obj-$(CONFIG_PLAT_VERSATILE) += versatile/
> +obj-$(CONFIG_SOC_FSL) += fsl/
> diff --git a/drivers/soc/fsl/Kconfig b/drivers/soc/fsl/Kconfig
> new file mode 100644
> index 0000000..09966f0
> --- /dev/null
> +++ b/drivers/soc/fsl/Kconfig
> @@ -0,0 +1,19 @@
> +#
> +# FSL SOC drivers
> +#
> +menuconfig SOC_FSL
> + bool "Freescale SOC drivers support"
> +
> +if SOC_FSL
> +
> +config FSL_GUTS
> + tristate "QorIQ Platforms GUTS Driver"
> + help
> + Say y here to enable Freescale QorIQ platforms GUTS driver
> support.
> + The global utilities block controls power management, I/O device
> + enabling, power-onreset(POR) configuration monitoring, alternate
> + function selection for multiplexed signals,and clock control.
> +
> + If unsure, say N.
This doesn't do anything user-visible (so far, at least) so it should just be
selected by the drivers that need it.
> +/*
> + * Table for matching compatible strings, for device tree
> + * guts node, for Freescale QorIQ SOCs.
> + * "fsl,qoriq-device-config-2.0" corresponds to T4 & B4
> + * SOCs. For the older SOCs "fsl,qoriq-device-config-1.0"
> + * string would be used.
> + */
> +static const struct of_device_id guts_device_ids[] = {
> + { .compatible = "fsl,qoriq-device-config-1.0", },
> + { .compatible = "fsl,qoriq-device-config-2.0", },
> + {}
> +};
What about pre-corenet chips, with compatibles such as "fsl,p2020-guts"? What
compatible gets used on Layerscape chips?
> +
> +struct ccsr_guts __iomem *guts_regmap(void)
> +{
> + struct device_node *guts_node;
> + struct ccsr_guts __iomem *guts;
> +
> + guts_node = of_find_matching_node(NULL, guts_device_ids);
> + if (!guts_node)
> + return NULL;
> +
> + guts = of_iomap(guts_node, 0);
> + if (!guts)
> + return NULL;
> +
> + of_node_put(guts_node);
> + return guts;
> +}
> +EXPORT_SYMBOL_GPL(guts_regmap);
This should not be exported. This should be a normal driver that gets probed
and does its own init. Callers to this driver should -EPROBE_DEFER if it's
not available yet, and this driver should probably register itself in a
subsys_initcall() or even arch_initcall() to reduce the likelihood of that
(especially if -EPROBE_DEFER would have resulted in deferring another driver
to a phase later than it wanted to init in).
> +
> +u8 guts_get_reg8(void __iomem *reg)
> +{
> + u8 val;
> +
> + val = ioread8(reg);
> + return val;
> +}
> +EXPORT_SYMBOL_GPL(guts_get_reg8);
> +
> +void guts_set_reg8(void __iomem *reg, u8 value)
> +{
> + iowrite8(value, reg);
> +}
> +EXPORT_SYMBOL_GPL(guts_set_reg8);
> +
> +u32 guts_get_reg32(void __iomem *reg)
> +{
> + struct device_node *guts_node;
> + u32 val;
> +
> + guts_node = of_find_matching_node(NULL, guts_device_ids);
> + if (!guts_node)
> + return 0;
> +
> + if (of_property_read_bool(guts_node, "little-endian"))
> + val = ioread32(reg);
> + else
> + val = ioread32be(reg);
> +
> + return val;
> +}
> +EXPORT_SYMBOL_GPL(guts_get_reg32);
> +
> +void guts_set_reg32(void __iomem *reg, u32 value)
> +{
> + struct device_node *guts_node;
> +
> + guts_node = of_find_matching_node(NULL, guts_device_ids);
> + if (!guts_node)
> + return;
> +
> + if (of_property_read_bool(guts_node, "little-endian"))
> + iowrite32(value, reg);
> + else
> + iowrite32be(value, reg);
> +}
> +EXPORT_SYMBOL_GPL(guts_set_reg32);
No. Export fsl_guts_get_svr().
Also, read the little-endian property once at driver init, not on each access.
> +static int __init guts_drv_init(void)
> +{
> + pr_info("guts: Freescale QorIQ Platforms GUTS Driver\n");
> + return 0;
> +}
> +module_init(guts_drv_init);
> +
> +static void __exit guts_drv_exit(void)
> +{
> +}
> +module_exit(guts_drv_exit);
Get rid of the print, especially since it prints regardless of whether the
hardware is present.
> +
> +MODULE_AUTHOR("Yangbo Lu <yangbo.lu@freescale.com>");
> +MODULE_DESCRIPTION("Freescale QorIQ Platforms GUTS Driver");
> +MODULE_LICENSE("GPL v2");
The copyright header says "v2 or later" so MODULE_LICENSE should be just
"GPL".
-Scott
next prev parent reply other threads:[~2015-12-14 22:23 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-12-14 4:24 [v4, 0/6] eSDHC patches introduction Yangbo Lu
2015-12-14 4:24 ` [v4, 1/6] soc: fsl: add GUTS driver for QorIQ platforms Yangbo Lu
2015-12-14 22:07 ` Scott Wood [this message]
2015-12-14 4:24 ` [v4, 2/6] dt: move guts devicetree doc out of powerpc directory Yangbo Lu
2015-12-14 22:10 ` Scott Wood
2015-12-14 4:24 ` [v4, 3/6] powerpc/fsl: move mpc85xx.h to include/linux Yangbo Lu
2015-12-14 22:12 ` Scott Wood
2015-12-14 4:24 ` [v4, 4/6] mmc: sdhci-of-esdhc: get SVR from global utilities registers Yangbo Lu
2015-12-14 4:24 ` [v4, 5/6] mmc: kconfig: select FSL_GUTS for MMC_SDHCI_OF_ESDHC Yangbo Lu
2015-12-14 13:08 ` Ulf Hansson
2015-12-14 18:04 ` Scott Wood
2015-12-15 9:46 ` Ulf Hansson
2015-12-16 22:48 ` Scott Wood
2015-12-17 11:25 ` Ulf Hansson
2015-12-28 19:03 ` Scott Wood
2015-12-17 11:30 ` Ulf Hansson
2015-12-28 10:26 ` Yangbo Lu
2015-12-28 12:10 ` Ulf Hansson
2015-12-28 19:10 ` Scott Wood
2016-01-06 6:58 ` Yangbo Lu
[not found] ` <AM3PR04MB530AAF1632EA442F05C95BF91F50@AM3PR04MB530.eurprd04.prod.outlook.com>
[not found] ` <HE1PR04MB0889197B75CA5C8FDB793F87F8F60@HE1PR04MB0889.eurprd04.prod.outlook.com>
2016-01-08 6:34 ` Scott Wood
2016-01-06 7:34 ` Yangbo Lu
2016-01-06 7:23 ` Yangbo Lu
2015-12-28 18:47 ` Scott Wood
2016-01-06 7:18 ` Yangbo Lu
2016-01-14 10:31 ` Ulf Hansson
2016-01-08 6:24 ` Yangbo Lu
2015-12-14 22:14 ` Scott Wood
2015-12-14 4:24 ` [v4, 6/6] mmc: sdhci-of-esdhc: fix host version for T4240-R1.0-R2.0 Yangbo Lu
2015-12-14 12:22 ` [v4, 0/6] eSDHC patches introduction Ulf Hansson
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=1450130874.15946.385.camel@freescale.com \
--to=scottwood@freescale.com \
--cc=LeoLi@freescale.com \
--cc=X.Xie@freescale.com \
--cc=linux-mmc@vger.kernel.org \
--cc=ulf.hansson@linaro.org \
--cc=yangbo.lu@freescale.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.