Working on Zynq SMP Port

Hi Folks. I’ve been doing some work updating the Zynq 7000 port to support SMP. I am going through the test routines and having some success. Here is my current status of the tests:

Intr Queue - Timer issues
Dynamic - Spin Deadlock
Blocking Queue - OK
Block Timer - OK
Count Sem - OK
Generic Queue - OK
Recursive Mutex - OK
Semaphore - OK
Math - OK
Timer Demo - OK
Queue Overwrite - OK
Event Group - Assert tasks.c line 3223
Task Notify - OK
Intr Sem - OK
Static - OK
Abort Delay - OK
Message Buffer - Check never executes
Stream Buffer - Spin Deadlock
Stream Buffer Intr - OK
Queue Set - OK
Reg - OK

I probably have more than one issue here, but I thought it was a good time to ask about the assert on tasks.c line 3223. I think the assert is showing that the scheduler is not suspended even though it is in a critical section.

I did have the same issues earlier with interrupts not being disabled at the correct time as mentioned here: Cortex-A9 port: disable interrupts before writing to ICC_PMR . Does the assert maybe indicate that the issue is still not fixed?

This is the assert, just in case someone’s line numbers don’t match:

I think I have solved the problem. The main issue seems to have been that I forgot to set the YieldCore interrupt to be low priority, so it was probably executing some times when interrupts were supposed to be masked. I’m also still fine tuning the interrupt enable / mask functions so that probably also had an effect.

I now have all the tests running and passing, except for the Intr Queue test. Hopefully the only thing needed for that one is to struggle with the Xilinx API a bit in order to get the 3 timers running properly.

Hi, I have recently raised a PR for the Zynq7000 SMP port I have developed if you are interested. I have already tested it and I also had troubles with some tests initially. I will raise a PR for the demo as soon as I solve a tricky problem in the interrupt queue test.
For what concerns the scugic driver I have also developed some functions to ease the interrupts configuration. You can find a small documentation in the functions declaration inside portmacro.h. Feel free to ask if you have any trouble with it.

3 Likes

Thanks. I saw some of your earlier posts but didn’t realize that you were also working with the Zynq. Still testing, but I think I have the interrupts working well now. If I make any progress with the last test (Intr Queue), I’ll let you know.

2 Likes

Thank you for raising the PR.

1 Like