[U-Boot] [PATCH 0/3] new BSP for at91rm9200ek

This patch series introduce new board support for at91rm9200ek. The derived code is now converted to new at91 code. Arm relocation is also implemented.
There where some tradeoffs regarding device support. Currently the code basis does not support all devices supported before. This includes a) remove support for dataflash since i can not test it (yet, should follow in some weeks) b) preloader support is disabled since NOR booting does not need any first stage loader c) MMC/SD-card is currently not supported (but was not before)
Next steps are: - get dataflash running - remove at91rm9200_usart driver (should merge with atmel_usart) - support MMC/SD-Card (also merge with current AT91/AVR32 implementation) - merge emac/macb
Andreas Bießmann (3): at91rm9200ek: convert to at91 at91rm9200: enable USB support at91rm9200ek: enbable USB support
MAINTAINERS | 4 + arch/arm/include/asm/arch-at91/hardware.h | 1 + board/atmel/at91rm9200ek/Makefile | 1 - board/atmel/at91rm9200ek/at91rm9200ek.c | 58 ++----- board/atmel/at91rm9200ek/config.mk | 3 +- board/atmel/at91rm9200ek/led.c | 58 ++++---- board/atmel/at91rm9200ek/misc.c | 50 ------ boards.cfg | 2 +- include/configs/at91rm9200ek.h | 233 ++++++++--------------------- 9 files changed, 118 insertions(+), 292 deletions(-) delete mode 100644 board/atmel/at91rm9200ek/misc.c

This patch removes some functionality from at91rm9200ek board but the remaining functionality does now work with newer at91 code and arm-relocation.
Currently missing features are: - dataflash booting (due to missing HW for testing) - MMC/SD-Card - first stage bootloader support is completely removed (not needed for NOR)
Cause this board was (some days ago) reference for all at91rm9200 based boards this should be a good starting point to convert all remaining at91rm9200 borads to at91 code. Aside from that this is a good base to get some drivers between at91sam/at91rm/avr32 merged.
Signed-off-by: Andreas Bießmann andreas.devel@googlemail.com --- MAINTAINERS | 4 + board/atmel/at91rm9200ek/Makefile | 1 - board/atmel/at91rm9200ek/at91rm9200ek.c | 58 +++------ board/atmel/at91rm9200ek/config.mk | 3 +- board/atmel/at91rm9200ek/led.c | 58 ++++---- board/atmel/at91rm9200ek/misc.c | 50 ------- boards.cfg | 2 +- include/configs/at91rm9200ek.h | 222 ++++++++----------------------- 8 files changed, 104 insertions(+), 294 deletions(-) delete mode 100644 board/atmel/at91rm9200ek/misc.c
diff --git a/MAINTAINERS b/MAINTAINERS index aabd871..38a0dd3 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -568,6 +568,10 @@ Rishi Bhattacharya rishi@ti.com
omap5912osk ARM926EJS
+Andreas Bie�mann andreas.devel@gmail.com + + at91rm9200ek at91rm9200 + Cliff Brake cliff.brake@gmail.com
pxa255_idp xscale diff --git a/board/atmel/at91rm9200ek/Makefile b/board/atmel/at91rm9200ek/Makefile index 500ce72..db54a32 100644 --- a/board/atmel/at91rm9200ek/Makefile +++ b/board/atmel/at91rm9200ek/Makefile @@ -27,7 +27,6 @@ LIB = $(obj)lib$(BOARD).a
COBJS-y += $(BOARD).o COBJS-y += led.o -COBJS-y += misc.o ifdef CONFIG_HAS_DATAFLASH COBJS-$(CONFIG_DATAFLASH_MMC_SELECT) += mux.o COBJS-y += partition.o diff --git a/board/atmel/at91rm9200ek/at91rm9200ek.c b/board/atmel/at91rm9200ek/at91rm9200ek.c index 570a09a..e30212c 100644 --- a/board/atmel/at91rm9200ek/at91rm9200ek.c +++ b/board/atmel/at91rm9200ek/at91rm9200ek.c @@ -1,4 +1,8 @@ /* + * (C) Copyright 2010 Andreas Bießmann andreas.devel@gmail.com + * + * derived from older work + * * (C) Copyright 2002 * Sysgo Real-Time Solutions, GmbH <www.elinos.com> * Marius Groeger mgroeger@sysgo.de @@ -25,76 +29,46 @@ #include <common.h> #include <exports.h> #include <netdev.h> -#include <asm/arch/AT91RM9200.h> +#include <asm/arch/hardware.h> +#include <asm/arch/at91_pio.h> +#include <asm/arch/at91_pmc.h> #include <asm/io.h> -#if defined(CONFIG_DRIVER_ETHER) -#include <at91rm9200_net.h> -#include <dm9161.h> -#endif
DECLARE_GLOBAL_DATA_PTR;
/* ------------------------------------------------------------------------- */ -/* - * Miscelaneous platform dependent initialisations - */ - int board_init (void) { + at91_pio_t *pio = (at91_pio_t *)AT91_PIO_BASE; + /* Enable Ctrlc */ - console_init_f (); + console_init_f();
/* * Correct IRDA resistor problem * Set PA23_TXD in Output */ - writel(AT91C_PA23_TXD2, ((AT91PS_PIO) AT91C_BASE_PIOA)->PIO_OER); - - /* - * memory and cpu-speed are setup before relocation - * so we do _nothing_ here - */ + writel(AT91_PMX_AA_TXD2, &pio->pioa.oer);
/* arch number of AT91RM9200EK-Board */ gd->bd->bi_arch_number = MACH_TYPE_AT91RM9200EK; /* adress of boot parameters */ - gd->bd->bi_boot_params = PHYS_SDRAM + 0x100; + gd->bd->bi_boot_params = CONFIG_SYS_SDRAM_BASE + 0x100;
return 0; }
int dram_init (void) { - gd->bd->bi_dram[0].start = PHYS_SDRAM; - gd->bd->bi_dram[0].size = PHYS_SDRAM_SIZE; + /* dram_init must store complete ramsize in gd->ram_size */ + gd->ram_size = get_ram_size((volatile long *)CONFIG_SYS_SDRAM_BASE, + CONFIG_SYS_SDRAM_SIZE); return 0; }
-#if defined(CONFIG_DRIVER_ETHER) && defined(CONFIG_CMD_NET) -/* - * Name: - * at91rm9200_GetPhyInterface - * Description: - * Initialise the interface functions to the PHY - * Arguments: - * None - * Return value: - * None - */ -void at91rm9200_GetPhyInterface(AT91PS_PhyOps p_phyops) -{ - p_phyops->Init = dm9161_InitPhy; - p_phyops->IsPhyConnected = dm9161_IsPhyConnected; - p_phyops->GetLinkSpeed = dm9161_GetLinkSpeed; - p_phyops->AutoNegotiate = dm9161_AutoNegotiate; -} -#endif - #ifdef CONFIG_DRIVER_AT91EMAC int board_eth_init(bd_t *bis) { - int rc = 0; - rc = at91emac_register(bis, 0); - return rc; + return at91emac_register(bis, (u32) AT91_EMAC_BASE); } #endif diff --git a/board/atmel/at91rm9200ek/config.mk b/board/atmel/at91rm9200ek/config.mk index 9ce161e..7b99e02 100644 --- a/board/atmel/at91rm9200ek/config.mk +++ b/board/atmel/at91rm9200ek/config.mk @@ -1 +1,2 @@ -TEXT_BASE = 0x21f00000 +# currently only NOR flash booting is supported +TEXT_BASE = 0x10000000 diff --git a/board/atmel/at91rm9200ek/led.c b/board/atmel/at91rm9200ek/led.c index 9464952..8d512e0 100644 --- a/board/atmel/at91rm9200ek/led.c +++ b/board/atmel/at91rm9200ek/led.c @@ -3,6 +3,9 @@ * Atmel Nordic AB <www.atmel.com> * Ulf Samuelsson ulf@atmel.com * + * (C) Copyright 2010 + * Andreas Bießmann andreas.devel@gmail.com + * * See file CREDITS for list of people who contributed to this * project. * @@ -23,67 +26,62 @@ */
#include <common.h> -#include <asm/arch/AT91RM9200.h> -#include <asm/io.h> +#include <asm/arch/gpio.h> +#include <asm/arch/at91_pmc.h>
-#define GREEN_LED AT91C_PIO_PB0 -#define YELLOW_LED AT91C_PIO_PB1 -#define RED_LED AT91C_PIO_PB2 +/* bit mask in PIO port B */ +#define GREEN_LED (1<<0) +#define YELLOW_LED (1<<1) +#define RED_LED (1<<2)
void green_LED_on(void) { - AT91PS_PIO PIOB = AT91C_BASE_PIOB; - - writel(GREEN_LED, PIOB->PIO_CODR); + at91_pio_t *pio = (at91_pio_t *)AT91_PIO_BASE; + writel(GREEN_LED, &pio->piob.codr); }
void yellow_LED_on(void) { - AT91PS_PIO PIOB = AT91C_BASE_PIOB; - - writel(YELLOW_LED, PIOB->PIO_CODR); + at91_pio_t *pio = (at91_pio_t *)AT91_PIO_BASE; + writel(YELLOW_LED, &pio->piob.codr); }
void red_LED_on(void) { - AT91PS_PIO PIOB = AT91C_BASE_PIOB; - - writel(RED_LED, PIOB->PIO_CODR); + at91_pio_t *pio = (at91_pio_t *)AT91_PIO_BASE; + writel(RED_LED, &pio->piob.codr); }
void green_LED_off(void) { - AT91PS_PIO PIOB = AT91C_BASE_PIOB; - - writel(GREEN_LED, PIOB->PIO_SODR); + at91_pio_t *pio = (at91_pio_t *)AT91_PIO_BASE; + writel(GREEN_LED, &pio->piob.sodr); }
void yellow_LED_off(void) { - AT91PS_PIO PIOB = AT91C_BASE_PIOB; - - writel(YELLOW_LED, PIOB->PIO_SODR); + at91_pio_t *pio = (at91_pio_t *)AT91_PIO_BASE; + writel(YELLOW_LED, &pio->piob.sodr); }
void red_LED_off(void) { - AT91PS_PIO PIOB = AT91C_BASE_PIOB; - - writel(RED_LED, PIOB->PIO_SODR); + at91_pio_t *pio = (at91_pio_t *)AT91_PIO_BASE; + writel(RED_LED, &pio->piob.sodr); }
- void coloured_LED_init (void) { - AT91PS_PIO PIOB = AT91C_BASE_PIOB; - AT91PS_PMC PMC = AT91C_BASE_PMC; + at91_pmc_t *pmc = (at91_pmc_t *)AT91_PMC_BASE; + at91_pio_t *pio = (at91_pio_t *)AT91_PIO_BASE;
/* Enable PIOB clock */ - writel((1 << AT91C_ID_PIOB), PMC->PMC_PCER); + writel(1 << AT91_ID_PIOB, &pmc->pcer); + /* Disable peripherals on LEDs */ - writel(AT91C_PIO_PB2 | AT91C_PIO_PB1 | AT91C_PIO_PB0, PIOB->PIO_PER); + writel(GREEN_LED | YELLOW_LED | RED_LED, &pio->piob.per); /* Enable pins as outputs */ - writel(AT91C_PIO_PB2 | AT91C_PIO_PB1 | AT91C_PIO_PB0, PIOB->PIO_OER); + writel(GREEN_LED | YELLOW_LED | RED_LED, &pio->piob.oer); /* Turn all LEDs OFF */ - writel(AT91C_PIO_PB2 | AT91C_PIO_PB1 | AT91C_PIO_PB0, PIOB->PIO_SODR); + writel(GREEN_LED | YELLOW_LED | RED_LED, &pio->piob.sodr); } diff --git a/board/atmel/at91rm9200ek/misc.c b/board/atmel/at91rm9200ek/misc.c deleted file mode 100644 index 81de32f..0000000 --- a/board/atmel/at91rm9200ek/misc.c +++ /dev/null @@ -1,50 +0,0 @@ -/* - * (C) Copyright 2002 - * Sysgo Real-Time Solutions, GmbH <www.elinos.com> - * Marius Groeger mgroeger@sysgo.de - * - * 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 <common.h> -#include <asm/arch/AT91RM9200.h> -#include <at91rm9200_net.h> -#include <dm9161.h> -#include <net.h> - -int board_late_init(void) -{ - DECLARE_GLOBAL_DATA_PTR; - - /* Fix Ethernet Initialization Bug when starting Linux from U-Boot */ - eth_init(gd->bd); - return 0; -} - - -/* checks if addr is in RAM */ -int addr2ram(ulong addr) -{ - int result = 0; - - if((addr >= PHYS_SDRAM) && (addr < (PHYS_SDRAM + PHYS_SDRAM_SIZE))) - result = 1; - - return result; -} diff --git a/boards.cfg b/boards.cfg index 132d178..c2b4c14 100644 --- a/boards.cfg +++ b/boards.cfg @@ -232,7 +232,7 @@ modnet50 arm arm720t lpc2292sodimm arm arm720t - - lpc2292 eb_cpux9k2 arm arm920t - BuS at91 at91rm9200dk arm arm920t - atmel at91rm9200 -at91rm9200ek arm arm920t - atmel at91rm9200 +at91rm9200ek arm arm920t - atmel at91 sbc2410x arm arm920t - - s3c24x0 smdk2400 arm arm920t - samsung s3c24x0 smdk2410 arm arm920t - samsung s3c24x0 diff --git a/include/configs/at91rm9200ek.h b/include/configs/at91rm9200ek.h index 145c3c3..8e9db92 100644 --- a/include/configs/at91rm9200ek.h +++ b/include/configs/at91rm9200ek.h @@ -1,4 +1,8 @@ /* + * Copyright (C) 2010 Andreas Bießmann biessmann.devel@googlemail.com + * + * Partely based on old code provided by + * * Ulf Samuelsson ulf@atmel.com * Rick Bronson rick@efn.org * @@ -23,40 +27,49 @@ * MA 02111-1307 USA */
-#ifndef __CONFIG_H -#define __CONFIG_H - -#define CONFIG_AT91_LEGACY +#ifndef __AT91RM9200EK_CONFIG_H__ +#define __AT91RM9200EK_CONFIG_H__
/* ARM asynchronous clock */ /* * from 18.432 MHz crystal * (18432000 / 4 * 39) */ -#define AT91C_MAIN_CLOCK 179712000 +#define AT91C_MAIN_CLOCK 179712000 /* * peripheral clock * (AT91C_MASTER_CLOCK / 3) */ -#define AT91C_MASTER_CLOCK 59904000 +#define AT91C_MASTER_CLOCK 59904000
-#define AT91_SLOW_CLOCK 32768 /* slow clock */ +#define CONFIG_ARM920T 1 /* This is an ARM920T Core */ +#define CONFIG_AT91RM9200 1 /* It's an Atmel AT91RM9200 SoC */ +#define CONFIG_AT91RM9200EK 1 /* on an AT91RM9200EK Board */ +#define CONFIG_CPUAT91 1 /* we use newer AT91 code */ +#define USE_920T_MMU 1
-#define CONFIG_ARM920T 1 /* This is an ARM920T Core */ -#define CONFIG_AT91RM9200 1 /* It's an Atmel AT91RM9200 SoC */ -#define CONFIG_AT91RM9200EK 1 /* on an AT91RM9200EK Board */ -#undef CONFIG_USE_IRQ /* we don't need IRQ/FIQ stuff */ -#define USE_920T_MMU 1 +#define CONFIG_CMDLINE_TAG 1 /* enable passing of ATAGs */ +#define CONFIG_SETUP_MEMORY_TAGS 1 +#define CONFIG_INITRD_TAG 1
-#define CONFIG_CMDLINE_TAG 1 /* enable passing of ATAGs */ -#define CONFIG_SETUP_MEMORY_TAGS 1 -#define CONFIG_INITRD_TAG 1 +/* for convenient sizes */ +#include <asm/sizes.h> +/* + * Memory Configuration + */ +#define CONFIG_NR_DRAM_BANKS 1 +#define CONFIG_SYS_SDRAM_BASE 0x20000000 +#define CONFIG_SYS_SDRAM_SIZE SZ_32M + +#define CONFIG_SYS_MEMTEST_START CONFIG_SYS_SDRAM_BASE +#define CONFIG_SYS_MEMTEST_END \ + (CONFIG_SYS_MEMTEST_START + CONFIG_SYS_SDRAM_SIZE - SZ_256K)
/* * LowLevel Init */ #ifndef CONFIG_SKIP_LOWLEVEL_INIT -#define CONFIG_SYS_USE_MAIN_OSCILLATOR 1 +#define CONFIG_SYS_USE_MAIN_OSCILLATOR 1 /* flash */ #define CONFIG_SYS_EBI_CFGR_VAL 0x00000000 #define CONFIG_SYS_SMC_CSR0_VAL 0x00003284 /* 16bit, 2 TDF, 4 WS */ @@ -73,36 +86,22 @@ #define CONFIG_SYS_PIOC_PDR_VAL 0xFFFF0000 #define CONFIG_SYS_EBI_CSA_VAL 0x00000002 /* CS1=CONFIG_SYS_SDRAM */ #define CONFIG_SYS_SDRC_CR_VAL 0x2188c155 /* set up the CONFIG_SYS_SDRAM */ -#define CONFIG_SYS_SDRAM 0x20000000 /* address of the CONFIG_SYS_SDRAM */ -#define CONFIG_SYS_SDRAM1 0x20000080 /* address of the CONFIG_SYS_SDRAM */ +#define CONFIG_SYS_SDRAM CONFIG_SYS_SDRAM_BASE /* address of the SDRAM */ +#define CONFIG_SYS_SDRAM1 CONFIG_SYS_SDRAM_BASE /* address of the SDRAM */ #define CONFIG_SYS_SDRAM_VAL 0x00000000 /* value written to CONFIG_SYS_SDRAM */ #define CONFIG_SYS_SDRC_MR_VAL 0x00000002 /* Precharge All */ #define CONFIG_SYS_SDRC_MR_VAL1 0x00000004 /* refresh */ #define CONFIG_SYS_SDRC_MR_VAL2 0x00000003 /* Load Mode Register */ #define CONFIG_SYS_SDRC_MR_VAL3 0x00000000 /* Normal Mode */ #define CONFIG_SYS_SDRC_TR_VAL 0x000002E0 /* Write refresh rate */ -#else -#define CONFIG_SKIP_RELOCATE_UBOOT #endif /* CONFIG_SKIP_LOWLEVEL_INIT */
/* hardcode so no __divsi3 : AT91C_MASTER_CLOCK / baudrate / 16 */ #define CONFIG_SYS_AT91C_BRGR_DIVISOR 33
/* - * Memory Configuration - */ -#define CONFIG_NR_DRAM_BANKS 1 -#define PHYS_SDRAM 0x20000000 -#define PHYS_SDRAM_SIZE 0x02000000 /* 32 megs */ - -#define CONFIG_SYS_MEMTEST_START PHYS_SDRAM -#define CONFIG_SYS_MEMTEST_END \ - (CONFIG_SYS_MEMTEST_START + PHYS_SDRAM_SIZE - 262144) - -/* * Hardware drivers */ - /* * UART Configuration * @@ -113,10 +112,6 @@ #define CONFIG_DBGU #undef CONFIG_USART0 #undef CONFIG_USART1 -/* don't include RTS/CTS flow control support */ -#undef CONFIG_HWFLOW -/* disable modem initialization stuff */ -#undef CONFIG_MODEM_SUPPORT
#define CONFIG_SYS_BAUDRATE_TABLE {115200 , 19200, 38400, 57600, 9600 } #define CONFIG_BAUDRATE 115200 @@ -130,59 +125,26 @@ #define CONFIG_CMD_FAT #define CONFIG_CMD_MII #define CONFIG_CMD_PING - -#undef CONFIG_CMD_BDI -#undef CONFIG_CMD_IMI #undef CONFIG_CMD_FPGA -#undef CONFIG_CMD_MISC -#undef CONFIG_CMD_LOADS - -#include <asm/arch/AT91RM9200.h> /* needed for port definitions */ -/* Options for MMC/SD Card */ -#define CONFIG_DOS_PARTITION 1 -#undef CONFIG_MMC -#define CONFIG_SYS_MMC_BASE 0xFFFB4000 -#define CONFIG_SYS_MMC_BLOCKSIZE 512
+#include <asm/arch/hardware.h> /* needed for port definitions */ /* * Network Driver Setting */ #define CONFIG_NET_MULTI 1 -#ifdef CONFIG_NET_MULTI #define CONFIG_DRIVER_AT91EMAC 1 -#define CONFIG_SYS_RX_ETH_BUFFER 8 -#else -#define CONFIG_DRIVER_ETHER 1 -#endif -#define CONFIG_NET_RETRY_COUNT 20 -#define CONFIG_AT91C_USE_RMII - -/* - * AC Characteristics - * DLYBS = tCSS = 250ns min and DLYBCT = tCSH = 250ns - */ -#define DATAFLASH_TCSS (0xC << 16) -#define DATAFLASH_TCHS (0x1 << 24) - -#if defined(CONFIG_HAS_DATAFLASH) -#define CONFIG_SYS_SPI_WRITE_TOUT (5 * CONFIG_SYS_HZ) -#define CONFIG_SYS_MAX_DATAFLASH_BANKS 2 -#define CONFIG_SYS_MAX_DATAFLASH_PAGES 16384 -/* Logical adress for CS0 */ -#define CONFIG_SYS_DATAFLASH_LOGIC_ADDR_CS0 0xC0000000 -/* Logical adress for CS3 */ -#define CONFIG_SYS_DATAFLASH_LOGIC_ADDR_CS3 0xD0000000 -#define CONFIG_SYS_SUPPORT_BLOCK_ERASE 1 -#define CONFIG_SYS_DATAFLASH_MMC_PIO AT91C_PIO_PB22 -#endif +#define CONFIG_SYS_RX_ETH_BUFFER 16 +#define CONFIG_RMII 1 +#define CONFIG_MII 1
/* * NOR Flash */ -#define CONFIG_SYS_FLASH_BASE 0x10000000 -#define PHYS_FLASH_SIZE 0x800000 /* 8MB */ -#define CONFIG_SYS_FLASH_CFI 1 #define CONFIG_FLASH_CFI_DRIVER 1 +#define CONFIG_SYS_FLASH_CFI 1 +#define CONFIG_SYS_FLASH_BASE 0x10000000 +#define PHYS_FLASH_1 CONFIG_SYS_FLASH_BASE +#define PHYS_FLASH_SIZE SZ_8M #define CONFIG_SYS_MAX_FLASH_BANKS 1 #define CONFIG_SYS_MAX_FLASH_SECT 256 #define CONFIG_SYS_FLASH_PROTECTION @@ -190,88 +152,26 @@ /* * Environment Settings */ -#ifdef CONFIG_ENV_IS_IN_DATAFLASH -/* - * Datasflash Environment Settings - */ -#define CONFIG_ENV_OFFSET 0x4200 -#define CONFIG_ENV_ADDR \ - (CONFIG_SYS_DATAFLASH_LOGIC_ADDR_CS0 + CONFIG_ENV_OFFSET) -/* 8 * 1056 really , but start.s is not OK with this*/ -#define CONFIG_ENV_SIZE 0x2000 - -#else -/* - * NOR Flash Environment Settings - */ #define CONFIG_ENV_IS_IN_FLASH 1
-#ifdef CONFIG_SKIP_LOWLEVEL_INIT -/* - * between boot.bin and u-boot.bin.gz - */ -#define CONFIG_ENV_ADDR (CONFIG_SYS_FLASH_BASE + 0xe000) -#define CONFIG_ENV_SIZE 0x10000 /* sectors are 64K here */ -#else /* * after u-boot.bin */ #define CONFIG_ENV_ADDR \ (CONFIG_SYS_FLASH_BASE + CONFIG_SYS_MONITOR_LEN) -#define CONFIG_ENV_SIZE 0x10000 /* sectors are 64K here */ +#define CONFIG_ENV_SIZE SZ_64K /* sectors are 64K here */ /* The following #defines are needed to get flash environment right */ #define CONFIG_SYS_MONITOR_BASE CONFIG_SYS_FLASH_BASE -#define CONFIG_SYS_MONITOR_LEN \ - (CONFIG_SYS_BOOT_SIZE + CONFIG_SYS_U_BOOT_SIZE) -#endif /* CONFIG_SKIP_LOWLEVEL_INIT */ - -#endif /* CONFIG_ENV_IS_IN_DATAFLASH */ +#define CONFIG_SYS_MONITOR_LEN SZ_256K
/* * Boot option */ #define CONFIG_BOOTDELAY 3
-#ifdef CONFIG_SKIP_LOWLEVEL_INIT -/* boot.bin, env, u-boot.bin.gz */ -#define CONFIG_SYS_BOOT_SIZE 0x6000 /* 24 KBytes */ -#define CONFIG_SYS_U_BOOT_BASE (CONFIG_SYS_FLASH_BASE + 0x10000) -#define CONFIG_SYS_U_BOOT_SIZE 0x10000 /* 64 KBytes */ -#else -/* u-boot.bin */ -#define CONFIG_SYS_BOOT_SIZE 0x0 /* 0 KBytes */ -#define CONFIG_SYS_U_BOOT_BASE CONFIG_SYS_FLASH_BASE -#define CONFIG_SYS_U_BOOT_SIZE 0x40000 /* 128 KBytes */ -#endif /* CONFIG_SKIP_LOWLEVEL_INIT */ - -#define CONFIG_SYS_LOAD_ADDR 0x21000000 /* default load address */ -#define CONFIG_ENV_OVERWRITE 1 - -/* - * USB Config - */ -#define CONFIG_CMD_USB -#define CONFIG_USB_OHCI_NEW 1 -#define CONFIG_USB_KEYBOARD 1 -#define CONFIG_USB_STORAGE 1 -#define CONFIG_DOS_PARTITION 1 - -#undef CONFIG_SYS_USB_OHCI_BOARD_INIT -#define CONFIG_SYS_USB_OHCI_CPU_INIT 1 -#define CONFIG_SYS_USB_OHCI_REGS_BASE AT91_USB_HOST_BASE -#define CONFIG_SYS_USB_OHCI_SLOT_NAME "at91rm9200" -#define CONFIG_SYS_USB_OHCI_MAX_ROOT_PORTS 15 - -/* - * I2C - */ -#define CONFIG_HARD_I2C - -#ifdef CONFIG_HARD_I2C -#define CONFIG_CMD_I2C -#define CONFIG_SYS_I2C_SPEED 0 /* not used */ -#define CONFIG_SYS_I2C_SLAVE 0 /* not used */ -#endif +/* default load address */ +#define CONFIG_SYS_LOAD_ADDR CONFIG_SYS_SDRAM_BASE + SZ_16M +#define CONFIG_ENV_OVERWRITE 1
/* * Shell Settings @@ -288,25 +188,6 @@ #define CONFIG_SYS_PBSIZE \ (CONFIG_SYS_CBSIZE + sizeof(CONFIG_SYS_PROMPT) + 16)
-#ifndef __ASSEMBLY__ -/*----------------------------------------------------------------------- - * Board specific extension for bd_info - * - * This structure is embedded in the global bd_info (bd_t) structure - * and can be used by the board specific code (eg board/...) - */ - -struct bd_info_ext { - /* helper variable for board environment handling - * - * env_crc_valid == 0 => uninitialised - * env_crc_valid > 0 => environment crc in flash is valid - * env_crc_valid < 0 => environment crc in flash is invalid - */ - int env_crc_valid; -}; -#endif - #define CONFIG_SYS_HZ 1000 /* * AT91C_TC0_CMR is implicitly set to @@ -317,12 +198,15 @@ struct bd_info_ext { /* * Size of malloc() pool */ -#define CONFIG_SYS_MALLOC_LEN ROUND(3 * CONFIG_ENV_SIZE + 128 * 1024 \ - , 0x1000) +#define CONFIG_SYS_MALLOC_LEN ROUND(3 * CONFIG_ENV_SIZE + SZ_128K, \ + SZ_4K) /* size in bytes reserved for initial data */ #define CONFIG_SYS_GBL_DATA_SIZE 128
-#define CONFIG_STACKSIZE (32 * 1024) /* regular stack */ -#define CONFIG_STACKSIZE_IRQ (4 * 1024) /* Unsure if to big or to small*/ -#define CONFIG_STACKSIZE_FIQ (4 * 1024) /* Unsure if to big or to small*/ -#endif +#define CONFIG_SYS_INIT_SP_ADDR (CONFIG_SYS_SDRAM_BASE + SZ_4K \ + - CONFIG_SYS_GBL_DATA_SIZE) + +#define CONFIG_STACKSIZE SZ_32K /* regular stack */ +#define CONFIG_STACKSIZE_IRQ SZ_4K /* Unsure if to big or to small*/ +#define CONFIG_STACKSIZE_FIQ SZ_4K /* Unsure if to big or to small*/ +#endif /* __AT91RM9200EK_CONFIG_H__ */

Dear Andreas Bießmann,
+Andreas Bie�mannandreas.devel@gmail.com
On my e-Mail client the sharp-s in the commit shows wrongly, however it does show ok in the e-mail header itself.
int board_init (void) {
- at91_pio_t *pio = (at91_pio_t *)AT91_PIO_BASE;
- /* Enable Ctrlc */
- console_init_f ();
- console_init_f();
I think that console_init_f is done in the arm/board.c already, please verify that.
diff --git a/board/atmel/at91rm9200ek/config.mk b/board/atmel/at91rm9200ek/config.mk index 9ce161e..7b99e02 100644 --- a/board/atmel/at91rm9200ek/config.mk +++ b/board/atmel/at91rm9200ek/config.mk @@ -1 +1,2 @@ -TEXT_BASE = 0x21f00000 +# currently only NOR flash booting is supported +TEXT_BASE = 0x10000000
Currently TEXT_BASE is being changed to CONFIG_ and moved to the <board>.h file, thus removing the need for a <board>/config.mk.
I'm not sure when to pick up this patch and how it will merge. Wolfgang?
diff --git a/include/configs/at91rm9200ek.h b/include/configs/at91rm9200ek.h index 145c3c3..8e9db92 100644 --- a/include/configs/at91rm9200ek.h +++ b/include/configs/at91rm9200ek.h
...
/* ARM asynchronous clock */ /*
- from 18.432 MHz crystal
- (18432000 / 4 * 39)
*/ -#define AT91C_MAIN_CLOCK 179712000 +#define AT91C_MAIN_CLOCK 179712000 /*
- peripheral clock
- (AT91C_MASTER_CLOCK / 3)
*/ -#define AT91C_MASTER_CLOCK 59904000 +#define AT91C_MASTER_CLOCK 59904000
I wonder if it would be possible to do the calculations in the defines like #define AT91C_MAIN_CLOCK ((AT91C_XTAL_CLOCK/4)*39). You get the idea...
-#define AT91_SLOW_CLOCK 32768 /* slow clock */ +#define CONFIG_ARM920T 1 /* This is an ARM920T Core */ +#define CONFIG_AT91RM9200 1 /* It's an Atmel AT91RM9200 SoC */ +#define CONFIG_AT91RM9200EK 1 /* on an AT91RM9200EK Board */ +#define CONFIG_CPUAT91 1 /* we use newer AT91 code */ +#define USE_920T_MMU 1
-#define CONFIG_ARM920T 1 /* This is an ARM920T Core */ -#define CONFIG_AT91RM9200 1 /* It's an Atmel AT91RM9200 SoC */ -#define CONFIG_AT91RM9200EK 1 /* on an AT91RM9200EK Board */ -#undef CONFIG_USE_IRQ /* we don't need IRQ/FIQ stuff */ -#define USE_920T_MMU 1 +#define CONFIG_CMDLINE_TAG 1 /* enable passing of ATAGs */ +#define CONFIG_SETUP_MEMORY_TAGS 1 +#define CONFIG_INITRD_TAG 1
-#define CONFIG_CMDLINE_TAG 1 /* enable passing of ATAGs */ -#define CONFIG_SETUP_MEMORY_TAGS 1 -#define CONFIG_INITRD_TAG 1
On all files we touch, we want to change "#define SOMETHING 1" into "#define SOMETHING" when the value itself is not used. Please try to fix that globally.
@@ -113,10 +112,6 @@ #define CONFIG_DBGU #undef CONFIG_USART0 #undef CONFIG_USART1
Don't #undef what has never been defined.
+#include<asm/arch/hardware.h> /* needed for port definitions */
Are you sure that is needed in the midst of <board>.h?
Best Regards, Reinhard

Dear Reinhard Meyer,
In message 4CBB3B3B.8040408@emk-elektronik.de you wrote:
--- a/board/atmel/at91rm9200ek/config.mk +++ b/board/atmel/at91rm9200ek/config.mk @@ -1 +1,2 @@ -TEXT_BASE = 0x21f00000 +# currently only NOR flash booting is supported +TEXT_BASE = 0x10000000
Currently TEXT_BASE is being changed to CONFIG_ and moved to the <board>.h file, thus removing the need for a <board>/config.mk.
I'm not sure when to pick up this patch and how it will merge. Wolfgang?
The patch was submitted while the MW was open, so it should go in now (assuming there are no issues that need to be fixed first).
If needed I will try to resolve any merge conflicts, but as I cannot test this, and as it seems that other fixes are needed anyway, it would make sense that a resubmission is based on top of the Makefile-cleanup patch series.
Best regards,
Wolfgang Denk

Dear Wolfgang Denk,
Am 17.10.2010 um 20:40 schrieb Wolfgang Denk:
Dear Reinhard Meyer,
In message 4CBB3B3B.8040408@emk-elektronik.de you wrote:
I'm not sure when to pick up this patch and how it will merge. Wolfgang?
The patch was submitted while the MW was open, so it should go in now (assuming there are no issues that need to be fixed first).
sorry for being late. Is it OK to get the address changes integrated til monday evening?
regards
Andreas Bießmann

Dear Andreas,
In message B0398CA3-8E89-40ED-8E79-396F4B4B8B01@googlemail.com you wrote:
The patch was submitted while the MW was open, so it should go in now (assuming there are no issues that need to be fixed first).
sorry for being late. Is it OK to get the address changes integrated til monday evening?
Sure.
Best regards,
Wolfgang Denk

Dear Reinhard Meyer,
Am 17.10.2010 um 20:06 schrieb Reinhard Meyer:
Dear Andreas Bießmann,
+Andreas Bie�mannandreas.devel@gmail.com
On my e-Mail client the sharp-s in the commit shows wrongly, however it does show ok in the e-mail header itself.
int board_init (void) {
- at91_pio_t *pio = (at91_pio_t *)AT91_PIO_BASE;
- /* Enable Ctrlc */
- console_init_f ();
- console_init_f();
I think that console_init_f is done in the arm/board.c already, please verify that.
Yes it is really. The call on this place is historic and caused no errors therefore I left it there. But it should be removed.
diff --git a/board/atmel/at91rm9200ek/config.mk b/board/atmel/at91rm9200ek/config.mk index 9ce161e..7b99e02 100644 --- a/board/atmel/at91rm9200ek/config.mk +++ b/board/atmel/at91rm9200ek/config.mk @@ -1 +1,2 @@ -TEXT_BASE = 0x21f00000 +# currently only NOR flash booting is supported +TEXT_BASE = 0x10000000
Currently TEXT_BASE is being changed to CONFIG_ and moved to the <board>.h file, thus removing the need for a <board>/config.mk.
Yes I know. But when submitting this patch the rework for boards.cfg was not upstream.
I'm not sure when to pick up this patch and how it will merge. Wolfgang?
I would prefer to get this patch in 2010.12, I could do the requested changes til monday evening. This board Is the basis for getting the messy at91rm9200 stuff cleaned up. I hope to get most drivers merged with current at91 code basis for 2011.03.
diff --git a/include/configs/at91rm9200ek.h b/include/configs/at91rm9200ek.h index 145c3c3..8e9db92 100644 --- a/include/configs/at91rm9200ek.h +++ b/include/configs/at91rm9200ek.h
...
/* ARM asynchronous clock */ /*
- from 18.432 MHz crystal
- (18432000 / 4 * 39)
*/ -#define AT91C_MAIN_CLOCK 179712000 +#define AT91C_MAIN_CLOCK 179712000 /*
- peripheral clock
- (AT91C_MASTER_CLOCK / 3)
*/ -#define AT91C_MASTER_CLOCK 59904000 +#define AT91C_MASTER_CLOCK 59904000
I wonder if it would be possible to do the calculations in the defines like #define AT91C_MAIN_CLOCK ((AT91C_XTAL_CLOCK/4)*39). You get the idea...
Sounds better ...
-#define AT91_SLOW_CLOCK 32768 /* slow clock */ +#define CONFIG_ARM920T 1 /* This is an ARM920T Core */ +#define CONFIG_AT91RM9200 1 /* It's an Atmel AT91RM9200 SoC */ +#define CONFIG_AT91RM9200EK 1 /* on an AT91RM9200EK Board */ +#define CONFIG_CPUAT91 1 /* we use newer AT91 code */ +#define USE_920T_MMU 1
-#define CONFIG_ARM920T 1 /* This is an ARM920T Core */ -#define CONFIG_AT91RM9200 1 /* It's an Atmel AT91RM9200 SoC */ -#define CONFIG_AT91RM9200EK 1 /* on an AT91RM9200EK Board */ -#undef CONFIG_USE_IRQ /* we don't need IRQ/FIQ stuff */ -#define USE_920T_MMU 1 +#define CONFIG_CMDLINE_TAG 1 /* enable passing of ATAGs */ +#define CONFIG_SETUP_MEMORY_TAGS 1 +#define CONFIG_INITRD_TAG 1
-#define CONFIG_CMDLINE_TAG 1 /* enable passing of ATAGs */ -#define CONFIG_SETUP_MEMORY_TAGS 1 -#define CONFIG_INITRD_TAG 1
On all files we touch, we want to change "#define SOMETHING 1" into "#define SOMETHING" when the value itself is not used. Please try to fix that globally.
NP
@@ -113,10 +112,6 @@ #define CONFIG_DBGU #undef CONFIG_USART0 #undef CONFIG_USART1
Don't #undef what has never been defined.
You know this is historic. This are the three possible interfaces for USART on this board. At least at91rm9200 known about DBGU ;) This will be addressed when merging at91rm9200/at91 and maybe avr32 usart implementation.
+#include<asm/arch/hardware.h> /* needed for port definitions */
Are you sure that is needed in the midst of <board>.h?
Should move some lines up ...
Regards
Andreas Bießmann

Dear Andreas Bießmann,
Yes it is really. The call on this place is historic and caused no errors therefore I left it there. But it should be removed.
The same issue is in other AT91 boards as well.
@@ -113,10 +112,6 @@ #define CONFIG_DBGU #undef CONFIG_USART0 #undef CONFIG_USART1
Don't #undef what has never been defined.
You know this is historic. This are the three possible interfaces for USART on this board. At least at91rm9200 known about DBGU ;) This will be addressed when merging at91rm9200/at91 and maybe avr32 usart implementation.
I know, its like that in almost all Atmel based boards. Even worse is the AT91 method, since some AT91 can have 6 UARTs. However unlikely that they are going to be used as console, this is awfully bad = <at91sam9260_ek.h>:
#define CONFIG_ATMEL_USART 1 #undef CONFIG_USART0 #undef CONFIG_USART1 #undef CONFIG_USART2 #define CONFIG_USART3 1 /* USART 3 is DBGU */ Notice the last define !!!
I once tried to cleanup that a bit, but it really would affect files all across AT91.
Best Regards, Reinhard

Dear Reinhard Meyer,
Am 18.10.2010 10:40, schrieb Reinhard Meyer:
Dear Andreas Bießmann,
@@ -113,10 +112,6 @@ #define CONFIG_DBGU #undef CONFIG_USART0 #undef CONFIG_USART1
Don't #undef what has never been defined.
You know this is historic. This are the three possible interfaces for USART on this board. At least at91rm9200 known about DBGU ;) This will be addressed when merging at91rm9200/at91 and maybe avr32 usart implementation.
I know, its like that in almost all Atmel based boards. Even worse is the AT91 method, since some AT91 can have 6 UARTs. However unlikely that they are going to be used as console, this is awfully bad = <at91sam9260_ek.h>:
#define CONFIG_ATMEL_USART 1 #undef CONFIG_USART0 #undef CONFIG_USART1 #undef CONFIG_USART2 #define CONFIG_USART3 1 /* USART 3 is DBGU */ Notice the last define !!!
I know that ...
I once tried to cleanup that a bit, but it really would affect files all across AT91.
I plan to merge at91rm9200_usart and at91_usart for 2011.03. It will introduce clear naming scheme in at91 (USRT3 vs DBGU). Also I plan to remove the necessity to hardcode the base addresses in header of at91_usart.c. But to do this we need a clean basis to test the changes. Eg. at91rm9200ek and at91sam9260ek (i can get one from time to time) or your at91sam9263 based boards. I also think a lot of avr32 stuff could merge into the same drivers ... will have a look for that in future.
I do all of this in spare time at home therefore I go only little steps ... But currently are all arm boards broken (relocation), therefore is now the time to introduce new interfaces. Do you think the same way?
regards
Andreas Bießmann

Dear Andreas Bießmann,
I plan to merge at91rm9200_usart and at91_usart for 2011.03. It will introduce clear naming scheme in at91 (USRT3 vs DBGU). Also I plan to remove the necessity to hardcode the base addresses in header of at91_usart.c. But to do this we need a clean basis to test the changes.
at91sam9* uses "atmel_usart", not "at91_usart". You should merge the "rm" usart into "atmel_usart" which currently works for AT91SAM9 and AVR32.
From there we got the "hangover" of the UART3 trick.
At the end we should have a clean "atmel_usart" that works for "RM", too. Maybe we can make it happen that the "init" function gets the address of the USART to use, similar to other (lan) interfaces, instead of odd defines and #ifdef cascades that hardcode addresses.
For testing purposes it would be "nice" if u-boot could have several uarts initialized and a simple "talk" command that patches serial data bidirectionally from console to any usart available (for example to simply check a connected GPS receiver or modem for function. "talk usart3 4800n81 0x1a" or alike ;)
Eg. at91rm9200ek and at91sam9260ek (i can get one from time to time) or your at91sam9263 based boards. I also think a lot of avr32 stuff could merge into the same drivers ... will have a look for that in future.
My board (top9000) is AT91SAM9XE based (thats a flavout of the 9260, notice that it uses at91sam9260.h in where "*XE*" changes a few defines.
Thats probably the only AT91SAM9 board that works with relocation. The port is in the "WIP" branch of "u-boot-atmel", if you want to have a look at it. I don't think the top9000 port is ready for mainline yet (there are still going to be small changes), but I could provide a patch if Wolfgang agrees to a premature version.
I do all of this in spare time at home therefore I go only little steps
So do I (not being paid for extra work beyond getting the top9000 working).
... But currently are all arm boards broken (relocation), therefore is now the time to introduce new interfaces. Do you think the same way?
Of course. Its just alot of work. And we should plan that to avoid double work ;)
regards
Reinhard

This patch fixes arch-at91/hardware.h to have the relevant defines for at91rm9200 devices to support existing at91 usb driver.
Signed-off-by: Andreas Bießmann andreas.devel@googlemail.com --- arch/arm/include/asm/arch-at91/hardware.h | 1 + 1 files changed, 1 insertions(+), 0 deletions(-)
diff --git a/arch/arm/include/asm/arch-at91/hardware.h b/arch/arm/include/asm/arch-at91/hardware.h index 9f732a7..f5f80e0 100644 --- a/arch/arm/include/asm/arch-at91/hardware.h +++ b/arch/arm/include/asm/arch-at91/hardware.h @@ -18,6 +18,7 @@
#if defined(CONFIG_AT91RM9200) #include <asm/arch-at91/at91rm9200.h> +#define AT91_PMC_UHP AT91RM9200_PMC_UHP #elif defined(CONFIG_AT91SAM9260) || defined(CONFIG_AT91SAM9G20) #include <asm/arch/at91sam9260.h> #define AT91_BASE_MCI AT91SAM9260_BASE_MCI

This patch enables USB for at91rm9200ek board.
Signed-off-by: Andreas Bießmann andreas.devel@googlemail.com --- include/configs/at91rm9200ek.h | 15 +++++++++++++++ 1 files changed, 15 insertions(+), 0 deletions(-)
diff --git a/include/configs/at91rm9200ek.h b/include/configs/at91rm9200ek.h index 8e9db92..d1565be 100644 --- a/include/configs/at91rm9200ek.h +++ b/include/configs/at91rm9200ek.h @@ -125,6 +125,7 @@ #define CONFIG_CMD_FAT #define CONFIG_CMD_MII #define CONFIG_CMD_PING +#define CONFIG_CMD_USB #undef CONFIG_CMD_FPGA
#include <asm/arch/hardware.h> /* needed for port definitions */ @@ -150,6 +151,20 @@ #define CONFIG_SYS_FLASH_PROTECTION
/* + * USB Config + */ +#define CONFIG_USB_ATMEL 1 +#define CONFIG_USB_OHCI_NEW 1 +#define CONFIG_USB_KEYBOARD 1 +#define CONFIG_USB_STORAGE 1 +#define CONFIG_DOS_PARTITION 1 + +#define CONFIG_SYS_USB_OHCI_CPU_INIT 1 +#define CONFIG_SYS_USB_OHCI_REGS_BASE AT91_USB_HOST_BASE +#define CONFIG_SYS_USB_OHCI_SLOT_NAME "at91rm9200" +#define CONFIG_SYS_USB_OHCI_MAX_ROOT_PORTS 15 + +/* * Environment Settings */ #define CONFIG_ENV_IS_IN_FLASH 1

This patch removes some functionality from at91rm9200ek board but the remaining functionality does now work with newer at91 code and arm-relocation.
Currently missing features are: - dataflash booting (due to missing HW for testing) - MMC/SD-Card - first stage bootloader support is completely removed (not needed for NOR)
Cause this board was (some days ago) reference for all at91rm9200 based boards this should be a good starting point to convert all remaining at91rm9200 borads to at91 code. Aside from that this is a good base to get some drivers between at91sam/at91rm/avr32 merged.
Signed-off-by: Andreas Bießmann andreas.devel@googlemail.com --- v2: - address changes in config-header/main implementation file - additionally remove mux.c/partitions.c, these files are unneeded cause dataflash support is currently disabled - minor comment changes - config.mk is based on top of current u-boot-testing.git/Makefile-cleanup
MAINTAINERS | 4 + board/atmel/at91rm9200ek/Makefile | 5 - board/atmel/at91rm9200ek/at91rm9200ek.c | 60 ++----- board/atmel/at91rm9200ek/config.mk | 3 +- board/atmel/at91rm9200ek/led.c | 58 +++---- board/atmel/at91rm9200ek/misc.c | 50 ------ board/atmel/at91rm9200ek/mux.c | 38 ----- board/atmel/at91rm9200ek/partition.c | 38 ----- boards.cfg | 2 +- include/configs/at91rm9200ek.h | 275 ++++++++---------------------- 10 files changed, 124 insertions(+), 409 deletions(-) delete mode 100644 board/atmel/at91rm9200ek/misc.c delete mode 100644 board/atmel/at91rm9200ek/mux.c delete mode 100644 board/atmel/at91rm9200ek/partition.c
diff --git a/MAINTAINERS b/MAINTAINERS index e003226..771e120 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -563,6 +563,10 @@ Rishi Bhattacharya rishi@ti.com
omap5912osk ARM926EJS
+Andreas Bie�mann andreas.devel@gmail.com + + at91rm9200ek at91rm9200 + Cliff Brake cliff.brake@gmail.com
pxa255_idp xscale diff --git a/board/atmel/at91rm9200ek/Makefile b/board/atmel/at91rm9200ek/Makefile index 500ce72..96a0f05 100644 --- a/board/atmel/at91rm9200ek/Makefile +++ b/board/atmel/at91rm9200ek/Makefile @@ -27,11 +27,6 @@ LIB = $(obj)lib$(BOARD).a
COBJS-y += $(BOARD).o COBJS-y += led.o -COBJS-y += misc.o -ifdef CONFIG_HAS_DATAFLASH -COBJS-$(CONFIG_DATAFLASH_MMC_SELECT) += mux.o -COBJS-y += partition.o -endif
SRCS := $(SOBJS:.o=.S) $(COBJS-y:.o=.c) OBJS := $(addprefix $(obj),$(COBJS-y)) diff --git a/board/atmel/at91rm9200ek/at91rm9200ek.c b/board/atmel/at91rm9200ek/at91rm9200ek.c index 570a09a..d242583 100644 --- a/board/atmel/at91rm9200ek/at91rm9200ek.c +++ b/board/atmel/at91rm9200ek/at91rm9200ek.c @@ -1,4 +1,8 @@ /* + * (C) Copyright 2010 Andreas Bießmann andreas.devel@gmail.com + * + * derived from previous work + * * (C) Copyright 2002 * Sysgo Real-Time Solutions, GmbH <www.elinos.com> * Marius Groeger mgroeger@sysgo.de @@ -23,78 +27,44 @@ */
#include <common.h> -#include <exports.h> #include <netdev.h> -#include <asm/arch/AT91RM9200.h> +#include <asm/arch/hardware.h> +#include <asm/arch/at91_pio.h> +#include <asm/arch/at91_pmc.h> #include <asm/io.h> -#if defined(CONFIG_DRIVER_ETHER) -#include <at91rm9200_net.h> -#include <dm9161.h> -#endif
DECLARE_GLOBAL_DATA_PTR;
/* ------------------------------------------------------------------------- */ -/* - * Miscelaneous platform dependent initialisations - */ - -int board_init (void) +int board_init(void) { - /* Enable Ctrlc */ - console_init_f (); + at91_pio_t *pio = (at91_pio_t *)AT91_PIO_BASE;
/* * Correct IRDA resistor problem * Set PA23_TXD in Output */ - writel(AT91C_PA23_TXD2, ((AT91PS_PIO) AT91C_BASE_PIOA)->PIO_OER); - - /* - * memory and cpu-speed are setup before relocation - * so we do _nothing_ here - */ + writel(AT91_PMX_AA_TXD2, &pio->pioa.oer);
/* arch number of AT91RM9200EK-Board */ gd->bd->bi_arch_number = MACH_TYPE_AT91RM9200EK; /* adress of boot parameters */ - gd->bd->bi_boot_params = PHYS_SDRAM + 0x100; + gd->bd->bi_boot_params = CONFIG_SYS_SDRAM_BASE + 0x100;
return 0; }
int dram_init (void) { - gd->bd->bi_dram[0].start = PHYS_SDRAM; - gd->bd->bi_dram[0].size = PHYS_SDRAM_SIZE; + /* dram_init must store complete ramsize in gd->ram_size */ + gd->ram_size = get_ram_size((volatile long *)CONFIG_SYS_SDRAM_BASE, + CONFIG_SYS_SDRAM_SIZE); return 0; }
-#if defined(CONFIG_DRIVER_ETHER) && defined(CONFIG_CMD_NET) -/* - * Name: - * at91rm9200_GetPhyInterface - * Description: - * Initialise the interface functions to the PHY - * Arguments: - * None - * Return value: - * None - */ -void at91rm9200_GetPhyInterface(AT91PS_PhyOps p_phyops) -{ - p_phyops->Init = dm9161_InitPhy; - p_phyops->IsPhyConnected = dm9161_IsPhyConnected; - p_phyops->GetLinkSpeed = dm9161_GetLinkSpeed; - p_phyops->AutoNegotiate = dm9161_AutoNegotiate; -} -#endif - #ifdef CONFIG_DRIVER_AT91EMAC int board_eth_init(bd_t *bis) { - int rc = 0; - rc = at91emac_register(bis, 0); - return rc; + return at91emac_register(bis, (u32) AT91_EMAC_BASE); } #endif diff --git a/board/atmel/at91rm9200ek/config.mk b/board/atmel/at91rm9200ek/config.mk index 2077692..c7323fe 100644 --- a/board/atmel/at91rm9200ek/config.mk +++ b/board/atmel/at91rm9200ek/config.mk @@ -1 +1,2 @@ -CONFIG_SYS_TEXT_BASE = 0x21f00000 +# currently only NOR flash booting is supported +CONFIG_SYS_TEXT_BASE = 0x10000000 diff --git a/board/atmel/at91rm9200ek/led.c b/board/atmel/at91rm9200ek/led.c index 9464952..8d512e0 100644 --- a/board/atmel/at91rm9200ek/led.c +++ b/board/atmel/at91rm9200ek/led.c @@ -3,6 +3,9 @@ * Atmel Nordic AB <www.atmel.com> * Ulf Samuelsson ulf@atmel.com * + * (C) Copyright 2010 + * Andreas Bießmann andreas.devel@gmail.com + * * See file CREDITS for list of people who contributed to this * project. * @@ -23,67 +26,62 @@ */
#include <common.h> -#include <asm/arch/AT91RM9200.h> -#include <asm/io.h> +#include <asm/arch/gpio.h> +#include <asm/arch/at91_pmc.h>
-#define GREEN_LED AT91C_PIO_PB0 -#define YELLOW_LED AT91C_PIO_PB1 -#define RED_LED AT91C_PIO_PB2 +/* bit mask in PIO port B */ +#define GREEN_LED (1<<0) +#define YELLOW_LED (1<<1) +#define RED_LED (1<<2)
void green_LED_on(void) { - AT91PS_PIO PIOB = AT91C_BASE_PIOB; - - writel(GREEN_LED, PIOB->PIO_CODR); + at91_pio_t *pio = (at91_pio_t *)AT91_PIO_BASE; + writel(GREEN_LED, &pio->piob.codr); }
void yellow_LED_on(void) { - AT91PS_PIO PIOB = AT91C_BASE_PIOB; - - writel(YELLOW_LED, PIOB->PIO_CODR); + at91_pio_t *pio = (at91_pio_t *)AT91_PIO_BASE; + writel(YELLOW_LED, &pio->piob.codr); }
void red_LED_on(void) { - AT91PS_PIO PIOB = AT91C_BASE_PIOB; - - writel(RED_LED, PIOB->PIO_CODR); + at91_pio_t *pio = (at91_pio_t *)AT91_PIO_BASE; + writel(RED_LED, &pio->piob.codr); }
void green_LED_off(void) { - AT91PS_PIO PIOB = AT91C_BASE_PIOB; - - writel(GREEN_LED, PIOB->PIO_SODR); + at91_pio_t *pio = (at91_pio_t *)AT91_PIO_BASE; + writel(GREEN_LED, &pio->piob.sodr); }
void yellow_LED_off(void) { - AT91PS_PIO PIOB = AT91C_BASE_PIOB; - - writel(YELLOW_LED, PIOB->PIO_SODR); + at91_pio_t *pio = (at91_pio_t *)AT91_PIO_BASE; + writel(YELLOW_LED, &pio->piob.sodr); }
void red_LED_off(void) { - AT91PS_PIO PIOB = AT91C_BASE_PIOB; - - writel(RED_LED, PIOB->PIO_SODR); + at91_pio_t *pio = (at91_pio_t *)AT91_PIO_BASE; + writel(RED_LED, &pio->piob.sodr); }
- void coloured_LED_init (void) { - AT91PS_PIO PIOB = AT91C_BASE_PIOB; - AT91PS_PMC PMC = AT91C_BASE_PMC; + at91_pmc_t *pmc = (at91_pmc_t *)AT91_PMC_BASE; + at91_pio_t *pio = (at91_pio_t *)AT91_PIO_BASE;
/* Enable PIOB clock */ - writel((1 << AT91C_ID_PIOB), PMC->PMC_PCER); + writel(1 << AT91_ID_PIOB, &pmc->pcer); + /* Disable peripherals on LEDs */ - writel(AT91C_PIO_PB2 | AT91C_PIO_PB1 | AT91C_PIO_PB0, PIOB->PIO_PER); + writel(GREEN_LED | YELLOW_LED | RED_LED, &pio->piob.per); /* Enable pins as outputs */ - writel(AT91C_PIO_PB2 | AT91C_PIO_PB1 | AT91C_PIO_PB0, PIOB->PIO_OER); + writel(GREEN_LED | YELLOW_LED | RED_LED, &pio->piob.oer); /* Turn all LEDs OFF */ - writel(AT91C_PIO_PB2 | AT91C_PIO_PB1 | AT91C_PIO_PB0, PIOB->PIO_SODR); + writel(GREEN_LED | YELLOW_LED | RED_LED, &pio->piob.sodr); } diff --git a/board/atmel/at91rm9200ek/misc.c b/board/atmel/at91rm9200ek/misc.c deleted file mode 100644 index 81de32f..0000000 --- a/board/atmel/at91rm9200ek/misc.c +++ /dev/null @@ -1,50 +0,0 @@ -/* - * (C) Copyright 2002 - * Sysgo Real-Time Solutions, GmbH <www.elinos.com> - * Marius Groeger mgroeger@sysgo.de - * - * 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 <common.h> -#include <asm/arch/AT91RM9200.h> -#include <at91rm9200_net.h> -#include <dm9161.h> -#include <net.h> - -int board_late_init(void) -{ - DECLARE_GLOBAL_DATA_PTR; - - /* Fix Ethernet Initialization Bug when starting Linux from U-Boot */ - eth_init(gd->bd); - return 0; -} - - -/* checks if addr is in RAM */ -int addr2ram(ulong addr) -{ - int result = 0; - - if((addr >= PHYS_SDRAM) && (addr < (PHYS_SDRAM + PHYS_SDRAM_SIZE))) - result = 1; - - return result; -} diff --git a/board/atmel/at91rm9200ek/mux.c b/board/atmel/at91rm9200ek/mux.c deleted file mode 100644 index bdd44e8..0000000 --- a/board/atmel/at91rm9200ek/mux.c +++ /dev/null @@ -1,38 +0,0 @@ -#include <config.h> -#include <common.h> -#include <asm/hardware.h> -#include <asm/io.h> -#include <dataflash.h> - -int AT91F_GetMuxStatus(void) -{ - /* Set in PIO mode */ - writel(CONFIG_SYS_DATAFLASH_MMC_PIO, AT91C_BASE_PIOB->PIO_PER); - /* Configure in output */ - writel(CONFIG_SYS_DATAFLASH_MMC_PIO, AT91C_BASE_PIOB->PIO_OER); - - if(readl(AT91C_BASE_PIOB->PIO_ODSR) & CONFIG_SYS_DATAFLASH_MMC_PIO) - return 1; - - return 0; -} - -void AT91F_SelectMMC(void) -{ - /* Set in PIO mode */ - writel(CONFIG_SYS_DATAFLASH_MMC_PIO, AT91C_BASE_PIOB->PIO_PER); - /* Configure in output */ - writel(CONFIG_SYS_DATAFLASH_MMC_PIO, AT91C_BASE_PIOB->PIO_OER); - /* Set Output */ - writel(CONFIG_SYS_DATAFLASH_MMC_PIO, AT91C_BASE_PIOB->PIO_SODR); -} - -void AT91F_SelectSPI(void) -{ - /* Set in PIO mode */ - writel(CONFIG_SYS_DATAFLASH_MMC_PIO, AT91C_BASE_PIOB->PIO_PER); - /* Configure in output */ - writel(CONFIG_SYS_DATAFLASH_MMC_PIO, AT91C_BASE_PIOB->PIO_OER); - /* Clear Output */ - writel(CONFIG_SYS_DATAFLASH_MMC_PIO, AT91C_BASE_PIOB->PIO_CODR); -} diff --git a/board/atmel/at91rm9200ek/partition.c b/board/atmel/at91rm9200ek/partition.c deleted file mode 100644 index 990cbcf..0000000 --- a/board/atmel/at91rm9200ek/partition.c +++ /dev/null @@ -1,38 +0,0 @@ -/* - * - * 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 <common.h> -#include <config.h> -#include <asm/hardware.h> -#include <dataflash.h> - -AT91S_DATAFLASH_INFO dataflash_info[CONFIG_SYS_MAX_DATAFLASH_BANKS]; - -struct dataflash_addr cs[CONFIG_SYS_MAX_DATAFLASH_BANKS] = { - {CONFIG_SYS_DATAFLASH_LOGIC_ADDR_CS0, 0}, /* Logical adress, CS */ - {CONFIG_SYS_DATAFLASH_LOGIC_ADDR_CS3, 3} -}; - -/*define the area offsets*/ -dataflash_protect_t area_list[NB_DATAFLASH_AREA] = { - {0x00000000, 0x000041FF, FLAG_PROTECT_SET, 0, "Bootstrap"}, - {0x00004200, 0x000083FF, FLAG_PROTECT_CLEAR, 0, "Environment"}, - {0x00008400, 0x00041FFF, FLAG_PROTECT_SET, 0, "U-Boot"}, - {0x00042000, 0x00251FFF, FLAG_PROTECT_CLEAR, 0, "Kernel"}, - {0x00252000, 0xFFFFFFFF, FLAG_PROTECT_CLEAR, 0, "FS"}, -}; diff --git a/boards.cfg b/boards.cfg index 2bbb742..4cff202 100644 --- a/boards.cfg +++ b/boards.cfg @@ -343,7 +343,7 @@ modnet50 arm arm720t lpc2292sodimm arm arm720t - - lpc2292 eb_cpux9k2 arm arm920t - BuS at91 at91rm9200dk arm arm920t - atmel at91rm9200 -at91rm9200ek arm arm920t - atmel at91rm9200 +at91rm9200ek arm arm920t - atmel at91 sbc2410x arm arm920t - - s3c24x0 smdk2400 arm arm920t - samsung s3c24x0 smdk2410 arm arm920t - samsung s3c24x0 diff --git a/include/configs/at91rm9200ek.h b/include/configs/at91rm9200ek.h index 145c3c3..6b2dd63 100644 --- a/include/configs/at91rm9200ek.h +++ b/include/configs/at91rm9200ek.h @@ -1,4 +1,8 @@ /* + * Copyright (C) 2010 Andreas Bießmann biessmann.devel@googlemail.com + * + * based on previous work by + * * Ulf Samuelsson ulf@atmel.com * Rick Bronson rick@efn.org * @@ -23,40 +27,52 @@ * MA 02111-1307 USA */
-#ifndef __CONFIG_H -#define __CONFIG_H +#ifndef __AT91RM9200EK_CONFIG_H__ +#define __AT91RM9200EK_CONFIG_H__
-#define CONFIG_AT91_LEGACY +#include <asm/sizes.h>
-/* ARM asynchronous clock */ -/* - * from 18.432 MHz crystal - * (18432000 / 4 * 39) - */ -#define AT91C_MAIN_CLOCK 179712000 /* - * peripheral clock - * (AT91C_MASTER_CLOCK / 3) + * AT91C_XTAL_CLOCK is the frequency of external xtal in hertz + * AT91C_MAIN_CLOCK is the frequency of PLLA output + * AT91C_MASTER_CLOCK is the peripherial clock + * CONFIG_SYS_HZ_CLOCK is the value for CCR in tc0 (divider 2 is implicitely + * set in arch/arm/cpu/arm920t/at91/timer.c) + * CONFIG_SYS_HZ is the tick rate for timer tc0 */ -#define AT91C_MASTER_CLOCK 59904000 +#define AT91C_XTAL_CLOCK 18432000 +#define AT91C_MAIN_CLOCK ((AT91C_XTAL_CLOCK / 4) * 39) +#define AT91C_MASTER_CLOCK (AT91C_MAIN_CLOCK / 3 ) +#define CONFIG_SYS_HZ_CLOCK (AT91C_MASTER_CLOCK / 2) +#define CONFIG_SYS_HZ 1000
-#define AT91_SLOW_CLOCK 32768 /* slow clock */ +/* CPU configuration */ +#define CONFIG_ARM920T +#define CONFIG_AT91RM9200 +#define CONFIG_AT91RM9200EK +#define CONFIG_CPUAT91 +#define USE_920T_MMU
-#define CONFIG_ARM920T 1 /* This is an ARM920T Core */ -#define CONFIG_AT91RM9200 1 /* It's an Atmel AT91RM9200 SoC */ -#define CONFIG_AT91RM9200EK 1 /* on an AT91RM9200EK Board */ -#undef CONFIG_USE_IRQ /* we don't need IRQ/FIQ stuff */ -#define USE_920T_MMU 1 +#define CONFIG_CMDLINE_TAG +#define CONFIG_SETUP_MEMORY_TAGS +#define CONFIG_INITRD_TAG + +/* + * Memory Configuration + */ +#define CONFIG_NR_DRAM_BANKS 1 +#define CONFIG_SYS_SDRAM_BASE 0x20000000 +#define CONFIG_SYS_SDRAM_SIZE SZ_32M
-#define CONFIG_CMDLINE_TAG 1 /* enable passing of ATAGs */ -#define CONFIG_SETUP_MEMORY_TAGS 1 -#define CONFIG_INITRD_TAG 1 +#define CONFIG_SYS_MEMTEST_START CONFIG_SYS_SDRAM_BASE +#define CONFIG_SYS_MEMTEST_END \ + (CONFIG_SYS_MEMTEST_START + CONFIG_SYS_SDRAM_SIZE - SZ_256K)
/* * LowLevel Init */ #ifndef CONFIG_SKIP_LOWLEVEL_INIT -#define CONFIG_SYS_USE_MAIN_OSCILLATOR 1 +#define CONFIG_SYS_USE_MAIN_OSCILLATOR /* flash */ #define CONFIG_SYS_EBI_CFGR_VAL 0x00000000 #define CONFIG_SYS_SMC_CSR0_VAL 0x00003284 /* 16bit, 2 TDF, 4 WS */ @@ -73,50 +89,26 @@ #define CONFIG_SYS_PIOC_PDR_VAL 0xFFFF0000 #define CONFIG_SYS_EBI_CSA_VAL 0x00000002 /* CS1=CONFIG_SYS_SDRAM */ #define CONFIG_SYS_SDRC_CR_VAL 0x2188c155 /* set up the CONFIG_SYS_SDRAM */ -#define CONFIG_SYS_SDRAM 0x20000000 /* address of the CONFIG_SYS_SDRAM */ -#define CONFIG_SYS_SDRAM1 0x20000080 /* address of the CONFIG_SYS_SDRAM */ +#define CONFIG_SYS_SDRAM CONFIG_SYS_SDRAM_BASE /* address of the SDRAM */ +#define CONFIG_SYS_SDRAM1 CONFIG_SYS_SDRAM_BASE /* address of the SDRAM */ #define CONFIG_SYS_SDRAM_VAL 0x00000000 /* value written to CONFIG_SYS_SDRAM */ #define CONFIG_SYS_SDRC_MR_VAL 0x00000002 /* Precharge All */ #define CONFIG_SYS_SDRC_MR_VAL1 0x00000004 /* refresh */ #define CONFIG_SYS_SDRC_MR_VAL2 0x00000003 /* Load Mode Register */ #define CONFIG_SYS_SDRC_MR_VAL3 0x00000000 /* Normal Mode */ #define CONFIG_SYS_SDRC_TR_VAL 0x000002E0 /* Write refresh rate */ -#else -#define CONFIG_SKIP_RELOCATE_UBOOT #endif /* CONFIG_SKIP_LOWLEVEL_INIT */
-/* hardcode so no __divsi3 : AT91C_MASTER_CLOCK / baudrate / 16 */ -#define CONFIG_SYS_AT91C_BRGR_DIVISOR 33 - -/* - * Memory Configuration - */ -#define CONFIG_NR_DRAM_BANKS 1 -#define PHYS_SDRAM 0x20000000 -#define PHYS_SDRAM_SIZE 0x02000000 /* 32 megs */ - -#define CONFIG_SYS_MEMTEST_START PHYS_SDRAM -#define CONFIG_SYS_MEMTEST_END \ - (CONFIG_SYS_MEMTEST_START + PHYS_SDRAM_SIZE - 262144) - /* * Hardware drivers */ - /* - * UART Configuration - * - * define one of these to choose the DBGU, - * USART0 or USART1 as console + * Choose a USART for serial console + * CONFIG_DBGU is DBGU unit on J10 + * CONFIG_USART1 is USART1 on J14 */ #define CONFIG_AT91RM9200_USART #define CONFIG_DBGU -#undef CONFIG_USART0 -#undef CONFIG_USART1 -/* don't include RTS/CTS flow control support */ -#undef CONFIG_HWFLOW -/* disable modem initialization stuff */ -#undef CONFIG_MODEM_SUPPORT
#define CONFIG_SYS_BAUDRATE_TABLE {115200 , 19200, 38400, 57600, 9600 } #define CONFIG_BAUDRATE 115200 @@ -130,156 +122,60 @@ #define CONFIG_CMD_FAT #define CONFIG_CMD_MII #define CONFIG_CMD_PING - -#undef CONFIG_CMD_BDI -#undef CONFIG_CMD_IMI #undef CONFIG_CMD_FPGA -#undef CONFIG_CMD_MISC -#undef CONFIG_CMD_LOADS - -#include <asm/arch/AT91RM9200.h> /* needed for port definitions */ -/* Options for MMC/SD Card */ -#define CONFIG_DOS_PARTITION 1 -#undef CONFIG_MMC -#define CONFIG_SYS_MMC_BASE 0xFFFB4000 -#define CONFIG_SYS_MMC_BLOCKSIZE 512
/* * Network Driver Setting */ -#define CONFIG_NET_MULTI 1 -#ifdef CONFIG_NET_MULTI -#define CONFIG_DRIVER_AT91EMAC 1 -#define CONFIG_SYS_RX_ETH_BUFFER 8 -#else -#define CONFIG_DRIVER_ETHER 1 -#endif -#define CONFIG_NET_RETRY_COUNT 20 -#define CONFIG_AT91C_USE_RMII - -/* - * AC Characteristics - * DLYBS = tCSS = 250ns min and DLYBCT = tCSH = 250ns - */ -#define DATAFLASH_TCSS (0xC << 16) -#define DATAFLASH_TCHS (0x1 << 24) - -#if defined(CONFIG_HAS_DATAFLASH) -#define CONFIG_SYS_SPI_WRITE_TOUT (5 * CONFIG_SYS_HZ) -#define CONFIG_SYS_MAX_DATAFLASH_BANKS 2 -#define CONFIG_SYS_MAX_DATAFLASH_PAGES 16384 -/* Logical adress for CS0 */ -#define CONFIG_SYS_DATAFLASH_LOGIC_ADDR_CS0 0xC0000000 -/* Logical adress for CS3 */ -#define CONFIG_SYS_DATAFLASH_LOGIC_ADDR_CS3 0xD0000000 -#define CONFIG_SYS_SUPPORT_BLOCK_ERASE 1 -#define CONFIG_SYS_DATAFLASH_MMC_PIO AT91C_PIO_PB22 -#endif +#define CONFIG_NET_MULTI +#define CONFIG_DRIVER_AT91EMAC +#define CONFIG_SYS_RX_ETH_BUFFER 16 +#define CONFIG_RMII +#define CONFIG_MII
/* * NOR Flash */ -#define CONFIG_SYS_FLASH_BASE 0x10000000 -#define PHYS_FLASH_SIZE 0x800000 /* 8MB */ -#define CONFIG_SYS_FLASH_CFI 1 -#define CONFIG_FLASH_CFI_DRIVER 1 -#define CONFIG_SYS_MAX_FLASH_BANKS 1 -#define CONFIG_SYS_MAX_FLASH_SECT 256 +#define CONFIG_FLASH_CFI_DRIVER +#define CONFIG_SYS_FLASH_CFI +#define CONFIG_SYS_FLASH_BASE 0x10000000 +#define PHYS_FLASH_1 CONFIG_SYS_FLASH_BASE +#define PHYS_FLASH_SIZE SZ_8M +#define CONFIG_SYS_MAX_FLASH_BANKS 1 +#define CONFIG_SYS_MAX_FLASH_SECT 256 #define CONFIG_SYS_FLASH_PROTECTION
/* * Environment Settings */ -#ifdef CONFIG_ENV_IS_IN_DATAFLASH -/* - * Datasflash Environment Settings - */ -#define CONFIG_ENV_OFFSET 0x4200 -#define CONFIG_ENV_ADDR \ - (CONFIG_SYS_DATAFLASH_LOGIC_ADDR_CS0 + CONFIG_ENV_OFFSET) -/* 8 * 1056 really , but start.s is not OK with this*/ -#define CONFIG_ENV_SIZE 0x2000 +#define CONFIG_ENV_IS_IN_FLASH
-#else -/* - * NOR Flash Environment Settings - */ -#define CONFIG_ENV_IS_IN_FLASH 1 - -#ifdef CONFIG_SKIP_LOWLEVEL_INIT -/* - * between boot.bin and u-boot.bin.gz - */ -#define CONFIG_ENV_ADDR (CONFIG_SYS_FLASH_BASE + 0xe000) -#define CONFIG_ENV_SIZE 0x10000 /* sectors are 64K here */ -#else /* * after u-boot.bin */ #define CONFIG_ENV_ADDR \ (CONFIG_SYS_FLASH_BASE + CONFIG_SYS_MONITOR_LEN) -#define CONFIG_ENV_SIZE 0x10000 /* sectors are 64K here */ +#define CONFIG_ENV_SIZE SZ_64K /* sectors are 64K here */ /* The following #defines are needed to get flash environment right */ #define CONFIG_SYS_MONITOR_BASE CONFIG_SYS_FLASH_BASE -#define CONFIG_SYS_MONITOR_LEN \ - (CONFIG_SYS_BOOT_SIZE + CONFIG_SYS_U_BOOT_SIZE) -#endif /* CONFIG_SKIP_LOWLEVEL_INIT */ - -#endif /* CONFIG_ENV_IS_IN_DATAFLASH */ +#define CONFIG_SYS_MONITOR_LEN SZ_256K
/* * Boot option */ #define CONFIG_BOOTDELAY 3
-#ifdef CONFIG_SKIP_LOWLEVEL_INIT -/* boot.bin, env, u-boot.bin.gz */ -#define CONFIG_SYS_BOOT_SIZE 0x6000 /* 24 KBytes */ -#define CONFIG_SYS_U_BOOT_BASE (CONFIG_SYS_FLASH_BASE + 0x10000) -#define CONFIG_SYS_U_BOOT_SIZE 0x10000 /* 64 KBytes */ -#else -/* u-boot.bin */ -#define CONFIG_SYS_BOOT_SIZE 0x0 /* 0 KBytes */ -#define CONFIG_SYS_U_BOOT_BASE CONFIG_SYS_FLASH_BASE -#define CONFIG_SYS_U_BOOT_SIZE 0x40000 /* 128 KBytes */ -#endif /* CONFIG_SKIP_LOWLEVEL_INIT */ - -#define CONFIG_SYS_LOAD_ADDR 0x21000000 /* default load address */ -#define CONFIG_ENV_OVERWRITE 1 - -/* - * USB Config - */ -#define CONFIG_CMD_USB -#define CONFIG_USB_OHCI_NEW 1 -#define CONFIG_USB_KEYBOARD 1 -#define CONFIG_USB_STORAGE 1 -#define CONFIG_DOS_PARTITION 1 - -#undef CONFIG_SYS_USB_OHCI_BOARD_INIT -#define CONFIG_SYS_USB_OHCI_CPU_INIT 1 -#define CONFIG_SYS_USB_OHCI_REGS_BASE AT91_USB_HOST_BASE -#define CONFIG_SYS_USB_OHCI_SLOT_NAME "at91rm9200" -#define CONFIG_SYS_USB_OHCI_MAX_ROOT_PORTS 15 - -/* - * I2C - */ -#define CONFIG_HARD_I2C - -#ifdef CONFIG_HARD_I2C -#define CONFIG_CMD_I2C -#define CONFIG_SYS_I2C_SPEED 0 /* not used */ -#define CONFIG_SYS_I2C_SLAVE 0 /* not used */ -#endif +/* default load address */ +#define CONFIG_SYS_LOAD_ADDR CONFIG_SYS_SDRAM_BASE + SZ_16M +#define CONFIG_ENV_OVERWRITE
/* * Shell Settings */ -#define CONFIG_CMDLINE_EDITING 1 -#define CONFIG_SYS_LONGHELP 1 -#define CONFIG_AUTO_COMPLETE 1 -#define CONFIG_SYS_HUSH_PARSER 1 +#define CONFIG_CMDLINE_EDITING +#define CONFIG_SYS_LONGHELP +#define CONFIG_AUTO_COMPLETE +#define CONFIG_SYS_HUSH_PARSER #define CONFIG_SYS_PROMPT "U-Boot> " #define CONFIG_SYS_PROMPT_HUSH_PS2 "> " #define CONFIG_SYS_CBSIZE 256 /* Console I/O Buffer Size */ @@ -288,41 +184,18 @@ #define CONFIG_SYS_PBSIZE \ (CONFIG_SYS_CBSIZE + sizeof(CONFIG_SYS_PROMPT) + 16)
-#ifndef __ASSEMBLY__ -/*----------------------------------------------------------------------- - * Board specific extension for bd_info - * - * This structure is embedded in the global bd_info (bd_t) structure - * and can be used by the board specific code (eg board/...) - */ - -struct bd_info_ext { - /* helper variable for board environment handling - * - * env_crc_valid == 0 => uninitialised - * env_crc_valid > 0 => environment crc in flash is valid - * env_crc_valid < 0 => environment crc in flash is invalid - */ - int env_crc_valid; -}; -#endif - -#define CONFIG_SYS_HZ 1000 -/* - * AT91C_TC0_CMR is implicitly set to - * AT91C_TC_TIMER_DIV1_CLOCK - */ -#define CONFIG_SYS_HZ_CLOCK (AT91C_MASTER_CLOCK / 2) - /* * Size of malloc() pool */ -#define CONFIG_SYS_MALLOC_LEN ROUND(3 * CONFIG_ENV_SIZE + 128 * 1024 \ - , 0x1000) +#define CONFIG_SYS_MALLOC_LEN ROUND(3 * CONFIG_ENV_SIZE + SZ_128K, \ + SZ_4K) /* size in bytes reserved for initial data */ #define CONFIG_SYS_GBL_DATA_SIZE 128
-#define CONFIG_STACKSIZE (32 * 1024) /* regular stack */ -#define CONFIG_STACKSIZE_IRQ (4 * 1024) /* Unsure if to big or to small*/ -#define CONFIG_STACKSIZE_FIQ (4 * 1024) /* Unsure if to big or to small*/ -#endif +#define CONFIG_SYS_INIT_SP_ADDR (CONFIG_SYS_SDRAM_BASE + SZ_4K \ + - CONFIG_SYS_GBL_DATA_SIZE) + +#define CONFIG_STACKSIZE SZ_32K /* regular stack */ +#define CONFIG_STACKSIZE_IRQ SZ_4K /* Unsure if to big or to small*/ +#define CONFIG_STACKSIZE_FIQ SZ_4K /* Unsure if to big or to small*/ +#endif /* __AT91RM9200EK_CONFIG_H__ */

This patch fixes arch-at91/hardware.h to have the relevant defines for at91rm9200 devices to support existing at91 usb driver.
Signed-off-by: Andreas Bießmann andreas.devel@googlemail.com --- v2: no changes since v1
arch/arm/include/asm/arch-at91/hardware.h | 1 + 1 files changed, 1 insertions(+), 0 deletions(-)
diff --git a/arch/arm/include/asm/arch-at91/hardware.h b/arch/arm/include/asm/arch-at91/hardware.h index 9f732a7..f5f80e0 100644 --- a/arch/arm/include/asm/arch-at91/hardware.h +++ b/arch/arm/include/asm/arch-at91/hardware.h @@ -18,6 +18,7 @@
#if defined(CONFIG_AT91RM9200) #include <asm/arch-at91/at91rm9200.h> +#define AT91_PMC_UHP AT91RM9200_PMC_UHP #elif defined(CONFIG_AT91SAM9260) || defined(CONFIG_AT91SAM9G20) #include <asm/arch/at91sam9260.h> #define AT91_BASE_MCI AT91SAM9260_BASE_MCI

This patch enables USB for at91rm9200ek board.
Signed-off-by: Andreas Bießmann andreas.devel@googlemail.com --- v2: no changes since v1 include/configs/at91rm9200ek.h | 15 +++++++++++++++ 1 files changed, 15 insertions(+), 0 deletions(-)
diff --git a/include/configs/at91rm9200ek.h b/include/configs/at91rm9200ek.h index 6b2dd63..b386057 100644 --- a/include/configs/at91rm9200ek.h +++ b/include/configs/at91rm9200ek.h @@ -122,6 +122,7 @@ #define CONFIG_CMD_FAT #define CONFIG_CMD_MII #define CONFIG_CMD_PING +#define CONFIG_CMD_USB #undef CONFIG_CMD_FPGA
/* @@ -146,6 +147,20 @@ #define CONFIG_SYS_FLASH_PROTECTION
/* + * USB Config + */ +#define CONFIG_USB_ATMEL 1 +#define CONFIG_USB_OHCI_NEW 1 +#define CONFIG_USB_KEYBOARD 1 +#define CONFIG_USB_STORAGE 1 +#define CONFIG_DOS_PARTITION 1 + +#define CONFIG_SYS_USB_OHCI_CPU_INIT 1 +#define CONFIG_SYS_USB_OHCI_REGS_BASE AT91_USB_HOST_BASE +#define CONFIG_SYS_USB_OHCI_SLOT_NAME "at91rm9200" +#define CONFIG_SYS_USB_OHCI_MAX_ROOT_PORTS 15 + +/* * Environment Settings */ #define CONFIG_ENV_IS_IN_FLASH

Dear Andreas Bießmann,
Signed-off-by: Andreas Bießmannandreas.devel@googlemail.com +Andreas Bie�mannandreas.devel@gmail.com
in the 2nd line the "ß" does not show here (a "FFFD" box is shown instead. Is it only me or do others have similar problems? I think that line was produced in a different code page? Maybe we should refrain from using non ASCII characters within source code?
Reinhard

Dear Reinhard Meyer,
Am 18.10.2010 23:37, schrieb Reinhard Meyer:
Dear Andreas Bießmann,
Signed-off-by: Andreas Bießmannandreas.devel@googlemail.com
This is correct UTF8 coded line
+Andreas Bie�mannandreas.devel@gmail.com
This is a patch to a latin1 coded file. When you e.g. save this mail and look through it with 'cat <file> | less' you may see 'Andreas Bie<DF>mann andreas.devel@gmail.com'. When you then look for latin1 coding table you may see <DF> is 'ß'. So this is correct here. Some other files in the patch are still coded in utf-8 (as the mail is), therefore your MUA represents the stuff correct to you. The file MAINTAINERS is in latin1 coding cause a lot of/some other contributors also have non-ASCII characters in their names. A short test will show this to you:
open MAINTAINERS in vim; :set fileencoding=utf8; save; git diff
in the 2nd line the "ß" does not show here (a "FFFD" box is shown instead. Is it only me or do others have similar problems?
No, everyone with correct configured MUA should see this
I think that line was produced in a different code page?
Yes, the file MAINTAINERS is in latin1 while the mail and some other files touched are in utf-8.
Maybe we should refrain from using non ASCII characters within source code?
I don't know. But my surname is Bießmann and _not_ Biessmann.
Shouldn't we change the coding for all files to utf-8 instead?
regards
Andreas Bießmann

Dear Andreas Bießmann,
This patch series introduce new board support for at91rm9200ek. The derived code is now converted to new at91 code. Arm relocation is also implemented.
There where some tradeoffs regarding device support. Currently the code basis does not support all devices supported before. This includes a) remove support for dataflash since i can not test it (yet, should follow in some weeks) b) preloader support is disabled since NOR booting does not need any first stage loader c) MMC/SD-card is currently not supported (but was not before)
Next steps are:
- get dataflash running
- remove at91rm9200_usart driver (should merge with atmel_usart)
- support MMC/SD-Card (also merge with current AT91/AVR32 implementation)
- merge emac/macb
Andreas Bießmann (3): at91rm9200ek: convert to at91 at91rm9200: enable USB support at91rm9200ek: enbable USB support
MAINTAINERS | 4 + arch/arm/include/asm/arch-at91/hardware.h | 1 + board/atmel/at91rm9200ek/Makefile | 1 - board/atmel/at91rm9200ek/at91rm9200ek.c | 58 ++----- board/atmel/at91rm9200ek/config.mk | 3 +- board/atmel/at91rm9200ek/led.c | 58 ++++---- board/atmel/at91rm9200ek/misc.c | 50 ------ boards.cfg | 2 +- include/configs/at91rm9200ek.h | 233 ++++++++--------------------- 9 files changed, 118 insertions(+), 292 deletions(-) delete mode 100644 board/atmel/at91rm9200ek/misc.c
Added V2 of the series to u-boot-atmel/at91. Thanks, Reinhard
participants (3)
-
Andreas Bießmann
-
Reinhard Meyer
-
Wolfgang Denk