mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-09-21 07:01:57 +00:00
ARC: Add support for EM Development Kit board
Synopsys DesignWare ARC EM Development Kit (ARC EMDK) is an FPGA-based development platform from Synopsys aimed to speed-up development of software for ARC EM cores and entire subsystems based on ARC EM like Data Fusion, Secure and Sensor & Control subsystems. U-Boot is supposed to be used as a primary bootloader on EMDK allowing users to easily load and start their application from micro-SD card. Signed-off-by: Alexey Brodkin <abrodkin@synopsys.com>
This commit is contained in:
parent
7af51f12bc
commit
2c3f9261c8
9 changed files with 226 additions and 0 deletions
|
@ -150,6 +150,10 @@ config TARGET_AXS101
|
||||||
config TARGET_AXS103
|
config TARGET_AXS103
|
||||||
bool "Support Synopsys Designware SDP board AXS103"
|
bool "Support Synopsys Designware SDP board AXS103"
|
||||||
|
|
||||||
|
config TARGET_EMDK
|
||||||
|
bool "Synopsys EM Development kit"
|
||||||
|
select CPU_ARCEM6
|
||||||
|
|
||||||
config TARGET_HSDK
|
config TARGET_HSDK
|
||||||
bool "Support Synpsys HS DevelopmentKit board"
|
bool "Support Synpsys HS DevelopmentKit board"
|
||||||
|
|
||||||
|
@ -158,6 +162,7 @@ endchoice
|
||||||
source "board/abilis/tb100/Kconfig"
|
source "board/abilis/tb100/Kconfig"
|
||||||
source "board/synopsys/Kconfig"
|
source "board/synopsys/Kconfig"
|
||||||
source "board/synopsys/axs10x/Kconfig"
|
source "board/synopsys/axs10x/Kconfig"
|
||||||
|
source "board/synopsys/emdk/Kconfig"
|
||||||
source "board/synopsys/hsdk/Kconfig"
|
source "board/synopsys/hsdk/Kconfig"
|
||||||
|
|
||||||
endmenu
|
endmenu
|
||||||
|
|
|
@ -4,6 +4,7 @@ dtb-$(CONFIG_TARGET_AXS101) += axs101.dtb
|
||||||
dtb-$(CONFIG_TARGET_AXS103) += axs103.dtb
|
dtb-$(CONFIG_TARGET_AXS103) += axs103.dtb
|
||||||
dtb-$(CONFIG_TARGET_NSIM) += nsim.dtb
|
dtb-$(CONFIG_TARGET_NSIM) += nsim.dtb
|
||||||
dtb-$(CONFIG_TARGET_TB100) += abilis_tb100.dtb
|
dtb-$(CONFIG_TARGET_TB100) += abilis_tb100.dtb
|
||||||
|
dtb-$(CONFIG_TARGET_EMDK) += emdk.dtb
|
||||||
dtb-$(CONFIG_TARGET_HSDK) += hsdk.dtb
|
dtb-$(CONFIG_TARGET_HSDK) += hsdk.dtb
|
||||||
|
|
||||||
targets += $(dtb-y)
|
targets += $(dtb-y)
|
||||||
|
|
33
arch/arc/dts/emdk.dts
Normal file
33
arch/arc/dts/emdk.dts
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
// SPDX-License-Identifier: GPL-2.0+
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2018 Synopsys, Inc. All rights reserved.
|
||||||
|
*/
|
||||||
|
/dts-v1/;
|
||||||
|
|
||||||
|
#include "skeleton.dtsi"
|
||||||
|
|
||||||
|
/ {
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <1>;
|
||||||
|
|
||||||
|
aliases {
|
||||||
|
console = &uart0;
|
||||||
|
};
|
||||||
|
|
||||||
|
cpu_card {
|
||||||
|
core_clk: core_clk {
|
||||||
|
#clock-cells = <0>;
|
||||||
|
compatible = "fixed-clock";
|
||||||
|
clock-frequency = <40000000>;
|
||||||
|
u-boot,dm-pre-reloc;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
uart0: serial0@f0004000 {
|
||||||
|
compatible = "snps,dw-apb-uart";
|
||||||
|
clock-frequency = <100000000>;
|
||||||
|
reg = <0xf0004000 0x1000>;
|
||||||
|
reg-shift = <2>;
|
||||||
|
reg-io-width = <4>;
|
||||||
|
};
|
||||||
|
};
|
12
board/synopsys/emdk/Kconfig
Normal file
12
board/synopsys/emdk/Kconfig
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
if TARGET_EMDK
|
||||||
|
|
||||||
|
config SYS_BOARD
|
||||||
|
default "emdk"
|
||||||
|
|
||||||
|
config SYS_VENDOR
|
||||||
|
default "synopsys"
|
||||||
|
|
||||||
|
config SYS_CONFIG_NAME
|
||||||
|
default "emdk"
|
||||||
|
|
||||||
|
endif
|
5
board/synopsys/emdk/MAINTAINERS
Normal file
5
board/synopsys/emdk/MAINTAINERS
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
EM DEVELOPMENT KIT BOARD
|
||||||
|
M: Alexey Brodkin <abrodkin@synopsys.com>
|
||||||
|
S: Maintained
|
||||||
|
F: board/synopsys/emdk/
|
||||||
|
F: configs/emdk_defconfig
|
7
board/synopsys/emdk/Makefile
Normal file
7
board/synopsys/emdk/Makefile
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
#
|
||||||
|
# Copyright (C) 2018 Synopsys, Inc. All rights reserved.
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: GPL-2.0+
|
||||||
|
#
|
||||||
|
|
||||||
|
obj-y += emdk.o
|
92
board/synopsys/emdk/emdk.c
Normal file
92
board/synopsys/emdk/emdk.c
Normal file
|
@ -0,0 +1,92 @@
|
||||||
|
// SPDX-License-Identifier: GPL-2.0+
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2018 Synopsys, Inc. All rights reserved.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <common.h>
|
||||||
|
#include <dwmmc.h>
|
||||||
|
#include <malloc.h>
|
||||||
|
|
||||||
|
DECLARE_GLOBAL_DATA_PTR;
|
||||||
|
|
||||||
|
#define ARC_PERIPHERAL_BASE 0xF0000000
|
||||||
|
#define SDIO_BASE (ARC_PERIPHERAL_BASE + 0x10000)
|
||||||
|
|
||||||
|
int board_mmc_init(bd_t *bis)
|
||||||
|
{
|
||||||
|
struct dwmci_host *host = NULL;
|
||||||
|
|
||||||
|
host = malloc(sizeof(struct dwmci_host));
|
||||||
|
if (!host) {
|
||||||
|
printf("dwmci_host malloc fail!\n");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
memset(host, 0, sizeof(struct dwmci_host));
|
||||||
|
host->name = "Synopsys Mobile storage";
|
||||||
|
host->ioaddr = (void *)SDIO_BASE;
|
||||||
|
host->buswidth = 4;
|
||||||
|
host->dev_index = 0;
|
||||||
|
host->bus_hz = 50000000;
|
||||||
|
|
||||||
|
add_dwmci(host, host->bus_hz / 2, 400000);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#define CREG_BASE 0xF0001000
|
||||||
|
#define CREG_BOOT_OFFSET 0
|
||||||
|
#define CREG_BOOT_WP_OFFSET 8
|
||||||
|
|
||||||
|
#define CGU_BASE 0xF0000000
|
||||||
|
#define CGU_IP_SW_RESET 0x0FF0
|
||||||
|
|
||||||
|
void reset_cpu(ulong addr)
|
||||||
|
{
|
||||||
|
writel(1, (u32 *)(CGU_BASE + CGU_IP_SW_RESET));
|
||||||
|
while (1)
|
||||||
|
; /* loop forever till reset */
|
||||||
|
}
|
||||||
|
|
||||||
|
static int do_emdk_rom(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
|
||||||
|
{
|
||||||
|
u32 creg_boot = readl((u32 *)(CREG_BASE + CREG_BOOT_OFFSET));
|
||||||
|
|
||||||
|
if (!strcmp(argv[1], "unlock"))
|
||||||
|
creg_boot &= ~BIT(CREG_BOOT_WP_OFFSET);
|
||||||
|
else if (!strcmp(argv[1], "lock"))
|
||||||
|
creg_boot |= BIT(CREG_BOOT_WP_OFFSET);
|
||||||
|
else
|
||||||
|
return CMD_RET_USAGE;
|
||||||
|
|
||||||
|
writel(creg_boot, (u32 *)(CREG_BASE + CREG_BOOT_OFFSET));
|
||||||
|
|
||||||
|
return CMD_RET_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
cmd_tbl_t cmd_emdk[] = {
|
||||||
|
U_BOOT_CMD_MKENT(rom, 2, 0, do_emdk_rom, "", ""),
|
||||||
|
};
|
||||||
|
|
||||||
|
static int do_emdk(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
|
||||||
|
{
|
||||||
|
cmd_tbl_t *c;
|
||||||
|
|
||||||
|
c = find_cmd_tbl(argv[1], cmd_emdk, ARRAY_SIZE(cmd_emdk));
|
||||||
|
|
||||||
|
/* Strip off leading 'emdk' command */
|
||||||
|
argc--;
|
||||||
|
argv++;
|
||||||
|
|
||||||
|
if (c == NULL || argc > c->maxargs)
|
||||||
|
return CMD_RET_USAGE;
|
||||||
|
|
||||||
|
return c->cmd(cmdtp, flag, argc, argv);
|
||||||
|
}
|
||||||
|
|
||||||
|
U_BOOT_CMD(
|
||||||
|
emdk, CONFIG_SYS_MAXARGS, 0, do_emdk,
|
||||||
|
"Synopsys EMDK specific commands",
|
||||||
|
"rom unlock - Unlock non-volatile memory for writing\n"
|
||||||
|
"emdk rom lock - Lock non-volatile memory to prevent writing\n"
|
||||||
|
);
|
31
configs/emdk_defconfig
Normal file
31
configs/emdk_defconfig
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
CONFIG_ARC=y
|
||||||
|
CONFIG_ISA_ARCV2=y
|
||||||
|
CONFIG_CPU_ARCEM6=y
|
||||||
|
CONFIG_TARGET_EMDK=y
|
||||||
|
CONFIG_SYS_TEXT_BASE=0x00000000
|
||||||
|
CONFIG_SYS_CLK_FREQ=40000000
|
||||||
|
CONFIG_DEFAULT_DEVICE_TREE="emdk"
|
||||||
|
# CONFIG_ARCH_FIXUP_FDT_MEMORY is not set
|
||||||
|
CONFIG_VERSION_VARIABLE=y
|
||||||
|
CONFIG_HUSH_PARSER=y
|
||||||
|
CONFIG_SYS_PROMPT="emdk# "
|
||||||
|
# CONFIG_CMD_BOOTD is not set
|
||||||
|
# CONFIG_CMD_ELF is not set
|
||||||
|
# CONFIG_CMD_XIMG is not set
|
||||||
|
CONFIG_CMD_MMC=y
|
||||||
|
CONFIG_CMD_CACHE=y
|
||||||
|
CONFIG_CMD_FAT=y
|
||||||
|
CONFIG_OF_CONTROL=y
|
||||||
|
CONFIG_OF_EMBED=y
|
||||||
|
CONFIG_ENV_IS_IN_FAT=y
|
||||||
|
CONFIG_ENV_FAT_INTERFACE="mmc"
|
||||||
|
CONFIG_ENV_FAT_DEVICE_AND_PART="0:1"
|
||||||
|
# CONFIG_NET is not set
|
||||||
|
CONFIG_DM=y
|
||||||
|
CONFIG_MMC=y
|
||||||
|
CONFIG_MMC_DW=y
|
||||||
|
CONFIG_DM_SERIAL=y
|
||||||
|
CONFIG_SYS_NS16550=y
|
||||||
|
CONFIG_FS_FAT_MAX_CLUSTSIZE=4096
|
||||||
|
CONFIG_USE_PRIVATE_LIBGCC=y
|
||||||
|
CONFIG_PANIC_HANG=y
|
40
include/configs/emdk.h
Normal file
40
include/configs/emdk.h
Normal file
|
@ -0,0 +1,40 @@
|
||||||
|
/* SPDX-License-Identifier: GPL-2.0+ */
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2018 Synopsys, Inc. All rights reserved.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _CONFIG_EMDK_H_
|
||||||
|
#define _CONFIG_EMDK_H_
|
||||||
|
|
||||||
|
#include <linux/sizes.h>
|
||||||
|
|
||||||
|
#define CONFIG_SYS_MONITOR_BASE CONFIG_SYS_TEXT_BASE
|
||||||
|
|
||||||
|
#define CONFIG_SYS_SDRAM_BASE 0x10000000
|
||||||
|
#define CONFIG_SYS_SDRAM_SIZE SZ_8M
|
||||||
|
|
||||||
|
#define CONFIG_SYS_INIT_SP_ADDR (CONFIG_SYS_SDRAM_BASE + SZ_1M)
|
||||||
|
|
||||||
|
#define CONFIG_SYS_MALLOC_LEN SZ_64K
|
||||||
|
#define CONFIG_SYS_LOAD_ADDR CONFIG_SYS_SDRAM_BASE
|
||||||
|
|
||||||
|
/* Required by DW MMC driver */
|
||||||
|
#define CONFIG_BOUNCE_BUFFER
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Environment
|
||||||
|
*/
|
||||||
|
#define CONFIG_ENV_SIZE SZ_4K
|
||||||
|
#define CONFIG_BOOTFILE "app.bin"
|
||||||
|
#define CONFIG_LOADADDR CONFIG_SYS_LOAD_ADDR
|
||||||
|
|
||||||
|
#define CONFIG_EXTRA_ENV_SETTINGS \
|
||||||
|
"upgrade_image=u-boot.bin\0" \
|
||||||
|
"upgrade=emdk rom unlock && " \
|
||||||
|
"fatload mmc 0 ${loadaddr} ${upgrade_image} && " \
|
||||||
|
"cp.b ${loadaddr} 0 ${filesize} && " \
|
||||||
|
"dcache flush && " \
|
||||||
|
"emdk rom lock\0"
|
||||||
|
|
||||||
|
#endif /* _CONFIG_EMDK_H_ */
|
||||||
|
|
Loading…
Reference in a new issue