/*1* linux/arch/m32r/boot/setup.S -- A setup code.2*3* Copyright (C) 2001-2005 Hiroyuki Kondo, Hirokazu Takata,4* Hitoshi Yamamoto, Hayato Fujiwara5*6*/78#include <linux/linkage.h>9#include <asm/segment.h>10#include <asm/page.h>11#include <asm/pgtable.h>1213#include <asm/assembler.h>14#include <asm/mmu_context.h>15#include <asm/m32r.h>1617/*18* References to members of the boot_cpu_data structure.19*/2021#define CPU_PARAMS boot_cpu_data22#define M32R_MCICAR 0xfffffff023#define M32R_MCDCAR 0xfffffff424#define M32R_MCCR 0xfffffffc25#define M32R_BSCR0 0xffffffd22627;BSEL28#define BSEL0CR0 0x00ef500029#define BSEL0CR1 0x00ef500430#define BSEL1CR0 0x00ef510031#define BSEL1CR1 0x00ef510432#define BSEL0CR0_VAL 0x0000000033#define BSEL0CR1_VAL 0x0120010034#define BSEL1CR0_VAL 0x0101800035#define BSEL1CR1_VAL 0x002000013637;SDRAMC38#define SDRAMC_SDRF0 0x00ef600039#define SDRAMC_SDRF1 0x00ef600440#define SDRAMC_SDIR0 0x00ef600841#define SDRAMC_SDIR1 0x00ef600c42#define SDRAMC_SD0ADR 0x00ef602043#define SDRAMC_SD0ER 0x00ef602444#define SDRAMC_SD0TR 0x00ef602845#define SDRAMC_SD0MOD 0x00ef602c46#define SDRAMC_SD1ADR 0x00ef604047#define SDRAMC_SD1ER 0x00ef604448#define SDRAMC_SD1TR 0x00ef604849#define SDRAMC_SD1MOD 0x00ef604c50#define SDRAM0 0x1800000051#define SDRAM1 0x1c0000005253/*------------------------------------------------------------------------54* start up55*/5657/*------------------------------------------------------------------------58* Kernel entry59*/60.section .boot, "ax"61ENTRY(boot)6263/* Set cache mode */64#if defined(CONFIG_CHIP_XNUX2)65ldi r0, #-2 ;LDIMM (r0, M32R_MCCR)66ldi r1, #0x0101 ; cache on (with invalidation)67; ldi r1, #0x00 ; cache off68sth r1, @r069#elif defined(CONFIG_CHIP_M32700) || defined(CONFIG_CHIP_VDEC2) \70|| defined(CONFIG_CHIP_OPSP)71ldi r0, #-4 ;LDIMM (r0, M32R_MCCR)72ldi r1, #0x73 ; cache on (with invalidation)73; ldi r1, #0x00 ; cache off74st r1, @r075#elif defined(CONFIG_CHIP_M32102)76ldi r0, #-4 ;LDIMM (r0, M32R_MCCR)77ldi r1, #0x101 ; cache on (with invalidation)78; ldi r1, #0x00 ; cache off79st r1, @r080#elif defined(CONFIG_CHIP_M32104)81ldi r0, #-96 ; DNCR082seth r1, #0x0060 ; from 0x0060000083or3 r1, r1, #0x0005 ; size 2MB84st r1, @r085seth r1, #0x0100 ; from 0x0100000086or3 r1, r1, #0x0003 ; size 16MB87st r1, @+r088seth r1, #0x0200 ; from 0x0200000089or3 r1, r1, #0x0002 ; size 32MB90st r1, @+r091ldi r0, #-4 ;LDIMM (r0, M32R_MCCR)92ldi r1, #0x703 ; cache on (with invalidation)93st r1, @r094#else95#error unknown chip configuration96#endif9798#ifdef CONFIG_SMP99;; if not BSP (CPU#0) goto AP_loop100seth r5, #shigh(M32R_CPUID_PORTL)101ld r5, @(low(M32R_CPUID_PORTL), r5)102bnez r5, AP_loop103#if !defined(CONFIG_PLAT_USRV)104;; boot AP105ld24 r5, #0xeff2f8 ; IPICR7106ldi r6, #0x2 ; IPI to CPU1107st r6, @r5108#endif109#endif110111/*112* Now, Jump to stext113* if with MMU, TLB on.114* if with no MMU, only jump.115*/116.global eit_vector117mmu_on:118LDIMM (r13, stext)119#ifdef CONFIG_MMU120bl init_tlb121LDIMM (r2, eit_vector) ; set EVB(cr5)122mvtc r2, cr5123seth r0, #high(MMU_REG_BASE) ; Set MMU_REG_BASE higher124or3 r0, r0, #low(MMU_REG_BASE) ; Set MMU_REG_BASE lower125ldi r1, #0x01126st r1, @(MATM_offset,r0) ; Set MATM (T bit ON)127ld r0, @(MATM_offset,r0) ; Check128#else129#if defined(CONFIG_CHIP_M32700)130seth r0,#high(M32R_MCDCAR)131or3 r0,r0,#low(M32R_MCDCAR)132ld24 r1,#0x8080133st r1,@r0134#elif defined(CONFIG_CHIP_M32104)135LDIMM (r2, eit_vector) ; set EVB(cr5)136mvtc r2, cr5137#endif138#endif /* CONFIG_MMU */139jmp r13140nop141nop142143#ifdef CONFIG_SMP144/*145* AP wait loop146*/147ENTRY(AP_loop)148;; disable interrupt149clrpsw #0x40150;; reset EVB151LDIMM (r4, _AP_RE)152seth r5, #high(__PAGE_OFFSET)153or3 r5, r5, #low(__PAGE_OFFSET)154not r5, r5155and r4, r5156mvtc r4, cr5157;; disable maskable interrupt158seth r4, #high(M32R_ICU_IMASK_PORTL)159or3 r4, r4, #low(M32R_ICU_IMASK_PORTL)160ldi r5, #0161st r5, @r4162ld r5, @r4163;; enable only IPI164setpsw #0x40165;; LOOOOOOOOOOOOOOP!!!166.fillinsn1672:168nop169nop170bra 2b171nop172nop173174#ifdef CONFIG_CHIP_M32700_TS1175.global dcache_dummy176.balign 16, 0177dcache_dummy:178.byte 16179#endif /* CONFIG_CHIP_M32700_TS1 */180#endif /* CONFIG_SMP */181182.end183184185186