[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