linux: add support of Synopsys ARC770-based boards

This patch introduces support of new boards with ARC cores.

 [1] Synopsys SDP board
     This is a new-generation development board from Synopsys that
     consists of base-board and CPU tile-board (which might have a real
     ASIC or FPGA with CPU image).
     It sports a lot of DesignWare peripherals like GMAC, USB, SPI, I2C
     etc and is intended to be used for early development of ARC-based
     products.

 [2] nSIM
     This is a virtual board implemented in Synopsys proprietary
     software simulator (even though available for free for open source
     community). This board has only serial port as a peripheral and so
     it is meant to be used for runtime testing which is especially
     useful during bring-up of new tools and platforms.
     What's also important ARC cores are very configurable so there're
     many variations of options like cache sizes, their line lengths,
     additional hardware blocks like multipliers, dividers etc. And this
     board could be used to make sure built software still runs on
     different HW configurations.

Cc: Felix Fietkau <nbd@openwrt.org>
Cc: Jo-Philipp Wich <jow@openwrt.org>
Cc: Jonas Gorski <jogo@openwrt.org>
Signed-off-by: Alexey Brodkin <abrodkin@synopsys.com>

SVN-Revision: 47589
This commit is contained in:
Felix Fietkau
2015-11-22 19:06:07 +00:00
parent 3a0266b471
commit 576621f1e3
20 changed files with 983 additions and 0 deletions

View File

@@ -0,0 +1,36 @@
From 271777096a31e76b2ffd750bc44efde9656de857 Mon Sep 17 00:00:00 2001
From: Alexey Brodkin <abrodkin@synopsys.com>
Date: Thu, 13 Aug 2015 01:56:02 +0300
Subject: [PATCH] openwrt: arc - remove dependency on DEVTMPFS
OpenWRT builds initramfs so that it doesn't require DEVTMPFS so dropping
this dependency. That helps to escape 2 separate kernel rebuilds with
and without initramfs.
2 builds happen because OpenWRT first builds kernel and later modules.
When building entire kernel with simple "make" INITRAMFS sets to a real
value and so was triggering DEVTMPFS selection. Then when building only
modules with "make modules" command INITRAMFS is zeroed and so kernel
config was changing that lead to full kernel rebuild.
Signed-off-by: Alexey Brodkin <abrodkin@synopsys.com>
---
arch/arc/Kconfig | 2 --
1 file changed, 2 deletions(-)
diff --git a/arch/arc/Kconfig b/arch/arc/Kconfig
index cf96ef2..f0c6d4c 100644
--- a/arch/arc/Kconfig
+++ b/arch/arc/Kconfig
@@ -11,8 +11,6 @@ config ARC
select BUILDTIME_EXTABLE_SORT
select COMMON_CLK
select CLONE_BACKWARDS
- # ARC Busybox based initramfs absolutely relies on DEVTMPFS for /dev
- select DEVTMPFS if !INITRAMFS_SOURCE=""
select GENERIC_ATOMIC64
select GENERIC_CLOCKEVENTS
select GENERIC_FIND_FIRST_BIT
--
2.4.3

View File

@@ -0,0 +1,91 @@
From 142abc9f7b8860638e39cf3850cf7ba328c26b42 Mon Sep 17 00:00:00 2001
From: Alexey Brodkin <abrodkin@synopsys.com>
Date: Sat, 31 Oct 2015 15:58:20 +0300
Subject: [PATCH] openwrt: arc - add OWRTDTB section
This change allows OpenWRT to patch resulting kernel binary with
external .dtb.
That allows us to re-use exactky the same vmlinux on different boards
given its ARC core configurations match (at least cache line sizes etc).
""patch-dtb" searches for ASCII "OWRTDTB:" strign and copies external
.dtb right after it, keeping the string in place.
Signed-off-by: Alexey Brodkin <abrodkin@synopsys.com>
---
arch/arc/kernel/head.S | 10 ++++++++++
arch/arc/kernel/setup.c | 4 +++-
arch/arc/kernel/vmlinux.lds.S | 13 +++++++++++++
3 files changed, 26 insertions(+), 1 deletion(-)
diff --git a/arch/arc/kernel/head.S b/arch/arc/kernel/head.S
index 689dd86..51154ae 100644
--- a/arch/arc/kernel/head.S
+++ b/arch/arc/kernel/head.S
@@ -49,6 +49,16 @@
1:
.endm
+; Here "patch-dtb" will embed external .dtb
+; Note "patch-dtb" searches for ASCII "OWRTDTB:" string
+; and pastes .dtb right after it, hense the string precedes
+; __image_dtb symbol.
+ .section .owrt, "aw",@progbits
+ .ascii "OWRTDTB:"
+ENTRY(__image_dtb)
+ .fill 0x4000
+END(__image_dtb)
+
.section .init.text, "ax",@progbits
;----------------------------------------------------------------
diff --git a/arch/arc/kernel/setup.c b/arch/arc/kernel/setup.c
index c33e77c..96fbfd0 100644
--- a/arch/arc/kernel/setup.c
+++ b/arch/arc/kernel/setup.c
@@ -370,6 +370,8 @@ static inline int is_kernel(unsigned long addr)
return 0;
}
+extern struct boot_param_header __image_dtb;
+
void __init setup_arch(char **cmdline_p)
{
#ifdef CONFIG_ARC_UBOOT_SUPPORT
@@ -383,7 +385,7 @@ void __init setup_arch(char **cmdline_p)
#endif
{
/* No, so try the embedded one */
- machine_desc = setup_machine_fdt(__dtb_start);
+ machine_desc = setup_machine_fdt(&__image_dtb);
if (!machine_desc)
panic("Embedded DT invalid\n");
diff --git a/arch/arc/kernel/vmlinux.lds.S b/arch/arc/kernel/vmlinux.lds.S
index dd35bde..f309104 100644
--- a/arch/arc/kernel/vmlinux.lds.S
+++ b/arch/arc/kernel/vmlinux.lds.S
@@ -30,6 +30,19 @@ SECTIONS
. = CONFIG_LINUX_LINK_BASE;
+ /*
+ * In OpenWRT we want to patch built binary embedding .dtb of choice.
+ * This is implemented with "patch-dtb" utility which searches for
+ * "OWRTDTB:" string in first 16k of image and if it is found
+ * copies .dtb right after mentioned string.
+ *
+ * Note: "OWRTDTB:" won't be overwritten with .dtb, .dtb will follow it.
+ */
+ .owrt : {
+ *(.owrt)
+ . = ALIGN(PAGE_SIZE);
+ }
+
_int_vec_base_lds = .;
.vector : {
*(.vector)
--
2.4.3