151533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik/* 251533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik * CRISv32 kernel startup code. 351533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik * 451533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik * Copyright (C) 2003, Axis Communications AB 551533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik */ 651533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik 751533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik#define ASSEMBLER_MACROS_ONLY 851533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik 951533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik/* 1051533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik * The macros found in mmu_defs_asm.h uses the ## concatenation operator, so 1151533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik * -traditional must not be used when assembling this file. 1251533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik */ 13556dcee7b829e5c350c3ffdbdb87a8b15aa3c5d3Jesper Nilsson#include <arch/memmap.h> 14c5ec6fb08d7806cf1a9e4fceed15f5d4a69f885eJesper Nilsson#include <hwregs/reg_rdwr.h> 1596e476697d7ed025bfa1af4073e825901b5c6b1aJesper Nilsson#include <hwregs/intr_vect.h> 1696e476697d7ed025bfa1af4073e825901b5c6b1aJesper Nilsson#include <hwregs/asm/mmu_defs_asm.h> 1796e476697d7ed025bfa1af4073e825901b5c6b1aJesper Nilsson#include <hwregs/asm/reg_map_asm.h> 18556dcee7b829e5c350c3ffdbdb87a8b15aa3c5d3Jesper Nilsson#include <mach/startup.inc> 1951533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik 2051533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik#define CRAMFS_MAGIC 0x28cd3d45 2196e476697d7ed025bfa1af4073e825901b5c6b1aJesper Nilsson#define JHEAD_MAGIC 0x1FF528A6 2296e476697d7ed025bfa1af4073e825901b5c6b1aJesper Nilsson#define JHEAD_SIZE 8 2351533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik#define RAM_INIT_MAGIC 0x56902387 2451533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik#define COMMAND_LINE_MAGIC 0x87109563 2596e476697d7ed025bfa1af4073e825901b5c6b1aJesper Nilsson#define NAND_BOOT_MAGIC 0x9a9db001 2651533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik 2751533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik ;; NOTE: R8 and R9 carry information from the decompressor (if the 2851533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik ;; kernel was compressed). They must not be used in the code below 2951533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik ;; until they are read! 3051533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik 3151533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik ;; Exported symbols. 3251533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik .global etrax_irv 3351533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik .global romfs_start 3451533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik .global romfs_length 3551533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik .global romfs_in_flash 3696e476697d7ed025bfa1af4073e825901b5c6b1aJesper Nilsson .global nand_boot 3751533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik .global swapper_pg_dir 3851533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik 3951533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik .text 4051533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starviktstart: 4151533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik ;; This is the entry point of the kernel. The CPU is currently in 4251533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik ;; supervisor mode. 4351533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik ;; 4451533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik ;; 0x00000000 if flash. 4551533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik ;; 0x40004000 if DRAM. 4651533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik ;; 4751533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik di 4851533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik 4996e476697d7ed025bfa1af4073e825901b5c6b1aJesper Nilsson START_CLOCKS 5096e476697d7ed025bfa1af4073e825901b5c6b1aJesper Nilsson 5196e476697d7ed025bfa1af4073e825901b5c6b1aJesper Nilsson SETUP_WAIT_STATES 5296e476697d7ed025bfa1af4073e825901b5c6b1aJesper Nilsson 53f8e47cb0585c2506888b415354de27bff77be276Jesper Nilsson GIO_INIT 54f8e47cb0585c2506888b415354de27bff77be276Jesper Nilsson 5596e476697d7ed025bfa1af4073e825901b5c6b1aJesper Nilsson#ifdef CONFIG_SMP 5696e476697d7ed025bfa1af4073e825901b5c6b1aJesper Nilssonsecondary_cpu_entry: /* Entry point for secondary CPUs */ 5796e476697d7ed025bfa1af4073e825901b5c6b1aJesper Nilsson di 5851533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik#endif 5951533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik 6051533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik ;; Setup and enable the MMU. Use same configuration for both the data 6151533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik ;; and the instruction MMU. 6251533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik ;; 6351533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik ;; Note; 3 cycles is needed for a bank-select to take effect. Further; 6451533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik ;; bank 1 is the instruction MMU, bank 2 is the data MMU. 65345c52e079001354809c17f84e164827e99f2aaaJesper Nilsson 66345c52e079001354809c17f84e164827e99f2aaaJesper Nilsson#ifdef CONFIG_CRIS_MACH_ARTPEC3 67345c52e079001354809c17f84e164827e99f2aaaJesper Nilsson move.d REG_FIELD(mmu, rw_mm_kbase_hi, base_e, 8) \ 68345c52e079001354809c17f84e164827e99f2aaaJesper Nilsson | REG_FIELD(mmu, rw_mm_kbase_hi, base_c, 4) \ 69345c52e079001354809c17f84e164827e99f2aaaJesper Nilsson | REG_FIELD(mmu, rw_mm_kbase_hi, base_d, 5) \ 70345c52e079001354809c17f84e164827e99f2aaaJesper Nilsson | REG_FIELD(mmu, rw_mm_kbase_hi, base_b, 0xb), $r0 7151533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik#else 7251533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik move.d REG_FIELD(mmu, rw_mm_kbase_hi, base_e, 8) \ 7396e476697d7ed025bfa1af4073e825901b5c6b1aJesper Nilsson | REG_FIELD(mmu, rw_mm_kbase_hi, base_c, 4) \ 74d75d806cbbfb9c775e87779cd281c9c408c7aba3Jesper Nilsson | REG_FIELD(mmu, rw_mm_kbase_hi, base_b, 0xb), $r0 7551533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik#endif 7651533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik 7751533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik ;; Temporary map of 0x40 -> 0x40 and 0x00 -> 0x00. 7851533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik move.d REG_FIELD(mmu, rw_mm_kbase_lo, base_4, 4) \ 7951533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik | REG_FIELD(mmu, rw_mm_kbase_lo, base_0, 0), $r1 8051533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik 8151533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik ;; Enable certain page protections and setup linear mapping 8251533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik ;; for f,e,c,b,4,0. 83345c52e079001354809c17f84e164827e99f2aaaJesper Nilsson 84345c52e079001354809c17f84e164827e99f2aaaJesper Nilsson ;; ARTPEC-3: 85345c52e079001354809c17f84e164827e99f2aaaJesper Nilsson ;; c,d used for linear kernel mapping, up to 512 MB 86345c52e079001354809c17f84e164827e99f2aaaJesper Nilsson ;; e used for vmalloc 87345c52e079001354809c17f84e164827e99f2aaaJesper Nilsson ;; f unused, but page mapped to get page faults 88345c52e079001354809c17f84e164827e99f2aaaJesper Nilsson 89345c52e079001354809c17f84e164827e99f2aaaJesper Nilsson ;; ETRAX FS: 90345c52e079001354809c17f84e164827e99f2aaaJesper Nilsson ;; c used for linear kernel mapping, up to 256 MB 91345c52e079001354809c17f84e164827e99f2aaaJesper Nilsson ;; d used for vmalloc 92345c52e079001354809c17f84e164827e99f2aaaJesper Nilsson ;; e,f used for memory-mapped NOR flash 93345c52e079001354809c17f84e164827e99f2aaaJesper Nilsson 94345c52e079001354809c17f84e164827e99f2aaaJesper Nilsson#ifdef CONFIG_CRIS_MACH_ARTPEC3 95345c52e079001354809c17f84e164827e99f2aaaJesper Nilsson move.d REG_STATE(mmu, rw_mm_cfg, we, on) \ 96345c52e079001354809c17f84e164827e99f2aaaJesper Nilsson | REG_STATE(mmu, rw_mm_cfg, acc, on) \ 97345c52e079001354809c17f84e164827e99f2aaaJesper Nilsson | REG_STATE(mmu, rw_mm_cfg, ex, on) \ 98345c52e079001354809c17f84e164827e99f2aaaJesper Nilsson | REG_STATE(mmu, rw_mm_cfg, inv, on) \ 99345c52e079001354809c17f84e164827e99f2aaaJesper Nilsson | REG_STATE(mmu, rw_mm_cfg, seg_f, page) \ 100345c52e079001354809c17f84e164827e99f2aaaJesper Nilsson | REG_STATE(mmu, rw_mm_cfg, seg_e, page) \ 101345c52e079001354809c17f84e164827e99f2aaaJesper Nilsson | REG_STATE(mmu, rw_mm_cfg, seg_d, linear) \ 102345c52e079001354809c17f84e164827e99f2aaaJesper Nilsson | REG_STATE(mmu, rw_mm_cfg, seg_c, linear) \ 103345c52e079001354809c17f84e164827e99f2aaaJesper Nilsson | REG_STATE(mmu, rw_mm_cfg, seg_b, linear) \ 104345c52e079001354809c17f84e164827e99f2aaaJesper Nilsson | REG_STATE(mmu, rw_mm_cfg, seg_a, page) \ 105345c52e079001354809c17f84e164827e99f2aaaJesper Nilsson | REG_STATE(mmu, rw_mm_cfg, seg_9, page) \ 106345c52e079001354809c17f84e164827e99f2aaaJesper Nilsson | REG_STATE(mmu, rw_mm_cfg, seg_8, page) \ 107345c52e079001354809c17f84e164827e99f2aaaJesper Nilsson | REG_STATE(mmu, rw_mm_cfg, seg_7, page) \ 108345c52e079001354809c17f84e164827e99f2aaaJesper Nilsson | REG_STATE(mmu, rw_mm_cfg, seg_6, page) \ 109345c52e079001354809c17f84e164827e99f2aaaJesper Nilsson | REG_STATE(mmu, rw_mm_cfg, seg_5, page) \ 110345c52e079001354809c17f84e164827e99f2aaaJesper Nilsson | REG_STATE(mmu, rw_mm_cfg, seg_4, linear) \ 111345c52e079001354809c17f84e164827e99f2aaaJesper Nilsson | REG_STATE(mmu, rw_mm_cfg, seg_3, page) \ 112345c52e079001354809c17f84e164827e99f2aaaJesper Nilsson | REG_STATE(mmu, rw_mm_cfg, seg_2, page) \ 113345c52e079001354809c17f84e164827e99f2aaaJesper Nilsson | REG_STATE(mmu, rw_mm_cfg, seg_1, page) \ 114345c52e079001354809c17f84e164827e99f2aaaJesper Nilsson | REG_STATE(mmu, rw_mm_cfg, seg_0, linear), $r2 11551533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik#else 11651533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik move.d REG_STATE(mmu, rw_mm_cfg, we, on) \ 11751533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik | REG_STATE(mmu, rw_mm_cfg, acc, on) \ 11851533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik | REG_STATE(mmu, rw_mm_cfg, ex, on) \ 11951533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik | REG_STATE(mmu, rw_mm_cfg, inv, on) \ 12051533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik | REG_STATE(mmu, rw_mm_cfg, seg_f, linear) \ 12151533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik | REG_STATE(mmu, rw_mm_cfg, seg_e, linear) \ 12251533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik | REG_STATE(mmu, rw_mm_cfg, seg_d, page) \ 12351533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik | REG_STATE(mmu, rw_mm_cfg, seg_c, linear) \ 12451533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik | REG_STATE(mmu, rw_mm_cfg, seg_b, linear) \ 125d75d806cbbfb9c775e87779cd281c9c408c7aba3Jesper Nilsson | REG_STATE(mmu, rw_mm_cfg, seg_a, page) \ 12651533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik | REG_STATE(mmu, rw_mm_cfg, seg_9, page) \ 12751533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik | REG_STATE(mmu, rw_mm_cfg, seg_8, page) \ 12851533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik | REG_STATE(mmu, rw_mm_cfg, seg_7, page) \ 12951533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik | REG_STATE(mmu, rw_mm_cfg, seg_6, page) \ 13051533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik | REG_STATE(mmu, rw_mm_cfg, seg_5, page) \ 13151533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik | REG_STATE(mmu, rw_mm_cfg, seg_4, linear) \ 13251533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik | REG_STATE(mmu, rw_mm_cfg, seg_3, page) \ 13351533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik | REG_STATE(mmu, rw_mm_cfg, seg_2, page) \ 13451533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik | REG_STATE(mmu, rw_mm_cfg, seg_1, page) \ 13551533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik | REG_STATE(mmu, rw_mm_cfg, seg_0, linear), $r2 13651533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik#endif 13751533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik 13851533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik ;; Update instruction MMU. 13951533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik move 1, $srs 14051533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik nop 14151533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik nop 14251533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik nop 14351533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik move $r0, $s2 ; kbase_hi. 14451533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik move $r1, $s1 ; kbase_lo. 14551533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik move $r2, $s0 ; mm_cfg, virtual memory configuration. 14651533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik 14751533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik ;; Update data MMU. 14851533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik move 2, $srs 14951533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik nop 15051533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik nop 15151533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik nop 15251533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik move $r0, $s2 ; kbase_hi. 15351533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik move $r1, $s1 ; kbase_lo 15451533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik move $r2, $s0 ; mm_cfg, virtual memory configuration. 15551533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik 15651533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik ;; Enable data and instruction MMU. 15751533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik move 0, $srs 15851533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik moveq 0xf, $r0 ; IMMU, DMMU, DCache, Icache on 15951533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik nop 16051533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik nop 16151533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik nop 16251533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik move $r0, $s0 16351533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik nop 16451533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik nop 16551533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik nop 16651533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik 16751533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik#ifdef CONFIG_SMP 16851533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik ;; Read CPU ID 16951533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik move 0, $srs 17051533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik nop 17151533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik nop 17251533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik nop 17396e476697d7ed025bfa1af4073e825901b5c6b1aJesper Nilsson move $s12, $r0 17451533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik cmpq 0, $r0 17551533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik beq master_cpu 17651533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik nop 17751533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvikslave_cpu: 17851533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik ; Time to boot-up. Get stack location provided by master CPU. 17951533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik move.d smp_init_current_idle_thread, $r1 18051533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik move.d [$r1], $sp 18151533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik add.d 8192, $sp 18251533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik move.d ebp_start, $r0 ; Defined in linker-script. 18351533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik move $r0, $ebp 18451533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik jsr smp_callin 18551533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik nop 18651533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvikmaster_cpu: 18796e476697d7ed025bfa1af4073e825901b5c6b1aJesper Nilsson /* Set up entry point for secondary CPUs. The boot ROM has set up 18896e476697d7ed025bfa1af4073e825901b5c6b1aJesper Nilsson * EBP at start of internal memory. The CPU will get there 18996e476697d7ed025bfa1af4073e825901b5c6b1aJesper Nilsson * later when we issue an IPI to them... */ 19096e476697d7ed025bfa1af4073e825901b5c6b1aJesper Nilsson move.d MEM_INTMEM_START + IPI_INTR_VECT * 4, $r0 19196e476697d7ed025bfa1af4073e825901b5c6b1aJesper Nilsson move.d secondary_cpu_entry, $r1 19296e476697d7ed025bfa1af4073e825901b5c6b1aJesper Nilsson move.d $r1, [$r0] 19351533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik#endif 19496e476697d7ed025bfa1af4073e825901b5c6b1aJesper Nilsson ; Check if starting from DRAM (network->RAM boot or unpacked 19596e476697d7ed025bfa1af4073e825901b5c6b1aJesper Nilsson ; compressed kernel), or directly from flash. 19651533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik lapcq ., $r0 19751533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik and.d 0x7fffffff, $r0 ; Mask off the non-cache bit. 19851533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik cmp.d 0x10000, $r0 ; Arbitrary, something above this code. 19951533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik blo _inflash0 20051533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik nop 20151533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik 20251533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik jump _inram ; Jump to cached RAM. 20351533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik nop 20451533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik 20551533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik ;; Jumpgate. 20651533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik_inflash0: 20751533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik jump _inflash 20851533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik nop 20951533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik 21051533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik ;; Put the following in a section so that storage for it can be 21151533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik ;; reclaimed after init is finished. 21251533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik .section ".init.text", "ax" 21351533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik 21451533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik_inflash: 21551533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik 21651533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik ;; Initialize DRAM. 21751533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik cmp.d RAM_INIT_MAGIC, $r8 ; Already initialized? 21851533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik beq _dram_initialized 21951533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik nop 22051533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik 221c5ec6fb08d7806cf1a9e4fceed15f5d4a69f885eJesper Nilsson#if defined CONFIG_ETRAXFS 222c5ec6fb08d7806cf1a9e4fceed15f5d4a69f885eJesper Nilsson#include "../mach-fs/dram_init.S" 223c5ec6fb08d7806cf1a9e4fceed15f5d4a69f885eJesper Nilsson#elif defined CONFIG_CRIS_MACH_ARTPEC3 224c5ec6fb08d7806cf1a9e4fceed15f5d4a69f885eJesper Nilsson#include "../mach-a3/dram_init.S" 225c5ec6fb08d7806cf1a9e4fceed15f5d4a69f885eJesper Nilsson#else 226c5ec6fb08d7806cf1a9e4fceed15f5d4a69f885eJesper Nilsson#error Only ETRAXFS and ARTPEC-3 supported! 227c5ec6fb08d7806cf1a9e4fceed15f5d4a69f885eJesper Nilsson#endif 228c5ec6fb08d7806cf1a9e4fceed15f5d4a69f885eJesper Nilsson 22951533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik 23051533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik_dram_initialized: 23151533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik ;; Copy the text and data section to DRAM. This depends on that the 23251533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik ;; variables used below are correctly set up by the linker script. 23351533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik ;; The calculated value stored in R4 is used below. 23496e476697d7ed025bfa1af4073e825901b5c6b1aJesper Nilsson ;; Leave the cramfs file system (piggybacked after the kernel) in flash. 23551533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik moveq 0, $r0 ; Source. 23651533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik move.d text_start, $r1 ; Destination. 23751533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik move.d __vmlinux_end, $r2 23851533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik move.d $r2, $r4 23951533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik sub.d $r1, $r4 24051533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik1: move.w [$r0+], $r3 24151533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik move.w $r3, [$r1+] 24251533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik cmp.d $r2, $r1 24351533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik blo 1b 24451533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik nop 24551533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik 24696e476697d7ed025bfa1af4073e825901b5c6b1aJesper Nilsson ;; Check for cramfs. 24751533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik moveq 0, $r0 24851533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik move.d romfs_length, $r1 24951533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik move.d $r0, [$r1] 25051533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik move.d [$r4], $r0 ; cramfs_super.magic 25151533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik cmp.d CRAMFS_MAGIC, $r0 25251533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik bne 1f 25351533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik nop 25451533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik 25596e476697d7ed025bfa1af4073e825901b5c6b1aJesper Nilsson ;; Set length and start of cramfs, set romfs_in_flash flag 25651533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik addoq +4, $r4, $acr 25751533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik move.d [$acr], $r0 25851533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik move.d romfs_length, $r1 25951533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik move.d $r0, [$r1] 26051533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik add.d 0xf0000000, $r4 ; Add cached flash start in virtual memory. 26151533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik move.d romfs_start, $r1 26251533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik move.d $r4, [$r1] 26351533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik1: moveq 1, $r0 26451533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik move.d romfs_in_flash, $r1 26551533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik move.d $r0, [$r1] 26651533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik 26751533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik jump _start_it ; Jump to cached code. 26851533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik nop 26951533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik 27051533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik_inram: 27196e476697d7ed025bfa1af4073e825901b5c6b1aJesper Nilsson ;; Check if booting from NAND flash; if so, set appropriate flags 27296e476697d7ed025bfa1af4073e825901b5c6b1aJesper Nilsson ;; and move on. 27396e476697d7ed025bfa1af4073e825901b5c6b1aJesper Nilsson cmp.d NAND_BOOT_MAGIC, $r12 27496e476697d7ed025bfa1af4073e825901b5c6b1aJesper Nilsson bne move_cramfs ; not nand, jump 27551533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik moveq 1, $r0 27696e476697d7ed025bfa1af4073e825901b5c6b1aJesper Nilsson move.d nand_boot, $r1 ; tell axisflashmap we're booting from NAND 27751533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik move.d $r0, [$r1] 27896e476697d7ed025bfa1af4073e825901b5c6b1aJesper Nilsson moveq 0, $r0 ; tell axisflashmap romfs is not in 27996e476697d7ed025bfa1af4073e825901b5c6b1aJesper Nilsson move.d romfs_in_flash, $r1 ; (directly accessed) flash 28096e476697d7ed025bfa1af4073e825901b5c6b1aJesper Nilsson move.d $r0, [$r1] 28196e476697d7ed025bfa1af4073e825901b5c6b1aJesper Nilsson jump _start_it ; continue with boot 28251533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik nop 28351533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik 28451533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvikmove_cramfs: 28596e476697d7ed025bfa1af4073e825901b5c6b1aJesper Nilsson ;; kernel is in DRAM. 28696e476697d7ed025bfa1af4073e825901b5c6b1aJesper Nilsson ;; Must figure out if there is a piggybacked rootfs image or not. 28796e476697d7ed025bfa1af4073e825901b5c6b1aJesper Nilsson ;; Set romfs_length to 0 => no rootfs image available by default. 28851533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik moveq 0, $r0 28951533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik move.d romfs_length, $r1 29051533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik move.d $r0, [$r1] 29151533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik 29251533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik ;; The kernel could have been unpacked to DRAM by the loader, but 29396e476697d7ed025bfa1af4073e825901b5c6b1aJesper Nilsson ;; the cramfs image could still be in the flash immediately 29496e476697d7ed025bfa1af4073e825901b5c6b1aJesper Nilsson ;; following the compressed kernel image. The loader passes the address 29596e476697d7ed025bfa1af4073e825901b5c6b1aJesper Nilsson ;; of the byte succeeding the last compressed byte in the flash in 29651533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik ;; register R9 when starting the kernel. 29751533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik cmp.d 0x0ffffff8, $r9 29851533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik bhs _no_romfs_in_flash ; R9 points outside the flash area. 29951533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik nop 30096e476697d7ed025bfa1af4073e825901b5c6b1aJesper Nilsson ;; cramfs rootfs might to be in flash. Check for it. 30151533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik move.d [$r9], $r0 ; cramfs_super.magic 30251533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik cmp.d CRAMFS_MAGIC, $r0 30351533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik bne _no_romfs_in_flash 30451533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik nop 30551533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik 30696e476697d7ed025bfa1af4073e825901b5c6b1aJesper Nilsson ;; found cramfs in flash. set address and size, and romfs_in_flash flag. 30751533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik addoq +4, $r9, $acr 30851533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik move.d [$acr], $r0 30951533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik move.d romfs_length, $r1 31051533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik move.d $r0, [$r1] 31151533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik add.d 0xf0000000, $r9 ; Add cached flash start in virtual memory. 31251533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik move.d romfs_start, $r1 31351533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik move.d $r9, [$r1] 31451533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik moveq 1, $r0 31551533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik move.d romfs_in_flash, $r1 31651533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik move.d $r0, [$r1] 31751533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik 31851533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik jump _start_it ; Jump to cached code. 31951533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik nop 32051533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik 32151533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik_no_romfs_in_flash: 32296e476697d7ed025bfa1af4073e825901b5c6b1aJesper Nilsson ;; No romfs in flash, so look for cramfs, or jffs2 with jhead, 32396e476697d7ed025bfa1af4073e825901b5c6b1aJesper Nilsson ;; after kernel in RAM, as is the case with network->RAM boot. 32496e476697d7ed025bfa1af4073e825901b5c6b1aJesper Nilsson ;; For cramfs, partition starts with magic and length. 32596e476697d7ed025bfa1af4073e825901b5c6b1aJesper Nilsson ;; For jffs2, a jhead is prepended which contains with magic and length. 32696e476697d7ed025bfa1af4073e825901b5c6b1aJesper Nilsson ;; The jhead is not part of the jffs2 partition however. 32751533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik#ifndef CONFIG_ETRAXFS_SIM 328403a1c4f1380b4ec842df5f4aa86e86ba02904f3Jesper Nilsson move.d __bss_start, $r0 32951533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik#else 33051533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik move.d __end, $r0 33151533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik#endif 33251533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik move.d [$r0], $r1 33396e476697d7ed025bfa1af4073e825901b5c6b1aJesper Nilsson cmp.d CRAMFS_MAGIC, $r1 ; cramfs magic? 33496e476697d7ed025bfa1af4073e825901b5c6b1aJesper Nilsson beq 2f ; yes, jump 33596e476697d7ed025bfa1af4073e825901b5c6b1aJesper Nilsson nop 33696e476697d7ed025bfa1af4073e825901b5c6b1aJesper Nilsson cmp.d JHEAD_MAGIC, $r1 ; jffs2 (jhead) magic? 33796e476697d7ed025bfa1af4073e825901b5c6b1aJesper Nilsson bne 4f ; no, skip copy 33896e476697d7ed025bfa1af4073e825901b5c6b1aJesper Nilsson nop 33996e476697d7ed025bfa1af4073e825901b5c6b1aJesper Nilsson addq 4, $r0 ; location of jffs2 size 34096e476697d7ed025bfa1af4073e825901b5c6b1aJesper Nilsson move.d [$r0+], $r2 ; fetch jffs2 size -> r2 34196e476697d7ed025bfa1af4073e825901b5c6b1aJesper Nilsson ; r0 now points to start of jffs2 34296e476697d7ed025bfa1af4073e825901b5c6b1aJesper Nilsson ba 3f 34351533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik nop 34496e476697d7ed025bfa1af4073e825901b5c6b1aJesper Nilsson2: 34596e476697d7ed025bfa1af4073e825901b5c6b1aJesper Nilsson addoq +4, $r0, $acr ; location of cramfs size 34696e476697d7ed025bfa1af4073e825901b5c6b1aJesper Nilsson move.d [$acr], $r2 ; fetch cramfs size -> r2 34796e476697d7ed025bfa1af4073e825901b5c6b1aJesper Nilsson ; r0 still points to start of cramfs 34896e476697d7ed025bfa1af4073e825901b5c6b1aJesper Nilsson3: 34996e476697d7ed025bfa1af4073e825901b5c6b1aJesper Nilsson ;; Now, move the root fs to after kernel's BSS 35051533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik 35196e476697d7ed025bfa1af4073e825901b5c6b1aJesper Nilsson move.d _end, $r1 ; start of cramfs -> r1 35251533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik move.d romfs_start, $r3 35396e476697d7ed025bfa1af4073e825901b5c6b1aJesper Nilsson move.d $r1, [$r3] ; store at romfs_start (for axisflashmap) 35451533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik move.d romfs_length, $r3 35596e476697d7ed025bfa1af4073e825901b5c6b1aJesper Nilsson move.d $r2, [$r3] ; store size at romfs_length 35651533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik 35796e476697d7ed025bfa1af4073e825901b5c6b1aJesper Nilsson add.d $r2, $r0 ; copy from end and downwards 35851533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik add.d $r2, $r1 35951533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik 36051533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik lsrq 1, $r2 ; Size is in bytes, we copy words. 36151533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik addq 1, $r2 36251533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik1: 36351533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik move.w [$r0], $r3 36451533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik move.w $r3, [$r1] 36551533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik subq 2, $r0 36651533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik subq 2, $r1 36751533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik subq 1, $r2 36851533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik bne 1b 36951533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik nop 37051533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik 37196e476697d7ed025bfa1af4073e825901b5c6b1aJesper Nilsson4: 37296e476697d7ed025bfa1af4073e825901b5c6b1aJesper Nilsson ;; BSS move done. 37396e476697d7ed025bfa1af4073e825901b5c6b1aJesper Nilsson ;; Clear romfs_in_flash flag, as we now know romfs is in DRAM 37496e476697d7ed025bfa1af4073e825901b5c6b1aJesper Nilsson ;; Also clear nand_boot flag; if we got here, we know we've not 37596e476697d7ed025bfa1af4073e825901b5c6b1aJesper Nilsson ;; booted from NAND flash. 37651533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik moveq 0, $r0 37751533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik move.d romfs_in_flash, $r1 37851533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik move.d $r0, [$r1] 37996e476697d7ed025bfa1af4073e825901b5c6b1aJesper Nilsson moveq 0, $r0 38096e476697d7ed025bfa1af4073e825901b5c6b1aJesper Nilsson move.d nand_boot, $r1 38196e476697d7ed025bfa1af4073e825901b5c6b1aJesper Nilsson move.d $r0, [$r1] 38251533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik 38351533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik jump _start_it ; Jump to cached code. 38451533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik nop 38551533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik 38651533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik_start_it: 38751533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik 38851533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik ;; Check if kernel command line is supplied 38951533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik cmp.d COMMAND_LINE_MAGIC, $r10 39051533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik bne no_command_line 39151533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik nop 39251533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik 39351533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik move.d 256, $r13 39451533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik move.d cris_command_line, $r10 39551533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik or.d 0x80000000, $r11 ; Make it virtual 39651533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik1: 39796e476697d7ed025bfa1af4073e825901b5c6b1aJesper Nilsson move.b [$r11+], $r1 39896e476697d7ed025bfa1af4073e825901b5c6b1aJesper Nilsson move.b $r1, [$r10+] 39951533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik subq 1, $r13 40051533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik bne 1b 40151533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik nop 40251533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik 40351533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvikno_command_line: 40451533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik 40551533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik ;; The kernel stack contains a task structure for each task. This 40651533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik ;; the initial kernel stack is in the same page as the init_task, 40751533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik ;; but starts at the top of the page, i.e. + 8192 bytes. 40851533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik move.d init_thread_union + 8192, $sp 40951533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik move.d ebp_start, $r0 ; Defined in linker-script. 41051533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik move $r0, $ebp 41151533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik move.d etrax_irv, $r1 ; Set the exception base register and pointer. 41251533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik move.d $r0, [$r1] 41351533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik 41451533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik ;; Clear the BSS region from _bss_start to _end. 41551533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik move.d __bss_start, $r0 41651533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik move.d _end, $r1 41751533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik1: clear.d [$r0+] 41851533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik cmp.d $r1, $r0 41951533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik blo 1b 42051533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik nop 42151533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik 42251533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik ; Initialize registers to increase determinism 42351533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik move.d __bss_start, $r0 42451533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik movem [$r0], $r13 42551533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik 42696e476697d7ed025bfa1af4073e825901b5c6b1aJesper Nilsson#ifdef CONFIG_ETRAX_L2CACHE 42796e476697d7ed025bfa1af4073e825901b5c6b1aJesper Nilsson jsr l2cache_init 42896e476697d7ed025bfa1af4073e825901b5c6b1aJesper Nilsson nop 42996e476697d7ed025bfa1af4073e825901b5c6b1aJesper Nilsson#endif 43096e476697d7ed025bfa1af4073e825901b5c6b1aJesper Nilsson 43151533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik jump start_kernel ; Jump to start_kernel() in init/main.c. 43251533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik nop 43351533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik 43451533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik .data 43551533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starviketrax_irv: 43651533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik .dword 0 43796e476697d7ed025bfa1af4073e825901b5c6b1aJesper Nilsson 43896e476697d7ed025bfa1af4073e825901b5c6b1aJesper Nilsson; Variables for communication with the Axis flash map driver (axisflashmap), 43996e476697d7ed025bfa1af4073e825901b5c6b1aJesper Nilsson; and for setting up memory in arch/cris/kernel/setup.c . 44096e476697d7ed025bfa1af4073e825901b5c6b1aJesper Nilsson 44196e476697d7ed025bfa1af4073e825901b5c6b1aJesper Nilsson; romfs_start is set to the start of the root file system, if it exists 44296e476697d7ed025bfa1af4073e825901b5c6b1aJesper Nilsson; in directly accessible memory (i.e. NOR Flash when booting from Flash, 44396e476697d7ed025bfa1af4073e825901b5c6b1aJesper Nilsson; or RAM when booting directly from a network-downloaded RAM image) 44451533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvikromfs_start: 44551533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik .dword 0 44696e476697d7ed025bfa1af4073e825901b5c6b1aJesper Nilsson 44796e476697d7ed025bfa1af4073e825901b5c6b1aJesper Nilsson; romfs_length is set to the size of the root file system image, if it exists 44896e476697d7ed025bfa1af4073e825901b5c6b1aJesper Nilsson; in directly accessible memory (see romfs_start). Otherwise it is set to 0. 44951533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvikromfs_length: 45051533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik .dword 0 45196e476697d7ed025bfa1af4073e825901b5c6b1aJesper Nilsson 45296e476697d7ed025bfa1af4073e825901b5c6b1aJesper Nilsson; romfs_in_flash is set to 1 if the root file system resides in directly 45396e476697d7ed025bfa1af4073e825901b5c6b1aJesper Nilsson; accessible flash memory (i.e. NOR flash). It is set to 0 for RAM boot 45496e476697d7ed025bfa1af4073e825901b5c6b1aJesper Nilsson; or NAND flash boot. 45551533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvikromfs_in_flash: 45651533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik .dword 0 45796e476697d7ed025bfa1af4073e825901b5c6b1aJesper Nilsson 45896e476697d7ed025bfa1af4073e825901b5c6b1aJesper Nilsson; nand_boot is set to 1 when the kernel has been booted from NAND flash 45996e476697d7ed025bfa1af4073e825901b5c6b1aJesper Nilssonnand_boot: 46051533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik .dword 0 46151533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik 46251533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvikswapper_pg_dir = 0xc0002000 46351533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik 46451533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik .section ".init.data", "aw" 46551533b615e605d86154ec1b4e585c8ca1b0b15b7Mikael Starvik 466c5ec6fb08d7806cf1a9e4fceed15f5d4a69f885eJesper Nilsson#if defined CONFIG_ETRAXFS 467c5ec6fb08d7806cf1a9e4fceed15f5d4a69f885eJesper Nilsson#include "../mach-fs/hw_settings.S" 468c5ec6fb08d7806cf1a9e4fceed15f5d4a69f885eJesper Nilsson#elif defined CONFIG_CRIS_MACH_ARTPEC3 469c5ec6fb08d7806cf1a9e4fceed15f5d4a69f885eJesper Nilsson#include "../mach-a3/hw_settings.S" 470c5ec6fb08d7806cf1a9e4fceed15f5d4a69f885eJesper Nilsson#else 471c5ec6fb08d7806cf1a9e4fceed15f5d4a69f885eJesper Nilsson#error Only ETRAXFS and ARTPEC-3 supported! 472c5ec6fb08d7806cf1a9e4fceed15f5d4a69f885eJesper Nilsson#endif 473