From: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
To: Krzysztof Kozlowski <k.kozlowski@samsung.com>
Cc: Kukjin Kim <kgene.kim@samsung.com>, Kukjin Kim <kgene@kernel.org>,
Daniel Lezcano <daniel.lezcano@linaro.org>,
Tomasz Figa <tomasz.figa@gmail.com>,
Colin Cross <ccross@google.com>,
Kyungmin Park <kyungmin.park@samsung.com>,
Marek Szyprowski <m.szyprowski@samsung.com>,
linux-samsung-soc@vger.kernel.org, linux-pm@vger.kernel.org,
linux-kernel@vger.kernel.org,
Russell King <rmk+kernel@arm.linux.org.uk>
Subject: Re: [PATCH v2 4/5] ARM: EXYNOS: add exynos_get_boot_addr() helper
Date: Wed, 18 Mar 2015 16:18:23 +0100 [thread overview]
Message-ID: <1554212.H7UVZkpb2L@amdc1032> (raw)
In-Reply-To: <CAJKOXPf3pT=NFv31gNqkP=Sq6uacs4VfO6035o+rrLPRYZarLw@mail.gmail.com>
On Wednesday, March 18, 2015 02:43:49 PM Krzysztof Kozlowski wrote:
> 2015-03-18 14:09 GMT+01:00 Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>:
> > Add get_cpu_boot_addr() firmware operation and then
> > exynos_get_boot_addr() helper.
> >
> > This is a preparation for adding coupled cpuidle support
> > for Exynos3250 SoC.
> >
> > There should be no functional changes caused by this patch.
> >
> > Cc: Daniel Lezcano <daniel.lezcano@linaro.org>
> > Cc: Russell King <rmk+kernel@arm.linux.org.uk>
> > Signed-off-by: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
> > ---
> > arch/arm/include/asm/firmware.h | 4 ++++
> > arch/arm/mach-exynos/firmware.c | 17 +++++++++++++++++
> > arch/arm/mach-exynos/platsmp.c | 25 +++++++++++++++++++++++++
> > 3 files changed, 46 insertions(+)
> >
> > diff --git a/arch/arm/include/asm/firmware.h b/arch/arm/include/asm/firmware.h
> > index 89aefe1..34c1d96 100644
> > --- a/arch/arm/include/asm/firmware.h
> > +++ b/arch/arm/include/asm/firmware.h
> > @@ -34,6 +34,10 @@ struct firmware_ops {
> > */
> > int (*set_cpu_boot_addr)(int cpu, unsigned long boot_addr);
> > /*
> > + * Gets boot address of specified physical CPU
> > + */
> > + int (*get_cpu_boot_addr)(int cpu, unsigned long *boot_addr);
> > + /*
> > * Boots specified physical CPU
> > */
> > int (*cpu_boot)(int cpu);
> > diff --git a/arch/arm/mach-exynos/firmware.c b/arch/arm/mach-exynos/firmware.c
> > index f236877..c9e4481 100644
> > --- a/arch/arm/mach-exynos/firmware.c
> > +++ b/arch/arm/mach-exynos/firmware.c
> > @@ -104,6 +104,22 @@ static int exynos_set_cpu_boot_addr(int cpu, unsigned long boot_addr)
> > return 0;
> > }
> >
> > +static int exynos_get_cpu_boot_addr(int cpu, unsigned long *boot_addr)
> > +{
> > + void __iomem *boot_reg;
> > +
> > + if (!sysram_ns_base_addr)
> > + return -ENODEV;
> > +
> > + boot_reg = sysram_ns_base_addr + 0x1c;
> > +
> > + if (soc_is_exynos4412())
> > + boot_reg += 4 * cpu;
> > +
> > + *boot_addr = __raw_readl(boot_reg);
> > + return 0;
> > +}
> > +
> > static int exynos_cpu_suspend(unsigned long arg)
> > {
> > flush_cache_all();
> > @@ -138,6 +154,7 @@ static int exynos_resume(void)
> > static const struct firmware_ops exynos_firmware_ops = {
> > .do_idle = IS_ENABLED(CONFIG_EXYNOS_CPU_SUSPEND) ? exynos_do_idle : NULL,
> > .set_cpu_boot_addr = exynos_set_cpu_boot_addr,
> > + .get_cpu_boot_addr = exynos_get_cpu_boot_addr,
> > .cpu_boot = exynos_cpu_boot,
> > .suspend = IS_ENABLED(CONFIG_PM_SLEEP) ? exynos_suspend : NULL,
> > .resume = IS_ENABLED(CONFIG_EXYNOS_CPU_SUSPEND) ? exynos_resume : NULL,
> > diff --git a/arch/arm/mach-exynos/platsmp.c b/arch/arm/mach-exynos/platsmp.c
> > index b7cfcdc..449edd1 100644
> > --- a/arch/arm/mach-exynos/platsmp.c
> > +++ b/arch/arm/mach-exynos/platsmp.c
> > @@ -272,6 +272,31 @@ fail:
> > return ret;
> > }
> >
> > +static int exynos_get_boot_addr(u32 core_id, unsigned long *boot_addr)
> > +{
> > + int ret;
> > +
> > + /*
> > + * Try to get boot address using firmware first
> > + * and fall back to boot register if it fails.
> > + */
> > + ret = call_firmware_op(get_cpu_boot_addr, core_id, boot_addr);
> > + if (ret && ret != -ENOSYS)
> > + goto fail;
>
> The exynos_get_cpu_boot_addr() returns ENODEV. Do you really want to
> check for ENOSYS here?
Yes. When secure firmware is not present on the board the call_firmware_op()
itself returns -ENOSYS (exynos_get_cpu_boot_addr() is not called in this
case) and it needs to be handled in a special way.
> > + if (ret == -ENOSYS) {
> > + void __iomem *boot_reg = cpu_boot_reg(core_id);
> > +
> > + if (IS_ERR(boot_reg)) {
> > + ret = PTR_ERR(boot_reg);
> > + goto fail;
> > + }
Best regards,
--
Bartlomiej Zolnierkiewicz
Samsung R&D Institute Poland
Samsung Electronics
next prev parent reply other threads:[~2015-03-18 15:18 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-03-18 13:09 [PATCH v2 0/5] cpuidle: exynos: add coupled cpuidle support for Exynos3250 Bartlomiej Zolnierkiewicz
2015-03-18 13:09 ` [PATCH v2 1/5] ARM: EXYNOS: fix exynos_boot_secondary() return value on timeout Bartlomiej Zolnierkiewicz
2015-03-18 13:09 ` [PATCH v2 2/5] ARM: EXYNOS: make exynos_core_restart() less verbose Bartlomiej Zolnierkiewicz
2015-03-18 13:09 ` [PATCH v2 3/5] ARM: EXYNOS: add exynos_set_boot_addr() helper Bartlomiej Zolnierkiewicz
2015-03-18 13:48 ` Krzysztof Kozlowski
2015-03-18 13:09 ` [PATCH v2 4/5] ARM: EXYNOS: add exynos_get_boot_addr() helper Bartlomiej Zolnierkiewicz
2015-03-18 13:43 ` Krzysztof Kozlowski
2015-03-18 15:18 ` Bartlomiej Zolnierkiewicz [this message]
2015-03-18 15:21 ` Krzysztof Kozlowski
2015-03-18 13:09 ` [PATCH v2 5/5] cpuidle: exynos: add coupled cpuidle support for Exynos3250 Bartlomiej Zolnierkiewicz
2015-03-18 16:05 ` [PATCH v2 0/5] " Bartlomiej Zolnierkiewicz
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=1554212.H7UVZkpb2L@amdc1032 \
--to=b.zolnierkie@samsung.com \
--cc=ccross@google.com \
--cc=daniel.lezcano@linaro.org \
--cc=k.kozlowski@samsung.com \
--cc=kgene.kim@samsung.com \
--cc=kgene@kernel.org \
--cc=kyungmin.park@samsung.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pm@vger.kernel.org \
--cc=linux-samsung-soc@vger.kernel.org \
--cc=m.szyprowski@samsung.com \
--cc=rmk+kernel@arm.linux.org.uk \
--cc=tomasz.figa@gmail.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.