diff options
Diffstat (limited to 'uClinux-2.4.20-uc1/arch')
-rw-r--r-- | uClinux-2.4.20-uc1/arch/armnommu/Makefile | 17 | ||||
-rw-r--r-- | uClinux-2.4.20-uc1/arch/armnommu/boot/Makefile | 5 | ||||
-rw-r--r-- | uClinux-2.4.20-uc1/arch/armnommu/boot/compressed/head.S | 2 | ||||
-rw-r--r-- | uClinux-2.4.20-uc1/arch/armnommu/config.in | 53 | ||||
-rw-r--r-- | uClinux-2.4.20-uc1/arch/armnommu/kernel/calls.S | 16 | ||||
-rw-r--r-- | uClinux-2.4.20-uc1/arch/armnommu/kernel/entry-armv.S | 15 | ||||
-rw-r--r-- | uClinux-2.4.20-uc1/arch/armnommu/kernel/head-armv.S | 38 | ||||
-rw-r--r-- | uClinux-2.4.20-uc1/arch/armnommu/kernel/irq.c | 38 | ||||
-rw-r--r-- | uClinux-2.4.20-uc1/arch/armnommu/kernel/setup.c | 6 | ||||
-rw-r--r-- | uClinux-2.4.20-uc1/arch/armnommu/mach-W90N745/Makefile | 21 | ||||
-rw-r--r-- | uClinux-2.4.20-uc1/arch/armnommu/mach-W90N745/arch.c | 24 | ||||
-rw-r--r-- | uClinux-2.4.20-uc1/arch/armnommu/mach-W90N745/irq.c | 39 | ||||
-rw-r--r-- | uClinux-2.4.20-uc1/arch/armnommu/mach-W90N745/time.c | 30 | ||||
-rw-r--r-- | uClinux-2.4.20-uc1/arch/armnommu/mm/init.c | 2 | ||||
-rw-r--r-- | uClinux-2.4.20-uc1/arch/armnommu/mm/proc-arm6,7.S | 22 | ||||
-rw-r--r-- | uClinux-2.4.20-uc1/arch/armnommu/tools/mach-types | 1 |
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 |