Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit bdb144b6 authored by Jesper Nilsson's avatar Jesper Nilsson
Browse files

[CRIS] Build fixes for compressed and rescue images for v10 and v32:



- Use the normal cross gcc instead of using an elf specific cris toolchain.
  This removes the dependency of this second toolchain.

- Use the normal cross objcopy instead of overriding it to use elf-toolchain.
  This allows compiling using "CROSS_COMPILE=$CRIS_GCC/cris-axis-linux-gnu-"
  instead of just "CROSS_COMPILE=$CRIS_GCC/cris-axis-linux-gnu/bin/"

- Remove redundant rules for compiling, the implicit rules are sufficient.

- Convert the arch/cris/arch-v10/boot/compressed/head.S to format
  accepted by the cris-axis-linux-gnu-gcc (registers must be prefixed
  with '$', remove explicit underscore on exported symbols)

- Remove a number of unused (and duplicated) prototypes from
  arch/cris/arch-v10/boot/compressed/misc.c.

- Correct memcpy and memset return values (actually return them!)

Signed-off-by: default avatarJesper Nilsson <jesper.nilsson@axis.com>
parent 543cf4cb
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -2,7 +2,6 @@
# arch/cris/arch-v10/boot/Makefile
#

OBJCOPY = objcopy-cris
OBJCOPYFLAGS = -O binary --remove-section=.bss

subdir- := compressed rescue
+2 −10
Original line number Diff line number Diff line
@@ -2,12 +2,10 @@
# arch/cris/arch-v10/boot/compressed/Makefile
#

CC = gcc-cris -melf $(LINUXINCLUDE)
ccflags-y += -O2
LD = ld-cris
asflags-y += $(LINUXINCLUDE)
ccflags-y += -O2 $(LINUXINCLUDE)
ldflags-y += -T $(obj)/decompress.ld
OBJECTS = $(obj)/head.o $(obj)/misc.o
OBJCOPY = objcopy-cris
OBJCOPYFLAGS = -O binary --remove-section=.bss

quiet_cmd_image = BUILD   $@
@@ -21,12 +19,6 @@ $(obj)/decompress.o: $(OBJECTS) FORCE
$(obj)/decompress.bin: $(obj)/decompress.o FORCE
	$(call if_changed,objcopy)

$(obj)/head.o: $(obj)/head.S .config
	@$(CC) -D__ASSEMBLY__ -traditional -c $< -o $@

$(obj)/misc.o: $(obj)/misc.c .config
	@$(CC) -D__KERNEL__ -c $< -o $@

$(obj)/vmlinux: $(obj)/piggy.gz $(obj)/decompress.bin FORCE
	$(call if_changed,image)

+2 −1
Original line number Diff line number Diff line
OUTPUT_FORMAT(elf32-us-cris)
/* OUTPUT_FORMAT(elf32-us-cris) */
OUTPUT_FORMAT(elf32-cris)

MEMORY 
	{
+49 −49
Original line number Diff line number Diff line
@@ -16,7 +16,7 @@

	;; Exported symbols

	.globl	_input_data
	.globl	input_data


	.text
@@ -26,7 +26,7 @@

;; We need to initialze DRAM registers before we start using the DRAM

	cmp.d	RAM_INIT_MAGIC, r8	; Already initialized?
	cmp.d	RAM_INIT_MAGIC, $r8	; Already initialized?
	beq	dram_init_finished
	nop

@@ -36,56 +36,56 @@ dram_init_finished:

	;; Initiate the PA and PB ports

	move.b   CONFIG_ETRAX_DEF_R_PORT_PA_DATA, r0
	move.b   r0, [R_PORT_PA_DATA]
	move.b   CONFIG_ETRAX_DEF_R_PORT_PA_DATA, $r0
	move.b   $r0, [R_PORT_PA_DATA]

	move.b   CONFIG_ETRAX_DEF_R_PORT_PA_DIR, r0
	move.b   r0, [R_PORT_PA_DIR]
	move.b   CONFIG_ETRAX_DEF_R_PORT_PA_DIR, $r0
	move.b   $r0, [R_PORT_PA_DIR]

	move.b   CONFIG_ETRAX_DEF_R_PORT_PB_DATA, r0
	move.b   r0, [R_PORT_PB_DATA]
	move.b   CONFIG_ETRAX_DEF_R_PORT_PB_DATA, $r0
	move.b   $r0, [R_PORT_PB_DATA]

	move.b   CONFIG_ETRAX_DEF_R_PORT_PB_DIR, r0
	move.b   r0, [R_PORT_PB_DIR]
	move.b   CONFIG_ETRAX_DEF_R_PORT_PB_DIR, $r0
	move.b   $r0, [R_PORT_PB_DIR]

	;; Setup the stack to a suitably high address.
	;; We assume 8 MB is the minimum DRAM in an eLinux
	;; product and put the sp at the top for now.

	move.d	0x40800000, sp
	move.d	0x40800000, $sp

	;; Figure out where the compressed piggyback image is
	;; in the flash (since we wont try to copy it to DRAM
	;; before unpacking). It is at _edata, but in flash.
	;; Use (_edata - basse) as offset to the current PC.

basse:	move.d	pc, r5
	and.d	0x7fffffff, r5	; strip any non-cache bit
	subq	2, r5		; compensate for the move.d pc instr
	move.d	r5, r0		; save for later - flash address of 'basse'
	add.d	_edata, r5
	sub.d	basse, r5	; r5 = flash address of '_edata'
basse:	move.d	$pc, $r5
	and.d	0x7fffffff, $r5	; strip any non-cache bit
	subq	2, $r5		; compensate for the move.d $pc instr
	move.d	$r5, $r0		; save for later - flash address of 'basse'
	add.d	_edata, $r5
	sub.d	basse, $r5	; $r5 = flash address of '_edata'

	;; Copy text+data to DRAM

	move.d	basse, r1	; destination
	move.d	_edata, r2	; end destination
1:	move.w	[r0+], r3
	move.w	r3, [r1+]
	cmp.d	r2, r1
	move.d	basse, $r1	; destination
	move.d	_edata, $r2	; end destination
1:	move.w	[$r0+], $r3
	move.w	$r3, [$r1+]
	cmp.d	$r2, $r1
	bcs	1b
	nop

	move.d	r5, [_input_data] ; for the decompressor
	move.d	$r5, [input_data] ; for the decompressor


	;; Clear the decompressors BSS (between _edata and _end)

	moveq	0, r0
	move.d	_edata, r1
	move.d	_end, r2
1:	move.w	r0, [r1+]
	cmp.d	r2, r1
	moveq	0, $r0
	move.d	_edata, $r1
	move.d	_end, $r2
1:	move.w	$r0, [$r1+]
	cmp.d	$r2, $r1
	bcs	1b
	nop

@@ -95,15 +95,15 @@ basse: move.d pc, r5
	move.d	_cmd_line_addr, $r12
	move.d  $r11, [$r12]

	;; Do the decompression and save compressed size in _inptr
	;; Do the decompression and save compressed size in inptr

	jsr	_decompress_kernel
	jsr	decompress_kernel

	;; Put start address of root partition in r9 so the kernel can use it
	;; Put start address of root partition in $r9 so the kernel can use it
	;; when mounting from flash

	move.d	[_input_data], r9	; flash address of compressed kernel
	add.d	[_inptr], r9		; size of compressed kernel
	move.d	[input_data], $r9	; flash address of compressed kernel
	add.d	[inptr], $r9		; size of compressed kernel

	;; Restore command line magic and address.
	move.d  _cmd_line_magic, $r10
@@ -112,12 +112,12 @@ basse: move.d pc, r5
	move.d  [$r11], $r11

	;; Enter the decompressed kernel
	move.d	RAM_INIT_MAGIC, r8	; Tell kernel that DRAM is initialized
	move.d	RAM_INIT_MAGIC, $r8	; Tell kernel that DRAM is initialized
	jump	0x40004000	; kernel is linked to this address

	.data

_input_data:
input_data:
	.dword	0		; used by the decompressor
_cmd_line_magic:
	.dword 0
+10 −13
Original line number Diff line number Diff line
@@ -30,8 +30,7 @@
#define STATIC static

void* memset(void* s, int c, size_t n);
void* memcpy(void* __dest, __const void* __src,
	     size_t __n);
void* memcpy(void* __dest, __const void* __src, size_t __n);

#define memzero(s, n)     memset ((s), 0, (n))

@@ -81,11 +80,8 @@ static unsigned outcnt = 0; /* bytes in output buffer */
#  define Tracecv(c,x)
#endif

static int  fill_inbuf(void);
static void flush_window(void);
static void error(char *m);
static void gzip_mark(void **);
static void gzip_release(void **);

extern char *input_data;  /* lives in head.S */

@@ -95,7 +91,6 @@ static unsigned long output_ptr = 0;
 
static void *malloc(int size);
static void free(void *where);
static void error(char *m);
static void gzip_mark(void **);
static void gzip_release(void **);
 
@@ -103,8 +98,8 @@ static void puts(const char *);

/* the "heap" is put directly after the BSS ends, at end */
  
extern int end;
static long free_mem_ptr = (long)&end;
extern int _end;
static long free_mem_ptr = (long)&_end;
 
#include "../../../../../lib/inflate.c"

@@ -170,6 +165,8 @@ memset(void* s, int c, size_t n)
	char *ss = (char*)s;

	for (i=0;i<n;i++) ss[i] = c;

   return s;
}

void*
@@ -180,6 +177,8 @@ memcpy(void* __dest, __const void* __src,
	char *d = (char *)__dest, *s = (char *)__src;

	for (i=0;i<__n;i++) d[i] = s[i];

   return __dest;
}

/* ===========================================================================
@@ -216,14 +215,12 @@ error(char *x)
	while(1);	/* Halt */
}

void
setup_normal_output_buffer()
void setup_normal_output_buffer(void)
{
	output_data = (char *)KERNEL_LOAD_ADR;
}

void
decompress_kernel()
void decompress_kernel(void)
{
	char revision;
	
@@ -257,7 +254,7 @@ decompress_kernel()

	makecrc();

	__asm__ volatile ("move vr,%0" : "=rm" (revision));
	__asm__ volatile ("move $vr,%0" : "=rm" (revision));
	if (revision < 10)
	{
		puts("You need an ETRAX 100LX to run linux 2.6\n");
Loading