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.S (1690B)


      1/*
      2 * Startup glue code to uncompress the kernel
      3 *
      4 *   (C) 2017 Helge Deller <deller@gmx.de>
      5 */
      6
      7#include <linux/init.h>
      8#include <linux/linkage.h>
      9#include <asm/asm-offsets.h>
     10#include <asm/page.h>
     11#include <asm/psw.h>
     12#include <asm/pdc.h>
     13#include <asm/assembly.h>
     14#include "sizes.h"
     15
     16#define BOOTADDR(x)	(x)
     17
     18#ifndef CONFIG_64BIT
     19	.import	$global$		/* forward declaration */
     20#endif /*!CONFIG_64BIT*/
     21
     22	__HEAD
     23
     24ENTRY(startup)
     25	 .level PA_ASM_LEVEL
     26
     27#define PSW_W_SM	0x200
     28#define PSW_W_BIT       36
     29
     30	;! nuke the W bit, saving original value
     31	.level 2.0
     32	rsm	PSW_W_SM, %r1
     33
     34	.level 1.1
     35	extrw,u	%r1, PSW_W_BIT-32, 1, %r1
     36	copy	%r1, %arg0
     37
     38	/* Make sure sr4-sr7 are set to zero for the kernel address space */
     39	mtsp    %r0,%sr4
     40	mtsp    %r0,%sr5
     41	mtsp    %r0,%sr6
     42	mtsp    %r0,%sr7
     43
     44	/* Clear BSS */
     45
     46	.import _bss,data
     47	.import _ebss,data
     48
     49	load32	BOOTADDR(_bss),%r3
     50	load32	BOOTADDR(_ebss),%r4
     51	ldo	FRAME_SIZE(%r4),%sp	/* stack at end of bss */
     52$bss_loop:
     53	cmpb,<<,n %r3,%r4,$bss_loop
     54	stw,ma	%r0,4(%r3)
     55
     56	/* Initialize the global data pointer */
     57	loadgp
     58
     59	/* arg0..arg4 were set by palo. */
     60	copy	%arg1, %r6		/* command line */
     61	copy	%arg2, %r7		/* rd-start */
     62	copy	%arg3, %r8		/* rd-end */
     63	load32	BOOTADDR(decompress_kernel),%r3
     64
     65#ifdef CONFIG_64BIT
     66	.level PA_ASM_LEVEL
     67	ssm	PSW_W_SM, %r0		/* set W-bit */
     68	depdi	0, 31, 32, %r3
     69#endif
     70	load32	BOOTADDR(startup_continue), %r2
     71	bv,n	0(%r3)
     72
     73startup_continue:
     74#ifdef CONFIG_64BIT
     75	.level PA_ASM_LEVEL
     76	rsm	PSW_W_SM, %r0		/* clear W-bit */
     77#endif
     78
     79	load32	KERNEL_BINARY_TEXT_START, %arg0 /* free mem */
     80	copy	%r6, %arg1		/* command line */
     81	copy	%r7, %arg2		/* rd-start */
     82	copy	%r8, %arg3		/* rd-end */
     83
     84	bv,n	0(%ret0)
     85END(startup)