Changeset 208b5f5 in mainline for kernel/arch/sparc32/src


Ignore:
Timestamp:
2013-12-29T14:32:55Z (12 years ago)
Author:
Martin Decky <martin@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
4c14b88, 6fa9a99d, 9be30cdf, aacdb8e
Parents:
2a13328
Message:

cherrypick important fixes and updates from lp:~jceel/helenos/leon3

Location:
kernel/arch/sparc32/src
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • kernel/arch/sparc32/src/context.S

    r2a13328 r208b5f5  
    5151                subcc %g1, 1, %g1
    5252                bg 1b
    53        
    54         save %sp, -64, %sp
     53                save %sp, -64, %sp
    5554       
    5655        mov 7, %g1
     
    5857                subcc %g1, 1, %g1
    5958                bg 1b
    60        
    61         restore
     59                restore
    6260       
    6361        CONTEXT_SAVE_ARCH_CORE %o0
     
    8886                subcc %g1, 1, %g1
    8987                bg 1b
    90        
    91         save %sp, -64, %sp
     88                save %sp, -64, %sp
    9289       
    9390        mov 7, %g1
     
    9592                subcc %g1, 1, %g1
    9693                bg 1b
    97        
    98         restore
     94                restore
    9995       
    10096        CONTEXT_RESTORE_ARCH_CORE %o0
  • kernel/arch/sparc32/src/debug/stacktrace.c

    r2a13328 r208b5f5  
    6565bool kernel_frame_pointer_prev(stack_trace_context_t *ctx, uintptr_t *prev)
    6666{
    67         uint64_t *stack = (void *) ctx->fp;
     67        uint32_t *stack = (void *) ctx->fp;
    6868        alloc_window_and_flush();
    6969        *prev = stack[FRAME_OFFSET_FP_PREV];
     
    7373bool kernel_return_address_get(stack_trace_context_t *ctx, uintptr_t *ra)
    7474{
    75         uint64_t *stack = (void *) ctx->fp;
     75        uint32_t *stack = (void *) ctx->fp;
    7676        alloc_window_and_flush();
    7777        *ra = stack[FRAME_OFFSET_RA];
  • kernel/arch/sparc32/src/machine/leon3/leon3.c

    r2a13328 r208b5f5  
    120120        grlib_irqmp_clear(&machine.irqmp, irqnum);
    121121       
    122         irq_t *irq = irq_dispatch_and_lock(irqnum);
     122        irq_t *irq = irq_dispatch_and_lock(exc);
    123123        if (irq) {
    124124                irq->handler(irq);
     
    140140static void leon3_input_init(void)
    141141{
    142 #if 0
    143142        grlib_uart_t *scons_inst;
    144143       
     
    158157                }
    159158        }
    160 #endif
    161159}
    162160
  • kernel/arch/sparc32/src/mm/tlb.c

    r2a13328 r208b5f5  
    3232
    3333#include <mm/tlb.h>
     34#include <arch/arch.h>
    3435#include <arch/mm/asid.h>
     36#include <arch/mm/as.h>
     37#include <arch/mm/page.h>
    3538#include <arch/asm.h>
    3639#include <typedefs.h>
     
    3841void tlb_invalidate_all(void)
    3942{
     43        asi_u32_write(ASI_MMUCACHE, 0, 1);
     44        asi_u32_write(ASI_MMUFLUSH, 0x400, 1);
    4045}
    4146
  • kernel/arch/sparc32/src/sparc32.c

    r2a13328 r208b5f5  
    5555char memcpy_from_uspace_failover_address;
    5656char memcpy_to_uspace_failover_address;
     57
    5758static bootinfo_t machine_bootinfo;
    5859
     
    104105void arch_post_smp_init(void)
    105106{
     107        machine_input_init();
    106108}
    107109
  • kernel/arch/sparc32/src/trap_table.S

    r2a13328 r208b5f5  
    165165        save
    166166       
    167         ldd [%sp +  0], %l0
    168         ldd [%sp +  8], %l2
     167        ldd [%sp + 0], %l0
     168        ldd [%sp + 8], %l2
    169169        ldd [%sp + 16], %l4
    170170        ldd [%sp + 24], %l6
     
    430430        nop
    431431       
    432        
    433432        1:
    434433                /* Rotate WIM on bit LEFT, we have 8 windows */
     
    442441                mov %g0, %wim
    443442                nop; nop; nop
    444                
     443       
    445444        /* Kernel: */
    446445        restore
     
    563562                mov %psr, %l0
    564563                or %l0, (1 << 5), %l0
     564                or %l0, 0xf00, %l0
    565565                mov %l0, %psr
    566566                nop
     
    568568                nop
    569569                nop
    570                
    571                 /* Get UWB address */
    572                 ##      switch_to_invalid %g5, %g6
    573                 ##      mov %l6, %g1
    574                 ##      switch_back %g5, %g6
    575570               
    576571                /* Flush windows to stack */
     
    582577                add %sp, 128, %o1
    583578               
    584                 /* Return from handler */
     579                /* Return from handler (leave PIL disabled) */
    585580                ld [%sp + 92], %l1
    586581                ld [%sp + 96], %l2
    587582                ld [%sp + 100], %l0
     583                or %l0, 0xf00, %l0
    588584                mov %l0, %psr
    589585                nop
     
    653649                ld [%sp + 116], %g4
    654650                ld [%sp + 120], %g7
     651               
    655652                mov %l3, %sp
    656653                b 10f
     
    659656        9:
    660657                inline_restore_kernel
     658               
    661659                ld [%sp + 104], %g1
    662660                ld [%sp + 108], %g2
     
    664662                ld [%sp + 116], %g4
    665663                ld [%sp + 120], %g7
     664       
     665                /* Restore old sp */
     666                add %sp, 128, %sp
    666667       
    667668        10:
     
    716717                switch_back %g5, %g6
    717718                mov %g7, %sp
    718                 ##      mov %sp, %fp
    719719       
    720720        5:
     
    733733                st %l0, [%sp + 120]
    734734               
    735                 /* Enable traps */
     735                /* Enable traps (without PIL) */
    736736                mov %psr, %l0
    737737                or %l0, (1 << 5), %l0
     738                or %l0, 0xf00, %l0
    738739                mov %l0, %psr
    739740                nop
     
    747748               
    748749                /* Jump to actual subroutine */
    749                 mov %g2, %o0
    750750                call irq_exception
    751751                add %sp, 128, %o1
    752752               
    753                 /* Return from handler */
     753                /* Return from handler (leave PIL disabled) */
    754754                ld [%sp + 92], %l1
    755755                ld [%sp + 96], %l2
    756756                ld [%sp + 100], %l0
     757                or %l0, 0xf00, %l0
    757758                mov %l0, %psr
    758759                nop
     
    766767                 * and save uwb address for future use.
    767768                 */
    768                 if_from_kernel 6f
     769                if_from_kernel 9f
    769770                switch_to_invalid %g5, %g6
    770771                clr %l7
     
    797798                ba 0b
    798799                nop
    799                
     800       
    800801        /*
    801802         * We've restored all user space windows. Now time to
     
    815816                switch_back %g5, %g6
    816817               
    817                 /* If next window is invalid, do inline restore */
    818         6:
    819                 get_wim_number %g6
    820                 get_cwp %g7
    821                 inc %g7
    822                 and %g7, 0x7, %g7
    823                 cmp %g6, %g7
    824                 bne 8f
    825                
    826                 if_from_kernel 7f
    827                
    828                 inline_restore_uspace %g1
    829                 switch_to_invalid %g5, %g6
    830                 mov %g1, %l6
    831                 switch_back %g5, %g6
    832                 b 8f
    833                 nop
    834        
    835         7:
    836                 inline_restore_kernel
    837        
    838         8:
     818                mov %sp, %l3
     819                sub %g2, 128, %sp
    839820                ld [%sp + 104], %g1
    840821                ld [%sp + 108], %g2
     
    842823                ld [%sp + 116], %g4
    843824                ld [%sp + 120], %g7
     825               
     826                mov %l3, %sp
     827                b 10f
     828                nop
     829       
     830        9:
     831                inline_restore_kernel
     832               
     833                ld [%sp + 104], %g1
     834                ld [%sp + 108], %g2
     835                ld [%sp + 112], %g3
     836                ld [%sp + 116], %g4
     837                ld [%sp + 120], %g7
     838               
     839                /* Restore old sp */
     840                add %sp, 128, %sp
     841       
     842        10:
    844843                jmp %l1
    845844                rett %l2
     
    892891                switch_back %g5, %g6
    893892                mov %g7, %sp
    894                 ##      mov %sp, %fp
     893                ## mov %sp, %fp
    895894               
    896895        5:
     
    909908                st %l0, [%sp + 120]
    910909               
    911                 /* Enable traps */
     910                /* Enable traps (without PIL) */
    912911                mov %psr, %l0
    913912                or %l0, (1 << 5), %l0
     913                or %l0, 0xf00, %l0
    914914                mov %l0, %psr
    915915                nop
     
    933933                mov %i5, %o5
    934934               
    935                 /* Return from handler */
     935                /* Return from handler (with PIL disabled) */
    936936                ld [%sp + 92], %l1
    937937                ld [%sp + 96], %l2
     
    940940                mov %psr, %l1
    941941                and %l1, 0xf, %l1
     942                or %l1, 0x00000f00, %l1
    942943                and %l0, 0xfffffff0, %l0
    943944                or %l0, %l1, %l0
     
    10091010                ld [%sp + 116], %g4
    10101011                ld [%sp + 120], %g7
     1012               
    10111013                mov %l1, %sp
     1014                nop
     1015                nop
     1016                nop
     1017               
    10121018                jmp %l2
    10131019                rett %l2 + 4
     
    10351041#define INTERRUPT(_vector, _priority) \
    10361042        .org trap_table + _vector * TRAP_ENTRY_SIZE; \
    1037         mov %psr, %l0 ; \
    1038         mov _priority, %g2 ; \
     1043        mov _priority, %o0 ; \
    10391044        b interrupt_trap ; \
     1045        nop ;
    10401046        nop ;
    10411047
Note: See TracChangeset for help on using the changeset viewer.