iMX7D M4 off when A7 change suspend mode

Hi toradex teams,

I’m a beginner in heterogeneous architect. Following instruction FreeRTOS on the Cortex-M4 of a Colibri iMX7, I’ve already run example hello_world on M4. Currently, in boot up there are 2 OSes run independent: Linux on A7 and RTOS on M4.

As I know, when I change mode for A7 in runtime to suspend mode, M4 still working (I did follow Suspend/Resume on Colibri iMX6/iMX6ULL/iMX7. But when I check program on M4, it no longer works.

I checked it with console debug on UART-B (result below). I realize M4 not echo again like before.

.

My question is how can I test in the case that change A7 to suspend mode while M4 still working?

Thanks and regard!

Hi toradex teams,

I have already changed OS (LXDE BSP 2.8) and make everything the same before. After that, I got result:

  • With suspend mode (mem) and low power mode (standby), M4 don’t work
  • With freeze mode, M4 work normal

My question is: What is OS and version support the exactly what I did? Torizon Evaluation OS (BSP 5.0) can support?

Thanks and regard,

@tuanphan , it is possible to keep M4 running while putting A7 into suspend mode e.g. # echo mem > /sys/power/state. We used to create a low power demo based on iMX7 where M4 measures power consumption when A7 is in suspend mode. Do you modify the hello world demo on M4 ?

Hi @benjamin.tx ,

I don’t change hello_world demo, just testing. In this example, there’re loop function where echo opposite side when I send text from debug console (UART-B).

I’ve already tested with suspend mode but M4 doesn’t work, just only operate in freeze mode. What is OS version do you test? And how about Torizon Evaluation OS (BSP 5.0)

Thanks so much and regard.

Hi @tuanphan , if I remember it correctly ldp demo is based on V2.7. I will test your case as well. For Torizon support, @gustavo.tx , do you know the mainline kernel in Torizon support rpmsg?

@benjamin.tx,

There’s no RPMsg support for the i.MX processors on the mainline kernel, unfortunately.

hi @benjamin.tx, @gustavo.tx

Thanks so much for your support! I think it would be great if Torizon also supports RPMsg in future

Regards,

Hi @tuanphan,

I agree! AFAIK this is planned but we don’t have a timeline for it yet.

Hi @gustavo.tx , thanks for your information. For the suspend issue where M4 also goes into suspend mode after # echo mem > /sys/power/state, I can also reproduce it. I slightly modify hello_world demo to print a string and an index every second.

void HelloTask(void *pvParameters)
{
    uint8_t receiveBuff;
    int i =0;
    const TickType_t xDelay = 1000 / portTICK_PERIOD_MS;

    // Print the initial banner
    PRINTF("\r\nHello World!\n\n\r");

    while(1)
    {
        // Main routine that simply echoes received characters forever

        // First, get character
        //receiveBuff = GETCHAR();

        // Now echo the received character
        //PUTCHAR(receiveBuff);
        vTaskDelay( xDelay );
        PRINTF("\r\nHello Toradex: %d\n\r", i);
        i++;
    }
}

As the following picture shows, M4 stops printing for around 15 seconds after Linux goes into suspend mode. But I do remember M4 on our lower power demo can run even Linux is in suspend mode.

Hi @benjamin.tx!

I checked the source code for the low power demo.
There they’re using systemctl suspend to suspend the system. Can you try using that and see if it works?

Hi @benjamin.tx , @gustavo.tx

Thanks so much for your support. Currently, I think the freeze mode is enough for my application.

Anyway, I just watched the excellent demo here Toradex - Heterogeneous Multicore Low Power Demo . Do you know what is the OS and version for this demo? Which OSes support HMP?

I’m not so sure but I think only Uart-B support for M4. Do you have an example in the case that Uart-B is a master to request to slave (sensor)?

In this demo, you’re using I2C to connect sensor and communicate with sensor, isn’t it?

Thanks and regard,

Hi @gustavo.tx , it is the same with systemctl suspend.

Hi @tuanphan , we provide a layer for Yocto Project. You can build this demo with it. Look at this to set up a Yocto Project build environment. According to the kernel version, it is based on V2.7 Linux BSP.

I’m not so sure but I think only Uart-B support for M4. Do you have an example in the case that Uart-B is a master to request to slave (sensor)?

Yes, you can use UART-B to read a sensor like the hello world demo.

In this demo, you’re using I2C to connect sensor and communicate with sensor, isn’t it?

Yes. You can find more examples here.

Hi @benjamin.tx ,

Thanks for your support!!!

Regard,

Hi @benjamin.tx ,

I have a question about power consumption. With the same situation above. I’ve already tried to experiment with Iris board and Evaluation board. I realized that the power consumption in my case is very high and different from Toradex - Heterogeneous Multicore Low Power Demo

Freeze mode still uses more power consumption, isn’t it?

Best regard,

Hi @tuanphan , my setup is still the same as here. And the above helloworld demo runs on M4. The foloowing scritp brings the module into suspend mode and wakes it up after 10 seconds. Fron this video, you can see it drops to 0.4W. Our hardware engineer carefully designed the low power demo carrier board which has a better performance.

#!/bin/sh
sleep 5
echo +10 > /sys/class/rtc/rtc1/wakealarm
echo mem > /sys/power/state

exit 0

Hi @benjamin.tx ,

In test case with Evaluation board without LCD. When I test with freeze mode, the power consumption drops to ~1.128W.

But when I test with suspend mode like your experiment, the power consumption drop to ~0.84W, so I can save 0.3W and more than anymore by change another carrier board, that’s great. Unfortunately, M4 not working in this case

Currently, I want to the power consumption to be as small as possible. Do you have another way M4 still running in suspend mode?

Best regard!

Hi @gustavo.tx , do you have any idea about this? I tested Linux BSP v3.0 on Colibri iMX7D 1GB eMMC, M4 also stops when A7 goes into suspend mode even no_console_suspend is set. Our low power demo is based on Colibri iMX7D Nand, there may be differences in device trees. I now don’t have Colibri iMX7D Nand at hand to verify it.