From 0241c3131dd4c19a1116c863d622358eb2680462 Mon Sep 17 00:00:00 2001 From: Alexey Brodkin Date: Thu, 9 Apr 2015 19:50:58 +0300 Subject: board: axs10x - support v3 mother-board There're 2 versions of motherboards that could be used in ARC SDP. The only important difference for U-Boot is different NAND IC in use: [1] v2 board (we used to support up until now) sports MT29F4G08ABADAWP while [2] v3 board sports MT29F4G16ABADAWP They are almost the same except data bus width 8-bit in [1] and 16-bit in [2]. And for proper support of 16-bit data bus we have to pass NAND_BUSWIDTH_16 option to NAND driver core - which we do now knowing board type we're running on. Signed-off-by: Alexey Brodkin --- board/synopsys/axs101/axs101.c | 14 ++++++++++++++ board/synopsys/axs101/axs10x.h | 16 ++++++++++++++++ board/synopsys/axs101/nand.c | 7 +++++++ include/configs/axs101.h | 6 ++++++ 4 files changed, 43 insertions(+) create mode 100644 board/synopsys/axs101/axs10x.h diff --git a/board/synopsys/axs101/axs101.c b/board/synopsys/axs101/axs101.c index 774204976e..8c16410944 100644 --- a/board/synopsys/axs101/axs101.c +++ b/board/synopsys/axs101/axs101.c @@ -9,6 +9,7 @@ #include #include #include +#include "axs10x.h" DECLARE_GLOBAL_DATA_PTR; @@ -42,3 +43,16 @@ int board_eth_init(bd_t *bis) return 0; } + + +#define AXS_MB_CREG 0xE0011000 + +int board_early_init_f(void) +{ + if (readl((void __iomem *)AXS_MB_CREG + 0x234) & (1 << 28)) + gd->board_type = AXS_MB_V3; + else + gd->board_type = AXS_MB_V2; + + return 0; +} diff --git a/board/synopsys/axs101/axs10x.h b/board/synopsys/axs101/axs10x.h new file mode 100644 index 0000000000..8e8c41f865 --- /dev/null +++ b/board/synopsys/axs101/axs10x.h @@ -0,0 +1,16 @@ +/* + * Copyright (C) 2015 Synopsys, Inc. All rights reserved. + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +#ifndef _BOARD_SYNOPSYS_AXS10X_H +#define _BOARD_SYNOPSYS_AXS10X_H + +enum { + AXS_MB_V2, + AXS_MB_V3 +}; + +#endif /* _BOARD_SYNOPSYS_AXS10X_H */ + diff --git a/board/synopsys/axs101/nand.c b/board/synopsys/axs101/nand.c index ff35286c6e..4be52e22c0 100644 --- a/board/synopsys/axs101/nand.c +++ b/board/synopsys/axs101/nand.c @@ -9,6 +9,9 @@ #include #include #include +#include "axs10x.h" + +DECLARE_GLOBAL_DATA_PTR; #define BUS_WIDTH 8 /* AXI data bus width in bytes */ @@ -232,5 +235,9 @@ int board_nand_init(struct nand_chip *nand) nand->write_buf = axs101_nand_write_buf; nand->read_buf = axs101_nand_read_buf; + /* MBv3 has NAND IC with 16-bit data bus */ + if (gd->board_type == AXS_MB_V3) + nand->options |= NAND_BUSWIDTH_16; + return 0; } diff --git a/include/configs/axs101.h b/include/configs/axs101.h index 5fb8aca4bc..8a7095c5b2 100644 --- a/include/configs/axs101.h +++ b/include/configs/axs101.h @@ -33,6 +33,12 @@ #define CONFIG_SYS_BOOTM_LEN 0x2000000 /* 32 MB */ #define CONFIG_SYS_LOAD_ADDR 0x82000000 +/* + * This board might be of different versions so handle it + */ +#define CONFIG_BOARD_TYPES +#define CONFIG_BOARD_EARLY_INIT_F + /* * NAND Flash configuration */ -- cgit v1.2.3 From 89576072cb60d50b61813f901c6fc296c01de506 Mon Sep 17 00:00:00 2001 From: Alexey Brodkin Date: Fri, 10 Apr 2015 18:41:58 +0300 Subject: arc: make sure _start is in the beginning of .text section This is important to have entry point in the beginning of .text section because it allows simple loading and execution of U-Boot. For example pre-bootloader loads U-Boot in memory starting from offset 0x81000000 and then just jumps to the same address. Otherwise pre-bootloader would need to find-out where entry-point is. In its turn if it deals with binary image of U-Boot there's no way for pre-bootloader to get required value. Signed-off-by: Alexey Brodkin --- arch/arc/cpu/u-boot.lds | 1 + arch/arc/lib/Makefile | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/arch/arc/cpu/u-boot.lds b/arch/arc/cpu/u-boot.lds index ccddbf7dc9..693df74061 100644 --- a/arch/arc/cpu/u-boot.lds +++ b/arch/arc/cpu/u-boot.lds @@ -13,6 +13,7 @@ SECTIONS .text : { *(.__text_start) *(.__image_copy_start) + arch/arc/lib/start.o (.text*) *(.text*) } diff --git a/arch/arc/lib/Makefile b/arch/arc/lib/Makefile index b88790492d..459bba9f66 100644 --- a/arch/arc/lib/Makefile +++ b/arch/arc/lib/Makefile @@ -4,6 +4,7 @@ # SPDX-License-Identifier: GPL-2.0+ # +head-y := start.o obj-y += cache.o obj-y += cpu.o obj-y += interrupts.o @@ -18,7 +19,6 @@ obj-y += memcpy-700.o obj-y += memset.o obj-y += reset.o obj-y += timer.o -obj-y += start.o obj-y += ints_low.o obj-y += init_helpers.o -- cgit v1.2.3 From a811492e4f386f79b122b210ac8e66915c27f767 Mon Sep 17 00:00:00 2001 From: Alexey Brodkin Date: Fri, 10 Apr 2015 19:22:40 +0300 Subject: arc: fix separate compilation of start.o While testing "arc: make sure _start is in the beginning of .text section" I haven't done proper clean-up of built binaries and so missed another tiny bit that lead to the following error: --->8--- LD u-boot arc-linux-ld.bfd: cannot find arch/arc/lib/start.o Makefile:1107: recipe for target 'u-boot' failed make: *** [u-boot] Error 1 --->8--- Fix is trivial: put "start.o" in "extra-y". Signed-off-by: Alexey Brodkin --- arch/arc/lib/Makefile | 1 + 1 file changed, 1 insertion(+) diff --git a/arch/arc/lib/Makefile b/arch/arc/lib/Makefile index 459bba9f66..e592802907 100644 --- a/arch/arc/lib/Makefile +++ b/arch/arc/lib/Makefile @@ -4,6 +4,7 @@ # SPDX-License-Identifier: GPL-2.0+ # +extra-y = start.o head-y := start.o obj-y += cache.o obj-y += cpu.o -- cgit v1.2.3