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

Commit 7cf32cad authored by Mikael Starvik's avatar Mikael Starvik Committed by Linus Torvalds
Browse files

[PATCH] CRIS update: misc patches



* Start threads with IRQs enabled.
* Move symbol exports to arch specific file.
* Prepare for real command line in the future.
* Handle csum for partition that crosses flash boundary.
* Set utsname.

Signed-off-by: default avatarMikael Starvik <starvik@axis.com>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 2e0cea1d
Loading
Loading
Loading
Loading
+19 −3
Original line number Diff line number Diff line
@@ -13,6 +13,7 @@
#include <asm/arch/sv_addr_ag.h>

#define RAM_INIT_MAGIC 0x56902387
#define COMMAND_LINE_MAGIC 0x87109563

	;; Exported symbols
	
@@ -89,6 +90,12 @@ basse: move.d pc, r5
	bcs	1b
	nop

	;;  Save command line magic and address.
	move.d	_cmd_line_magic, $r12
	move.d  $r10, [$r12]
	move.d	_cmd_line_addr, $r12
	move.d  $r11, [$r12]
	
	;; Do the decompression and save compressed size in _inptr

	jsr	_decompress_kernel
@@ -99,6 +106,12 @@ basse: move.d pc, r5
	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
	move.d  [$r10], $r10
	move.d  _cmd_line_addr, $r11
	move.d  [$r11], $r11

	;; Enter the decompressed kernel
	move.d	RAM_INIT_MAGIC, r8	; Tell kernel that DRAM is initialized
	jump	0x40004000	; kernel is linked to this address
@@ -107,5 +120,8 @@ basse: move.d pc, r5

_input_data:
	.dword	0		; used by the decompressor

_cmd_line_magic:
	.dword 0
_cmd_line_addr:
	.dword 0
#include "../../lib/hw_settings.S"
+27 −6
Original line number Diff line number Diff line
/* $Id: head.S,v 1.6 2003/04/09 08:12:43 pkj Exp $
/* $Id: head.S,v 1.7 2005/03/07 12:11:06 starvik Exp $
 * 
 * Rescue code, made to reside at the beginning of the
 * flash-memory. when it starts, it checks a partition
@@ -128,6 +128,7 @@
	jump	in_cache	; enter cached area instead
in_cache:


	;; first put a jump test to give a possibility of upgrading the rescue code
	;; without erasing/reflashing the sector. we put a longword of -1 here and if
	;; it is not -1, we jump using the value as jump target. since we can always
@@ -325,9 +326,29 @@ flash_ok:
	;; result will be in r0
checksum:
	moveq	0, $r0
1:	addu.b	[$r1+], $r0
	subq	1, $r2
	bne	1b
	moveq   CONFIG_ETRAX_FLASH1_SIZE, $r6

	;; If the first physical flash memory is exceeded wrap to the second one.
	btstq	26, $r1		; Are we addressing first flash?
	bpl	1f
	nop
	clear.d	$r6

1:	test.d  $r6		; 0 = no wrapping
	beq	2f
	nop
	lslq	20, $r6		; Convert MB to bytes
	sub.d	$r1, $r6

2:	addu.b	[$r1+], $r0
	subq	1, $r6		; Flash memory left
	beq	3f
	subq	1, $r2		; Length left
	bne	2b
	nop
	ret
	nop

3:	move.d	MEM_CSE1_START, $r1 ; wrap to second flash
	ba	2b
	nop
+36 −18
Original line number Diff line number Diff line
/* $Id: entry.S,v 1.23 2004/10/19 13:07:37 starvik Exp $
/* $Id: entry.S,v 1.28 2005/06/20 05:06:30 starvik Exp $
 *
 *  linux/arch/cris/entry.S
 *
@@ -7,6 +7,22 @@
 *  Authors:	Bjorn Wesen (bjornw@axis.com)
 *
 *  $Log: entry.S,v $
 *  Revision 1.28  2005/06/20 05:06:30  starvik
 *  Remove unnecessary diff to kernel.org tree
 *
 *  Revision 1.27  2005/03/04 08:16:16  starvik
 *  Merge of Linux 2.6.11.
 *
 *  Revision 1.26  2005/01/11 13:49:47  starvik
 *  Added NMI handler.
 *
 *  Revision 1.25  2004/12/27 11:18:32  starvik
 *  Merge of Linux 2.6.10 (not functional yet).
 *
 *  Revision 1.24  2004/12/22 10:41:23  starvik
 *  Updates to make v10 compile with the latest SMP aware generic code (even
 *  though v10 will never have SMP).
 *
 *  Revision 1.23  2004/10/19 13:07:37  starvik
 *  Merge of Linux 2.6.9
 *
@@ -279,6 +295,7 @@
#ifdef CONFIG_PREEMPT	
	; Check if preemptive kernel scheduling should be done
_resume_kernel:
	di
	; Load current task struct
	movs.w	-8192, $r0	;  THREAD_SIZE = 8192
	and.d	$sp, $r0
@@ -291,12 +308,7 @@ _need_resched:
	bpl	_Rexit
	nop
	; Ok, lets's do some preemptive kernel scheduling
	move.d	PREEMPT_ACTIVE, $r10
	move.d	$r10, [$r0+TI_preempt_count] ; Mark as active
	ei
	jsr	schedule
	clear.d	[$r0+TI_preempt_count] ;  Mark as inactive
	di
	jsr	preempt_schedule_irq
	; Load new task struct
	movs.w	-8192, $r0	;  THREAD_SIZE = 8192
	and.d	$sp, $r0
@@ -590,15 +602,15 @@ mmu_bus_fault:
	move.d	$r0, [$sp+16]
1:	btstq	12, $r1		   ; Refill?
	bpl	2f
	lsrq	PMD_SHIFT, $r1     ; Get PMD index into PGD (bit 24-31)
	move.d  [current_pgd], $r0 ; PGD for the current process
	lsrq	24, $r1     ; Get PGD index (bit 24-31)
	move.d  [per_cpu__current_pgd], $r0 ; PGD for the current process
	move.d	[$r0+$r1.d], $r0   ; Get PMD
	beq	2f
	nop
	and.w	PAGE_MASK, $r0	   ; Remove PMD flags
	move.d  [R_MMU_CAUSE], $r1
	lsrq	PAGE_SHIFT, $r1
	and.d	0x7ff, $r1         ; Get PTE index into PMD (bit 13-24)
	and.d	0x7ff, $r1         ; Get PTE index into PGD (bit 13-23)
	move.d	[$r0+$r1.d], $r1   ; Get PTE
	beq	2f
	nop
@@ -656,11 +668,6 @@ hwbreakpoint:
	nop
	
IRQ1_interrupt:

#if defined(CONFIG_ETRAX_WATCHDOG) && !defined(CONFIG_SVINTO_SIM)
;; If we receive a watchdog interrupt while it is not expected, then set
;; up a canonical frame and dump register contents before dying.

	;; this prologue MUST match the one in irq.h and the struct in ptregs.h!!!
	move	$brp,[$sp=$sp-16]; instruction pointer and room for a fake SBFS frame
	push	$srp
@@ -672,9 +679,16 @@ IRQ1_interrupt:
	push	$r10		; push orig_r10
	clear.d [$sp=$sp-4]	; frametype == 0, normal frame

;; We don't check that we actually were bit by the watchdog as opposed to
;; an external NMI, since there is currently no handler for external NMI.

	move.d	[R_IRQ_MASK0_RD], $r1 ; External NMI or watchdog?
	and.d   0x80000000, $r1
	beq	wdog
	move.d  $sp, $r10
	jsr	handle_nmi
	setf m			; Enable NMI again
	retb			; Return from NMI
	nop
wdog:
#if defined(CONFIG_ETRAX_WATCHDOG) && !defined(CONFIG_SVINTO_SIM)
;; Check if we're waiting for reset to happen, as signalled by
;; hard_reset_now setting cause_of_death to a magic value.  If so, just
;; get stuck until reset happens.
@@ -1118,6 +1132,10 @@ sys_call_table:
	.long sys_mq_getsetattr
	.long sys_ni_syscall		/* reserved for kexec */
	.long sys_waitid
	.long sys_ni_syscall		/* 285 */ /* available */
	.long sys_add_key
	.long sys_request_key
	.long sys_keyctl

        /*
         * NOTE!! This doesn't have to be exact - we just have
+13 −4
Original line number Diff line number Diff line
@@ -18,6 +18,10 @@
*! Jul 21 1999  Bjorn Wesen     eLinux port
*!
*! $Log: kgdb.c,v $
*! Revision 1.6  2005/01/14 10:12:17  starvik
*! KGDB on separate port.
*! Console fixes from 2.4.
*!
*! Revision 1.5  2004/10/07 13:59:08  starvik
*! Corrected call to set_int_vector
*!
@@ -71,7 +75,7 @@
*!
*!---------------------------------------------------------------------------
*!
*! $Id: kgdb.c,v 1.5 2004/10/07 13:59:08 starvik Exp $
*! $Id: kgdb.c,v 1.6 2005/01/14 10:12:17 starvik Exp $
*!
*! (C) Copyright 1999, Axis Communications AB, LUND, SWEDEN
*!
@@ -225,6 +229,7 @@
#include <linux/kernel.h>
#include <linux/delay.h>
#include <linux/linkage.h>
#include <linux/reboot.h>

#include <asm/setup.h>
#include <asm/ptrace.h>
@@ -1344,12 +1349,11 @@ handle_exception (int sigval)
	}
}

/* The jump is to the address 0x00000002. Performs a complete re-start
   from scratch. */
/* Performs a complete re-start from scratch. */
static void
kill_restart ()
{
	__asm__ volatile ("jump 2");
	machine_restart("");
}

/********************************** Breakpoint *******************************/
@@ -1506,6 +1510,11 @@ asm ("
  bne goback
  nop

  move.d  [reg+0x5E], $r10		; Get DCCR
  btstq	   8, $r10			; Test the U-flag.
  bmi	   goback
  nop

;;
;; Handle the communication
;;
+2 −1
Original line number Diff line number Diff line
/* $Id: process.c,v 1.9 2004/10/19 13:07:37 starvik Exp $
/* $Id: process.c,v 1.12 2004/12/27 11:18:32 starvik Exp $
 * 
 *  linux/arch/cris/kernel/process.c
 *
@@ -101,6 +101,7 @@ int kernel_thread(int (*fn)(void *), void * arg, unsigned long flags)
	regs.r11 = (unsigned long)fn;
	regs.r12 = (unsigned long)arg;
	regs.irp = (unsigned long)kernel_thread_helper;
	regs.dccr = 1 << I_DCCR_BITNR;

	/* Ok, create the new process.. */
        return do_fork(flags | CLONE_VM | CLONE_UNTRACED, 0, &regs, 0, NULL, NULL);
Loading