Hi experts,
I am using imx8mq board to develop rpmsg in my project. I am running Android 11.0.0_2.0.0. I flashed the M4 image along with Android images with "uuu_imx_android_flash.sh" script. And in uboot I set bootcmd as below:
At first, M4 run normally as expected, But after few seconds, M4 program crashed and Android run normally.
What's the problem maybe?
Thanks
Edward
Hi Sirs:
I follow this community to enable RPMSG function on Android 11_2.2.0 BSP,
but there are booting issue, the dispaly is not enter Adroid UI, it only show "Android animation" logo on the HDMI
. Do you have the same issue ? If yes, Could you let me know how to solved it? Thank a lot.
Hi penny,
No, I haven't this problem. I propose you double checking the dts again if any hardware resource has conflict.
Thank your help. the issue solved.
Great job.
Have you used rpmsg communication between A53 and M4?
Yes, remove m4_reserved node , the issue solved. ^^
--- a/arch/arm64/boot/dts/freescale/imx8mq-evk-rpmsg.dts
+++ b/arch/arm64/boot/dts/freescale/imx8mq-evk-rpmsg.dts
@@ -11,28 +11,19 @@
reserved-memory {
#address-cells = <2>;
#size-cells = <2>;
- m4_reserved: m4@0x80000000 {
- no-map;
- reg = <0 0x80000000 0 0x1000000>;
- };
+ //m4_reserved: m4@0x80000000 {
+ // no-map;
+ // reg = <0 0x80000000 0 0x1000000>;
+ //};
You are welcome. Is it a dts issue caused the problem?
Can you share your logs?
Thanks, it solved by using UART4 not UART2.
But till one problem happened, I run the rpmsg_lite_str_echo_rtos demo. Rpmsg channel has been created in Android(/dev/ttyRPMSG30 exists), and A53 sent "hello world!" to M4 successfully, but M4 cannot receive anything.
Log in Android:
[ 0.000000] OF: reserved mem: initialized node rpmsg_dma@0xb8400000, compatible id shared-dma-pool
[ 0.313304] imx rpmsg driver is registered.
[ 2.441396] imx_rpmsg_probe
[ 2.444346] imx-rpmsg b8000000.rpmsg: assigned reserved memory node rpmsg_dma@0xb8400000
[ 2.452982] virtio_rpmsg_bus virtio0: rpmsg host is online
[ 2.453012] virtio_rpmsg_bus virtio0: creating channel rpmsg-virtual-tty-channel-1 addr 0x1e
[ 6.406768] rpmsg_tty_probe
[ 6.409589] imx_rpmsg_tty virtio0.rpmsg-virtual-tty-channel-1.-1.30: new channel: 0x400 -> 0x1e!
[ 6.418781] Install rpmsg tty driver!
[ 6.422542] rpmsg_send hello world! success.
And log in M4:
RPMSG String Echo FreeRTOS RTOS API Demo...
Nameservice sent, ready for incoming messages...
I'd like to know why M4 cannot receive A53 message even rpmsg channel created between A53 and M4?
I tested on Linux before, there is no issue. I will test on Android asap!
Thanks.
I also tested it on linux and it worked well. But it doesnot work on Android.
I have tested our mcu demo image on Android.M core can accept audio from DirectAudioPlayer.
#################### LOW POWER AUDIO TASK ####################
Build Time: Jul 30 2021--08:48:03
********************************
Wait the Linux kernel boot up to create the link between M core and A core.
********************************
The rpmsg channel between M core and A core created!
********************************
Task A is working now.
No audio playback, M core enters STOP mode!
Playback is running, M core enters RUN mode!
Do you have any updates?
Why do you always respond me a little not finish the question?
Can you share your changes in Android source code? The Android11_2.0.0 demo images can't support M4
Firstly, I modified serveral files as below:
1. add below contents in imx8m/evk_8mq/SharedBoardConfig.mk
BOARD_VENDOR_KERNEL_MODULES += \
$(KERNEL_OUT)/drivers/input/touchscreen/synaptics_dsx/synaptics_dsx_i2c.ko \
$(KERNEL_OUT)/drivers/input/touchscreen/synaptics_dsx/synaptics_dsx_i2c.ko
2. add below contents in imx8m/evk_8mq/BoardConfig.mk
TARGET_BOARD_DTS_CONFIG += imx8mq-rpmsg:imx8mq-evk-rpmsg.dtbq
3. modify arch/arm64/boot/dts/freescale/imx8mq-evk-rpmsg.dtsvdev-nums = <1>;
reg = <0x0 0xb8000000 0x0 0x10000>;
- memory-region = <&vdevbuffer>;
- status = "disabled";
+ memory-region = <&rpmsg_dma_reserved>;
+ status = "okay";
Secondly, compiple the image and flash to your board use below command in ubuntu
./uuu_imx_android_flash.sh -f imx8mq -e -m
remember to name the dtbo-imx8mq-rpmsg.img to dtbo-imx8mq-rpmsg.img
and the m4 bin named as imx8mq_mcu_demo.img when flash image to your board
Thirdly, enter uboot and modify bootcmd as:
setenv bootcmd "bootmcu && boota mmc0"
Can you share your imx8mq-evk-rpmsg.dts?
I found that my dts file is different from your dts
Thanks for your quick reply.
I'd like to know which board did you use. And could you share you dts and which android version or linux kernel version did you use?
Could you test the rpmsg_lite_str_echo_rtos demo?
Sure, it is like below which I reference https://www.spinics.net/lists/arm-kernel/msg739501.html :
// SPDX-License-Identifier: (GPL-2.0 OR MIT)
/*
* Copyright 2019 NXP
*/
/dts-v1/;
#include "imx8mq-evk.dts"
/ {
reserved-memory {
#address-cells = <2>;
#size-cells = <2>;
ranges;
m4_reserved: m4@0x80000000 {
no-map;
reg = <0 0x80000000 0 0x1000000>;
};
rpmsg_reserved: rpmsg@0xb8000000 {
no-map;
reg = <0 0xb8000000 0 0x400000>;
};
rpmsg_dma_reserved:rpmsg_dma@0xb8400000 {
compatible = "shared-dma-pool";
no-map;
reg = <0 0xb8400000 0 0x100000>;
};
};
};
/*
* Regarding to the HW conflications, the following module should be disabled
* when M4 is running on evk board.
* gpt1, i2c2, pwm4, tmu, uart2
*/
&i2c2 {
status = "disabled";
};
&pwm4 {
status = "disabled";
};
&rpmsg{
/*
* 64K for one rpmsg instance:
* --0xb8000000~0xb800ffff: pingpong
*/
vdev-nums = <1>;
reg = <0x0 0xb8000000 0x0 0x10000>;
memory-region = <&rpmsg_dma_reserved>;
status = "okay";
};
&tmu {
status = "disabled";
};
&uart2 {
status = "disabled";
};
The rpmsg dts file in 5.10.x is not using node &rpmsg, you can try to remove it.As we have reserved the M4 memory.The official imx8mq-evk-rpmsg.dts have supported M4 demo program.
reserved-memory { #address-cells = <2>; #size-cells = <2>; ranges; m4_reserved: m4@0x80000000 { no-map; reg = <0 0x80000000 0 0x1000000>; }; vdev0vring0: vdev0vring0@b8000000 { reg = <0 0xb8000000 0 0x8000>; no-map; }; vdev0vring1: vdev0vring1@b8008000 { reg = <0 0xb8008000 0 0x8000>; no-map; }; rsc_table: rsc_table@b80ff000 { reg = <0 0xb80ff000 0 0x1000>; no-map; }; vdevbuffer: vdevbuffer@b8400000 { compatible = "shared-dma-pool"; reg = <0 0xb8400000 0 0x100000>; no-map; }; }; imx8mq-cm4 { compatible = "fsl,imx8mq-cm4"; rsc-da = <0xb8000000>; clocks = <&clk IMX8MQ_CLK_M4_DIV>; mbox-names = "tx", "rx", "rxdb"; mboxes = <&mu 0 1 &mu 1 1 &mu 3 1>; memory-region = <&vdevbuffer>, <&vdev0vring0>, <&vdev0vring1>, <&rsc_table>; syscon = <&src>; };
I tried as you said. But it did not work. /dev/ttyRPMSG* did not apper, how to communicate with M4. Could you run the demo in your side? Thanks.
Thanks.
Have you tried it and does it work in Android?