From: Mike Frysinger <vapier@gentoo.org>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH 15/18] Blackfin: split out async setup
Date: Tue, 28 Jun 2011 15:36:24 -0400 [thread overview]
Message-ID: <1309289787-7846-16-git-send-email-vapier@gentoo.org> (raw)
In-Reply-To: <1309289787-7846-1-git-send-email-vapier@gentoo.org>
We really only need to tweak the async banks in the initcode if the
processor is booting out of it, otherwise we can wait until later
on in the CPU booting setup.
This also makes testing in the sim and early bring up over JTAG work
much smoother when the initcode gets bypassed.
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
---
arch/blackfin/cpu/cpu.c | 16 ++++++---
arch/blackfin/cpu/initcode.c | 47 ++--------------------------
arch/blackfin/cpu/initcode.h | 71 ++++++++++++++++++++++++++++++++++++++++++
3 files changed, 84 insertions(+), 50 deletions(-)
create mode 100644 arch/blackfin/cpu/initcode.h
diff --git a/arch/blackfin/cpu/cpu.c b/arch/blackfin/cpu/cpu.c
index 18dbdf7..6a0bcca 100644
--- a/arch/blackfin/cpu/cpu.c
+++ b/arch/blackfin/cpu/cpu.c
@@ -19,6 +19,7 @@
#include "cpu.h"
#include "serial.h"
+#include "initcode.h"
ulong bfin_poweron_retx;
@@ -44,13 +45,16 @@ void cpu_init_f(ulong bootflag, ulong loaded_from_ldr)
extern char _sdata_l1[], _data_l1_lma[], _data_l1_len[];
memcpy(&_sdata_l1, &_data_l1_lma, (unsigned long)_data_l1_len);
}
-#if defined(__ADSPBF537__) || defined(__ADSPBF536__) || defined(__ADSPBF534__)
- /* The BF537 bootrom will reset the EBIU_AMGCTL register on us
- * after it has finished loading the LDR. So configure it again.
+
+ /*
+ * Make sure our async settings are committed. Some bootroms
+ * (like the BF537) will reset some registers on us after it
+ * has finished loading the LDR. Or if we're booting over
+ * JTAG, the initcode never got a chance to run. Or if we
+ * aren't booting from parallel flash, the initcode skipped
+ * this step completely.
*/
- else
- bfin_write_EBIU_AMGCTL(CONFIG_EBIU_AMGCTL_VAL);
-#endif
+ program_async_controller(NULL);
/* Save RETX so we can pass it while booting Linux */
bfin_poweron_retx = bootflag;
diff --git a/arch/blackfin/cpu/initcode.c b/arch/blackfin/cpu/initcode.c
index 61dc5ab..917b7f9 100644
--- a/arch/blackfin/cpu/initcode.c
+++ b/arch/blackfin/cpu/initcode.c
@@ -4,7 +4,7 @@
* cannot make any function calls as it may be executed all by itself by
* the Blackfin's bootrom in LDR format.
*
- * Copyright (c) 2004-2008 Analog Devices Inc.
+ * Copyright (c) 2004-2011 Analog Devices Inc.
*
* Licensed under the GPL-2 or later.
*/
@@ -107,6 +107,8 @@ static inline void serial_putc(char c)
continue;
}
+#include "initcode.h"
+
__attribute__((always_inline)) static inline void
program_nmi_handler(void)
{
@@ -172,21 +174,6 @@ program_nmi_handler(void)
# define CONFIG_PLL_CTL_VAL (SPORT_HYST | (CONFIG_VCO_MULT << 9) | CONFIG_CLKIN_HALF)
#endif
-#ifndef CONFIG_EBIU_RSTCTL_VAL
-# define CONFIG_EBIU_RSTCTL_VAL 0 /* only MDDRENABLE is useful */
-#endif
-#if ((CONFIG_EBIU_RSTCTL_VAL & 0xFFFFFFC4) != 0)
-# error invalid EBIU_RSTCTL value: must not set reserved bits
-#endif
-
-#ifndef CONFIG_EBIU_MBSCTL_VAL
-# define CONFIG_EBIU_MBSCTL_VAL 0
-#endif
-
-#if defined(CONFIG_EBIU_DDRQUE_VAL) && ((CONFIG_EBIU_DDRQUE_VAL & 0xFFFF8000) != 0)
-# error invalid EBIU_DDRQUE value: must not set reserved bits
-#endif
-
/* Make sure our voltage value is sane so we don't blow up! */
#ifndef CONFIG_VR_CTL_VAL
# define BFIN_CCLK ((CONFIG_CLKIN_HZ * CONFIG_VCO_MULT) / CONFIG_CCLK_DIV)
@@ -642,34 +629,6 @@ check_hibernation(ADI_BOOT_DATA *bs, u16 vr_ctl, bool put_into_srfs)
serial_putc('e');
}
-__attribute__((always_inline)) static inline void
-program_async_controller(ADI_BOOT_DATA *bs)
-{
- serial_putc('a');
-
- /* Program the async banks controller. */
- bfin_write_EBIU_AMBCTL0(CONFIG_EBIU_AMBCTL0_VAL);
- bfin_write_EBIU_AMBCTL1(CONFIG_EBIU_AMBCTL1_VAL);
- bfin_write_EBIU_AMGCTL(CONFIG_EBIU_AMGCTL_VAL);
-
- serial_putc('b');
-
- /* Not all parts have these additional MMRs. */
-#ifdef EBIU_MBSCTL
- bfin_write_EBIU_MBSCTL(CONFIG_EBIU_MBSCTL_VAL);
-#endif
-#ifdef EBIU_MODE
-# ifdef CONFIG_EBIU_MODE_VAL
- bfin_write_EBIU_MODE(CONFIG_EBIU_MODE_VAL);
-# endif
-# ifdef CONFIG_EBIU_FCTL_VAL
- bfin_write_EBIU_FCTL(CONFIG_EBIU_FCTL_VAL);
-# endif
-#endif
-
- serial_putc('c');
-}
-
BOOTROM_CALLED_FUNC_ATTR
void initcode(ADI_BOOT_DATA *bs)
{
diff --git a/arch/blackfin/cpu/initcode.h b/arch/blackfin/cpu/initcode.h
new file mode 100644
index 0000000..e0aad6d
--- /dev/null
+++ b/arch/blackfin/cpu/initcode.h
@@ -0,0 +1,71 @@
+/*
+ * Code for early processor initialization
+ *
+ * Copyright (c) 2004-2011 Analog Devices Inc.
+ *
+ * Licensed under the GPL-2 or later.
+ */
+
+#ifndef __BFIN_INITCODE_H__
+#define __BFIN_INITCODE_H__
+
+#include <asm/mach-common/bits/bootrom.h>
+
+#ifndef BFIN_IN_INITCODE
+# define serial_putc(c)
+#endif
+
+#ifndef CONFIG_EBIU_RSTCTL_VAL
+# define CONFIG_EBIU_RSTCTL_VAL 0 /* only MDDRENABLE is useful */
+#endif
+#if ((CONFIG_EBIU_RSTCTL_VAL & 0xFFFFFFC4) != 0)
+# error invalid EBIU_RSTCTL value: must not set reserved bits
+#endif
+
+#ifndef CONFIG_EBIU_MBSCTL_VAL
+# define CONFIG_EBIU_MBSCTL_VAL 0
+#endif
+
+#if defined(CONFIG_EBIU_DDRQUE_VAL) && ((CONFIG_EBIU_DDRQUE_VAL & 0xFFFF8000) != 0)
+# error invalid EBIU_DDRQUE value: must not set reserved bits
+#endif
+
+__attribute__((always_inline)) static inline void
+program_async_controller(ADI_BOOT_DATA *bs)
+{
+#ifdef BFIN_IN_INITCODE
+ /*
+ * We really only need to setup the async banks early if we're
+ * booting out of it. Otherwise, do it later on in cpu_init.
+ */
+ if (CONFIG_BFIN_BOOT_MODE != BFIN_BOOT_BYPASS &&
+ CONFIG_BFIN_BOOT_MODE != BFIN_BOOT_PARA)
+ return;
+#endif
+
+ serial_putc('a');
+
+ /* Program the async banks controller. */
+ bfin_write_EBIU_AMBCTL0(CONFIG_EBIU_AMBCTL0_VAL);
+ bfin_write_EBIU_AMBCTL1(CONFIG_EBIU_AMBCTL1_VAL);
+ bfin_write_EBIU_AMGCTL(CONFIG_EBIU_AMGCTL_VAL);
+
+ serial_putc('b');
+
+ /* Not all parts have these additional MMRs. */
+#ifdef EBIU_MBSCTL
+ bfin_write_EBIU_MBSCTL(CONFIG_EBIU_MBSCTL_VAL);
+#endif
+#ifdef EBIU_MODE
+# ifdef CONFIG_EBIU_MODE_VAL
+ bfin_write_EBIU_MODE(CONFIG_EBIU_MODE_VAL);
+# endif
+# ifdef CONFIG_EBIU_FCTL_VAL
+ bfin_write_EBIU_FCTL(CONFIG_EBIU_FCTL_VAL);
+# endif
+#endif
+
+ serial_putc('c');
+}
+
+#endif
--
1.7.5.3
next prev parent reply other threads:[~2011-06-28 19:36 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-06-28 19:36 [U-Boot] [PATCH 00/18] Blackfin updates for v2011.09 Mike Frysinger
2011-06-28 19:36 ` [U-Boot] [PATCH 01/18] Blackfin: uart: move debug buffers into local bss Mike Frysinger
2011-06-28 19:36 ` [U-Boot] [PATCH 02/18] Blackfin: uart: add multiple serial support Mike Frysinger
2011-06-28 19:36 ` [U-Boot] [PATCH 03/18] Blackfin: adi boards: enable multi serial support by default Mike Frysinger
2011-06-28 19:36 ` [U-Boot] [PATCH 04/18] Blackfin: dont reset SWRST on newer bf526 parts Mike Frysinger
2011-07-05 5:24 ` [U-Boot] [PATCH v2] " Mike Frysinger
2011-06-28 19:36 ` [U-Boot] [PATCH 05/18] Blackfin: add init.elf helper code Mike Frysinger
2011-06-28 19:36 ` [U-Boot] [PATCH 06/18] Blackfin: uart: fix printf warning Mike Frysinger
2011-06-28 19:36 ` [U-Boot] [PATCH 07/18] Blackfin: post: setup default CONFIG_SYS_POST_WORD_ADDR Mike Frysinger
2011-06-28 19:36 ` [U-Boot] [PATCH 08/18] Blackfin: gpio: optimize free path a little Mike Frysinger
2011-06-28 19:36 ` [U-Boot] [PATCH 09/18] Blackfin: sync MMR read/write helpers with Linux Mike Frysinger
2011-06-28 19:36 ` [U-Boot] [PATCH 10/18] Blackfin: cm-bf537e/cm-bf537u/tcm-bf537: update network settings Mike Frysinger
2011-06-28 19:36 ` [U-Boot] [PATCH 11/18] Blackfin: cm-bf537e/cm-bf537u/tcm-bf537: enable mmc_spi support Mike Frysinger
2011-06-28 19:36 ` [U-Boot] [PATCH 12/18] Blackfin: portmux: allow header to be included in assembly files Mike Frysinger
2011-06-28 19:36 ` [U-Boot] [PATCH 13/18] Blackfin: drop unused dma.h header from start code Mike Frysinger
2011-06-28 19:36 ` [U-Boot] [PATCH 14/18] Blackfin: adi boards: enable pretty flash progress output Mike Frysinger
2011-06-28 19:36 ` Mike Frysinger [this message]
2011-06-28 19:36 ` [U-Boot] [PATCH 16/18] Blackfin: serial: convert to bfin_{read, write} helpers Mike Frysinger
2011-06-28 19:36 ` [U-Boot] [PATCH 17/18] Blackfin: update anomaly lists to latest public info Mike Frysinger
2011-06-28 19:36 ` [U-Boot] [PATCH 18/18] Blackfin: adi boards: also set stderr to nc with helper Mike Frysinger
2011-06-29 2:50 ` [U-Boot] Pull request u-boot-blackfin.git Mike Frysinger
2011-06-29 21:23 ` Wolfgang Denk
2011-06-30 15:45 ` Mike Frysinger
2011-06-30 15:55 ` Wolfgang Denk
2011-06-29 21:23 ` [U-Boot] [PATCH 00/18] Blackfin updates for v2011.09 Wolfgang Denk
2011-06-30 17:23 ` Mike Frysinger
2011-07-05 5:25 ` [U-Boot] [PATCH 19/21] Blackfin: serial: move early debug strings into .rodata section Mike Frysinger
2011-07-05 5:25 ` [U-Boot] [PATCH 20/21] Blackfin: switch to common display_options() Mike Frysinger
2011-07-05 5:25 ` [U-Boot] [PATCH 21/21] Blackfin: jtag-console: fix timer usage Mike Frysinger
2011-07-12 6:21 ` [U-Boot] [PATCH 00/18] Blackfin updates for v2011.09 Mike Frysinger
2011-07-12 6:23 ` [U-Boot] Pull request u-boot-blackfin.git Mike Frysinger
2011-08-02 19:49 ` Wolfgang Denk
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=1309289787-7846-16-git-send-email-vapier@gentoo.org \
--to=vapier@gentoo.org \
--cc=u-boot@lists.denx.de \
/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.