blob: bcc1c25f8d88bad50aef1747bd3b41019b5bca10 [file] [log] [blame]
/*
* Copyright (c) 2019 Linaro Limited
*
* SPDX-License-Identifier: Apache-2.0
*/
#include <zephyr/kernel.h>
#include <zephyr/sys/printk.h>
#include <zephyr/drivers/ipm.h>
enum cpu_id_t {
MHU_CPU0 = 0,
MHU_CPU1,
MHU_CPU_MAX,
};
const struct device *mhu0;
static void main_cpu_0(void)
{
while (1) {
}
}
static void main_cpu_1(void)
{
const uint32_t set_mhu = 1;
ipm_send(mhu0, 0, MHU_CPU0, &set_mhu, 1);
while (1) {
}
}
static void mhu_isr_callback(const struct device *dev, void *context,
uint32_t cpu_id, volatile void *data)
{
const uint32_t set_mhu = 1;
printk("MHU ISR on CPU %d\n", cpu_id);
if (cpu_id == MHU_CPU0) {
ipm_send(dev, 0, MHU_CPU1, &set_mhu, 1);
} else if (cpu_id == MHU_CPU1) {
printk("MHU Test Done.\n");
}
}
void main(void)
{
printk("IPM MHU sample on %s\n", CONFIG_BOARD);
mhu0 = DEVICE_DT_GET_ANY(arm_mhu);
if (!(mhu0 && device_is_ready(mhu0))) {
printk("CPU %d, get MHU0 fail!\n",
sse_200_platform_get_cpu_id());
while (1) {
}
} else {
printk("CPU %d, get MHU0 success!\n",
sse_200_platform_get_cpu_id());
ipm_register_callback(mhu0, mhu_isr_callback, NULL);
}
if (sse_200_platform_get_cpu_id() == MHU_CPU0) {
wakeup_cpu1();
main_cpu_0();
}
main_cpu_1();
}