avr32: add generic board
Subsystems (4)
v3 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. Waldemar, could you please test the ngw100 device? Boards not converted to generic board will be removed soon.
Andreas Bie?mann
Changes in v3:
- new in v3
- make arch_reserve_stacks weak and adopt ppc/arm versions
- remove unnecessary stack implementation for avr32
- fix bdinfo output
Changes in v2:
- new since v1
- new since v1
- provide as extra patch, remove from avr32 generic board support
- remove bootparams allocation, provide as extra patch
- use the else path in setup_mon_len()
- provide arch_reserve_stacks() for avr32
- use the newly introduced dram_init()
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 (12):
avr32: use dlmalloc for DMA buffers
avr32: rename cpu_init() -> arch_cpu_init()
avr32: factor out cpu_mmc_init()
avr32: rename mmu.h definitions
avr32: convert to dram_init()
avr32: use generic gd->start_addr_sp
common/board_f: factor out reserve_stacks
common/board_r: manual relocation for cmd table
common/board_r: allocate bootparams
avr32: add generic board support
grasshopper: enable generic board
atstk1002: enable generic board
arch/arm/lib/Makefile | 1 + arch/arm/lib/stack.c | 42 +++++++++++++ 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/exception.c | 6 +- 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/global_data.h | 1 - arch/avr32/include/asm/u-boot.h | 10 ++++ arch/avr32/lib/Makefile | 3 + arch/avr32/lib/board.c | 83 ++++---------------------- arch/avr32/lib/dram_init.c | 17 ++++++ arch/avr32/lib/interrupts.c | 5 ++ arch/powerpc/lib/Makefile | 1 + arch/powerpc/lib/stack.c | 31 ++++++++++ board/atmel/atngw100/atngw100.c | 32 +++------- board/atmel/atngw100mkii/atngw100mkii.c | 39 ++++-------- board/atmel/atstk1000/atstk1000.c | 33 +++------- board/earthlcd/favr-32-ezkit/favr-32-ezkit.c | 33 +++------- board/in-circuit/grasshopper/grasshopper.c | 32 +++------- board/mimc/mimc200/mimc200.c | 38 ++++-------- board/miromico/hammerhead/hammerhead.c | 32 +++------- common/board_f.c | 46 ++++---------- common/board_r.c | 40 ++++++++++++- common/cmd_bdinfo.c | 4 +- include/asm-generic/u-boot.h | 4 ++ include/common.h | 18 ++++++ 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 - 40 files changed, 306 insertions(+), 307 deletions(-) create mode 100644 arch/arm/lib/stack.c create mode 100644 arch/avr32/cpu/mmc.c create mode 100644 arch/avr32/lib/dram_init.c create mode 100644 arch/powerpc/lib/stack.c
Signature · 1 line
1.7.10.4
PATCH v3 1/12 avr32: use dlmalloc for DMA buffers
---
Changes in v3: None
Changes in v2: None
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 v3 1/12 avr32: use dlmalloc for DMA buffers
Dear Andreas Devel,
Quoted 7 lines · Andreas Devel
Signed-off-by Andreas Bie?mann <[email protected]>---
Changes in v3: None
Changes in v2: None
Changes in v1: None
Quoted 11 lines
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(-)
applied to u-boot-avr32/master, thanks!
Best regards,
Andreas Bie?mann
PATCH v3 2/12 avr32: rename cpu_init() -> arch_cpu_init()
In reply to Andreas Bießmann---
Changes in v3: None
Changes in v2: None
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 v3 2/12 avr32: rename cpu_init() -> arch_cpu_init()
Dear Andreas Devel,
Quoted 4 lines · Andreas Devel
Signed-off-by Andreas Bie?mann <[email protected]>Reviewed-by Simon Glass <[email protected]>---
Quoted 8 lines
Changes in v3: None
Changes in v2: None
Changes in v1: Nonearch/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(-)
applied to u-boot-avr32/master, thanks!
Best regards,
Andreas Bie?mann
PATCH v3 3/12 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 v3: None
Changes in v2: None
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 v3 3/12 avr32: factor out cpu_mmc_init()
Dear Andreas Devel,
Quoted 12 lines · Andreas Devel
cpu_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 avr32board.cwhen building the generic board.Signed-off-by Andreas Bie?mann <[email protected]>---
Changes in v3: None
Changes in v2: None
Changes in v1:
- new since RFC
Quoted 5 lines
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
applied to u-boot-avr32/master, thanks!
Best regards,
Andreas Bie?mann
PATCH v3 4/12 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 v3: None
Changes in v2: None
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 v3 4/12 avr32: rename mmu.h definitions
Dear Andreas Devel,
Quoted 11 lines · Andreas Devel
Prefix
mmu.hPAGE_xxxdefinitions withMMU_in order to prevent a naming conflict with other definitions.Signed-off-by Andreas Bie?mann <[email protected]>---
Changes in v3: None
Changes in v2: None
Changes in v1:
- new since RFC
Quoted 10 lines
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(-)
applied to u-boot-avr32/master, thanks!
Best regards,
Andreas Bie?mann
PATCH v3 5/12 avr32: convert to dram_init()
In reply to Andreas Bießmann---
Changes in v3: None
Changes in v2:
- new since v1
Changes in v1: None
arch/avr32/include/asm/u-boot.h | 1 + arch/avr32/lib/Makefile | 1 + arch/avr32/lib/board.c | 20 ++++++++++---------- arch/avr32/lib/dram_init.c | 17 +++++++++++++++++ board/atmel/atngw100/atngw100.c | 20 ++------------------ board/atmel/atngw100mkii/atngw100mkii.c | 21 +++------------------ board/atmel/atstk1000/atstk1000.c | 21 +++------------------ board/earthlcd/favr-32-ezkit/favr-32-ezkit.c | 21 +++------------------ board/in-circuit/grasshopper/grasshopper.c | 20 ++------------------ board/mimc/mimc200/mimc200.c | 20 ++------------------ board/miromico/hammerhead/hammerhead.c | 20 ++------------------ 11 files changed, 46 insertions(+), 136 deletions(-) create mode 100644 arch/avr32/lib/dram_init.c
arch/avr32/include/asm/u-boot.h +1 -0
@@ -26,5 +26,6 @@ typedef struct bd_info {#define IH_ARCH_DEFAULT IH_ARCH_AVR32int arch_cpu_init (void ); +int dram_init (void );#endif /* __ASM_U_BOOT_H__ */
arch/avr32/lib/Makefile +1 -0
@@ -11,3 +11,4 @@ obj-y += memset.o obj-y += board.o obj-$(CONFIG_CMD_BOOTM) += bootm.o obj-y += interrupts.o +obj-y += dram_init.o
arch/avr32/lib/board.c +10 -10
@@ -29,6 +29,12 @@ DECLARE_GLOBAL_DATA_PTR;unsigned long monitor_flash_len; +__weak void dram_init_banksize (void ) +{ + gd->bd->bi_dram[0 ].start =CONFIG_SYS_SDRAM_BASE ; + gd->bd->bi_dram[0 ].size = gd->ram_size; +} +/* Weak aliases for optional board functions */ static int __do_nothing (void ) {
@@ -82,7 +88,6 @@ void board_init_f(ulong board_type)unsigned long monitor_len;unsigned long monitor_addr;unsigned long addr; -long sdram_size;/* Initialize the global data pointer */ memset (&gd_data,0 ,sizeof (gd_data));
@@ -97,10 +102,10 @@ void board_init_f(ulong board_type)serial_init ();console_init_f ();display_banner (); - sdram_size =initdram (board_type); +dram_init ();/* If we have no SDRAM, we can't go on */ -if (sdram_size <=0 ) +if (gd->ram_size <=0 )panic ("No working SDRAM available\n" );/*
@@ -114,7 +119,7 @@ void board_init_f(ulong board_type)* - global data struct * - stack */ - addr =CONFIG_SYS_SDRAM_BASE + sdram_size; + addr =CONFIG_SYS_SDRAM_BASE + gd->ram_size; monitor_len = (char *)(&__bss_end) - _text;/*
@@ -156,12 +161,7 @@ void board_init_f(ulong board_type) *(--new_sp) =0 ; *(--new_sp) =0 ; -/* -* Initialize the board information struct with the -* information we have. -*/ - bd->bi_dram[0 ].start =CONFIG_SYS_SDRAM_BASE ; - bd->bi_dram[0 ].size = sdram_size; +dram_init_banksize ();memcpy (new_gd, gd,sizeof (gd_t));
arch/avr32/lib/dram_init.c new file +17 -0
@@ -0,0 +1,17 @@ +/* +* Copyright (C) 2015 Andreas Bie?mann <[email protected]> +* +* SPDX-License-Identifier: GPL-2.0+ +*/ +#include <common.h> + +DECLARE_GLOBAL_DATA_PTR ; + +int dram_init (void ) +{ +/* check for the maximum amount of memory possible on AP7000 devices */ + gd->ram_size =get_ram_size ( + (void *)CONFIG_SYS_SDRAM_BASE , + (256 <<20 )); +return 0 ; +}
board/atmel/atngw100/atngw100.c +2 -18
@@ -52,6 +52,8 @@ int board_early_init_f(void)hmatrix_slave_write (EBI ,SFR ,HMATRIX_BIT (EBI_SDRAM_ENABLE ));portmux_enable_ebi (16 ,23 ,0 ,PORTMUX_DRIVE_HIGH ); +sdram_init (uncached (EBI_SDRAM_BASE ), &sdram_config); +portmux_enable_usart1 (PORTMUX_DRIVE_MIN );#if defined(CONFIG_MACB )
@@ -68,24 +70,6 @@ int board_early_init_f(void)return 0 ; } -phys_size_t initdram (int board_type) -{ -unsigned long expected_size; -unsigned long actual_size; -void *sdram_base; - - sdram_base =uncached (EBI_SDRAM_BASE ); - - expected_size =sdram_init (sdram_base, &sdram_config); - actual_size =get_ram_size (sdram_base, expected_size); - -if (expected_size != actual_size) -printf ("Warning: Only %lu of %lu MiB SDRAM is working\n" , - actual_size >>20 , expected_size >>20 ); - -return actual_size; -} -int board_early_init_r (void ) { gd->bd->bi_phy_id[0 ] =0x01 ;
board/atmel/atngw100mkii/atngw100mkii.c +3 -18
@@ -69,6 +69,9 @@ int board_early_init_f(void)portmux_select_gpio (PORTMUX_PORT_E ,1 <<23 ,PORTMUX_DIR_OUTPUT |PORTMUX_INIT_HIGH |PORTMUX_DRIVE_MIN ); + +sdram_init (uncached (EBI_SDRAM_BASE ), &sdram_config); +portmux_enable_usart1 (PORTMUX_DRIVE_MIN );#if defined(CONFIG_MACB )
@@ -85,24 +88,6 @@ int board_early_init_f(void)return 0 ; } -phys_size_t initdram (int board_type) -{ -unsigned long expected_size; -unsigned long actual_size; -void *sdram_base; - - sdram_base =uncached (EBI_SDRAM_BASE ); - - expected_size =sdram_init (sdram_base, &sdram_config); - actual_size =get_ram_size (sdram_base, expected_size); - -if (expected_size != actual_size) -printf ("Warning: Only %lu of %lu MiB SDRAM is working\n" , - actual_size >>20 , expected_size >>20 ); - -return actual_size; -} -int board_early_init_r (void ) { gd->bd->bi_phy_id[0 ] =0x01 ;
board/atmel/atstk1000/atstk1000.c +3 -18
@@ -78,7 +78,10 @@ int board_early_init_f(void)hmatrix_slave_write (EBI ,SFR ,HMATRIX_BIT (EBI_SDRAM_ENABLE ));portmux_enable_ebi (sdram_config.data_bits,23 ,0 ,PORTMUX_DRIVE_HIGH ); +sdram_init (uncached (EBI_SDRAM_BASE ), &sdram_config); +portmux_enable_usart1 (PORTMUX_DRIVE_MIN ); +#if defined(CONFIG_MACB )portmux_enable_macb0 (PORTMUX_MACB_MII ,PORTMUX_DRIVE_LOW );portmux_enable_macb1 (PORTMUX_MACB_MII ,PORTMUX_DRIVE_LOW );
@@ -90,24 +93,6 @@ int board_early_init_f(void)return 0 ; } -phys_size_t initdram (int board_type) -{ -unsigned long expected_size; -unsigned long actual_size; -void *sdram_base; - - sdram_base =uncached (EBI_SDRAM_BASE ); - - expected_size =sdram_init (sdram_base, &sdram_config); - actual_size =get_ram_size (sdram_base, expected_size); - -if (expected_size != actual_size) -printf ("Warning: Only %lu of %lu MiB SDRAM is working\n" , - actual_size >>20 , expected_size >>20 ); - -return actual_size; -} -int board_early_init_r (void ) { gd->bd->bi_phy_id[0 ] =0x10 ;
board/earthlcd/favr-32-ezkit/favr-32-ezkit.c +3 -18
@@ -52,6 +52,9 @@ int board_early_init_f(void)hmatrix_slave_write (EBI ,SFR ,HMATRIX_BIT (EBI_SDRAM_ENABLE ));portmux_enable_ebi (32 ,23 ,0 ,PORTMUX_DRIVE_HIGH ); + +sdram_init (uncached (EBI_SDRAM_BASE ), &sdram_config); +portmux_enable_usart3 (PORTMUX_DRIVE_MIN );#if defined(CONFIG_MACB )portmux_enable_macb0 (PORTMUX_MACB_MII ,PORTMUX_DRIVE_HIGH );
@@ -63,24 +66,6 @@ int board_early_init_f(void)return 0 ; } -phys_size_t initdram (int board_type) -{ -unsigned long expected_size; -unsigned long actual_size; -void *sdram_base; - - sdram_base =uncached (EBI_SDRAM_BASE ); - - expected_size =sdram_init (sdram_base, &sdram_config); - actual_size =get_ram_size (sdram_base, expected_size); - -if (expected_size != actual_size) -printf ("Warning: Only %lu of %lu MiB SDRAM is working\n" , - actual_size >>20 , expected_size >>20 ); - -return actual_size; -} -int board_early_init_r (void ) { gd->bd->bi_phy_id[0 ] =0x01 ;
board/in-circuit/grasshopper/grasshopper.c +2 -18
@@ -53,6 +53,8 @@ int board_early_init_f(void)hmatrix_slave_write (EBI ,SFR ,HMATRIX_BIT (EBI_SDRAM_ENABLE ));portmux_enable_ebi (SDRAM_DATA_32BIT ,23 ,0 ,PORTMUX_DRIVE_HIGH ); +sdram_init (uncached (EBI_SDRAM_BASE ), &sdram_config); +portmux_enable_usart0 (PORTMUX_DRIVE_MIN );portmux_enable_usart1 (PORTMUX_DRIVE_MIN );#if defined(CONFIG_MACB )
@@ -69,24 +71,6 @@ int board_early_init_f(void)return 0 ; } -phys_size_t initdram (int board_type) -{ -unsigned long expected_size; -unsigned long actual_size; -void *sdram_base; - - sdram_base =uncached (EBI_SDRAM_BASE ); - - expected_size =sdram_init (sdram_base, &sdram_config); - actual_size =get_ram_size (sdram_base, expected_size); - -if (expected_size != actual_size) -printf ("Warning: Only %lu of %lu MiB SDRAM is working\n" , - actual_size >>20 , expected_size >>20 ); - -return actual_size; -} -int board_early_init_r (void ) { gd->bd->bi_phy_id[0 ] =0x00 ;
board/mimc/mimc200/mimc200.c +2 -18
@@ -91,6 +91,8 @@ int board_early_init_f(void)/* Enable 26 address bits and NCS2 */ portmux_enable_ebi (16 ,26 ,PORTMUX_EBI_CS (2 ),PORTMUX_DRIVE_HIGH ); +sdram_init (uncached (EBI_SDRAM_BASE ), &sdram_config); +portmux_enable_usart1 (PORTMUX_DRIVE_MIN );/* de-assert "force sys reset" pin */
@@ -151,24 +153,6 @@ int board_early_init_f(void)return 0 ; } -phys_size_t initdram (int board_type) -{ -unsigned long expected_size; -unsigned long actual_size; -void *sdram_base; - - sdram_base =uncached (EBI_SDRAM_BASE ); - - expected_size =sdram_init (sdram_base, &sdram_config); - actual_size =get_ram_size (sdram_base, expected_size); - -if (expected_size != actual_size) -printf ("Warning: Only %lu of %lu MiB SDRAM is working\n" , - actual_size >>20 , expected_size >>20 ); - -return actual_size; -} -int board_early_init_r (void ) { gd->bd->bi_phy_id[0 ] =0x01 ;
board/miromico/hammerhead/hammerhead.c +2 -18
@@ -63,6 +63,8 @@ int board_early_init_f(void)hmatrix_slave_write (EBI ,SFR ,HMATRIX_BIT (EBI_SDRAM_ENABLE ));portmux_enable_ebi (32 ,23 ,0 ,PORTMUX_DRIVE_HIGH ); +sdram_init (uncached (EBI_SDRAM_BASE ), &sdram_config); +portmux_enable_usart1 (PORTMUX_DRIVE_MIN );#if defined(CONFIG_MACB )
@@ -74,24 +76,6 @@ int board_early_init_f(void)return 0 ; } -phys_size_t initdram (int board_type) -{ -unsigned long expected_size; -unsigned long actual_size; -void *sdram_base; - - sdram_base =uncached (EBI_SDRAM_BASE ); - - expected_size =sdram_init (sdram_base, &sdram_config); - actual_size =get_ram_size (sdram_base, expected_size); - -if (expected_size != actual_size) -printf ("Warning: Only %lu of %lu MiB SDRAM is working\n" , - actual_size >>20 , expected_size >>20 ); - -return actual_size; -} -int board_early_init_r (void ) { gd->bd->bi_phy_id[0 ] =0x01 ;
Signature · 1 line
1.7.10.4
PATCH v3 5/12 avr32: convert to dram_init()
Dear Andreas Devel,
Quoted 22 lines · Andreas Devel
Signed-off-by Andreas Bie?mann <[email protected]>Reviewed-by Simon Glass <[email protected]>---
Changes in v3: None
Changes in v2:
- new since v1Changes in v1: None
arch/avr32/include/asm/u-boot.h | 1 + arch/avr32/lib/Makefile | 1 + arch/avr32/lib/board.c | 20 ++++++++++---------- arch/avr32/lib/dram_init.c | 17 +++++++++++++++++ board/atmel/atngw100/atngw100.c | 20 ++------------------ board/atmel/atngw100mkii/atngw100mkii.c | 21 +++------------------ board/atmel/atstk1000/atstk1000.c | 21 +++------------------ board/earthlcd/favr-32-ezkit/favr-32-ezkit.c | 21 +++------------------ board/in-circuit/grasshopper/grasshopper.c | 20 ++------------------ board/mimc/mimc200/mimc200.c | 20 ++------------------ board/miromico/hammerhead/hammerhead.c | 20 ++------------------ 11 files changed, 46 insertions(+), 136 deletions(-)
Quoted 1 line
create mode 100644
arch/avr32/lib/dram_init.c
applied to u-boot-avr32/master, thanks!
Best regards,
Andreas Bie?mann
PATCH v3 6/12 avr32: use generic gd->start_addr_sp
In reply to Andreas BießmannBefore avr32 had an extra storage for stack end to have a nice stack printout on exception. Remove this extra storage and use generic gd->start_addr_sp instead.
---
Changes in v3:
- new in v3
Changes in v2: None
Changes in v1: None
arch/avr32/cpu/exception.c | 6 +++--- arch/avr32/include/asm/global_data.h | 1 - arch/avr32/lib/board.c | 2 +- 3 files changed, 4 insertions(+), 5 deletions(-)
arch/avr32/cpu/exception.c +3 -3
@@ -96,11 +96,11 @@ void do_unknown_exception(unsigned int ecr, struct pt_regs *regs)printf ("CPU Mode: %s\n" , cpu_modes[mode]);/* Avoid exception loops */ -if (regs->sp < (gd->arch.stack_end -CONFIG_STACKSIZE ) - || regs->sp >= gd->arch.stack_end) +if (regs->sp < (gd->start_addr_sp -CONFIG_STACKSIZE ) || + regs->sp >= gd->start_addr_sp)printf ("\nStack pointer seems bogus, won't do stack dump\n" );else -dump_mem ("\nStack: " , regs->sp, gd->arch.stack_end); +dump_mem ("\nStack: " , regs->sp, gd->start_addr_sp);panic ("Unhandled exception\n" ); }
arch/avr32/include/asm/global_data.h +0 -1
@@ -8,7 +8,6 @@/* Architecture-specific global data */ struct arch_global_data { -unsigned long stack_end;/* highest stack address */ unsigned long cpu_hz;/* cpu core clock frequency */ };
arch/avr32/lib/board.c +1 -1
@@ -157,7 +157,7 @@ void board_init_f(ulong board_type)/* And finally, a new, bigger stack. */ new_sp = (unsigned long *)addr; - gd->arch.stack_end = addr; + gd->start_addr_sp = addr; *(--new_sp) =0 ; *(--new_sp) =0 ;
Signature · 1 line
1.7.10.4
PATCH v3 6/12 avr32: use generic gd->start_addr_sp
Dear Andreas Devel,
Quoted 10 lines · Andreas Devel
Before avr32 had an extra storage for stack end to have a nice stack printout on exception. Remove this extra storage and use generic
gd->start_addr_spinstead.Signed-off-by Andreas Bie?mann <[email protected]>---
Changes in v3:
- new in v3
Quoted 7 lines
Changes in v2: None
Changes in v1: Nonearch/avr32/cpu/exception.c | 6 +++--- arch/avr32/include/asm/global_data.h | 1 - arch/avr32/lib/board.c | 2 +- 3 files changed, 4 insertions(+), 5 deletions(-)
applied to u-boot-avr32/master, thanks!
Best regards,
Andreas Bie?mann
PATCH v3 7/12 common/board_f: factor out reserve_stacks
In reply to Andreas BießmannIntroduce arch_reserve_stacks() to tailor gd->start_addr_sp and gd->irq_sp to the architecture needs.
---
Changes in v3:
- make arch_reserve_stacks weak and adopt ppc/arm versions
Changes in v2:
- new since v1
Changes in v1: None
arch/arm/lib/Makefile | 1 + arch/arm/lib/stack.c | 42 ++++++++++++++++++++++++++++++++++++++++++ arch/powerpc/lib/Makefile | 1 + arch/powerpc/lib/stack.c | 31 +++++++++++++++++++++++++++++++ common/board_f.c | 44 +++++++++----------------------------------- include/common.h | 18 ++++++++++++++++++ 6 files changed, 102 insertions(+), 35 deletions(-) create mode 100644 arch/arm/lib/stack.c create mode 100644 arch/powerpc/lib/stack.c
arch/arm/lib/Makefile +1 -0
@@ -35,6 +35,7 @@ endif obj-$(CONFIG_SEMIHOSTING) += semihosting.o obj-y += sections.o +obj-y += stack.o ifdef CONFIG_ARM64 obj-y += gic_64.o obj-y += interrupts_64.o
arch/arm/lib/stack.c new file +42 -0
42 lines not on this page · raw message
arch/powerpc/lib/Makefile +1 -0
@@ -40,6 +40,7 @@ obj-y += extable.o obj-y += interrupts.o obj-$(CONFIG_CMD_KGDB) += kgdb.o obj-$(CONFIG_CMD_IDE) += ide.o +obj-y += stack.o obj-y += time.o # Don't include the MPC5xxx special memcpy into the
arch/powerpc/lib/stack.c new file +31 -0
@@ -0,0 +1,31 @@ +/* +* Copyright (c) 2015 Andreas Bie?mann <[email protected]> +* +* Copyright (c) 2011 The Chromium OS Authors. +* (C) Copyright 2002-2006 +* Wolfgang Denk, DENX Software Engineering, wd at denx.de. +* +* (C) Copyright 2002 +* Sysgo Real-Time Solutions, GmbH <www.elinos.com> +* Marius Groeger <[email protected]> +* +* SPDX-License-Identifier: GPL-2.0+ +*/ +#include <common.h> + +DECLARE_GLOBAL_DATA_PTR ; + +int arch_reserve_stacks (void ) +{ +ulong *s; + +/* setup stack pointer for exceptions */ + gd->irq_sp = gd->start_addr_sp; + +/* Clear initial stack frame */ + s = (ulong *)gd->start_addr_sp; + *s =0 ;/* Terminate back chain */ + *++s =0 ;/* NULL return address */ + +return 0 ; +}
common/board_f.c +9 -35
57 lines not on this page · raw message
include/common.h +18 -0
@@ -252,6 +252,24 @@ int update_flash_size(int flash_size);int arch_early_init_r (void );/** +* Reserve all necessary stacks +* +* This is used in generic board init sequence in common/board_f.c. Each +* architecture could provide this function to tailor the required stacks. +* +* On entry gd->start_addr_sp is pointing to the suggested top of the stack. +* The callee ensures gd->start_add_sp is 16-byte aligned, so architectures +* require only this can leave it untouched. +* +* On exit gd->start_addr_sp and gd->irq_sp should be set to the respective +* positions of the stack. The stack pointer(s) will be set to this later. +* gd->irq_sp is only required, if the architecture needs it. +* +* @return 0 if no error +*/ +__weak int arch_reserve_stacks (void ); + +/** * Show the DRAM size in a board-specific way * * This is used by boards to display DRAM information in their own way.
Signature · 1 line
1.7.10.4
PATCH v3 7/12 common/board_f: factor out reserve_stacks
Quoted 8 lines · Andreas Bie?mann
Introduce
arch_reserve_stacks()to tailorgd->start_addr_spandgd->irq_spto the architecture needs.Signed-off-by Andreas Bie?mann <[email protected]>---
Changes in v3:
- makearch_reserve_stacksweak and adopt ppc/arm versions
Minor nit below.
Quoted 151 lines
Changes in v2:
- new since v1Changes in v1: None
arch/arm/lib/Makefile | 1 + arch/arm/lib/stack.c | 42 ++++++++++++++++++++++++++++++++++++++++++ arch/powerpc/lib/Makefile | 1 + arch/powerpc/lib/stack.c | 31 +++++++++++++++++++++++++++++++ common/board_f.c | 44 +++++++++----------------------------------- include/common.h | 18 ++++++++++++++++++ 6 files changed, 102 insertions(+), 35 deletions(-) create mode 100644 arch/arm/lib/stack.c create mode 100644 arch/powerpc/lib/stack.carch/arm/lib/Makefile +1
-0@@ -35,6 +35,7 @@ endif obj-$(CONFIG_SEMIHOSTING) += semihosting.o obj-y += sections.o +obj-y += stack.o ifdef CONFIG_ARM64 obj-y += gic_64.o obj-y += interrupts_64.oarch/arm/lib/stack.c new file +42
-0@@ -0,0 +1,42 @@ +/* +* Copyright (c) 2015 Andreas Bie?mann <[email protected]> +* +* Copyright (c) 2011 The Chromium OS Authors. +* (C) Copyright 2002-2006 +* Wolfgang Denk, DENX Software Engineering, wd at denx.de. +* +* (C) Copyright 2002 +* Sysgo Real-Time Solutions, GmbH <www.elinos.com> +* Marius Groeger <[email protected]> +* +* SPDX-License-Identifier: GPL-2.0+ +*/ +#include <common.h> + +DECLARE_GLOBAL_DATA_PTR ; + +int arch_reserve_stacks (void ) +{ +#ifdef CONFIG_SPL_BUILD + gd->start_addr_sp -=128 ;/* leave 32 words for abort-stack */ + gd->irq_sp = gd->start_addr_sp; +#else +/* setup stack pointer for exceptions */ + gd->irq_sp = gd->start_addr_sp; + +# if !defined(CONFIG_ARM64 ) +# ifdef CONFIG_USE_IRQ + gd->start_addr_sp -= (CONFIG_STACKSIZE_IRQ +CONFIG_STACKSIZE_FIQ ); +debug ("Reserving %zu Bytes for IRQ stack at: %08lx\n" , +CONFIG_STACKSIZE_IRQ +CONFIG_STACKSIZE_FIQ , gd->start_addr_sp); + +/* 8-byte alignment for ARM ABI compliance */ + gd->start_addr_sp &= ~0x07 ; +# endif +/* leave 3 words for abort-stack, plus 1 for alignment */ + gd->start_addr_sp -=16 ; +# endif +#endif + +return 0 ; +}arch/powerpc/lib/Makefile +1
-0@@ -40,6 +40,7 @@ obj-y += extable.o obj-y += interrupts.o obj-$(CONFIG_CMD_KGDB) += kgdb.o obj-$(CONFIG_CMD_IDE) += ide.o +obj-y += stack.o obj-y += time.o # Don't include the MPC5xxx special memcpy into thearch/powerpc/lib/stack.c new file +31
-0@@ -0,0 +1,31 @@ +/* +* Copyright (c) 2015 Andreas Bie?mann <[email protected]> +* +* Copyright (c) 2011 The Chromium OS Authors. +* (C) Copyright 2002-2006 +* Wolfgang Denk, DENX Software Engineering, wd at denx.de. +* +* (C) Copyright 2002 +* Sysgo Real-Time Solutions, GmbH <www.elinos.com> +* Marius Groeger <[email protected]> +* +* SPDX-License-Identifier: GPL-2.0+ +*/ +#include <common.h> + +DECLARE_GLOBAL_DATA_PTR ; + +int arch_reserve_stacks (void ) +{ +ulong *s; + +/* setup stack pointer for exceptions */ + gd->irq_sp = gd->start_addr_sp; + +/* Clear initial stack frame */ + s = (ulong *)gd->start_addr_sp; + *s =0 ;/* Terminate back chain */ + *++s =0 ;/* NULL return address */ + +return 0 ; +}common/board_f.c +5
-11@@ -573,48 +573,22 @@ static int reserve_fdt(void)return 0 ; } -static int reserve_stacks (void ) +int arch_reserve_stacks (void ) { -#ifdef CONFIG_SPL_BUILD -# ifdef CONFIG_ARM - gd->start_addr_sp -=128 ;/* leave 32 words for abort-stack */ - gd->irq_sp = gd->start_addr_sp; -# endif -#else -# ifdef CONFIG_PPC -ulong *s; -# endif +return 0 ; +} -/* setup stack pointer for exceptions */ +static int reserve_stacks (void ) +{
common/board_f.c static int reserve_fdt(void) · line 588
Quoted 10 lines
common/board_f.c +2
-4+/* make stack pointer 16-byte aligned */ gd->start_addr_sp -=16 ; gd->start_addr_sp &= ~0xf ; - gd->irq_sp = gd->start_addr_sp;/* -* Handle architecture-specific things here -* TODO(sjg at chromium.org): Perhaps create arch_reserve_stack() -* to handle this and put in arch/xxx/lib/stack.c +* let the architecture specific code tailor gd->start_addr_sp and
'to tailor'
Quoted 56 lines
common/board_f.c +2
-20+* gd->irq_sp */ -# if defined(CONFIG_ARM ) && !defined(CONFIG_ARM64 ) -# ifdef CONFIG_USE_IRQ - gd->start_addr_sp -= (CONFIG_STACKSIZE_IRQ +CONFIG_STACKSIZE_FIQ ); -debug ("Reserving %zu Bytes for IRQ stack at: %08lx\n" , -CONFIG_STACKSIZE_IRQ +CONFIG_STACKSIZE_FIQ , gd->start_addr_sp); - -/* 8-byte alignment for ARM ABI compliance */ - gd->start_addr_sp &= ~0x07 ; -# endif -/* leave 3 words for abort-stack, plus 1 for alignment */ - gd->start_addr_sp -=16 ; -# elif defined(CONFIG_PPC ) -/* Clear initial stack frame */ - s = (ulong *) gd->start_addr_sp; - *s =0 ;/* Terminate back chain */ - *++s =0 ;/* NULL return address */ -# endif /* Architecture specific code */ - -return 0 ; -#endif +return arch_reserve_stacks (); }static int display_new_sp (void )include/common.h +18
-1@@ -252,6 +252,24 @@ int update_flash_size(int flash_size);int arch_early_init_r (void );/** +* Reserve all necessary stacks +* +* This is used in generic board init sequence in common/board_f.c. Each +* architecture could provide this function to tailor the required stacks. +* +* On entry gd->start_addr_sp is pointing to the suggested top of the stack. +* The callee ensures gd->start_add_sp is 16-byte aligned, so architectures +* require only this can leave it untouched. +* +* On exit gd->start_addr_sp and gd->irq_sp should be set to the respective +* positions of the stack. The stack pointer(s) will be set to this later. +* gd->irq_sp is only required, if the architecture needs it. +* +* @return 0 if no error +*/ +__weak int arch_reserve_stacks (void ); + +/** * Show the DRAM size in a board-specific way * * This is used by boards to display DRAM information in their own way. --
Quoted 2 lines
1.7.10.4
Regards,
Simon
PATCH v3 7/12 common/board_f: factor out reserve_stacks
In reply to Andreas BießmannDear Andreas Devel,
Quoted 22 lines · Andreas Devel
Introduce
arch_reserve_stacks()to tailorgd->start_addr_spandgd->irq_spto the architecture needs.Signed-off-by Andreas Bie?mann <[email protected]>Reviewed-by Simon Glass <[email protected]>---
Changes in v3:
- makearch_reserve_stacksweak and adopt ppc/arm versionsChanges in v2:
- new since v1Changes in v1: None
arch/arm/lib/Makefile | 1 + arch/arm/lib/stack.c | 42 ++++++++++++++++++++++++++++++++++++++++++ arch/powerpc/lib/Makefile | 1 + arch/powerpc/lib/stack.c | 31 +++++++++++++++++++++++++++++++ common/board_f.c | 44 +++++++++----------------------------------- include/common.h | 18 ++++++++++++++++++ 6 files changed, 102 insertions(+), 35 deletions(-)
Quoted 2 lines
create mode 100644
arch/arm/lib/stack.c
create mode 100644arch/powerpc/lib/stack.c
applied to u-boot-avr32/master, thanks!
Best regards,
Andreas Bie?mann
PATCH v3 8/12 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 v3: None
Changes in v2: None
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 ) {
@@ -702,6 +711,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 v3 9/12 common/board_r: allocate bootparams
In reply to Andreas Bießmann---
Changes in v3: None
Changes in v2:
- provide as extra patch, remove from avr32 generic board support
Changes in v1: None
common/board_r.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+)
common/board_r.c +15 -0
@@ -459,6 +459,18 @@ 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 -ENOMEM ; + } +return 0 ; +} +#endif +#ifdef CONFIG_SC3 /* TODO: with new initcalls, move this into the driver */ extern void sc3_read_eeprom (void );
@@ -775,6 +787,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
Signature · 1 line
1.7.10.4
PATCH v3 9/12 common/board_r: allocate bootparams
Hi Andreas,
Quoted 2 lines · Andreas Bie?mann
Signed-off-by Andreas Bie?mann <[email protected]>Reviewed-by Simon Glass <[email protected]>
If you re-issue this for any other reason, please add a commit message...
Quoted 10 lines
---
Changes in v3: None
Changes in v2:
- provide as extra patch, remove from avr32 generic board supportChanges in v1: None
common/board_r.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+)
Regards,
Simon
PATCH v3 9/12 common/board_r: allocate bootparams
In reply to Andreas BießmannDear Andreas Devel,
Quoted 4 lines · Andreas Devel
Signed-off-by Andreas Bie?mann <[email protected]>Reviewed-by Simon Glass <[email protected]>---
Quoted 8 lines
Changes in v3: None
Changes in v2:
- provide as extra patch, remove from avr32 generic board supportChanges in v1: None
common/board_r.c| 15 +++++++++++++++1 file changed, 15 insertions(+)
applied to u-boot-avr32/master, thanks!
Best regards,
Andreas Bie?mann
PATCH v3 10/12 avr32: add generic board support
In reply to Andreas Bießmann---
This version still has the mmu_init_r() in common/board_r. Removing this now is not that easy ... I'd love to get it in as is and change it later to the board_init_f_r() sequence.
Changes in v3:
- remove unnecessary stack implementation for avr32
- fix bdinfo output
Changes in v2:
- remove bootparams allocation, provide as extra patch
- use the else path in setup_mon_len()
- provide arch_reserve_stacks() for avr32
- use the newly introduced dram_init()
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 | 2 +- common/board_r.c | 13 ++++++++++--- common/cmd_bdinfo.c | 4 ++-- include/asm-generic/u-boot.h | 4 ++++ 10 files changed, 37 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,7 +8,9 @@ # obj-y += memset.o +ifndef CONFIG_SYS_GENERIC_BOARD obj-y += board.o +endif obj-$(CONFIG_CMD_BOOTM) += bootm.o obj-y += interrupts.o obj-y += dram_init.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 +1 -1
@@ -883,7 +883,7 @@ static init_fnc_t init_sequence_f[] = {#endif announce_dram_init,/* TODO: unify all these dram functions? */ -#if defined(CONFIG_ARM ) || defined(CONFIG_X86 ) +#if defined(CONFIG_ARM ) || defined(CONFIG_X86 ) || defined(CONFIG_AVR32 ) dram_init, /* configure available RAM banks */#endif #if defined(CONFIG_MIPS ) || defined(CONFIG_PPC )
common/board_r.c +10 -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 ;
@@ -498,7 +501,7 @@ static int initr_api(void)#endif /* enable exceptions */ -#ifdef CONFIG_ARM +#if defined(CONFIG_ARM ) || defined(CONFIG_AVR32 )static int initr_enable_interrupts (void ) {enable_interrupts ();
@@ -825,10 +828,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 )
@@ -893,6 +896,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
common/cmd_bdinfo.c +2 -2
@@ -333,8 +333,8 @@ int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])bd_t *bd = gd->bd;print_num ("boot_params" , (ulong )bd->bi_boot_params); -print_num ("memstart" , (ulong )bd->bi_memstart); -print_lnum ("memsize" , (u64 )bd->bi_memsize); +print_num ("memstart" , (ulong )bd->bi_dram[0 ].start); +print_lnum ("memsize" , (u64 )bd->bi_dram[0 ].size);print_num ("flashstart" , (ulong )bd->bi_flashstart);print_num ("flashsize" , (ulong )bd->bi_flashsize);print_num ("flashoffset" , (ulong )bd->bi_flashoffset);
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 v3 10/12 avr32: add generic board support
Hi Andreas,
Quoted 193 lines · Andreas Bie?mann
Signed-off-by Andreas Bie?mann <[email protected]>---
This version still has themmu_init_r()in common/board_r. Removing this now is not that easy ... I'd love to get it in as is and change it later to theboard_init_f_r()sequence.Changes in v3:
- remove unnecessary stack implementation for avr32
- fix bdinfo outputChanges in v2:
- remove bootparams allocation, provide as extra patch
- use the else path insetup_mon_len()
- providearch_reserve_stacks()for avr32
- use the newly introduceddram_init()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 | 2 +- common/board_r.c | 13 ++++++++++--- common/cmd_bdinfo.c | 4 ++-- include/asm-generic/u-boot.h | 4 ++++ 10 files changed, 37 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,7 +8,9 @@ # obj-y += memset.o +ifndef CONFIG_SYS_GENERIC_BOARD obj-y += board.o +endif obj-$(CONFIG_CMD_BOOTM) += bootm.o obj-y += interrupts.o obj-y += dram_init.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@@ -883,7 +883,7 @@ static init_fnc_t init_sequence_f[] = {#endif announce_dram_init,/* TODO: unify all these dram functions? */ -#if defined(CONFIG_ARM ) || defined(CONFIG_X86 ) +#if defined(CONFIG_ARM ) || defined(CONFIG_X86 ) || defined(CONFIG_AVR32 ) dram_init, /* configure available RAM banks */#endif #if defined(CONFIG_MIPS ) || defined(CONFIG_PPC )common/board_r.c +10
-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 ;@@ -498,7 +501,7 @@ static int initr_api(void)#endif /* enable exceptions */ -#ifdef CONFIG_ARM +#if defined(CONFIG_ARM ) || defined(CONFIG_AVR32 )static int initr_enable_interrupts (void ) {enable_interrupts ();@@ -825,10 +828,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 )@@ -893,6 +896,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 common/cmd_bdinfo.c +0
-0
common/cmd_bdinfo.c int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) · line 337
Quoted 7 lines
common/cmd_bdinfo.c +2
-2@@ -333,8 +333,8 @@ int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])bd_t *bd = gd->bd;print_num ("boot_params" , (ulong )bd->bi_boot_params); -print_num ("memstart" , (ulong )bd->bi_memstart); -print_lnum ("memsize" , (u64 )bd->bi_memsize); +print_num ("memstart" , (ulong )bd->bi_dram[0 ].start); +print_lnum ("memsize" , (u64 )bd->bi_dram[0 ].size);
Can you explain this change please? I'm not sure what is happening here.
Quoted 19 lines
common/cmd_bdinfo.c +0
-0print_num ("flashstart" , (ulong )bd->bi_flashstart);print_num ("flashsize" , (ulong )bd->bi_flashsize);print_num ("flashoffset" , (ulong )bd->bi_flashoffset);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 v3 10/12 avr32: add generic board support
Hi Simon,
Quoted 41 lines · Simon Glass
Quoted 39 lines · Andreas Bie?mann
Signed-off-by Andreas Bie?mann <[email protected]>---
This version still has themmu_init_r()in common/board_r. Removing this now is not that easy ... I'd love to get it in as is and change it later to theboard_init_f_r()sequence.Changes in v3:
- remove unnecessary stack implementation for avr32
- fix bdinfo outputChanges in v2:
- remove bootparams allocation, provide as extra patch
- use the else path insetup_mon_len()
- providearch_reserve_stacks()for avr32
- use the newly introduceddram_init()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 | 2 +- common/board_r.c | 13 ++++++++++--- common/cmd_bdinfo.c | 4 ++-- include/asm-generic/u-boot.h | 4 ++++ 10 files changed, 37 insertions(+), 6 deletions(-)common/cmd_bdinfo.c +0
-0@@ -333,8 +333,8 @@ int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])bd_t *bd = gd->bd;
Quoted 7 lines
common/cmd_bdinfo.c int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) · line 337
Quoted 5 lines
common/cmd_bdinfo.c +2
-2print_num ("boot_params" , (ulong )bd->bi_boot_params); -print_num ("memstart" , (ulong )bd->bi_memstart); -print_lnum ("memsize" , (u64 )bd->bi_memsize); +print_num ("memstart" , (ulong )bd->bi_dram[0 ].start); +print_lnum ("memsize" , (u64 )bd->bi_dram[0 ].size);Can you explain this change please? I'm not sure what is happening here.
avr32 never had bd_t.bi_mem(start|size) members, they where always defined to bd_t.bi_dram[0].(start|size). Please have a look at arch/avr32/include/asm/u-boot.h.
When converting to generic board I also have to use the generic bd_t (which is a mess). Since the current generic board implementation do not set both bi_mem(start|size) for all architectures I decided to go with bi_dram[0].(start|size), this will also work with the other boards not converted yet. To use just the first entry in bi_dram[] and do not loop over is ok on avr32 since the only SoC available there has just one SDRAM controller.
If you're Ok with this change I would apply this series with one fix for 'common/board_f: factor out reserve_stacks' and maybe a more descriptive commit message for 'common/board_r: allocate bootparams' mid of next week to avr32/master and send a PR. AFAIR the microblaze generic board conversion depends on at least one patch of this series.
Best regards
Andreas Bie?mann
PATCH v3 10/12 avr32: add generic board support
Hi Andreas,
Quoted 9 lines · Andreas Bie?mann
Hi Simon,
Quoted 5 lines · Simon Glass
Quoted 3 lines · Andreas Bie?mann
Signed-off-by Andreas Bie?mann <[email protected]>---
This version still has themmu_init_r()in common/board_r. Removing
this now is
Quoted 1 line
Quoted 1 line
Quoted 1 line
not that easy ... I'd love to get it in as is and change it later to
the
Quoted 28 lines
Quoted 27 lines
Quoted 27 lines
board_init_f_r()sequence.Changes in v3:
- remove unnecessary stack implementation for avr32
- fix bdinfo outputChanges in v2:
- remove bootparams allocation, provide as extra patch
- use the else path insetup_mon_len()
- providearch_reserve_stacks()for avr32
- use the newly introduceddram_init()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| 2 +-common/board_r.c| 13 ++++++++++---common/cmd_bdinfo.c| 4 ++--include/asm-generic/u-boot.h| 4 ++++10 files changed, 37 insertions(+), 6 deletions(-)
Quoted 5 lines
Quoted 5 lines
common/cmd_bdinfo.c int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int
Quoted 5 lines
common/cmd_bdinfo.c +0
-0@@ -333,8 +333,8 @@ int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int
argc, char * const argv[])
Quoted 14 lines
Quoted 9 lines
common/cmd_bdinfo.c int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) · line 337
Quoted 7 lines
common/cmd_bdinfo.c +2
-2bd_t *bd = gd->bd;print_num ("boot_params" , (ulong )bd->bi_boot_params); -print_num ("memstart" , (ulong )bd->bi_memstart); -print_lnum ("memsize" , (u64 )bd->bi_memsize); +print_num ("memstart" , (ulong )bd->bi_dram[0 ].start); +print_lnum ("memsize" , (u64 )bd->bi_dram[0 ].size);Can you explain this change please? I'm not sure what is happening here.
avr32 never had
bd_t.bi_mem(start|size)members, they where always defined to bd_t.bi_dram[0].(start|size). Please have a look atarch/avr32/include/asm/u-boot.h.
Quoted 7 lines
When converting to generic board I also have to use the generic
bd_t(which is a mess). Since the current generic board implementation do not set bothbi_mem(start|size)for all architectures I decided to go with bi_dram[0].(start|size), this will also work with the other boards not converted yet. To use just the first entry in bi_dram[] and do not loop over is ok on avr32 since the only SoC available there has just one SDRAM controller.
OK I see. I didn't realise it was avr32-only code.
Quoted 7 lines
If you're Ok with this change I would apply this series with one fix for 'common/board_f: factor out
reserve_stacks' and maybe a more descriptive commit message for 'common/board_r: allocate bootparams' mid of next week to avr32/master and send a PR. AFAIR the microblaze generic board conversion depends on at least one patch of this series.
Sounds good to me.
Regards,
Simon
PATCH v3 10/12 avr32: add generic board support
In reply to Andreas BießmannDear Andreas Devel,
Quoted 20 lines · Andreas Devel
Signed-off-by Andreas Bie?mann <[email protected]>---
This version still has themmu_init_r()in common/board_r. Removing this now is not that easy ... I'd love to get it in as is and change it later to theboard_init_f_r()sequence.Changes in v3:
- remove unnecessary stack implementation for avr32
- fix bdinfo outputChanges in v2:
- remove bootparams allocation, provide as extra patch
- use the else path insetup_mon_len()
- providearch_reserve_stacks()for avr32
- use the newly introduceddram_init()Changes in v1:
- addtimer_initinboard_r
- remove extern declaration ofmmu_init_r()
Quoted 11 lines
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 | 2 +- common/board_r.c | 13 ++++++++++--- common/cmd_bdinfo.c | 4 ++-- include/asm-generic/u-boot.h | 4 ++++ 10 files changed, 37 insertions(+), 6 deletions(-)
applied to u-boot-avr32/master, thanks!
Best regards,
Andreas Bie?mann
PATCH v3 11/12 grasshopper: enable generic board
In reply to Andreas Bießmann---
Changes in v3: None
Changes in v2: None
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 v3 11/12 grasshopper: enable generic board
Dear Andreas Devel,
Quoted 9 lines · Andreas Devel
Signed-off-by Andreas Bie?mann <[email protected]>---
Changes in v3: None
Changes in v2: None
Changes in v1: None
include/configs/grasshopper.h| 4 ++++1 file changed, 4 insertions(+)
applied to u-boot-avr32/master, thanks!
Best regards,
Andreas Bie?mann
PATCH v3 12/12 atstk1002: enable generic board
In reply to Andreas Bießmann---
Changes in v3: None
Changes in v2: None
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
PATCH v3 12/12 atstk1002: enable generic board
Dear Andreas Devel,
Quoted 10 lines · Andreas Devel
Signed-off-by Andreas Bie?mann <[email protected]>---
Changes in v3: None
Changes in v2: None
Changes in v1:
- new since RFC
include/configs/atstk1002.h| 4 ++++1 file changed, 4 insertions(+)
applied to u-boot-avr32/master, thanks!
Best regards,
Andreas Bie?mann
v3 cover avr32: add generic board
In reply to Andreas BießmannHi Andreas,
Andreas Bie?mann wrote,
Quoted 6 lines
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. Waldemar, could you please test the ngw100 device? Boards not converted to generic board will be removed soon.
I have tested your series on my NGW100. It works fine. But I think it is not converted to generic board, yet. What need to be done to convert the NGW100 device?
You can add a Tested-By from me, for your current patch set.
best regards
Waldemar