Changeset f2ea5d8 in mainline for kernel/arch/sparc64/src/start.S


Ignore:
Timestamp:
2006-11-17T20:21:25Z (18 years ago)
Author:
Jakub Jermar <jakub@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
f18cc64
Parents:
282f2c9c
Message:

sparc64 code to support physical memory that starts on non-zero addresses.
Still needs to be tested on systems with such setup.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • kernel/arch/sparc64/src/start.S

    r282f2c9c rf2ea5d8  
    4545.section K_TEXT_START, "ax"
    4646
     47#define BSP_FLAG        1
     48
    4749/*
    48  * Here is where the kernel is passed control
    49  * from the boot loader.
     50 * Here is where the kernel is passed control from the boot loader.
    5051 *
    5152 * The registers are expected to be in this state:
    52  * - %o0 non-zero for the bootstrap processor, zero for application/secondary processors
    53  * - %o1 bootinfo structure address
    54  * - %o2 bootinfo structure size
     53 * - %o0 starting address of physical memory + bootstrap processor flag
     54 *      bits 63...1:    physical memory starting address / 2
     55 *      bit 0:          non-zero on BSP processor, zero on AP processors
     56 * - %o1 bootinfo structure address (BSP only)
     57 * - %o2 bootinfo structure size (BSP only)
    5558 *
    56  * Moreover, we depend on boot having established the
    57  * following environment:
     59 * Moreover, we depend on boot having established the following environment:
    5860 * - TLBs are on
    5961 * - identity mapping for the kernel image
     
    6264.global kernel_image_start
    6365kernel_image_start:
    64         mov %o0, %l7
    65 
     66        mov BSP_FLAG, %l0
     67        and %o0, %l0, %l7                               ! l7 <= bootstrap processor?
     68        andn %o0, %l0, %l6                              ! l6 <= start of physical memory
     69
     70        sethi %hi(physmem_base), %l5
     71        stx %l6, [%l5 + %lo(physmem_base)]
     72
     73        /*
     74         * Get bits 40:13 of physmem_base.
     75         */
     76        sethi %hi(mask_40_13), %l4
     77        sethi %hi(physmem_base_40_13), %l3
     78        ldx [%l4 + %lo(mask_40_13)], %l4
     79        and %l6, %l4, %l5                               ! l5 <= physmem_base[40:13]
     80        stx %l5, [%l3 + %lo(physmem_base_40_13)]
     81
     82        /*
     83         * Prepare kernel 8K TLB data template.
     84         */
     85        sethi %hi(kernel_8k_tlb_data_template), %l4
     86        ldx [%l4 + %lo(kernel_8k_tlb_data_template)], %l3
     87        or %l3, %l5, %l3
     88        stx %l3, [%l4 + %lo(kernel_8k_tlb_data_template)]
     89       
    6690        /*
    6791         * Setup basic runtime environment.
     
    116140#define SET_TLB_DATA(r1, r2, imm) \
    117141        set TTE_CV | TTE_CP | TTE_P | LMA | imm, %r1; \
    118         set PAGESIZE_4M, %r2; \
     142        or %r1, %l5, %r1; \
     143        mov PAGESIZE_4M, %r2; \
    119144        sllx %r2, TTE_SIZE_SHIFT, %r2; \
    120145        or %r1, %r2, %r1; \
     
    303328
    304329.align STACK_ALIGNMENT
    305 .space INITIAL_STACK_SIZE
     330        .space INITIAL_STACK_SIZE
    306331.align STACK_ALIGNMENT
    307332temporary_boot_stack:
    308 .space STACK_WINDOW_SAVE_AREA_SIZE
     333        .space STACK_WINDOW_SAVE_AREA_SIZE
     334
     335
     336.data
     337
     338.align 8
     339.global physmem_base            ! copy of the physical memory base address
     340physmem_base:
     341        .quad 0
     342
     343.global physmem_base_40_13
     344physmem_base_40_13:             ! physmem_base & mask_40_13
     345        .quad 0
     346
     347.global mask_40_13
     348mask_40_13:                     ! constant with bits 40:13 set
     349        .quad (((1 << 41) - 1) & ~((1 << 13) - 1))
     350
     351/*
     352 * This variable is used by the fast_data_MMU_miss trap handler.
     353 * It is initialized to reflect the starting address of physical
     354 * memory.
     355 */
     356.global kernel_8k_tlb_data_template
     357kernel_8k_tlb_data_template:
     358        .quad ((1 << TTE_V_SHIFT) | TTE_CV | TTE_CP | TTE_P | TTE_W)
     359
Note: See TracChangeset for help on using the changeset viewer.