All of lore.kernel.org
 help / color / mirror / Atom feed
From: Yoshinori Sato <ysato@users.sourceforge.jp>
To: Linus Torvalds <torvalds@osdl.org>
Cc: linux kernel Mailing List <linux-kernel@vger.kernel.org>
Subject: [PATCH] h8300 support fix (1/2)
Date: Fri, 22 Aug 2003 14:02:12 +0900	[thread overview]
Message-ID: <m2wud68euj.wl%ysato@users.sourceforge.jp> (raw)

o build script update
o interrupt management fix
o mtd support fix
o signal handling fix

-- 
Yoshinori Sato
<ysato@users.sourceforge.jp>

diff -Nru linux-2.6.0-test3/MAINTAINERS linux-2.6.0-test3-h8300/MAINTAINERS
--- linux-2.6.0-test3/MAINTAINERS	2003-08-21 19:32:59.000000000 +0900
+++ linux-2.6.0-test3-h8300/MAINTAINERS	2003-08-22 01:09:26.000000000 +0900
@@ -2170,6 +2170,12 @@
 W:	http://www.ee.nec.de/uclinux/
 S:	Supported
 
+UCLINUX FOR RENESAS H8/300
+P:	Yoshinori Sato
+M:	ysato@users.sourceforge.jp
+W:	http://uclinux-h8.sourceforge.jp/
+S:	Supported
+
 USB DIAMOND RIO500 DRIVER
 P:	Cesar Miquel
 M:	miquel@df.uba.ar
diff -Nru linux-2.6.0-test3/arch/h8300/Kconfig linux-2.6.0-test3-h8300/arch/h8300/Kconfig
--- linux-2.6.0-test3/arch/h8300/Kconfig	2003-08-09 20:30:17.000000000 +0900
+++ linux-2.6.0-test3-h8300/arch/h8300/Kconfig	2003-08-22 00:42:22.000000000 +0900
@@ -190,6 +190,8 @@
 
 source "drivers/base/Kconfig"
 
+source "drivers/mtd/Kconfig"
+
 source "drivers/block/Kconfig"
 
 source "drivers/ide/Kconfig"
diff -Nru linux-2.6.0-test3/arch/h8300/Makefile linux-2.6.0-test3-h8300/arch/h8300/Makefile
--- linux-2.6.0-test3/arch/h8300/Makefile	2003-08-09 20:30:17.000000000 +0900
+++ linux-2.6.0-test3-h8300/arch/h8300/Makefile	2003-08-22 00:42:22.000000000 +0900
@@ -5,7 +5,7 @@
 # License.  See the file "COPYING" in the main directory of this archive
 # for more details.
 #
-# (C) Copyright 2002, Yoshinori Sato <ysato@users.sourceforge.jp>
+# (C) Copyright 2002,2003 Yoshinori Sato <ysato@users.sourceforge.jp>
 #
 ifndef include-config
 -include $(TOPDIR)/.config
@@ -37,8 +37,8 @@
 CFLAGS += -mint32 -fno-builtin -Os
 CFLAGS += -g
 CFLAGS += -D__linux__
-CFLAGS += -DUTS_SYSNAME=\"uClinux\" -DTARGET=$(BOARD)
-AFLAGS += -DPLATFORM=$(PLATFORM) -DTARGET=$(BOARD) -DMODEL=$(MODEL) $(cflags-y)
+CFLAGS += -DUTS_SYSNAME=\"uClinux\"
+AFLAGS += -DPLATFORM=$(PLATFORM) -DMODEL=$(MODEL) $(cflags-y)
 LDFLAGS += $(ldflags-y)
 
 CROSS_COMPILE = h8300-elf-
@@ -53,28 +53,32 @@
 
 libs-y	+= arch/$(ARCH)/lib/ $(LIBGCC)
 
-export MODEL
+boot := arch/h8300/boot
+
+export MODEL PLATFORM BOARD
 
 archmrproper:
 
 archclean:
-	$(call descend arch/$(ARCH), subdirclean)
+	$(Q)$(MAKE) $(clean)=$(boot)
+
+prepare: include/asm-$(ARCH)/machine-depend.h include/asm-$(ARCH)/asm-offsets.h
 
-prepare: include/asm-$(ARCH)/asm-offsets.h
+include/asm-$(ARCH)/machine-depend.h: include/asm-$(ARCH)/$(BOARD)/machine-depend.h
+	$(Q)ln -sf $(BOARD)/machine-depend.h \
+                   include/asm-$(ARCH)/machine-depend.h
+	@echo '  Create include/asm-$(ARCH)/machine-depend.h'
 
 include/asm-$(ARCH)/asm-offsets.h: arch/$(ARCH)/kernel/asm-offsets.s \
 				   include/asm include/linux/version.h
 	$(call filechk,gen-asm-offsets)
 
-vmlinux.bin: vmlinux
-	$(OBJCOPY) -Obinary $< $@
-
-vmlinux.srec: vmlinux
-	$(OBJCOPY) -Osrec $< $@
+vmlinux.srec vmlinux.bin: vmlinux
+	$(Q)$(MAKE) $(build)=$(boot) $(boot)/$@
 
 define archhelp
   echo  'vmlinux.bin  - Create raw binary'
   echo  'vmlinux.srec - Create srec binary'
 endef
 
-CLEAN_FILES += arch/$(ARCH)/vmlinux.bin arch/$(ARCH)/vmlinux.srec
+CLEAN_FILES += include/asm-$(ARCH)/asm-offsets.h include/asm-$(ARCH)/machine-depend.h
diff -Nru linux-2.6.0-test3/arch/h8300/boot/Makefile linux-2.6.0-test3-h8300/arch/h8300/boot/Makefile
--- linux-2.6.0-test3/arch/h8300/boot/Makefile	1970-01-01 09:00:00.000000000 +0900
+++ linux-2.6.0-test3-h8300/arch/h8300/boot/Makefile	2003-08-22 00:42:22.000000000 +0900
@@ -0,0 +1,12 @@
+# arch/h8300/boot/Makefile
+
+targets := vmlinux.srec vmlinux.bin
+
+OBJCOPYFLAGS_vmlinux.srec := -Osrec
+OBJCOPYFLAGS_vmlinux.bin  := -Obinary
+
+$(obj)/vmlinux.srec $(obj)/vmlinux.bin:  vmlinux FORCE
+	$(call if_changed,objcopy)
+	@echo '  Kernel: $@ is ready'
+
+CLEAN_FILES += arch/$(ARCH)/vmlinux.bin arch/$(ARCH)/vmlinux.srec
diff -Nru linux-2.6.0-test3/arch/h8300/kernel/signal.c linux-2.6.0-test3-h8300/arch/h8300/kernel/signal.c
--- linux-2.6.0-test3/arch/h8300/kernel/signal.c	2003-08-09 20:30:17.000000000 +0900
+++ linux-2.6.0-test3-h8300/arch/h8300/kernel/signal.c	2003-08-22 00:42:22.000000000 +0900
@@ -157,6 +157,7 @@
 #if defined(CONFIG_CPU_H8S)
 	short dummy_exr;
 #endif
+	long dummy_pc;
 	char *pretcode;
 	unsigned char retcode[8];
 	unsigned long extramask[_NSIG_WORDS-1];
@@ -170,6 +171,7 @@
 #if defined(CONFIG_CPU_H8S)
 	short dummy_exr;
 #endif
+	long dummy_pc;
 	char *pretcode;
 	unsigned char retcode[8];
 	struct siginfo info;
@@ -241,7 +243,7 @@
 
 asmlinkage int do_sigreturn(unsigned long __unused,...)
 {
-	struct pt_regs *regs = (struct pt_regs *) &__unused;
+	struct pt_regs *regs = (struct pt_regs *) (&__unused - 1);
 	unsigned long usp = rdusp();
 	struct sigframe *frame = (struct sigframe *)(usp - 4);
 	sigset_t set;
@@ -416,7 +418,6 @@
 	/* Set up to return from userspace.  */
 	err |= __put_user(frame->retcode, &frame->pretcode);
 
-	/* moveq #,d0; notb d0; movea.l #,a5; trap #0 */
 	/* sub.l er0,er0; mov.b #__NR_rt_sigreturn,r0l; trapa #0 */
 	err != __put_user(0x1a80f800 + (__NR_rt_sigreturn & 0xff),
 			(long *)(frame->retcode + 0));
diff -Nru linux-2.6.0-test3/arch/h8300/kernel/syscalls.S linux-2.6.0-test3-h8300/arch/h8300/kernel/syscalls.S
--- linux-2.6.0-test3/arch/h8300/kernel/syscalls.S	2003-08-09 20:30:17.000000000 +0900
+++ linux-2.6.0-test3-h8300/arch/h8300/kernel/syscalls.S	2003-08-22 00:42:22.000000000 +0900
@@ -275,14 +275,18 @@
  	.long SYMBOL_NAME(sys_ni_syscall)	/* sys_remap_file_pages */
  	.long SYMBOL_NAME(sys_set_tid_address)
  	.long SYMBOL_NAME(sys_timer_create)
- 	.long SYMBOL_NAME(sys_timer_settime)		/* 260 */
+ 	.long SYMBOL_NAME(sys_timer_settime)	/* 260 */
  	.long SYMBOL_NAME(sys_timer_gettime)
  	.long SYMBOL_NAME(sys_timer_getoverrun)
  	.long SYMBOL_NAME(sys_timer_delete)
  	.long SYMBOL_NAME(sys_clock_settime)
- 	.long SYMBOL_NAME(sys_clock_gettime)		/* 265 */
+ 	.long SYMBOL_NAME(sys_clock_gettime)	/* 265 */
  	.long SYMBOL_NAME(sys_clock_getres)
  	.long SYMBOL_NAME(sys_clock_nanosleep)
+	.long SYMBOL_NAME(sys_statfs64)
+	.long SYMBOL_NAME(sys_fstatfs64)	
+	.long SYMBOL_NAME(sys_tgkill)		/* 270 */
+	.long SYMBOL_NAME(sys_utimes)
 
 	.rept NR_syscalls-(.-SYMBOL_NAME(sys_call_table))/4
 		.long SYMBOL_NAME(sys_ni_syscall)
diff -Nru linux-2.6.0-test3/arch/h8300/kernel/vmlinux.lds.S linux-2.6.0-test3-h8300/arch/h8300/kernel/vmlinux.lds.S
--- linux-2.6.0-test3/arch/h8300/kernel/vmlinux.lds.S	2003-08-21 19:33:00.000000000 +0900
+++ linux-2.6.0-test3-h8300/arch/h8300/kernel/vmlinux.lds.S	2003-08-22 00:20:06.000000000 +0900
@@ -2,58 +2,62 @@
 
 #ifdef CONFIG_H8300H_GENERIC
 #ifdef CONFIG_ROMKERNEL
-#include "platform/h8300h/generic/rom.ld"
+#include "../platform/h8300h/generic/rom.ld"
 #endif
 #ifdef CONFIG_RAMKERNEL
-#include "platform/h8300h/generic/ram.ld"
+#include "../platform/h8300h/generic/ram.ld"
 #endif
 #endif
 
 #ifdef CONFIG_H8300H_AKI3068NET
 #ifdef CONFIG_ROMKERNEL
-#include "platform/h8300h/aki3068net/rom.ld"
+#include "../platform/h8300h/aki3068net/rom.ld"
 #endif
 #ifdef CONFIG_RAMKERNEL
-#include "platform/h8300h/aki3068net/ram.ld"
+#include "../platform/h8300h/aki3068net/ram.ld"
 #endif
 #endif
 
 #ifdef CONFIG_H8300H_H8MAX
 #ifdef CONFIG_ROMKERNEL
-#include "platform/h8300h/h8max/rom.ld"
+#include "../platform/h8300h/h8max/rom.ld"
 #endif
 #ifdef CONFIG_RAMKERNEL
-#include "platform/h8300h/h8max/ram.ld"
+#include "../platform/h8300h/h8max/ram.ld"
 #endif
 #endif
 
 #ifdef CONFIG_H8300H_SIM
 #ifdef CONFIG_ROMKERNEL
-#include "platform/h8300h/generic/rom.ld"
+#include "../platform/h8300h/generic/rom.ld"
 #endif
 #ifdef CONFIG_RAMKERNEL
-#include "platform/h8300h/generic/ram.ld"
+#include "../platform/h8300h/generic/ram.ld"
 #endif
 #endif
 
 #ifdef CONFIG_H8S_SIM
 #ifdef CONFIG_ROMKERNEL
-#include "platform/h8s/generic/rom.ld"
+#include "../platform/h8s/generic/rom.ld"
 #endif
 #ifdef CONFIG_RAMKERNEL
-#include "platform/h8s/generic/ram.ld"
+#include "../platform/h8s/generic/ram.ld"
 #endif
 #endif
 
 #ifdef CONFIG_H8S_EDOSK2674
 #ifdef CONFIG_ROMKERNEL
-#include "platform/h8s/edosk2674/rom.ld"
+#include "../platform/h8s/edosk2674/rom.ld"
 #endif
 #ifdef CONFIG_RAMKERNEL
-#include "platform/h8s/edosk2674/ram.ld"
+#include "../platform/h8s/edosk2674/ram.ld"
 #endif
 #endif
 
+#if defined(CONFIG_H8300H_SIM) || defined(CONFIG_H8S_SIM)
+INPUT(romfs.o)
+#endif
+
 _jiffies = _jiffies_64 + 4;
 
 SECTIONS
@@ -169,6 +173,10 @@
 	__end = . ;
 	__ramstart = .;
 	} > ram
+        .romfs :	
+	{
+		*(.romfs*)
+	} > ram
         .dummy :
         {
 	COMMAND_START = . - 0x200 ;
diff -Nru linux-2.6.0-test3/arch/h8300/lib/romfs.S linux-2.6.0-test3-h8300/arch/h8300/lib/romfs.S
--- linux-2.6.0-test3/arch/h8300/lib/romfs.S	1970-01-01 09:00:00.000000000 +0900
+++ linux-2.6.0-test3-h8300/arch/h8300/lib/romfs.S	2003-08-22 00:42:22.000000000 +0900
@@ -0,0 +1,52 @@
+/* romfs move to __ebss */
+
+#include <asm/linkage.h>
+
+#if defined(__H8300H__) 
+	.h8300h
+#endif
+#if defined(__H8300S__) 
+	.h8300s
+#endif
+
+	.text
+.globl	__move_romfs
+_romfs_sig_len = 8
+
+__move_romfs:	
+	mov.l	#__sbss,er0
+	mov.l	#_romfs_sig,er1
+	mov.b	#_romfs_sig_len,r3l
+1:					/* check romfs image */
+	mov.b	@er0+,r2l
+	mov.b	@er1+,r2h
+	cmp.b	r2l,r2h
+	bne	2f
+	dec.b	r3l
+	bne	1b
+
+	/* find romfs image */
+	mov.l	@__sbss+8,er0		/* romfs length(be) */
+	mov.l	#__sbss,er1
+	add.l	er0,er1			/* romfs image end */
+	mov.l	#__ebss,er2
+	add.l	er0,er2			/* distination address */
+	adds	#2,er0
+	adds	#1,er0
+	shlr	er0
+	shlr	er0			/* transfer length */
+1:
+	mov.l	@er1,er3		/* copy image */
+	mov.l	er3,@er2
+	subs	#4,er1
+	subs	#4,er2
+	dec.l	#1,er0
+	bpl	1b
+2:
+	rts
+
+	.section	.rodata
+_romfs_sig:	
+	.ascii	"-rom1fs-"
+
+	.end
diff -Nru linux-2.6.0-test3/arch/h8300/platform/h8300h/aki3068net/timer.c linux-2.6.0-test3-h8300/arch/h8300/platform/h8300h/aki3068net/timer.c
--- linux-2.6.0-test3/arch/h8300/platform/h8300h/aki3068net/timer.c	2003-08-09 20:30:17.000000000 +0900
+++ linux-2.6.0-test3-h8300/arch/h8300/platform/h8300h/aki3068net/timer.c	2003-08-22 00:42:22.000000000 +0900
@@ -25,15 +25,11 @@
 
 #define CMFA 6
 
-extern int request_irq_boot(unsigned int,
-		             irqreturn_t (*handler)(int, void *, struct pt_regs *),
-		             unsigned long, const char *, void *);
-
 void __init platform_timer_setup(irqreturn_t (*timer_int)(int, void *, struct pt_regs *))
 {
 	outb(H8300_TIMER_COUNT_DATA,TCORA2);
 	outb(0x00,_8TCSR2);
-	request_irq_boot(40,timer_int,0,"timer",0);
+	request_irq(40,timer_int,0,"timer",0);
 	outb(0x40|0x08|0x03,_8TCR2);
 }
 
diff -Nru linux-2.6.0-test3/arch/h8300/platform/h8300h/entry.S linux-2.6.0-test3-h8300/arch/h8300/platform/h8300h/entry.S
--- linux-2.6.0-test3/arch/h8300/platform/h8300h/entry.S	2003-08-09 20:30:17.000000000 +0900
+++ linux-2.6.0-test3-h8300/arch/h8300/platform/h8300h/entry.S	2003-08-22 00:42:22.000000000 +0900
@@ -111,7 +111,7 @@
 	mov.l	er1,@(8:16,er0)
 
 	mov.l	@sp+,er1
-	add.l	#(LRET-LORIG),sp		/* remove LORIG - LRET */ 
+	add.l	#(LRET-LER1),sp			/* remove LORIG - LRET */ 
 	mov.l	sp,@SYMBOL_NAME(sw_ksp)
 	mov.l	er0,sp
 	bra	8f
@@ -255,6 +255,7 @@
 	btst	#TIF_NEED_RESCHED,r1l
 	bne	@SYMBOL_NAME(reschedule):16
 	mov.l	sp,er1
+	subs	#4,er1			/* adjust retpc */
 	mov.l	er2,er0
 	jsr	@SYMBOL_NAME(do_signal)
 3:	 
diff -Nru linux-2.6.0-test3/arch/h8300/platform/h8300h/generic/crt0_rom.S linux-2.6.0-test3-h8300/arch/h8300/platform/h8300h/generic/crt0_rom.S
--- linux-2.6.0-test3/arch/h8300/platform/h8300h/generic/crt0_rom.S	2003-08-09 20:30:17.000000000 +0900
+++ linux-2.6.0-test3-h8300/arch/h8300/platform/h8300h/generic/crt0_rom.S	2003-08-22 00:42:22.000000000 +0900
@@ -44,14 +44,19 @@
 
 	/* copy .data */
 #if !defined(CONFIG_H8300H_SIM)
+	/* copy .data */
 	mov.l	#__begin_data,er5
 	mov.l	#__sdata,er6
 	mov.l	#__edata,er4
-	sub.l	er6,er4		
+	sub.l	er6,er4
+	shlr.l	er4
+	shlr.l	er4
 1:	
-	eepmov.w	
-	dec.w	#1,e4
-	bpl	1b	
+	mov.l	@er5+,er0
+	mov.l	er0,@er6
+	adds	#4,er6
+	dec.l	#1,er4
+	bne	1b	
 #endif
 
 	/* copy kernel commandline */
diff -Nru linux-2.6.0-test3/arch/h8300/platform/h8300h/h8max/timer.c linux-2.6.0-test3-h8300/arch/h8300/platform/h8300h/h8max/timer.c
--- linux-2.6.0-test3/arch/h8300/platform/h8300h/h8max/timer.c	2003-08-09 20:30:17.000000000 +0900
+++ linux-2.6.0-test3-h8300/arch/h8300/platform/h8300h/h8max/timer.c	2003-08-22 00:42:22.000000000 +0900
@@ -25,15 +25,11 @@
 
 #define CMFA 6
 
-extern int request_irq_boot(unsigned int,
-		             irqreturn_t (*handler)(int, void *, struct pt_regs *),
-		             unsigned long, const char *, void *);
-
 void __init platform_timer_setup(irqreturn_t (*timer_int)(int, void *, struct pt_regs *))
 {
 	outb(H8300_TIMER_COUNT_DATA,TCORA2);
 	outb(0x00,_8TCSR2);
-	request_irq_boot(40,timer_int,0,"timer",0);
+	request_irq(40,timer_int,0,"timer",0);
 	outb(0x40|0x08|0x03,_8TCR2);
 }
 
diff -Nru linux-2.6.0-test3/arch/h8300/platform/h8300h/ints.c linux-2.6.0-test3-h8300/arch/h8300/platform/h8300h/ints.c
--- linux-2.6.0-test3/arch/h8300/platform/h8300h/ints.c	2003-08-09 20:30:17.000000000 +0900
+++ linux-2.6.0-test3-h8300/arch/h8300/platform/h8300h/ints.c	2003-08-22 00:42:22.000000000 +0900
@@ -52,7 +52,8 @@
 	const char  *devname;
 } irq_handler_t;
 
-irq_handler_t *irq_list[NR_IRQS];
+static irq_handler_t *irq_list[NR_IRQS];
+static int use_kmalloc;
 
 extern unsigned long *interrupt_redirect_table;
 
@@ -119,20 +120,6 @@
 #endif
 }
 
-void __init request_irq_boot(unsigned int irq, 
-  	                     irqreturn_t (*handler)(int, void *, struct pt_regs *),
-                             unsigned long flags, const char *devname, void *dev_id)
-{
-	irq_handler_t *irq_handle;
-	irq_handle = alloc_bootmem(sizeof(irq_handler_t));
-	irq_handle->handler = handler;
-	irq_handle->flags   = flags;
-	irq_handle->count   = 0;
-	irq_handle->dev_id  = dev_id;
-	irq_handle->devname = devname;
-	irq_list[irq] = irq_handle;
-}
-
 int request_irq(unsigned int irq, 
 		irqreturn_t (*handler)(int, void *, struct pt_regs *),
                 unsigned long flags, const char *devname, void *dev_id)
@@ -154,7 +141,14 @@
 			return -EBUSY;
 		H8300_GPIO_DDR(H8300_GPIO_P9, (irq - EXT_IRQ0), 0);
 	}
-	irq_handle = (irq_handler_t *)kmalloc(sizeof(irq_handler_t), GFP_ATOMIC);
+
+	if (use_kmalloc)
+		irq_handle = (irq_handler_t *)kmalloc(sizeof(irq_handler_t), GFP_ATOMIC);
+	else {
+		irq_handle = alloc_bootmem(sizeof(irq_handler_t));
+		(unsigned long)irq_handle |= 0x80000000; /* bootmem allocater */
+	}
+
 	if (irq_handle == NULL)
 		return -ENOMEM;
 
@@ -177,8 +171,10 @@
 		       irq, irq_list[irq]->devname);
 	if (irq >= EXT_IRQ0 && irq <= EXT_IRQ5)
 		*(volatile unsigned char *)IER &= ~(1 << (irq - EXT_IRQ0));
-	kfree(irq_list[irq]);
-	irq_list[irq] = NULL;
+	if ((irq_list[irq] & 0x80000000) == 0) {
+		kfree(irq_list[irq]);
+		irq_list[irq] = NULL;
+	}
 }
 
 /*
@@ -244,3 +240,9 @@
 void init_irq_proc(void)
 {
 }
+
+static void __init enable_kmalloc(void)
+{
+	use_kmalloc = 1;
+}
+__initcall(enable_kmalloc);
diff -Nru linux-2.6.0-test3/arch/h8300/platform/h8s/edosk2674/crt0_ram.S linux-2.6.0-test3-h8300/arch/h8300/platform/h8s/edosk2674/crt0_ram.S
--- linux-2.6.0-test3/arch/h8300/platform/h8s/edosk2674/crt0_ram.S	2003-08-09 20:30:17.000000000 +0900
+++ linux-2.6.0-test3-h8300/arch/h8300/platform/h8s/edosk2674/crt0_ram.S	2003-08-22 00:42:22.000000000 +0900
@@ -37,7 +37,8 @@
 	/* CPU Reset entry */
 SYMBOL_NAME_LABEL(_start)
 	mov.l	#RAMEND,sp
-	ldc	#0x07,exr
+	ldc	#0x80,ccr
+	ldc	#0x00,exr
 
 	/* Peripheral Setup */
 	bclr	#4,@INTCR:8	/* interrupt mode 2 */
@@ -46,7 +47,7 @@
 	bset	#1,@ISCRL+1:16	/* IRQ0 Positive Edge */
 	bclr	#0,@ISCRL+1:16
 
-#if defined(CONFIG_BLK_DEV_BLKMEM)
+#if defined(CONFIG_MTD_UCLINUX)
 	/* move romfs image */
 	jsr	@__move_romfs	
 #endif
@@ -71,7 +72,7 @@
 	eepmov.w
 
 	/* uClinux kernel start */
-	ldc	#0x10,ccr	/* running kernel */
+	ldc	#0x90,ccr	/* running kernel */
 	mov.l	#SYMBOL_NAME(init_thread_union),sp
 	add.l	#0x2000,sp
 	jsr	@_start_kernel
diff -Nru linux-2.6.0-test3/arch/h8300/platform/h8s/edosk2674/timer.c linux-2.6.0-test3-h8300/arch/h8300/platform/h8s/edosk2674/timer.c
--- linux-2.6.0-test3/arch/h8300/platform/h8s/edosk2674/timer.c	2003-08-09 20:30:17.000000000 +0900
+++ linux-2.6.0-test3-h8300/arch/h8300/platform/h8s/edosk2674/timer.c	2003-08-22 00:42:22.000000000 +0900
@@ -26,10 +26,6 @@
 #define REGS(regs) __REGS(regs)
 #define __REGS(regs) #regs
 
-extern int request_irq_boot(unsigned int,
-		            irqreturn_t (*handler)(int, void *, struct pt_regs *),
-		            unsigned long, const char *, void *);
-
 int __init platform_timer_setup(irqreturn_t (*timer_int)(int, void *, struct pt_regs *))
 {
 	unsigned char mstpcrl;
@@ -38,7 +34,7 @@
 	outb(mstpcrl,MSTPCRL);
 	outb(H8300_TIMER_COUNT_DATA,_8TCORA1);
 	outb(0x00,_8TCSR1);
-	request_irq_boot(76,timer_int,0,"timer",0);
+	request_irq(76,timer_int,0,"timer",0);
 	outb(0x40|0x08|0x03,_8TCR1);
 	return 0;
 }
diff -Nru linux-2.6.0-test3/arch/h8300/platform/h8s/entry.S linux-2.6.0-test3-h8300/arch/h8300/platform/h8s/entry.S
--- linux-2.6.0-test3/arch/h8300/platform/h8s/entry.S	2003-08-09 20:30:17.000000000 +0900
+++ linux-2.6.0-test3-h8300/arch/h8300/platform/h8s/entry.S	2003-08-22 00:42:22.000000000 +0900
@@ -112,7 +112,7 @@
 	mov.l	er1,@(10:16,er0)
 
 	mov.l	@sp+,er1
-	add.l	#(LRET-LORIG),sp		/* remove LORIG - LRET */ 
+	add.l	#(LRET-LER1),sp			/* remove LORIG - LRET */ 
 	mov.l	sp,@SYMBOL_NAME(sw_ksp)
 	mov.l	er0,sp
 	bra	8f
@@ -252,6 +252,7 @@
 	btst	#TIF_NEED_RESCHED,r1l
 	bne	@SYMBOL_NAME(reschedule):16
 	mov.l	sp,er1
+	subs	#4,er1			/* adjust retpc */
 	mov.l	er2,er0
 	jsr	@SYMBOL_NAME(do_signal)
 3:	 
diff -Nru linux-2.6.0-test3/arch/h8300/platform/h8s/generic/crt0_ram.S linux-2.6.0-test3-h8300/arch/h8300/platform/h8s/generic/crt0_ram.S
--- linux-2.6.0-test3/arch/h8300/platform/h8s/generic/crt0_ram.S	2003-08-09 20:30:17.000000000 +0900
+++ linux-2.6.0-test3-h8300/arch/h8300/platform/h8s/generic/crt0_ram.S	2003-08-22 00:42:22.000000000 +0900
@@ -37,13 +37,14 @@
 	/* CPU Reset entry */
 SYMBOL_NAME_LABEL(_start)
 	mov.l	#RAMEND,sp
-	ldc	#0x07,exr
+	ldc	#0x80,ccr
+	ldc	#0x00,exr
 
 	/* Peripheral Setup */
 	bclr	#4,@INTCR:8	/* interrupt mode 2 */
 	bset	#5,@INTCR:8
 
-#if defined(CONFIG_BLK_DEV_BLKMEM)
+#if defined(CONFIG_MTD_UCLINUX)
 	/* move romfs image */
 	jsr	@__move_romfs	
 #endif
@@ -68,7 +69,7 @@
 	eepmov.w
 
 	/* uClinux kernel start */
-	ldc	#0x10,ccr	/* running kernel */
+	ldc	#0x90,ccr	/* running kernel */
 	mov.l	#SYMBOL_NAME(init_thread_union),sp
 	add.l	#0x2000,sp
 	jsr	@_start_kernel
diff -Nru linux-2.6.0-test3/arch/h8300/platform/h8s/generic/crt0_rom.S linux-2.6.0-test3-h8300/arch/h8300/platform/h8s/generic/crt0_rom.S
--- linux-2.6.0-test3/arch/h8300/platform/h8s/generic/crt0_rom.S	2003-08-09 20:30:17.000000000 +0900
+++ linux-2.6.0-test3-h8300/arch/h8300/platform/h8s/generic/crt0_rom.S	2003-08-22 00:42:22.000000000 +0900
@@ -33,36 +33,32 @@
 	
 	/* Peripheral Setup */
 	
-	/* .bss clear */
-	mov.l	#__sbss,er5
-	mov.l	er5,er6
-	inc.l	#1,er6
-	mov.l	#__ebss,er4
-	sub.l	er5,er4
-	sub.w	r0,r0
-	mov.b	r0l,@er5
-1:	
-	eepmov.w
-	dec.w	#1,e4
-	bpl	1b
-
 	/* copy .data */
 #if !defined(CONFIG_H8S_SIM)
 	mov.l	#__begin_data,er5
 	mov.l	#__sdata,er6
 	mov.l	#__edata,er4
-	sub.l	er6,er4		
+	sub.l	er6,er4
+	shlr.l	#2,er4
 1:	
-	eepmov.w	
-	dec.w	#1,e4
-	bpl	1b	
+	mov.l	@er5+,er0
+	mov.l	er0,@er6
+	adds	#4,er6
+	dec.l	#1,er4
+	bne	1b	
 #endif
 
-	/* copy kernel commandline */
-	mov.l	#COMMAND_START,er5
-	mov.l	#SYMBOL_NAME(_command_line),er6
-	mov.w	#512,r4
-	eepmov.w
+	/* .bss clear */
+	mov.l	#__sbss,er5
+	mov.l	#__ebss,er4
+	sub.l	er5,er4
+	shlr.l	#2,er4		
+	sub.l	er0,er0
+1:
+	mov.l	er0,@er5
+	adds	#4,er5
+	dec.l	#1,er4
+	bne	1b
 
 	/* linux kernel start */
 	ldc	#0x90,ccr	/* running kernel */
diff -Nru linux-2.6.0-test3/arch/h8300/platform/h8s/generic/rom.ld linux-2.6.0-test3-h8300/arch/h8300/platform/h8s/generic/rom.ld
--- linux-2.6.0-test3/arch/h8300/platform/h8s/generic/rom.ld	2003-08-09 20:30:17.000000000 +0900
+++ linux-2.6.0-test3-h8300/arch/h8300/platform/h8s/generic/rom.ld	2003-08-22 00:42:22.000000000 +0900
@@ -6,6 +6,6 @@
 	vector : ORIGIN = 0x000000, LENGTH = 0x000200
 	rom    : ORIGIN = 0x000200, LENGTH = 0x200000-0x000200
 	erom   : ORIGIN = 0x200000, LENGTH = 0
-	ram    : ORIGIN = 0x200000, LENGTH = 0x200000
-	eram   : ORIGIN = 0x400000, LENGTH = 0
+	ram    : ORIGIN = 0x200000, LENGTH = 0x400000
+	eram   : ORIGIN = 0x600000, LENGTH = 0
 	}
diff -Nru linux-2.6.0-test3/arch/h8300/platform/h8s/generic/timer.c linux-2.6.0-test3-h8300/arch/h8300/platform/h8s/generic/timer.c
--- linux-2.6.0-test3/arch/h8300/platform/h8s/generic/timer.c	2003-08-09 20:30:17.000000000 +0900
+++ linux-2.6.0-test3-h8300/arch/h8300/platform/h8s/generic/timer.c	2003-08-22 00:42:22.000000000 +0900
@@ -23,15 +23,11 @@
 #include <asm/irq.h>
 #include <asm/regs267x.h>
 
-extern int request_irq_boot(unsigned int,
-		            irqreturn_t (*handler)(int, void *, struct pt_regs *),
-		            unsigned long, const char *, void *);
-
 int platform_timer_setup(irqreturn_t (*timer_int)(int, void *, struct pt_regs *))
 {
 	outb(H8300_TIMER_COUNT_DATA,_8TCORA1);
 	outb(0x00,_8TCSR1);
-	request_irq_boot(76,timer_int,0,"timer",0);
+	request_irq(76,timer_int,0,"timer",0);
 	outb(0x40|0x08|0x03,_8TCR1);
 	return 0;
 }
diff -Nru linux-2.6.0-test3/arch/h8300/platform/h8s/ints.c linux-2.6.0-test3-h8300/arch/h8300/platform/h8s/ints.c
--- linux-2.6.0-test3/arch/h8300/platform/h8s/ints.c	2003-08-09 20:30:17.000000000 +0900
+++ linux-2.6.0-test3-h8300/arch/h8300/platform/h8s/ints.c	2003-08-22 00:42:22.000000000 +0900
@@ -91,6 +91,8 @@
 	{H8300_GPIO_P2,H8300_GPIO_B6},{H8300_GPIO_P2,H8300_GPIO_B7},
 };
 
+static int use_kmalloc;
+
 extern unsigned long *interrupt_redirect_table;
 
 static inline unsigned long *get_vector_address(void)
@@ -159,22 +161,6 @@
 #endif
 }
 
-/* special request_irq */
-/* used bootmem allocater */
-void __init request_irq_boot(unsigned int irq, 
-  	                     irqreturn_t (*handler)(int, void *, struct pt_regs *),
-                             unsigned long flags, const char *devname, void *dev_id)
-{
-	irq_handler_t *irq_handle;
-	irq_handle = alloc_bootmem(sizeof(irq_handler_t));
-	irq_handle->handler = handler;
-	irq_handle->flags   = flags;
-	irq_handle->count   = 0;
-	irq_handle->dev_id  = dev_id;
-	irq_handle->devname = devname;
-	irq_list[irq] = irq_handle;
-}
-
 int request_irq(unsigned int irq,
 		irqreturn_t (*handler)(int, void *, struct pt_regs *),
                 unsigned long flags, const char *devname, void *dev_id)
@@ -202,7 +188,14 @@
 		H8300_GPIO_DDR(port_no, bit_no, H8300_GPIO_INPUT);
 		*(volatile unsigned short *)ISR &= ~ptn; /* ISR clear */
 	}		
-	irq_handle = (irq_handler_t *)kmalloc(sizeof(irq_handler_t), GFP_ATOMIC);
+
+	if (use_kmalloc)
+		irq_handle = (irq_handler_t *)kmalloc(sizeof(irq_handler_t), GFP_ATOMIC);
+	else {
+		irq_handle = alloc_bootmem(sizeof(irq_handler_t));
+		(unsigned long)irq_handle |= 0x80000000; /* bootmem allocater */
+	}
+
 	if (irq_handle == NULL)
 		return -ENOMEM;
 
@@ -243,8 +236,10 @@
 		}
 		H8300_GPIO_FREE(port_no, bit_no);
 	}
-	kfree(irq_list[irq]);
-	irq_list[irq] = NULL;
+	if (((unsigned long)irq_list[irq] & 0x80000000) == 0) {
+		kfree(irq_list[irq]);
+		irq_list[irq] = NULL;
+	}
 }
 
 unsigned long probe_irq_on (void)
@@ -306,3 +301,10 @@
 void init_irq_proc(void)
 {
 }
+
+static int __init enable_kmalloc(void)
+{
+	use_kmalloc = 1;
+	return 0;
+}
+__initcall(enable_kmalloc);

                 reply	other threads:[~2003-08-22  5:07 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=m2wud68euj.wl%ysato@users.sourceforge.jp \
    --to=ysato@users.sourceforge.jp \
    --cc=linux-kernel@vger.kernel.org \
    --cc=torvalds@osdl.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.