diff options
author | Alexey Brodkin <abrodkin@synopsys.com> | 2018-05-28 15:27:43 +0300 |
---|---|---|
committer | Alexey Brodkin <abrodkin@synopsys.com> | 2018-05-31 20:13:29 +0300 |
commit | 2c3f9261c80e8171ba813f8baef958c1edac3f0d (patch) | |
tree | 079016e700f0628daa81b8b8cbacf357c04ba0f6 /board | |
parent | 7af51f12bc41c38c537f2b049db21fb4554657b5 (diff) |
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>
Diffstat (limited to 'board')
-rw-r--r-- | board/synopsys/emdk/Kconfig | 12 | ||||
-rw-r--r-- | board/synopsys/emdk/MAINTAINERS | 5 | ||||
-rw-r--r-- | board/synopsys/emdk/Makefile | 7 | ||||
-rw-r--r-- | board/synopsys/emdk/emdk.c | 92 |
4 files changed, 116 insertions, 0 deletions
diff --git a/board/synopsys/emdk/Kconfig b/board/synopsys/emdk/Kconfig new file mode 100644 index 00000000000..a9b834dbfdd --- /dev/null +++ b/board/synopsys/emdk/Kconfig @@ -0,0 +1,12 @@ +if TARGET_EMDK + +config SYS_BOARD + default "emdk" + +config SYS_VENDOR + default "synopsys" + +config SYS_CONFIG_NAME + default "emdk" + +endif diff --git a/board/synopsys/emdk/MAINTAINERS b/board/synopsys/emdk/MAINTAINERS new file mode 100644 index 00000000000..605e3384457 --- /dev/null +++ b/board/synopsys/emdk/MAINTAINERS @@ -0,0 +1,5 @@ +EM DEVELOPMENT KIT BOARD +M: Alexey Brodkin <abrodkin@synopsys.com> +S: Maintained +F: board/synopsys/emdk/ +F: configs/emdk_defconfig diff --git a/board/synopsys/emdk/Makefile b/board/synopsys/emdk/Makefile new file mode 100644 index 00000000000..4926c4e3073 --- /dev/null +++ b/board/synopsys/emdk/Makefile @@ -0,0 +1,7 @@ +# +# Copyright (C) 2018 Synopsys, Inc. All rights reserved. +# +# SPDX-License-Identifier: GPL-2.0+ +# + +obj-y += emdk.o diff --git a/board/synopsys/emdk/emdk.c b/board/synopsys/emdk/emdk.c new file mode 100644 index 00000000000..bbb946a700b --- /dev/null +++ b/board/synopsys/emdk/emdk.c @@ -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" +); |