summaryrefslogtreecommitdiff
path: root/lib_blackfin
diff options
context:
space:
mode:
authorMike Frysinger <vapier@gentoo.org>2009-11-09 19:38:23 -0500
committerMike Frysinger <vapier@gentoo.org>2010-01-17 09:17:26 -0500
commit7527feef06b13e9fd5b6d10a4bfc81b59ee56f27 (patch)
tree59b7eb57888f4c26f68e9430346650de19f002d7 /lib_blackfin
parentdbda2c65e5fec92d0791367b53042983746ce95b (diff)
downloadu-boot-imx-7527feef06b13e9fd5b6d10a4bfc81b59ee56f27.zip
u-boot-imx-7527feef06b13e9fd5b6d10a4bfc81b59ee56f27.tar.gz
u-boot-imx-7527feef06b13e9fd5b6d10a4bfc81b59ee56f27.tar.bz2
Blackfin: support boards with no external memory
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
Diffstat (limited to 'lib_blackfin')
-rw-r--r--lib_blackfin/board.c29
-rw-r--r--lib_blackfin/u-boot.lds.S21
2 files changed, 33 insertions, 17 deletions
diff --git a/lib_blackfin/board.c b/lib_blackfin/board.c
index b414b2a..ed4e77b 100644
--- a/lib_blackfin/board.c
+++ b/lib_blackfin/board.c
@@ -130,17 +130,26 @@ void init_cplbtables(void)
dcplb_add(0xFF800000, L1_DMEMORY);
++i;
- icplb_add(CONFIG_SYS_MONITOR_BASE & CPLB_PAGE_MASK, SDRAM_IKERNEL);
- dcplb_add(CONFIG_SYS_MONITOR_BASE & CPLB_PAGE_MASK, SDRAM_DKERNEL);
- ++i;
-
- /* If the monitor crosses a 4 meg boundary, we'll need
- * to lock two entries for it.
- */
- if ((CONFIG_SYS_MONITOR_BASE & CPLB_PAGE_MASK) != ((CONFIG_SYS_MONITOR_BASE + CONFIG_SYS_MONITOR_LEN) & CPLB_PAGE_MASK)) {
- icplb_add((CONFIG_SYS_MONITOR_BASE + CONFIG_SYS_MONITOR_LEN) & CPLB_PAGE_MASK, SDRAM_IKERNEL);
- dcplb_add((CONFIG_SYS_MONITOR_BASE + CONFIG_SYS_MONITOR_LEN) & CPLB_PAGE_MASK, SDRAM_DKERNEL);
+ if (CONFIG_MEM_SIZE) {
+ uint32_t mbase = CONFIG_SYS_MONITOR_BASE;
+ uint32_t mend = mbase + CONFIG_SYS_MONITOR_LEN;
+ mbase &= CPLB_PAGE_MASK;
+ mend &= CPLB_PAGE_MASK;
+
+ icplb_add(mbase, SDRAM_IKERNEL);
+ dcplb_add(mbase, SDRAM_DKERNEL);
++i;
+
+ /*
+ * If the monitor crosses a 4 meg boundary, we'll need
+ * to lock two entries for it. We assume it doesn't
+ * cross two 4 meg boundaries ...
+ */
+ if (mbase != mend) {
+ icplb_add(mend, SDRAM_IKERNEL);
+ dcplb_add(mend, SDRAM_DKERNEL);
+ ++i;
+ }
}
icplb_add(0x20000000, SDRAM_INON_CHBL);
diff --git a/lib_blackfin/u-boot.lds.S b/lib_blackfin/u-boot.lds.S
index 8a9e8b1..deb94c9 100644
--- a/lib_blackfin/u-boot.lds.S
+++ b/lib_blackfin/u-boot.lds.S
@@ -57,7 +57,14 @@ OUTPUT_ARCH(bfin)
MEMORY
{
+#if CONFIG_MEM_SIZE
ram : ORIGIN = CONFIG_SYS_MONITOR_BASE, LENGTH = CONFIG_SYS_MONITOR_LEN
+# define ram_code ram
+# define ram_data ram
+#else
+# define ram_code l1_code
+# define ram_data l1_data
+#endif
l1_code : ORIGIN = L1_CODE_ORIGIN, LENGTH = L1_INST_SRAM_SIZE
l1_data : ORIGIN = L1_DATA_B_SRAM, LENGTH = L1_DATA_B_SRAM_SIZE
}
@@ -82,7 +89,7 @@ SECTIONS
.text :
{
*(.text .text.*)
- } >ram
+ } >ram_code
.rodata :
{
@@ -91,7 +98,7 @@ SECTIONS
*(.rodata1)
*(.eh_frame)
. = ALIGN(4);
- } >ram
+ } >ram_data
.data :
{
@@ -102,14 +109,14 @@ SECTIONS
*(.sdata2)
*(.dynamic)
CONSTRUCTORS
- } >ram
+ } >ram_data
.u_boot_cmd :
{
___u_boot_cmd_start = .;
*(.u_boot_cmd)
___u_boot_cmd_end = .;
- } >ram
+ } >ram_data
.text_l1 :
{
@@ -118,7 +125,7 @@ SECTIONS
*(.l1.text)
. = ALIGN(4);
__etext_l1 = .;
- } >l1_code AT>ram
+ } >l1_code AT>ram_code
__text_l1_lma = LOADADDR(.text_l1);
__text_l1_len = SIZEOF(.text_l1);
ASSERT (__text_l1_len <= L1_INST_SRAM_SIZE, "L1 text overflow!")
@@ -131,7 +138,7 @@ SECTIONS
*(.l1.bss)
. = ALIGN(4);
__edata_l1 = .;
- } >l1_data AT>ram
+ } >l1_data AT>ram_data
__data_l1_lma = LOADADDR(.data_l1);
__data_l1_len = SIZEOF(.data_l1);
ASSERT (__data_l1_len <= L1_DATA_B_SRAM_SIZE, "L1 data B overflow!")
@@ -143,7 +150,7 @@ SECTIONS
*(.dynbss)
*(.bss .bss.*)
*(COMMON)
- } >ram
+ } >ram_data
__bss_vma = ADDR(.bss);
__bss_len = SIZEOF(.bss);
}