From: pavel@denx.de (Pavel Machek)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 2/2] socfpga: support suspend to ram
Date: Wed, 1 Oct 2014 15:49:17 +0200 [thread overview]
Message-ID: <20141001134917.GB12750@amd> (raw)
In-Reply-To: <1411590449-9794-3-git-send-email-atull@opensource.altera.com>
Hi!
> Add code that requests that the sdr controller go into
> self-refresh mode. This code is run from ocram.
>
> This patch assumes that u-boot has already configured sdr:
> sdr.ctrlcfg.lowpwreq.selfrfshmask = 3
> sdr.ctrlcfg.lowpwrtiming.clkdisablecycles = 8
> sdr.ctrlcfg.dramtiming4.selfrfshexit = 512
I'm not sure if we should make assumptions like that. u-boot is not
the only bootloader.
At the very least, it should go to comment in the code, not to changelog.
> +u32 socfpga_sdram_self_refresh(u32 sdr_base, u32 scu_base);
> +extern unsigned int socfpga_sdram_self_refresh_sz;
_sz -> size.
Is it ok to just copy code around?
> +/* Round up a pointer address to fix aligment for fncpy() */
> +static void *fncpy_align(void *ptr)
> +{
> + u32 value = (u32)ptr;
> +
> + if ((value & (FNCPY_ALIGN - 1)) != 0)
> + value = ((value & ~(FNCPY_ALIGN - 1)) + FNCPY_ALIGN);
> +
> + return (void *)value;
> +}
Don't we have a nice macro doing aligning?
I guess the if() is not neccessary.
> +static int socfpga_pm_suspend(unsigned long arg)
> +{
> + u32 ret;
> +
> + ret = socfpga_sdram_self_refresh_in_ocram((u32)sdr_ctl_base_addr,
> + (u32)socfpga_scu_base_addr);
> +
> + pr_debug("%s self-refresh loops request=%d exit=%d\n", __func__,
> + ret & 0xffff, (ret >> 16) & 0xffff);
> +
> + return 0;
> +}
return ret?
> + .arch armv7-a
> + .text
> + .align 3
> +
> + /*
> + * socfpga_sdram_self_refresh
> + *
> + * r0 : sdr_ctl_base_addr
> + * r1 : socfpga_scu_base_addr
> + * r2 : temp storage of register values
> + * r3 : loop counter
> + * r4 : temp storage of return value
> + *
> + * return value: lower 16 bits: loop count going into self refresh
> + * upper 16 bits: loop count exiting self refresh
> + */
> +ENTRY(socfpga_sdram_self_refresh)
r0, r1 are the parameters?
> @@ -77,6 +78,15 @@ void __init socfpga_sysmgr_init(void)
>
> np = of_find_compatible_node(NULL, NULL, "altr,rst-mgr");
> rst_manager_base_addr = of_iomap(np, 0);
> +
> + np = of_find_compatible_node(NULL, NULL, "altr,sdr-ctl");
> + if (!np) {
> + pr_err("SOCFPGA: Unable to find sdr-ctl\n");
> + return;
> + }
> +
> + sdr_ctl_base_addr = of_iomap(np, 0);
> + WARN_ON(!sdr_ctl_base_addr);
> }
>
> static void __init socfpga_init_irq(void)
Actually, "sdr-ctl" is quite hard to understand. I guess it means
"sdram-control"? Should we do something like altr,sdram-ctrl-1.0, so
that we have way forward if hardware changes in future?
Pavel
--
(english) http://www.livejournal.com/~pavelmachek
(cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html
WARNING: multiple messages have this Message-ID (diff)
From: Pavel Machek <pavel@denx.de>
To: atull@opensource.altera.com
Cc: dinguyen@opensource.altera.com, linux@arm.linux.org.uk,
linux-arm-kernel@lists.infradead.org,
linux-kernel@vger.kernel.org, delicious.quinoa@gmail.com,
yvanderv@opensource.altera.com
Subject: Re: [PATCH 2/2] socfpga: support suspend to ram
Date: Wed, 1 Oct 2014 15:49:17 +0200 [thread overview]
Message-ID: <20141001134917.GB12750@amd> (raw)
In-Reply-To: <1411590449-9794-3-git-send-email-atull@opensource.altera.com>
Hi!
> Add code that requests that the sdr controller go into
> self-refresh mode. This code is run from ocram.
>
> This patch assumes that u-boot has already configured sdr:
> sdr.ctrlcfg.lowpwreq.selfrfshmask = 3
> sdr.ctrlcfg.lowpwrtiming.clkdisablecycles = 8
> sdr.ctrlcfg.dramtiming4.selfrfshexit = 512
I'm not sure if we should make assumptions like that. u-boot is not
the only bootloader.
At the very least, it should go to comment in the code, not to changelog.
> +u32 socfpga_sdram_self_refresh(u32 sdr_base, u32 scu_base);
> +extern unsigned int socfpga_sdram_self_refresh_sz;
_sz -> size.
Is it ok to just copy code around?
> +/* Round up a pointer address to fix aligment for fncpy() */
> +static void *fncpy_align(void *ptr)
> +{
> + u32 value = (u32)ptr;
> +
> + if ((value & (FNCPY_ALIGN - 1)) != 0)
> + value = ((value & ~(FNCPY_ALIGN - 1)) + FNCPY_ALIGN);
> +
> + return (void *)value;
> +}
Don't we have a nice macro doing aligning?
I guess the if() is not neccessary.
> +static int socfpga_pm_suspend(unsigned long arg)
> +{
> + u32 ret;
> +
> + ret = socfpga_sdram_self_refresh_in_ocram((u32)sdr_ctl_base_addr,
> + (u32)socfpga_scu_base_addr);
> +
> + pr_debug("%s self-refresh loops request=%d exit=%d\n", __func__,
> + ret & 0xffff, (ret >> 16) & 0xffff);
> +
> + return 0;
> +}
return ret?
> + .arch armv7-a
> + .text
> + .align 3
> +
> + /*
> + * socfpga_sdram_self_refresh
> + *
> + * r0 : sdr_ctl_base_addr
> + * r1 : socfpga_scu_base_addr
> + * r2 : temp storage of register values
> + * r3 : loop counter
> + * r4 : temp storage of return value
> + *
> + * return value: lower 16 bits: loop count going into self refresh
> + * upper 16 bits: loop count exiting self refresh
> + */
> +ENTRY(socfpga_sdram_self_refresh)
r0, r1 are the parameters?
> @@ -77,6 +78,15 @@ void __init socfpga_sysmgr_init(void)
>
> np = of_find_compatible_node(NULL, NULL, "altr,rst-mgr");
> rst_manager_base_addr = of_iomap(np, 0);
> +
> + np = of_find_compatible_node(NULL, NULL, "altr,sdr-ctl");
> + if (!np) {
> + pr_err("SOCFPGA: Unable to find sdr-ctl\n");
> + return;
> + }
> +
> + sdr_ctl_base_addr = of_iomap(np, 0);
> + WARN_ON(!sdr_ctl_base_addr);
> }
>
> static void __init socfpga_init_irq(void)
Actually, "sdr-ctl" is quite hard to understand. I guess it means
"sdram-control"? Should we do something like altr,sdram-ctrl-1.0, so
that we have way forward if hardware changes in future?
Pavel
--
(english) http://www.livejournal.com/~pavelmachek
(cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html
next prev parent reply other threads:[~2014-10-01 13:49 UTC|newest]
Thread overview: 38+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-09-24 20:27 [PATCH 0/2] socfpga: fix hotplug/add suspend to ram atull at opensource.altera.com
2014-09-24 20:27 ` atull
2014-09-24 20:27 ` [PATCH 1/2] socfpga: hotplug: put cpu1 in wfi atull at opensource.altera.com
2014-09-24 20:27 ` atull
2014-09-24 21:28 ` Russell King - ARM Linux
2014-09-24 21:28 ` Russell King - ARM Linux
2014-09-25 15:06 ` atull
2014-09-25 15:06 ` atull
2014-10-01 13:35 ` Pavel Machek
2014-10-01 13:35 ` Pavel Machek
2014-10-01 14:17 ` atull
2014-10-01 14:17 ` atull
2014-10-01 15:04 ` Pavel Machek
2014-10-01 15:04 ` Pavel Machek
2014-10-01 16:07 ` Dinh Nguyen
2014-10-01 16:07 ` Dinh Nguyen
2014-10-01 23:16 ` Pavel Machek
2014-10-01 23:16 ` Pavel Machek
2014-10-02 11:36 ` Dinh Nguyen
2014-10-02 11:36 ` Dinh Nguyen
2014-10-02 12:18 ` Arnd Bergmann
2014-10-02 12:18 ` Arnd Bergmann
2014-10-02 21:03 ` atull
2014-10-02 21:03 ` atull
2014-09-24 20:27 ` [PATCH 2/2] socfpga: support suspend to ram atull at opensource.altera.com
2014-09-24 20:27 ` atull
2014-09-25 8:25 ` Steffen Trumtrar
2014-09-25 8:25 ` Steffen Trumtrar
2014-09-25 17:10 ` atull
2014-09-25 17:10 ` atull
2014-09-26 14:56 ` Dinh Nguyen
2014-09-26 14:56 ` Dinh Nguyen
2014-09-26 20:23 ` atull
2014-09-26 20:23 ` atull
2014-10-01 13:49 ` Pavel Machek [this message]
2014-10-01 13:49 ` Pavel Machek
2014-10-01 19:24 ` atull
2014-10-01 19:24 ` atull
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=20141001134917.GB12750@amd \
--to=pavel@denx.de \
--cc=linux-arm-kernel@lists.infradead.org \
/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.