tree 712ce3c35c2b2e5036c30d9f8b7675fcffad49e6
parent b9748e50eaafdb20a0c2438c0286a255c3f59e4c
author magicse7en <magicse7en@outlook.com> 1603738041 +0800
committer GitHub <noreply@github.com> 1603738041 -0700
gpgsig -----BEGIN PGP SIGNATURE-----
 
 wsBcBAABCAAQBQJflxm5CRBK7hj4Ov3rIwAAdHIIAJbNnxw8U9cUab/w47klpuau
 5LP/HYiJsdjwatOsytaYaiSRsy1st+MFbFoMpLamCPZw9TEFp0o5NbZuN7Dr3TlN
 1CuvplKsA+MTNigAte7RlbZzmb6kFt6P3ixgb2cLWPPB59oQrW2lhiDY9GCC6bgj
 OeTbetTYoyifVBYf6dpubuN0QJ3OsSSN0nqe0ikL0IdddnVUWO2Q6Lufm7uGMVyW
 DFUbzsCg5iZjRhD72uZ33cwMmo00yVON9oES+JjBg4fz+xE+xMJxAVyp4Ba+fyWG
 tPZd8CvNd8mMr93oFTOGOumSWs/Lb/VuAP393wpQO0jv+KGRodyIJFWcskyhEMY=
 =GerI
 -----END PGP SIGNATURE-----
 

Xtensa: fix the coproc_area incorrect issue (#117)

* Xtensa: fix the coproc_area incorrect issue

foss-xtensa/amazon-freertos#2 mentioned a issue:
1.
In function pxPortInitialiseStack(StackType_t *pxTopOfStack....)
p = (uint32_t *)(((uint32_t) pxTopOfStack - XT_CP_SIZE) & ~0xf);

In function prvInitialiseNewTask (file: task.c)
pxTopOfStack = (pxStack + (ulStackDepth - 1)) & (~portBYTE_ALIGNMENT_MASK)

So the co-processor area is at
p = (uint32_t *)(((uint32_t)((pxStack + (ulStackDepth - 1)) & (~portBYTE_ALIGNMENT_MASK)) - XT_CP_SIZE) & ~0xf);

2.
In function vPortStoreTaskMPUSettings( .... , StackType_t pxBottomOfStack ...)
xMPUSettings->coproc_area = (StackType_t)((((uint32_t)(pxBottomOfStack + usStackDepth - 1)) - XT_CP_SIZE) & ~0xf);

pxBottomOfStack = pxStack

=> xMPUSettings->coproc_area = (StackType_t*)((((uint32_t)(pxStack+ ulStackDepth - 1)) - XT_CP_SIZE ) & ~0xf);

The p is coproc_area that should be equal to xMPUSettings->coproc_area.

For example, assume pxStack is 0xa0000000, ulStackDepth is 0x2000,
portBYTE_ALIGNMENT_MASK is 0x7f, XT_CP_SIZE is 0x100.

The p = (uint32_t)(((uint32_t)((pxStack + (ulStackDepth - 1)) & (~portBYTE_ALIGNMENT_MASK)) - XT_CP_SIZE) & ~0xf)
      = 0xa0001e80
The xMPUSettings->coproc_area = (StackType_t)((((uint32_t)(pxStack+ usStackDepth - 1)) - XT_CP_SIZE ) & ~0xf)
                              = 0xa0001ef0
Obviously, the p is not equal to the xMPUSettings->coproc_area, which will cause context switching error.

Signed-off-by: magicse7en <magicse7en@outlook.com>

* Update port.c

Co-authored-by: Carl Lundin <53273776+lundinc2@users.noreply.github.com>