• Greg Ungerer's avatar
    m68k: fix usp processing on interrupt entry and exception exit · 0c8ff723
    Greg Ungerer authored
    
    
    The action to potentially switch sp register is not occurring at the correct
    point in the interrupt entry or exception exit sequences.
    
    For the interrupt entry case the sp on entry is used to create the stack
    exception frame - but this may well be the user stack pointer, since we
    haven't done the switch yet. Re-order the flow to switch the sp regs then
    use the current sp to create the exception frame.
    
    For the return from exception case the code is unwinding the sp after
    switching sp registers. But it should always unwind the supervisor sp
    first, then carry out any required sp switch.
    
    Note that these problems don't effect operation unless the user sp bit is
    set in the CACR register. Only a single sp is used in the default power up
    state. Previously Linux only used this single sp mode. But modern versions
    of Linux use the user sp mode now, so we need correct behavior for Linux
    to work.
    
    Signed-off-by: default avatarGreg Ungerer <gerg@uclinux.org>
    Reviewed-by: default avatarPeter Crosthwaite <peter.crosthwaite@xilinx.com>
    Reviewed-by: default avatarLaurent Vivier <laurent@vivier.eu>
    Tested-by: default avatarLaurent Vivier <laurent@vivier.eu>
    Message-id: 1434721406-25288-4-git-send-email-gerg@uclinux.org
    Signed-off-by: default avatarPeter Maydell <peter.maydell@linaro.org>
    0c8ff723