[U-Boot-Users] Add support for the hammerhead (AVR32) board

Hi
This patch adds support for our new hammerhead (AVR32) board.
Thanks & best rgds. Julien May

Signed-off-by: Julien May mailinglist@miromico.ch --- MAKEALL | 1 + Makefile | 3 + board/miromico/hammerhead/Makefile | 40 +++++++ board/miromico/hammerhead/config.mk | 3 + board/miromico/hammerhead/eth.c | 37 ++++++ board/miromico/hammerhead/hammerhead.c | 105 +++++++++++++++++ board/miromico/hammerhead/u-boot.lds | 73 ++++++++++++ cpu/at32ap/at32ap700x/gpio.c | 11 ++ cpu/at32ap/at32ap700x/sm.h | 2 +- cpu/at32ap/cpu.c | 5 + include/asm-avr32/arch-at32ap700x/clk.h | 1 + include/asm-avr32/arch-at32ap700x/gpio.h | 3 + include/configs/hammerhead.h | 179 ++++++++++++++++++++++++++++++ net/eth.c | 4 + 14 files changed, 466 insertions(+), 1 deletions(-) create mode 100644 board/miromico/hammerhead/Makefile create mode 100644 board/miromico/hammerhead/config.mk create mode 100644 board/miromico/hammerhead/eth.c create mode 100644 board/miromico/hammerhead/hammerhead.c create mode 100644 board/miromico/hammerhead/u-boot.lds create mode 100644 include/configs/hammerhead.h
diff --git a/MAKEALL b/MAKEALL index f40de23..89b68a5 100755 --- a/MAKEALL +++ b/MAKEALL @@ -699,6 +699,7 @@ LIST_avr32=" \ atstk1004 \ atstk1006 \ atngw100 \ + hammerhead \ "
######################################################################### diff --git a/Makefile b/Makefile index 154e592..09bae45 100644 --- a/Makefile +++ b/Makefile @@ -2885,6 +2885,9 @@ atstk1006_config : unconfig atngw100_config : unconfig @$(MKCONFIG) $(@:_config=) avr32 at32ap atngw100 atmel at32ap700x
+hammerhead_config : unconfig + @$(MKCONFIG) $(@:_config=) avr32 at32ap hammerhead miromico at32ap700x + ######################################################################### ######################################################################### ######################################################################### diff --git a/board/miromico/hammerhead/Makefile b/board/miromico/hammerhead/Makefile new file mode 100644 index 0000000..c5fc67a --- /dev/null +++ b/board/miromico/hammerhead/Makefile @@ -0,0 +1,40 @@ +# +# Copyright (C) 2008 Miromico AG +# +# 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 := $(BOARD).o eth.o + +SRCS := $(SOBJS:.o=.S) $(COBJS:.o=.c) +OBJS := $(addprefix $(obj),$(SOBJS) $(COBJS)) + +$(LIB): $(obj).depend $(OBJS) + $(AR) $(ARFLAGS) $@ $(OBJS) + +######################################################################### + +# defines $(obj).depend target +include $(SRCTREE)/rules.mk + +sinclude $(obj).depend + +######################################################################### diff --git a/board/miromico/hammerhead/config.mk b/board/miromico/hammerhead/config.mk new file mode 100644 index 0000000..9a794e5 --- /dev/null +++ b/board/miromico/hammerhead/config.mk @@ -0,0 +1,3 @@ +TEXT_BASE = 0x00000000 +PLATFORM_RELFLAGS += -ffunction-sections -fdata-sections +PLATFORM_LDFLAGS += --gc-sections diff --git a/board/miromico/hammerhead/eth.c b/board/miromico/hammerhead/eth.c new file mode 100644 index 0000000..969c48e --- /dev/null +++ b/board/miromico/hammerhead/eth.c @@ -0,0 +1,37 @@ +/* + * Copyright (C) 2008 Miromico AG + * + * Ethernet initialization for the Miromico Hammerhead AVR32 board + * + * Mostly copied form Atmel ATNGW100 sources + * + * 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/memory-map.h> + +extern int macb_eth_initialize(int id, void *regs, unsigned int phy_addr); + +#ifdef CONFIG_CMD_NET +void board_eth_initialize(bd_t *bi) +{ + macb_eth_initialize(0, (void *)MACB0_BASE, bi->bi_phy_id[0]); +} +#endif diff --git a/board/miromico/hammerhead/hammerhead.c b/board/miromico/hammerhead/hammerhead.c new file mode 100644 index 0000000..69ff7fa --- /dev/null +++ b/board/miromico/hammerhead/hammerhead.c @@ -0,0 +1,105 @@ +/* + * Copyright (C) 2008 Miromico AG + * + * Mostly copied form atmel ATNGW100 sources + * + * 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 "../cpu/at32ap/at32ap700x/sm.h" + +#include <common.h> + +#include <asm/io.h> +#include <asm/sdram.h> +#include <asm/arch/clk.h> +#include <asm/arch/gpio.h> +#include <asm/arch/hmatrix.h> + +DECLARE_GLOBAL_DATA_PTR; + +static const struct sdram_config sdram_config = { + .data_bits = SDRAM_DATA_32BIT, + .row_bits = 13, + .col_bits = 9, + .bank_bits = 2, + .cas = 3, + .twr = 2, + .trc = 7, + .trp = 2, + .trcd = 2, + .tras = 5, + .txsr = 5, + /* 7.81 us */ + .refresh_period = (781 * (SDRAMC_BUS_HZ / 1000)) / 100000, +}; + +int board_early_init_f(void) +{ + /* Enable SDRAM in the EBI mux */ + hmatrix_slave_write(EBI, SFR, HMATRIX_BIT(EBI_SDRAM_ENABLE)); + + gpio_enable_ebi(); + gpio_enable_usart1(); + +#if defined(CONFIG_MACB) + gpio_enable_macb0(); +#endif +#if defined(CONFIG_MMC) + gpio_enable_mmci(); +#endif + + /* Select GCLK3 peripheral function. We'll need it as clock output + * for ethernet PHY. */ + gpio_enable_gclk3(); + return 0; +} + +long int initdram(int board_type) +{ + unsigned long expected_size; + unsigned long actual_size; + void *sdram_base; + + sdram_base = map_physmem(EBI_SDRAM_BASE, EBI_SDRAM_SIZE, MAP_NOCACHE); + + expected_size = sdram_init(sdram_base, &sdram_config); + actual_size = get_ram_size(sdram_base, expected_size); + + unmap_physmem(sdram_base, EBI_SDRAM_SIZE); + + if (expected_size != actual_size) + printf("Warning: Only %u of %u MiB SDRAM is working\n", + actual_size >> 20, expected_size >> 20); + + return actual_size; +} + +void board_init_info(void) +{ + gd->bd->bi_phy_id[0] = 0x01; +} + +void gclk_init(void) +{ + /* Hammerhead boards uses GCLK3 as 25MHz output to ethernet PHY */ + + /* Enable GCLK3 with no input divider, from OSC0 (crystal) */ + sm_writel( PM_GCCTRL(3), SM_BIT(CEN) ); +} diff --git a/board/miromico/hammerhead/u-boot.lds b/board/miromico/hammerhead/u-boot.lds new file mode 100644 index 0000000..e736adf --- /dev/null +++ b/board/miromico/hammerhead/u-boot.lds @@ -0,0 +1,73 @@ +/* -*- Fundamental -*- + * + * Copyright (C) 2005-2006 Atmel Corporation + * + * 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 + */ +OUTPUT_FORMAT("elf32-avr32", "elf32-avr32", "elf32-avr32") +OUTPUT_ARCH(avr32) +ENTRY(_start) + +SECTIONS +{ + . = 0; + _text = .; + .text : { + *(.exception.text) + *(.text) + *(.text.*) + } + _etext = .; + + .rodata : { + *(.rodata) + *(.rodata.*) + } + + . = ALIGN(8); + _data = .; + .data : { + *(.data) + *(.data.*) + } + + . = ALIGN(4); + __u_boot_cmd_start = .; + .u_boot_cmd : { + KEEP(*(.u_boot_cmd)) + } + __u_boot_cmd_end = .; + + . = ALIGN(4); + _got = .; + .got : { + *(.got) + } + _egot = .; + + . = ALIGN(8); + _edata = .; + + .bss : { + *(.bss) + *(.bss.*) + } + . = ALIGN(8); + _end = .; +} diff --git a/cpu/at32ap/at32ap700x/gpio.c b/cpu/at32ap/at32ap700x/gpio.c index 859124a..2b7717f 100644 --- a/cpu/at32ap/at32ap700x/gpio.c +++ b/cpu/at32ap/at32ap700x/gpio.c @@ -142,3 +142,14 @@ void gpio_enable_mmci(void) gpio_select_periph_A(GPIO_PIN_PA15, 0); /* DATA3 */ } #endif + +/* + * Hammerhead board uses GCLK3 (Periph A on PB29) as 25MHz clock output + * for ethernet PHY. + */ +void __gpio_enable_gclk3(void) +{ + gpio_select_periph_A(GPIO_PIN_PB29, 0); /* GCLK3 */ +} + +void gpio_enable_gclk3(void) __attribute__((weak, alias("__gpio_enable_gclk3"))); diff --git a/cpu/at32ap/at32ap700x/sm.h b/cpu/at32ap/at32ap700x/sm.h index 6492c8e..b6e4409 100644 --- a/cpu/at32ap/at32ap700x/sm.h +++ b/cpu/at32ap/at32ap700x/sm.h @@ -21,7 +21,7 @@ #define SM_PM_IMR 0x0048 #define SM_PM_ISR 0x004c #define SM_PM_ICR 0x0050 -#define SM_PM_GCCTRL 0x0060 +#define SM_PM_GCCTRL(x) (0x0060 + 4 * x) #define SM_RTC_CTRL 0x0080 #define SM_RTC_VAL 0x0084 #define SM_RTC_TOP 0x0088 diff --git a/cpu/at32ap/cpu.c b/cpu/at32ap/cpu.c index 0ba8361..4a92aab 100644 --- a/cpu/at32ap/cpu.c +++ b/cpu/at32ap/cpu.c @@ -65,6 +65,11 @@ int cpu_init(void) sysreg_write(EVBA, (unsigned long)&_evba); asm volatile("csrf %0" : : "i"(SYSREG_EM_OFFSET));
+ if(gclk_init) + { + gclk_init(); + } + return 0; }
diff --git a/include/asm-avr32/arch-at32ap700x/clk.h b/include/asm-avr32/arch-at32ap700x/clk.h index 4a1dd33..63671db 100644 --- a/include/asm-avr32/arch-at32ap700x/clk.h +++ b/include/asm-avr32/arch-at32ap700x/clk.h @@ -76,6 +76,7 @@ static inline unsigned long get_mci_clk_rate(void) #endif
extern void clk_init(void); +extern void gclk_init(void) __attribute__((weak));
/* Board code may need the SDRAM base clock as a compile-time constant */ #define SDRAMC_BUS_HZ (MAIN_CLK_RATE >> CFG_CLKDIV_HSB) diff --git a/include/asm-avr32/arch-at32ap700x/gpio.h b/include/asm-avr32/arch-at32ap700x/gpio.h index b10a3e4..c350d54 100644 --- a/include/asm-avr32/arch-at32ap700x/gpio.h +++ b/include/asm-avr32/arch-at32ap700x/gpio.h @@ -216,5 +216,8 @@ void gpio_enable_macb1(void); #ifdef AT32AP700x_CHIP_HAS_MMCI void gpio_enable_mmci(void); #endif +#ifdef CONFIG_HAMMERHEAD +void gpio_enable_gclk3(void); +#endif
#endif /* __ASM_AVR32_ARCH_GPIO_H__ */ diff --git a/include/configs/hammerhead.h b/include/configs/hammerhead.h new file mode 100644 index 0000000..6699aea --- /dev/null +++ b/include/configs/hammerhead.h @@ -0,0 +1,179 @@ +/* + * Copyright (C) 2008 Miromico AG + * + * Configuration settings for the Miromico Hammerhead AVR32 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 + +#define CONFIG_AVR32 1 +#define CONFIG_AT32AP 1 +#define CONFIG_AT32AP7000 1 +#define CONFIG_HAMMERHEAD 1 + +#define CFG_HZ 1000 + +/* + * Set up the PLL to run at 140 MHz, the CPU to run at the PLL + * frequency, the HSB and PBB busses to run at 1/2 the PLL frequency + * and the PBA bus to run at 1/4 the PLL frequency. + */ +#define CONFIG_PLL 1 +#define CFG_POWER_MANAGER 1 +#define CFG_OSC0_HZ 25000000 /* 25MHz crystal */ +#define CFG_PLL0_DIV 1 +#define CFG_PLL0_MUL 5 +#define CFG_PLL0_SUPPRESS_CYCLES 16 +#define CFG_CLKDIV_CPU 0 +#define CFG_CLKDIV_HSB 1 +#define CFG_CLKDIV_PBA 2 +#define CFG_CLKDIV_PBB 1 + +/* + * The PLLOPT register controls the PLL like this: + * icp = PLLOPT<2> + * ivco = PLLOPT<1:0> + * + * We want icp=1 (default) and ivco=0 (80-160 MHz) or ivco=2 (150-240MHz). + */ +#define CFG_PLL0_OPT 0x04 + +#define CONFIG_USART1 1 + +#define CONFIG_HOSTNAME hammerhead + +/* User serviceable stuff */ +#define CONFIG_DOS_PARTITION 1 + +#define CONFIG_CMDLINE_TAG 1 +#define CONFIG_SETUP_MEMORY_TAGS 1 +#define CONFIG_INITRD_TAG 1 + +#define CONFIG_STACKSIZE (2048) + +#define CONFIG_BAUDRATE 115200 +#define CONFIG_BOOTARGS \ + "console=ttyS0 root=/dev/mtdblock1 rootfstype=jffs2" +#define CONFIG_BOOTCOMMAND \ + "fsload; bootm" + +/* + * Only interrupt autoboot if <space> is pressed. Otherwise, garbage + * data on the serial line may interrupt the boot sequence. + */ +#define CONFIG_BOOTDELAY 1 +#define CONFIG_AUTOBOOT 1 +#define CONFIG_AUTOBOOT_KEYED 1 +#define CONFIG_AUTOBOOT_PROMPT \ + "Press SPACE to abort autoboot in %d seconds\n" +#define CONFIG_AUTOBOOT_DELAY_STR "d" +#define CONFIG_AUTOBOOT_STOP_STR " " + +/* + * After booting the board for the first time, new ethernet address + * should be generated and assigned to the environment variables + * "ethaddr". This is normally done during production. + */ +#define CONFIG_OVERWRITE_ETHADDR_ONCE 1 +#define CONFIG_NET_MULTI 1 + +/* + * BOOTP/DHCP options + */ +#define CONFIG_BOOTP_SUBNETMASK +#define CONFIG_BOOTP_GATEWAY + +#define CONFIG_DOS_PARTITION 1 + +/* + * Command line configuration. + */ +#include <config_cmd_default.h> + +#define CONFIG_CMD_ASKENV +#define CONFIG_CMD_DHCP +#define CONFIG_CMD_EXT2 +#define CONFIG_CMD_FAT +#define CONFIG_CMD_JFFS2 +#define CONFIG_CMD_MMC +#undef CONFIG_CMD_FPGA +#undef CONFIG_CMD_SETGETDCR + +#define CONFIG_ATMEL_USART 1 +#define CONFIG_MACB 1 +#define CONFIG_PIO2 1 +#define CFG_NR_PIOS 5 +#define CFG_HSDRAMC 1 +#define CONFIG_MMC 1 + +#define CFG_DCACHE_LINESZ 32 +#define CFG_ICACHE_LINESZ 32 + +#define CONFIG_NR_DRAM_BANKS 1 + +#define CFG_FLASH_CFI 1 +#define CFG_FLASH_CFI_DRIVER 1 + +#define CFG_FLASH_BASE 0x00000000 +#define CFG_FLASH_SIZE 0x800000 +#define CFG_MAX_FLASH_BANKS 1 +#define CFG_MAX_FLASH_SECT 135 + +#define CFG_MONITOR_BASE CFG_FLASH_BASE + +#define CFG_INTRAM_BASE 0x24000000 +#define CFG_INTRAM_SIZE 0x8000 + +#define CFG_SDRAM_BASE 0x10000000 + +#define CFG_ENV_IS_IN_FLASH 1 +#define CFG_ENV_SIZE 65536 +#define CFG_ENV_ADDR (CFG_FLASH_BASE + CFG_FLASH_SIZE - CFG_ENV_SIZE) + +#define CFG_INIT_SP_ADDR (CFG_INTRAM_BASE + CFG_INTRAM_SIZE) + +#define CFG_MALLOC_LEN (256*1024) +#define CFG_MALLOC_END \ + ({ \ + DECLARE_GLOBAL_DATA_PTR; \ + CFG_SDRAM_BASE + gd->sdram_size; \ + }) +#define CFG_MALLOC_START (CFG_MALLOC_END - CFG_MALLOC_LEN) + +#define CFG_DMA_ALLOC_LEN (16384) + +/* Allow 4MB for the kernel run-time image */ +#define CFG_LOAD_ADDR (CFG_SDRAM_BASE + 0x00400000) +#define CFG_BOOTPARAMS_LEN (16 * 1024) + +/* Other configuration settings that shouldn't have to change all that often */ +#define CFG_PROMPT "Uboot> " +#define CFG_CBSIZE 256 +#define CFG_MAXARGS 16 +#define CFG_PBSIZE (CFG_CBSIZE + sizeof(CFG_PROMPT) + 16) +#define CFG_LONGHELP 1 + +#define CFG_MEMTEST_START CFG_SDRAM_BASE +#define CFG_MEMTEST_END (CFG_MEMTEST_START + 0x1f00000) + +#define CFG_BAUDRATE_TABLE { 115200, 38400, 19200, 9600, 2400 } + +#endif /* __CONFIG_H */ diff --git a/net/eth.c b/net/eth.c index c4f24c6..054a9fd 100644 --- a/net/eth.c +++ b/net/eth.c @@ -65,6 +65,7 @@ extern int atngw100_eth_initialize(bd_t *); extern int mcffec_initialize(bd_t*); extern int mcdmafec_initialize(bd_t*); extern int at91sam9_eth_initialize(bd_t *); +extern int board_eth_initialize(bd_t *);
#ifdef CONFIG_API extern void (*push_packet)(volatile void *, int); @@ -291,6 +292,9 @@ int eth_initialize(bd_t *bis) #if defined(CONFIG_AT91CAP9) || defined(CONFIG_AT91SAM9260) at91sam9_eth_initialize(bis); #endif +#if defined(CONFIG_HAMMERHEAD) + board_eth_initialize(bis); +#endif
if (!eth_devices) { puts ("No ethernet found.\n");

Julien May mailinglist@miromico.ch wrote:
MAKEALL | 1 + Makefile | 3 + board/miromico/hammerhead/Makefile | 40 +++++++ board/miromico/hammerhead/config.mk | 3 + board/miromico/hammerhead/eth.c | 37 ++++++ board/miromico/hammerhead/hammerhead.c | 105 +++++++++++++++++ board/miromico/hammerhead/u-boot.lds | 73 ++++++++++++ cpu/at32ap/at32ap700x/gpio.c | 11 ++ cpu/at32ap/at32ap700x/sm.h | 2 +- cpu/at32ap/cpu.c | 5 + include/asm-avr32/arch-at32ap700x/clk.h | 1 + include/asm-avr32/arch-at32ap700x/gpio.h | 3 + include/configs/hammerhead.h | 179 ++++++++++++++++++++++++++++++ net/eth.c | 4 +
I was just going to rebase and fold the hammerhead patch to prepare it for the next merge window when I noticed that MAINTAINERS isn't updated.
Can you send me a patch adding yourself to MAINTAINERS, assuming you're the one that will be maintaining this board?
Haavard

Hi & welcome back from holiday :)
According to your request...
- Julien
From c720b04110b8bd39be704d92c1073302003b321a Mon Sep 17 00:00:00 2001
From: Julien May julien.may@miromico.ch Date: Mon, 23 Jun 2008 16:44:44 +0200 Subject: [PATCH 1/1] Add support for the hammerhead (AVR32) board.
The Hammerhead platform is built around a AVR32 32-bit microcontroller from Atmel. It offers versatile peripherals, such as ethernet, usb device, usb host etc.
The board also incooperates a power supply and is a Power over Ethernet (PoE) Powered Device (PD).
Additonally, a Cyclone III FPGA from Altera is integrated on the board. The FPGA is mapped into the 32-bit AVR memory bus. The FPGA offers two DDR2 SDRAM interfaces, which will cover even the most exceptional need of memory bandwidth. Together with the onboard video decoder the board is ready for video processing.
For more information see: http:///www.miromico.com/hammerhead
Signed-off-by: Julien May mailinglist@miromico.ch --- MAINTAINERS | 5 +++++ board/miromico/hammerhead/eth.c | 2 +- board/miromico/hammerhead/hammerhead.c | 9 ++++----- cpu/at32ap/at32ap700x/gpio.c | 11 ----------- cpu/at32ap/cpu.c | 2 -- include/asm-avr32/arch-at32ap700x/gpio.h | 3 --- include/configs/hammerhead.h | 14 +++----------- net/eth.c | 4 ++-- 8 files changed, 15 insertions(+), 35 deletions(-)
diff --git a/MAINTAINERS b/MAINTAINERS index 2d8fd58..fd39b26 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -698,6 +698,11 @@ Haavard Skinnemoen hskinnemoen@atmel.com ATSTK1006 AT32AP7000 ATNGW100 AT32AP7000
+Alex Raimondi alex.raimondi@miromico.ch +Julien May julien.may@miromico.ch + + HAMMERHEAD AT32AP7000 + ######################################################################### # SuperH Systems: # # # diff --git a/board/miromico/hammerhead/eth.c b/board/miromico/hammerhead/eth.c index 969c48e..056e9ca 100644 --- a/board/miromico/hammerhead/eth.c +++ b/board/miromico/hammerhead/eth.c @@ -30,7 +30,7 @@ extern int macb_eth_initialize(int id, void *regs, unsigned int phy_addr);
#ifdef CONFIG_CMD_NET -void board_eth_initialize(bd_t *bi) +void board_eth_init(bd_t *bi) { macb_eth_initialize(0, (void *)MACB0_BASE, bi->bi_phy_id[0]); } diff --git a/board/miromico/hammerhead/hammerhead.c b/board/miromico/hammerhead/hammerhead.c index 69ff7fa..26d1182 100644 --- a/board/miromico/hammerhead/hammerhead.c +++ b/board/miromico/hammerhead/hammerhead.c @@ -64,10 +64,6 @@ int board_early_init_f(void) #if defined(CONFIG_MMC) gpio_enable_mmci(); #endif - - /* Select GCLK3 peripheral function. We'll need it as clock output - * for ethernet PHY. */ - gpio_enable_gclk3(); return 0; }
@@ -100,6 +96,9 @@ void gclk_init(void) { /* Hammerhead boards uses GCLK3 as 25MHz output to ethernet PHY */
+ /* Select GCLK3 peripheral function */ + gpio_select_periph_A(GPIO_PIN_PB29, 0); + /* Enable GCLK3 with no input divider, from OSC0 (crystal) */ - sm_writel( PM_GCCTRL(3), SM_BIT(CEN) ); + sm_writel(PM_GCCTRL(3), SM_BIT(CEN)); } diff --git a/cpu/at32ap/at32ap700x/gpio.c b/cpu/at32ap/at32ap700x/gpio.c index 2b7717f..859124a 100644 --- a/cpu/at32ap/at32ap700x/gpio.c +++ b/cpu/at32ap/at32ap700x/gpio.c @@ -142,14 +142,3 @@ void gpio_enable_mmci(void) gpio_select_periph_A(GPIO_PIN_PA15, 0); /* DATA3 */ } #endif - -/* - * Hammerhead board uses GCLK3 (Periph A on PB29) as 25MHz clock output - * for ethernet PHY. - */ -void __gpio_enable_gclk3(void) -{ - gpio_select_periph_A(GPIO_PIN_PB29, 0); /* GCLK3 */ -} - -void gpio_enable_gclk3(void) __attribute__((weak, alias("__gpio_enable_gclk3"))); diff --git a/cpu/at32ap/cpu.c b/cpu/at32ap/cpu.c index 4a92aab..1a13702 100644 --- a/cpu/at32ap/cpu.c +++ b/cpu/at32ap/cpu.c @@ -66,9 +66,7 @@ int cpu_init(void) asm volatile("csrf %0" : : "i"(SYSREG_EM_OFFSET));
if(gclk_init) - { gclk_init(); - }
return 0; } diff --git a/include/asm-avr32/arch-at32ap700x/gpio.h b/include/asm-avr32/arch-at32ap700x/gpio.h index c350d54..b10a3e4 100644 --- a/include/asm-avr32/arch-at32ap700x/gpio.h +++ b/include/asm-avr32/arch-at32ap700x/gpio.h @@ -216,8 +216,5 @@ void gpio_enable_macb1(void); #ifdef AT32AP700x_CHIP_HAS_MMCI void gpio_enable_mmci(void); #endif -#ifdef CONFIG_HAMMERHEAD -void gpio_enable_gclk3(void); -#endif
#endif /* __ASM_AVR32_ARCH_GPIO_H__ */ diff --git a/include/configs/hammerhead.h b/include/configs/hammerhead.h index 6699aea..70123f7 100644 --- a/include/configs/hammerhead.h +++ b/include/configs/hammerhead.h @@ -38,7 +38,7 @@ */ #define CONFIG_PLL 1 #define CFG_POWER_MANAGER 1 -#define CFG_OSC0_HZ 25000000 /* 25MHz crystal */ +#define CFG_OSC0_HZ 25000000 /* 25MHz crystal -> 125MHz clock */ #define CFG_PLL0_DIV 1 #define CFG_PLL0_MUL 5 #define CFG_PLL0_SUPPRESS_CYCLES 16 @@ -71,7 +71,7 @@
#define CONFIG_BAUDRATE 115200 #define CONFIG_BOOTARGS \ - "console=ttyS0 root=/dev/mtdblock1 rootfstype=jffs2" + "console=ttyS0 root=mtd1 rootfstype=jffs2" #define CONFIG_BOOTCOMMAND \ "fsload; bootm"
@@ -101,8 +101,6 @@ #define CONFIG_BOOTP_SUBNETMASK #define CONFIG_BOOTP_GATEWAY
-#define CONFIG_DOS_PARTITION 1 - /* * Command line configuration. */ @@ -151,12 +149,6 @@ #define CFG_INIT_SP_ADDR (CFG_INTRAM_BASE + CFG_INTRAM_SIZE)
#define CFG_MALLOC_LEN (256*1024) -#define CFG_MALLOC_END \ - ({ \ - DECLARE_GLOBAL_DATA_PTR; \ - CFG_SDRAM_BASE + gd->sdram_size; \ - }) -#define CFG_MALLOC_START (CFG_MALLOC_END - CFG_MALLOC_LEN)
#define CFG_DMA_ALLOC_LEN (16384)
@@ -165,7 +157,7 @@ #define CFG_BOOTPARAMS_LEN (16 * 1024)
/* Other configuration settings that shouldn't have to change all that often */ -#define CFG_PROMPT "Uboot> " +#define CFG_PROMPT "Hammerhead> " #define CFG_CBSIZE 256 #define CFG_MAXARGS 16 #define CFG_PBSIZE (CFG_CBSIZE + sizeof(CFG_PROMPT) + 16) diff --git a/net/eth.c b/net/eth.c index 054a9fd..2d6f15f 100644 --- a/net/eth.c +++ b/net/eth.c @@ -65,7 +65,7 @@ extern int atngw100_eth_initialize(bd_t *); extern int mcffec_initialize(bd_t*); extern int mcdmafec_initialize(bd_t*); extern int at91sam9_eth_initialize(bd_t *); -extern int board_eth_initialize(bd_t *); +extern int board_eth_init(bd_t *);
#ifdef CONFIG_API extern void (*push_packet)(volatile void *, int); @@ -293,7 +293,7 @@ int eth_initialize(bd_t *bis) at91sam9_eth_initialize(bis); #endif #if defined(CONFIG_HAMMERHEAD) - board_eth_initialize(bis); + board_eth_init(bis); #endif
if (!eth_devices) {

Julien May mailinglist@miromico.ch wrote:
Hi & welcome back from holiday :)
Thanks :)
According to your request...
This was rather more than I asked for, and it didn't apply to the hammerhead branch I already had.
After resolving the conflicts, I ended up with just a change to MAINTAINERS, so I've committed only that part. The rest is already there (except the net/eth.c stuff which shouldn't be necessary anymore after Ben's patch hit mainline)
Could you have a look at the result at
git://git.denx.de/u-boot-avr32.git hammerhead
If it looks ok to you (and still works), I'll fold it all into a single patch tomorrow. The commit messages are somewhat bogus...I'll fix it up at the same time.
Haavard

when would you not want to relocate ?
my understanding was when the bootldr come up it first runs the monitor and then relocates to ram and shoots off from there. right ?
any clarification would be appreciated. TIA !
Date: Tue, 22 Jul 2008 14:20:15 +0200 From: linux@bohmer.net To: u-boot-users@lists.sourceforge.net; wd@denx.de CC: joakim.tjernlund@transmode.se Subject: [U-Boot-Users] [patch 1/1] Set GD_FLG_RELOC for boards skipping relocation to RAM
If CONFIG_SKIP_RELOCATE_UBOOT is set the flag GD_FLG_RELOC is usually never set, because relocation to RAM is actually never done by U-boot itself. However, several pieces of code check if this flag is set at some time.
So, to make sure this flag is set on boards skipping relocation, this is added to the initialisation of U-boot at a moment where it is safe to do so.
Signed-off-by: Remy Bohmer linux@bohmer.net
lib_arm/board.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+)
Index: u-boot-git-almost-1.3.4/lib_arm/board.c
--- u-boot-git-almost-1.3.4.orig/lib_arm/board.c 2008-07-21 11:53:23.000000000 +0200 +++ u-boot-git-almost-1.3.4/lib_arm/board.c 2008-07-21 12:25:32.000000000 +0200 @@ -233,6 +233,17 @@ static int init_func_i2c (void) } #endif
+#ifdef CONFIG_SKIP_RELOCATE_UBOOT +/*
- This routine sets the relocation done flag, because even if
- relocation is skipped, the flag is used by other generic code.
- */
+static int reloc_init(void) +{
- gd->flags |= GD_FLG_RELOC;
+} +#endif
/*
- Breathe some life into the board...
@@ -262,6 +273,11 @@ int print_cpuinfo (void); /* test-only *
init_fnc_t *init_sequence[] = { cpu_init, /* basic cpu dependent setup */ +#if defined(CONFIG_SKIP_RELOCATE_UBOOT)
- reloc_init, /* Set the relocation done flag, must
- do this AFTER cpu_init(), but as soon
- as possible */
+#endif board_init, /* basic board dependent setup */ interrupt_init, /* set up exceptions */ env_init, /* initialize environment */
--
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge Build the coolest Linux based applications with Moblin SDK & win great prizes Grand prize is a trip for two to an Open Source event anywhere in the world http://moblin-contest.org/redirect.php?banner_id=100&url=/ _______________________________________________ U-Boot-Users mailing list U-Boot-Users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/u-boot-users

u-boot-users-bounces@lists.sourceforge.net wrote:
when would you not want to relocate ?
Hi, On some platforms U-Boot is loaded from flash to RAM memory by a ROM bootloader.
Hugo V.
Hugo Villeneuve Hardware developer | Concepteur matériel Lyrtech Phone/Tél. : (1) (418) 877-4644 #2395 Toll-free/Sans frais - Canada & USA : (1) (888) 922-4644 #2395 Fax/Téléc. : (1) (418) 877-7710 www.lyrtech.com Infinite possibilities...TM

On Wed, 23 Jul 2008, Haavard Skinnemoen wrote:
Julien May mailinglist@miromico.ch wrote:
Hi & welcome back from holiday :)
Thanks :)
According to your request...
This was rather more than I asked for, and it didn't apply to the hammerhead branch I already had.
After resolving the conflicts, I ended up with just a change to MAINTAINERS, so I've committed only that part. The rest is already there (except the net/eth.c stuff which shouldn't be necessary anymore after Ben's patch hit mainline)
Could you have a look at the result at
git://git.denx.de/u-boot-avr32.git hammerhead
If it looks ok to you (and still works), I'll fold it all into a single patch tomorrow. The commit messages are somewhat bogus...I'll fix it up at the same time.
Currently I even cannot compile it, due to some not only to our board related errors. I'll check them and give you feedback asap or not later than tomorrow.
- Julien
Haavard

Julien May mailinglist@miromico.ch wrote:
Currently I even cannot compile it, due to some not only to our board related errors. I'll check them and give you feedback asap or not later than tomorrow.
Oh...right. I did fix those, but I forgot to pull them in.

Haavard Skinnemoen haavard.skinnemoen@atmel.com wrote:
Julien May mailinglist@miromico.ch wrote:
Currently I even cannot compile it, due to some not only to our board related errors. I'll check them and give you feedback asap or not later than tomorrow.
Oh...right. I did fix those, but I forgot to pull them in.
Done. I've also applied a couple of other fixes due to recent API changes, so it should at least build now.
Haavard

On Thu, 24 Jul 2008, Haavard Skinnemoen wrote:
Haavard Skinnemoen haavard.skinnemoen@atmel.com wrote:
Julien May mailinglist@miromico.ch wrote:
Currently I even cannot compile it, due to some not only to our board related errors. I'll check them and give you feedback asap or not later than tomorrow.
Oh...right. I did fix those, but I forgot to pull them in.
Done. I've also applied a couple of other fixes due to recent API changes, so it should at least build now.
Ah great!
Are those already committed to your hammerhead branch? Right now I couldn't pull anything new.
Maybe you can check those in so that I can pull and test the u-boot.
- Julien
Haavard

Julien May mailinglist@miromico.ch wrote:
On Thu, 24 Jul 2008, Haavard Skinnemoen wrote:
Done. I've also applied a couple of other fixes due to recent API changes, so it should at least build now.
Ah great!
Are those already committed to your hammerhead branch? Right now I couldn't pull anything new.
Maybe you can check those in so that I can pull and test the u-boot.
Hmm...they _should_ be there:
hskinnemoen@hskinnemo-gx745:~/work/u-boot/hammerhead$ git remote show avr32 * remote avr32 URL: git://git.denx.de/u-boot-avr32.git Tracked remote branches atmel-1.3.0 atmel-1.3.1 format-warnings hammerhead master spiflash stk1000-lcd hskinnemoen@hskinnemo-gx745:~/work/u-boot/hammerhead$ git show --stat avr32/hammerhead commit 50ca883c61c88f463fc4d8e635b7aa195fffdb65 Author: Haavard Skinnemoen haavard.skinnemoen@atmel.com Date: Thu Jul 24 09:44:01 2008 +0200
hammerhead: Define CONFIG_ATMEL_MCI
Since the MMC driver was moved into drivers/mmc, you now need to define CONFIG_ATMEL_MCI in addition to CONFIG_MMC to include it.
Signed-off-by: Haavard Skinnemoen haavard.skinnemoen@atmel.com
include/configs/hammerhead.h | 1 + 1 files changed, 1 insertions(+), 0 deletions(-)
Haavard

I am currently having problems in initializing the eth.
in net/eth.c the following is defined
static int __def_eth_init(bd_t *bis) { return -1; } int cpu_eth_init(bd_t *bis) __attribute((weak, alias("__def_eth_init"))); int board_eth_init(bd_t *bis) __attribute((weak, alias("__def_eth_init")));
this is not calling my implementation of board_eth_init. I see and like the idea behind this but do not understand why my implementation is not getting called...
btw. I did update the implementation function header from void to int.
- Julien

Julien May mailinglist@miromico.ch wrote:
I am currently having problems in initializing the eth.
in net/eth.c the following is defined
static int __def_eth_init(bd_t *bis) { return -1; } int cpu_eth_init(bd_t *bis) __attribute((weak, alias("__def_eth_init"))); int board_eth_init(bd_t *bis) __attribute((weak, alias("__def_eth_init")));
this is not calling my implementation of board_eth_init. I see and like the idea behind this but do not understand why my implementation is not getting called...
Hmm, that's probably the "weak functions cannot be overriden by functions defined in their own file" crap that was discussed earlier. Can you try moving board_eth_init() into hammerhead.c?
Which reminds me...Ben posted a patch which did that for all the existing avr32 boards. I should probably apply it.
btw. I did update the implementation function header from void to int.
Yeah, that's probably a good idea too :-)
Haavard

On Thu, 24 Jul 2008, Haavard Skinnemoen wrote:
Julien May mailinglist@miromico.ch wrote:
I am currently having problems in initializing the eth.
in net/eth.c the following is defined
static int __def_eth_init(bd_t *bis) { return -1; } int cpu_eth_init(bd_t *bis) __attribute((weak, alias("__def_eth_init"))); int board_eth_init(bd_t *bis) __attribute((weak, alias("__def_eth_init")));
this is not calling my implementation of board_eth_init. I see and like the idea behind this but do not understand why my implementation is not getting called...
Hmm, that's probably the "weak functions cannot be overriden by functions defined in their own file" crap that was discussed earlier. Can you try moving board_eth_init() into hammerhead.c?
Did so and it works now. I could make for this an incremental patch and send this to you.
Which reminds me...Ben posted a patch which did that for all the existing avr32 boards. I should probably apply it.
Otherwise I wait until you applied bens patch and test again hammerheads functionality in u-boot.
btw. I did update the implementation function header from void to int.
Yeah, that's probably a good idea too :-)
Haavard
- Julien

Julien May mailinglist@miromico.ch wrote:
Hmm, that's probably the "weak functions cannot be overriden by functions defined in their own file" crap that was discussed earlier. Can you try moving board_eth_init() into hammerhead.c?
Did so and it works now. I could make for this an incremental patch and send this to you.
That would be great.
Which reminds me...Ben posted a patch which did that for all the existing avr32 boards. I should probably apply it.
Otherwise I wait until you applied bens patch and test again hammerheads functionality in u-boot.
I've applied it, but it doesn't affect hammerhead. It just does the same change you just did to a few other boards.
Haavard

Did so and it works now. I could make for this an incremental patch and send this to you.
That would be great.
Please find below the incrementel patch. This patch just fixes the eth stuff of our board. As hopefully understood right the patch from ben sould fix the rest.
- Julien
From 6c1e0c05e7c65ebdf3877b139a2ea313d32e5680 Mon Sep 17 00:00:00 2001
From: Julien May mailinglist@miromico.ch Date: Thu, 24 Jul 2008 13:48:36 +0200 Subject: [PATCH 1/1] This makes the eth stuff work again according to the api changes.
Signed-off-by: Julien May mailinglist@miromico.ch --- board/miromico/hammerhead/Makefile | 2 +- board/miromico/hammerhead/eth.c | 37 -------------------------------- board/miromico/hammerhead/hammerhead.c | 10 ++++++++ 3 files changed, 11 insertions(+), 38 deletions(-) delete mode 100644 board/miromico/hammerhead/eth.c
diff --git a/board/miromico/hammerhead/Makefile b/board/miromico/hammerhead/Makefile index c5fc67a..4b74d16 100644 --- a/board/miromico/hammerhead/Makefile +++ b/board/miromico/hammerhead/Makefile @@ -22,7 +22,7 @@ include $(TOPDIR)/config.mk
LIB := $(obj)lib$(BOARD).a
-COBJS := $(BOARD).o eth.o +COBJS := $(BOARD).o
SRCS := $(SOBJS:.o=.S) $(COBJS:.o=.c) OBJS := $(addprefix $(obj),$(SOBJS) $(COBJS)) diff --git a/board/miromico/hammerhead/eth.c b/board/miromico/hammerhead/eth.c deleted file mode 100644 index 056e9ca..0000000 --- a/board/miromico/hammerhead/eth.c +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright (C) 2008 Miromico AG - * - * Ethernet initialization for the Miromico Hammerhead AVR32 board - * - * Mostly copied form Atmel ATNGW100 sources - * - * 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/memory-map.h> - -extern int macb_eth_initialize(int id, void *regs, unsigned int phy_addr); - -#ifdef CONFIG_CMD_NET -void board_eth_init(bd_t *bi) -{ - macb_eth_initialize(0, (void *)MACB0_BASE, bi->bi_phy_id[0]); -} -#endif diff --git a/board/miromico/hammerhead/hammerhead.c b/board/miromico/hammerhead/hammerhead.c index c63ef06..cd79557 100644 --- a/board/miromico/hammerhead/hammerhead.c +++ b/board/miromico/hammerhead/hammerhead.c @@ -31,6 +31,7 @@ #include <asm/arch/clk.h> #include <asm/arch/gpio.h> #include <asm/arch/hmatrix.h> +#include <asm/arch/memory-map.h>
DECLARE_GLOBAL_DATA_PTR;
@@ -50,6 +51,15 @@ static const struct sdram_config sdram_config = { .refresh_period = (781 * (SDRAMC_BUS_HZ / 1000)) / 100000, };
+extern int macb_eth_initialize(int id, void *regs, unsigned int phy_addr); + +#ifdef CONFIG_CMD_NET +int board_eth_init(bd_t *bis) +{ + return macb_eth_initialize(0, (void *)MACB0_BASE, bis->bi_phy_id[0]); +} +#endif + int board_early_init_f(void) { /* Enable SDRAM in the EBI mux */

Julien May mailinglist@miromico.ch wrote:
Please find below the incrementel patch. This patch just fixes the eth stuff of our board. As hopefully understood right the patch from ben sould fix the rest.
Yeah, that should do it, thanks. I think it's time to create a "next" branch for this stuff now.
Haavard
participants (4)
-
Fundu
-
Haavard Skinnemoen
-
Hugo Villeneuve
-
Julien May