Hi Po-Yu,

On 07/01/2009 02:13 PM, Po-Yu Chuang wrote:
> This patch adds support for A320 development board from Faraday. This board
> uses FA526 processor by default and has 512kB and 32MB NOR flash, 64M RAM.
> FA526 is an ARMv4 processor and uses the ARM920T source in this patch.

It's very interesting. Please find my recent post with patch for 
NAS4220. It has CS3516 SoC with the same(?) FA526 core.
Few comments inline below.


>
> Signed-off-by: Po-Yu Chuang<[email protected]>
> ---
>   MAINTAINERS                              |    4 +
>   MAKEALL                                  |    1 +
>   Makefile                                 |    7 +
>   board/faraday/a320/Makefile              |   51 +++++++
>   board/faraday/a320/a320.c                |   64 ++++++++
>   board/faraday/a320/config.mk             |   35 +++++
>   board/faraday/a320/lowlevel_init.S       |  191 ++++++++++++++++++++++++
>   cpu/arm920t/faraday/Makefile             |   46 ++++++
>   cpu/arm920t/faraday/ftsmc020.c           |   52 +++++++
>   cpu/arm920t/faraday/timer.c              |  194 ++++++++++++++++++++++++
>   include/asm-arm/arch-faraday/ftahbc020.h |   71 +++++++++
>   include/asm-arm/arch-faraday/ftpmu010.h  |  190 ++++++++++++++++++++++++
>   include/asm-arm/arch-faraday/ftsdmc020.h |  103 +++++++++++++
>   include/asm-arm/arch-faraday/ftsmc020.h  |   79 ++++++++++
>   include/asm-arm/arch-faraday/fttmr010.h  |   73 +++++++++
>   include/configs/a320.h                   |  239 
> ++++++++++++++++++++++++++++++
>   16 files changed, 1400 insertions(+), 0 deletions(-)
>   create mode 100644 board/faraday/a320/Makefile
>   create mode 100644 board/faraday/a320/a320.c
>   create mode 100644 board/faraday/a320/config.mk
>   create mode 100644 board/faraday/a320/lowlevel_init.S
>   create mode 100644 cpu/arm920t/faraday/Makefile
>   create mode 100644 cpu/arm920t/faraday/ftsmc020.c
>   create mode 100644 cpu/arm920t/faraday/timer.c
>   create mode 100644 include/asm-arm/arch-faraday/ftahbc020.h
>   create mode 100644 include/asm-arm/arch-faraday/ftpmu010.h
>   create mode 100644 include/asm-arm/arch-faraday/ftsdmc020.h
>   create mode 100644 include/asm-arm/arch-faraday/ftsmc020.h
>   create mode 100644 include/asm-arm/arch-faraday/fttmr010.h
>   create mode 100644 include/configs/a320.h
>
> diff --git a/MAINTAINERS b/MAINTAINERS
> index b0e370f..ed41b3a 100644
> --- a/MAINTAINERS
> +++ b/MAINTAINERS
> @@ -680,6 +680,10 @@ Sergey Lapin<[email protected]>
>
>       afeb9260        ARM926EJS (AT91SAM9260 SoC)
>
> +Po-Yu Chuang<[email protected]>
> +
> +     a320            FA526 (ARMv4/reuse arm920t source) faraday SoC
> +
>   -------------------------------------------------------------------------
>
>   Unknown / orphaned boards:
> diff --git a/MAKEALL b/MAKEALL
> index 027207d..530a253 100755
> --- a/MAKEALL
> +++ b/MAKEALL
> @@ -498,6 +498,7 @@ LIST_ARM7="               \
>   #########################################################################
>
>   LIST_ARM9="                 \
> +     a320                    \
>       ap920t                  \
>       ap922_XA10              \
>       ap926ejs                \
> diff --git a/Makefile b/Makefile
> index 0ae1d36..f99e9d4 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -2991,6 +2991,13 @@ B2_config      :       unconfig
>       @$(MKCONFIG) $(@:_config=) arm s3c44b0 B2 dave
>
>   #########################################################################
> +## Faraday A320 Systems
> +#########################################################################
> +
> +a320_config  :       unconfig
> +     @$(MKCONFIG) $(@:_config=) arm arm920t a320 faraday faraday
> +
> +#########################################################################
>   ## ARM720T Systems
>   #########################################################################
>
> diff --git a/board/faraday/a320/Makefile b/board/faraday/a320/Makefile
> new file mode 100644
> index 0000000..ef053c2
> --- /dev/null
> +++ b/board/faraday/a320/Makefile
> @@ -0,0 +1,51 @@
> +#
> +# (C) Copyright 2000-2006
> +# Wolfgang Denk, DENX Software Engineering, [email protected].
> +#
> +# See file CREDITS for list of people who contributed to this
> +# project.
> +#
> +# This program is free software; you can redistribute it and/or
> +# modify it under the terms of the GNU General Public License as
> +# published by the Free Software Foundation; either version 2 of
> +# the License, or (at your option) any later version.
> +#
> +# This program is distributed in the hope that it will be useful,
> +# but WITHOUT ANY WARRANTY; without even the implied warranty of
> +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> +# GNU General Public License for more details.
> +#
> +# You should have received a copy of the GNU General Public License
> +# along with this program; if not, write to the Free Software
> +# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
> +# MA 02111-1307 USA
> +#
> +
> +include $(TOPDIR)/config.mk
> +
> +LIB  = $(obj)lib$(BOARD).a
> +
> +COBJS        := a320.o
> +SOBJS        := lowlevel_init.o
> +
> +SRCS := $(SOBJS:.o=.S) $(COBJS:.o=.c)
> +OBJS := $(addprefix $(obj),$(COBJS))
> +SOBJS        := $(addprefix $(obj),$(SOBJS))
> +
> +$(LIB):      $(obj).depend $(OBJS) $(SOBJS)
> +     $(AR) $(ARFLAGS) $@ $(OBJS) $(SOBJS)
> +
> +clean:
> +     rm -f $(SOBJS) $(OBJS)
> +
> +distclean:   clean
> +     rm -f $(LIB) core *.bak $(obj).depend
> +
> +#########################################################################
> +
> +# defines $(obj).depend target
> +include $(SRCTREE)/rules.mk
> +
> +sinclude $(obj).depend
> +
> +#########################################################################
> diff --git a/board/faraday/a320/a320.c b/board/faraday/a320/a320.c
> new file mode 100644
> index 0000000..f9cca4f
> --- /dev/null
> +++ b/board/faraday/a320/a320.c
> @@ -0,0 +1,64 @@
> +/*
> + * (C) Copyright 2009 Faraday Technology
> + * Po-Yu Chuang<[email protected]>
> + *
> + * This program is free software; you can redistribute it and/or modify
> + * it under the terms of the GNU General Public License as published by
> + * the Free Software Foundation; either version 2 of the License, or
> + * (at your option) any later version.
> + *
> + * This program is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> + * GNU General Public License for more details.
> + *
> + * You should have received a copy of the GNU General Public License
> + * along with this program; if not, write to the Free Software
> + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
> + */
> +
> +#include<common.h>
> +#include<netdev.h>
> +#include<rtc.h>
> +#include<asm/io.h>
> +
> +#include<asm/arch/ftsmc020.h>
> +
> +DECLARE_GLOBAL_DATA_PTR;
> +
> +/*
> + * Miscellaneous platform dependent initialisations
> + */
> +
> +int board_init (void)
> +{
> +     gd->bd->bi_arch_number = MACH_TYPE_FARADAY;
> +
> +     ftsmc020_init ();       /* initialize Flash */
> +     rtc_reset ();           /* enable RTC */
> +     return 0;
> +}
> +
> +int dram_init (void)
> +{
> +     gd->bd->bi_dram[0].start = PHYS_SDRAM_1;
> +     gd->bd->bi_dram[0].size  = PHYS_SDRAM_1_SIZE;
> +
> +     return 0;
> +}
> +
> +int board_eth_init (bd_t * bd)
> +{
> +     return ftmac100_initialize (bd);
> +}
> +
> +ulong board_flash_get_legacy (ulong base, int banknum, flash_info_t * info)
> +{
> +     if (banknum == 0) {     /* non-CFI boot flash */
> +             info->portwidth = FLASH_CFI_8BIT;
> +             info->chipwidth = FLASH_CFI_BY8;
> +             info->interface = FLASH_CFI_X8;
> +             return 1;
> +     } else
> +             return 0;
> +}
> diff --git a/board/faraday/a320/config.mk b/board/faraday/a320/config.mk
> new file mode 100644
> index 0000000..7573bbd
> --- /dev/null
> +++ b/board/faraday/a320/config.mk
> @@ -0,0 +1,35 @@
> +#
> +# (C) Copyright 2009 Faraday Technology
> +# Po-Yu Chuang<[email protected]>
> +#
> +# This program is free software; you can redistribute it and/or
> +# modify it under the terms of the GNU General Public License as
> +# published by the Free Software Foundation; either version 2 of
> +# the License, or (at your option) any later version.
> +#
> +# This program is distributed in the hope that it will be useful,
> +# but WITHOUT ANY WARRANTY; without even the implied warranty of
> +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> +# GNU General Public License for more details.
> +#
> +# You should have received a copy of the GNU General Public License
> +# along with this program; if not, write to the Free Software
> +# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
> +# MA 02111-1307 USA
> +#
> +
> +# Faraday A320 board with FA526/FA626TE/ARM926EJ-S cpus
> +#
> +# see http://www.faraday-tech.com/ for more information
> +
> +# A320 has 1 bank of 64 MB DRAM (after remapped)
> +#
> +# 0000'0000 to 0400'0000
> +#
> +# Linux-Kernel is expected to be at 0000'8000, entry 0000'8000
> +#
> +# we load ourself to 03f8'0000
> +#
> +# download area is 0200'0000
> +
> +TEXT_BASE = 0x03f80000

where is your physical DRAM base?
Where does your system boot from? Does it execute code directly from 
Flash memory? I am asking, because CS351x does that very strange: some 
hardware(?) locig copies 2K from Flash base to internal SDRAM, mapped to 
0x0 address. After that it starts execute code from SDRAM.
This caused me to change cpu/arm920t/start.S and make linker script.
You didn't such modifications, so I understand, this is Gemini specific, 
not Faraday FA526 core?


Should be possibility to make something common for your SoC and Gemini 
processors?


> diff --git a/board/faraday/a320/lowlevel_init.S
> b/board/faraday/a320/lowlevel_init.S
> new file mode 100644
> index 0000000..2adb9ef
> --- /dev/null
> +++ b/board/faraday/a320/lowlevel_init.S
> @@ -0,0 +1,191 @@
> +/*
> + * (C) Copyright 2009 Faraday Technology
> + * Po-Yu Chuang<[email protected]>
> + *
> + * This program is free software; you can redistribute it and/or modify
> + * it under the terms of the GNU General Public License as published by
> + * the Free Software Foundation; either version 2 of the License, or
> + * (at your option) any later version.
> + *
> + * This program is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> + * GNU General Public License for more details.
> + *
> + * You should have received a copy of the GNU General Public License
> + * along with this program; if not, write to the Free Software
> + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
> + */
> +
> +#include<config.h>
> +#include<version.h>
> +
> +#include<asm/macro.h>
> +#include<asm/arch/ftahbc020.h>
> +#include<asm/arch/ftsdmc020.h>
> +
> +/*
> + * Memory Mapping
> + */
> +#define ROM_DEFAULT_BASE     0x00000000
> +#define SDRAM_DEFAULT_BASE   0x10000000
> +#define SDRAM_REMAPPED_BASE  PHYS_SDRAM_1    /* remap location */
> +
> +/*
> + * parameters for the SDRAM controller
> + */
> +#define TP0_A                CONFIG_SYS_SDMC_BASE + FTSDMC020_OFFSET_TP0
> +#define TP1_A                CONFIG_SYS_SDMC_BASE + FTSDMC020_OFFSET_TP1
> +#define CR_A         CONFIG_SYS_SDMC_BASE + FTSDMC020_OFFSET_CR
> +#define B0_BSR_A     CONFIG_SYS_SDMC_BASE + FTSDMC020_OFFSET_BANK0_BSR
> +#define ACR_A                CONFIG_SYS_SDMC_BASE + FTSDMC020_OFFSET_ACR
> +
> +#define TP0_D                CONFIG_SYS_FTSDMC020_TP0
> +#define TP1_D                CONFIG_SYS_FTSDMC020_TP1
> +#define CR_D1                FTSDMC020_CR_IPREC
> +#define CR_D2                FTSDMC020_CR_ISMR
> +#define CR_D3                FTSDMC020_CR_IREF
> +
> +#define B0_BSR_D1    CONFIG_SYS_FTSDMC020_BANK0_BSR | \
> +                     FTSDMC020_BANK_BASE(SDRAM_DEFAULT_BASE)
> +#define B0_BSR_D2    CONFIG_SYS_FTSDMC020_BANK0_BSR | \
> +                     FTSDMC020_BANK_BASE(SDRAM_REMAPPED_BASE)
> +#define ACR_D                FTSDMC020_ACR_TOC(0x18)
> +
> +/*
> + * numeric 7 segment display
> + */
> +.macro       led, num
> +     write32 CONFIG_SYS_DEBUG_LED, \num
> +.endm
> +
> +/*
> + * Waiting for SDRAM to set up
> + */
> +.macro       wait_sdram
> +     ldr     r0, =CONFIG_SYS_SDMC_BASE
> +1:
> +     ldr     r1, [r0, #FTSDMC020_OFFSET_CR]
> +     cmp     r1, #0
> +     bne     1b
> +.endm
> +
> +.global reset_cpu
> +reset_cpu:
> +     b       reset_cpu
> +
> +.globl lowlevel_init
> +lowlevel_init:
> +     mov     r11, lr
> +
> +     led     0x0
> +
> +     /* if REMAP bit is set ->  memory had been initialzed */
> +
> +     ldr     r0, =CONFIG_SYS_AHBC_BASE
> +     ldr     r1, [r0, #FTAHBC020_OFFSET_ICR]
> +     tst     r1, #FTAHBC020_ICR_REMAP                @ test REMAP bit
> +     bne     skip_remap
> +
> +     led     0x1
> +
> +     bl      init_sdmc
> +
> +     led     0x2
> +
> +     /*
> +      * copy U-Boot to RAM
> +      */
> +copy_code:
> +     ldr     r0, =ROM_DEFAULT_BASE   /* r0<- source address     */
> +     ldr     r1, =SDRAM_DEFAULT_BASE /* r1<- target address     */
> +
> +     ldr     r2, .LC5
> +     ldr     r3, .LC6
> +     sub     r2, r3, r2              /* r2<- size of armboot            */
> +     add     r2, r0, r2              /* r2<- source end address         */
> +
> +     led     0x3
> +
> +copy_loop:
> +     ldmia   r0!, {r3-r10}           /* copy from source address [r0]    */
> +     stmia   r1!, {r3-r10}           /* copy to   target address [r1]    */
> +     cmp     r0, r2                  /* until source end addreee [r2]    */
> +     ble     copy_loop
> +
> +     led     0x4

do you really need to repeat reallocation? it is done in start.S...

> +
> +     bl      remap
> +
> +skip_remap:
> +     led     0x5
> +
> +     /* everything is fine now */
> +     mov     lr, r11
> +     mov     pc, lr
> +
> +.LC5:
> +     .word   _start
> +.LC6:
> +     .word   __bss_start
> +
> +/*
> + * memory initialization
> + */
> +init_sdmc:
> +     led     0x10
> +
> +     /* set SDRAM register */
> +
> +     write32 TP0_A, TP0_D
> +     led     0x11
> +
> +     write32 TP1_A, TP1_D
> +     led     0x12
> +
> +     /* set to precharge */
> +     write32 CR_A, CR_D1
> +     led     0x13
> +
> +     wait_sdram
> +     led     0x14
> +
> +     /* set mode register */
> +     write32 CR_A, CR_D2
> +     led     0x15
> +
> +     wait_sdram
> +     led     0x16
> +
> +     /* set to refresh */
> +     write32 CR_A, CR_D3
> +     led     0x17
> +
> +     wait_sdram
> +     led     0x18
> +
> +     write32 B0_BSR_A, B0_BSR_D1
> +     led     0x19
> +
> +     write32 ACR_A, ACR_D
> +     led     0x1a
> +
> +     mov     pc, lr
> +
> +/*
> + * This code will remap the memory ROM and SDRAM
> + * ROM will be placed on 0x80000000 SDRAM will jump to 0x0
> + */

why are you doing this remap?

> +remap:
> +     ldr     r0, =CONFIG_SYS_SDMC_BASE
> +
> +     /* first adjust sdram */
> +     write32 B0_BSR_A, B0_BSR_D2
> +
> +     /* then remap */
> +     ldr     r3, =CONFIG_SYS_AHBC_BASE
> +     ldr     r4, [r3, #FTAHBC020_OFFSET_ICR]
> +     orr     r4, r4, #FTAHBC020_ICR_REMAP            @ Set REMAP bit
> +     str     r4, [r3, #FTAHBC020_OFFSET_ICR]
> +
> +     mov     pc, lr
> diff --git a/cpu/arm920t/faraday/Makefile b/cpu/arm920t/faraday/Makefile
> new file mode 100644
> index 0000000..b879d87
> --- /dev/null
> +++ b/cpu/arm920t/faraday/Makefile
> @@ -0,0 +1,46 @@
> +#
> +# (C) Copyright 2000-2006
> +# Wolfgang Denk, DENX Software Engineering, [email protected].
> +#
> +# See file CREDITS for list of people who contributed to this
> +# project.
> +#
> +# This program is free software; you can redistribute it and/or
> +# modify it under the terms of the GNU General Public License as
> +# published by the Free Software Foundation; either version 2 of
> +# the License, or (at your option) any later version.
> +#
> +# This program is distributed in the hope that it will be useful,
> +# but WITHOUT ANY WARRANTY; without even the implied warranty of
> +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> +# GNU General Public License for more details.
> +#
> +# You should have received a copy of the GNU General Public License
> +# along with this program; if not, write to the Free Software
> +# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
> +# MA 02111-1307 USA
> +#
> +
> +include $(TOPDIR)/config.mk
> +
> +LIB  = $(obj)lib$(SOC).a
> +
> +COBJS        += timer.o
> +COBJS        += ftsmc020.o
> +
> +SRCS := $(SOBJS:.o=.S) $(COBJS:.o=.c)
> +OBJS := $(addprefix $(obj),$(SOBJS) $(COBJS))
> +
> +all: $(obj).depend $(LIB)
> +
> +$(LIB):      $(OBJS)
> +     $(AR) $(ARFLAGS) $@ $(OBJS)
> +
> +#########################################################################
> +
> +# defines $(obj).depend target
> +include $(SRCTREE)/rules.mk
> +
> +sinclude $(obj).depend
> +
> +#########################################################################
> diff --git a/cpu/arm920t/faraday/ftsmc020.c b/cpu/arm920t/faraday/ftsmc020.c

I think this should go to drivers/net

> new file mode 100644
> index 0000000..cc51cf4
> --- /dev/null
> +++ b/cpu/arm920t/faraday/ftsmc020.c
> @@ -0,0 +1,52 @@
> +/*
> + * (C) Copyright 2009 Faraday Technology
> + * Po-Yu Chuang<[email protected]>
> + *
> + * This program is free software; you can redistribute it and/or modify
> + * it under the terms of the GNU General Public License as published by
> + * the Free Software Foundation; either version 2 of the License, or
> + * (at your option) any later version.
> + *
> + * This program is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> + * GNU General Public License for more details.
> + *
> + * You should have received a copy of the GNU General Public License
> + * along with this program; if not, write to the Free Software
> + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
> + */
> +
> +#include<config.h>
> +#include<common.h>
> +#include<asm/io.h>
> +#include<asm/arch/ftsmc020.h>
> +
> +struct ftsmc020_config {
> +     unsigned int    config;
> +     unsigned int    timing;
> +};
> +
> +static struct ftsmc020_config config[] = CONFIG_SYS_FTSMC020_CONFIGS;
> +
> +static volatile struct ftsmc020 *smc = (struct ftsmc020 
> *)CONFIG_SYS_SMC_BASE;
> +
> +static void ftsmc020_setup_bank (unsigned int bank, struct
> ftsmc020_config *cfg)
> +{
> +     if (bank>  3) {
> +             printf ("bank # %u invalid\n", bank);
> +             return;
> +     }
> +
> +     writel (cfg->config,&smc->bank[bank].cr);
> +     writel (cfg->timing,&smc->bank[bank].tpr);
> +}
> +
> +void ftsmc020_init (void)
> +{
> +     int i;
> +
> +     for (i = 0; i<  ARRAY_SIZE (config); i++) {
> +             ftsmc020_setup_bank (i,&config[i]);
> +     }
> +}
> diff --git a/cpu/arm920t/faraday/timer.c b/cpu/arm920t/faraday/timer.c
> new file mode 100644
> index 0000000..7762012
> --- /dev/null
> +++ b/cpu/arm920t/faraday/timer.c
> @@ -0,0 +1,194 @@
> +/*
> + * (C) Copyright 2009 Faraday Technology
> + * Po-Yu Chuang<[email protected]>
> + *
> + * This program is free software; you can redistribute it and/or modify
> + * it under the terms of the GNU General Public License as published by
> + * the Free Software Foundation; either version 2 of the License, or
> + * (at your option) any later version.
> + *
> + * This program is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> + * GNU General Public License for more details.
> + *
> + * You should have received a copy of the GNU General Public License
> + * along with this program; if not, write to the Free Software
> + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
> + */
> +
> +#undef DEBUG
> +
> +#include<common.h>
> +#include<asm/io.h>
> +#include<asm/arch/ftpmu010.h>
> +#include<asm/arch/fttmr010.h>
> +
> +static ulong timestamp;
> +static ulong lastdec;
> +
> +static volatile struct fttmr010 *tmr = (struct fttmr010 
> *)CONFIG_SYS_TIMERBASE;
> +static volatile struct ftpmu010 *pmu = (struct ftpmu010
> *)CONFIG_SYS_FTPMU_BASE;
> +
> +#define TIMER_CLOCK  32768
> +#define TIMER_LOAD_VAL       0xffffffff
> +
> +int timer_init (void)
> +{
> +     unsigned int oscc;
> +     unsigned int cr;
> +
> +     debug ("%s()\n", __func__);
> +
> +     /* disable timers */
> +     writel (0,&tmr->cr);
> +
> +     /*
> +      * use 32768Hz oscillator for RTC, WDT, TIMER
> +      */
> +
> +     /* enable the 32768Hz oscillator */
> +     oscc = readl (&pmu->OSCC);
> +     oscc&= ~(FTPMU010_OSCC_OSCL_OFF | FTPMU010_OSCC_OSCL_TRI);
> +     writel (oscc,&pmu->OSCC);
> +
> +     /* wait until ready */
> +     while (!(readl (&pmu->OSCC)&  FTPMU010_OSCC_OSCL_STABLE)) ;
> +
> +     /* select 32768Hz oscillator */
> +     oscc = readl (&pmu->OSCC);
> +     oscc |= FTPMU010_RTCLSEL;
> +     writel (oscc,&pmu->OSCC);
> +
> +     /* setup timer */
> +     writel (TIMER_LOAD_VAL,&tmr->timer3_load);
> +     writel (TIMER_LOAD_VAL,&tmr->timer3_counter);
> +     writel (0,&tmr->timer3_match1);
> +     writel (0,&tmr->timer3_match2);
> +
> +     /* we don't want timer to issue interrupts */
> +     writel (FTTMR010_TM3_MATCH1 |
> +             FTTMR010_TM3_MATCH2 |
> +             FTTMR010_TM3_OVERFLOW,
> +             &tmr->interrupt_mask);
> +
> +     cr = readl (&tmr->cr);
> +     cr |= FTTMR010_TM3_CLOCK;       /* use external clock */
> +     cr |= FTTMR010_TM3_ENABLE;
> +     writel (cr,&tmr->cr);
> +
> +     /* init the timestamp and lastdec value */
> +     reset_timer_masked ();
> +
> +     return 0;
> +}
> +
> +/*
> + * timer without interrupts
> + */
> +
> +/*
> + * reset time
> + */
> +void reset_timer_masked (void)
> +{
> +     /* capure current decrementer value time */
> +     lastdec = readl (&tmr->timer3_counter) / (TIMER_CLOCK / CONFIG_SYS_HZ);
> +     timestamp = 0;          /* start "advancing" time stamp from 0 */
> +
> +     debug ("%s(): lastdec = %lx\n", __func__, lastdec);
> +}
> +
> +void reset_timer (void)
> +{
> +     debug ("%s()\n", __func__);
> +     reset_timer_masked ();
> +}
> +
> +/*
> + * return timer ticks
> + */
> +ulong get_timer_masked (void)
> +{
> +     /* current tick value */
> +     ulong now = readl (&tmr->timer3_counter) / (TIMER_CLOCK / 
> CONFIG_SYS_HZ);
> +
> +     debug ("%s(): now = %lx, lastdec = %lx\n", __func__, now, lastdec);
> +
> +     if (lastdec>= now) {
> +             /*
> +              * normal mode (non roll)
> +              * move stamp fordward with absoulte diff ticks
> +              */
> +             timestamp += lastdec - now;
> +     } else {
> +             /*
> +              * we have overflow of the count down timer
> +              *
> +              * nts = ts + ld + (TLV - now)
> +              * ts=old stamp, ld=time that passed before passing through -1
> +              * (TLV-now) amount of time after passing though -1
> +              * nts = new "advancing time stamp"...it could also roll and
> +              * cause problems.
> +              */
> +             timestamp += lastdec + TIMER_LOAD_VAL - now;
> +     }
> +
> +     lastdec = now;
> +
> +     debug ("%s() returns %lx\n", __func__, timestamp);
> +
> +     return timestamp;
> +}
> +
> +/*
> + * return difference between timer ticks and base
> + */
> +ulong get_timer (ulong base)
> +{
> +     debug ("%s(%lx)\n", __func__, base);
> +     return get_timer_masked () - base;
> +}
> +
> +void set_timer (ulong t)
> +{
> +     debug ("%s(%lx)\n", __func__, t);
> +     timestamp = t;
> +}
> +
> +/* delay x useconds AND perserve advance timstamp value */
> +void udelay (unsigned long usec)
> +{
> +     long tmo = usec * (TIMER_CLOCK / 1000) / 1000;
> +     unsigned long now, last = readl(&tmr->timer3_counter);
> +
> +     debug ("%s(%lu)\n", __func__, usec);
> +     while (tmo>  0) {
> +             now = readl(&tmr->timer3_counter);
> +             if (now>  last) /* count down timer overflow */

please check your patch with checkpatch.pl script.
It would warn you about such code style errors.

> +                     tmo -= TIMER_LOAD_VAL + last - now;
> +             else
> +                     tmo -= last - now;
> +             last = now;
> +     }
> +}
> +
> +/*
> + * This function is derived from PowerPC code (read timebase as long long).
> + * On ARM it just returns the timer value.
> + */
> +unsigned long long get_ticks (void)
> +{
> +     debug ("%s()\n", __func__);
> +     return get_timer (0);
> +}
> +
> +/*
> + * This function is derived from PowerPC code (timebase clock frequency).
> + * On ARM it returns the number of timer ticks per second.
> + */
> +ulong get_tbclk (void)
> +{
> +     debug ("%s()\n", __func__);
> +     return CONFIG_SYS_HZ;
> +}
> diff --git a/include/asm-arm/arch-faraday/ftahbc020.h
> b/include/asm-arm/arch-faraday/ftahbc020.h
> new file mode 100644
> index 0000000..c2e039e
> --- /dev/null
> +++ b/include/asm-arm/arch-faraday/ftahbc020.h
> @@ -0,0 +1,71 @@
> +/*
> + * (C) Copyright 2009 Faraday Technology
> + * Po-Yu Chuang<[email protected]>
> + *
> + * This program is free software; you can redistribute it and/or modify
> + * it under the terms of the GNU General Public License as published by
> + * the Free Software Foundation; either version 2 of the License, or
> + * (at your option) any later version.
> + *
> + * This program is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> + * GNU General Public License for more details.
> + *
> + * You should have received a copy of the GNU General Public License
> + * along with this program; if not, write to the Free Software
> + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
> + */
> +
> +/*
> + * AHB Controller
> + */
> +#ifndef __FTAHBC020_H
> +#define __FTAHBC020_H
> +
> +#define FTAHBC020_OFFSET_SLAVE0_BSR  0x00
> +#define FTAHBC020_OFFSET_SLAVE1_BSR  0x04
> +#define FTAHBC020_OFFSET_SLAVE2_BSR  0x08
> +#define FTAHBC020_OFFSET_SLAVE3_BSR  0x0C
> +#define FTAHBC020_OFFSET_SLAVE4_BSR  0x10
> +#define FTAHBC020_OFFSET_SLAVE5_BSR  0x14
> +#define FTAHBC020_OFFSET_SLAVE6_BSR  0x18
> +#define FTAHBC020_OFFSET_SLAVE7_BSR  0x1C
> +#define FTAHBC020_OFFSET_SLAVE9_BSR  0x24
> +#define FTAHBC020_OFFSET_SLAVE12_BSR 0x30
> +#define FTAHBC020_OFFSET_SLAVE13_BSR 0x34
> +#define FTAHBC020_OFFSET_SLAVE14_BSR 0x38
> +#define FTAHBC020_OFFSET_SLAVE15_BSR 0x3C
> +#define FTAHBC020_OFFSET_SLAVE17_BSR 0x44
> +#define FTAHBC020_OFFSET_SLAVE18_BSR 0x48
> +#define FTAHBC020_OFFSET_SLAVE19_BSR 0x4C
> +#define FTAHBC020_OFFSET_SLAVE21_BSR 0x54
> +#define FTAHBC020_OFFSET_SLAVE22_BSR 0x58
> +#define FTAHBC020_OFFSET_PCR         0x80
> +#define FTAHBC020_OFFSET_TCR         0x84
> +#define FTAHBC020_OFFSET_ICR         0x88
> +
> +/*
> + * AHB Slave n Base/Size Register
> + */
> +#define FTAHBC020_BSR_BASE(x)        ((x)&  0xfff00000)
> +
> +#define FTAHBC020_BSR_SIZE_1M        (0x0<<  16)
> +#define FTAHBC020_BSR_SIZE_2M        (0x1<<  16)
> +#define FTAHBC020_BSR_SIZE_4M        (0x2<<  16)
> +#define FTAHBC020_BSR_SIZE_8M        (0x3<<  16)
> +#define FTAHBC020_BSR_SIZE_16M       (0x4<<  16)
> +#define FTAHBC020_BSR_SIZE_32M       (0x5<<  16)
> +#define FTAHBC020_BSR_SIZE_64M       (0x6<<  16)
> +#define FTAHBC020_BSR_SIZE_128M      (0x7<<  16)
> +#define FTAHBC020_BSR_SIZE_256M      (0x8<<  16)
> +#define FTAHBC020_BSR_SIZE_512M      (0x9<<  16)
> +#define FTAHBC020_BSR_SIZE_1G        (0xa<<  16)
> +#define FTAHBC020_BSR_SIZE_2G        (0xb<<  16)
> +
> +/*
> + * AHB Interrupt Control Register
> + */
> +#define FTAHBC020_ICR_REMAP  (1<<  0)
> +
> +#endif       /* __FTAHBC020_H */
> diff --git a/include/asm-arm/arch-faraday/ftpmu010.h
> b/include/asm-arm/arch-faraday/ftpmu010.h
> new file mode 100644
> index 0000000..e365af5
> --- /dev/null
> +++ b/include/asm-arm/arch-faraday/ftpmu010.h
> @@ -0,0 +1,190 @@
> +/*
> + * (C) Copyright 2009 Faraday Technology
> + * Po-Yu Chuang<[email protected]>
> + *
> + * This program is free software; you can redistribute it and/or modify
> + * it under the terms of the GNU General Public License as published by
> + * the Free Software Foundation; either version 2 of the License, or
> + * (at your option) any later version.
> + *
> + * This program is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> + * GNU General Public License for more details.
> + *
> + * You should have received a copy of the GNU General Public License
> + * along with this program; if not, write to the Free Software
> + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
> + */
> +
> +/*
> + * Power Management Unit
> + */
> +#ifndef __FTPMU010_H
> +#define __FTPMU010_H
> +
> +#define FTPMU010_OFFSET_IDNMBR0              0x00
> +#define FTPMU010_OFFSET_OSCC         0x08
> +#define FTPMU010_OFFSET_PMODE                0x0C
> +#define FTPMU010_OFFSET_PMCR         0x10
> +#define FTPMU010_OFFSET_PED          0x14
> +#define FTPMU010_OFFSET_PEDSR                0x18
> +#define FTPMU010_OFFSET_PMSR         0x20
> +#define FTPMU010_OFFSET_PGSR         0x24
> +#define FTPMU010_OFFSET_MFPSR                0x28
> +#define FTPMU010_OFFSET_MISC         0x2C
> +#define FTPMU010_OFFSET_PDLLCR0              0x30
> +#define FTPMU010_OFFSET_PDLLCR1              0x34
> +#define FTPMU010_OFFSET_AHBMCLKOFF   0x38
> +#define FTPMU010_OFFSET_APBMCLKOFF   0x3C
> +#define FTPMU010_OFFSET_DCSRCR0              0x40
> +#define FTPMU010_OFFSET_DCSRCR1              0x44
> +#define FTPMU010_OFFSET_DCSRCR2              0x48
> +#define FTPMU010_OFFSET_SDRAMHTC     0x4C
> +#define FTPMU010_OFFSET_PSPR0                0x50
> +#define FTPMU010_OFFSET_PSPR1                0x54
> +#define FTPMU010_OFFSET_PSPR2                0x58
> +#define FTPMU010_OFFSET_PSPR3                0x5C
> +#define FTPMU010_OFFSET_PSPR4                0x60
> +#define FTPMU010_OFFSET_PSPR5                0x64
> +#define FTPMU010_OFFSET_PSPR6                0x68
> +#define FTPMU010_OFFSET_PSPR7                0x6C
> +#define FTPMU010_OFFSET_PSPR8                0x70
> +#define FTPMU010_OFFSET_PSPR9                0x74
> +#define FTPMU010_OFFSET_PSPR10               0x78
> +#define FTPMU010_OFFSET_PSPR11               0x7C
> +#define FTPMU010_OFFSET_PSPR12               0x80
> +#define FTPMU010_OFFSET_PSPR13               0x84
> +#define FTPMU010_OFFSET_PSPR14               0x88
> +#define FTPMU010_OFFSET_PSPR15               0x8C
> +#define FTPMU010_OFFSET_AHBDMA_RACCS 0x90
> +#define FTPMU010_OFFSET_JSS          0x9C
> +#define FTPMU010_OFFSET_CFC_RACC     0xA0
> +#define FTPMU010_OFFSET_SSP1_RACC    0xA4
> +#define FTPMU010_OFFSET_UART1TX_RACC 0xA8
> +#define FTPMU010_OFFSET_UART1RX_RACC 0xAC
> +#define FTPMU010_OFFSET_UART2TX_RACC 0xB0
> +#define FTPMU010_OFFSET_UART2RX_RACC 0xB4
> +#define FTPMU010_OFFSET_SDC_RACC     0xB8
> +#define FTPMU010_OFFSET_I2SAC97_RACC 0xBC
> +#define FTPMU010_OFFSET_IRDATX_RACC  0xC0
> +#define FTPMU010_OFFSET_USBD_RACC    0xC8
> +#define FTPMU010_OFFSET_IRDARX_RACC  0xCC
> +#define FTPMU010_OFFSET_IRDA_RACC    0xD0
> +#define FTPMU010_OFFSET_ED0_RACC     0xD4
> +#define FTPMU010_OFFSET_ED1_RACC     0xD8
> +
> +struct ftpmu010 {
> +     unsigned int    IDNMBR0;        /* 0x00 */
> +     unsigned int    reserved0;      /* 0x04 */
> +     unsigned int    OSCC;           /* 0x08 */
> +     unsigned int    PMODE;          /* 0x0C */
> +     unsigned int    PMCR;           /* 0x10 */
> +     unsigned int    PED;            /* 0x14 */
> +     unsigned int    PEDSR;          /* 0x18 */
> +     unsigned int    reserved1;      /* 0x1C */
> +     unsigned int    PMSR;           /* 0x20 */
> +     unsigned int    PGSR;           /* 0x24 */
> +     unsigned int    MFPSR;          /* 0x28 */
> +     unsigned int    MISC;           /* 0x2C */
> +     unsigned int    PDLLCR0;        /* 0x30 */
> +     unsigned int    PDLLCR1;        /* 0x34 */
> +     unsigned int    AHBMCLKOFF;     /* 0x38 */
> +     unsigned int    APBMCLKOFF;     /* 0x3C */
> +     unsigned int    DCSRCR0;        /* 0x40 */
> +     unsigned int    DCSRCR1;        /* 0x44 */
> +     unsigned int    DCSRCR2;        /* 0x48 */
> +     unsigned int    SDRAMHTC;       /* 0x4C */
> +     unsigned int    PSPR0;          /* 0x50 */
> +     unsigned int    PSPR1;          /* 0x54 */
> +     unsigned int    PSPR2;          /* 0x58 */
> +     unsigned int    PSPR3;          /* 0x5C */
> +     unsigned int    PSPR4;          /* 0x60 */
> +     unsigned int    PSPR5;          /* 0x64 */
> +     unsigned int    PSPR6;          /* 0x68 */
> +     unsigned int    PSPR7;          /* 0x6C */
> +     unsigned int    PSPR8;          /* 0x70 */
> +     unsigned int    PSPR9;          /* 0x74 */
> +     unsigned int    PSPR10;         /* 0x78 */
> +     unsigned int    PSPR11;         /* 0x7C */
> +     unsigned int    PSPR12;         /* 0x80 */
> +     unsigned int    PSPR13;         /* 0x84 */
> +     unsigned int    PSPR14;         /* 0x88 */
> +     unsigned int    PSPR15;         /* 0x8C */
> +     unsigned int    AHBDMA_RACCS;   /* 0x90 */
> +     unsigned int    reserved2;      /* 0x94 */
> +     unsigned int    reserved3;      /* 0x98 */
> +     unsigned int    JSS;            /* 0x9C */
> +     unsigned int    CFC_RACC;       /* 0xA0 */
> +     unsigned int    SSP1_RACC;      /* 0xA4 */
> +     unsigned int    UART1TX_RACC;   /* 0xA8 */
> +     unsigned int    UART1RX_RACC;   /* 0xAC */
> +     unsigned int    UART2TX_RACC;   /* 0xB0 */
> +     unsigned int    UART2RX_RACC;   /* 0xB4 */
> +     unsigned int    SDC_RACC;       /* 0xB8 */
> +     unsigned int    I2SAC97_RACC;   /* 0xBC */
> +     unsigned int    IRDATX_RACC;    /* 0xC0 */
> +     unsigned int    reserved4;      /* 0xC4 */
> +     unsigned int    USBD_RACC;      /* 0xC8 */
> +     unsigned int    IRDARX_RACC;    /* 0xCC */
> +     unsigned int    IRDA_RACC;      /* 0xD0 */
> +     unsigned int    ED0_RACC;       /* 0xD4 */
> +     unsigned int    ED1_RACC;       /* 0xD8 */
> +};
> +
> +/*
> + * ID Number 0 Register
> + */
> +#define FTPMU010_ID_A320A    0x03200000
> +#define FTPMU010_ID_A320C    0x03200010
> +#define FTPMU010_ID_A320D    0x03200030
> +
> +/*
> + * OSC Control Register
> + */
> +#define FTPMU010_OSCC_OSCH_TRI               (1<<  11)
> +#define FTPMU010_OSCC_OSCH_STABLE    (1<<  9)
> +#define FTPMU010_OSCC_OSCH_OFF               (1<<  8)
> +
> +#define FTPMU010_OSCC_OSCL_TRI               (1<<  3)
> +#define FTPMU010_RTCLSEL             (1<<  2)
> +#define FTPMU010_OSCC_OSCL_STABLE    (1<<  1)
> +#define FTPMU010_OSCC_OSCL_OFF               (1<<  0)
> +
> +/*
> + * Power Mode Register
> + */
> +#define FTPMU010_PMODE_DIVAHBCLK_MASK        (0x7<<  4)
> +#define FTPMU010_PMODE_DIVAHBCLK_2   (0x0<<  4)
> +#define FTPMU010_PMODE_DIVAHBCLK_3   (0x1<<  4)
> +#define FTPMU010_PMODE_DIVAHBCLK_4   (0x2<<  4)
> +#define FTPMU010_PMODE_DIVAHBCLK_6   (0x3<<  4)
> +#define FTPMU010_PMODE_DIVAHBCLK_8   (0x4<<  4)
> +#define FTPMU010_PMODE_FCS           (1<<  2)
> +#define FTPMU010_PMODE_TURBO         (1<<  1)
> +#define FTPMU010_PMODE_SLEEP         (1<<  0)
> +
> +/*
> + * Power Manager Status Register
> + */
> +#define FTPMU010_PMSR_SMR    (1<<  10)
> +
> +#define FTPMU010_PMSR_RDH    (1<<  2)
> +#define FTPMU010_PMSR_PH     (1<<  1)
> +#define FTPMU010_PMSR_CKEHLOW        (1<<  0)
> +
> +/*
> + * Multi-Function Port Setting Register
> + */
> +#define FTPMU010_MFPSR_MODEMPINSEL   (1<<  14)
> +#define FTPMU010_MFPSR_AC97CLKOUTSEL (1<<  13)
> +#define FTPMU010_MFPSR_AC97PINSEL    (1<<  3)
> +
> +/*
> + * PLL/DLL Control Register 0
> + */
> +#define FTPMU010_PDLLCR0_PLL1NS(x)           (((x)&  0x1ff)<<  3)
> +#define FTPMU010_PDLLCR0_PLL1NS_VALUEOF(reg) (((reg)>>  3)&  0x1ff)
> +#define FTPMU010_PDLLCR0_PLL1DIS             (1<<  0)
> +
> +#endif       /* __FTPMU010_H */
> diff --git a/include/asm-arm/arch-faraday/ftsdmc020.h
> b/include/asm-arm/arch-faraday/ftsdmc020.h
> new file mode 100644
> index 0000000..0699772
> --- /dev/null
> +++ b/include/asm-arm/arch-faraday/ftsdmc020.h
> @@ -0,0 +1,103 @@
> +/*
> + * (C) Copyright 2009 Faraday Technology
> + * Po-Yu Chuang<[email protected]>
> + *
> + * This program is free software; you can redistribute it and/or modify
> + * it under the terms of the GNU General Public License as published by
> + * the Free Software Foundation; either version 2 of the License, or
> + * (at your option) any later version.
> + *
> + * This program is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> + * GNU General Public License for more details.
> + *
> + * You should have received a copy of the GNU General Public License
> + * along with this program; if not, write to the Free Software
> + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
> + */
> +
> +/*
> + * SDRAM Controller
> + */
> +#ifndef __FTSDMC020_H
> +#define __FTSDMC020_H
> +
> +#define FTSDMC020_OFFSET_TP0         0x00
> +#define FTSDMC020_OFFSET_TP1         0x04
> +#define FTSDMC020_OFFSET_CR          0x08
> +#define FTSDMC020_OFFSET_BANK0_BSR   0x0C
> +#define FTSDMC020_OFFSET_BANK1_BSR   0x10
> +#define FTSDMC020_OFFSET_BANK2_BSR   0x14
> +#define FTSDMC020_OFFSET_BANK3_BSR   0x18
> +#define FTSDMC020_OFFSET_BANK4_BSR   0x1C
> +#define FTSDMC020_OFFSET_BANK5_BSR   0x20
> +#define FTSDMC020_OFFSET_BANK6_BSR   0x24
> +#define FTSDMC020_OFFSET_BANK7_BSR   0x28
> +#define FTSDMC020_OFFSET_ACR         0x34
> +
> +/*
> + * Timing Parametet 0 Register
> + */
> +#define FTSDMC020_TP0_TCL(x) ((x)&  0x3)
> +#define FTSDMC020_TP0_TWR(x) (((x)&  0x3)<<  4)
> +#define FTSDMC020_TP0_TRF(x) (((x)&  0xf)<<  8)
> +#define FTSDMC020_TP0_TRCD(x)        (((x)&  0x7)<<  12)
> +#define FTSDMC020_TP0_TRP(x) (((x)&  0xf)<<  16)
> +#define FTSDMC020_TP0_TRAS(x)        (((x)&  0xf)<<  20)
> +
> +/*
> + * Timing Parametet 1 Register
> + */
> +#define FTSDMC020_TP1_REF_INTV(x)    ((x)&  0xffff)
> +#define FTSDMC020_TP1_INI_REFT(x)    (((x)&  0xf)<<  16)
> +#define FTSDMC020_TP1_INI_PREC(x)    (((x)&  0xf)<<  20)
> +
> +/*
> + * Configuration Register
> + */
> +#define FTSDMC020_CR_SREF    (1<<  0)
> +#define FTSDMC020_CR_PWDN    (1<<  1)
> +#define FTSDMC020_CR_ISMR    (1<<  2)
> +#define FTSDMC020_CR_IREF    (1<<  3)
> +#define FTSDMC020_CR_IPREC   (1<<  4)
> +#define FTSDMC020_CR_REFTYPE (1<<  5)
> +
> +/*
> + * SDRAM External Bank Base/Size Register
> + */
> +#define FTSDMC020_BANK_ENABLE                (1<<  28)
> +
> +#define FTSDMC020_BANK_BASE(addr)    (((addr)>>  20)<<  16)
> +
> +#define FTSDMC020_BANK_DDW_X4                (0<<  12)
> +#define FTSDMC020_BANK_DDW_X8                (1<<  12)
> +#define FTSDMC020_BANK_DDW_X16               (2<<  12)
> +#define FTSDMC020_BANK_DDW_X32               (3<<  12)
> +
> +#define FTSDMC020_BANK_DSZ_16M               (0<<  8)
> +#define FTSDMC020_BANK_DSZ_64M               (1<<  8)
> +#define FTSDMC020_BANK_DSZ_128M              (2<<  8)
> +#define FTSDMC020_BANK_DSZ_256M              (3<<  8)
> +
> +#define FTSDMC020_BANK_MBW_8         (0<<  4)
> +#define FTSDMC020_BANK_MBW_16                (1<<  4)
> +#define FTSDMC020_BANK_MBW_32                (2<<  4)
> +
> +#define FTSDMC020_BANK_SIZE_1M               0x0
> +#define FTSDMC020_BANK_SIZE_2M               0x1
> +#define FTSDMC020_BANK_SIZE_4M               0x2
> +#define FTSDMC020_BANK_SIZE_8M               0x3
> +#define FTSDMC020_BANK_SIZE_16M              0x4
> +#define FTSDMC020_BANK_SIZE_32M              0x5
> +#define FTSDMC020_BANK_SIZE_64M              0x6
> +#define FTSDMC020_BANK_SIZE_128M     0x7
> +#define FTSDMC020_BANK_SIZE_256M     0x8
> +
> +/*
> + * Arbiter Control Register
> + */
> +#define FTSDMC020_ACR_TOC(x) ((x)&  0x1f)
> +#define FTSDMC020_ACR_TOE    (1<<  8)
> +
> +#endif       /* __FTSDMC020_H */
> diff --git a/include/asm-arm/arch-faraday/ftsmc020.h
> b/include/asm-arm/arch-faraday/ftsmc020.h
> new file mode 100644
> index 0000000..43dfa61
> --- /dev/null
> +++ b/include/asm-arm/arch-faraday/ftsmc020.h
> @@ -0,0 +1,79 @@
> +/*
> + * (C) Copyright 2009 Faraday Technology
> + * Po-Yu Chuang<[email protected]>
> + *
> + * This program is free software; you can redistribute it and/or modify
> + * it under the terms of the GNU General Public License as published by
> + * the Free Software Foundation; either version 2 of the License, or
> + * (at your option) any later version.
> + *
> + * This program is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> + * GNU General Public License for more details.
> + *
> + * You should have received a copy of the GNU General Public License
> + * along with this program; if not, write to the Free Software
> + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
> + */
> +
> +/*
> + * Static Memory Controller
> + */
> +#ifndef __FTSMC020_H
> +#define __FTSMC020_H
> +
> +#ifndef __ASSEMBLY__
> +
> +struct ftsmc020 {
> +     struct {
> +             unsigned int    cr;     /* 0x00, 0x08, 0x10, 0x18 */
> +             unsigned int    tpr;    /* 0x04, 0x0c, 0x14, 0x1c */
> +     } bank[4];
> +     unsigned int    pad[8]; /* 0x20 - 0x3c */
> +     unsigned int    ssr;    /* 0x40 */
> +};
> +
> +void ftsmc020_init (void);
> +
> +#endif /* __ASSEMBLY__ */
> +
> +/*
> + * Memory Bank Configuration Register
> + */
> +#define FTSMC020_BANK_ENABLE (1<<  28)
> +#define FTSMC020_BANK_BASE(x)        ((x)&  0x0fff1000)
> +
> +#define FTSMC020_BANK_WPROT  (1<<  11)
> +
> +#define FTSMC020_BANK_SIZE_32K       (0xb<<  4)
> +#define FTSMC020_BANK_SIZE_64K       (0xc<<  4)
> +#define FTSMC020_BANK_SIZE_128K      (0xd<<  4)
> +#define FTSMC020_BANK_SIZE_256K      (0xe<<  4)
> +#define FTSMC020_BANK_SIZE_512K      (0xf<<  4)
> +#define FTSMC020_BANK_SIZE_1M        (0x0<<  4)
> +#define FTSMC020_BANK_SIZE_2M        (0x1<<  4)
> +#define FTSMC020_BANK_SIZE_4M        (0x2<<  4)
> +#define FTSMC020_BANK_SIZE_8M        (0x3<<  4)
> +#define FTSMC020_BANK_SIZE_16M       (0x4<<  4)
> +#define FTSMC020_BANK_SIZE_32M       (0x5<<  4)
> +
> +#define FTSMC020_BANK_MBW_8  (0x0<<  0)
> +#define FTSMC020_BANK_MBW_16 (0x1<<  0)
> +#define FTSMC020_BANK_MBW_32 (0x2<<  0)
> +
> +/*
> + * Memory Bank Timing Parameter Register
> + */
> +#define FTSMC020_TPR_ETRNA(x)        (((x)&  0xf)<<  28)
> +#define FTSMC020_TPR_EATI(x) (((x)&  0xf)<<  24)
> +#define FTSMC020_TPR_RBE     (1<<  20)
> +#define FTSMC020_TPR_AST(x)  (((x)&  0x3)<<  18)
> +#define FTSMC020_TPR_CTW(x)  (((x)&  0x3)<<  16)
> +#define FTSMC020_TPR_ATI(x)  (((x)&  0xf)<<  12)
> +#define FTSMC020_TPR_AT2(x)  (((x)&  0x3)<<  8)
> +#define FTSMC020_TPR_WTC(x)  (((x)&  0x3)<<  6)
> +#define FTSMC020_TPR_AHT(x)  (((x)&  0x3)<<  4)
> +#define FTSMC020_TPR_TRNA(x) (((x)&  0xf)<<  0)
> +
> +#endif       /* __FTSMC020_H */
> diff --git a/include/asm-arm/arch-faraday/fttmr010.h
> b/include/asm-arm/arch-faraday/fttmr010.h
> new file mode 100644
> index 0000000..72abcb3
> --- /dev/null
> +++ b/include/asm-arm/arch-faraday/fttmr010.h
> @@ -0,0 +1,73 @@
> +/*
> + * (C) Copyright 2009 Faraday Technology
> + * Po-Yu Chuang<[email protected]>
> + *
> + * This program is free software; you can redistribute it and/or modify
> + * it under the terms of the GNU General Public License as published by
> + * the Free Software Foundation; either version 2 of the License, or
> + * (at your option) any later version.
> + *
> + * This program is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> + * GNU General Public License for more details.
> + *
> + * You should have received a copy of the GNU General Public License
> + * along with this program; if not, write to the Free Software
> + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
> + */
> +
> +/*
> + * Timer
> + */
> +#ifndef __FTTMR010_H
> +#define __FTTMR010_H
> +
> +struct fttmr010 {
> +     unsigned int    timer1_counter;         /* 0x00 */
> +     unsigned int    timer1_load;            /* 0x04 */
> +     unsigned int    timer1_match1;          /* 0x08 */
> +     unsigned int    timer1_match2;          /* 0x0c */
> +     unsigned int    timer2_counter;         /* 0x10 */
> +     unsigned int    timer2_load;            /* 0x14 */
> +     unsigned int    timer2_match1;          /* 0x18 */
> +     unsigned int    timer2_match2;          /* 0x1c */
> +     unsigned int    timer3_counter;         /* 0x20 */
> +     unsigned int    timer3_load;            /* 0x24 */
> +     unsigned int    timer3_match1;          /* 0x28 */
> +     unsigned int    timer3_match2;          /* 0x2c */
> +     unsigned int    cr;                     /* 0x30 */
> +     unsigned int    interrupt_state;        /* 0x34 */
> +     unsigned int    interrupt_mask;         /* 0x38 */
> +};
> +
> +/*
> + * Timer Control Register
> + */
> +#define FTTMR010_TM3_UPDOWN  (1<<  11)
> +#define FTTMR010_TM2_UPDOWN  (1<<  10)
> +#define FTTMR010_TM1_UPDOWN  (1<<  9)
> +#define FTTMR010_TM3_OFENABLE        (1<<  8)
> +#define FTTMR010_TM3_CLOCK   (1<<  7)
> +#define FTTMR010_TM3_ENABLE  (1<<  6)
> +#define FTTMR010_TM2_OFENABLE        (1<<  5)
> +#define FTTMR010_TM2_CLOCK   (1<<  4)
> +#define FTTMR010_TM2_ENABLE  (1<<  3)
> +#define FTTMR010_TM1_OFENABLE        (1<<  2)
> +#define FTTMR010_TM1_CLOCK   (1<<  1)
> +#define FTTMR010_TM1_ENABLE  (1<<  0)
> +
> +/*
> + * Timer Interrupt State&  Mask Registers
> + */
> +#define FTTMR010_TM3_OVERFLOW        (1<<  8)
> +#define FTTMR010_TM3_MATCH2  (1<<  7)
> +#define FTTMR010_TM3_MATCH1  (1<<  6)
> +#define FTTMR010_TM2_OVERFLOW        (1<<  5)
> +#define FTTMR010_TM2_MATCH2  (1<<  4)
> +#define FTTMR010_TM2_MATCH1  (1<<  3)
> +#define FTTMR010_TM1_OVERFLOW        (1<<  2)
> +#define FTTMR010_TM1_MATCH2  (1<<  1)
> +#define FTTMR010_TM1_MATCH1  (1<<  0)
> +
> +#endif       /* __FTTMR010_H */
> diff --git a/include/configs/a320.h b/include/configs/a320.h
> new file mode 100644
> index 0000000..27ca2cd
> --- /dev/null
> +++ b/include/configs/a320.h
> @@ -0,0 +1,239 @@
> +/*
> + * (C) Copyright 2009 Faraday Technology
> + * Po-Yu Chuang<[email protected]>
> + *
> + * Configuation settings for the Faraday A320 board.
> + *
> + * This program is free software; you can redistribute it and/or modify
> + * it under the terms of the GNU General Public License as published by
> + * the Free Software Foundation; either version 2 of the License, or
> + * (at your option) any later version.
> + *
> + * This program is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> + * GNU General Public License for more details.
> + *
> + * You should have received a copy of the GNU General Public License
> + * along with this program; if not, write to the Free Software
> + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
> + */
> +
> +#ifndef __CONFIG_H
> +#define __CONFIG_H
> +
> +/*-----------------------------------------------------------------------
> + * CPU and Board Configuration Options
> + */
> +#define CONFIG_A320          /* in a Faraday A320 SoC/Board   */
> +
> +#undef CONFIG_USE_IRQ                /* we don't need IRQ/FIQ stuff */
> +
> +#undef CONFIG_SKIP_LOWLEVEL_INIT
> +
> +/*-----------------------------------------------------------------------
> + * Timer
> + */
> +#define CONFIG_SYS_HZ                1000    /* timer ticks per second */
> +#define CONFIG_SYS_TIMERBASE 0x98400000
> +
> +/*-----------------------------------------------------------------------
> + * RTC
> + */
> +#define CONFIG_RTC_FTRTC010
> +#define CONFIG_SYS_RTC_BASE  0x98600000
> +
> +/*-----------------------------------------------------------------------
> + * Serial console configuration
> + */
> +
> +/* FTUART is a high speed NS 16C550A compatible UART */
> +#define CONFIG_BAUDRATE                      38400
> +#define CONFIG_CONS_INDEX            1
> +#define CONFIG_SYS_NS16550
> +#define CONFIG_SYS_NS16550_SERIAL
> +#define CONFIG_SYS_NS16550_COM1              0x98200000
> +#define CONFIG_SYS_NS16550_REG_SIZE  -4
> +#define CONFIG_SYS_NS16550_CLK               18432000
> +
> +/* valid baudrates */
> +#define CONFIG_SYS_BAUDRATE_TABLE    { 9600, 19200, 38400, 57600, 115200 }
> +
> +/*-----------------------------------------------------------------------
> + * Ethernet
> + */
> +#define CONFIG_NET_MULTI
> +#define CONFIG_DRIVER_FTMAC100
> +#define CONFIG_SYS_MAC100_BASE       0x90900000
> +
> +#define CONFIG_BOOTDELAY     3
> +#define CONFIG_ETHADDR               c3:10:da:ce:3f:3e
> +#define CONFIG_NETMASK               255.255.255.0
> +#define CONFIG_IPADDR                192.168.68.55
> +#define CONFIG_SERVERIP              192.168.68.63
> +
> +/*-----------------------------------------------------------------------
> + * Hardware register bases
> + */
> +#define CONFIG_SYS_AHBC_BASE 0x90100000      /* AHB Controller */
> +#define CONFIG_SYS_SMC_BASE  0x90200000      /* Static Memory Controller */
> +#define CONFIG_SYS_DEBUG_LED 0x902ffffc      /* Debug LED */
> +#define CONFIG_SYS_SDMC_BASE 0x90300000      /* SDRAM Controller */
> +
> +#define CONFIG_SYS_FTPMU_BASE        0x98100000      /* Power Management 
> Unit */
> +
> +/*-----------------------------------------------------------------------
> + * Command line configuration.
> + */
> +#include<config_cmd_default.h>
> +
> +#define CONFIG_CMD_CACHE
> +#define CONFIG_CMD_DATE
> +#define CONFIG_CMD_PING
> +
> +/*-----------------------------------------------------------------------
> + * Miscellaneous configurable options
> + */
> +#define CONFIG_SYS_LONGHELP                  /* undef to save memory */
> +#define CONFIG_SYS_PROMPT    "A320 # "       /* Monitor Command Prompt */
> +#define CONFIG_SYS_CBSIZE    256             /* Console I/O Buffer Size */
> +
> +/* Print Buffer Size */
> +#define CONFIG_SYS_PBSIZE    \
> +     (CONFIG_SYS_CBSIZE + sizeof(CONFIG_SYS_PROMPT) + 16)
> +
> +/* max number of command args */
> +#define CONFIG_SYS_MAXARGS   16
> +
> +/* Boot Argument Buffer Size */
> +#define CONFIG_SYS_BARGSIZE  CONFIG_SYS_CBSIZE
> +
> +/*-----------------------------------------------------------------------
> + * Stack sizes
> + *
> + * The stack sizes are set up in start.S using the settings below
> + */
> +#define CONFIG_STACKSIZE     (128 * 1024)    /* regular stack */
> +#ifdef CONFIG_USE_IRQ
> +#define CONFIG_STACKSIZE_IRQ (4 * 1024)      /* IRQ stack */
> +#define CONFIG_STACKSIZE_FIQ (4 * 1024)      /* FIQ stack */
> +#endif
> +
> +/*-----------------------------------------------------------------------
> + * Size of malloc() pool
> + */
> +#define CONFIG_SYS_MALLOC_LEN                (CONFIG_ENV_SIZE + 128 * 1024)
> +
> +/*-----------------------------------------------------------------------
> + * size in bytes reserved for initial data
> +*/
> +#define CONFIG_SYS_GBL_DATA_SIZE     128
> +
> +/*-----------------------------------------------------------------------
> + * SDRAM controller configuration
> + */
> +#define CONFIG_SYS_FTSDMC020_TP0     FTSDMC020_TP0_TRAS(2) | \
> +                                     FTSDMC020_TP0_TRP(1)  | \
> +                                     FTSDMC020_TP0_TRCD(1) | \
> +                                     FTSDMC020_TP0_TRF(3)  | \
> +                                     FTSDMC020_TP0_TWR(1)  | \
> +                                     FTSDMC020_TP0_TCL(2)
> +
> +#define CONFIG_SYS_FTSDMC020_TP1     FTSDMC020_TP1_INI_PREC(4) |     \
> +                                     FTSDMC020_TP1_INI_REFT(8) |     \
> +                                     FTSDMC020_TP1_REF_INTV(0x180)
> +
> +#define CONFIG_SYS_FTSDMC020_BANK0_BSR       FTSDMC020_BANK_ENABLE   |       
> \
> +                                     FTSDMC020_BANK_DDW_X16  |       \
> +                                     FTSDMC020_BANK_DSZ_256M |       \
> +                                     FTSDMC020_BANK_MBW_32   |       \
> +                                     FTSDMC020_BANK_SIZE_64M
> +
> +/*-----------------------------------------------------------------------
> + * Physical Memory Map
> + */
> +#define CONFIG_NR_DRAM_BANKS 1               /* we have 1 bank of DRAM */
> +#define PHYS_SDRAM_1         0x00000000      /* SDRAM Bank #1 */
> +#define PHYS_SDRAM_1_SIZE    0x04000000      /* 64 MB */
> +
> +/*
> + * Load address and memory test area should agree with
> + * board/faraday/a320/config.mk. Be careful not to overwrite U-boot itself.
> + */
> +#define CONFIG_SYS_LOAD_ADDR         0x02000000
> +
> +/* memtest works on 63 MB in DRAM */
> +#define CONFIG_SYS_MEMTEST_START     0x00000000
> +#define CONFIG_SYS_MEMTEST_END               0x03F00000
> +
> +/*-----------------------------------------------------------------------
> + * Static memory controller configuration
> + */
> +
> +#include<asm/arch/ftsmc020.h>
> +
> +#define FTSMC020_BANK0_CONFIG        (FTSMC020_BANK_ENABLE             |     
> \
> +                              FTSMC020_BANK_BASE(PHYS_FLASH_1) |     \
> +                              FTSMC020_BANK_SIZE_1M            |     \
> +                              FTSMC020_BANK_MBW_8)
> +
> +#define FTSMC020_BANK0_TIMING        (FTSMC020_TPR_RBE      |        \
> +                              FTSMC020_TPR_AST(3)   |        \
> +                              FTSMC020_TPR_CTW(3)   |        \
> +                              FTSMC020_TPR_ATI(0xf) |        \
> +                              FTSMC020_TPR_AT2(3)   |        \
> +                              FTSMC020_TPR_WTC(3)   |        \
> +                              FTSMC020_TPR_AHT(3)   |        \
> +                              FTSMC020_TPR_TRNA(0xf))
> +
> +#define FTSMC020_BANK1_CONFIG        (FTSMC020_BANK_ENABLE             |     
> \
> +                              FTSMC020_BANK_BASE(PHYS_FLASH_2) |     \
> +                              FTSMC020_BANK_SIZE_32M           |     \
> +                              FTSMC020_BANK_MBW_32)
> +
> +#define FTSMC020_BANK1_TIMING        (FTSMC020_TPR_AST(3)   |        \
> +                              FTSMC020_TPR_CTW(3)   |        \
> +                              FTSMC020_TPR_ATI(0xf) |        \
> +                              FTSMC020_TPR_AT2(3)   |        \
> +                              FTSMC020_TPR_WTC(3)   |        \
> +                              FTSMC020_TPR_AHT(3)   |        \
> +                              FTSMC020_TPR_TRNA(0xf))
> +
> +#define CONFIG_SYS_FTSMC020_CONFIGS  {                       \
> +     { FTSMC020_BANK0_CONFIG, FTSMC020_BANK0_TIMING, },      \
> +     { FTSMC020_BANK1_CONFIG, FTSMC020_BANK1_TIMING, },      \
> +}
> +
> +/*-----------------------------------------------------------------------
> + * FLASH and environment organization
> + */
> +
> +/* no environments */
> +#define CONFIG_ENV_IS_NOWHERE
> +
> +/* Total Size of Environment Sector */
> +#define CONFIG_ENV_SIZE                      0x20000
> +
> +/* use CFI framework */
> +#define CONFIG_SYS_FLASH_CFI
> +#define CONFIG_FLASH_CFI_DRIVER
> +
> +/* support JEDEC */
> +#define CONFIG_FLASH_CFI_LEGACY
> +#define CONFIG_SYS_FLASH_LEGACY_512Kx8
> +
> +#define PHYS_FLASH_1                 0x80000000
> +#define PHYS_FLASH_2                 0x80400000
> +#define CONFIG_SYS_FLASH_BANKS_LIST  { PHYS_FLASH_1, PHYS_FLASH_2, }
> +
> +#define CONFIG_SYS_MONITOR_BASE              PHYS_FLASH_1
> +
> +/* max number of memory banks */
> +#define CONFIG_SYS_MAX_FLASH_BANKS   2
> +
> +/* max number of sectors on one chip */
> +#define CONFIG_SYS_MAX_FLASH_SECT    512
> +
> +#undef CONFIG_SYS_FLASH_EMPTY_INFO
> +
> +#endif       /* __CONFIG_H */

_______________________________________________
U-Boot mailing list
[email protected]
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to