[U-Boot] [PATCH] Olimex SAM9-L9260 board support

Added support for the Olimex SAM9-L9260 development board. This patch is based on u-boot v1.3.4.
Tested with data flash only (not with NAND).
Signed-off-by: Cristian Birsan cristian.birsan@gmail.com --- MAKEALL | 1 + Makefile | 21 ++-- board/olimex/sam9l9260/Makefile | 59 ++++++++ board/olimex/sam9l9260/config.mk | 1 + board/olimex/sam9l9260/led.c | 64 +++++++++ board/olimex/sam9l9260/nand.c | 78 +++++++++++ board/olimex/sam9l9260/partition.c | 39 ++++++ board/olimex/sam9l9260/sam9l9260.c | 264 ++++++++++++++++++++++++++++++++++++ drivers/mtd/nand/nand_ids.c | 2 + include/configs/sam9l9260.h | 212 +++++++++++++++++++++++++++++ 10 files changed, 732 insertions(+), 9 deletions(-) create mode 100644 board/olimex/sam9l9260/Makefile create mode 100644 board/olimex/sam9l9260/config.mk create mode 100644 board/olimex/sam9l9260/led.c create mode 100644 board/olimex/sam9l9260/nand.c create mode 100644 board/olimex/sam9l9260/partition.c create mode 100644 board/olimex/sam9l9260/sam9l9260.c create mode 100644 include/configs/sam9l9260.h
diff --git a/MAKEALL b/MAKEALL index 9ccb9ac..0e2cb36 100755 --- a/MAKEALL +++ b/MAKEALL @@ -542,6 +542,7 @@ LIST_at91=" \ kb9202 \ mp2usb \ m501sk \ + sam9l9260 \ "
######################################################################### diff --git a/Makefile b/Makefile index 7c13ce8..5b0acae 100644 --- a/Makefile +++ b/Makefile @@ -2487,15 +2487,6 @@ shannon_config : unconfig at91rm9200dk_config : unconfig @$(MKCONFIG) $(@:_config=) arm arm920t at91rm9200dk atmel at91rm9200
-at91sam9261ek_config : unconfig - @$(MKCONFIG) $(@:_config=) arm arm926ejs at91sam9261ek atmel at91 - -at91sam9263ek_config : unconfig - @$(MKCONFIG) $(@:_config=) arm arm926ejs at91sam9263ek atmel at91 - -at91sam9rlek_config : unconfig - @$(MKCONFIG) $(@:_config=) arm arm926ejs at91sam9rlek atmel at91 - cmc_pu2_config : unconfig @$(MKCONFIG) $(@:_config=) arm arm920t cmc_pu2 NULL at91rm9200
@@ -2521,6 +2512,18 @@ at91cap9adk_config : unconfig at91sam9260ek_config : unconfig @$(MKCONFIG) $(@:_config=) arm arm926ejs at91sam9260ek atmel at91
+at91sam9261ek_config : unconfig + @$(MKCONFIG) $(@:_config=) arm arm926ejs at91sam9261ek atmel at91 + +at91sam9263ek_config : unconfig + @$(MKCONFIG) $(@:_config=) arm arm926ejs at91sam9263ek atmel at91 + +at91sam9rlek_config : unconfig + @$(MKCONFIG) $(@:_config=) arm arm926ejs at91sam9rlek atmel at91 + +sam9l9260_config : unconfig + @$(MKCONFIG) $(@:_config=) arm arm926ejs sam9l9260 olimex at91 + ######################################################################## ## ARM Integrator boards - see doc/README-integrator for more info. integratorap_config \ diff --git a/board/olimex/sam9l9260/Makefile b/board/olimex/sam9l9260/Makefile new file mode 100644 index 0000000..8853b7c --- /dev/null +++ b/board/olimex/sam9l9260/Makefile @@ -0,0 +1,59 @@ +# +# (C) Copyright 2003-2008 +# Wolfgang Denk, DENX Software Engineering, wd@denx.de. +# +# (C) Copyright 2008 +# +# Cristian Birsan cristian.birsan@gmail.com based on the work of +# Stelian Pop stelian.pop@leadtechdesign.com +# Lead Tech Design <www.leadtechdesign.com> +# +# 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-y += sam9l9260.o +COBJS-y += led.o +COBJS-y += partition.o +COBJS-$(CONFIG_CMD_NAND) += nand.o + +SRCS := $(SOBJS:.o=.S) $(COBJS-y:.o=.c) +OBJS := $(addprefix $(obj),$(COBJS-y)) +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/olimex/sam9l9260/config.mk b/board/olimex/sam9l9260/config.mk new file mode 100644 index 0000000..ff2cfd1 --- /dev/null +++ b/board/olimex/sam9l9260/config.mk @@ -0,0 +1 @@ +TEXT_BASE = 0x23f00000 diff --git a/board/olimex/sam9l9260/led.c b/board/olimex/sam9l9260/led.c new file mode 100644 index 0000000..ddc375f --- /dev/null +++ b/board/olimex/sam9l9260/led.c @@ -0,0 +1,64 @@ +/* + * (C) Copyright 2007-2008 + * Stelian Pop stelian.pop@leadtechdesign.com + * Lead Tech Design <www.leadtechdesign.com> + * + * 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/at91sam9260.h> +#include <asm/arch/at91_pmc.h> +#include <asm/arch/gpio.h> +#include <asm/arch/io.h> + +#define RED_LED AT91_PIN_PA9 /* this is the power led */ +#define GREEN_LED AT91_PIN_PA6 /* this is the user led */ + +void red_LED_on(void) +{ + at91_set_gpio_value(RED_LED, 1); +} + +void red_LED_off(void) +{ + at91_set_gpio_value(RED_LED, 0); +} + +void green_LED_on(void) +{ + at91_set_gpio_value(GREEN_LED, 0); +} + +void green_LED_off(void) +{ + at91_set_gpio_value(GREEN_LED, 1); +} + +void coloured_LED_init(void) +{ + /* Enable clock */ + at91_sys_write(AT91_PMC_PCER, 1 << AT91SAM9260_ID_PIOA); + + at91_set_gpio_output(RED_LED, 1); + at91_set_gpio_output(GREEN_LED, 1); + + at91_set_gpio_value(RED_LED, 0); + at91_set_gpio_value(GREEN_LED, 1); +} diff --git a/board/olimex/sam9l9260/nand.c b/board/olimex/sam9l9260/nand.c new file mode 100644 index 0000000..3d158e7 --- /dev/null +++ b/board/olimex/sam9l9260/nand.c @@ -0,0 +1,78 @@ +/* + * (C) Copyright 2007-2008 + * Stelian Pop stelian.pop@leadtechdesign.com + * Lead Tech Design <www.leadtechdesign.com> + * + * (C) Copyright 2006 ATMEL Rousset, Lacressonniere Nicolas + * + * 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/at91sam9260.h> +#include <asm/arch/gpio.h> +#include <asm/arch/at91_pio.h> + +#include <nand.h> + +/* + * hardware specific access to control-lines + */ +#define MASK_ALE (1 << 21) /* our ALE is AD21 */ +#define MASK_CLE (1 << 22) /* our CLE is AD22 */ + +static void sam9l9260_nand_hwcontrol(struct mtd_info *mtd, + int cmd, unsigned int ctrl) +{ + struct nand_chip *this = mtd->priv; + + if (ctrl & NAND_CTRL_CHANGE) { + ulong IO_ADDR_W = (ulong) this->IO_ADDR_W; + IO_ADDR_W &= ~(MASK_ALE | MASK_CLE); + + if (ctrl & NAND_CLE) + IO_ADDR_W |= MASK_CLE; + if (ctrl & NAND_ALE) + IO_ADDR_W |= MASK_ALE; + + at91_set_gpio_value(AT91_PIN_PC14, !(ctrl & NAND_NCE)); + this->IO_ADDR_W = (void *) IO_ADDR_W; + } + + if (cmd != NAND_CMD_NONE) + writeb(cmd, this->IO_ADDR_W); +} + +static int sam9l9260_nand_ready(struct mtd_info *mtd) +{ + return at91_get_gpio_value(AT91_PIN_PC13); +} + +int board_nand_init(struct nand_chip *nand) +{ + nand->ecc.mode = NAND_ECC_SOFT; +#ifdef CFG_NAND_DBW_16 + nand->options = NAND_BUSWIDTH_16; +#endif + nand->cmd_ctrl = sam9l9260_nand_hwcontrol; + nand->dev_ready = sam9l9260_nand_ready; + nand->chip_delay = 20; + + return 0; +} diff --git a/board/olimex/sam9l9260/partition.c b/board/olimex/sam9l9260/partition.c new file mode 100644 index 0000000..b29c29a --- /dev/null +++ b/board/olimex/sam9l9260/partition.c @@ -0,0 +1,39 @@ +/* + * (C) Copyright 2008 + * Ulf Samuelsson ulf@atmel.com + * + * 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[CFG_MAX_DATAFLASH_BANKS]; + +struct dataflash_addr cs[CFG_MAX_DATAFLASH_BANKS] = { + {CFG_DATAFLASH_LOGIC_ADDR_CS0, 0}, /* Logical adress, CS */ + {CFG_DATAFLASH_LOGIC_ADDR_CS1, 1} +}; + +/*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, 0x0020FFFF, FLAG_PROTECT_CLEAR, 0, "Kernel"}, +}; diff --git a/board/olimex/sam9l9260/sam9l9260.c b/board/olimex/sam9l9260/sam9l9260.c new file mode 100644 index 0000000..15578d1 --- /dev/null +++ b/board/olimex/sam9l9260/sam9l9260.c @@ -0,0 +1,264 @@ +/* + * (C) Copyright 2007-2008 + * + * Cristian Birsan cristian.birsan@gmail.com based on the work of + * Stelian Pop stelian.pop@leadtechdesign.com + * Lead Tech Design <www.leadtechdesign.com> + * + * 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/at91sam9260.h> +#include <asm/arch/at91sam9260_matrix.h> +#include <asm/arch/at91sam9_smc.h> +#include <asm/arch/at91_pmc.h> +#include <asm/arch/at91_rstc.h> +#include <asm/arch/gpio.h> +#include <asm/arch/io.h> +#include <asm/arch/hardware.h> +#if defined(CONFIG_RESET_PHY_R) && defined(CONFIG_MACB) +#include <net.h> +#endif +#include <netdev.h> + +DECLARE_GLOBAL_DATA_PTR; + +/* ------------------------------------------------------------------------- */ +/* + * Miscelaneous platform dependent initialisations + */ + +static void sam9l9260_serial_hw_init(void) +{ +#ifdef CONFIG_USART0 + at91_set_A_periph(AT91_PIN_PB4, 1); /* TXD0 */ + at91_set_A_periph(AT91_PIN_PB5, 0); /* RXD0 */ + at91_sys_write(AT91_PMC_PCER, 1 << AT91_ID_US0); +#endif + +#ifdef CONFIG_USART1 + at91_set_A_periph(AT91_PIN_PB6, 1); /* TXD1 */ + at91_set_A_periph(AT91_PIN_PB7, 0); /* RXD1 */ + at91_sys_write(AT91_PMC_PCER, 1 << AT91_ID_US1); +#endif + +#ifdef CONFIG_USART2 + at91_set_A_periph(AT91_PIN_PB8, 1); /* TXD2 */ + at91_set_A_periph(AT91_PIN_PB9, 0); /* RXD2 */ + at91_sys_write(AT91_PMC_PCER, 1 << AT91_ID_US2); +#endif + +#ifdef CONFIG_USART3 /* DBGU */ + at91_set_A_periph(AT91_PIN_PB14, 0); /* DRXD */ + at91_set_A_periph(AT91_PIN_PB15, 1); /* DTXD */ + at91_sys_write(AT91_PMC_PCER, 1 << AT91_ID_SYS); +#endif +} + +#ifdef CONFIG_CMD_NAND +static void sam9l9260_nand_hw_init(void) +{ + unsigned long csa; + + /* Enable CS3 */ + csa = at91_sys_read(AT91_MATRIX_EBICSA); + at91_sys_write(AT91_MATRIX_EBICSA, + csa | AT91_MATRIX_CS3A_SMC_SMARTMEDIA); + + /* Configure SMC CS3 for NAND/SmartMedia */ + at91_sys_write(AT91_SMC_SETUP(3), + AT91_SMC_NWESETUP_(1) | AT91_SMC_NCS_WRSETUP_(0) | + AT91_SMC_NRDSETUP_(1) | AT91_SMC_NCS_RDSETUP_(0)); + at91_sys_write(AT91_SMC_PULSE(3), + AT91_SMC_NWEPULSE_(3) | AT91_SMC_NCS_WRPULSE_(3) | + AT91_SMC_NRDPULSE_(3) | AT91_SMC_NCS_RDPULSE_(3)); + at91_sys_write(AT91_SMC_CYCLE(3), + AT91_SMC_NWECYCLE_(5) | AT91_SMC_NRDCYCLE_(5)); + at91_sys_write(AT91_SMC_MODE(3), + AT91_SMC_READMODE | AT91_SMC_WRITEMODE | + AT91_SMC_EXNWMODE_DISABLE | +#ifdef CFG_NAND_DBW_16 + AT91_SMC_DBW_16 | +#else /* CFG_NAND_DBW_8 */ + AT91_SMC_DBW_8 | +#endif + AT91_SMC_TDF_(2)); + + at91_sys_write(AT91_PMC_PCER, 1 << AT91SAM9260_ID_PIOC); + + /* Configure RDY/BSY */ + at91_set_gpio_input(AT91_PIN_PC13, 1); + + /* Enable NandFlash */ + at91_set_gpio_output(AT91_PIN_PC14, 1); +} +#endif + +#ifdef CONFIG_HAS_DATAFLASH +static void sam9l9260_spi_hw_init(void) +{ + at91_set_A_periph(AT91_PIN_PA3, 0); /* SPI0_NPCS0 */ + at91_set_B_periph(AT91_PIN_PC11, 0); /* SPI0_NPCS1 */ + + at91_set_A_periph(AT91_PIN_PA0, 0); /* SPI0_MISO */ + at91_set_A_periph(AT91_PIN_PA1, 0); /* SPI0_MOSI */ + at91_set_A_periph(AT91_PIN_PA2, 0); /* SPI0_SPCK */ + + /* Enable clock */ + at91_sys_write(AT91_PMC_PCER, 1 << AT91SAM9260_ID_SPI0); +} +#endif + +#ifdef CONFIG_MACB +static void sam9l9260_macb_hw_init(void) +{ + /* Enable clock */ + at91_sys_write(AT91_PMC_PCER, 1 << AT91SAM9260_ID_EMAC); + + /* + * Disable pull-up on: + * RXDV (PA17) => PHY normal mode (not Test mode) + * ERX0 (PA14) => PHY ADDR0 + * ERX1 (PA15) => PHY ADDR1 + * ERX2 (PA25) => PHY ADDR2 + * ERX3 (PA26) => PHY ADDR3 + * ECRS (PA28) => PHY ADDR4 => PHYADDR = 0x0 + * + * PHY has internal pull-down + */ + writel(pin_to_mask(AT91_PIN_PA14) | + pin_to_mask(AT91_PIN_PA15) | + pin_to_mask(AT91_PIN_PA17) | + pin_to_mask(AT91_PIN_PA25) | + pin_to_mask(AT91_PIN_PA26) | + pin_to_mask(AT91_PIN_PA28), + pin_to_controller(AT91_PIN_PA0) + PIO_PUDR); + + /* Need to reset PHY -> 500ms reset */ + at91_sys_write(AT91_RSTC_MR, AT91_RSTC_KEY | + (AT91_RSTC_ERSTL & (0x0D << 8)) | + AT91_RSTC_URSTEN); + + at91_sys_write(AT91_RSTC_CR, AT91_RSTC_KEY | AT91_RSTC_EXTRST); + + /* Wait for end hardware reset */ + while (!(at91_sys_read(AT91_RSTC_SR) & AT91_RSTC_NRSTL)); + + /* Restore NRST value */ + at91_sys_write(AT91_RSTC_MR, AT91_RSTC_KEY | + (AT91_RSTC_ERSTL & (0x0 << 8)) | + AT91_RSTC_URSTEN); + + /* Re-enable pull-up */ + writel(pin_to_mask(AT91_PIN_PA14) | + pin_to_mask(AT91_PIN_PA15) | + pin_to_mask(AT91_PIN_PA17) | + pin_to_mask(AT91_PIN_PA25) | + pin_to_mask(AT91_PIN_PA26) | + pin_to_mask(AT91_PIN_PA28), + pin_to_controller(AT91_PIN_PA0) + PIO_PUER); + + at91_set_A_periph(AT91_PIN_PA19, 0); /* ETXCK_EREFCK */ + at91_set_A_periph(AT91_PIN_PA17, 0); /* ERXDV */ + at91_set_A_periph(AT91_PIN_PA14, 0); /* ERX0 */ + at91_set_A_periph(AT91_PIN_PA15, 0); /* ERX1 */ + at91_set_A_periph(AT91_PIN_PA18, 0); /* ERXER */ + at91_set_A_periph(AT91_PIN_PA16, 0); /* ETXEN */ + at91_set_A_periph(AT91_PIN_PA12, 0); /* ETX0 */ + at91_set_A_periph(AT91_PIN_PA13, 0); /* ETX1 */ + at91_set_A_periph(AT91_PIN_PA21, 0); /* EMDIO */ + at91_set_A_periph(AT91_PIN_PA20, 0); /* EMDC */ + +#ifndef CONFIG_RMII + at91_set_B_periph(AT91_PIN_PA28, 0); /* ECRS */ + at91_set_B_periph(AT91_PIN_PA29, 0); /* ECOL */ + at91_set_B_periph(AT91_PIN_PA25, 0); /* ERX2 */ + at91_set_B_periph(AT91_PIN_PA26, 0); /* ERX3 */ + at91_set_B_periph(AT91_PIN_PA27, 0); /* ERXCK */ +#if defined(CONFIG_SAM9L9260) + /* + * use PA10, PA11 for ETX2, ETX3. + * PA23 and PA24 are for TWI EEPROM + */ + at91_set_B_periph(AT91_PIN_PA10, 0); /* ETX2 */ + at91_set_B_periph(AT91_PIN_PA11, 0); /* ETX3 */ +#else + at91_set_B_periph(AT91_PIN_PA23, 0); /* ETX2 */ + at91_set_B_periph(AT91_PIN_PA24, 0); /* ETX3 */ +#endif + at91_set_B_periph(AT91_PIN_PA22, 0); /* ETXER */ +#endif + +} +#endif + +int board_init(void) +{ + /* Enable Ctrlc */ + console_init_f(); + + /* arch number of SAM9-L9260-Board */ + gd->bd->bi_arch_number = MACH_TYPE_SAM9_L9260; + /* adress of boot parameters */ + gd->bd->bi_boot_params = PHYS_SDRAM + 0x100; + + sam9l9260_serial_hw_init(); +#ifdef CONFIG_CMD_NAND + sam9l9260_nand_hw_init(); +#endif +#ifdef CONFIG_HAS_DATAFLASH + sam9l9260_spi_hw_init(); +#endif +#ifdef CONFIG_MACB + sam9l9260_macb_hw_init(); +#endif + + return 0; +} + +int dram_init(void) +{ + gd->bd->bi_dram[0].start = PHYS_SDRAM; + gd->bd->bi_dram[0].size = PHYS_SDRAM_SIZE; + return 0; +} + +#ifdef CONFIG_RESET_PHY_R +void reset_phy(void) +{ +#ifdef CONFIG_MACB + /* + * Initialize ethernet HW addr prior to starting Linux, + * needed for nfsroot + */ + eth_init(gd->bd); +#endif +} +#endif + +int board_eth_init(bd_t *bis) +{ + int rc = 0; +#ifdef CONFIG_MACB + /* The default address for the KS8721BL PHY is 0x01 */ + rc = macb_eth_initialize(0, (void *)AT91_BASE_EMAC, 0x01); +#endif + return rc; +} diff --git a/drivers/mtd/nand/nand_ids.c b/drivers/mtd/nand/nand_ids.c index 2ff75c9..ec2ac55 100644 --- a/drivers/mtd/nand/nand_ids.c +++ b/drivers/mtd/nand/nand_ids.c @@ -69,6 +69,8 @@ struct nand_flash_dev nand_flash_ids[] = {
{"NAND 256MiB 3,3V 8-bit", 0x71, 512, 256, 0x4000, 0},
+ {"NAND 512MiB 3,3V 8-bit", 0xDC, 512, 512, 0x4000, 0}, + /* * These are the new chips with large page size. The pagesize and the * erasesize is determined from the extended id bytes diff --git a/include/configs/sam9l9260.h b/include/configs/sam9l9260.h new file mode 100644 index 0000000..90089b0 --- /dev/null +++ b/include/configs/sam9l9260.h @@ -0,0 +1,212 @@ +/* + * (C) Copyright 2007-2008 + * + * Cristian Birsan cristian.birsan@gmail.com based on the work of + * Stelian Pop stelian.pop@leadtechdesign.com + * Lead Tech Design <www.leadtechdesign.com> + * + * Configuration settings for the SAM9-L9260 board. + * + * 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 + */ + +#ifndef __CONFIG_H +#define __CONFIG_H + +/* Hostname */ +#define CONFIG_HOSTNAME sam9l9260 + +/* ARM asynchronous clock */ +#define AT91_MAIN_CLOCK 198656000 /* from 18.432 MHz crystal */ +#define AT91_MASTER_CLOCK 99328000 /* peripheral = main / 2 */ +#define CFG_HZ 1000000 /* 1us resolution */ + +#define AT91_SLOW_CLOCK 32768 /* slow clock */ + +#define CONFIG_ARM926EJS 1 /* This is an ARM926EJS Core */ +#define CONFIG_AT91SAM9260 1 /* It's an Atmel AT91SAM9260 SoC*/ +#define CONFIG_SAM9L9260 1 /* on an SAM9-L9260 Board */ +#undef CONFIG_USE_IRQ /* we don't need IRQ/FIQ stuff */ + +#define CONFIG_CMDLINE_TAG 1 /* enable passing of ATAGs */ +#define CONFIG_SETUP_MEMORY_TAGS 1 +#define CONFIG_INITRD_TAG 1 + +#define CONFIG_SKIP_LOWLEVEL_INIT +#define CONFIG_SKIP_RELOCATE_UBOOT + +/* + * Hardware drivers + */ +#define CONFIG_ATMEL_USART 1 +#undef CONFIG_USART0 +#undef CONFIG_USART1 +#undef CONFIG_USART2 +#define CONFIG_USART3 1 /* USART 3 is DBGU */ + +#define CONFIG_BOOTDELAY 3 + +/* + * BOOTP options + */ +#define CONFIG_BOOTP_BOOTFILESIZE 1 +#define CONFIG_BOOTP_BOOTPATH 1 +#define CONFIG_BOOTP_GATEWAY 1 +#define CONFIG_BOOTP_HOSTNAME 1 + +/* + * Command line configuration. + */ +#include <config_cmd_default.h> +#undef CONFIG_CMD_BDI +#undef CONFIG_CMD_IMI +#undef CONFIG_CMD_AUTOSCRIPT +#undef CONFIG_CMD_FPGA +#undef CONFIG_CMD_LOADS +#undef CONFIG_CMD_IMLS + +#define CONFIG_CMD_PING 1 +#define CONFIG_CMD_DHCP 1 +#define CONFIG_CMD_NAND 1 +#define CONFIG_CMD_USB 1 + +/* SDRAM */ +#define CONFIG_NR_DRAM_BANKS 1 +#define PHYS_SDRAM 0x20000000 +#define PHYS_SDRAM_SIZE 0x04000000 /* 64 megs */ + +/* DataFlash */ +#define CONFIG_HAS_DATAFLASH 1 +#define CFG_SPI_WRITE_TOUT (5*CFG_HZ) +#define CFG_MAX_DATAFLASH_BANKS 2 +#define CFG_DATAFLASH_LOGIC_ADDR_CS0 0xC0000000 /* CS0 */ +#define CFG_DATAFLASH_LOGIC_ADDR_CS1 0xD0000000 /* CS1 */ +#define AT91_SPI_CLK 15000000 +#define DATAFLASH_TCSS (0x1a << 16) +#define DATAFLASH_TCHS (0x1 << 24) + +/* NAND flash */ +#define NAND_MAX_CHIPS 1 +#define CFG_MAX_NAND_DEVICE 1 +#define CFG_NAND_BASE 0x40000000 +#define CFG_NAND_DBW_8 1 + +/* NOR flash - no real flash on this board */ +#define CFG_NO_FLASH 1 + +/* Ethernet */ +#define CONFIG_MACB 1 +#undef CONFIG_RMII /* 1 */ +#define CONFIG_NET_MULTI 1 +#define CONFIG_NET_RETRY_COUNT 20 +#define CONFIG_RESET_PHY_R 1 + +/* USB */ +#define CONFIG_USB_OHCI_NEW 1 +#define LITTLEENDIAN 1 +#define CONFIG_DOS_PARTITION 1 +#define CFG_USB_OHCI_CPU_INIT 1 +#define CFG_USB_OHCI_REGS_BASE 0x00500000 /* AT91SAM9260_UHP_BASE */ +#define CFG_USB_OHCI_SLOT_NAME "at91sam9260" +#define CFG_USB_OHCI_MAX_ROOT_PORTS 2 +#define CONFIG_USB_STORAGE 1 + +/* File Systems*/ +#define CONFIG_CMD_FAT 1 +#define CONFIG_CMD_EXT2 1 +#define CONFIG_CMD_REISER 1 + +#define CFG_LOAD_ADDR 0x22000000 /* load address */ + +#define CFG_MEMTEST_START PHYS_SDRAM +#define CFG_MEMTEST_END 0x23e00000 + +#undef CFG_USE_DATAFLASH_CS0 +#define CFG_USE_DATAFLASH_CS1 1 +#undef CFG_USE_NANDFLASH + +#ifdef CFG_USE_DATAFLASH_CS0 + +/* bootstrap + u-boot + env + linux in dataflash on CS0 */ +#define CONFIG_ENV_IS_IN_DATAFLASH 1 +#define CFG_MONITOR_BASE (CFG_DATAFLASH_LOGIC_ADDR_CS0 + 0x8400) +#define CONFIG_ENV_OFFSET 0x4200 +#define CONFIG_ENV_ADDR (CFG_DATAFLASH_LOGIC_ADDR_CS0 + CONFIG_ENV_OFFSET) +#define CONFIG_ENV_SIZE 0x4200 +#define CONFIG_BOOTCOMMAND "cp.b 0xC0042000 0x22000000 0x210000; bootm" +#define CONFIG_BOOTARGS "console=ttyS0,115200 " \ + "root=/dev/mtdblock0 " \ + "mtdparts=at91_nand:-(root) " \ + "rw rootfstype=jffs2" + +#elif CFG_USE_DATAFLASH_CS1 + +/* bootstrap + u-boot + env + linux in dataflash on CS1 */ +#define CONFIG_ENV_IS_IN_DATAFLASH 1 +#define CFG_MONITOR_BASE (CFG_DATAFLASH_LOGIC_ADDR_CS1 + 0x8400) +#define CONFIG_ENV_OFFSET 0x4200 +#define CONFIG_ENV_ADDR (CFG_DATAFLASH_LOGIC_ADDR_CS1 + CONFIG_ENV_OFFSET) +#define CONFIG_ENV_SIZE 0x4200 +#define CONFIG_BOOTCOMMAND "cp.b 0xD0042000 0x22000000 0x210000; bootm" +#define CONFIG_BOOTARGS "console=ttyS0,115200 " \ + "root=/dev/mtdblock0 " \ + "mtdparts=at91_nand:-(root) " \ + "rw rootfstype=jffs2" + +#else /* CFG_USE_NANDFLASH */ + +/* bootstrap + u-boot + env + linux in nandflash */ +#define CONFIG_ENV_IS_IN_NAND 1 +#define CONFIG_ENV_OFFSET 0x60000 +#define CONFIG_ENV_OFFSET_REDUND 0x80000 +#define CONFIG_ENV_SIZE 0x20000 /* 1 sector = 128 kB */ +#define CONFIG_BOOTCOMMAND "nand read 0x22000000 0xA0000 0x200000; bootm" +#define CONFIG_BOOTARGS "console=ttyS0,115200 " \ + "root=/dev/mtdblock5 " \ + "mtdparts=at91_nand:128k(bootstrap)ro," \ + "256k(uboot)ro,128k(env1)ro," \ + "128k(env2)ro,2M(linux),-(root) " \ + "rw rootfstype=jffs2" + +#endif + +#define CONFIG_BAUDRATE 115200 +#define CFG_BAUDRATE_TABLE {115200 , 19200, 38400, 57600, 9600 } + +#define CFG_PROMPT "U-Boot> " +#define CFG_CBSIZE 256 +#define CFG_MAXARGS 16 +#define CFG_PBSIZE (CFG_CBSIZE + sizeof(CFG_PROMPT) + 16) +#define CFG_LONGHELP 1 +#define CONFIG_CMDLINE_EDITING 1 + +#define ROUND(A, B) (((A) + (B)) & ~((B) - 1)) +/* + * Size of malloc() pool + */ +#define CFG_MALLOC_LEN ROUND(3 * CONFIG_ENV_SIZE + 128*1024, 0x1000) +#define CFG_GBL_DATA_SIZE 128 /* 128 bytes for initial data */ + +#define CONFIG_STACKSIZE (32*1024) /* regular stack */ + +#ifdef CONFIG_USE_IRQ +#error CONFIG_USE_IRQ not supported +#endif + +#endif

Dear Cristian Birsan,
+#ifdef CONFIG_RESET_PHY_R +void reset_phy(void) +{ +#ifdef CONFIG_MACB
- /*
* Initialize ethernet HW addr prior to starting Linux,
* needed for nfsroot
*/
- eth_init(gd->bd);
+#endif
Please do NOT do this. It's a violation of the U-Boot design principles, which clearly say that only such periphereals that are actually being used by U-Boot shall be initialized, and even if they are being used, these shall be deactivated after use.
Carelessly leaving ports or devices in an initialized stated has been the source for problems too many times before.
Don't do that.
+#define ROUND(A, B) (((A) + (B)) & ~((B) - 1))
First I think that this is wrong (maybe you need "B-1" instead of "B" in the first part?), second we already have DIV_ROUND_UP defined in common.h so please use this.
Best regards,
Wolfgang Denk

Dear Wolfgang Denk,
Thank you for your quick response.
+#ifdef CONFIG_RESET_PHY_R +void reset_phy(void) +{ +#ifdef CONFIG_MACB
- /*
* Initialize ethernet HW addr prior to starting Linux,
* needed for nfsroot
*/
- eth_init(gd->bd);
+#endif
Please do NOT do this. It's a violation of the U-Boot design principles, which clearly say that only such periphereals that are actually being used by U-Boot shall be initialized, and even if they are being used, these shall be deactivated after use.
Carelessly leaving ports or devices in an initialized stated has been the source for problems too many times before.
Don't do that.
The above code section is used also in other ATMEL boards like at91sam9260ek ( /board/atmel/at91sam9260ek/at91sam9260ek.c ), at91sam9261ek, at91sam9263ek, at91sam9rlek. This is my first patch sent to U-Boot and I used that code as reference.
The board that i have (SAM9-L9260 from Olimex ) is close to AT91SAM9260EK from ATMEL.
How do you think i can do this the right way?
+#define ROUND(A, B) (((A) + (B)) & ~((B) - 1))
First I think that this is wrong (maybe you need "B-1" instead of "B" in the first part?), second we already have DIV_ROUND_UP defined in common.h so please use this.
Thanks, good catch. I will fix this and submit a new patch.
Best regards, Cristian Birsan

Dear Cristian Birsan,
In message 48EA7615.8090706@gmail.com you wrote:
Carelessly leaving ports or devices in an initialized stated has been the source for problems too many times before.
Don't do that.
The above code section is used also in other ATMEL boards like at91sam9260ek ( /board/atmel/at91sam9260ek/at91sam9260ek.c ), at91sam9261ek, at91sam9263ek, at91sam9rlek. This is my first patch sent to U-Boot and I used that code as reference.
So this problem escaped the review when that old code was added.
So we can only ask the baord maintainer and the AT91 custodian to take care of the existing code and clean ipt up ASAP.
But we should not add more copies of that bad example.
The board that i have (SAM9-L9260 from Olimex ) is close to AT91SAM9260EK from ATMEL.
How do you think i can do this the right way?
Well, the Right Thing (TM) would be to use a device tree to pass such information to Linux, but that's a long way to go still.
In the mean time, other methods should be used to pass the MAC address information to the Linux network driver (I understand this is all what needs to be done, right?). In the simplest case, use an "ethaddr=..." boot argument. [Make sure to read the ML archive before you try to bring up this topic on the linux-arm ML; this has been discussed in *length* before.]
Best regards,
Wolfgang Denk

Dear Wolfgang Denk,
Regarding the following:
+#define ROUND(A, B) (((A) + (B)) & ~((B) - 1)) +/* + * Size of malloc() pool + */ +#define CFG_MALLOC_LEN ROUND(3 * CONFIG_ENV_SIZE + 128*1024, 0x1000)
I tried to include the common.h file in my configuration file but this breaks u-boot compilation (it's not safe to include common.h standalone) .I noticed that none of other board configuration files include common.h
If I replace the ROUND(A,B) macro with #define DIV_ROUND_UP(n,d) (((n) + (d) - 1) / (d)) macro when i try to make u-boot I obtain the following errors:
start.S: Assembler messages: start.S:339: Error: invalid constant (802d) after fixup
It appears to me that the solution for the moment is to use the following fixed macro: define ROUND(A, B) (((A) + (B) -1) & ~((B) - 1))
Regarding the following:
+#ifdef CONFIG_RESET_PHY_R +void reset_phy(void) +{ +#ifdef CONFIG_MACB
- /*
* Initialize ethernet HW addr prior to starting Linux,
* needed for nfsroot
*/
- eth_init(gd->bd);
+#endif
Please do NOT do this. It's a violation of the U-Boot design principles, which clearly say that only such periphereals that are actually being used by U-Boot shall be initialized, and even if they are being used, these shall be deactivated after use.
I removed the reset_phy() function and I do not use anymore CONFIG_RESET_PHY_R. I use setenv ethaddr to configure the MAC address of the Ethernet controller.
Is it ok to resend the patch with the above changes ?
Best regards, Cristian Birsan

Dear Cristian,
In message 597eb9790810070935u7d1713eat496c0288f629c8a3@mail.gmail.com you wrote:
I tried to include the common.h file in my configuration file but this breaks u-boot compilation (it's not safe to include common.h standalone) .I noticed that none of other
What do you mean by "include common.h standalone" ?
board configuration files include common.h
Normally it's not needed, because all files where the board config file will be used also include common.h.
If I replace the ROUND(A,B) macro with #define DIV_ROUND_UP(n,d) (((n)
- (d) - 1) / (d))
macro when i try to make u-boot I obtain the following errors:
start.S: Assembler messages: start.S:339: Error: invalid constant (802d) after fixup
So what does this source line look like in you version of the code?
802d = 0x802d = 32813 looks wrong to me. PLease check wht the code is doing there. There might be a (hidden) bug somewhere.
It appears to me that the solution for the moment is to use the following fixed macro: define ROUND(A, B) (((A) + (B) -1) & ~((B) - 1))
Nevertheless check what your code in start.S is doing.
I removed the reset_phy() function and I do not use anymore CONFIG_RESET_PHY_R. I use setenv ethaddr to configure the MAC address of the Ethernet controller.
Is it ok to resend the patch with the above changes ?
I think yes.
Best regards,
Wolfgang Denk

Dear Wolfgang Denk,
In message 597eb9790810070935u7d1713eat496c0288f629c8a3@mail.gmail.com you wrote:
I tried to include the common.h file in my configuration file but this breaks u-boot compilation (it's not safe to include common.h standalone) .I noticed that none of other
What do you mean by "include common.h standalone" ?
Through include common.h standalone I mean:
#ifndef __CONFIG_H #define __CONFIG_H
#include <common.h> ...rest of the file...
When I try to compile with the above include I obtain the following errors:
make[1]: Entering directory `/home/cristi/work/u-boot/u-boot-1.3.4/tools' gcc -g -Wall -idirafter /home/cristi/work/u-boot/u-boot-1.3.4/include -idirafter /home/cristi/work/u-boot/u-boot-1.3.4/include2 -idirafter /home/cristi/work/u-boot/u-boot-1.3.4/include -DTEXT_BASE=0x23f00000 -DUSE_HOSTCC -O -c -o mkimage.o mkimage.c In file included from /home/cristi/work/u-boot/u-boot-1.3.4/include/common.h:111, from /home/cristi/work/u-boot/u-boot-1.3.4/include/configs/sam9l9260.h:32, from /home/cristi/work/u-boot/u-boot-1.3.4/include/config.h:2, from /home/cristi/work/u-boot/u-boot-1.3.4/include/command.h:30, from /home/cristi/work/u-boot/u-boot-1.3.4/include/image.h:37, from mkimage.c:26: /home/cristi/work/u-boot/u-boot-1.3.4/include/flash.h:36: error: ‘CFG_MAX_FLASH_SECT’ undeclared here (not in a function) In file included from /home/cristi/work/u-boot/u-boot-1.3.4/include/common.h:132, from /home/cristi/work/u-boot/u-boot-1.3.4/include/configs/sam9l9260.h:32, from /home/cristi/work/u-boot/u-boot-1.3.4/include/config.h:2, from /home/cristi/work/u-boot/u-boot-1.3.4/include/command.h:30, from /home/cristi/work/u-boot/u-boot-1.3.4/include/image.h:37, from mkimage.c:26: /home/cristi/work/u-boot/u-boot-1.3.4/include/asm/u-boot.h:50: error: ‘CONFIG_NR_DRAM_BANKS’ undeclared here (not in a function) In file included from /home/cristi/work/u-boot/u-boot-1.3.4/include/configs/sam9l9260.h:32, from /home/cristi/work/u-boot/u-boot-1.3.4/include/config.h:2, from /home/cristi/work/u-boot/u-boot-1.3.4/include/command.h:30, from /home/cristi/work/u-boot/u-boot-1.3.4/include/image.h:37, from mkimage.c:26: /home/cristi/work/u-boot/u-boot-1.3.4/include/common.h:207: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘initdram’ /home/cristi/work/u-boot/u-boot-1.3.4/include/common.h:209: error: expected ‘)’ before ‘const’ /home/cristi/work/u-boot/u-boot-1.3.4/include/common.h:246: error: conflicting types for ‘getenv’ /usr/include/stdlib.h:545: error: previous declaration of ‘getenv’ was here /home/cristi/work/u-boot/u-boot-1.3.4/include/common.h:252: error: conflicting types for ‘setenv’ /usr/include/stdlib.h:563: error: previous declaration of ‘setenv’ was here /home/cristi/work/u-boot/u-boot-1.3.4/include/common.h:647: error: conflicting types for ‘_IO_getc’ /usr/include/libio.h:458: error: previous declaration of ‘_IO_getc’ was here In file included from /home/cristi/work/u-boot/u-boot-1.3.4/include/configs/sam9l9260.h:32, from /home/cristi/work/u-boot/u-boot-1.3.4/include/config.h:2, from /home/cristi/work/u-boot/u-boot-1.3.4/include/command.h:30, from /home/cristi/work/u-boot/u-boot-1.3.4/include/image.h:37, from mkimage.c:26: /home/cristi/work/u-boot/u-boot-1.3.4/include/common.h:651:23: error: macro "putc" requires 2 arguments, but only 1 given /home/cristi/work/u-boot/u-boot-1.3.4/include/common.h:651: error: ‘putc’ redeclared as different kind of symbol /home/cristi/work/u-boot/u-boot-1.3.4/include/common.h:652: error: conflicting types for ‘puts’ /home/cristi/work/u-boot/u-boot-1.3.4/include/common.h:653: error: conflicting types for ‘printf’ /home/cristi/work/u-boot/u-boot-1.3.4/include/common.h:655: error: conflicting types for ‘vprintf’ /home/cristi/work/u-boot/u-boot-1.3.4/include/common.h:671: error: conflicting types for ‘fprintf’ /home/cristi/work/u-boot/u-boot-1.3.4/include/common.h:673: error: conflicting types for ‘fputs’ /home/cristi/work/u-boot/u-boot-1.3.4/include/common.h:674: error: conflicting types for ‘fputc’ /home/cristi/work/u-boot/u-boot-1.3.4/include/common.h:676: error: conflicting types for ‘fgetc’ /usr/include/stdio.h:511: error: previous declaration of ‘fgetc’ was here mkimage.c:34: error: conflicting types for ‘crc32’ /home/cristi/work/u-boot/u-boot-1.3.4/include/common.h:625: error: previous declaration of ‘crc32’ was here make[1]: *** [mkimage.o] Error 1 make[1]: Leaving directory `/home/cristi/work/u-boot/u-boot-1.3.4/tools' make: *** [tools] Error 2
If I replace the ROUND(A,B) macro with #define DIV_ROUND_UP(n,d) (((n)
- (d) - 1) / (d))
macro when i try to make u-boot I obtain the following errors:
start.S: Assembler messages: start.S:339: Error: invalid constant (802d) after fixup
The code that generate the above error is
#define ROUND(A, B) (((A) + (B) -1) / (B)) /* * Size of malloc() pool */ #define CFG_MALLOC_LEN ROUND(3 * CONFIG_ENV_SIZE + 128*1024, 0x1000) #define CFG_GBL_DATA_SIZE 128 /* 128 bytes for initial data */
#define CONFIG_STACKSIZE (32*1024) /* regular stack */
The error message is as follows:
make -C cpu/arm926ejs start.o make[1]: Entering directory `/home/cristi/work/u-boot/u-boot-1.3.4/cpu/arm926ejs' /opt/arm-2008q1/bin/arm-none-linux-gnueabi-gcc -D__ASSEMBLY__ -g -Os -fno-strict-aliasing -fno-common -ffixed-r8 -msoft-float -D__KERNEL__ -DTEXT_BASE=0x23f00000 -I/home/cristi/work/u-boot/u-boot-1.3.4/include -fno-builtin -ffreestanding -nostdinc -isystem /opt/arm-2008q1/bin/../lib/gcc/arm-none-linux-gnueabi/4.2.3/include -pipe -DCONFIG_ARM -D__ARM__ -march=armv4 -mabi=apcs-gnu -march=armv5te -c -o start.o start.S start.S: Assembler messages: start.S:339: Error: invalid constant (802d) after fixup start.S:340: Error: invalid constant (802d) after fixup start.S:345: Error: invalid constant (802d) after fixup start.S:346: Error: invalid constant (802d) after fixup start.S:351: Error: invalid constant (802d) after fixup start.S:352: Error: invalid constant (802d) after fixup start.S:357: Error: invalid constant (802d) after fixup start.S:358: Error: invalid constant (802d) after fixup start.S:363: Error: invalid constant (802d) after fixup start.S:364: Error: invalid constant (802d) after fixup start.S:388: Error: invalid constant (802d) after fixup start.S:389: Error: invalid constant (802d) after fixup start.S:394: Error: invalid constant (802d) after fixup start.S:395: Error: invalid constant (802d) after fixup make[1]: *** [start.o] Error 1 make[1]: Leaving directory `/home/cristi/work/u-boot/u-boot-1.3.4/cpu/arm926ejs' make: *** [cpu/arm926ejs/start.o] Error 2
The last line in which CFG_MALLOC_LEN is used in start.S is 313. All the errors are after that line and i can't find a reason. The lines with asm instructions errors doesen't seem to be related to the CFG_MALLOC_LEN. I supose it is something related to preprocessor sub r13, r13, #(CONFIG_STACKSIZE+CFG_MALLOC_LEN)
Is it ok to resend the patch with the above changes ?
I think yes.
Here is my new patch. I changed also bootargs and bootcommand for DataFlash in the board configuration file.
[PATCH] Olimex SAM9-L9260 board support
Added support for the Olimex SAM9-L9260 development board. This patch is based on u-boot v1.3.4.
Tested with DataFlash only (not with NAND).
Signed-off-by: Cristian Birsan cristian.birsan@gmail.com --- MAKEALL | 1 + Makefile | 21 ++-- board/olimex/sam9l9260/Makefile | 59 +++++++++ board/olimex/sam9l9260/config.mk | 1 + board/olimex/sam9l9260/led.c | 64 +++++++++ board/olimex/sam9l9260/nand.c | 78 +++++++++++ board/olimex/sam9l9260/partition.c | 39 ++++++ board/olimex/sam9l9260/sam9l9260.c | 251 ++++++++++++++++++++++++++++++++++++ drivers/mtd/nand/nand_ids.c | 2 + include/configs/sam9l9260.h | 213 ++++++++++++++++++++++++++++++ 10 files changed, 720 insertions(+), 9 deletions(-) create mode 100644 board/olimex/sam9l9260/Makefile create mode 100644 board/olimex/sam9l9260/config.mk create mode 100644 board/olimex/sam9l9260/led.c create mode 100644 board/olimex/sam9l9260/nand.c create mode 100644 board/olimex/sam9l9260/partition.c create mode 100644 board/olimex/sam9l9260/sam9l9260.c create mode 100644 include/configs/sam9l9260.h
diff --git a/MAKEALL b/MAKEALL index 9ccb9ac..0e2cb36 100755 --- a/MAKEALL +++ b/MAKEALL @@ -542,6 +542,7 @@ LIST_at91=" \ kb9202 \ mp2usb \ m501sk \ + sam9l9260 \ "
######################################################################### diff --git a/Makefile b/Makefile index 7c13ce8..5b0acae 100644 --- a/Makefile +++ b/Makefile @@ -2487,15 +2487,6 @@ shannon_config : unconfig at91rm9200dk_config : unconfig @$(MKCONFIG) $(@:_config=) arm arm920t at91rm9200dk atmel at91rm9200
-at91sam9261ek_config : unconfig - @$(MKCONFIG) $(@:_config=) arm arm926ejs at91sam9261ek atmel at91 - -at91sam9263ek_config : unconfig - @$(MKCONFIG) $(@:_config=) arm arm926ejs at91sam9263ek atmel at91 - -at91sam9rlek_config : unconfig - @$(MKCONFIG) $(@:_config=) arm arm926ejs at91sam9rlek atmel at91 - cmc_pu2_config : unconfig @$(MKCONFIG) $(@:_config=) arm arm920t cmc_pu2 NULL at91rm9200
@@ -2521,6 +2512,18 @@ at91cap9adk_config : unconfig at91sam9260ek_config : unconfig @$(MKCONFIG) $(@:_config=) arm arm926ejs at91sam9260ek atmel at91
+at91sam9261ek_config : unconfig + @$(MKCONFIG) $(@:_config=) arm arm926ejs at91sam9261ek atmel at91 + +at91sam9263ek_config : unconfig + @$(MKCONFIG) $(@:_config=) arm arm926ejs at91sam9263ek atmel at91 + +at91sam9rlek_config : unconfig + @$(MKCONFIG) $(@:_config=) arm arm926ejs at91sam9rlek atmel at91 + +sam9l9260_config : unconfig + @$(MKCONFIG) $(@:_config=) arm arm926ejs sam9l9260 olimex at91 + ######################################################################## ## ARM Integrator boards - see doc/README-integrator for more info. integratorap_config \ diff --git a/board/olimex/sam9l9260/Makefile b/board/olimex/sam9l9260/Makefile new file mode 100644 index 0000000..8853b7c --- /dev/null +++ b/board/olimex/sam9l9260/Makefile @@ -0,0 +1,59 @@ +# +# (C) Copyright 2003-2008 +# Wolfgang Denk, DENX Software Engineering, wd@denx.de. +# +# (C) Copyright 2008 +# +# Cristian Birsan cristian.birsan@gmail.com based on the work of +# Stelian Pop stelian.pop@leadtechdesign.com +# Lead Tech Design <www.leadtechdesign.com> +# +# 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-y += sam9l9260.o +COBJS-y += led.o +COBJS-y += partition.o +COBJS-$(CONFIG_CMD_NAND) += nand.o + +SRCS := $(SOBJS:.o=.S) $(COBJS-y:.o=.c) +OBJS := $(addprefix $(obj),$(COBJS-y)) +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/olimex/sam9l9260/config.mk b/board/olimex/sam9l9260/config.mk new file mode 100644 index 0000000..ff2cfd1 --- /dev/null +++ b/board/olimex/sam9l9260/config.mk @@ -0,0 +1 @@ +TEXT_BASE = 0x23f00000 diff --git a/board/olimex/sam9l9260/led.c b/board/olimex/sam9l9260/led.c new file mode 100644 index 0000000..ddc375f --- /dev/null +++ b/board/olimex/sam9l9260/led.c @@ -0,0 +1,64 @@ +/* + * (C) Copyright 2007-2008 + * Stelian Pop stelian.pop@leadtechdesign.com + * Lead Tech Design <www.leadtechdesign.com> + * + * 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/at91sam9260.h> +#include <asm/arch/at91_pmc.h> +#include <asm/arch/gpio.h> +#include <asm/arch/io.h> + +#define RED_LED AT91_PIN_PA9 /* this is the power led */ +#define GREEN_LED AT91_PIN_PA6 /* this is the user led */ + +void red_LED_on(void) +{ + at91_set_gpio_value(RED_LED, 1); +} + +void red_LED_off(void) +{ + at91_set_gpio_value(RED_LED, 0); +} + +void green_LED_on(void) +{ + at91_set_gpio_value(GREEN_LED, 0); +} + +void green_LED_off(void) +{ + at91_set_gpio_value(GREEN_LED, 1); +} + +void coloured_LED_init(void) +{ + /* Enable clock */ + at91_sys_write(AT91_PMC_PCER, 1 << AT91SAM9260_ID_PIOA); + + at91_set_gpio_output(RED_LED, 1); + at91_set_gpio_output(GREEN_LED, 1); + + at91_set_gpio_value(RED_LED, 0); + at91_set_gpio_value(GREEN_LED, 1); +} diff --git a/board/olimex/sam9l9260/nand.c b/board/olimex/sam9l9260/nand.c new file mode 100644 index 0000000..3d158e7 --- /dev/null +++ b/board/olimex/sam9l9260/nand.c @@ -0,0 +1,78 @@ +/* + * (C) Copyright 2007-2008 + * Stelian Pop stelian.pop@leadtechdesign.com + * Lead Tech Design <www.leadtechdesign.com> + * + * (C) Copyright 2006 ATMEL Rousset, Lacressonniere Nicolas + * + * 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/at91sam9260.h> +#include <asm/arch/gpio.h> +#include <asm/arch/at91_pio.h> + +#include <nand.h> + +/* + * hardware specific access to control-lines + */ +#define MASK_ALE (1 << 21) /* our ALE is AD21 */ +#define MASK_CLE (1 << 22) /* our CLE is AD22 */ + +static void sam9l9260_nand_hwcontrol(struct mtd_info *mtd, + int cmd, unsigned int ctrl) +{ + struct nand_chip *this = mtd->priv; + + if (ctrl & NAND_CTRL_CHANGE) { + ulong IO_ADDR_W = (ulong) this->IO_ADDR_W; + IO_ADDR_W &= ~(MASK_ALE | MASK_CLE); + + if (ctrl & NAND_CLE) + IO_ADDR_W |= MASK_CLE; + if (ctrl & NAND_ALE) + IO_ADDR_W |= MASK_ALE; + + at91_set_gpio_value(AT91_PIN_PC14, !(ctrl & NAND_NCE)); + this->IO_ADDR_W = (void *) IO_ADDR_W; + } + + if (cmd != NAND_CMD_NONE) + writeb(cmd, this->IO_ADDR_W); +} + +static int sam9l9260_nand_ready(struct mtd_info *mtd) +{ + return at91_get_gpio_value(AT91_PIN_PC13); +} + +int board_nand_init(struct nand_chip *nand) +{ + nand->ecc.mode = NAND_ECC_SOFT; +#ifdef CFG_NAND_DBW_16 + nand->options = NAND_BUSWIDTH_16; +#endif + nand->cmd_ctrl = sam9l9260_nand_hwcontrol; + nand->dev_ready = sam9l9260_nand_ready; + nand->chip_delay = 20; + + return 0; +} diff --git a/board/olimex/sam9l9260/partition.c b/board/olimex/sam9l9260/partition.c new file mode 100644 index 0000000..b29c29a --- /dev/null +++ b/board/olimex/sam9l9260/partition.c @@ -0,0 +1,39 @@ +/* + * (C) Copyright 2008 + * Ulf Samuelsson ulf@atmel.com + * + * 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[CFG_MAX_DATAFLASH_BANKS]; + +struct dataflash_addr cs[CFG_MAX_DATAFLASH_BANKS] = { + {CFG_DATAFLASH_LOGIC_ADDR_CS0, 0}, /* Logical adress, CS */ + {CFG_DATAFLASH_LOGIC_ADDR_CS1, 1} +}; + +/*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, 0x0020FFFF, FLAG_PROTECT_CLEAR, 0, "Kernel"}, +}; diff --git a/board/olimex/sam9l9260/sam9l9260.c b/board/olimex/sam9l9260/sam9l9260.c new file mode 100644 index 0000000..bc6182d --- /dev/null +++ b/board/olimex/sam9l9260/sam9l9260.c @@ -0,0 +1,251 @@ +/* + * (C) Copyright 2007-2008 + * + * Cristian Birsan cristian.birsan@gmail.com based on the work of + * Stelian Pop stelian.pop@leadtechdesign.com + * Lead Tech Design <www.leadtechdesign.com> + * + * 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/at91sam9260.h> +#include <asm/arch/at91sam9260_matrix.h> +#include <asm/arch/at91sam9_smc.h> +#include <asm/arch/at91_pmc.h> +#include <asm/arch/at91_rstc.h> +#include <asm/arch/gpio.h> +#include <asm/arch/io.h> +#include <asm/arch/hardware.h> +#if defined(CONFIG_RESET_PHY_R) && defined(CONFIG_MACB) +#include <net.h> +#endif +#include <netdev.h> + +DECLARE_GLOBAL_DATA_PTR; + +/* ------------------------------------------------------------------------- */ +/* + * Miscelaneous platform dependent initialisations + */ + +static void sam9l9260_serial_hw_init(void) +{ +#ifdef CONFIG_USART0 + at91_set_A_periph(AT91_PIN_PB4, 1); /* TXD0 */ + at91_set_A_periph(AT91_PIN_PB5, 0); /* RXD0 */ + at91_sys_write(AT91_PMC_PCER, 1 << AT91_ID_US0); +#endif + +#ifdef CONFIG_USART1 + at91_set_A_periph(AT91_PIN_PB6, 1); /* TXD1 */ + at91_set_A_periph(AT91_PIN_PB7, 0); /* RXD1 */ + at91_sys_write(AT91_PMC_PCER, 1 << AT91_ID_US1); +#endif + +#ifdef CONFIG_USART2 + at91_set_A_periph(AT91_PIN_PB8, 1); /* TXD2 */ + at91_set_A_periph(AT91_PIN_PB9, 0); /* RXD2 */ + at91_sys_write(AT91_PMC_PCER, 1 << AT91_ID_US2); +#endif + +#ifdef CONFIG_USART3 /* DBGU */ + at91_set_A_periph(AT91_PIN_PB14, 0); /* DRXD */ + at91_set_A_periph(AT91_PIN_PB15, 1); /* DTXD */ + at91_sys_write(AT91_PMC_PCER, 1 << AT91_ID_SYS); +#endif +} + +#ifdef CONFIG_CMD_NAND +static void sam9l9260_nand_hw_init(void) +{ + unsigned long csa; + + /* Enable CS3 */ + csa = at91_sys_read(AT91_MATRIX_EBICSA); + at91_sys_write(AT91_MATRIX_EBICSA, + csa | AT91_MATRIX_CS3A_SMC_SMARTMEDIA); + + /* Configure SMC CS3 for NAND/SmartMedia */ + at91_sys_write(AT91_SMC_SETUP(3), + AT91_SMC_NWESETUP_(1) | AT91_SMC_NCS_WRSETUP_(0) | + AT91_SMC_NRDSETUP_(1) | AT91_SMC_NCS_RDSETUP_(0)); + at91_sys_write(AT91_SMC_PULSE(3), + AT91_SMC_NWEPULSE_(3) | AT91_SMC_NCS_WRPULSE_(3) | + AT91_SMC_NRDPULSE_(3) | AT91_SMC_NCS_RDPULSE_(3)); + at91_sys_write(AT91_SMC_CYCLE(3), + AT91_SMC_NWECYCLE_(5) | AT91_SMC_NRDCYCLE_(5)); + at91_sys_write(AT91_SMC_MODE(3), + AT91_SMC_READMODE | AT91_SMC_WRITEMODE | + AT91_SMC_EXNWMODE_DISABLE | +#ifdef CFG_NAND_DBW_16 + AT91_SMC_DBW_16 | +#else /* CFG_NAND_DBW_8 */ + AT91_SMC_DBW_8 | +#endif + AT91_SMC_TDF_(2)); + + at91_sys_write(AT91_PMC_PCER, 1 << AT91SAM9260_ID_PIOC); + + /* Configure RDY/BSY */ + at91_set_gpio_input(AT91_PIN_PC13, 1); + + /* Enable NandFlash */ + at91_set_gpio_output(AT91_PIN_PC14, 1); +} +#endif + +#ifdef CONFIG_HAS_DATAFLASH +static void sam9l9260_spi_hw_init(void) +{ + at91_set_A_periph(AT91_PIN_PA3, 0); /* SPI0_NPCS0 */ + at91_set_B_periph(AT91_PIN_PC11, 0); /* SPI0_NPCS1 */ + + at91_set_A_periph(AT91_PIN_PA0, 0); /* SPI0_MISO */ + at91_set_A_periph(AT91_PIN_PA1, 0); /* SPI0_MOSI */ + at91_set_A_periph(AT91_PIN_PA2, 0); /* SPI0_SPCK */ + + /* Enable clock */ + at91_sys_write(AT91_PMC_PCER, 1 << AT91SAM9260_ID_SPI0); +} +#endif + +#ifdef CONFIG_MACB +static void sam9l9260_macb_hw_init(void) +{ + /* Enable clock */ + at91_sys_write(AT91_PMC_PCER, 1 << AT91SAM9260_ID_EMAC); + + /* + * Disable pull-up on: + * RXDV (PA17) => PHY normal mode (not Test mode) + * ERX0 (PA14) => PHY ADDR0 + * ERX1 (PA15) => PHY ADDR1 + * ERX2 (PA25) => PHY ADDR2 + * ERX3 (PA26) => PHY ADDR3 + * ECRS (PA28) => PHY ADDR4 => PHYADDR = 0x0 + * + * PHY has internal pull-down + */ + writel(pin_to_mask(AT91_PIN_PA14) | + pin_to_mask(AT91_PIN_PA15) | + pin_to_mask(AT91_PIN_PA17) | + pin_to_mask(AT91_PIN_PA25) | + pin_to_mask(AT91_PIN_PA26) | + pin_to_mask(AT91_PIN_PA28), + pin_to_controller(AT91_PIN_PA0) + PIO_PUDR); + + /* Need to reset PHY -> 500ms reset */ + at91_sys_write(AT91_RSTC_MR, AT91_RSTC_KEY | + (AT91_RSTC_ERSTL & (0x0D << 8)) | + AT91_RSTC_URSTEN); + + at91_sys_write(AT91_RSTC_CR, AT91_RSTC_KEY | AT91_RSTC_EXTRST); + + /* Wait for end hardware reset */ + while (!(at91_sys_read(AT91_RSTC_SR) & AT91_RSTC_NRSTL)); + + /* Restore NRST value */ + at91_sys_write(AT91_RSTC_MR, AT91_RSTC_KEY | + (AT91_RSTC_ERSTL & (0x0 << 8)) | + AT91_RSTC_URSTEN); + + /* Re-enable pull-up */ + writel(pin_to_mask(AT91_PIN_PA14) | + pin_to_mask(AT91_PIN_PA15) | + pin_to_mask(AT91_PIN_PA17) | + pin_to_mask(AT91_PIN_PA25) | + pin_to_mask(AT91_PIN_PA26) | + pin_to_mask(AT91_PIN_PA28), + pin_to_controller(AT91_PIN_PA0) + PIO_PUER); + + at91_set_A_periph(AT91_PIN_PA19, 0); /* ETXCK_EREFCK */ + at91_set_A_periph(AT91_PIN_PA17, 0); /* ERXDV */ + at91_set_A_periph(AT91_PIN_PA14, 0); /* ERX0 */ + at91_set_A_periph(AT91_PIN_PA15, 0); /* ERX1 */ + at91_set_A_periph(AT91_PIN_PA18, 0); /* ERXER */ + at91_set_A_periph(AT91_PIN_PA16, 0); /* ETXEN */ + at91_set_A_periph(AT91_PIN_PA12, 0); /* ETX0 */ + at91_set_A_periph(AT91_PIN_PA13, 0); /* ETX1 */ + at91_set_A_periph(AT91_PIN_PA21, 0); /* EMDIO */ + at91_set_A_periph(AT91_PIN_PA20, 0); /* EMDC */ + +#ifndef CONFIG_RMII + at91_set_B_periph(AT91_PIN_PA28, 0); /* ECRS */ + at91_set_B_periph(AT91_PIN_PA29, 0); /* ECOL */ + at91_set_B_periph(AT91_PIN_PA25, 0); /* ERX2 */ + at91_set_B_periph(AT91_PIN_PA26, 0); /* ERX3 */ + at91_set_B_periph(AT91_PIN_PA27, 0); /* ERXCK */ +#if defined(CONFIG_SAM9L9260) + /* + * use PA10, PA11 for ETX2, ETX3. + * PA23 and PA24 are for TWI EEPROM + */ + at91_set_B_periph(AT91_PIN_PA10, 0); /* ETX2 */ + at91_set_B_periph(AT91_PIN_PA11, 0); /* ETX3 */ +#else + at91_set_B_periph(AT91_PIN_PA23, 0); /* ETX2 */ + at91_set_B_periph(AT91_PIN_PA24, 0); /* ETX3 */ +#endif + at91_set_B_periph(AT91_PIN_PA22, 0); /* ETXER */ +#endif + +} +#endif + +int board_init(void) +{ + /* Enable Ctrlc */ + console_init_f(); + + /* arch number of SAM9-L9260-Board */ + gd->bd->bi_arch_number = MACH_TYPE_SAM9_L9260; + /* adress of boot parameters */ + gd->bd->bi_boot_params = PHYS_SDRAM + 0x100; + + sam9l9260_serial_hw_init(); +#ifdef CONFIG_CMD_NAND + sam9l9260_nand_hw_init(); +#endif +#ifdef CONFIG_HAS_DATAFLASH + sam9l9260_spi_hw_init(); +#endif +#ifdef CONFIG_MACB + sam9l9260_macb_hw_init(); +#endif + + return 0; +} + +int dram_init(void) +{ + gd->bd->bi_dram[0].start = PHYS_SDRAM; + gd->bd->bi_dram[0].size = PHYS_SDRAM_SIZE; + return 0; +} + +int board_eth_init(bd_t *bis) +{ + int rc = 0; +#ifdef CONFIG_MACB + /* The default address for the KS8721BL PHY is 0x01 */ + rc = macb_eth_initialize(0, (void *)AT91_BASE_EMAC, 0x01); +#endif + return rc; +} diff --git a/drivers/mtd/nand/nand_ids.c b/drivers/mtd/nand/nand_ids.c index 2ff75c9..ec2ac55 100644 --- a/drivers/mtd/nand/nand_ids.c +++ b/drivers/mtd/nand/nand_ids.c @@ -69,6 +69,8 @@ struct nand_flash_dev nand_flash_ids[] = {
{"NAND 256MiB 3,3V 8-bit", 0x71, 512, 256, 0x4000, 0},
+ {"NAND 512MiB 3,3V 8-bit", 0xDC, 512, 512, 0x4000, 0}, + /* * These are the new chips with large page size. The pagesize and the * erasesize is determined from the extended id bytes diff --git a/include/configs/sam9l9260.h b/include/configs/sam9l9260.h new file mode 100644 index 0000000..cc13af0 --- /dev/null +++ b/include/configs/sam9l9260.h @@ -0,0 +1,213 @@ +/* + * (C) Copyright 2007-2008 + * + * Cristian Birsan cristian.birsan@gmail.com based on the work of + * Stelian Pop stelian.pop@leadtechdesign.com + * Lead Tech Design <www.leadtechdesign.com> + * + * Configuration settings for the SAM9-L9260 board. + * + * 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 + */ + +#ifndef __CONFIG_H +#define __CONFIG_H + +/* Hostname */ +#define CONFIG_HOSTNAME sam9l9260 + +/* ARM asynchronous clock */ +#define AT91_MAIN_CLOCK 198656000 /* from 18.432 MHz crystal */ +#define AT91_MASTER_CLOCK 99328000 /* peripheral = main / 2 */ +#define CFG_HZ 1000000 /* 1us resolution */ + +#define AT91_SLOW_CLOCK 32768 /* slow clock */ + +#define CONFIG_ARM926EJS 1 /* This is an ARM926EJS Core */ +#define CONFIG_AT91SAM9260 1 /* It's an Atmel AT91SAM9260 SoC*/ +#define CONFIG_SAM9L9260 1 /* on an SAM9-L9260 Board */ +#undef CONFIG_USE_IRQ /* we don't need IRQ/FIQ stuff */ + +#define CONFIG_CMDLINE_TAG 1 /* enable passing of ATAGs */ +#define CONFIG_SETUP_MEMORY_TAGS 1 +#define CONFIG_INITRD_TAG 1 + +#define CONFIG_SKIP_LOWLEVEL_INIT +#define CONFIG_SKIP_RELOCATE_UBOOT + +/* + * Hardware drivers + */ +#define CONFIG_ATMEL_USART 1 +#undef CONFIG_USART0 +#undef CONFIG_USART1 +#undef CONFIG_USART2 +#define CONFIG_USART3 1 /* USART 3 is DBGU */ + +#define CONFIG_BOOTDELAY 3 + +/* + * BOOTP options + */ +#define CONFIG_BOOTP_BOOTFILESIZE 1 +#define CONFIG_BOOTP_BOOTPATH 1 +#define CONFIG_BOOTP_GATEWAY 1 +#define CONFIG_BOOTP_HOSTNAME 1 + +/* + * Command line configuration. + */ +#include <config_cmd_default.h> +#undef CONFIG_CMD_BDI +#undef CONFIG_CMD_IMI +#undef CONFIG_CMD_AUTOSCRIPT +#undef CONFIG_CMD_FPGA +#undef CONFIG_CMD_LOADS +#undef CONFIG_CMD_IMLS + +#define CONFIG_CMD_PING 1 +#define CONFIG_CMD_DHCP 1 +#define CONFIG_CMD_NAND 1 +#define CONFIG_CMD_USB 1 + +/* SDRAM */ +#define CONFIG_NR_DRAM_BANKS 1 +#define PHYS_SDRAM 0x20000000 +#define PHYS_SDRAM_SIZE 0x04000000 /* 64 megs */ + +/* DataFlash */ +#define CONFIG_HAS_DATAFLASH 1 +#define CFG_SPI_WRITE_TOUT (5*CFG_HZ) +#define CFG_MAX_DATAFLASH_BANKS 2 +#define CFG_DATAFLASH_LOGIC_ADDR_CS0 0xC0000000 /* CS0 */ +#define CFG_DATAFLASH_LOGIC_ADDR_CS1 0xD0000000 /* CS1 */ +#define AT91_SPI_CLK 15000000 +#define DATAFLASH_TCSS (0x1a << 16) +#define DATAFLASH_TCHS (0x1 << 24) + +/* NAND flash */ +#define NAND_MAX_CHIPS 1 +#define CFG_MAX_NAND_DEVICE 1 +#define CFG_NAND_BASE 0x40000000 +#define CFG_NAND_DBW_8 1 + +/* NOR flash - no real flash on this board */ +#define CFG_NO_FLASH 1 + +/* Ethernet */ +#define CONFIG_MACB 1 +#undef CONFIG_RMII /* 1 */ +#define CONFIG_NET_MULTI 1 +#define CONFIG_NET_RETRY_COUNT 20 + +/* USB */ +#define CONFIG_USB_OHCI_NEW 1 +#define LITTLEENDIAN 1 +#define CONFIG_DOS_PARTITION 1 +#define CFG_USB_OHCI_CPU_INIT 1 +#define CFG_USB_OHCI_REGS_BASE 0x00500000 /* AT91SAM9260_UHP_BASE */ +#define CFG_USB_OHCI_SLOT_NAME "at91sam9260" +#define CFG_USB_OHCI_MAX_ROOT_PORTS 2 +#define CONFIG_USB_STORAGE 1 + +/* File Systems*/ +#define CONFIG_CMD_FAT 1 +#define CONFIG_CMD_EXT2 1 +#define CONFIG_CMD_REISER 1 + +#define CFG_LOAD_ADDR 0x22000000 /* load address */ + +#define CFG_MEMTEST_START PHYS_SDRAM +#define CFG_MEMTEST_END 0x23e00000 + +#undef CFG_USE_DATAFLASH_CS0 +#define CFG_USE_DATAFLASH_CS1 1 +#undef CFG_USE_NANDFLASH + +#ifdef CFG_USE_DATAFLASH_CS0 + +/* bootstrap + u-boot + env + linux in dataflash on CS0 */ +#define CONFIG_ENV_IS_IN_DATAFLASH 1 +#define CFG_MONITOR_BASE (CFG_DATAFLASH_LOGIC_ADDR_CS0 + 0x8400) +#define CONFIG_ENV_OFFSET 0x4200 +#define CONFIG_ENV_ADDR (CFG_DATAFLASH_LOGIC_ADDR_CS0 + CONFIG_ENV_OFFSET) +#define CONFIG_ENV_SIZE 0x4200 +#define CONFIG_BOOTCOMMAND "cp.b 0xC0042000 0x22000000 0x1CE000; bootm" +#define CONFIG_BOOTARGS "mem=64M " \ + "console=ttyS0,115200 " \ + "root=/dev/mtdblock1 " \ + "noinitrd " \ + "rootfstype=jffs2" + +#elif CFG_USE_DATAFLASH_CS1 + +/* bootstrap + u-boot + env + linux in dataflash on CS1 */ +#define CONFIG_ENV_IS_IN_DATAFLASH 1 +#define CFG_MONITOR_BASE (CFG_DATAFLASH_LOGIC_ADDR_CS1 + 0x8400) +#define CONFIG_ENV_OFFSET 0x4200 +#define CONFIG_ENV_ADDR (CFG_DATAFLASH_LOGIC_ADDR_CS1 + CONFIG_ENV_OFFSET) +#define CONFIG_ENV_SIZE 0x4200 +#define CONFIG_BOOTCOMMAND "cp.b 0xD0042000 0x22000000 0x1CE000; bootm" +#define CONFIG_BOOTARGS "mem=64M " \ + "console=ttyS0,115200 " \ + "root=/dev/mtdblock1 " \ + "noinitrd " \ + "rootfstype=jffs2" + +#else /* CFG_USE_NANDFLASH */ + +/* bootstrap + u-boot + env + linux in nandflash */ +#define CONFIG_ENV_IS_IN_NAND 1 +#define CONFIG_ENV_OFFSET 0x60000 +#define CONFIG_ENV_OFFSET_REDUND 0x80000 +#define CONFIG_ENV_SIZE 0x20000 /* 1 sector = 128 kB */ +#define CONFIG_BOOTCOMMAND "nand read 0x22000000 0xA0000 0x200000; bootm" +#define CONFIG_BOOTARGS "console=ttyS0,115200 " \ + "root=/dev/mtdblock5 " \ + "mtdparts=at91_nand:128k(bootstrap)ro," \ + "256k(uboot)ro,128k(env1)ro," \ + "128k(env2)ro,2M(linux),-(root) " \ + "rw rootfstype=jffs2" + +#endif + +#define CONFIG_BAUDRATE 115200 +#define CFG_BAUDRATE_TABLE {115200 , 19200, 38400, 57600, 9600 } + +#define CFG_PROMPT "U-Boot> " +#define CFG_CBSIZE 256 +#define CFG_MAXARGS 16 +#define CFG_PBSIZE (CFG_CBSIZE + sizeof(CFG_PROMPT) + 16) +#define CFG_LONGHELP 1 +#define CONFIG_CMDLINE_EDITING 1 + +#define ROUND(A, B) (((A) + (B) -1) & ~((B) - 1)) +/* + * Size of malloc() pool + */ +#define CFG_MALLOC_LEN ROUND(3 * CONFIG_ENV_SIZE + 128*1024, 0x1000) +#define CFG_GBL_DATA_SIZE 128 /* 128 bytes for initial data */ + +#define CONFIG_STACKSIZE (32*1024) /* regular stack */ + +#ifdef CONFIG_USE_IRQ +#error CONFIG_USE_IRQ not supported +#endif + +#endif

Dear all,
In the previous patch i removed the code from the section below.
+#ifdef CONFIG_RESET_PHY_R +void reset_phy(void) +{ +#ifdef CONFIG_MACB
- /*
* Initialize ethernet HW addr prior to starting Linux,
* needed for nfsroot
*/
- eth_init(gd->bd);
+#endif
Please do NOT do this. It's a violation of the U-Boot design principles, which clearly say that only such periphereals that are actually being used by U-Boot shall be initialized, and even if they are being used, these shall be deactivated after use.
Carelessly leaving ports or devices in an initialized stated has been the source for problems too many times before.
Don't do that.
The u-boot works but when I try to use nfs as root filesystem i encounter the following issue:
............. MACB_mii_bus: probed eth0: Atmel MACB at 0xfffc4000 irq 21 (00:00:00:00:00:00) eth0: attached PHY driver [KS8721BL] (mii_bus:phy_addr=ffffffff:01, irq=-1) .............
From previous messages i understand that the MAC is set to 00:00:00:00:00:00 which is bad.
IP-Config: Failed to open eth0
I used again setenv ethaddr 00:04:25:12:34:56 in u-boot. After saveenv and reboot i used md command to display the EMAC 0xFFFC4000 (named MACB in the driver ) registers
U-Boot> md 0xfff4c000 fff4c000: 00000000 00000000 00000000 00000000 ................ fff4c010: 00000000 00000000 00000000 00000000 ................ fff4c020: 00000000 00000000 00000000 00000000 ................ fff4c030: 00000000 00000000 00000000 00000000 ................ fff4c040: 00000000 00000000 00000000 00000000 ................ fff4c050: 00000000 00000000 00000000 00000000 ................ fff4c060: 00000000 00000000 00000000 00000000 ................ fff4c070: 00000000 00000000 00000000 00000000 ................ fff4c080: 00000000 00000000 00000000 00000000 ................ fff4c090: 00000000 00000000 00000000 00000000 ................ fff4c0a0: 00000000 00000000 00000000 00000000 ................ fff4c0b0: 00000000 00000000 00000000 00000000 ................ fff4c0c0: 00000000 00000000 00000000 00000000 ................ fff4c0d0: 00000000 00000000 00000000 00000000 ................ fff4c0e0: 00000000 00000000 00000000 00004000 .............@.. fff4c0f0: 53504932 20202020 00010154 00000190 2IPS T.......
Offset 0x98 Specific Address 1 Bottom Register EMAC_SA1B Read-write Offset 0x9C Specific Address 1 Top Register EMAC_SA1T Read-write
The register EMAC_SA1T and EMAC_SA1B coresponding to top and bottom of the MAC address are 0
Nfs works only with the ugly code that was removed.
I'm spinning in a circle :(
Please send me any suggestion.
Best regards, Cristian Birsan

Dear Cristian Birsan,
In message 48EBDD33.30001@gmail.com you wrote:
I used again setenv ethaddr 00:04:25:12:34:56 in u-boot. After saveenv and reboot i used md command to display the EMAC 0xFFFC4000 (named MACB in the driver ) registers
setenv affects only the U-Boot environment variables. It doe snot program any device registers for you.
And PLEASE: restrict your line length to 70 characters or less.
Nfs works only with the ugly code that was removed.
I'm spinning in a circle :(
Please read the previous postings, and the FAQ.
Please send me any suggestion.
Fix your Linux driver to pick up the MAC address from some convenient place; using a kernel boot argument is one option, using the device tree is another one. The former is less effort, the latter is more, but would earn you a lot of credits :-)
Best regards,
Wolfgang Denk

Dear Wolfgang Denk,
On Wed, Oct 8, 2008 at 1:55 AM, Wolfgang Denk wd@denx.de wrote:
setenv affects only the U-Boot environment variables. It doe snot program any device registers for you.
And PLEASE: restrict your line length to 70 characters or less.
Nfs works only with the ugly code that was removed.
I'm spinning in a circle :(
Please read the previous postings, and the FAQ.
I read the arm-linux mailing lists and I saw similar discussions there. Now it's clear to me that u-boot shouldn't initialize the EMAC (MACB) registers with the MAC address. In the newer kernel releases ( 2.6.26 or newer ) there is a fix for the MACB driver and it can be used for boards that do not store their MAC address in a nonvolatile memory like an EEPROM.
Thank you for your time and quick response to questions.
Please consider the u-boot patch from the previous post for the next merge window.
Best regards,
Cristian Birsan

Dear Wolfgang Denk,
I have submitted a few weeks ago a patch for Olimex SAM9-L9260 (similar to AT91SAM9260-EK board from Atmel).
Is is possible to include that patch in the new version of u-boot ?
If it's needed I can resend a new patch for the u-boot v2008.10
Please let me know what should I do next.
Best regards,
Cristian

On 01:41 Fri 31 Oct , Cristian Birsan wrote:
Dear Wolfgang Denk,
I have submitted a few weeks ago a patch for Olimex SAM9-L9260 (similar to AT91SAM9260-EK board from Atmel).
Is is possible to include that patch in the new version of u-boot ?
If it's needed I can resend a new patch for the u-boot v2008.10
Please let me know what should I do next.
please do
Best Regards, J.

On 21:03 Mon 06 Oct , Cristian Birsan wrote:
Added support for the Olimex SAM9-L9260 development board. This patch is based on u-boot v1.3.4.
Tested with data flash only (not with NAND).
Signed-off-by: Cristian Birsan cristian.birsan@gmail.com
MAKEALL | 1 + Makefile | 21 ++-- board/olimex/sam9l9260/Makefile | 59 ++++++++ board/olimex/sam9l9260/config.mk | 1 + board/olimex/sam9l9260/led.c | 64 +++++++++ board/olimex/sam9l9260/nand.c | 78 +++++++++++ board/olimex/sam9l9260/partition.c | 39 ++++++ board/olimex/sam9l9260/sam9l9260.c | 264 ++++++++++++++++++++++++++++++++++++ drivers/mtd/nand/nand_ids.c | 2 + include/configs/sam9l9260.h | 212 +++++++++++++++++++++++++++++ 10 files changed, 732 insertions(+), 9 deletions(-) create mode 100644 board/olimex/sam9l9260/Makefile create mode 100644 board/olimex/sam9l9260/config.mk create mode 100644 board/olimex/sam9l9260/led.c create mode 100644 board/olimex/sam9l9260/nand.c create mode 100644 board/olimex/sam9l9260/partition.c create mode 100644 board/olimex/sam9l9260/sam9l9260.c create mode 100644 include/configs/sam9l9260.h
diff --git a/MAKEALL b/MAKEALL index 9ccb9ac..0e2cb36 100755 --- a/MAKEALL +++ b/MAKEALL @@ -542,6 +542,7 @@ LIST_at91=" \ kb9202 \ mp2usb \ m501sk \
sam9l9260 \ "
#########################################################################
diff --git a/Makefile b/Makefile index 7c13ce8..5b0acae 100644 --- a/Makefile +++ b/Makefile @@ -2487,15 +2487,6 @@ shannon_config : unconfig at91rm9200dk_config : unconfig @$(MKCONFIG) $(@:_config=) arm arm920t at91rm9200dk atmel at91rm9200
-at91sam9261ek_config : unconfig
- @$(MKCONFIG) $(@:_config=) arm arm926ejs at91sam9261ek atmel at91
-at91sam9263ek_config : unconfig
- @$(MKCONFIG) $(@:_config=) arm arm926ejs at91sam9263ek atmel at91
-at91sam9rlek_config : unconfig
- @$(MKCONFIG) $(@:_config=) arm arm926ejs at91sam9rlek atmel at91
- cmc_pu2_config : unconfig @$(MKCONFIG) $(@:_config=) arm arm920t cmc_pu2 NULL at91rm9200
@@ -2521,6 +2512,18 @@ at91cap9adk_config : unconfig at91sam9260ek_config : unconfig @$(MKCONFIG) $(@:_config=) arm arm926ejs at91sam9260ek atmel at91
+at91sam9261ek_config : unconfig
- @$(MKCONFIG) $(@:_config=) arm arm926ejs at91sam9261ek atmel at91
+at91sam9263ek_config : unconfig
- @$(MKCONFIG) $(@:_config=) arm arm926ejs at91sam9263ek atmel at91
+at91sam9rlek_config : unconfig
- @$(MKCONFIG) $(@:_config=) arm arm926ejs at91sam9rlek atmel at91
+sam9l9260_config : unconfig
- @$(MKCONFIG) $(@:_config=) arm arm926ejs sam9l9260 olimex at91
why do you touch other at91 config?
######################################################################## ## ARM Integrator boards - see doc/README-integrator for more info. integratorap_config \ diff --git a/board/olimex/sam9l9260/Makefile b/board/olimex/sam9l9260/Makefile new file mode 100644 index 0000000..8853b7c --- /dev/null +++ b/board/olimex/sam9l9260/Makefile @@ -0,0 +1,59 @@ +# +# (C) Copyright 2003-2008 +# Wolfgang Denk, DENX Software Engineering, wd@denx.de. +# +# (C) Copyright 2008 +# +# Cristian Birsan cristian.birsan@gmail.com based on the work of +# Stelian Pop stelian.pop@leadtechdesign.com +# Lead Tech Design <www.leadtechdesign.com> +# +# 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-y += sam9l9260.o +COBJS-y += led.o +COBJS-y += partition.o +COBJS-$(CONFIG_CMD_NAND) += nand.o
+SRCS := $(SOBJS:.o=.S) $(COBJS-y:.o=.c) +OBJS := $(addprefix $(obj),$(COBJS-y)) +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/olimex/sam9l9260/config.mk b/board/olimex/sam9l9260/config.mk new file mode 100644
- return 0;
+} diff --git a/board/olimex/sam9l9260/partition.c b/board/olimex/sam9l9260/partition.c new file mode 100644 index 0000000..b29c29a --- /dev/null +++ b/board/olimex/sam9l9260/partition.c @@ -0,0 +1,39 @@ +/*
- (C) Copyright 2008
- Ulf Samuelsson ulf@atmel.com
- 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[CFG_MAX_DATAFLASH_BANKS];
+struct dataflash_addr cs[CFG_MAX_DATAFLASH_BANKS] = {
- {CFG_DATAFLASH_LOGIC_ADDR_CS0, 0}, /* Logical adress, CS */
- {CFG_DATAFLASH_LOGIC_ADDR_CS1, 1}
+};
+/*define the area offsets*/ +dataflash_protect_t area_list[NB_DATAFLASH_AREA] = {
- {0x00000000, 0x000041FF, FLAG_PROTECT_SET, 0, "Bootstrap"},
^^^ whitespace please fix
- {0x00004200, 0x000083FF, FLAG_PROTECT_CLEAR, 0, "Environment"},
- {0x00008400, 0x00041FFF, FLAG_PROTECT_SET, 0, "U-Boot"},
^^^ whitespace please fix
- {0x00042000, 0x0020FFFF, FLAG_PROTECT_CLEAR, 0, "Kernel"},
+}; diff --git a/board/olimex/sam9l9260/sam9l9260.c b/board/olimex/sam9l9260/sam9l9260.c new file mode 100644 index 0000000..15578d1 --- /dev/null +++ b/board/olimex/sam9l9260/sam9l9260.c @@ -0,0 +1,264 @@ +/*
- (C) Copyright 2007-2008
- Cristian Birsan cristian.birsan@gmail.com based on the work of
- Stelian Pop stelian.pop@leadtechdesign.com
- Lead Tech Design <www.leadtechdesign.com>
- 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/at91sam9260.h> +#include <asm/arch/at91sam9260_matrix.h> +#include <asm/arch/at91sam9_smc.h> +#include <asm/arch/at91_pmc.h> +#include <asm/arch/at91_rstc.h> +#include <asm/arch/gpio.h> +#include <asm/arch/io.h> +#include <asm/arch/hardware.h> +#if defined(CONFIG_RESET_PHY_R) && defined(CONFIG_MACB)
- return 0;
+}
+int dram_init(void) +{
- gd->bd->bi_dram[0].start = PHYS_SDRAM;
- gd->bd->bi_dram[0].size = PHYS_SDRAM_SIZE;
- return 0;
+}
+#ifdef CONFIG_RESET_PHY_R +void reset_phy(void) +{ +#ifdef CONFIG_MACB
- /*
* Initialize ethernet HW addr prior to starting Linux,
* needed for nfsroot
*/
- eth_init(gd->bd);
+#endif +} +#endif
+int board_eth_init(bd_t *bis) +{
- int rc = 0;
+#ifdef CONFIG_MACB
- /* The default address for the KS8721BL PHY is 0x01 */
- rc = macb_eth_initialize(0, (void *)AT91_BASE_EMAC, 0x01);
+#endif
- return rc;
+} diff --git a/drivers/mtd/nand/nand_ids.c b/drivers/mtd/nand/nand_ids.c index 2ff75c9..ec2ac55 100644 --- a/drivers/mtd/nand/nand_ids.c +++ b/drivers/mtd/nand/nand_ids.c @@ -69,6 +69,8 @@ struct nand_flash_dev nand_flash_ids[] = {
{"NAND 256MiB 3,3V 8-bit", 0x71, 512, 256, 0x4000, 0},
- {"NAND 512MiB 3,3V 8-bit", 0xDC, 512, 512, 0x4000, 0},
^^^ whitespace please fix
- /*
- These are the new chips with large page size. The pagesize and the
- erasesize is determined from the extended id bytes
diff --git a/include/configs/sam9l9260.h b/include/configs/sam9l9260.h new file mode 100644 index 0000000..90089b0 --- /dev/null +++ b/include/configs/sam9l9260.h @@ -0,0 +1,212 @@ +/*
- (C) Copyright 2007-2008
- Cristian Birsan cristian.birsan@gmail.com based on the work of
- Stelian Pop stelian.pop@leadtechdesign.com
- Lead Tech Design <www.leadtechdesign.com>
- Configuration settings for the SAM9-L9260 board.
- 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
- */
+#ifndef __CONFIG_H +#define __CONFIG_H
+/* Hostname */ +#define CONFIG_HOSTNAME sam9l9260
+/* ARM asynchronous clock */ +#define AT91_MAIN_CLOCK 198656000 /* from 18.432 MHz crystal */ +#define AT91_MASTER_CLOCK 99328000 /* peripheral = main / 2 */ +#define CFG_HZ 1000000 /* 1us resolution */
please update to CONFIG_SYS_
Note that I've plan and announce that I'll generate a common code for at91sam9260 and other to reduce duplicate code.
Best Regards, J.

On 08:05 Fri 31 Oct , Jean-Christophe PLAGNIOL-VILLARD wrote:
On 21:03 Mon 06 Oct , Cristian Birsan wrote:
Added support for the Olimex SAM9-L9260 development board. This patch is based on u-boot v1.3.4.
Tested with data flash only (not with NAND).
Signed-off-by: Cristian Birsan cristian.birsan@gmail.com
MAKEALL | 1 + Makefile | 21 ++-- board/olimex/sam9l9260/Makefile | 59 ++++++++ board/olimex/sam9l9260/config.mk | 1 + board/olimex/sam9l9260/led.c | 64 +++++++++ board/olimex/sam9l9260/nand.c | 78 +++++++++++ board/olimex/sam9l9260/partition.c | 39 ++++++ board/olimex/sam9l9260/sam9l9260.c | 264 ++++++++++++++++++++++++++++++++++++ drivers/mtd/nand/nand_ids.c | 2 + include/configs/sam9l9260.h | 212 +++++++++++++++++++++++++++++ 10 files changed, 732 insertions(+), 9 deletions(-) create mode 100644 board/olimex/sam9l9260/Makefile create mode 100644 board/olimex/sam9l9260/config.mk create mode 100644 board/olimex/sam9l9260/led.c create mode 100644 board/olimex/sam9l9260/nand.c create mode 100644 board/olimex/sam9l9260/partition.c create mode 100644 board/olimex/sam9l9260/sam9l9260.c create mode 100644 include/configs/sam9l9260.h
I've forget one think please add an entry to the MAINTAINER file
Best Regards, J.

Dear Cristian
In message 20081031082313.GE23324@game.jcrosoft.org Jean-Christophe wrote:
I've forget one think please add an entry to the MAINTAINER file
This can be done by sending an additional patch - no need to resubmit all the stuff.
Best regards,
Wolfgang Denk

On 09:48 Fri 31 Oct , Wolfgang Denk wrote:
Dear Cristian
In message 20081031082313.GE23324@game.jcrosoft.org Jean-Christophe wrote:
I've forget one think please add an entry to the MAINTAINER file
This can be done by sending an additional patch - no need to resubmit all the stuff.
Yes but the patch need to be rebased so If the author can do it a the time it will nice
Best Regards, J.

Dear Jean-Christophe PLAGNIOL-VILLARD,
I will remove all unnecessary white spaces from the previous patch. I have now a patch version for u-boot u-boot v2008.10
"
######################################################################### diff --git a/Makefile b/Makefile index 7c13ce8..5b0acae 100644 --- a/Makefile +++ b/Makefile @@ -2487,15 +2487,6 @@ shannon_config : unconfig at91rm9200dk_config : unconfig @$(MKCONFIG) $(@:_config=) arm arm920t at91rm9200dk atmel at91rm9200
-at91sam9261ek_config : unconfig
- @$(MKCONFIG) $(@:_config=) arm arm926ejs at91sam9261ek atmel at91
-at91sam9263ek_config : unconfig
- @$(MKCONFIG) $(@:_config=) arm arm926ejs at91sam9263ek atmel at91
-at91sam9rlek_config : unconfig
- @$(MKCONFIG) $(@:_config=) arm arm926ejs at91sam9rlek atmel at91
- cmc_pu2_config : unconfig @$(MKCONFIG) $(@:_config=) arm arm920t cmc_pu2 NULL at91rm9200
@@ -2521,6 +2512,18 @@ at91cap9adk_config : unconfig at91sam9260ek_config : unconfig @$(MKCONFIG) $(@:_config=) arm arm926ejs at91sam9260ek atmel at91
+at91sam9261ek_config : unconfig
- @$(MKCONFIG) $(@:_config=) arm arm926ejs at91sam9261ek atmel at91
+at91sam9263ek_config : unconfig
- @$(MKCONFIG) $(@:_config=) arm arm926ejs at91sam9263ek atmel at91
+at91sam9rlek_config : unconfig
- @$(MKCONFIG) $(@:_config=) arm arm926ejs at91sam9rlek atmel at91
+sam9l9260_config : unconfig
- @$(MKCONFIG) $(@:_config=) arm arm926ejs sam9l9260 olimex at91
why do you touch other at91 config?
I touched other configs because i tried to put correctly boards with arm920t and arm926ejs in their sections. I belive that at91sam9261ek at91sam9263ek should be placed in the arm926ejs core section. Please correct me if i'm wrong.
+#ifndef __CONFIG_H +#define __CONFIG_H
+/* Hostname */ +#define CONFIG_HOSTNAME sam9l9260
+/* ARM asynchronous clock */ +#define AT91_MAIN_CLOCK 198656000 /* from 18.432 MHz crystal */ +#define AT91_MASTER_CLOCK 99328000 /* peripheral = main / 2 */ +#define CFG_HZ 1000000 /* 1us resolution */
please update to CONFIG_SYS_
Note that I've plan and announce that I'll generate a common code for at91sam9260 and other to reduce duplicate code.
I can change CFG_HZ to CONFIG_SYS_HZ but that macro is used in /cpu/arm926ejs/at91/timer.c. If I change the macro from timer.c I should update all at91 configurations but I can test only on Olimex (at91sam9260) board. I do not know if it's safe to modify other configurations without appropriate testing.
Regards, Cristian

On 14:49 Sat 01 Nov , Cristian Birsan wrote:
Dear Jean-Christophe PLAGNIOL-VILLARD,
I will remove all unnecessary white spaces from the previous patch. I have now a patch version for u-boot u-boot v2008.10
"
######################################################################### diff --git a/Makefile b/Makefile index 7c13ce8..5b0acae 100644 --- a/Makefile +++ b/Makefile @@ -2487,15 +2487,6 @@ shannon_config : unconfig at91rm9200dk_config : unconfig @$(MKCONFIG) $(@:_config=) arm arm920t at91rm9200dk atmel at91rm9200
-at91sam9261ek_config : unconfig
- @$(MKCONFIG) $(@:_config=) arm arm926ejs at91sam9261ek atmel at91
-at91sam9263ek_config : unconfig
- @$(MKCONFIG) $(@:_config=) arm arm926ejs at91sam9263ek atmel at91
-at91sam9rlek_config : unconfig
- @$(MKCONFIG) $(@:_config=) arm arm926ejs at91sam9rlek atmel at91
- cmc_pu2_config : unconfig @$(MKCONFIG) $(@:_config=) arm arm920t cmc_pu2 NULL at91rm9200
@@ -2521,6 +2512,18 @@ at91cap9adk_config : unconfig at91sam9260ek_config : unconfig @$(MKCONFIG) $(@:_config=) arm arm926ejs at91sam9260ek atmel at91
+at91sam9261ek_config : unconfig
- @$(MKCONFIG) $(@:_config=) arm arm926ejs at91sam9261ek atmel at91
+at91sam9263ek_config : unconfig
- @$(MKCONFIG) $(@:_config=) arm arm926ejs at91sam9263ek atmel at91
+at91sam9rlek_config : unconfig
- @$(MKCONFIG) $(@:_config=) arm arm926ejs at91sam9rlek atmel at91
+sam9l9260_config : unconfig
- @$(MKCONFIG) $(@:_config=) arm arm926ejs sam9l9260 olimex at91
why do you touch other at91 config?
I touched other configs because i tried to put correctly boards with arm920t and arm926ejs in their sections. I belive that at91sam9261ek at91sam9263ek should be placed in the arm926ejs core section. Please correct me if i'm wrong.
It's supposed to be done in an other patch which I've post btw
+#ifndef __CONFIG_H +#define __CONFIG_H
+/* Hostname */ +#define CONFIG_HOSTNAME sam9l9260
+/* ARM asynchronous clock */ +#define AT91_MAIN_CLOCK 198656000 /* from 18.432 MHz crystal */ +#define AT91_MASTER_CLOCK 99328000 /* peripheral = main / 2 */ +#define CFG_HZ 1000000 /* 1us resolution */
please update to CONFIG_SYS_
Note that I've plan and announce that I'll generate a common code for at91sam9260 and other to reduce duplicate code.
I can change CFG_HZ to CONFIG_SYS_HZ but that macro is used in /cpu/arm926ejs/at91/timer.c. If I change the macro from timer.c I should update all at91 configurations but I can test only on Olimex (at91sam9260) board. I do not know if it's safe to modify other configurations without appropriate testing.
I've merge it at the same time of all CFG_
Best Regards, J.
participants (3)
-
Cristian Birsan
-
Jean-Christophe PLAGNIOL-VILLARD
-
Wolfgang Denk