mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-29 16:10:58 +00:00
aadd3360e6
When we switch to including all linker lists in SPL it is important to not include commands as that may lead to link errors due to other things we have already discarded. In this case, we split the code for supporting the monitor out from the code for loading it. Cc: Vitaly Andrianov <vitalya@ti.com> Cc: Nishanth Menon <nm@ti.com> Cc: Lokesh Vutla <lokeshvutla@ti.com> Signed-off-by: Tom Rini <trini@konsulko.com>
87 lines
1.6 KiB
C
87 lines
1.6 KiB
C
/*
|
|
* K2HK: secure kernel command file
|
|
*
|
|
* (C) Copyright 2012-2014
|
|
* Texas Instruments Incorporated, <www.ti.com>
|
|
*
|
|
* SPDX-License-Identifier: GPL-2.0+
|
|
*/
|
|
|
|
#include <common.h>
|
|
#include <command.h>
|
|
#include <mach/mon.h>
|
|
asm(".arch_extension sec\n\t");
|
|
|
|
static int do_mon_install(cmd_tbl_t *cmdtp, int flag, int argc,
|
|
char * const argv[])
|
|
{
|
|
u32 addr, dpsc_base = 0x1E80000, freq;
|
|
int rcode = 0;
|
|
|
|
if (argc < 2)
|
|
return CMD_RET_USAGE;
|
|
|
|
freq = CONFIG_SYS_HZ_CLOCK;
|
|
|
|
addr = simple_strtoul(argv[1], NULL, 16);
|
|
|
|
rcode = mon_install(addr, dpsc_base, freq);
|
|
printf("## installed monitor, freq [%d], status %d\n",
|
|
freq, rcode);
|
|
|
|
return 0;
|
|
}
|
|
|
|
U_BOOT_CMD(mon_install, 2, 0, do_mon_install,
|
|
"Install boot kernel at 'addr'",
|
|
""
|
|
);
|
|
|
|
static void core_spin(void)
|
|
{
|
|
while (1) {
|
|
asm volatile (
|
|
"dsb\n"
|
|
"isb\n"
|
|
"wfi\n"
|
|
);
|
|
}
|
|
}
|
|
|
|
int do_mon_power(cmd_tbl_t *cmdtp, int flag, int argc,
|
|
char * const argv[])
|
|
{
|
|
int rcode = 0, core_id, on;
|
|
void (*fn)(void);
|
|
|
|
fn = core_spin;
|
|
|
|
if (argc < 3)
|
|
return CMD_RET_USAGE;
|
|
|
|
core_id = simple_strtoul(argv[1], NULL, 16);
|
|
on = simple_strtoul(argv[2], NULL, 16);
|
|
|
|
if (on)
|
|
rcode = mon_power_on(core_id, fn);
|
|
else
|
|
rcode = mon_power_off(core_id);
|
|
|
|
if (on) {
|
|
if (!rcode)
|
|
printf("core %d powered on successfully\n", core_id);
|
|
else
|
|
printf("core %d power on failure\n", core_id);
|
|
} else {
|
|
printf("core %d powered off successfully\n", core_id);
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
U_BOOT_CMD(mon_power, 3, 0, do_mon_power,
|
|
"Power On/Off secondary core",
|
|
"mon_power <coreid> <oper>\n"
|
|
"- coreid (1-3) and oper (1 - ON, 0 - OFF)\n"
|
|
""
|
|
);
|