From 98cd062e820135b4759a21d9506a5df884527e7b Mon Sep 17 00:00:00 2001 From: Giovanni Di Sirio Date: Sat, 13 Feb 2016 08:51:45 +0000 Subject: Fixed bug #706. git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@8874 35acf78f-673a-0410-8e92-d51de3d6d3f4 --- os/nil/ports/ARMCMx/compilers/GCC/nilcoreasm_v7m.s | 10 ++++++++++ os/rt/ports/ARMCMx/compilers/GCC/chcoreasm_v7m.s | 10 ++++++++++ os/rt/ports/ARMCMx/compilers/IAR/chcoreasm_v7m.s | 10 ++++++++++ os/rt/ports/ARMCMx/compilers/RVCT/chcoreasm_v7m.s | 12 +++++++++++- readme.txt | 4 ++++ 5 files changed, 45 insertions(+), 1 deletion(-) diff --git a/os/nil/ports/ARMCMx/compilers/GCC/nilcoreasm_v7m.s b/os/nil/ports/ARMCMx/compilers/GCC/nilcoreasm_v7m.s index 298110f09..a98802798 100644 --- a/os/nil/ports/ARMCMx/compilers/GCC/nilcoreasm_v7m.s +++ b/os/nil/ports/ARMCMx/compilers/GCC/nilcoreasm_v7m.s @@ -64,8 +64,18 @@ _port_switch: #if CORTEX_USE_FPU vpush {s16-s31} #endif + str sp, [r1, #CONTEXT_OFFSET] +#if (CORTEX_SIMPLIFIED_PRIORITY == FALSE) && \ + ((CORTEX_MODEL == 3) || (CORTEX_MODEL == 4)) + /* Workaround for ARM errata 752419, only applied if + condition exists for it to be triggered.*/ + ldr r3, [r0, #CONTEXT_OFFSET] + mov sp, r3 +#else ldr sp, [r0, #CONTEXT_OFFSET] +#endif + #if CORTEX_USE_FPU vpop {s16-s31} #endif diff --git a/os/rt/ports/ARMCMx/compilers/GCC/chcoreasm_v7m.s b/os/rt/ports/ARMCMx/compilers/GCC/chcoreasm_v7m.s index b232e0397..a303c0256 100644 --- a/os/rt/ports/ARMCMx/compilers/GCC/chcoreasm_v7m.s +++ b/os/rt/ports/ARMCMx/compilers/GCC/chcoreasm_v7m.s @@ -64,8 +64,18 @@ _port_switch: #if CORTEX_USE_FPU vpush {s16-s31} #endif + str sp, [r1, #CONTEXT_OFFSET] +#if (CORTEX_SIMPLIFIED_PRIORITY == FALSE) && \ + ((CORTEX_MODEL == 3) || (CORTEX_MODEL == 4)) + /* Workaround for ARM errata 752419, only applied if + condition exists for it to be triggered.*/ + ldr r3, [r0, #CONTEXT_OFFSET] + mov sp, r3 +#else ldr sp, [r0, #CONTEXT_OFFSET] +#endif + #if CORTEX_USE_FPU vpop {s16-s31} #endif diff --git a/os/rt/ports/ARMCMx/compilers/IAR/chcoreasm_v7m.s b/os/rt/ports/ARMCMx/compilers/IAR/chcoreasm_v7m.s index 12516a2fc..2f58a73aa 100644 --- a/os/rt/ports/ARMCMx/compilers/IAR/chcoreasm_v7m.s +++ b/os/rt/ports/ARMCMx/compilers/IAR/chcoreasm_v7m.s @@ -72,8 +72,18 @@ _port_switch: #if CORTEX_USE_FPU vpush {s16-s31} #endif + str sp, [r1, #CONTEXT_OFFSET] +#if (CORTEX_SIMPLIFIED_PRIORITY == FALSE) && \ + ((CORTEX_MODEL == 3) || (CORTEX_MODEL == 4)) + /* Workaround for ARM errata 752419, only applied if + condition exists for it to be triggered.*/ + ldr r3, [r0, #CONTEXT_OFFSET] + mov sp, r3 +#else ldr sp, [r0, #CONTEXT_OFFSET] +#endif + #if CORTEX_USE_FPU vpop {s16-s31} #endif diff --git a/os/rt/ports/ARMCMx/compilers/RVCT/chcoreasm_v7m.s b/os/rt/ports/ARMCMx/compilers/RVCT/chcoreasm_v7m.s index 1d23a99f3..69bfaa59c 100644 --- a/os/rt/ports/ARMCMx/compilers/RVCT/chcoreasm_v7m.s +++ b/os/rt/ports/ARMCMx/compilers/RVCT/chcoreasm_v7m.s @@ -67,8 +67,18 @@ _port_switch PROC #if CORTEX_USE_FPU vpush {s16-s31} #endif - str sp, [r1, #CONTEXT_OFFSET] + + str sp, [r1, #CONTEXT_OFFSET] +#if (CORTEX_SIMPLIFIED_PRIORITY == FALSE) && \ + ((CORTEX_MODEL == 3) || (CORTEX_MODEL == 4)) + /* Workaround for ARM errata 752419, only applied if + condition exists for it to be triggered.*/ + ldr r3, [r0, #CONTEXT_OFFSET] + mov sp, r3 +#else ldr sp, [r0, #CONTEXT_OFFSET] +#endif + #if CORTEX_USE_FPU vpop {s16-s31} #endif diff --git a/readme.txt b/readme.txt index c4e7f18e1..6eaad3b47 100644 --- a/readme.txt +++ b/readme.txt @@ -76,6 +76,10 @@ - RT: Removed the p_msg field from the thread_t structure saving a msg_t-sized field from the structure. Messages now use a new field into the p_u union. Now synchronous messages are even faster. +- NIL: Fixed ARM errata 752419 (bug #706)(backported to 2.6.10, + 3.0.6 and 16.1.4). +- RT: Fixed ARM errata 752419 (bug #706)(backported to 2.6.10, + 3.0.6 and 16.1.4). - HAL: Fixed unused variable in STM32 SPIv2 driver (bug #705)(backported to 16.1.3). - HAL: Fixed chDbgAssert() still called from STM32 SPIv1 driver (bug #704) -- cgit v1.2.3