1
0
mirror of https://xff.cz/git/u-boot/ synced 2025-09-01 00:32:04 +02:00

cmd: Add ariscrun command for starting CPUS

CPUS is a power management co-processor on some Allwinner SoCs (H3,
A83T).

Signed-off-by: Ondrej Jirman <megous@megous.com>
This commit is contained in:
Ondrej Jirman
2018-07-09 15:23:50 +02:00
parent 2a81bc8d69
commit a36a1c092a
3 changed files with 79 additions and 0 deletions

View File

@@ -1691,6 +1691,15 @@ endmenu
source "cmd/ti/Kconfig"
menu "sunxi specific command line interface"
config CMD_SUNXI_ARISC
bool "command for starting ARISC code on sunxi platforms"
help
Support for starting OpenRISC coprocessor on sunxi platforms.
endmenu
config CMD_BOOTSTAGE
bool "Enable the 'bootstage' command"
depends on BOOTSTAGE

View File

@@ -169,6 +169,7 @@ obj-$(CONFIG_CMD_PMIC) += pmic.o
obj-$(CONFIG_CMD_REGULATOR) += regulator.o
obj-$(CONFIG_CMD_BLOB) += blob.o
obj-$(CONFIG_CMD_SUNXI_ARISC) += sunxi-arisc.o
# Android Verified Boot 2.0
obj-$(CONFIG_CMD_AVB) += avb.o

69
cmd/sunxi-arisc.c Normal file
View File

@@ -0,0 +1,69 @@
/*
* Written by Ondrej Jirman <megous@megous.com>, 2018
* SPDX-License-Identifier: GPL-2.0+
*/
#include <common.h>
#include <command.h>
#include <asm/io.h>
#include <watchdog.h>
#define R_CPUCFG_BASE 0x01f01c00
static void reset_cpus(int stop)
{
uint32_t cpu_cfg;
cpu_cfg = readl(R_CPUCFG_BASE);
cpu_cfg &= ~(1uL);
writel(cpu_cfg, R_CPUCFG_BASE);
mdelay(1);
if (!stop) {
cpu_cfg |= 1;
writel(cpu_cfg, R_CPUCFG_BASE);
}
}
static int do_arisc_start(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
{
reset_cpus(0);
return 0;
}
static int do_arisc_stop(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
{
reset_cpus(1);
return 0;
}
static int do_arisc_takeover(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
{
reset_cpus(0);
while (1) {
WATCHDOG_RESET();
mdelay(10);
}
return 0;
}
U_BOOT_CMD(
arisc_start, 3, 1, do_arisc_start,
"reset arisc comprocessor and de-assert the reset line",
""
);
U_BOOT_CMD(
arisc_stop, 3, 1, do_arisc_stop,
"reset arisc comprocessor and keep it reset",
""
);
U_BOOT_CMD(
arisc_takeover, 3, 1, do_arisc_takeover,
"reset arisc comprocessor and de-assert the reset line, stop u-boot",
""
);