[U-Boot] [PATCH 3/3] A320: Add support for Faraday A320 evaluation board

Po-Yu Chuang ratbert.chuang at gmail.com
Wed Jun 24 07:07:57 CEST 2009


Dear Jean-Christophe PLAGNIOL-VILLARD,

Thank you for your detailed review

2009/6/24 Jean-Christophe PLAGNIOL-VILLARD <plagnioj at jcrosoft.com>:
> please use git
I cannot access git in the company, but I will try that at home.

> please add a MAKEALL and MAINTAINER entry
ok, I will fix them

>> RCS file: /usr/local/cvsroot/ctd/u-boot-2009.06/Makefile,v
>> +a320_config  :       unconfig
>> +     @$(MKCONFIG) $(@:_config=) arm arm920t a320 faraday
> 920T but you write 926ejs in the config.mk?
please see the explanation below

>> diff -N board/faraday/a320/board.c
>> +#define FLASH_BANK0_CONFIG   (FTSMC_BANK_ENABLE |                    \
>> +                              FTSMC_BANK_BASE(PHYS_FLASH_1) |        \
>> +                              FTSMC_BANK_SIZE_1M |                   \
>> +                              FTSMC_BANK_MBW_8)
>> +
>> +#define FLASH_BANK0_TIMING   (FTSMC_TPR_RBE |        \
>> +                              FTSMC_TPR_AST(3) |     \
>> +                              FTSMC_TPR_CTW(3) |     \
>> +                              FTSMC_TPR_ATI(0xf) |   \
>> +                              FTSMC_TPR_AT2(3) |     \
>> +                              FTSMC_TPR_WTC(3) |     \
>> +                              FTSMC_TPR_AHT(3) |     \
>> +                              FTSMC_TPR_TRNA(0xf))
>> +
>> +#define FLASH_BANK1_CONFIG   (FTSMC_BANK_ENABLE |                    \
>> +                              FTSMC_BANK_BASE(PHYS_FLASH_2) |        \
>> +                              FTSMC_BANK_SIZE_32M |                  \
>> +                              FTSMC_BANK_MBW_32 )
>> +
>> +#define FLASH_BANK1_TIMING   (FTSMC_TPR_AST(3) |     \
>> +                              FTSMC_TPR_CTW(3) |     \
>> +                              FTSMC_TPR_ATI(0xf) |   \
>> +                              FTSMC_TPR_AT2(3) |     \
>> +                              FTSMC_TPR_WTC(3) |     \
>> +                              FTSMC_TPR_AHT(3) |     \
>> +                              FTSMC_TPR_TRNA(0xf))
> please move this to config header
ok, I will fix them

>> +
>> +extern int timer_init (void);
> no-need please remove
ok

>> +     smc->bank[bank].cr  = cpu_to_le32 (config);
>> +     smc->bank[bank].tpr = cpu_to_le32 (timing);
> please use proper accessor everywhere
Should I use
writel(config, &smc->bank[bank].cr);
or
smc->bank[bank].cr  = config;

>> +int board_init (void)
>> +{
>> +     gd->bd->bi_arch_number = MACH_TYPE_FARADAY;
>> +
>> +     ftsmc_init ();
>> +     rtc_reset ();
> do you really need this so early the rtc and enable everytime?
sorry, I don't understand what do you mean.

>> +     timer_init ();
> no-need pelase remove
ok

>> +int interrupt_init (void)
>> +{
>> +     /* nothing happens here - we don't setup any IRQs */
>> +     return (0);
>> +}
> no-need please remove
It looks like interrupt_init is an soc function, I will put it to the soc code.

>> diff -N board/faraday/a320/config.mk
>> +# Faraday A320 board with FA526/FA626TE/ARM926EJ-S cpus
> ??
>> Index: board/faraday/a320/ftahbc.h
>> Index: board/faraday/a320/ftpmu.h
>> Index: board/faraday/a320/ftsdmc.h
>> Index: board/faraday/a320/ftsmc.h
>> Index: board/faraday/a320/fttmr.h
> If I undersand correctly all those header are soc specific not board specific
> as the timer code
> so please move the header to
> include/asm-arm/arch-faraday or your soc familiy name
> and the code to
> cpu/armxxx/faraday/
We have an SOC called a320 (so does the evaluation board) which has an
armv4 cpu called fa526.
We can overdrive (with daughter board) it with a different cpu such as
arm926ej-s.

At first, I created cpu/fa526 and copy the cpu stuff from arm920t.
Then I found that it is not a good
idea to duplicate code, so I reused cpu/arm920t.

If I should create an SOC directory, where should I place it?
cpu/fa526/a320 ? but this duplicates cpu code
cpu/arm920t/a320 ? but it is not arm920t in fact
cpu/arm926ejs/a320? but it is not arm926ejs by default

>> diff -N board/faraday/a320/lowlevel_init.S
>> +/*
>> + * Memory Mapping
>> + */
>> +#define CONFIG_SYS_ROM_DEFAULT               0x00000000
>> +#define CONFIG_SYS_SDRAM_DEFAULT     0x10000000
>> +#define CONFIG_SYS_SDRAM_REMAPPED    PHYS_SDRAM_1    /* remap location */
> I guess this board specific too
yes

>> +/*
>> + * numeric 7 segment display
>> + */
>> +.macro       led, num, rtmp1, rtmp2
>> +     mov     \rtmp1, #\num
>> +     ldr     \rtmp2, =CONFIG_SYS_DEBUG_LED
>> +     str     \rtmp1, [\rtmp2]
>> +.endm
> please use write32
ok, I will fix this

>> +     /*
>> +      * copy U-Boot to RAM
>> +      */
>> +copy_code:
>> +     ldr     r0, =CONFIG_SYS_ROM_DEFAULT     /* r0 <- source address     */
>> +     ldr     r1, =CONFIG_SYS_SDRAM_DEFAULT   /* 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         */
>> +
>> +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
> why???
> it's already done in the start.S
After power on, cpu starts from ROM (at 0x0) and this code copies u-boot to
SDRAM (at 0x10000000). Then the later "remap" routine modifies the setting
of the AHB controller. SDRAM base will become 0x0. Therefore I have to do
this copy to make "remap" work.

Other boot loader of our company behaves like this and our kernel and non-OS
programs depends on it (SDRAM base 0x0). Therefore, TEXT_BASE is
0x03f80000 rather than 0x13f80000.

>> +
>> +     led     0x2, r0, r1
>> +
>> +     bl      remap
>> +1:
>> +     led     0x3, r0, r1
>> +
>> +     /* everything is fine now */
>> +     mov     lr, r11
>> +     mov     pc, lr
>> +
>> +.LC5:
>> +     .word   _start
>> +.LC6:
>> +     .word   __bss_start
>> +
>> +/*
>> + * memory initialization
>> + */
>> +init_sdmc:
>> +     mov     r9, lr
>> +
> please use write32 and co when it's possible
> include/asm-arm/macro.h
ok, I will fix them

>> +     /* set SDRAM register */
>> +     ldr     r0, =CONFIG_SYS_SDMC_BASE
>> +     ldr     r1, tp0
>> +     str     r1, [r0, #FTSDMC_OFFSET_TP0]
>> +     ldr     r1, tp1
>> +     str     r1, [r0, #FTSDMC_OFFSET_TP1]

>> +/*
>> + * This code will remap the memory ROM and SDRAM
>> + * ROM will be placed on 0x80000000 SDRAM will jump to 0x0
>> + */
>> +remap:
>> +     mov     r9, lr
>> +
>> +     ldr     r0, =CONFIG_SYS_SDMC_BASE
>> +
>> +     /* first adjust sdram */
>> +     ldr     r1, b0_bsr
>> +     ldr     r2, =FTSDMC_BANK_BASE(CONFIG_SYS_SDRAM_REMAPPED)
>> +     orr     r1, r1, r2
>> +     str     r1, [r0, #FTSDMC_OFFSET_BANK0_BSR]      @ bank 0
>> +
>> +     /* then remap */
>> +     ldr     r3, =CONFIG_SYS_AHBC_BASE
>> +     ldr     r4, [r3, #FTAHBC_OFFSET_ICR]
>> +     orr     r4, r4, #FTAHBC_ICR_REMAP               @ Set REMAP bit
>> +     str     r4, [r3, #FTAHBC_OFFSET_ICR]
>> +
>> +     mov     lr, r9
>> +     mov     pc, lr
>> +
>> +/*
>> + * some parameters for the board
>> + */
>> +tp0: .word   FTSDMC_TP0_TRAS(2) |    \
>> +             FTSDMC_TP0_TRP(1) |     \
>> +             FTSDMC_TP0_TRCD(1) |    \
>> +             FTSDMC_TP0_TRF(3) |     \
>> +             FTSDMC_TP0_TWR(1) |     \
>> +             FTSDMC_TP0_TCL(2)
>> +
>> +tp1: .word   FTSDMC_TP1_INI_PREC(4) |        \
>> +             FTSDMC_TP1_INI_REFT(8) |        \
>> +             FTSDMC_TP1_REF_INTV(0x180)
>> +
>> +b0_bsr:      .word   FTSDMC_BANK_ENABLE |    \
>> +             FTSDMC_BANK_DDW_X16 |   \
>> +             FTSDMC_BANK_DSZ_256M |  \
>> +             FTSDMC_BANK_MBW_32 |    \
>> +             FTSDMC_BANK_SIZE_64M
> those config will need to the config head
ok, I will fix this

>> Index: board/faraday/a320/u-boot.lds
> no need please remove

>> Index: include/configs/a320.h
>> ===================================================================
>> RCS file: include/configs/a320.h
>> diff -N include/configs/a320.h
>> --- /dev/null 1 Jan 1970 00:00:00 -0000
>> +++ include/configs/a320.h    23 Jun 2009 06:25:54 -0000      1.3
>> @@ -0,0 +1,181 @@
>> +/*
>> + * (C) Copyright 2009 Faraday Technology
>> + * Po-Yu Chuang <ratbert at faraday-tech.com>
>> + *
>> + * 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                32768   /* timer ticks per second */
> 1000 mandatory
ok, I will fix it

>> +#define CONFIG_SYS_TIMERBASE 0x98400000
> is it board specific??
soc specific indeed

>> +
>> +/*-----------------------------------------------------------------------
>> + * RTC
>> + */
>> +#define CONFIG_RTC_FTRTC
>> +#define CONFIG_SYS_RTC_BASE  0x98600000
> ditto
ok

>> +#define CONFIG_SYS_MAC100_BASE       0x90900000
> ditto
ok

>> +
>> +#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
> please remove the mac and ip config
ok, I will fix it

>> +
>> +/*-----------------------------------------------------------------------
>> + * 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 */
> is it board specific??
You are right. soc specific

>
>> +
>> +#define CONFIG_SYS_FTPMU_BASE        0x98100000      /* Power Management Unit */
> is it board specific??
ok

>> +/* no environments */
>> +#define CONFIG_ENV_IS_NOWHERE
> you do not plan to store the env in nor?
Yes, I do, but I will do this later after the current patches are accepted.


Best regards,
Po-Yu Chuang


More information about the U-Boot mailing list