Atmel at91x40 ("EB01" eval board) resurected
From: Jean-Christophe PLAGNIOL-VILLARD <hidden>
Date: 2012-01-07 12:07:34
On 11:14 Fri 30 Dec , Greg Ungerer wrote:
Hi Phil, On 23/12/11 13:18, Phil Budne wrote:quoted
I'm new here, so please excuse any protocol violations! I decided to see if I could bring up current kernel sources under skyeye (at91x40 simulation). I've also been working on a port to the more modern AT91SAM7SE using QEMU. Attached are: diffs from sources from git://github.com/at91linux/linux-at91.git master branch (current as of 12/21/11) many of the changes are in generic arch/arm files. Tested on Simulated at91x40xxx "EB01" board kernel built using attached defconfig file.There is an at91x40 defconfig in arch/arm/configs/at91x40_defconfig. Did you start with that? I notice that the processor ID you have in your defconfig is quite different to the one in there...quoted
4M of RAM at 0x1000000 XIP kernel loaded in 4M (of "flash") at 0x1400000 root filesystem is a compiled in initramfs too much pain to build ROMfs and map; (drivers/mtd/maps/uclinux.c requires rootfs appended after kernel "uClinux" 11/11/11 dist uclinux.c allows rootfs image at fixed location) new file attached: mach/arm/mach-at91/at91x40_devices.c Runs on locally modified skyeye based on skyeye-v1.2_Rel.tar (had trouble building latest release) adds interrupt driven UART output tweaked for programmed I/O UART input fix for loading XIP data section (load at physical, not virtual address) Problems: repeated "free" commands show loss of 12K each time (see atached typescript) same sh binary (from skyeye test suite) does not exhibit this on 2.6 and 2.4 kernels (from the skyeye test suite). breakpointing sys_munmap shows len==0 (could it be an ABI issue?)Some comments on the changes below. Ultimately though you need to break this single diff up into well defined logical changes. In other words make a patch series out of it.quoted
diff --git a/arch/arm/include/asm/memory.h b/arch/arm/include/asm/memory.h index a8997d7..fcb5757 100644 --- a/arch/arm/include/asm/memory.h +++ b/arch/arm/include/asm/memory.h@@ -116,6 +116,8 @@#define MODULES_END (END_MEM) #define MODULES_VADDR (PHYS_OFFSET) +#define XIP_VIRT_ADDR(physaddr) (physaddr) + #endif /* !CONFIG_MMU */ /*diff --git a/arch/arm/kernel/setup.c b/arch/arm/kernel/setup.c index 3448a3f..a63102b 100644 --- a/arch/arm/kernel/setup.c +++ b/arch/arm/kernel/setup.c@@ -60,8 +60,12 @@#include "tcm.h" #ifndef MEM_SIZE +#ifdef CONFIG_DRAM_SIZE +#define MEM_SIZE CONFIG_DRAM_SIZE +#else #define MEM_SIZE (16*1024*1024) #endif +#endif #if defined(CONFIG_FPE_NWFPE) || defined(CONFIG_FPE_FASTFPE) char fpe_type[8];diff --git a/arch/arm/kernel/vmlinux.lds.S b/arch/arm/kernel/vmlinux.lds.S index 20b3041..26c7411 100644 --- a/arch/arm/kernel/vmlinux.lds.S +++ b/arch/arm/kernel/vmlinux.lds.S@@ -288,6 +288,7 @@ SECTIONSNOTES BSS_SECTION(0, 0, 0) + _ebss = .; /* uClinux MTD */You don't need this if you are not using the MTD/uclinux.o driver. And your defconfig doesn't have this enabled.quoted
_end = .; STABS_DEBUGdiff --git a/arch/arm/mach-at91/Makefile b/arch/arm/mach-at91/Makefile index 242174f..babb6c6 100644 --- a/arch/arm/mach-at91/Makefile +++ b/arch/arm/mach-at91/Makefile@@ -19,7 +19,7 @@ obj-$(CONFIG_ARCH_AT91SAM9RL) += at91sam9rl.o at91sam926x_time.o at91sam9rl_deviobj-$(CONFIG_ARCH_AT91SAM9G20) += at91sam9260.o at91sam926x_time.o at91sam9260_devices.o sam9_smc.o at91sam9_alt_reset.o obj-$(CONFIG_ARCH_AT91SAM9G45) += at91sam9g45.o at91sam926x_time.o at91sam9g45_devices.o sam9_smc.o obj-$(CONFIG_ARCH_AT91CAP9) += at91cap9.o at91sam926x_time.o at91cap9_devices.o sam9_smc.o -obj-$(CONFIG_ARCH_AT91X40) += at91x40.o at91x40_time.o +obj-$(CONFIG_ARCH_AT91X40) += at91x40.o at91x40_time.o at91x40_devices.o # AT91RM9200 board-specific support obj-$(CONFIG_MACH_ONEARM) += board-1arm.odiff --git a/arch/arm/mach-at91/at91x40.c b/arch/arm/mach-at91/at91x40.c index 56ba3bd..4d5a475 100644 --- a/arch/arm/mach-at91/at91x40.c +++ b/arch/arm/mach-at91/at91x40.c@@ -73,6 +73,6 @@ void __init at91x40_init_interrupts(unsigned int priority[NR_AIC_IRQS])if (!priority) priority = at91x40_default_irq_priority; - at91_aic_init(priority); + at91_init_interrupts(priority); }diff --git a/arch/arm/mach-at91/board-eb01.c b/arch/arm/mach-at91/board-eb01.c index d2023f2..902ade9 100644 --- a/arch/arm/mach-at91/board-eb01.c +++ b/arch/arm/mach-at91/board-eb01.c@@ -38,6 +38,21 @@ static void __init at91eb01_init_irq(void)static void __init at91eb01_init_early(void) { at91x40_initialize(40000000); + + /* USART0 ttyS0. (Rx & Tx only) */ + at91_register_uart(AT91X40_ID_USART0, 0, 0); + + /* USART1 ttyS1. (Rx & Tx only) */ + at91_register_uart(AT91X40_ID_USART1, 1, 0); + + /* set serial console to ttyS0 (USART0) */ + at91_set_serial_console(0); +} + +static void __init at91eb01_init_machine(void) +{ + /* Serial */ + at91_add_device_serial(); } MACHINE_START(AT91EB01, "Atmel AT91 EB01")@@ -45,5 +60,5 @@ MACHINE_START(AT91EB01, "Atmel AT91 EB01").timer = &at91x40_timer, .init_early = at91eb01_init_early, .init_irq = at91eb01_init_irq, + .init_machine = at91eb01_init_machine, MACHINE_END -diff --git a/arch/arm/mach-at91/include/mach/at91x40.h b/arch/arm/mach-at91/include/mach/at91x40.h index a152ff8..8d3c57c 100644 --- a/arch/arm/mach-at91/include/mach/at91x40.h +++ b/arch/arm/mach-at91/include/mach/at91x40.h@@ -34,8 +34,8 @@#define AT91_EBI (0xffe00000 - AT91_BASE_SYS) /* External Bus Interface */ #define AT91_SF (0xfff00000 - AT91_BASE_SYS) /* Special Function */ -#define AT91_USART1 (0xfffcc000 - AT91_BASE_SYS) /* USART 1 */ -#define AT91_USART0 (0xfffd0000 - AT91_BASE_SYS) /* USART 0 */ +#define AT91_USART1 0xfffcc000 /* USART 1 */ +#define AT91_USART0 0xfffd0000 /* USART 0 */You probably want to leave these as they were. Modify your resource defines in at91x40_devices.c and add AT91_BASE_SYS to the AT91_USARTx values. That is more consistent with all other users of these defines.
drop AT91_BASE_SYS I'm dropping it an AT91 don't use at91_sys_read/write too Best Regards, J.