From: Sascha Hauer <s.hauer@pengutronix.de>
To: Ahmad Fatoum <a.fatoum@pengutronix.de>
Cc: barebox@lists.infradead.org
Subject: Re: [PATCH v2 06/16] ARM: at91: import lowlevel clock initialization from at91bootstrap
Date: Wed, 20 Feb 2019 10:11:05 +0100 [thread overview]
Message-ID: <20190220091105.ys6b5znoqvyh2exy@pengutronix.de> (raw)
In-Reply-To: <20190219172150.11901-7-a.fatoum@pengutronix.de>
On Tue, Feb 19, 2019 at 06:21:40PM +0100, Ahmad Fatoum wrote:
> For use by future at91 first stage bootloaders, this commit imports
> https://github.com/linux4sam/at91bootstrap/blob/v3.8.12/driver/pmc.c
>
> Signed-off-by: Ahmad Fatoum <a.fatoum@pengutronix.de>
> ---
> arch/arm/mach-at91/Makefile | 1 +
> .../include/mach/at91_lowlevel_clock.h | 43 +++++
> arch/arm/mach-at91/include/mach/at91_pmc.h | 16 +-
> arch/arm/mach-at91/lowlevel_clock.c | 174 ++++++++++++++++++
> 4 files changed, 233 insertions(+), 1 deletion(-)
> create mode 100644 arch/arm/mach-at91/include/mach/at91_lowlevel_clock.h
> create mode 100644 arch/arm/mach-at91/lowlevel_clock.c
>
> +void at91_lowlevel_clock_init(void __iomem *pmc_base)
> +{
> + u32 tmp;
> +
> + /*
> + * Switch the master clock to the slow clock without modifying other
> + * parameters. It is assumed that ROM code set H32MXDIV, PLLADIV2,
> + * PCK_DIV3.
> + */
> + tmp = at91_pmc_read(AT91_PMC_MCKR);
> + tmp &= ~AT91_PMC_ALT_PCKR_CSS;
> + tmp |= AT91_PMC_CSS_SLOW;
> + at91_pmc_write(AT91_PMC_MCKR, tmp);
> +
> + while (!(at91_pmc_read(AT91_PMC_SR) & AT91_PMC_MCKRDY))
> + ;
> +
> + if (IS_ENABLED(CONFIG_SOC_AT91SAM9X5) || IS_ENABLED(CONFIG_SOC_AT91SAM9N12)
> + || IS_ENABLED(CONFIG_SOC_SAMA5)) {
This doesn't work as expected. Consider a case where multiple SoCs are
selected then you can't decide at build time which code path to choose.
The trick is to move away from at91_lowlevel_clock_init() and create
multiple SoC specific functions in which you do the right stuff for each
SoC. The caller always knows the SoC type we are running on and thus
which function to call.
> +void at91_pmc_cfg_mck(void __iomem *pmc_base, u32 pmc_mckr)
> +{
> + u32 tmp;
> +
> + /*
> + * Program the PRES field in the AT91_PMC_MCKR register
> + */
> + tmp = at91_pmc_read(AT91_PMC_MCKR);
> + tmp &= ~(0x1 << 13);
> + if (IS_ENABLED(CONFIG_SOC_AT91SAM9X5)
> + || IS_ENABLED(CONFIG_SOC_AT91SAM9N12)
> + || IS_ENABLED(CONFIG_SOC_SAMA5)) {
> + tmp &= ~AT91_PMC_ALT_PRES;
> + tmp |= pmc_mckr & AT91_PMC_ALT_PRES;
> + } else {
> + tmp &= ~AT91_PMC_PRES;
> + tmp |= pmc_mckr & AT91_PMC_PRES;
> + }
Same here.
Sascha
--
Pengutronix e.K. | |
Industrial Linux Solutions | http://www.pengutronix.de/ |
Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 |
Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |
_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox
next prev parent reply other threads:[~2019-02-20 9:11 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-02-19 17:21 [PATCH v2 00/16] ARM: at91: microchip-kz9477-evb: support first stage boot Ahmad Fatoum
2019-02-19 17:21 ` [PATCH v2 01/16] LICENSES: add BSD-1-Clause license Ahmad Fatoum
2019-02-19 17:21 ` [PATCH v2 02/16] ARM: at91: import at91bootstrap's at91_ddrsdrc.h Ahmad Fatoum
2019-02-22 13:33 ` Roland Hieber
2019-02-26 9:04 ` Ahmad Fatoum
2019-02-19 17:21 ` [PATCH v2 03/16] ARM: at91: migrate at91sam9_ddrsdr.h to use " Ahmad Fatoum
2019-02-19 17:21 ` [PATCH v2 04/16] ARM: at91: replace at91sam9_ddrsdr.h with " Ahmad Fatoum
2019-02-20 9:07 ` Sascha Hauer
2019-02-19 17:21 ` [PATCH v2 05/16] ARM: at91: watchdog: implement at91_wdt_disable Ahmad Fatoum
2019-02-19 17:21 ` [PATCH v2 06/16] ARM: at91: import lowlevel clock initialization from at91bootstrap Ahmad Fatoum
2019-02-20 9:11 ` Sascha Hauer [this message]
2019-02-19 17:21 ` [PATCH v2 07/16] ARM: at91: import early_udelay " Ahmad Fatoum
2019-02-20 9:20 ` Sascha Hauer
2019-02-20 9:23 ` Sascha Hauer
2019-02-19 17:21 ` [PATCH v2 08/16] ARM: at91: import low level DDRAMC initialization code " Ahmad Fatoum
2019-02-19 17:21 ` [PATCH v2 09/16] ARM: at91: import lowlevel dbgu UART init " Ahmad Fatoum
2019-02-19 17:21 ` [PATCH v2 10/16] images: at91: differentiate between first and second stage images Ahmad Fatoum
2019-02-19 17:21 ` [PATCH v2 11/16] ARM: at91: sama5: specify 0x10000 as first stage max size Ahmad Fatoum
2019-02-19 17:21 ` [PATCH v2 12/16] ARM: at91: microchip-ksz9477-evb: use compressed DTB Ahmad Fatoum
2019-02-19 17:21 ` [PATCH v2 13/16] ARM: dts: microchip-ksz9477-evb: add dummy first stage device tree Ahmad Fatoum
2019-02-19 17:21 ` [PATCH v2 14/16] ARM: at91: microchip-ksz9477-evb: implement first stage Ahmad Fatoum
2019-02-22 13:45 ` Roland Hieber
2019-02-26 9:05 ` Ahmad Fatoum
2019-02-19 17:21 ` [PATCH v2 15/16] ARM: at91: microchip-ksz9477: provide board code fallback Ahmad Fatoum
2019-02-20 9:27 ` Sascha Hauer
2019-02-19 17:21 ` [PATCH v2 16/16] doc: microchip-ksz9477-evb: add documentation Ahmad Fatoum
2019-02-24 12:42 ` [PATCH v2 00/16] ARM: at91: microchip-kz9477-evb: support first stage boot Sam Ravnborg
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=20190220091105.ys6b5znoqvyh2exy@pengutronix.de \
--to=s.hauer@pengutronix.de \
--cc=a.fatoum@pengutronix.de \
--cc=barebox@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox