diff options
| author | Keith Packard <keithp@keithp.com> | 2013-04-22 20:35:57 -0500 | 
|---|---|---|
| committer | Keith Packard <keithp@keithp.com> | 2013-05-07 21:30:26 -0700 | 
| commit | dfc268e0021e1cd3045f73339a749d292a6a6300 (patch) | |
| tree | 3736895bb7debeff7a6363ce263b085d6ec4b531 /src | |
| parent | 8ded61d59888c79ef1f94e664b5fb770841a801a (diff) | |
altos: Use flash loader on all STM products
Includes the boot chain stuff
Signed-off-by: Keith Packard <keithp@keithp.com>
Diffstat (limited to 'src')
| -rw-r--r-- | src/core/ao_cmd.c | 15 | ||||
| -rw-r--r-- | src/megadongle-v0.1/Makefile | 1 | ||||
| -rw-r--r-- | src/stm-demo/Makefile | 2 | ||||
| -rw-r--r-- | src/stm-demo/ao_demo.c | 8 | ||||
| -rw-r--r-- | src/stm-flash/ao_pins.h | 1 | ||||
| -rw-r--r-- | src/stm/altos-application.ld | 95 | ||||
| -rw-r--r-- | src/stm/altos.ld | 35 | ||||
| -rw-r--r-- | src/stm/ao_arch.h | 5 | ||||
| -rw-r--r-- | src/stm/ao_boot.h | 5 | ||||
| -rw-r--r-- | src/telegps-v0.1/Makefile | 1 | ||||
| -rw-r--r-- | src/telelco-v0.1/Makefile | 1 | ||||
| -rw-r--r-- | src/telemega-v0.1/Makefile | 1 | ||||
| -rw-r--r-- | src/telescience-v0.2/Makefile | 1 | 
13 files changed, 60 insertions, 111 deletions
| diff --git a/src/core/ao_cmd.c b/src/core/ao_cmd.c index 7da2384f..188b8bb4 100644 --- a/src/core/ao_cmd.c +++ b/src/core/ao_cmd.c @@ -385,6 +385,18 @@ ao_cmd(void)  	}  } +#if HAS_BOOT_LOADER + +#include <ao_boot.h> + +static void +ao_loader(void) +{ +	flush(); +	ao_boot_loader(); +} +#endif +  __xdata struct ao_task ao_cmd_task;  __code struct ao_cmds	ao_base_cmds[] = { @@ -397,6 +409,9 @@ __code struct ao_cmds	ao_base_cmds[] = {  #if HAS_VERSION  	{ version,	"v\0Version" },  #endif +#if HAS_BOOT_LOADER +	{ ao_loader,	"X\0Switch to boot loader" }, +#endif  	{ 0,	NULL },  }; diff --git a/src/megadongle-v0.1/Makefile b/src/megadongle-v0.1/Makefile index fe392ce1..7f12963f 100644 --- a/src/megadongle-v0.1/Makefile +++ b/src/megadongle-v0.1/Makefile @@ -28,6 +28,7 @@ INC = \  #STACK_GUARD_DEF=-DHAS_STACK_GUARD=1  ALTOS_SRC = \ +	ao_boot_chain.c \  	ao_interrupt.c \  	ao_product.c \  	ao_romconfig.c \ diff --git a/src/stm-demo/Makefile b/src/stm-demo/Makefile index e84a7675..d1f825db 100644 --- a/src/stm-demo/Makefile +++ b/src/stm-demo/Makefile @@ -56,7 +56,7 @@ OBJ=$(SRC:.c=.o)  all: $(ELF) $(IHX) -LDFLAGS=-L../stm -Wl,-Taltos-application.ld +LDFLAGS=-L../stm -Wl,-Taltos.ld  $(ELF): Makefile $(OBJ)  	$(call quiet,CC) $(LDFLAGS) $(CFLAGS) -o $@ $(OBJ) $(SAT_CLIB) -lgcc diff --git a/src/stm-demo/ao_demo.c b/src/stm-demo/ao_demo.c index ec572fdc..5677cdf4 100644 --- a/src/stm-demo/ao_demo.c +++ b/src/stm-demo/ao_demo.c @@ -169,13 +169,6 @@ ao_event(void)  } -static void -ao_boot_loader(void) -{ -	flush(); -	ao_boot_reboot((uint32_t *) 0); -} -  __code struct ao_cmds ao_demo_cmds[] = {  	{ ao_dma_test,	"D\0DMA test" },  	{ ao_spi_write, "W\0SPI write" }, @@ -183,7 +176,6 @@ __code struct ao_cmds ao_demo_cmds[] = {  	{ ao_i2c_write, "i\0I2C write" },  	{ ao_temp, "t\0Show temp" },  	{ ao_event, "e\0Monitor event queue" }, -	{ ao_boot_loader, "L\0Reboot to boot loader" },  	{ 0, NULL }  }; diff --git a/src/stm-flash/ao_pins.h b/src/stm-flash/ao_pins.h index 1c00675b..8fb56f7b 100644 --- a/src/stm-flash/ao_pins.h +++ b/src/stm-flash/ao_pins.h @@ -75,6 +75,5 @@  #define AO_BOOT_APPLICATION_PIN		0  #define AO_BOOT_APPLICATION_VALUE	1  #define AO_BOOT_APPLICATION_MODE	0 -#define AO_BOOT_APPLICATION_BASE	((uint32_t *) 0x1000)  #endif /* _AO_PINS_H_ */ diff --git a/src/stm/altos-application.ld b/src/stm/altos-application.ld deleted file mode 100644 index 6affc376..00000000 --- a/src/stm/altos-application.ld +++ /dev/null @@ -1,95 +0,0 @@ -/* - * Copyright © 2012 Keith Packard <keithp@keithp.com> - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; version 2 of the License. - * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. - */ - -MEMORY { -	rom (rx) : ORIGIN = 0x08001000, LENGTH = 124K -	ram (!w) : ORIGIN = 0x20000000, LENGTH = 16K -} - -INCLUDE registers.ld - -EXTERN (stm_interrupt_vector) - -SECTIONS { -	/* -	 * Rom contents -	 */ - -	.text ORIGIN(rom) : { -		__text_start__ = .; -		*(.interrupt)	/* Interrupt vectors */ - -		. = ORIGIN(rom) + 0x100; - - -		/* Ick. What I want is to specify the -		 * addresses of some global constants so -		 * that I can find them across versions -		 * of the application. I can't figure out -		 * how to make gnu ld do that, so instead -		 * we just load the two files that include -		 * these defines in the right order here and -		 * expect things to 'just work'. Don't change -		 * the contents of those files, ok? -		 */ -		ao_romconfig.o(.romconfig*) -		ao_product.o(.romconfig*) -		*(.text*)	/* Executable code */ -		*(.rodata*)	/* Constants */ - -	} > rom - -	.ARM.exidx : { -		*(.ARM.exidx* .gnu.linkonce.armexidx.*) -	} > rom -	__text_end__ = .; - -	/* Boot data which must live at the start of ram so that -	 * the application and bootloader share the same addresses. -	 * This must be all uninitialized data -	 */ -	.boot (NOLOAD) : { -		__boot_start__ = .; -		*(.boot) -		. = ALIGN(4); -		__boot_end__ = .; -	} >ram - -	/* Data -- relocated to RAM, but written to ROM -	 */ -	.data : { -		__data_start__ = .; -		*(.data)	/* initialized data */ -		. = ALIGN(4); -		__data_end__ = .; -	} >ram AT>rom - -	.bss : { -		__bss_start__ = .; -		*(.bss) -		*(COMMON) -		. = ALIGN(4); -		__bss_end__ = .; -	} >ram - -	PROVIDE(__stack__ = ORIGIN(ram) + LENGTH(ram)); -	PROVIDE(end = .); -} - -ENTRY(start); - - diff --git a/src/stm/altos.ld b/src/stm/altos.ld index d218e992..3106cc3b 100644 --- a/src/stm/altos.ld +++ b/src/stm/altos.ld @@ -16,7 +16,7 @@   */  MEMORY { -	rom (rx) : ORIGIN = 0x08000000, LENGTH = 128K +	rom (rx) : ORIGIN = 0x08001000, LENGTH = 124K  	ram (!w) : ORIGIN = 0x20000000, LENGTH = 15872  	stack (!w) : ORIGIN = 0x20003e00, LENGTH = 512  } @@ -36,9 +36,19 @@ SECTIONS {  		. = ORIGIN(rom) + 0x100; + +		/* Ick. What I want is to specify the +		 * addresses of some global constants so +		 * that I can find them across versions +		 * of the application. I can't figure out +		 * how to make gnu ld do that, so instead +		 * we just load the two files that include +		 * these defines in the right order here and +		 * expect things to 'just work'. Don't change +		 * the contents of those files, ok? +		 */  		ao_romconfig.o(.romconfig*)  		ao_product.o(.romconfig*) -  		*(.text*)	/* Executable code */  		*(.rodata*)	/* Constants */ @@ -46,21 +56,34 @@ SECTIONS {  	.ARM.exidx : {  		*(.ARM.exidx* .gnu.linkonce.armexidx.*) -		__text_end__ = .;  	} > rom +	__text_end__ = .; + +	/* Boot data which must live at the start of ram so that +	 * the application and bootloader share the same addresses. +	 * This must be all uninitialized data +	 */ +	.boot (NOLOAD) : { +		__boot_start__ = .; +		*(.boot) +		. = ALIGN(4); +		__boot_end__ = .; +	} >ram  	/* Data -- relocated to RAM, but written to ROM  	 */ -	.data ORIGIN(ram) : AT (ADDR(.ARM.exidx) + SIZEOF (.ARM.exidx)) { +	.data : {  		__data_start__ = .;  		*(.data)	/* initialized data */ +		. = ALIGN(4);  		__data_end__ = .; -		__bss_start__ = .; -	} >ram +	} >ram AT>rom  	.bss : { +		__bss_start__ = .;  		*(.bss)  		*(COMMON) +		. = ALIGN(4);  		__bss_end__ = .;  	} >ram diff --git a/src/stm/ao_arch.h b/src/stm/ao_arch.h index 27a942f2..cc83eac2 100644 --- a/src/stm/ao_arch.h +++ b/src/stm/ao_arch.h @@ -129,5 +129,10 @@ extern const uint32_t	ao_radio_cal;  void  ao_adc_init(); +#define AO_BOOT_APPLICATION_BASE	((uint32_t *) 0x1000) +#define AO_BOOT_LOADER_BASE		((uint32_t *) 0x0) +#define HAS_BOOT_LOADER			1 +  #endif /* _AO_ARCH_H_ */ + diff --git a/src/stm/ao_boot.h b/src/stm/ao_boot.h index 3e8c50ba..862e8755 100644 --- a/src/stm/ao_boot.h +++ b/src/stm/ao_boot.h @@ -30,4 +30,9 @@ ao_boot_check_chain(void);  void  ao_boot_reboot(uint32_t *base); +static inline void +ao_boot_loader(void) { +	ao_boot_reboot(AO_BOOT_LOADER_BASE); +} +  #endif /* _AO_BOOT_H_ */ diff --git a/src/telegps-v0.1/Makefile b/src/telegps-v0.1/Makefile index aae37660..2c41235b 100644 --- a/src/telegps-v0.1/Makefile +++ b/src/telegps-v0.1/Makefile @@ -33,6 +33,7 @@ INC = \  #STACK_GUARD_DEF=-DHAS_STACK_GUARD=1  ALTOS_SRC = \ +	ao_boot_chain.c \  	ao_interrupt.c \  	ao_product.c \  	ao_romconfig.c \ diff --git a/src/telelco-v0.1/Makefile b/src/telelco-v0.1/Makefile index a4a83d02..24083308 100644 --- a/src/telelco-v0.1/Makefile +++ b/src/telelco-v0.1/Makefile @@ -30,6 +30,7 @@ INC = \  #PROFILE_DEF=-DAO_PROFILE=1  ALTOS_SRC = \ +	ao_boot_chain.c \  	ao_interrupt.c \  	ao_product.c \  	ao_romconfig.c \ diff --git a/src/telemega-v0.1/Makefile b/src/telemega-v0.1/Makefile index 16393ea0..a72d08f2 100644 --- a/src/telemega-v0.1/Makefile +++ b/src/telemega-v0.1/Makefile @@ -45,6 +45,7 @@ INC = \  #STACK_GUARD_DEF=-DHAS_STACK_GUARD=1  ALTOS_SRC = \ +	ao_boot_chain.c \  	ao_interrupt.c \  	ao_product.c \  	ao_romconfig.c \ diff --git a/src/telescience-v0.2/Makefile b/src/telescience-v0.2/Makefile index fbeeb75c..f16ef268 100644 --- a/src/telescience-v0.2/Makefile +++ b/src/telescience-v0.2/Makefile @@ -28,6 +28,7 @@ INC = \  #STACK_GUARD_DEF=-DHAS_STACK_GUARD=1  ALTOS_SRC = \ +	ao_boot_chain.c \  	ao_interrupt.c \  	ao_product.c \  	ao_romconfig.c \ | 
