cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

head_32.S (2430B)


      1/* SPDX-License-Identifier: GPL-2.0 */
      2/*
      3 *  linux/arch/sh/boot/compressed/head.S
      4 *
      5 *  Copyright (C) 1999 Stuart Menefy
      6 *  Copyright (C) 2003 SUGIOKA Toshinobu
      7 */
      8
      9.text
     10
     11#include <asm/page.h>
     12
     13	.global	startup
     14startup:
     15	/* Load initial status register */
     16	mov.l   init_sr, r1
     17	ldc     r1, sr
     18
     19	/* Move myself to proper location if necessary */
     20	mova	1f, r0
     21	mov.l	1f, r2
     22	cmp/eq	r2, r0
     23	bt	clear_bss
     24	sub	r0, r2
     25	mov.l	bss_start_addr, r0
     26	mov	#0xffffffe0, r1
     27	and	r1, r0			! align cache line
     28	mov.l	text_start_addr, r3
     29	mov	r0, r1
     30	sub	r2, r1
     313:
     32	mov.l	@r1, r4
     33	mov.l	@(4,r1), r5
     34	mov.l	@(8,r1), r6
     35	mov.l	@(12,r1), r7
     36	mov.l	@(16,r1), r8
     37	mov.l	@(20,r1), r9
     38	mov.l	@(24,r1), r10
     39	mov.l	@(28,r1), r11
     40	mov.l	r4, @r0
     41	mov.l	r5, @(4,r0)
     42	mov.l	r6, @(8,r0)
     43	mov.l	r7, @(12,r0)
     44	mov.l	r8, @(16,r0)
     45	mov.l	r9, @(20,r0)
     46	mov.l	r10, @(24,r0)
     47	mov.l	r11, @(28,r0)
     48#ifdef CONFIG_CPU_SH4
     49	ocbwb	@r0
     50#endif
     51	cmp/hi	r3, r0
     52	add	#-32, r0
     53	bt/s	3b
     54	 add	#-32, r1
     55	mov.l	2f, r0
     56	jmp	@r0
     57	 nop
     58
     59	.align 2
     601:	.long	1b
     612:	.long	clear_bss
     62text_start_addr:
     63	.long	startup
     64
     65	/* Clear BSS */
     66clear_bss:
     67	mov.l	end_addr, r1
     68	mov.l	bss_start_addr, r2
     69	mov	#0, r0
     70l1:
     71	mov.l	r0, @-r1
     72	cmp/eq	r1,r2
     73	bf	l1
     74
     75	/* Set the initial pointer. */
     76	mov.l	init_stack_addr, r0
     77	mov.l	@r0, r15
     78
     79	/* Decompress the kernel */
     80	mov.l	decompress_kernel_addr, r0
     81	jsr	@r0
     82	nop
     83
     84	/* Jump to the start of the decompressed kernel */
     85	mov.l	kernel_start_addr, r0
     86	jmp	@r0
     87	nop
     88	
     89	.align	2
     90bss_start_addr:
     91	.long	__bss_start
     92end_addr:
     93	.long	_end
     94init_sr:
     95	.long	0x500000F0	/* Privileged mode, Bank=0, Block=1, IMASK=0xF */
     96kexec_magic:
     97	.long	0x400000F0	/* magic used by kexec to parse zImage format */
     98init_stack_addr:
     99	.long	stack_start
    100decompress_kernel_addr:
    101	.long	decompress_kernel
    102kernel_start_addr:
    103#ifdef CONFIG_32BIT
    104	.long	___pa(_text+PAGE_SIZE)
    105#else
    106	.long	_text+PAGE_SIZE
    107#endif
    108
    109	.align	9
    110fake_headers_as_bzImage:
    111	.word	0
    112	.ascii	"HdrS"		! header signature
    113	.word	0x0202		! header version number (>= 0x0105)
    114				! or else old loadlin-1.5 will fail)
    115	.word	0		! default_switch
    116	.word	0		! SETUPSEG
    117	.word	0x1000
    118	.word	0		! pointing to kernel version string
    119	.byte	0		! = 0, old one (LILO, Loadlin,
    120				! 0xTV: T=0 for LILO
    121				!       V = version
    122	.byte	1		! Load flags bzImage=1
    123	.word	0x8000		! size to move, when setup is not
    124	.long	0x100000	! 0x100000 = default for big kernel
    125	.long	0		! address of loaded ramdisk image
    126	.long	0		# its size in bytes