avr32: add generic board
cover avr32: add generic board
This is the first attempt to add generic board support to avr32 architecture. It has at least one relevant part for other manual reloc architectures.
This series is currently runtime tested on grasshhopper and atstk1002.
Andreas Bie?mann
Changes in v1:
- new since RFC
- new since RFC
- add timer_init in board_r
- remove extern declaration of mmu_init_r()
- new since RFC
Andreas Bie?mann (8):
avr32: use dlmalloc for DMA buffers
avr32: rename cpu_init() -> arch_cpu_init()
avr32: factor out cpu_mmc_init()
avr32: rename mmu.h definitions
common/board_r: manual relocation for cmd table
avr32: add generic board support
grasshopper: enable generic board
atstk1002: enable generic board
arch/avr32/config.mk | 3 ++ arch/avr32/cpu/Makefile | 1 + arch/avr32/cpu/at32ap700x/mmu.c | 8 ++-- arch/avr32/cpu/cpu.c | 2 +- arch/avr32/cpu/mmc.c | 16 +++++++ arch/avr32/cpu/u-boot.lds | 2 + arch/avr32/include/asm/arch-at32ap700x/mmu.h | 6 +-- arch/avr32/include/asm/config.h | 1 + arch/avr32/include/asm/dma-mapping.h | 7 ++- arch/avr32/include/asm/u-boot.h | 9 ++++ arch/avr32/lib/Makefile | 2 + arch/avr32/lib/board.c | 61 +------------------------- arch/avr32/lib/interrupts.c | 5 +++ board/atmel/atngw100/atngw100.c | 12 ++--- board/atmel/atngw100mkii/atngw100mkii.c | 18 ++++---- board/atmel/atstk1000/atstk1000.c | 12 ++--- board/earthlcd/favr-32-ezkit/favr-32-ezkit.c | 12 ++--- board/in-circuit/grasshopper/grasshopper.c | 12 ++--- board/mimc/mimc200/mimc200.c | 18 ++++---- board/miromico/hammerhead/hammerhead.c | 12 ++--- common/board_f.c | 13 ++++-- common/board_r.c | 38 ++++++++++++++-- include/asm-generic/u-boot.h | 4 ++ include/configs/atngw100.h | 1 - include/configs/atngw100mkii.h | 1 - include/configs/atstk1002.h | 5 ++- include/configs/atstk1006.h | 1 - include/configs/favr-32-ezkit.h | 1 - include/configs/grasshopper.h | 5 ++- include/configs/hammerhead.h | 1 - include/configs/mimc200.h | 1 - 31 files changed, 159 insertions(+), 131 deletions(-) create mode 100644 arch/avr32/cpu/mmc.c
Signature · 1 line
1.7.10.4
PATCH 1/8 avr32: use dlmalloc for DMA buffers
---
Changes in v1: None
arch/avr32/include/asm/dma-mapping.h | 7 ++++- arch/avr32/lib/board.c | 51 ---------------------------------- include/configs/atngw100.h | 1 - include/configs/atngw100mkii.h | 1 - include/configs/atstk1002.h | 1 - include/configs/atstk1006.h | 1 - include/configs/favr-32-ezkit.h | 1 - include/configs/grasshopper.h | 1 - include/configs/hammerhead.h | 1 - include/configs/mimc200.h | 1 - 10 files changed, 6 insertions(+), 60 deletions(-)
arch/avr32/include/asm/dma-mapping.h +6 -1
@@ -14,7 +14,12 @@ enum dma_data_direction {DMA_TO_DEVICE =1 , DMA_FROM_DEVICE = 2, }; -extern void *dma_alloc_coherent (size_t len,unsigned long *handle); + +static inline void *dma_alloc_coherent (size_t len,unsigned long *handle) +{ + *handle = (unsigned long )memalign (ARCH_DMA_MINALIGN , len); +return (void *)*handle; +}static inline unsigned long dma_map_single (volatile void *vaddr,size_t len,enum dma_data_direction dir)
arch/avr32/lib/board.c +0 -51
69 lines not on this page · raw message
include/configs/atngw100.h +0 -1
@@ -143,7 +143,6 @@#define CONFIG_SYS_INIT_SP_ADDR (CONFIG_SYS_INTRAM_BASE + CONFIG_SYS_INTRAM_SIZE)#define CONFIG_SYS_MALLOC_LEN (256*1024) -#define CONFIG_SYS_DMA_ALLOC_LEN (16384)/* Allow 4MB for the kernel run-time image */ #define CONFIG_SYS_LOAD_ADDR (EBI_SDRAM_BASE + 0x00400000)
include/configs/atngw100mkii.h +0 -1
@@ -164,7 +164,6 @@#define CONFIG_SYS_INIT_SP_ADDR (CONFIG_SYS_INTRAM_BASE + CONFIG_SYS_INTRAM_SIZE)#define CONFIG_SYS_MALLOC_LEN (256*1024) -#define CONFIG_SYS_DMA_ALLOC_LEN (16384)/* Allow 4MB for the kernel run-time image */ #define CONFIG_SYS_LOAD_ADDR (EBI_SDRAM_BASE + 0x00400000)
include/configs/atstk1002.h +0 -1
@@ -158,7 +158,6 @@#define CONFIG_SYS_INIT_SP_ADDR (CONFIG_SYS_INTRAM_BASE + CONFIG_SYS_INTRAM_SIZE)#define CONFIG_SYS_MALLOC_LEN (256*1024) -#define CONFIG_SYS_DMA_ALLOC_LEN (16384)/* Allow 4MB for the kernel run-time image */ #define CONFIG_SYS_LOAD_ADDR (EBI_SDRAM_BASE + 0x00400000)
include/configs/atstk1006.h +0 -1
@@ -159,7 +159,6 @@#define CONFIG_SYS_INIT_SP_ADDR (CONFIG_SYS_INTRAM_BASE + CONFIG_SYS_INTRAM_SIZE)#define CONFIG_SYS_MALLOC_LEN (256*1024) -#define CONFIG_SYS_DMA_ALLOC_LEN (16384)/* Allow 4MB for the kernel run-time image */ #define CONFIG_SYS_LOAD_ADDR (EBI_SDRAM_BASE + 0x00400000)
include/configs/favr-32-ezkit.h +0 -1
@@ -162,7 +162,6 @@#define CONFIG_SYS_INIT_SP_ADDR (CONFIG_SYS_INTRAM_BASE + CONFIG_SYS_INTRAM_SIZE)#define CONFIG_SYS_MALLOC_LEN (256*1024) -#define CONFIG_SYS_DMA_ALLOC_LEN (16384)/* Allow 4MB for the kernel run-time image */ #define CONFIG_SYS_LOAD_ADDR (EBI_SDRAM_BASE + 0x00400000)
include/configs/grasshopper.h +0 -1
@@ -151,7 +151,6 @@ CONFIG_SYS_INTRAM_SIZE)#define CONFIG_SYS_MALLOC_LEN (256*1024) -#define CONFIG_SYS_DMA_ALLOC_LEN (16384)/* Allow 4MB for the kernel run-time image */ #define CONFIG_SYS_LOAD_ADDR (EBI_SDRAM_BASE + 0x00400000)
include/configs/hammerhead.h +0 -1
@@ -137,7 +137,6 @@#define CONFIG_SYS_MALLOC_LEN (256*1024) -#define CONFIG_SYS_DMA_ALLOC_LEN (16384)/* Allow 4MB for the kernel run-time image */ #define CONFIG_SYS_LOAD_ADDR (CONFIG_SYS_SDRAM_BASE + 0x00400000)
include/configs/mimc200.h +0 -1
@@ -157,7 +157,6 @@#define CONFIG_SYS_INIT_SP_ADDR (CONFIG_SYS_INTRAM_BASE + CONFIG_SYS_INTRAM_SIZE)#define CONFIG_SYS_MALLOC_LEN (1024*1024) -#define CONFIG_SYS_DMA_ALLOC_LEN (16384)/* Allow 4MB for the kernel run-time image */ #define CONFIG_SYS_LOAD_ADDR (EBI_SDRAM_BASE + 0x00400000)
Signature · 1 line
1.7.10.4
PATCH 2/8 avr32: rename cpu_init() -> arch_cpu_init()
In reply to Andreas Bießmann---
Changes in v1: None
arch/avr32/cpu/cpu.c | 2 +- arch/avr32/include/asm/u-boot.h | 2 ++ arch/avr32/lib/board.c | 2 +- 3 files changed, 4 insertions(+), 2 deletions(-)
arch/avr32/cpu/cpu.c +1 -1
@@ -27,7 +27,7 @@DECLARE_GLOBAL_DATA_PTR ; -int cpu_init (void ) +int arch_cpu_init (void ) {extern void _evba (void );
arch/avr32/include/asm/u-boot.h +2 -0
@@ -25,4 +25,6 @@ typedef struct bd_info {/* For image.h:image_check_target_arch() */ #define IH_ARCH_DEFAULT IH_ARCH_AVR32 +int arch_cpu_init (void ); +#endif /* __ASM_U_BOOT_H__ */
arch/avr32/lib/board.c +1 -1
@@ -98,7 +98,7 @@ void board_init_f(ulong board_type)/* Perform initialization sequence */ board_early_init_f (); -cpu_init (); +arch_cpu_init ();board_postclk_init ();env_init ();init_baudrate ();
Signature · 1 line
1.7.10.4
PATCH 3/8 avr32: factor out cpu_mmc_init()
In reply to Andreas Bießmanncpu_mmc_init() is required by the init sequence to have a working MMC interface on avr32. This will not be included in the binary if we omit the avr32 board.c when building the generic board.
---
Changes in v1:
- new since RFC
arch/avr32/cpu/Makefile | 1 + arch/avr32/cpu/mmc.c | 16 ++++++++++++++++ arch/avr32/lib/board.c | 8 -------- 3 files changed, 17 insertions(+), 8 deletions(-) create mode 100644 arch/avr32/cpu/mmc.c
arch/avr32/cpu/Makefile +1 -0
@@ -16,5 +16,6 @@ obj-y += cache.o obj-y += interrupts.o obj-$(CONFIG_PORTMUX_PIO) += portmux-pio.o obj-$(CONFIG_PORTMUX_GPIO) += portmux-gpio.o +obj-y += mmc.o obj-$(if $(filter at32ap700x,$(SOC)),y) += at32ap700x/
arch/avr32/cpu/mmc.c new file +16 -0
@@ -0,0 +1,16 @@ +/* +* Copyright (C) 2004-2006 Atmel Corporation +* Copyright (C) 2015 Andreas Bie?mann <[email protected]> +* +* SPDX-License-Identifier: GPL-2.0+ +*/ +#include <common.h> +#include <atmel_mci.h> +#include <asm/arch/hardware.h> + +/* provide cpu_mmc_init, to overwrite provide board_mmc_init */ +int cpu_mmc_init (bd_t *bd) +{ +/* This calls the atmel_mci_init in gen_atmel_mci.c */ +return atmel_mci_init ((void *)ATMEL_BASE_MMCI ); +}
arch/avr32/lib/board.c +0 -8
@@ -9,7 +9,6 @@#include <stdio_dev.h> #include <version.h> #include <net.h> -#include <atmel_mci.h> #ifdef CONFIG_BITBANGMII #include <miiphy.h>
@@ -38,13 +37,6 @@ static int __do_nothing(void)int board_postclk_init (void ) __attribute__((weak,alias ("__do_nothing" )));int board_early_init_r (void ) __attribute__((weak,alias ("__do_nothing" ))); -/* provide cpu_mmc_init, to overwrite provide board_mmc_init */ -int cpu_mmc_init (bd_t *bd) -{ -/* This calls the atmel_mci_init in gen_atmel_mci.c */ -return atmel_mci_init ((void *)ATMEL_BASE_MMCI ); -} -static int init_baudrate (void ) { gd->baudrate =getenv_ulong ("baudrate" ,10 ,CONFIG_BAUDRATE );
Signature · 1 line
1.7.10.4
PATCH 4/8 avr32: rename mmu.h definitions
In reply to Andreas BießmannPrefix mmu.h PAGE_xxx definitions with MMU_ in order to prevent a naming conflict with other definitions.
---
Changes in v1:
- new since RFC
arch/avr32/cpu/at32ap700x/mmu.c | 8 ++++---- arch/avr32/include/asm/arch-at32ap700x/mmu.h | 6 +++--- board/atmel/atngw100/atngw100.c | 12 ++++++------ board/atmel/atngw100mkii/atngw100mkii.c | 18 +++++++++--------- board/atmel/atstk1000/atstk1000.c | 12 ++++++------ board/earthlcd/favr-32-ezkit/favr-32-ezkit.c | 12 ++++++------ board/in-circuit/grasshopper/grasshopper.c | 12 ++++++------ board/mimc/mimc200/mimc200.c | 18 +++++++++--------- board/miromico/hammerhead/hammerhead.c | 12 ++++++------ 9 files changed, 55 insertions(+), 55 deletions(-)
arch/avr32/cpu/at32ap700x/mmu.c +4 -4
@@ -7,7 +7,7 @@ void mmu_init_r(unsigned long dest_addr)uintptr_t vmr_table_addr;/* Round monitor address down to the nearest page boundary */ - dest_addr &=PAGE_ADDR_MASK ; + dest_addr &=MMU_PAGE_ADDR_MASK ;/* Initialize TLB entry 0 to cover the monitor, and lock it */ sysreg_write (TLBEHI , dest_addr |SYSREG_BIT (TLBEHI_V ));
@@ -36,7 +36,7 @@ int mmu_handle_tlb_miss(void)unsigned int fault_pgno;int first, last; - fault_pgno =sysreg_read (TLBEAR ) >>PAGE_SHIFT ; + fault_pgno =sysreg_read (TLBEAR ) >>MMU_PAGE_SHIFT ; vmr_table = (const struct mmu_vm_range *)sysreg_read (PTBR );/* Do a binary search through the VM ranges */
@@ -60,8 +60,8 @@ int mmu_handle_tlb_miss(void)/* Got it; let's slam it into the TLB */ uint32_t tlbelo; - tlbelo = vmr->phys & ~PAGE_ADDR_MASK ; - tlbelo |= fault_pgno <<PAGE_SHIFT ; + tlbelo = vmr->phys & ~MMU_PAGE_ADDR_MASK ; + tlbelo |= fault_pgno <<MMU_PAGE_SHIFT ;sysreg_write (TLBELO , tlbelo);__builtin_tlbw ();
arch/avr32/include/asm/arch-at32ap700x/mmu.h +3 -3
@@ -13,9 +13,9 @@#include <asm/sysreg.h> -#define PAGE_SHIFT 20 -#define PAGE_SIZE (1UL << PAGE_SHIFT) -#define PAGE_ADDR_MASK (~(PAGE_SIZE - 1)) +#define MMU_PAGE_SHIFT 20 +#define MMU_PAGE_SIZE (1UL << MMU_PAGE_SHIFT) +#define MMU_PAGE_ADDR_MASK (~(MMU_PAGE_SIZE - 1))#define MMU_VMR_CACHE_NONE \ (SYSREG_BF(AP, 3) | SYSREG_BF(SZ, 3) | SYSREG_BIT(TLBELO_D))
board/atmel/atngw100/atngw100.c +6 -6
@@ -18,14 +18,14 @@ DECLARE_GLOBAL_DATA_PTR;struct mmu_vm_range mmu_vmr_table[CONFIG_SYS_NR_VM_REGIONS ] = { { - .virt_pgno =CONFIG_SYS_FLASH_BASE >>PAGE_SHIFT , - .nr_pages =CONFIG_SYS_FLASH_SIZE >>PAGE_SHIFT , - .phys = (CONFIG_SYS_FLASH_BASE >>PAGE_SHIFT ) + .virt_pgno =CONFIG_SYS_FLASH_BASE >>MMU_PAGE_SHIFT , + .nr_pages =CONFIG_SYS_FLASH_SIZE >>MMU_PAGE_SHIFT , + .phys = (CONFIG_SYS_FLASH_BASE >>MMU_PAGE_SHIFT ) |MMU_VMR_CACHE_NONE , }, { - .virt_pgno =CONFIG_SYS_SDRAM_BASE >>PAGE_SHIFT , - .nr_pages =EBI_SDRAM_SIZE >>PAGE_SHIFT , - .phys = (CONFIG_SYS_SDRAM_BASE >>PAGE_SHIFT ) + .virt_pgno =CONFIG_SYS_SDRAM_BASE >>MMU_PAGE_SHIFT , + .nr_pages =EBI_SDRAM_SIZE >>MMU_PAGE_SHIFT , + .phys = (CONFIG_SYS_SDRAM_BASE >>MMU_PAGE_SHIFT ) |MMU_VMR_CACHE_WRBACK , }, };
board/atmel/atngw100mkii/atngw100mkii.c +9 -9
@@ -23,21 +23,21 @@ DECLARE_GLOBAL_DATA_PTR;struct mmu_vm_range mmu_vmr_table[CONFIG_SYS_NR_VM_REGIONS ] = { {/* Atmel AT49BV640D 8 MiB x16 NOR flash on NCS0 */ - .virt_pgno =CONFIG_SYS_FLASH_BASE >>PAGE_SHIFT , - .nr_pages =CONFIG_SYS_FLASH_SIZE >>PAGE_SHIFT , - .phys = (CONFIG_SYS_FLASH_BASE >>PAGE_SHIFT ) + .virt_pgno =CONFIG_SYS_FLASH_BASE >>MMU_PAGE_SHIFT , + .nr_pages =CONFIG_SYS_FLASH_SIZE >>MMU_PAGE_SHIFT , + .phys = (CONFIG_SYS_FLASH_BASE >>MMU_PAGE_SHIFT ) |MMU_VMR_CACHE_NONE , }, {/* Micron MT29F2G16AAD 256 MiB x16 NAND flash on NCS3 */ - .virt_pgno =EBI_SRAM_CS3_BASE >>PAGE_SHIFT , - .nr_pages =EBI_SRAM_CS3_SIZE >>PAGE_SHIFT , - .phys = (EBI_SRAM_CS3_BASE >>PAGE_SHIFT ) + .virt_pgno =EBI_SRAM_CS3_BASE >>MMU_PAGE_SHIFT , + .nr_pages =EBI_SRAM_CS3_SIZE >>MMU_PAGE_SHIFT , + .phys = (EBI_SRAM_CS3_BASE >>MMU_PAGE_SHIFT ) |MMU_VMR_CACHE_NONE , }, {/* 2x16-bit ISSI IS42S16320B 64 MiB SDRAM (128 MiB total) */ - .virt_pgno =CONFIG_SYS_SDRAM_BASE >>PAGE_SHIFT , - .nr_pages =EBI_SDRAM_SIZE >>PAGE_SHIFT , - .phys = (CONFIG_SYS_SDRAM_BASE >>PAGE_SHIFT ) + .virt_pgno =CONFIG_SYS_SDRAM_BASE >>MMU_PAGE_SHIFT , + .nr_pages =EBI_SDRAM_SIZE >>MMU_PAGE_SHIFT , + .phys = (CONFIG_SYS_SDRAM_BASE >>MMU_PAGE_SHIFT ) |MMU_VMR_CACHE_WRBACK , }, };
board/atmel/atstk1000/atstk1000.c +6 -6
@@ -17,14 +17,14 @@ DECLARE_GLOBAL_DATA_PTR;struct mmu_vm_range mmu_vmr_table[CONFIG_SYS_NR_VM_REGIONS ] = { { - .virt_pgno =CONFIG_SYS_FLASH_BASE >>PAGE_SHIFT , - .nr_pages =CONFIG_SYS_FLASH_SIZE >>PAGE_SHIFT , - .phys = (CONFIG_SYS_FLASH_BASE >>PAGE_SHIFT ) + .virt_pgno =CONFIG_SYS_FLASH_BASE >>MMU_PAGE_SHIFT , + .nr_pages =CONFIG_SYS_FLASH_SIZE >>MMU_PAGE_SHIFT , + .phys = (CONFIG_SYS_FLASH_BASE >>MMU_PAGE_SHIFT ) |MMU_VMR_CACHE_NONE , }, { - .virt_pgno =CONFIG_SYS_SDRAM_BASE >>PAGE_SHIFT , - .nr_pages =EBI_SDRAM_SIZE >>PAGE_SHIFT , - .phys = (CONFIG_SYS_SDRAM_BASE >>PAGE_SHIFT ) + .virt_pgno =CONFIG_SYS_SDRAM_BASE >>MMU_PAGE_SHIFT , + .nr_pages =EBI_SDRAM_SIZE >>MMU_PAGE_SHIFT , + .phys = (CONFIG_SYS_SDRAM_BASE >>MMU_PAGE_SHIFT ) |MMU_VMR_CACHE_WRBACK , }, };
board/earthlcd/favr-32-ezkit/favr-32-ezkit.c +6 -6
@@ -17,14 +17,14 @@ DECLARE_GLOBAL_DATA_PTR;struct mmu_vm_range mmu_vmr_table[CONFIG_SYS_NR_VM_REGIONS ] = { { - .virt_pgno =CONFIG_SYS_FLASH_BASE >>PAGE_SHIFT , - .nr_pages =CONFIG_SYS_FLASH_SIZE >>PAGE_SHIFT , - .phys = (CONFIG_SYS_FLASH_BASE >>PAGE_SHIFT ) + .virt_pgno =CONFIG_SYS_FLASH_BASE >>MMU_PAGE_SHIFT , + .nr_pages =CONFIG_SYS_FLASH_SIZE >>MMU_PAGE_SHIFT , + .phys = (CONFIG_SYS_FLASH_BASE >>MMU_PAGE_SHIFT ) |MMU_VMR_CACHE_NONE , }, { - .virt_pgno =CONFIG_SYS_SDRAM_BASE >>PAGE_SHIFT , - .nr_pages =EBI_SDRAM_SIZE >>PAGE_SHIFT , - .phys = (CONFIG_SYS_SDRAM_BASE >>PAGE_SHIFT ) + .virt_pgno =CONFIG_SYS_SDRAM_BASE >>MMU_PAGE_SHIFT , + .nr_pages =EBI_SDRAM_SIZE >>MMU_PAGE_SHIFT , + .phys = (CONFIG_SYS_SDRAM_BASE >>MMU_PAGE_SHIFT ) |MMU_VMR_CACHE_WRBACK , }, };
board/in-circuit/grasshopper/grasshopper.c +6 -6
@@ -18,14 +18,14 @@ DECLARE_GLOBAL_DATA_PTR;struct mmu_vm_range mmu_vmr_table[CONFIG_SYS_NR_VM_REGIONS ] = { { - .virt_pgno =CONFIG_SYS_FLASH_BASE >>PAGE_SHIFT , - .nr_pages =CONFIG_SYS_FLASH_SIZE >>PAGE_SHIFT , - .phys = (CONFIG_SYS_FLASH_BASE >>PAGE_SHIFT ) + .virt_pgno =CONFIG_SYS_FLASH_BASE >>MMU_PAGE_SHIFT , + .nr_pages =CONFIG_SYS_FLASH_SIZE >>MMU_PAGE_SHIFT , + .phys = (CONFIG_SYS_FLASH_BASE >>MMU_PAGE_SHIFT ) |MMU_VMR_CACHE_NONE , }, { - .virt_pgno =CONFIG_SYS_SDRAM_BASE >>PAGE_SHIFT , - .nr_pages =EBI_SDRAM_SIZE >>PAGE_SHIFT , - .phys = (CONFIG_SYS_SDRAM_BASE >>PAGE_SHIFT ) + .virt_pgno =CONFIG_SYS_SDRAM_BASE >>MMU_PAGE_SHIFT , + .nr_pages =EBI_SDRAM_SIZE >>MMU_PAGE_SHIFT , + .phys = (CONFIG_SYS_SDRAM_BASE >>MMU_PAGE_SHIFT ) |MMU_VMR_CACHE_WRBACK , }, };
board/mimc/mimc200/mimc200.c +9 -9
@@ -20,19 +20,19 @@struct mmu_vm_range mmu_vmr_table[CONFIG_SYS_NR_VM_REGIONS ] = { { - .virt_pgno =CONFIG_SYS_FLASH_BASE >>PAGE_SHIFT , - .nr_pages =CONFIG_SYS_FLASH_SIZE >>PAGE_SHIFT , - .phys = (CONFIG_SYS_FLASH_BASE >>PAGE_SHIFT ) + .virt_pgno =CONFIG_SYS_FLASH_BASE >>MMU_PAGE_SHIFT , + .nr_pages =CONFIG_SYS_FLASH_SIZE >>MMU_PAGE_SHIFT , + .phys = (CONFIG_SYS_FLASH_BASE >>MMU_PAGE_SHIFT ) |MMU_VMR_CACHE_NONE , }, { - .virt_pgno =EBI_SRAM_CS2_BASE >>PAGE_SHIFT , - .nr_pages =EBI_SRAM_CS2_SIZE >>PAGE_SHIFT , - .phys = (EBI_SRAM_CS2_BASE >>PAGE_SHIFT ) + .virt_pgno =EBI_SRAM_CS2_BASE >>MMU_PAGE_SHIFT , + .nr_pages =EBI_SRAM_CS2_SIZE >>MMU_PAGE_SHIFT , + .phys = (EBI_SRAM_CS2_BASE >>MMU_PAGE_SHIFT ) |MMU_VMR_CACHE_NONE , }, { - .virt_pgno =CONFIG_SYS_SDRAM_BASE >>PAGE_SHIFT , - .nr_pages =EBI_SDRAM_SIZE >>PAGE_SHIFT , - .phys = (CONFIG_SYS_SDRAM_BASE >>PAGE_SHIFT ) + .virt_pgno =CONFIG_SYS_SDRAM_BASE >>MMU_PAGE_SHIFT , + .nr_pages =EBI_SDRAM_SIZE >>MMU_PAGE_SHIFT , + .phys = (CONFIG_SYS_SDRAM_BASE >>MMU_PAGE_SHIFT ) |MMU_VMR_CACHE_WRBACK , }, };
board/miromico/hammerhead/hammerhead.c +6 -6
@@ -21,14 +21,14 @@ DECLARE_GLOBAL_DATA_PTR;struct mmu_vm_range mmu_vmr_table[CONFIG_SYS_NR_VM_REGIONS ] = { { - .virt_pgno =CONFIG_SYS_FLASH_BASE >>PAGE_SHIFT , - .nr_pages =CONFIG_SYS_FLASH_SIZE >>PAGE_SHIFT , - .phys = (CONFIG_SYS_FLASH_BASE >>PAGE_SHIFT ) + .virt_pgno =CONFIG_SYS_FLASH_BASE >>MMU_PAGE_SHIFT , + .nr_pages =CONFIG_SYS_FLASH_SIZE >>MMU_PAGE_SHIFT , + .phys = (CONFIG_SYS_FLASH_BASE >>MMU_PAGE_SHIFT ) |MMU_VMR_CACHE_NONE , }, { - .virt_pgno =CONFIG_SYS_SDRAM_BASE >>PAGE_SHIFT , - .nr_pages =EBI_SDRAM_SIZE >>PAGE_SHIFT , - .phys = (CONFIG_SYS_SDRAM_BASE >>PAGE_SHIFT ) + .virt_pgno =CONFIG_SYS_SDRAM_BASE >>MMU_PAGE_SHIFT , + .nr_pages =EBI_SDRAM_SIZE >>MMU_PAGE_SHIFT , + .phys = (CONFIG_SYS_SDRAM_BASE >>MMU_PAGE_SHIFT ) |MMU_VMR_CACHE_WRBACK , }, };
Signature · 1 line
1.7.10.4
PATCH 5/8 common/board_r: manual relocation for cmd table
In reply to Andreas BießmannThis is required for architectures still need manual relocation like avr32, m68k microblaze and maybe others.
---
Changes in v1: None
common/board_r.c | 12 ++++++++++++ 1 file changed, 12 insertions(+)
common/board_r.c +12 -0
@@ -294,6 +294,15 @@ static int initr_announce(void)return 0 ; } +#ifdef CONFIG_NEEDS_MANUAL_RELOC +static int initr_manual_reloc_cmdtable (void ) +{ +fixup_cmdtable (ll_entry_start (cmd_tbl_t, cmd), +ll_entry_count (cmd_tbl_t, cmd)); +return 0 ; +} +#endif +#if !defined(CONFIG_SYS_NO_FLASH )static int initr_flash (void ) {
@@ -718,6 +727,9 @@ init_fnc_t init_sequence_r[] = { initr_serial, initr_announce, INIT_FUNC_WATCHDOG_RESET +#ifdef CONFIG_NEEDS_MANUAL_RELOC + initr_manual_reloc_cmdtable, +#endif #ifdef CONFIG_PPC initr_trap,#endif
Signature · 1 line
1.7.10.4
PATCH 6/8 avr32: add generic board support
In reply to Andreas Bießmann---
Changes in v1:
- add timer_init in board_r
- remove extern declaration of mmu_init_r()
arch/avr32/config.mk | 3 +++ arch/avr32/cpu/u-boot.lds | 2 ++ arch/avr32/include/asm/config.h | 1 + arch/avr32/include/asm/u-boot.h | 7 +++++++ arch/avr32/lib/Makefile | 2 ++ arch/avr32/lib/interrupts.c | 5 +++++ common/board_f.c | 13 ++++++++++--- common/board_r.c | 26 +++++++++++++++++++++++--- include/asm-generic/u-boot.h | 4 ++++ 9 files changed, 57 insertions(+), 6 deletions(-)
arch/avr32/config.mk +3 -0
@@ -9,6 +9,9 @@ ifeq ($(CROSS_COMPILE),) CROSS_COMPILE := avr32-linux- endif +# avr32 has generic board support +__HAVE_ARCH_GENERIC_BOARD := y + CONFIG_STANDALONE_LOAD_ADDR ?= 0x00000000 PLATFORM_RELFLAGS += -ffixed-r5 -fPIC -mno-init-got -mrelax
arch/avr32/cpu/u-boot.lds +2 -0
@@ -48,9 +48,11 @@ SECTIONS _edata = .; .bss (NOLOAD) : { + __bss_start = .; *(.bss) *(.bss.*) } . = ALIGN(8); __bss_end = .; + __init_end = .; }
arch/avr32/include/asm/config.h +1 -0
@@ -8,5 +8,6 @@#define _ASM_CONFIG_H_#define CONFIG_NEEDS_MANUAL_RELOC +#define CONFIG_SYS_GENERIC_GLOBAL_DATA #endif
arch/avr32/include/asm/u-boot.h +7 -0
@@ -6,6 +6,11 @@ #ifndef __ASM_U_BOOT_H__ #define __ASM_U_BOOT_H__ 1 +#ifdef CONFIG_SYS_GENERIC_BOARD +/* Use the generic board which requires a unified bd_info */ +#include <asm-generic/u-boot.h> +#else + typedef struct bd_info { unsigned char bi_phy_id[4]; unsigned long bi_board_number;
@@ -22,6 +27,8 @@ typedef struct bd_info {#define bi_memstart bi_dram[0].start#define bi_memsize bi_dram[0].size +#endif +/* For image.h:image_check_target_arch() */ #define IH_ARCH_DEFAULT IH_ARCH_AVR32
arch/avr32/lib/Makefile +2 -0
@@ -8,6 +8,8 @@ # obj-y += memset.o +ifndef CONFIG_SYS_GENERIC_BOARD obj-y += board.o +endif obj-$(CONFIG_CMD_BOOTM) += bootm.o obj-y += interrupts.o
arch/avr32/lib/interrupts.c +5 -0
@@ -7,6 +7,11 @@#include <asm/sysreg.h> +int interrupt_init (void ) +{ +return 0 ; +} +void enable_interrupts (void ) { asmvolatile ("csrf %0" : :"n" (SYSREG_GM_OFFSET ));
common/board_f.c +10 -3
@@ -174,7 +174,7 @@ static int announce_dram_init(void)return 0 ; } -#if defined(CONFIG_MIPS ) || defined(CONFIG_PPC ) +#if defined(CONFIG_MIPS ) || defined(CONFIG_PPC ) || defined(CONFIG_AVR32 )static int init_func_ram (void ) {#ifdef CONFIG_BOARD_TYPES
@@ -268,6 +268,8 @@ static int setup_mon_len(void) gd->mon_len = (ulong )&_end - (ulong )_init;#elif defined(CONFIG_BLACKFIN ) || defined(CONFIG_NIOS2 ) gd->mon_len =CONFIG_SYS_MONITOR_LEN ; +#elif defined(CONFIG_AVR32 ) + gd->mon_len = (ulong )&__bss_end - (ulong )&_text;#else /* TODO: use (ulong)&__bss_end - (ulong)&__text_start; ? */ gd->mon_len = (ulong )&__bss_end -CONFIG_SYS_MONITOR_BASE ;
@@ -581,7 +583,7 @@ static int reserve_stacks(void) gd->irq_sp = gd->start_addr_sp;# endif #else -# ifdef CONFIG_PPC +# if defined(CONFIG_PPC ) || defined(CONFIG_AVR32 )ulong *s;# endif
@@ -611,6 +613,11 @@ static int reserve_stacks(void) s = (ulong *) gd->start_addr_sp; *s =0 ;/* Terminate back chain */ *++s =0 ;/* NULL return address */ +# elif defined(CONFIG_AVR32 ) + gd->arch.stack_end = gd->start_addr_sp; + s = (ulong *)gd->start_addr_sp; + *s =0 ; + *--s =0 ;# endif /* Architecture specific code */ return 0 ;
@@ -912,7 +919,7 @@ static init_fnc_t init_sequence_f[] = {#if defined(CONFIG_ARM ) || defined(CONFIG_X86 ) dram_init, /* configure available RAM banks */#endif -#if defined(CONFIG_MIPS ) || defined(CONFIG_PPC ) +#if defined(CONFIG_MIPS ) || defined(CONFIG_PPC ) || defined(CONFIG_AVR32 ) init_func_ram,#endif #ifdef CONFIG_POST
common/board_r.c +23 -3
@@ -55,6 +55,9 @@#include <dm/root.h> #include <linux/compiler.h> #include <linux/err.h> +#ifdef CONFIG_AVR32 +#include <asm/arch/mmu.h> +#endif DECLARE_GLOBAL_DATA_PTR ;
@@ -459,6 +462,16 @@ static int initr_env(void)return 0 ; } +#ifdef CONFIG_SYS_BOOTPARAMS_LEN +static int initr_malloc_bootparams (void ) +{ + gd->bd->bi_boot_params = (ulong )malloc (CONFIG_SYS_BOOTPARAMS_LEN ); +if (!gd->bd->bi_boot_params) +puts ("WARNING: Cannot allocate space for boot parameters\n" ); +return 0 ; +} +#endif +#ifdef CONFIG_SC3 /* TODO: with new initcalls, move this into the driver */ extern void sc3_read_eeprom (void );
@@ -502,7 +515,7 @@ static int show_model_r(void)#endif /* enable exceptions */ -#ifdef CONFIG_ARM +#if defined(CONFIG_ARM ) || defined(CONFIG_AVR32 )static int initr_enable_interrupts (void ) {enable_interrupts ();
@@ -791,6 +804,9 @@ init_fnc_t init_sequence_r[] = { initr_dataflash, #endif initr_env, +#ifdef CONFIG_SYS_BOOTPARAMS_LEN + initr_malloc_bootparams, +#endif INIT_FUNC_WATCHDOG_RESET initr_secondary_cpu, #ifdef CONFIG_SC3
@@ -826,10 +842,10 @@ init_fnc_t init_sequence_r[] = { initr_kgdb, #endif interrupt_init, -#if defined(CONFIG_ARM ) +#if defined(CONFIG_ARM ) || defined(CONFIG_AVR32 ) initr_enable_interrupts,#endif -#ifdef CONFIG_X86 +#if defined(CONFIG_X86 ) || defined(CONFIG_AVR32 ) timer_init, /* initialize timer */#endif #if defined(CONFIG_STATUS_LED ) && defined(STATUS_LED_BOOT )
@@ -894,6 +910,10 @@ void board_init_r(gd_t *new_gd, ulong dest_addr)int i;#endif +#ifdef CONFIG_AVR32 +mmu_init_r (dest_addr); +#endif +#if !defined(CONFIG_X86 ) && !defined(CONFIG_ARM ) && !defined(CONFIG_ARM64 ) gd = new_gd;#endif
include/asm-generic/u-boot.h +4 -0
@@ -32,6 +32,10 @@ typedef struct bd_info {unsigned long bi_flashoffset;/* reserved area for startup monitor */ unsigned long bi_sramstart;/* start of SRAM memory */ unsigned long bi_sramsize;/* size of SRAM memory */ +#ifdef CONFIG_AVR32 +unsigned char bi_phy_id[4 ];/* PHY address for ATAG_ETHERNET */ +unsigned long bi_board_number;/* ATAG_BOARDINFO */ +#endif #ifdef CONFIG_ARM unsigned long bi_arm_freq;/* arm frequency */ unsigned long bi_dsp_freq;/* dsp core frequency */
Signature · 1 line
1.7.10.4
PATCH 6/8 avr32: add generic board support
Hi,
Quoted 127 lines · Andreas Bie?mann
Signed-off-by Andreas Bie?mann <[email protected]>---
Changes in v1:
- addtimer_initinboard_r
- remove extern declaration ofmmu_init_r()arch/avr32/config.mk | 3 +++ arch/avr32/cpu/u-boot.lds | 2 ++ arch/avr32/include/asm/config.h | 1 + arch/avr32/include/asm/u-boot.h | 7 +++++++ arch/avr32/lib/Makefile | 2 ++ arch/avr32/lib/interrupts.c | 5 +++++ common/board_f.c | 13 ++++++++++--- common/board_r.c | 26 +++++++++++++++++++++++--- include/asm-generic/u-boot.h | 4 ++++ 9 files changed, 57 insertions(+), 6 deletions(-)arch/avr32/config.mk +3
-0@@ -9,6 +9,9 @@ ifeq ($(CROSS_COMPILE),) CROSS_COMPILE := avr32-linux- endif +# avr32 has generic board support +__HAVE_ARCH_GENERIC_BOARD := y + CONFIG_STANDALONE_LOAD_ADDR ?= 0x00000000 PLATFORM_RELFLAGS += -ffixed-r5 -fPIC -mno-init-got -mrelaxarch/avr32/cpu/u-boot.lds +2
-0@@ -48,9 +48,11 @@ SECTIONS _edata = .; .bss (NOLOAD) : { + __bss_start = .; *(.bss) *(.bss.*) } . = ALIGN(8); __bss_end = .; + __init_end = .; }arch/avr32/include/asm/config.h +1
-0@@ -8,5 +8,6 @@#define _ASM_CONFIG_H_#define CONFIG_NEEDS_MANUAL_RELOC +#define CONFIG_SYS_GENERIC_GLOBAL_DATA #endif arch/avr32/include/asm/u-boot.h +7
-0@@ -6,6 +6,11 @@ #ifndef __ASM_U_BOOT_H__ #define __ASM_U_BOOT_H__ 1 +#ifdef CONFIG_SYS_GENERIC_BOARD +/* Use the generic board which requires a unified bd_info */ +#include <asm-generic/u-boot.h> +#else + typedef struct bd_info { unsigned char bi_phy_id[4]; unsigned long bi_board_number;@@ -22,6 +27,8 @@ typedef struct bd_info {#define bi_memstart bi_dram[0].start#define bi_memsize bi_dram[0].size +#endif +/* For image.h:image_check_target_arch() */ #define IH_ARCH_DEFAULT IH_ARCH_AVR32arch/avr32/lib/Makefile +2
-0@@ -8,6 +8,8 @@ # obj-y += memset.o +ifndef CONFIG_SYS_GENERIC_BOARD obj-y += board.o +endif obj-$(CONFIG_CMD_BOOTM) += bootm.o obj-y += interrupts.oarch/avr32/lib/interrupts.c +5
-0@@ -7,6 +7,11 @@#include <asm/sysreg.h> +int interrupt_init (void ) +{ +return 0 ; +} +void enable_interrupts (void ) { asmvolatile ("csrf %0" : :"n" (SYSREG_GM_OFFSET ));common/board_f.c +1
-1@@ -174,7 +174,7 @@ static int announce_dram_init(void)return 0 ; } -#if defined(CONFIG_MIPS ) || defined(CONFIG_PPC ) +#if defined(CONFIG_MIPS ) || defined(CONFIG_PPC ) || defined(CONFIG_AVR32 )static int init_func_ram (void ) {#ifdef CONFIG_BOARD_TYPES
common/board_f.c static int setup_mon_len(void) · line 272
Quoted 5 lines
common/board_f.c +2
-0@@ -268,6 +268,8 @@ static int setup_mon_len(void) gd->mon_len = (ulong )&_end - (ulong )_init;#elif defined(CONFIG_BLACKFIN ) || defined(CONFIG_NIOS2 ) gd->mon_len =CONFIG_SYS_MONITOR_LEN ; +#elif defined(CONFIG_AVR32 ) + gd->mon_len = (ulong )&__bss_end - (ulong )&_text;
Would we be able to unify the symbols here rather than having a special case for AVR32?
Quoted 13 lines
common/board_f.c +1
-1#else /* TODO: use (ulong)&__bss_end - (ulong)&__text_start; ? */ gd->mon_len = (ulong )&__bss_end -CONFIG_SYS_MONITOR_BASE ;@@ -581,7 +583,7 @@ static int reserve_stacks(void) gd->irq_sp = gd->start_addr_sp;# endif #else -# ifdef CONFIG_PPC +# if defined(CONFIG_PPC ) || defined(CONFIG_AVR32 )ulong *s;# endif
common/board_f.c static int reserve_stacks(void) · line 620
Quoted 8 lines
common/board_f.c +5
-0@@ -611,6 +613,11 @@ static int reserve_stacks(void) s = (ulong *) gd->start_addr_sp; *s =0 ;/* Terminate back chain */ *++s =0 ;/* NULL return address */ +# elif defined(CONFIG_AVR32 ) + gd->arch.stack_end = gd->start_addr_sp; + s = (ulong *)gd->start_addr_sp; + *s =0 ; + *--s =0 ;
Can we create an arch_reserve_stacks() function to handle this, and put it in the AVR32 code?
common/board_f.c static init_fnc_t init_sequence_f[] = { · line 923
Quoted 10 lines
common/board_f.c +1
-1# endif /* Architecture specific code */ return 0 ;@@ -912,7 +919,7 @@ static init_fnc_t init_sequence_f[] = {#if defined(CONFIG_ARM ) || defined(CONFIG_X86 ) dram_init, /* configure available RAM banks */#endif -#if defined(CONFIG_MIPS ) || defined(CONFIG_PPC ) +#if defined(CONFIG_MIPS ) || defined(CONFIG_PPC ) || defined(CONFIG_AVR32 ) init_func_ram,
Can you use dram_init() instead?
common/board_r.c line 60
Quoted 13 lines
common/board_f.c +0
-0#endif #ifdef CONFIG_POST common/board_r.c +3
-0@@ -55,6 +55,9 @@#include <dm/root.h> #include <linux/compiler.h> #include <linux/err.h> +#ifdef CONFIG_AVR32 +#include <asm/arch/mmu.h> +#endif
What needs this? Let's move it into AVR32 code.
Quoted 5 lines
common/board_r.c +0
-0DECLARE_GLOBAL_DATA_PTR ;@@ -459,6 +462,16 @@ static int initr_env(void)return 0 ;
common/board_r.c static int initr_env(void) · line 472
Quoted 10 lines
common/board_r.c +8
-0} +#ifdef CONFIG_SYS_BOOTPARAMS_LEN +static int initr_malloc_bootparams (void ) +{ + gd->bd->bi_boot_params = (ulong )malloc (CONFIG_SYS_BOOTPARAMS_LEN ); +if (!gd->bd->bi_boot_params) +puts ("WARNING: Cannot allocate space for boot parameters\n" ); +return 0 ; +}
Shouldn't this be an error? If so:
return -ENOMEM
Quoted 38 lines
common/board_r.c +8
-3+#endif +#ifdef CONFIG_SC3 /* TODO: with new initcalls, move this into the driver */ extern void sc3_read_eeprom (void );@@ -502,7 +515,7 @@ static int show_model_r(void)#endif /* enable exceptions */ -#ifdef CONFIG_ARM +#if defined(CONFIG_ARM ) || defined(CONFIG_AVR32 )static int initr_enable_interrupts (void ) {enable_interrupts ();@@ -791,6 +804,9 @@ init_fnc_t init_sequence_r[] = { initr_dataflash, #endif initr_env, +#ifdef CONFIG_SYS_BOOTPARAMS_LEN + initr_malloc_bootparams, +#endif INIT_FUNC_WATCHDOG_RESET initr_secondary_cpu, #ifdef CONFIG_SC3@@ -826,10 +842,10 @@ init_fnc_t init_sequence_r[] = { initr_kgdb, #endif interrupt_init, -#if defined(CONFIG_ARM ) +#if defined(CONFIG_ARM ) || defined(CONFIG_AVR32 ) initr_enable_interrupts,#endif -#ifdef CONFIG_X86 +#if defined(CONFIG_X86 ) || defined(CONFIG_AVR32 ) timer_init, /* initialize timer */#endif #if defined(CONFIG_STATUS_LED ) && defined(STATUS_LED_BOOT )
common/board_r.c void board_init_r(gd_t *new_gd, ulong dest_addr) · line 915
Quoted 6 lines
common/board_r.c +3
-0@@ -894,6 +910,10 @@ void board_init_r(gd_t *new_gd, ulong dest_addr)int i;#endif +#ifdef CONFIG_AVR32 +mmu_init_r (dest_addr); +#endif
What does this do? It feels like it shold perhaps happen in the init sequence. See x86 which has a similar requirement, or at least I think it is similar.
The objective ultimately is to remove all #ifdefs from board_f/r.c.
Quoted 20 lines
common/board_r.c +1
-0+#if !defined(CONFIG_X86 ) && !defined(CONFIG_ARM ) && !defined(CONFIG_ARM64 ) gd = new_gd;#endif include/asm-generic/u-boot.h +4
-1@@ -32,6 +32,10 @@ typedef struct bd_info {unsigned long bi_flashoffset;/* reserved area for startup monitor */ unsigned long bi_sramstart;/* start of SRAM memory */ unsigned long bi_sramsize;/* size of SRAM memory */ +#ifdef CONFIG_AVR32 +unsigned char bi_phy_id[4 ];/* PHY address for ATAG_ETHERNET */ +unsigned long bi_board_number;/* ATAG_BOARDINFO */ +#endif #ifdef CONFIG_ARM unsigned long bi_arm_freq;/* arm frequency */ unsigned long bi_dsp_freq;/* dsp core frequency */ --
Quoted 2 lines
1.7.10.4
Regards,
Simon
PATCH 6/8 avr32: add generic board support
Hi Simon,
Quoted 31 lines · Simon Glass
Hi,
Quoted 27 lines · Andreas Bie?mann
Signed-off-by Andreas Bie?mann <[email protected]>---
Changes in v1:
- addtimer_initinboard_r
- remove extern declaration ofmmu_init_r()arch/avr32/config.mk | 3 +++ arch/avr32/cpu/u-boot.lds | 2 ++ arch/avr32/include/asm/config.h | 1 + arch/avr32/include/asm/u-boot.h | 7 +++++++ arch/avr32/lib/Makefile | 2 ++ arch/avr32/lib/interrupts.c | 5 +++++ common/board_f.c | 13 ++++++++++--- common/board_r.c | 26 +++++++++++++++++++++++--- include/asm-generic/u-boot.h | 4 ++++ 9 files changed, 57 insertions(+), 6 deletions(-)common/board_f.c +0
-0@@ -174,7 +174,7 @@ static int announce_dram_init(void)return 0 ; }
Quoted 14 lines
common/board_f.c static int setup_mon_len(void) · line 272
Quoted 11 lines
common/board_f.c +3
-1-#if defined(CONFIG_MIPS ) || defined(CONFIG_PPC ) +#if defined(CONFIG_MIPS ) || defined(CONFIG_PPC ) || defined(CONFIG_AVR32 )static int init_func_ram (void ) {#ifdef CONFIG_BOARD_TYPES @@ -268,6 +268,8 @@ static int setup_mon_len(void) gd->mon_len = (ulong )&_end - (ulong )_init;#elif defined(CONFIG_BLACKFIN ) || defined(CONFIG_NIOS2 ) gd->mon_len =CONFIG_SYS_MONITOR_LEN ; +#elif defined(CONFIG_AVR32 ) + gd->mon_len = (ulong )&__bss_end - (ulong )&_text;Would we be able to unify the symbols here rather than having a special case for AVR32?
well, I'm not __ARM__ nor CONFIG_SANDBOX, CONFIG_BLACKFIN or CONFIG_NIOS2. The else path may fit, I'll check that.
Quoted 12 lines
Quoted 12 lines
common/board_f.c +1
-1#else /* TODO: use (ulong)&__bss_end - (ulong)&__text_start; ? */ gd->mon_len = (ulong )&__bss_end -CONFIG_SYS_MONITOR_BASE ;@@ -581,7 +583,7 @@ static int reserve_stacks(void) gd->irq_sp = gd->start_addr_sp;# endif #else -# ifdef CONFIG_PPC +# if defined(CONFIG_PPC ) || defined(CONFIG_AVR32 )ulong *s;# endif
Quoted 12 lines
common/board_f.c static int reserve_stacks(void) · line 620
Quoted 9 lines
common/board_f.c +5
-0@@ -611,6 +613,11 @@ static int reserve_stacks(void) s = (ulong *) gd->start_addr_sp; *s =0 ;/* Terminate back chain */ *++s =0 ;/* NULL return address */ +# elif defined(CONFIG_AVR32 ) + gd->arch.stack_end = gd->start_addr_sp; + s = (ulong *)gd->start_addr_sp; + *s =0 ; + *--s =0 ;Can we create an
arch_reserve_stacks()function to handle this, and put it in the AVR32 code?
I'll do so.
Quoted 13 lines
common/board_f.c static init_fnc_t init_sequence_f[] = { · line 923
Quoted 11 lines
common/board_f.c +1
-1# endif /* Architecture specific code */ return 0 ;@@ -912,7 +919,7 @@ static init_fnc_t init_sequence_f[] = {#if defined(CONFIG_ARM ) || defined(CONFIG_X86 ) dram_init, /* configure available RAM banks */#endif -#if defined(CONFIG_MIPS ) || defined(CONFIG_PPC ) +#if defined(CONFIG_MIPS ) || defined(CONFIG_PPC ) || defined(CONFIG_AVR32 ) init_func_ram,Can you use
dram_init()instead?
I have to check that. Can we do that later when we convert mips/ppc? I fear it is a bit complex.
Quoted 7 lines
Quoted 7 lines
common/board_f.c +0
-0#endif #ifdef CONFIG_POST common/board_r.c +0
-0@@ -55,6 +55,9 @@
Quoted 8 lines
common/board_r.c line 60
Quoted 6 lines
common/board_r.c +3
-0#include <dm/root.h> #include <linux/compiler.h> #include <linux/err.h> +#ifdef CONFIG_AVR32 +#include <asm/arch/mmu.h> +#endif What needs this? Let's move it into AVR32 code.
The mmu_init_r needs this. I dunno where to place it. ARM has the TLB setup before activating d-caches (in initr_caches). This is not required for avr32 and therefore not the right place.
Quoted 11 lines
common/board_r.c void board_init_r(gd_t *new_gd, ulong dest_addr) · line 915
Quoted 7 lines
common/board_r.c +3
-0@@ -894,6 +910,10 @@ void board_init_r(gd_t *new_gd, ulong dest_addr)int i;#endif +#ifdef CONFIG_AVR32 +mmu_init_r (dest_addr); +#endif What does this do? It feels like it shold perhaps happen in the init sequence. See x86 which has a similar requirement, or at least I think it is similar.
can you point me to the x86 code?
Quoted 1 line
The objective ultimately is to remove all #ifdefs from
board_f/r.c.
That's clear to me. I thought we can first gather all the stuff in common/board_* and in a second turn we clean it up. Obvious things cleaned up before, but questionnaire things are cleaned up in a second turn. At least this was my objective ;)
Best regards
Andreas Bie?mann
PATCH 6/8 avr32: add generic board support
Hi Andreas,
Quoted 93 lines · Andreas Bie?mann
Hi Simon,
Quoted 31 lines · Simon Glass
Hi,
Quoted 27 lines · Andreas Bie?mann
Signed-off-by Andreas Bie?mann <[email protected]>---
Changes in v1:
- addtimer_initinboard_r
- remove extern declaration ofmmu_init_r()arch/avr32/config.mk | 3 +++ arch/avr32/cpu/u-boot.lds | 2 ++ arch/avr32/include/asm/config.h | 1 + arch/avr32/include/asm/u-boot.h | 7 +++++++ arch/avr32/lib/Makefile | 2 ++ arch/avr32/lib/interrupts.c | 5 +++++ common/board_f.c | 13 ++++++++++--- common/board_r.c | 26 +++++++++++++++++++++++--- include/asm-generic/u-boot.h | 4 ++++ 9 files changed, 57 insertions(+), 6 deletions(-)common/board_f.c +0
-0@@ -174,7 +174,7 @@ static int announce_dram_init(void)return 0 ; }Quoted 14 lines
common/board_f.c static int setup_mon_len(void) · line 272
Quoted 11 lines
common/board_f.c +3
-1-#if defined(CONFIG_MIPS ) || defined(CONFIG_PPC ) +#if defined(CONFIG_MIPS ) || defined(CONFIG_PPC ) || defined(CONFIG_AVR32 )static int init_func_ram (void ) {#ifdef CONFIG_BOARD_TYPES @@ -268,6 +268,8 @@ static int setup_mon_len(void) gd->mon_len = (ulong )&_end - (ulong )_init;#elif defined(CONFIG_BLACKFIN ) || defined(CONFIG_NIOS2 ) gd->mon_len =CONFIG_SYS_MONITOR_LEN ; +#elif defined(CONFIG_AVR32 ) + gd->mon_len = (ulong )&__bss_end - (ulong )&_text;Would we be able to unify the symbols here rather than having a special case for AVR32?
well, I'm not
__ARM__norCONFIG_SANDBOX,CONFIG_BLACKFINorCONFIG_NIOS2. The else path may fit, I'll check that.Quoted 12 lines
Quoted 12 lines
common/board_f.c +1
-1#else /* TODO: use (ulong)&__bss_end - (ulong)&__text_start; ? */ gd->mon_len = (ulong )&__bss_end -CONFIG_SYS_MONITOR_BASE ;@@ -581,7 +583,7 @@ static int reserve_stacks(void) gd->irq_sp = gd->start_addr_sp;# endif #else -# ifdef CONFIG_PPC +# if defined(CONFIG_PPC ) || defined(CONFIG_AVR32 )ulong *s;# endif Quoted 12 lines
common/board_f.c static int reserve_stacks(void) · line 620
Quoted 9 lines
common/board_f.c +5
-0@@ -611,6 +613,11 @@ static int reserve_stacks(void) s = (ulong *) gd->start_addr_sp; *s =0 ;/* Terminate back chain */ *++s =0 ;/* NULL return address */ +# elif defined(CONFIG_AVR32 ) + gd->arch.stack_end = gd->start_addr_sp; + s = (ulong *)gd->start_addr_sp; + *s =0 ; + *--s =0 ;Can we create an
arch_reserve_stacks()function to handle this, and put it in the AVR32 code?I'll do so.
Quoted 13 lines
common/board_f.c static init_fnc_t init_sequence_f[] = { · line 923
Quoted 11 lines
common/board_f.c +1
-1# endif /* Architecture specific code */ return 0 ;@@ -912,7 +919,7 @@ static init_fnc_t init_sequence_f[] = {#if defined(CONFIG_ARM ) || defined(CONFIG_X86 ) dram_init, /* configure available RAM banks */#endif -#if defined(CONFIG_MIPS ) || defined(CONFIG_PPC ) +#if defined(CONFIG_MIPS ) || defined(CONFIG_PPC ) || defined(CONFIG_AVR32 ) init_func_ram,Can you use
dram_init()instead?
Quoted 2 lines
I have to check that. Can we do that later when we convert mips/ppc? I fear it is a bit complex.
Later is fine if this doesn't work. But if every arch uses another arch as an excuse not to clean up no one will get there :-)
Quoted 17 lines
Quoted 16 lines
Quoted 8 lines
common/board_f.c +0
-0#endif #ifdef CONFIG_POST common/board_r.c +0
-0common/board_r.c line 60
Quoted 6 lines
common/board_r.c +3
-0@@ -55,6 +55,9 @@#include <dm/root.h> #include <linux/compiler.h> #include <linux/err.h> +#ifdef CONFIG_AVR32 +#include <asm/arch/mmu.h> +#endif What needs this? Let's move it into AVR32 code.
Quoted 3 lines
The
mmu_init_rneeds this. I dunno where to place it. ARM has the TLB setup before activating d-caches (ininitr_caches). This is not required for avr32 and therefore not the right place.
OK, then maybe we need to add this as a new method that any arch can use?
I'm wondering whether we should (later) have the concept of an arch 'driver', with methods for all of these things.
Quoted 13 lines
Quoted 5 lines
Quoted 5 lines
common/board_r.c +0
-0@@ -894,6 +910,10 @@ void board_init_r(gd_t *new_gd, ulong dest_addr)int i;#endif Quoted 7 lines
common/board_r.c void board_init_r(gd_t *new_gd, ulong dest_addr) · line 915
Quoted 3 lines
common/board_r.c +3
-0+#ifdef CONFIG_AVR32 +mmu_init_r (dest_addr); +#endif What does this do? It feels like it shold perhaps happen in the init sequence. See x86 which has a similar requirement, or at least I think it is similar.
Quoted 1 line
can you point me to the x86 code?
I was thinking of init_cache_f_r(). Is that similar to what you want?
Quoted 7 lines
Quoted 2 lines
The objective ultimately is to remove all #ifdefs from
board_f/r.c.That's clear to me. I thought we can first gather all the stuff in common/board_* and in a second turn we clean it up. Obvious things cleaned up before, but questionnaire things are cleaned up in a second turn. At least this was my objective ;)
Sounds good. I suppose the immediate objective is to get everything in generic board, but we should clean it up soon.
Regards,
Simon
PATCH 7/8 grasshopper: enable generic board
In reply to Andreas Bießmann---
Changes in v1: None
include/configs/grasshopper.h | 4 ++++ 1 file changed, 4 insertions(+)
include/configs/grasshopper.h +4 -0
@@ -62,6 +62,10 @@#define CONFIG_USART_BASE ATMEL_BASE_USART1#define CONFIG_USART_ID 1 +#define CONFIG_SYS_GENERIC_BOARD +#define CONFIG_BOARD_EARLY_INIT_F +#define CONFIG_BOARD_EARLY_INIT_R +/* User serviceable stuff */ #define CONFIG_CMDLINE_TAG #define CONFIG_SETUP_MEMORY_TAGS
Signature · 1 line
1.7.10.4
PATCH 8/8 atstk1002: enable generic board
In reply to Andreas Bießmann---
Changes in v1:
- new since RFC
include/configs/atstk1002.h | 4 ++++ 1 file changed, 4 insertions(+)
include/configs/atstk1002.h +4 -0
@@ -104,6 +104,10 @@#define CONFIG_BOOTP_SUBNETMASK #define CONFIG_BOOTP_GATEWAY +/* generic board */ +#define CONFIG_SYS_GENERIC_BOARD +#define CONFIG_BOARD_EARLY_INIT_F +#define CONFIG_BOARD_EARLY_INIT_R /* * Command line configuration.
Signature · 1 line
1.7.10.4