summaryrefslogtreecommitdiffstats
path: root/uClinux-2.4.20-uc1/arch/armnommu
diff options
context:
space:
mode:
Diffstat (limited to 'uClinux-2.4.20-uc1/arch/armnommu')
-rw-r--r--uClinux-2.4.20-uc1/arch/armnommu/Makefile17
-rw-r--r--uClinux-2.4.20-uc1/arch/armnommu/boot/Makefile5
-rw-r--r--uClinux-2.4.20-uc1/arch/armnommu/boot/compressed/head.S2
-rw-r--r--uClinux-2.4.20-uc1/arch/armnommu/config.in53
-rw-r--r--uClinux-2.4.20-uc1/arch/armnommu/kernel/calls.S16
-rw-r--r--uClinux-2.4.20-uc1/arch/armnommu/kernel/entry-armv.S15
-rw-r--r--uClinux-2.4.20-uc1/arch/armnommu/kernel/head-armv.S38
-rw-r--r--uClinux-2.4.20-uc1/arch/armnommu/kernel/irq.c38
-rw-r--r--uClinux-2.4.20-uc1/arch/armnommu/kernel/setup.c6
-rw-r--r--uClinux-2.4.20-uc1/arch/armnommu/mach-W90N745/Makefile21
-rw-r--r--uClinux-2.4.20-uc1/arch/armnommu/mach-W90N745/arch.c24
-rw-r--r--uClinux-2.4.20-uc1/arch/armnommu/mach-W90N745/irq.c39
-rw-r--r--uClinux-2.4.20-uc1/arch/armnommu/mach-W90N745/time.c30
-rw-r--r--uClinux-2.4.20-uc1/arch/armnommu/mm/init.c2
-rw-r--r--uClinux-2.4.20-uc1/arch/armnommu/mm/proc-arm6,7.S22
-rw-r--r--uClinux-2.4.20-uc1/arch/armnommu/tools/mach-types1
16 files changed, 324 insertions, 5 deletions
diff --git a/uClinux-2.4.20-uc1/arch/armnommu/Makefile b/uClinux-2.4.20-uc1/arch/armnommu/Makefile
index bafd221..92a7757 100644
--- a/uClinux-2.4.20-uc1/arch/armnommu/Makefile
+++ b/uClinux-2.4.20-uc1/arch/armnommu/Makefile
@@ -20,6 +20,14 @@ ifeq ($(CONFIG_DEBUG_INFO),y)
CFLAGS +=-g
endif
+ifeq ($(CONFIG_WINBOND_EVB),y)
+CFLAGS +=-D__WB_EVB__
+endif
+
+ifeq ($(CONFIG_WINBOND_PTB),y)
+CFLAGS +=-D__WB_POSTAX__
+endif
+
CFLAGS += -DNO_MM
AFLAGS += -DNO_MM
@@ -54,8 +62,8 @@ LINKFLAGS += -EB
LDFLAGS += -EB
endif
-CFLAGS += $(apcs-y) $(arch-y) $(tune-y) -mshort-load-bytes -msoft-float
-AFLAGS += $(apcs-y) $(proc-y) -msoft-float -mno-fpu
+CFLAGS += $(apcs-y) $(arch-y) $(tune-y) -mshort-load-bytes
+AFLAGS += $(apcs-y) $(proc-y) -mno-fpu
LIBGCC := $(shell $(CC) $(CFLAGS) --print-libgcc-file-name)
@@ -185,6 +193,11 @@ TEXTADDR = 0x00008000
MACHINE = snds100
endif
+ifeq ($(CONFIG_BOARD_W90N745),y)
+TEXTADDR = 0x00008000
+MACHINE = W90N745
+endif
+
ifeq ($(CONFIG_BOARD_EVS3C4530HEI),y)
TEXTADDR = 0x00020000
MACHINE = evS3C4530HEI
diff --git a/uClinux-2.4.20-uc1/arch/armnommu/boot/Makefile b/uClinux-2.4.20-uc1/arch/armnommu/boot/Makefile
index b202695..dd1fe5e 100644
--- a/uClinux-2.4.20-uc1/arch/armnommu/boot/Makefile
+++ b/uClinux-2.4.20-uc1/arch/armnommu/boot/Makefile
@@ -113,6 +113,11 @@ ZRELADDR = 0x00008000
ZTEXTADDR = 0x00000000
endif
+ifeq ($(CONFIG_BOARD_W90N745),y)
+ZRELADDR = 0x00008000
+ZTEXTADDR = 0x00000000
+endif
+
#
# If you don't define ZRELADDR above,
# then it defaults to ZTEXTADDR
diff --git a/uClinux-2.4.20-uc1/arch/armnommu/boot/compressed/head.S b/uClinux-2.4.20-uc1/arch/armnommu/boot/compressed/head.S
index e70906e..0a90491 100644
--- a/uClinux-2.4.20-uc1/arch/armnommu/boot/compressed/head.S
+++ b/uClinux-2.4.20-uc1/arch/armnommu/boot/compressed/head.S
@@ -10,7 +10,7 @@
#include <linux/config.h>
#include <linux/linkage.h>
-#ifdef CONFIG_BOARD_SNDS100
+#if defined(CONFIG_BOARD_SNDS100) || defined(CONFIG_BOARD_W90N745)
#include <asm/hardware.h>
#endif
diff --git a/uClinux-2.4.20-uc1/arch/armnommu/config.in b/uClinux-2.4.20-uc1/arch/armnommu/config.in
index 6decbd7..06b3690 100644
--- a/uClinux-2.4.20-uc1/arch/armnommu/config.in
+++ b/uClinux-2.4.20-uc1/arch/armnommu/config.in
@@ -15,6 +15,12 @@ define_bool MAGIC_ROM_PTR y
# End uclinux additions -------------------------------------------------------
+mainmenu_option next_comment
+comment 'Target board selection'
+choice 'is selected as target board' \
+ "EV_BOARD CONFIG_WINBOND_EVB\
+ POS-TAX_DEMO_BOARD CONFIG_WINBOND_PTB" EV_BOARD
+endmenu
#------------------------------------------------------------------------------
# C o d e m a t u r i t y
#------------------------------------------------------------------------------
@@ -47,7 +53,8 @@ choice 'ARM system type' \
Triscend-A7S CONFIG_ARCH_TA7S \
SWARM CONFIG_ARCH_SWARM \
Samsung CONFIG_ARCH_SAMSUNG \
- Atmel CONFIG_ARCH_ATMEL" TI-DSC21
+ Atmel CONFIG_ARCH_ATMEL \
+ Winbond CONFIG_ARCH_WINBOND" TI-DSC21
bool 'Generate big endian code' CONFIG_CPU_BIG_ENDIAN
@@ -172,6 +179,34 @@ if [ "$CONFIG_ARCH_ATMEL" = "y" ]; then
fi
fi
+if [ "$CONFIG_ARCH_WINBOND" = "y" ]; then
+choice 'Board Implementation' \
+ "WINBOND-W90N745 CONFIG_BOARD_W90N745" WINBOND-W90N745
+
+ if [ "$CONFIG_BOARD_W90N745" = "y" ]; then
+ define_string CONFIG_SPU_NAME "W90N745"
+ define_bool CONFIG_CPU_W90N745 y
+ define_bool CONFIG_CPU_ARM710 y
+ define_bool CONFIG_CPU_32v4 y
+ define_bool CONFIG_CPU_32 y
+ define_bool CONFIG_CPU_26 n
+ define_bool CONFIG_NO_PGT_CACHE y
+ define_bool CONFIG_CPU_WITH_CACHE y
+ define_bool CONFIG_CPU_WITH_MCR_INSTRUCTION n
+ define_int CONFIG_ARM_CLK 80000000
+ define_bool CONFIG_SERIAL_W90N745 y
+ if [ "$CONFIG_SET_MEM_PARAM" = "n" ]; then
+ define_hex DRAM_BASE 0x00000000
+ define_hex DRAM_SIZE 0x00800000
+ define_hex FLASH_MEM_BASE 0xFF000000
+ define_hex FLASH_SIZE 0x00200000
+ fi
+
+ hex 'ROMFS Base Address ' ROMFS_BASE 0x00700000
+ fi
+
+fi
+
if [ "$CONFIG_ARCH_NETARM" = "y" ]; then
define_bool CONFIG_CPU_ARM710 y
define_bool CONFIG_CPU_ARM7TDMI y
@@ -450,6 +485,22 @@ source drivers/char/Config.in
source drivers/usb/Config.in
source drivers/ieee1394/Config.in
source drivers/message/i2o/Config.in
+
+if [ "$CONFIG_BOARD_W90N745" = "y" ]; then
+source drivers/gpio/Config.in
+fi
+
+#------------------------------------------------------------------------------
+# S o u n d D e v i c e s
+#------------------------------------------------------------------------------
+mainmenu_option next_comment
+comment 'Sound support'
+tristate 'Sound support?' CONFIG_SOUND
+if [ "$CONFIG_SOUND" != "n" ]; then
+ source drivers/sound/Config.in
+fi
+endmenu
+
#------------------------------------------------------------------------------
# K e r n e l H a c k i n g
#------------------------------------------------------------------------------
diff --git a/uClinux-2.4.20-uc1/arch/armnommu/kernel/calls.S b/uClinux-2.4.20-uc1/arch/armnommu/kernel/calls.S
index ee1b74a..c769133 100644
--- a/uClinux-2.4.20-uc1/arch/armnommu/kernel/calls.S
+++ b/uClinux-2.4.20-uc1/arch/armnommu/kernel/calls.S
@@ -236,6 +236,22 @@ __syscall_start:
.long SYMBOL_NAME(sys_mincore)
/* 220 */ .long SYMBOL_NAME(sys_madvise)
.long SYMBOL_NAME(sys_fcntl64)
+ .long SYMBOL_NAME(sys_FindImage)
+ .long SYMBOL_NAME(sys_DelImage)
+ .long SYMBOL_NAME(sys_CorruptCheck)
+/* 225 */ .long SYMBOL_NAME(sys_ReadWinbondFlash)
+ .long SYMBOL_NAME(sys_WriteWinbondFlash)
+ .long SYMBOL_NAME(sys_WinbondFlashBlockSize)
+ .long SYMBOL_NAME(sys_WinbondFlashTotalSize)
+ .long SYMBOL_NAME(sys_WinbondFlashBase)
+
+#ifdef CONFIG_USB_WBUSBD
+/* 230 */
+ .long SYMBOL_NAME(sys_WinbondUSBRead)
+ .long SYMBOL_NAME(sys_WinbondUSBWrite)
+ .long SYMBOL_NAME(sys_WinbondUSBGetCBW)
+#endif
+
__syscall_end:
.rept NR_syscalls - (__syscall_end - __syscall_start) / 4
diff --git a/uClinux-2.4.20-uc1/arch/armnommu/kernel/entry-armv.S b/uClinux-2.4.20-uc1/arch/armnommu/kernel/entry-armv.S
index b7d1bd5..776792e 100644
--- a/uClinux-2.4.20-uc1/arch/armnommu/kernel/entry-armv.S
+++ b/uClinux-2.4.20-uc1/arch/armnommu/kernel/entry-armv.S
@@ -777,6 +777,21 @@ irq_prio_netarm:
.macro irq_prio_table
.endm
+#elif defined(CONFIG_CPU_W90N745)
+
+ .macro disable_fiq
+ .endm
+
+ .macro get_irqnr_and_base, irqnr, irqstat, base, tmp
+ ldr \base, =AIC_IPER
+ ldr \irqnr, [\base]
+ @mov \irqnr, \irqnr, lsr #2
+ teq \irqnr, #0x0
+ .endm
+
+ .macro irq_prio_table
+ .endm
+
#elif defined(CONFIG_CPU_S3C3410)
.macro disable_fiq
diff --git a/uClinux-2.4.20-uc1/arch/armnommu/kernel/head-armv.S b/uClinux-2.4.20-uc1/arch/armnommu/kernel/head-armv.S
index b297678..31a91f0 100644
--- a/uClinux-2.4.20-uc1/arch/armnommu/kernel/head-armv.S
+++ b/uClinux-2.4.20-uc1/arch/armnommu/kernel/head-armv.S
@@ -143,6 +143,8 @@ __entry:
mov r1, #MACH_TYPE_SNDS100
#elif defined (CONFIG_BOARD_SMDK40100)
mov r1, #MACH_TYPE_S3C3410
+#elif defined (CONFIG_BOARD_W90N745)
+ mov r1, #MACH_TYPE_W90N745
#endif
mov r0, #F_BIT | I_BIT | MODE_SVC @ make sure svc mode
@@ -199,6 +201,42 @@ LC0: .long __bss_start
.long init_task_union+8192
#endif
+#if defined(CONFIG_BOARD_W90N745)
+
+ adr r5, LC0
+ ldmia r5, {r5, r6, r8, r9, sp} @ Setup stack
+
+ /* Copy data sections to their new home. */
+
+
+ /* Clear BSS */
+ mov r4, #0
+1: cmp r5, r8
+ strcc r4, [r5],#4
+ bcc 1b
+
+ /* Pretend we know what our processor code is (for arm_id) */
+
+ ldr r2, W90N745_PROCESSOR_TYPE
+
+ str r2, [r6]
+ mov r2, #MACH_TYPE_W90N745
+ str r2, [r9]
+
+ mov fp, #0
+ b start_kernel
+
+LC0: .long __bss_start
+ .long processor_id
+ .long _end
+ .long __machine_arch_type
+ .long init_task_union+8192
+
+W90N745_PROCESSOR_TYPE:
+ .long 0x32103201
+#endif
+
+
#if defined(CONFIG_BOARD_SNDS100)
adr r5, LC0
diff --git a/uClinux-2.4.20-uc1/arch/armnommu/kernel/irq.c b/uClinux-2.4.20-uc1/arch/armnommu/kernel/irq.c
index 227cd8f..f686290 100644
--- a/uClinux-2.4.20-uc1/arch/armnommu/kernel/irq.c
+++ b/uClinux-2.4.20-uc1/arch/armnommu/kernel/irq.c
@@ -35,6 +35,8 @@
#include <asm/arch/irq.h> /* pick up fixup_irq definition */
+#include <linux/w83977.h>
+
/*
* Maximum IRQ count. Currently, this is arbitary. However, it should
* not be set too low to prevent false triggering. Conversely, if it
@@ -156,6 +158,10 @@ asmlinkage void do_IRQ(int irq, struct pt_regs * regs)
struct irqaction * action;
int cpu;
+#ifdef CONFIG_BOARD_W90N745
+ irq = irq >> 2;
+#endif
+
#ifdef CONFIG_BOARD_SNDS100
/*
* FIXME: This is not the best place to put this work around.
@@ -163,7 +169,9 @@ asmlinkage void do_IRQ(int irq, struct pt_regs * regs)
CLEAR_PEND_INT(irq);
#endif
+#ifndef CONFIG_BOARD_W90N745
irq = fixup_irq(irq);
+#endif
/*
* Some hardware gives randomly wrong interrupts. Rather
@@ -172,12 +180,21 @@ asmlinkage void do_IRQ(int irq, struct pt_regs * regs)
if (irq >= NR_IRQS)
goto bad_irq;
+#ifdef CONFIG_BOARD_W90N745
+ if (irq <= 0)
+ goto bad_irq;
+#endif
+
desc = irq_desc + irq;
spin_lock(&irq_controller_lock);
desc->mask_ack(irq);
spin_unlock(&irq_controller_lock);
+#ifdef CONFIG_BOARD_W90N745
+ irq = fixup_irq(irq);
+#endif
+
cpu = smp_processor_id();
irq_enter(cpu, irq);
kstat.irqs[cpu][irq]++;
@@ -223,6 +240,10 @@ asmlinkage void do_IRQ(int irq, struct pt_regs * regs)
irq_exit(cpu, irq);
+#ifdef CONFIG_BOARD_W90N745
+ DWORD_WRITE(AIC_EOSCR, 1);
+#endif
+
if (softirq_pending(cpu))
do_softirq();
return;
@@ -513,6 +534,10 @@ void __init init_irq_proc(void)
{
}
+#ifdef CONFIG_BOARD_W90N745
+extern void init_EBI(void);
+#endif
+
void __init init_IRQ(void)
{
extern void init_dma(void);
@@ -527,6 +552,19 @@ void __init init_IRQ(void)
irq_desc[irq].unmask = dummy_mask_unmask_irq;
}
+#ifdef CONFIG_BOARD_W90N745
+ CSR_WRITE(AIC_MDCR, 0x7FFFE); /* disable all interrupts */
+
+ CSR_WRITE(CAHCNF, 0x0);/*Close Cache*/
+ CSR_WRITE(CAHCON, 0x87);/*Flush Cache*/
+ while(CSR_READ(CAHCON)!=0) {}
+ CSR_WRITE(CAHCNF, 0x7);/*Open Cache*/
+#endif
+
init_arch_irq();
init_dma();
+
+#ifdef CONFIG_W83977
+ init_EBI();
+#endif
}
diff --git a/uClinux-2.4.20-uc1/arch/armnommu/kernel/setup.c b/uClinux-2.4.20-uc1/arch/armnommu/kernel/setup.c
index a269e85..05af4f1 100644
--- a/uClinux-2.4.20-uc1/arch/armnommu/kernel/setup.c
+++ b/uClinux-2.4.20-uc1/arch/armnommu/kernel/setup.c
@@ -35,6 +35,12 @@
//#define MEM_SIZE (8*1024*1024)
#define MEM_SIZE (END_MEM-PAGE_OFFSET) // FIXME
+#ifndef DRAM_SIZE
+#define MEM_SIZE (7*1024*1024)
+#else
+#define MEM_SIZE DRAM_SIZE
+#endif
+
#endif
#ifndef CONFIG_CMDLINE
diff --git a/uClinux-2.4.20-uc1/arch/armnommu/mach-W90N745/Makefile b/uClinux-2.4.20-uc1/arch/armnommu/mach-W90N745/Makefile
new file mode 100644
index 0000000..498b599
--- /dev/null
+++ b/uClinux-2.4.20-uc1/arch/armnommu/mach-W90N745/Makefile
@@ -0,0 +1,21 @@
+#
+# Makefile for the linux kernel.
+#
+# Note! Dependencies are done automagically by 'make dep', which also
+# removes any old dependencies. DON'T put your own dependencies here
+# unless it's something special (ie not a .c file).
+
+USE_STANDARD_AS_RULE := true
+
+O_TARGET := W90N745.o
+
+# Object file lists.
+
+obj-y := $(patsubst %.c, %.o, $(wildcard *.c))
+obj-m :=
+obj-n :=
+obj- :=
+
+export-objs :=
+
+include $(TOPDIR)/Rules.make
diff --git a/uClinux-2.4.20-uc1/arch/armnommu/mach-W90N745/arch.c b/uClinux-2.4.20-uc1/arch/armnommu/mach-W90N745/arch.c
new file mode 100644
index 0000000..815beb8
--- /dev/null
+++ b/uClinux-2.4.20-uc1/arch/armnommu/mach-W90N745/arch.c
@@ -0,0 +1,24 @@
+/*
+ * linux/arch/arm/mach-W90N745/arch.c
+ *
+ * Architecture specific fixups. This is where any
+ * parameters in the params struct are fixed up, or
+ * any additional architecture specific information
+ * is pulled from the params struct.
+ */
+#include <linux/tty.h>
+#include <linux/delay.h>
+#include <linux/pm.h>
+#include <linux/init.h>
+
+#include <asm/elf.h>
+#include <asm/setup.h>
+#include <asm/mach-types.h>
+#include <asm/mach/arch.h>
+
+extern void genarch_init_irq(void);
+
+MACHINE_START(W90N745, "W90N745")
+ MAINTAINER("Shirley yu")
+ INITIRQ(genarch_init_irq)
+MACHINE_END
diff --git a/uClinux-2.4.20-uc1/arch/armnommu/mach-W90N745/irq.c b/uClinux-2.4.20-uc1/arch/armnommu/mach-W90N745/irq.c
new file mode 100644
index 0000000..f8c34be
--- /dev/null
+++ b/uClinux-2.4.20-uc1/arch/armnommu/mach-W90N745/irq.c
@@ -0,0 +1,39 @@
+/*
+* linux/arch/armnommu/mach-W90N745/irq.c
+* 2003 clyu <clyu2@winbond.com.tw>
+*/
+#include <linux/init.h>
+
+#include <asm/mach/irq.h>
+#include <asm/hardware.h>
+#include <asm/io.h>
+#include <asm/irq.h>
+#include <asm/system.h>
+
+void W90N745_mask_irq(unsigned int irq)
+{
+ INT_DISABLE(irq);
+}
+
+void W90N745_unmask_irq(unsigned int irq)
+{
+ INT_ENABLE(irq);
+}
+
+void W90N745_mask_ack_irq(unsigned int irq)
+{
+ INT_DISABLE(irq);
+}
+
+void W90N745_int_init()
+{
+ //int i=0;
+ //IntPend = 0x1FFFFF;
+ CSR_WRITE(AIC_MDCR,0xFFFFFFFF);
+ CSR_WRITE(AIC_SCR9,0x41);
+ CSR_WRITE(AIC_SCR13,0x41);
+ //for(i=6;i<=18;i++)
+ // IntScr(i,0x41);
+ //IntMode = INT_MODE_IRQ;
+ //INT_ENABLE(INT_GLOBAL);
+}
diff --git a/uClinux-2.4.20-uc1/arch/armnommu/mach-W90N745/time.c b/uClinux-2.4.20-uc1/arch/armnommu/mach-W90N745/time.c
new file mode 100644
index 0000000..067085f
--- /dev/null
+++ b/uClinux-2.4.20-uc1/arch/armnommu/mach-W90N745/time.c
@@ -0,0 +1,30 @@
+/*
+ * time.c Timer functions for Winbond W90N745
+ */
+
+#include <linux/time.h>
+#include <linux/timex.h>
+#include <linux/types.h>
+#include <linux/sched.h>
+#include <asm/io.h>
+#include <asm/arch/hardware.h>
+#include <linux/interrupt.h>
+
+struct irqaction watchdog_irq = {
+ name: "watchdog",
+};
+
+unsigned long winbond_gettimeoffset (void)
+{
+ return 0;
+}
+
+void winbond_timer_interrupt(int irq, void *dev_id, struct pt_regs *regs)
+{
+ do_timer(regs);
+}
+
+void winbond_watchdog_interrupt(int irq, void *dev_id, struct pt_regs *regs)
+{
+ CSR_WRITE(WTCR, (CSR_READ(WTCR)&0xF7)|0x01);
+}
diff --git a/uClinux-2.4.20-uc1/arch/armnommu/mm/init.c b/uClinux-2.4.20-uc1/arch/armnommu/mm/init.c
index 87cf937..4d98862 100644
--- a/uClinux-2.4.20-uc1/arch/armnommu/mm/init.c
+++ b/uClinux-2.4.20-uc1/arch/armnommu/mm/init.c
@@ -368,7 +368,7 @@ static __init void reserve_node_zero(unsigned int bootmap_pfn, unsigned int boot
*/
if (machine_is_integrator() || machine_is_snds100() ||
- machine_is_evS3C4530HEI() )
+ machine_is_evS3C4530HEI() || machine_is_W90N745() )
reserve_bootmem_node(pgdat, 0, __pa(&_stext));
/*
diff --git a/uClinux-2.4.20-uc1/arch/armnommu/mm/proc-arm6,7.S b/uClinux-2.4.20-uc1/arch/armnommu/mm/proc-arm6,7.S
index 65b2eef..f411400 100644
--- a/uClinux-2.4.20-uc1/arch/armnommu/mm/proc-arm6,7.S
+++ b/uClinux-2.4.20-uc1/arch/armnommu/mm/proc-arm6,7.S
@@ -429,6 +429,10 @@ cpu_s3c4510b_name:
.asciz "S3C4510B"
cpu_s3c4530_name:
.asciz "S3C4530A01"
+cpu_W90N745_manu_name:
+ .asciz "Winbond"
+cpu_W90N745_name:
+ .asciz "W90N745"
.align
.section ".text.init", #alloc, #execinstr
@@ -631,6 +635,12 @@ cpu_s3c4530_info:
.long cpu_s3c4530_name
.size cpu_s3c4530_info, . - cpu_s3c4530_info
+ .type cpu_W90N745_info, #object
+cpu_W90N745_info:
+ .long cpu_W90N745_manu_name
+ .long cpu_W90N745_name
+ .size cpu_W90N745_info, . - cpu_W90N745_info
+
.type cpu_arm710_info, #object
cpu_arm710_info:
.long cpu_armvlsi_name
@@ -778,3 +788,15 @@ __s3c3410_proc_info:
.long arm7_processor_functions @ info
.size __s3c3410_proc_info, . - __s3c3410_proc_info
+ .type __W90N745_proc_info, #object
+__W90N745_proc_info:
+ .long 0x32100000 @ cpu_val
+ .long 0xffff0000 @ cpu_mask
+ .long 0x00000c1e @ __cpu_mmu_flags
+ b __arm7_setup @ __cpu_flush
+ .long cpu_arch_name @ arch_name
+ .long cpu_elf_name @ elf_name
+ .long HWCAP_SWP | HWCAP_26BIT @ elf_hwcap
+ .long cpu_W90N745_info @ info
+ .long arm7_processor_functions @ info
+ .size __W90N745_proc_info, . - __W90N745_proc_info
diff --git a/uClinux-2.4.20-uc1/arch/armnommu/tools/mach-types b/uClinux-2.4.20-uc1/arch/armnommu/tools/mach-types
index 7fd21ad..b9feae3 100644
--- a/uClinux-2.4.20-uc1/arch/armnommu/tools/mach-types
+++ b/uClinux-2.4.20-uc1/arch/armnommu/tools/mach-types
@@ -104,6 +104,7 @@ dsc21 ARCH_DSC21 DSC21 115
snds100 BOARD_SNDS100 SNDS100 90
evS3C4530HEI BOARD_EVS3C4530HEI EVS3C4530HEI 164
S3C3410X BOARD_SMDK40100 S3C3410 165
+W90N745 ARCH_WINBOND W90N745 181
ta7s ARCH_TA7S TA7S 334