From: Krzysztof Kozlowski <k.kozlowski@samsung.com>
To: Pavel Fedin <p.fedin@samsung.com>,
linux-samsung-soc@vger.kernel.org,
linux-arm-kernel@lists.infradead.org
Cc: Kukjin Kim <kgene@kernel.org>, Pankaj Dubey <pankaj.dubey@samsung.com>
Subject: Re: [PATCH v3 3/4] drivers: exynos-srom: Add support for bank configuration
Date: Thu, 29 Oct 2015 11:16:21 +0900 [thread overview]
Message-ID: <56318175.6000006@samsung.com> (raw)
In-Reply-To: <048021141f295b0e70c852134d4ac9cc6f7f1da4.1446018918.git.p.fedin@samsung.com>
On 28.10.2015 16:57, Pavel Fedin wrote:
> Bindings are based on u-boot implementation, however they are stored in
> subnodes, providing support for more than one bank.
>
> Since the driver now does more than suspend-resume support, dependency on
> CONFIG_PM is removed.
>
> Signed-off-by: Pavel Fedin <p.fedin@samsung.com>
> ---
> arch/arm/mach-exynos/Kconfig | 2 +-
> drivers/soc/samsung/Kconfig | 2 +-
> drivers/soc/samsung/exynos-srom.c | 42 ++++++++++++++++++++++++++++++++++++++-
> 3 files changed, 43 insertions(+), 3 deletions(-)
>
> diff --git a/arch/arm/mach-exynos/Kconfig b/arch/arm/mach-exynos/Kconfig
> index 83c85f5..c22dc42 100644
> --- a/arch/arm/mach-exynos/Kconfig
> +++ b/arch/arm/mach-exynos/Kconfig
> @@ -16,7 +16,7 @@ menuconfig ARCH_EXYNOS
> select ARM_GIC
> select COMMON_CLK_SAMSUNG
> select EXYNOS_THERMAL
> - select EXYNOS_SROM if PM
> + select EXYNOS_SROM
> select HAVE_ARM_SCU if SMP
> select HAVE_S3C2410_I2C if I2C
> select HAVE_S3C2410_WATCHDOG if WATCHDOG
> diff --git a/drivers/soc/samsung/Kconfig b/drivers/soc/samsung/Kconfig
> index 2833b5b..ea4bc2a 100644
> --- a/drivers/soc/samsung/Kconfig
> +++ b/drivers/soc/samsung/Kconfig
> @@ -8,6 +8,6 @@ config SOC_SAMSUNG
>
> config EXYNOS_SROM
> bool
> - depends on ARM && ARCH_EXYNOS && PM
> + depends on ARM && ARCH_EXYNOS
>
> endmenu
> diff --git a/drivers/soc/samsung/exynos-srom.c b/drivers/soc/samsung/exynos-srom.c
> index 57a232d..6c8c56a 100644
> --- a/drivers/soc/samsung/exynos-srom.c
> +++ b/drivers/soc/samsung/exynos-srom.c
> @@ -67,9 +67,46 @@ static struct exynos_srom_reg_dump *exynos_srom_alloc_reg_dump(
> return rd;
> }
>
> +static int decode_sromc(struct exynos_srom *srom, struct device_node *np)
> +{
> + u32 bank, width;
> + u32 timing[7];
> + u32 bw;
> +
> + if (of_property_read_u32(np, "bank", &bank))
> + return -ENXIO;
This is an invalid value in DTB, not missing device or address, so -EINVAL.
> + if (of_property_read_u32(np, "width", &width))
> + width = 1;
> + if (of_property_read_u32_array(np, "srom-timing", timing, 7)) {
s/7/ARRAY_SIZE/
> + pr_err("Could not decode SROMC configuration\n");
dev_err()
> + return -ENXIO;
Here also I would prefer -EINVAL
> + }
> +
> + bank *= 4; /* Convert bank into shift/offset */
> +
> + bw = 1 << EXYNOS_SROM_BW__BYTEENABLE__SHIFT;
> + if (width == 2)
> + bw |= 1 << EXYNOS_SROM_BW__DATAWIDTH__SHIFT;
> + bw <<= bank;
> + bw |= __raw_readl(srom->reg_base + EXYNOS_SROM_BW) &
> + ~(EXYNOS_SROM_BW__CS_MASK << bank);
This is reversed pattern. First read, then set or clear bits and finally
write. It makes easier to understand what is the intention.
> + __raw_writel(bw, srom->reg_base + EXYNOS_SROM_BW);
> +
> + __raw_writel((timing[0] << EXYNOS_SROM_BCX__PMC__SHIFT) |
> + (timing[1] << EXYNOS_SROM_BCX__TACP__SHIFT) |
> + (timing[2] << EXYNOS_SROM_BCX__TCAH__SHIFT) |
> + (timing[3] << EXYNOS_SROM_BCX__TCOH__SHIFT) |
> + (timing[4] << EXYNOS_SROM_BCX__TACC__SHIFT) |
> + (timing[5] << EXYNOS_SROM_BCX__TCOS__SHIFT) |
> + (timing[6] << EXYNOS_SROM_BCX__TACS__SHIFT),
> + srom->reg_base + EXYNOS_SROM_BC0 + bank);
> +
> + return 0;
> +}
> +
> static int exynos_srom_probe(struct platform_device *pdev)
> {
> - struct device_node *np;
> + struct device_node *np, *child;
> struct exynos_srom *srom;
> struct device *dev = &pdev->dev;
>
> @@ -100,6 +137,9 @@ static int exynos_srom_probe(struct platform_device *pdev)
> return -ENOMEM;
> }
>
> + for_each_child_of_node(np, child)
> + decode_sromc(srom, child);
You ignore the return value here so bank may be not configured but
device probe will return 0.
Maybe clean up and fail the probe?
Best regards,
Krzysztof
> +
> return 0;
> }
>
>
WARNING: multiple messages have this Message-ID (diff)
From: k.kozlowski@samsung.com (Krzysztof Kozlowski)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v3 3/4] drivers: exynos-srom: Add support for bank configuration
Date: Thu, 29 Oct 2015 11:16:21 +0900 [thread overview]
Message-ID: <56318175.6000006@samsung.com> (raw)
In-Reply-To: <048021141f295b0e70c852134d4ac9cc6f7f1da4.1446018918.git.p.fedin@samsung.com>
On 28.10.2015 16:57, Pavel Fedin wrote:
> Bindings are based on u-boot implementation, however they are stored in
> subnodes, providing support for more than one bank.
>
> Since the driver now does more than suspend-resume support, dependency on
> CONFIG_PM is removed.
>
> Signed-off-by: Pavel Fedin <p.fedin@samsung.com>
> ---
> arch/arm/mach-exynos/Kconfig | 2 +-
> drivers/soc/samsung/Kconfig | 2 +-
> drivers/soc/samsung/exynos-srom.c | 42 ++++++++++++++++++++++++++++++++++++++-
> 3 files changed, 43 insertions(+), 3 deletions(-)
>
> diff --git a/arch/arm/mach-exynos/Kconfig b/arch/arm/mach-exynos/Kconfig
> index 83c85f5..c22dc42 100644
> --- a/arch/arm/mach-exynos/Kconfig
> +++ b/arch/arm/mach-exynos/Kconfig
> @@ -16,7 +16,7 @@ menuconfig ARCH_EXYNOS
> select ARM_GIC
> select COMMON_CLK_SAMSUNG
> select EXYNOS_THERMAL
> - select EXYNOS_SROM if PM
> + select EXYNOS_SROM
> select HAVE_ARM_SCU if SMP
> select HAVE_S3C2410_I2C if I2C
> select HAVE_S3C2410_WATCHDOG if WATCHDOG
> diff --git a/drivers/soc/samsung/Kconfig b/drivers/soc/samsung/Kconfig
> index 2833b5b..ea4bc2a 100644
> --- a/drivers/soc/samsung/Kconfig
> +++ b/drivers/soc/samsung/Kconfig
> @@ -8,6 +8,6 @@ config SOC_SAMSUNG
>
> config EXYNOS_SROM
> bool
> - depends on ARM && ARCH_EXYNOS && PM
> + depends on ARM && ARCH_EXYNOS
>
> endmenu
> diff --git a/drivers/soc/samsung/exynos-srom.c b/drivers/soc/samsung/exynos-srom.c
> index 57a232d..6c8c56a 100644
> --- a/drivers/soc/samsung/exynos-srom.c
> +++ b/drivers/soc/samsung/exynos-srom.c
> @@ -67,9 +67,46 @@ static struct exynos_srom_reg_dump *exynos_srom_alloc_reg_dump(
> return rd;
> }
>
> +static int decode_sromc(struct exynos_srom *srom, struct device_node *np)
> +{
> + u32 bank, width;
> + u32 timing[7];
> + u32 bw;
> +
> + if (of_property_read_u32(np, "bank", &bank))
> + return -ENXIO;
This is an invalid value in DTB, not missing device or address, so -EINVAL.
> + if (of_property_read_u32(np, "width", &width))
> + width = 1;
> + if (of_property_read_u32_array(np, "srom-timing", timing, 7)) {
s/7/ARRAY_SIZE/
> + pr_err("Could not decode SROMC configuration\n");
dev_err()
> + return -ENXIO;
Here also I would prefer -EINVAL
> + }
> +
> + bank *= 4; /* Convert bank into shift/offset */
> +
> + bw = 1 << EXYNOS_SROM_BW__BYTEENABLE__SHIFT;
> + if (width == 2)
> + bw |= 1 << EXYNOS_SROM_BW__DATAWIDTH__SHIFT;
> + bw <<= bank;
> + bw |= __raw_readl(srom->reg_base + EXYNOS_SROM_BW) &
> + ~(EXYNOS_SROM_BW__CS_MASK << bank);
This is reversed pattern. First read, then set or clear bits and finally
write. It makes easier to understand what is the intention.
> + __raw_writel(bw, srom->reg_base + EXYNOS_SROM_BW);
> +
> + __raw_writel((timing[0] << EXYNOS_SROM_BCX__PMC__SHIFT) |
> + (timing[1] << EXYNOS_SROM_BCX__TACP__SHIFT) |
> + (timing[2] << EXYNOS_SROM_BCX__TCAH__SHIFT) |
> + (timing[3] << EXYNOS_SROM_BCX__TCOH__SHIFT) |
> + (timing[4] << EXYNOS_SROM_BCX__TACC__SHIFT) |
> + (timing[5] << EXYNOS_SROM_BCX__TCOS__SHIFT) |
> + (timing[6] << EXYNOS_SROM_BCX__TACS__SHIFT),
> + srom->reg_base + EXYNOS_SROM_BC0 + bank);
> +
> + return 0;
> +}
> +
> static int exynos_srom_probe(struct platform_device *pdev)
> {
> - struct device_node *np;
> + struct device_node *np, *child;
> struct exynos_srom *srom;
> struct device *dev = &pdev->dev;
>
> @@ -100,6 +137,9 @@ static int exynos_srom_probe(struct platform_device *pdev)
> return -ENOMEM;
> }
>
> + for_each_child_of_node(np, child)
> + decode_sromc(srom, child);
You ignore the return value here so bank may be not configured but
device probe will return 0.
Maybe clean up and fail the probe?
Best regards,
Krzysztof
> +
> return 0;
> }
>
>
next prev parent reply other threads:[~2015-10-29 2:16 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-10-28 7:57 [PATCH v3 0/4] Exynos SROMc configuration and Ethernet support for SMDK5410 Pavel Fedin
2015-10-28 7:57 ` Pavel Fedin
2015-10-28 7:57 ` [PATCH v3 1/4] Documentation: dt-bindings: Describe SROMc configuration Pavel Fedin
2015-10-28 7:57 ` Pavel Fedin
2015-10-29 2:27 ` Krzysztof Kozlowski
2015-10-29 2:27 ` Krzysztof Kozlowski
2015-10-29 7:45 ` Pavel Fedin
2015-10-29 7:45 ` Pavel Fedin
2015-10-29 10:29 ` Krzysztof Kozlowski
2015-10-29 10:29 ` Krzysztof Kozlowski
2015-10-29 11:43 ` Pavel Fedin
2015-10-29 11:43 ` Pavel Fedin
2015-10-30 6:09 ` Krzysztof Kozlowski
2015-10-30 6:09 ` Krzysztof Kozlowski
2015-10-28 7:57 ` [PATCH v3 2/4] ARM: dts: Add SROMc to Exynos 5410 Pavel Fedin
2015-10-28 7:57 ` Pavel Fedin
2015-10-28 7:57 ` [PATCH v3 3/4] drivers: exynos-srom: Add support for bank configuration Pavel Fedin
2015-10-28 7:57 ` Pavel Fedin
2015-10-29 2:16 ` Krzysztof Kozlowski [this message]
2015-10-29 2:16 ` Krzysztof Kozlowski
2015-10-29 6:54 ` Pavel Fedin
2015-10-29 6:54 ` Pavel Fedin
2015-10-29 6:59 ` Krzysztof Kozlowski
2015-10-29 6:59 ` Krzysztof Kozlowski
2015-10-29 8:17 ` Pavel Fedin
2015-10-29 8:17 ` Pavel Fedin
2015-10-28 7:57 ` [PATCH v3 4/4] ARM: dts: Add Ethernet chip to SMDK5410 Pavel Fedin
2015-10-28 7:57 ` Pavel Fedin
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=56318175.6000006@samsung.com \
--to=k.kozlowski@samsung.com \
--cc=kgene@kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-samsung-soc@vger.kernel.org \
--cc=p.fedin@samsung.com \
--cc=pankaj.dubey@samsung.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.