OpenCores
URL https://opencores.org/ocsvn/or1k_soc_on_altera_embedded_dev_kit/or1k_soc_on_altera_embedded_dev_kit/trunk

Subversion Repositories or1k_soc_on_altera_embedded_dev_kit

[/] [or1k_soc_on_altera_embedded_dev_kit/] [trunk/] [linux-2.6/] [linux-2.6.24/] [arch/] [m32r/] [boot/] [setup.S] - Rev 3

Compare with Previous | Blame | View Log

/*
 *  linux/arch/m32r/boot/setup.S -- A setup code.
 *
 *  Copyright (C) 2001-2005   Hiroyuki Kondo, Hirokazu Takata,
 *                            Hitoshi Yamamoto, Hayato Fujiwara
 *
 */

#include <linux/linkage.h>
#include <asm/segment.h>
#include <asm/page.h>
#include <asm/pgtable.h>

#include <asm/assembler.h>
#include <asm/mmu_context.h>
#include <asm/m32r.h>

/*
 * References to members of the boot_cpu_data structure.
 */

#define CPU_PARAMS      boot_cpu_data
#define M32R_MCICAR      0xfffffff0
#define M32R_MCDCAR      0xfffffff4
#define M32R_MCCR        0xfffffffc
#define M32R_BSCR0       0xffffffd2

;BSEL
#define BSEL0CR0         0x00ef5000
#define BSEL0CR1         0x00ef5004
#define BSEL1CR0         0x00ef5100
#define BSEL1CR1         0x00ef5104
#define BSEL0CR0_VAL     0x00000000
#define BSEL0CR1_VAL     0x01200100
#define BSEL1CR0_VAL     0x01018000
#define BSEL1CR1_VAL     0x00200001

;SDRAMC
#define SDRAMC_SDRF0     0x00ef6000
#define SDRAMC_SDRF1     0x00ef6004
#define SDRAMC_SDIR0     0x00ef6008
#define SDRAMC_SDIR1     0x00ef600c
#define SDRAMC_SD0ADR    0x00ef6020
#define SDRAMC_SD0ER     0x00ef6024
#define SDRAMC_SD0TR     0x00ef6028
#define SDRAMC_SD0MOD    0x00ef602c
#define SDRAMC_SD1ADR    0x00ef6040
#define SDRAMC_SD1ER     0x00ef6044
#define SDRAMC_SD1TR     0x00ef6048
#define SDRAMC_SD1MOD    0x00ef604c
#define SDRAM0           0x18000000
#define SDRAM1           0x1c000000

/*------------------------------------------------------------------------
 * start up
 */

/*------------------------------------------------------------------------
 * Kernel entry
 */
        .section .boot, "ax"
ENTRY(boot)

/* Set cache mode */
#if defined(CONFIG_CHIP_XNUX2)
        ldi     r0, #-2              ;LDIMM     (r0, M32R_MCCR)
        ldi     r1, #0x0101             ; cache on (with invalidation)
;       ldi     r1, #0x00               ; cache off
        sth     r1, @r0
#elif defined(CONFIG_CHIP_M32700) || defined(CONFIG_CHIP_VDEC2) \
    || defined(CONFIG_CHIP_OPSP)
        ldi     r0, #-4              ;LDIMM     (r0, M32R_MCCR)
        ldi     r1, #0x73               ; cache on (with invalidation)
;       ldi     r1, #0x00               ; cache off
        st      r1, @r0
#elif defined(CONFIG_CHIP_M32102)
        ldi     r0, #-4              ;LDIMM     (r0, M32R_MCCR)
        ldi     r1, #0x101              ; cache on (with invalidation)
;       ldi     r1, #0x00               ; cache off
        st      r1, @r0
#elif defined(CONFIG_CHIP_M32104)
        ldi     r0, #-96                ; DNCR0
        seth    r1, #0x0060             ;  from 0x00600000
        or3     r1, r1, #0x0005         ;  size 2MB
        st      r1, @r0
        seth    r1, #0x0100             ;  from 0x01000000
        or3     r1, r1, #0x0003         ;  size 16MB
        st      r1, @+r0
        seth    r1, #0x0200             ;  from 0x02000000
        or3     r1, r1, #0x0002         ;  size 32MB
        st      r1, @+r0
        ldi     r0, #-4              ;LDIMM     (r0, M32R_MCCR)
        ldi     r1, #0x703              ; cache on (with invalidation)
        st      r1, @r0
#else
#error unknown chip configuration
#endif

#ifdef CONFIG_SMP
        ;; if not BSP (CPU#0) goto AP_loop
        seth    r5, #shigh(M32R_CPUID_PORTL)
        ld      r5, @(low(M32R_CPUID_PORTL), r5)
        bnez    r5, AP_loop
#if !defined(CONFIG_PLAT_USRV)
        ;; boot AP
        ld24    r5, #0xeff2f8           ; IPICR7
        ldi     r6, #0x2                ; IPI to CPU1
        st      r6, @r5
#endif
#endif

/*
 *  Now, Jump to stext
 *        if with MMU,    TLB on.
 *        if with no MMU, only jump.
 */
        .global eit_vector
mmu_on:
        LDIMM   (r13, stext)
#ifdef CONFIG_MMU
        bl      init_tlb
        LDIMM   (r2, eit_vector)                ; set EVB(cr5)
        mvtc    r2, cr5
        seth    r0, #high(MMU_REG_BASE)         ; Set MMU_REG_BASE higher
        or3     r0, r0, #low(MMU_REG_BASE)      ; Set MMU_REG_BASE lower
        ldi     r1, #0x01
        st      r1, @(MATM_offset,r0)           ; Set MATM (T bit ON)
        ld      r0, @(MATM_offset,r0)           ; Check
#else
#if defined(CONFIG_CHIP_M32700)
        seth    r0,#high(M32R_MCDCAR)
        or3     r0,r0,#low(M32R_MCDCAR)
        ld24    r1,#0x8080
        st      r1,@r0
#elif defined(CONFIG_CHIP_M32104)
        LDIMM   (r2, eit_vector)                ; set EVB(cr5)
        mvtc    r2, cr5
#endif
#endif  /* CONFIG_MMU */
        jmp     r13
        nop
        nop

#ifdef CONFIG_SMP
/*
 * AP wait loop
 */
ENTRY(AP_loop)
        ;; disable interrupt
        clrpsw  #0x40
        ;; reset EVB
        LDIMM   (r4, _AP_RE)
        seth    r5, #high(__PAGE_OFFSET)
        or3     r5, r5, #low(__PAGE_OFFSET)
        not     r5, r5
        and     r4, r5
        mvtc    r4, cr5
        ;; disable maskable interrupt
        seth    r4, #high(M32R_ICU_IMASK_PORTL)
        or3     r4, r4, #low(M32R_ICU_IMASK_PORTL)
        ldi     r5, #0
        st      r5, @r4
        ld      r5, @r4
        ;; enable only IPI
        setpsw  #0x40
        ;; LOOOOOOOOOOOOOOP!!!
        .fillinsn
2:
        nop
        nop
        bra     2b
        nop
        nop

#ifdef CONFIG_CHIP_M32700_TS1
        .global dcache_dummy
        .balign 16, 0
dcache_dummy:
        .byte   16
#endif  /* CONFIG_CHIP_M32700_TS1 */
#endif  /* CONFIG_SMP */

        .end

Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.