Changeset 3de8b81b in mainline


Ignore:
Timestamp:
2006-07-17T00:22:27Z (18 years ago)
Author:
Martin Decky <martin@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
41c4444
Parents:
fcf907e
Message:

sync ppc64 with ppc32

Location:
boot/arch/ppc64/loader
Files:
1 added
6 edited

Legend:

Unmodified
Added
Removed
  • boot/arch/ppc64/loader/Makefile

    rfcf907e r3de8b81b  
    6262        $(USPACEDIR)/ns/ns \
    6363        $(USPACEDIR)/init/init \
    64         $(USPACEDIR)/fb/fb
     64        $(USPACEDIR)/fb/fb \
     65        $(USPACEDIR)/kbd/kbd \
     66        $(USPACEDIR)/console/console \
     67        $(USPACEDIR)/tetris/tetris \
     68        $(USPACEDIR)/ipcc/ipcc \
     69        $(USPACEDIR)/klog/klog
    6570
    6671OBJECTS := $(addsuffix .o,$(basename $(SOURCES)))
  • boot/arch/ppc64/loader/asm.S

    rfcf907e r3de8b81b  
    2929#include "asm.h"
    3030#include "regname.h"
     31#include "debug.inc"
    3132
    3233.text
     
    109110        # r6 = bytes to copy
    110111        # r7 = real_mode (pa)
     112        # r8 = framebuffer (pa)
     113        # r9 = scanline
    111114       
    112115        # disable interrupts
     
    138141real_mode:
    139142       
     143        DEBUG_INIT
     144        DEBUG_real_mode
     145       
    140146        # copy kernel to proper location
    141147        #
    142148        # r5 = trans (pa)
    143149        # r6 = bytes to copy
     150        # r8 = framebuffer (pa)
     151        # r9 = scanline
    144152       
    145153        li r31, PAGE_SIZE >> 2
     
    155163                mtctr r31
    156164                lwz r29, 0(r5)
     165               
     166                DEBUG_INIT
     167                DEBUG_copy_loop
    157168               
    158169                copy_loop:
     
    169180                       
    170181                        bdnz copy_loop
     182                       
     183                        DEBUG_end_copy_loop
    171184               
    172185                addi r5, r5, 4
     
    175188        copy_end:
    176189       
     190        DEBUG_segments
     191       
    177192        # initially fill segment registers
    178 
    179         li r31, 16
    180         mtctr r31
     193       
    181194        li r31, 0
    182         li r30, 0x2000
    183 
    184         seg_fill:
     195       
     196        li r29, 8
     197        mtctr r29
     198        li r30, 0                     # ASID 0 (VSIDs 0 .. 7)
     199
     200        seg_fill_uspace:
    185201       
    186202                mtsrin r30, r31
    187                 addi r30, r30, 0x111
     203                addi r30, r30, 1
    188204                addis r31, r31, 0x1000    # move to next SR
    189205               
    190                 bdnz seg_fill
     206                bdnz seg_fill_uspace
     207       
     208        li r29, 8
     209        mtctr r29
     210        lis r30, 0x4000               # priviledged access only
     211        ori r30, r30, 8               # ASID 0 (VSIDs 8 .. 15)
     212       
     213        seg_fill_kernel:
     214       
     215                mtsrin r30, r31
     216                addi r30, r30, 1
     217                addis r31, r31, 0x1000    # move to next SR
     218               
     219                bdnz seg_fill_kernel
     220       
     221        # create empty Page Hash Table
     222        # on top of memory, size 64 KB
     223       
     224        DEBUG_pht
     225       
     226        lwz r31, 0(r3)                # r31 = memory size
     227       
     228        lis r30, 65536@h
     229        ori r30, r30, 65536@l         # r30 = 65536
     230       
     231        subi r29, r30, 1              # r29 = 65535
     232       
     233        sub r31, r31, r30
     234        andc r31, r31, r29            # pht = ALIGN_DOWN(memory_size - 65536, 65536)
     235       
     236        mtsdr1 r31
     237       
     238        li r29, 2
     239        srw r30, r30, r29             # r30 = 16384
     240        li r29, 0
     241       
     242        pht_clear:
     243               
     244                # write zeroes
     245               
     246                stw r29, 0(r31)
     247               
     248                addi r31, r31, 4
     249                subi r30, r30, 4
     250               
     251                cmpwi r30, 0
     252                beq clear_end
     253               
     254                bdnz pht_clear
     255
     256                DEBUG_end_pht_clear
     257               
     258        clear_end:
     259       
     260        DEBUG_tlb
    191261       
    192262        tlbia
    193263        tlbsync
    194264       
     265        DEBUG_prepare
     266       
    195267        # start the kernel
    196268        #
     269        # pc = KERNEL_START_ADDR
    197270        # r3 = bootinfo (pa)
     271        # sprg0 = KA2PA(KERNEL_START_ADDR)
     272        # sprg3 = physical memory size
     273        # sp = 0 (pa)
    198274       
    199275        lis r31, KERNEL_START_ADDR@ha
     
    201277       
    202278        mtspr srr0, r31
     279       
     280        subis r31, r31, 0x8000
     281        mtsprg0 r31
     282       
     283        lwz r31, 0(r3)
     284        mtsprg3 r31
     285       
     286        li sp, 0
    203287       
    204288        mfmsr r31
     
    208292        sync
    209293        isync
     294       
     295        DEBUG_rfi
    210296        rfid
    211297
  • boot/arch/ppc64/loader/asm.h

    rfcf907e r3de8b81b  
    2727 */
    2828
    29 #ifndef __ASM_H__
    30 #define __ASM_H__
     29#ifndef BOOT_ppc64_ASM_H_
     30#define BOOT_ppc64_ASM_H_
    3131
    3232#define PAGE_SIZE 4096
     
    3636#define TRANS_ITEM_SIZE 8
    3737
    38 #define KERNEL_START_ADDR 0x80004000
     38#define KERNEL_START_ADDR 0x80008000
    3939
    4040#ifndef __ASM__
     
    4545
    4646extern void halt();
    47 extern void jump_to_kernel(void *bootinfo, unsigned long bootinfo_size, void *trans, unsigned long kernel_size, void *real_mode) __attribute__((noreturn));
     47extern void jump_to_kernel(void *bootinfo, unsigned long bootinfo_size, void *trans, unsigned long kernel_size, void *real_mode, void *fb, unsigned long scanline) __attribute__((noreturn));
    4848extern void real_mode();
    4949
  • boot/arch/ppc64/loader/main.c

    rfcf907e r3de8b81b  
    3232#include "_components.h"
    3333#include <ofw.h>
     34#include <align.h>
    3435
    3536#define HEAP_GAP 1024000
     
    102103        }
    103104       
     105        if (!ofw_keyboard(&bootinfo.keyboard)) {
     106                printf("Error: unable to get keyboard properties, halting.\n");
     107                halt();
     108        }
     109       
    104110        printf("\nDevice statistics\n");
    105111        printf(" screen at %L, resolution %dx%d, %d bpp (scanline %d bytes)\n", bootinfo.screen.addr, bootinfo.screen.width, bootinfo.screen.height, bootinfo.screen.bpp, bootinfo.screen.scanline);
     112        printf(" keyboard at %L (size %d bytes)\n", bootinfo.keyboard.addr, bootinfo.keyboard.size);
    106113       
    107114        void *real_mode_pa = ofw_translate(&real_mode);
     
    152159       
    153160        printf("\nBooting the kernel...\n");
    154         jump_to_kernel(bootinfo_pa, sizeof(bootinfo), trans_pa, pages << PAGE_WIDTH, real_mode_pa);
     161        jump_to_kernel(bootinfo_pa, sizeof(bootinfo), trans_pa, pages << PAGE_WIDTH, real_mode_pa, (void *) bootinfo.screen.addr, bootinfo.screen.scanline);
    155162}
  • boot/arch/ppc64/loader/main.h

    rfcf907e r3de8b81b  
    3030#define BOOT_ppc64_MAIN_H_
    3131
    32 #include <ofw.h>
     32#include "ofw.h"
    3333
    3434#define TASKMAP_MAX_RECORDS 32
     
    4040
    4141typedef struct {
    42         unsigned int count;
     42        unsigned long count;
    4343        task_t tasks[TASKMAP_MAX_RECORDS];
    4444} taskmap_t;
    4545
    4646typedef struct {
     47        memmap_t memmap;
    4748        taskmap_t taskmap;
    48         memmap_t memmap;
    4949        screen_t screen;
     50        keyboard_t keyboard;
    5051} bootinfo_t;
    5152
  • boot/arch/ppc64/loader/ofwarch.c

    rfcf907e r3de8b81b  
    5757        if (ofw_get_property(device, "assigned-addresses", &macio, sizeof(macio)) <= 0)
    5858                return false;
    59         keyboard->addr = (void *) macio.addr.addr_lo;
     59        keyboard->addr = (void *) (((unsigned long) macio.addr.addr_lo) | (((unsigned long) macio.addr.addr_hi) << 32));
    6060        keyboard->size = macio.size_lo;
    6161
Note: See TracChangeset for help on using the changeset viewer.