123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- // 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;
- }
- int board_mmc_getcd(struct mmc *mmc)
- {
- struct dwmci_host *host = mmc->priv;
- return !(dwmci_readl(host, DWMCI_CDETECT) & 1);
- }
- #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_emsdp_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_emsdp[] = {
- U_BOOT_CMD_MKENT(rom, 2, 0, do_emsdp_rom, "", ""),
- };
- static int do_emsdp(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
- {
- cmd_tbl_t *c;
- c = find_cmd_tbl(argv[1], cmd_emsdp, ARRAY_SIZE(cmd_emsdp));
- /* Strip off leading 'emsdp' command */
- argc--;
- argv++;
- if (c == NULL || argc > c->maxargs)
- return CMD_RET_USAGE;
- return c->cmd(cmdtp, flag, argc, argv);
- }
- U_BOOT_CMD(
- emsdp, CONFIG_SYS_MAXARGS, 0, do_emsdp,
- "Synopsys EMSDP specific commands",
- "rom unlock - Unlock non-volatile memory for writing\n"
- "emsdp rom lock - Lock non-volatile memory to prevent writing\n"
- );
|