From ea36f8946c4db133ea7c9bc992a25906ad4a11b2 Mon Sep 17 00:00:00 2001 From: Giovanni Di Sirio Date: Thu, 18 Jun 2015 08:40:04 +0000 Subject: Fixed bug #607. git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@8044 35acf78f-673a-0410-8e92-d51de3d6d3f4 --- os/nil/ports/e200/compilers/GCC/ivor.s | 18 ++++++++++++------ os/rt/ports/e200/compilers/GCC/ivor.s | 18 ++++++++++++------ readme.txt | 2 ++ 3 files changed, 26 insertions(+), 12 deletions(-) diff --git a/os/nil/ports/e200/compilers/GCC/ivor.s b/os/nil/ports/e200/compilers/GCC/ivor.s index 28d54962a..8bd687c0a 100644 --- a/os/nil/ports/e200/compilers/GCC/ivor.s +++ b/os/nil/ports/e200/compilers/GCC/ivor.s @@ -93,10 +93,13 @@ _IVOR10: lis %r3, 0x0800 /* DIS bit mask. */ mtspr 336, %r3 /* TSR register. */ -#if PPC_USE_IRQ_PREEMPTION - /* Allows preemption while executing the software handler.*/ - wrteei 1 + /* Restoring pre-IRQ MSR register value.*/ + mfSRR1 %r0 +#if !PPC_USE_IRQ_PREEMPTION + /* No preemption, keeping EE disabled.*/ + se_bclri %r0, 16 /* EE = bit 16. */ #endif + mtMSR %r0 /* System tick handler invocation.*/ bl chSysTimerHandlerI @@ -161,10 +164,13 @@ _IVOR4: lwz %r3, 0(%r3) mtCTR %r3 /* Software handler address. */ -#if PPC_USE_IRQ_PREEMPTION - /* Allows preemption while executing the software handler.*/ - wrteei 1 + /* Restoring pre-IRQ MSR register value.*/ + mfSRR1 %r0 +#if !PPC_USE_IRQ_PREEMPTION + /* No preemption, keeping EE disabled.*/ + se_bclri %r0, 16 /* EE = bit 16. */ #endif + mtMSR %r0 /* Exectes the software handler.*/ bctrl diff --git a/os/rt/ports/e200/compilers/GCC/ivor.s b/os/rt/ports/e200/compilers/GCC/ivor.s index acdb6af58..ff43a21df 100644 --- a/os/rt/ports/e200/compilers/GCC/ivor.s +++ b/os/rt/ports/e200/compilers/GCC/ivor.s @@ -98,10 +98,13 @@ _IVOR10: lis %r3, 0x0800 /* DIS bit mask. */ mtspr 336, %r3 /* TSR register. */ -#if PPC_USE_IRQ_PREEMPTION - /* Allows preemption while executing the software handler.*/ - wrteei 1 + /* Restoring pre-IRQ MSR register value.*/ + mfSRR1 %r0 +#if !PPC_USE_IRQ_PREEMPTION + /* No preemption, keeping EE disabled.*/ + se_bclri %r0, 16 /* EE = bit 16. */ #endif + mtMSR %r0 #if CH_DBG_SYSTEM_STATE_CHECK bl _dbg_check_enter_isr @@ -174,10 +177,13 @@ _IVOR4: lwz %r3, 0(%r3) mtCTR %r3 /* Software handler address. */ -#if PPC_USE_IRQ_PREEMPTION - /* Allows preemption while executing the software handler.*/ - wrteei 1 + /* Restoring pre-IRQ MSR register value.*/ + mfSRR1 %r0 +#if !PPC_USE_IRQ_PREEMPTION + /* No preemption, keeping EE disabled.*/ + se_bclri %r0, 16 /* EE = bit 16. */ #endif + mtMSR %r0 /* Exectes the software handler.*/ bctrl diff --git a/readme.txt b/readme.txt index 4cd7437cd..3b20a0a1d 100644 --- a/readme.txt +++ b/readme.txt @@ -80,6 +80,8 @@ - NIL: Added INTC priorities check to the e200z port. - RT: Added INTC priorities check to the e200z port. - HAL: Added support for extra DMA channels in STM32F072 devices. +- RT: SPE-related issue in e200z ports (bug #607). +- NIL: SPE-related issue in e200z ports (bug #607). - HAL: Fixed dependency between STM32 MAC driver and RT (bug #606). - HAL: Fixed wrong macro names in STM32F0xx HAL driver (bug #605). - HAL: Fixed wrong check on ADC3 in STM32F3xx ADC driver (bug #604). -- cgit v1.2.3