serv icon indicating copy to clipboard operation
serv copied to clipboard

`wfi` instruction unsupported / broken

Open m42uko opened this issue 1 year ago • 1 comments

Zephyr 3.6.0 introduces the use of wfi when waiting for interrupts (5fb6e267f629dedb8382da6bcad8018b1bb8930a). Executing this instructions breaks things for us.

How to reproduce?

Run the following example program (based on hello_world) on Zephyr >= 3.6.0:

#include <stdio.h>
#include <zephyr/kernel.h>

int main(void)
{
	int i=0;
	while (1) {
		printf("Hello World! %s %d\n", CONFIG_BOARD_TARGET, i++);
		k_msleep(1000);
	}
	return 0;
}

Observed behavior

Hello World is printed once, then the application locks up. Not even the interrupt handler in the timer driver is ever called again.

Expected behavior

Hello Word is printed every 1 second.

m42uko avatar Aug 02 '24 14:08 m42uko

Ok, that's not good. It's a bit surprising that they didn't make WFI support optional in Zephyr. Either way, I think that we should short-term fix SERV to treat WFI as a nop and long term add proper support since it's a highly useful instruction for the kind of deeply embedded use cases that SERV intends to serve.

olofk avatar Aug 02 '24 20:08 olofk