From 13a8b19eedb5b9cc931c88b6a5fe29a49c2853db Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Tue, 24 Apr 2012 11:21:46 +0200 Subject: bsp/mpc55xxevb: Change early MMU settings Add internal SRAM sections with cache enabled to early MMU settings. The internal SRAM initialization will use the early MMU settings. This allows applications to use cache inhibited areas in the internal SRAM. --- .../mpc55xxevb/startup/start-config-mmu-early.c | 19 +++++++++++++---- .../powerpc/mpc55xxevb/startup/start-config-mmu.c | 24 +++++++++++----------- .../powerpc/mpc55xxevb/startup/start-early.c | 2 +- 3 files changed, 28 insertions(+), 17 deletions(-) diff --git a/c/src/lib/libbsp/powerpc/mpc55xxevb/startup/start-config-mmu-early.c b/c/src/lib/libbsp/powerpc/mpc55xxevb/startup/start-config-mmu-early.c index d243bee245..406b33b68f 100644 --- a/c/src/lib/libbsp/powerpc/mpc55xxevb/startup/start-config-mmu-early.c +++ b/c/src/lib/libbsp/powerpc/mpc55xxevb/startup/start-config-mmu-early.c @@ -7,7 +7,7 @@ */ /* - * Copyright (c) 2011 embedded brains GmbH. All rights reserved. + * Copyright (c) 2011-2012 embedded brains GmbH. All rights reserved. * * embedded brains GmbH * Obere Lagerstr. 30 @@ -25,14 +25,25 @@ BSP_START_TEXT_SECTION const struct MMU_tag mpc55xx_start_config_mmu_early [] = { -#if MPC55XX_CHIP_TYPE / 10 == 564 +#if MPC55XX_CHIP_TYPE / 10 == 555 + /* Internal SRAM 96k */ + MPC55XX_MMU_TAG_INITIALIZER(3, 0x40000000, MPC55XX_MMU_256K, 1, 1, 1, 0), +#elif MPC55XX_CHIP_TYPE / 10 == 556 + /* Internal SRAM 128k */ + MPC55XX_MMU_TAG_INITIALIZER(3, 0x40000000, MPC55XX_MMU_64K, 1, 1, 1, 0), + MPC55XX_MMU_TAG_INITIALIZER(5, 0x40010000, MPC55XX_MMU_64K, 0, 1, 1, 0), +#elif MPC55XX_CHIP_TYPE / 10 == 564 /* Internal flash 1M */ MPC55XX_MMU_TAG_INITIALIZER(0, 0x00000000, MPC55XX_MMU_1M, 1, 0, 1, 1), /* IO */ MPC55XX_MMU_TAG_INITIALIZER(1, 0xffe00000, MPC55XX_MMU_2M, 0, 1, 1, 1), MPC55XX_MMU_TAG_INITIALIZER(2, 0xc3f00000, MPC55XX_MMU_1M, 0, 1, 1, 1), - /* Internal SRAM 64k */ - MPC55XX_MMU_TAG_INITIALIZER(3, 0x40000000, MPC55XX_MMU_64K, 1, 1, 1, 1) + /* Internal SRAM 64k + 64k */ + MPC55XX_MMU_TAG_INITIALIZER(3, 0x40000000, MPC55XX_MMU_64K, 1, 1, 1, 0), + MPC55XX_MMU_TAG_INITIALIZER(4, 0x50000000, MPC55XX_MMU_64K, 0, 1, 1, 0) +#elif MPC55XX_CHIP_TYPE / 10 == 567 + /* Internal SRAM 256k */ + MPC55XX_MMU_TAG_INITIALIZER(3, 0x40000000, MPC55XX_MMU_256K, 1, 1, 1, 0) #endif }; diff --git a/c/src/lib/libbsp/powerpc/mpc55xxevb/startup/start-config-mmu.c b/c/src/lib/libbsp/powerpc/mpc55xxevb/startup/start-config-mmu.c index d5df9ffbb4..dd79366455 100644 --- a/c/src/lib/libbsp/powerpc/mpc55xxevb/startup/start-config-mmu.c +++ b/c/src/lib/libbsp/powerpc/mpc55xxevb/startup/start-config-mmu.c @@ -7,7 +7,7 @@ */ /* - * Copyright (c) 2008-2011 embedded brains GmbH. All rights reserved. + * Copyright (c) 2008-2012 embedded brains GmbH. All rights reserved. * * embedded brains GmbH * Obere Lagerstr. 30 @@ -86,20 +86,20 @@ BSP_START_TEXT_SECTION const struct MMU_tag #elif defined(MPC55XX_BOARD_MPC5566EVB) /* Internal flash 3M */ MPC55XX_MMU_TAG_INITIALIZER(1, 0x00000000, MPC55XX_MMU_64K, 1, 0, 1, 0), - MPC55XX_MMU_TAG_INITIALIZER(5, 0x00010000, MPC55XX_MMU_64K, 1, 0, 1, 0), - MPC55XX_MMU_TAG_INITIALIZER(6, 0x00020000, MPC55XX_MMU_64K, 1, 0, 1, 0), - MPC55XX_MMU_TAG_INITIALIZER(7, 0x00030000, MPC55XX_MMU_64K, 1, 0, 1, 0), - MPC55XX_MMU_TAG_INITIALIZER(8, 0x00040000, MPC55XX_MMU_256K, 1, 0, 1, 0), - MPC55XX_MMU_TAG_INITIALIZER(9, 0x00080000, MPC55XX_MMU_256K, 1, 0, 1, 0), - MPC55XX_MMU_TAG_INITIALIZER(10, 0x000c0000, MPC55XX_MMU_256K, 1, 0, 1, 0), - MPC55XX_MMU_TAG_INITIALIZER(11, 0x00100000, MPC55XX_MMU_1M, 1, 0, 1, 0), - MPC55XX_MMU_TAG_INITIALIZER(12, 0x00200000, MPC55XX_MMU_1M, 1, 0, 1, 0), + MPC55XX_MMU_TAG_INITIALIZER(6, 0x00010000, MPC55XX_MMU_64K, 1, 0, 1, 0), + MPC55XX_MMU_TAG_INITIALIZER(7, 0x00020000, MPC55XX_MMU_64K, 1, 0, 1, 0), + MPC55XX_MMU_TAG_INITIALIZER(8, 0x00030000, MPC55XX_MMU_64K, 1, 0, 1, 0), + MPC55XX_MMU_TAG_INITIALIZER(9, 0x00040000, MPC55XX_MMU_256K, 1, 0, 1, 0), + MPC55XX_MMU_TAG_INITIALIZER(10, 0x00080000, MPC55XX_MMU_256K, 1, 0, 1, 0), + MPC55XX_MMU_TAG_INITIALIZER(11, 0x000c0000, MPC55XX_MMU_256K, 1, 0, 1, 0), + MPC55XX_MMU_TAG_INITIALIZER(12, 0x00100000, MPC55XX_MMU_1M, 1, 0, 1, 0), + MPC55XX_MMU_TAG_INITIALIZER(13, 0x00200000, MPC55XX_MMU_1M, 1, 0, 1, 0), /* External SRAM 512k */ MPC55XX_MMU_TAG_INITIALIZER(2, 0x20000000, MPC55XX_MMU_256K, 0, 1, 1, 0), - MPC55XX_MMU_TAG_INITIALIZER(13, 0x20040000, MPC55XX_MMU_256K, 0, 1, 1, 0), + MPC55XX_MMU_TAG_INITIALIZER(14, 0x20040000, MPC55XX_MMU_256K, 0, 1, 1, 0), /* Internal SRAM 128k */ - MPC55XX_MMU_TAG_INITIALIZER(3, 0x40010000, MPC55XX_MMU_64K, 0, 1, 1, 0), - MPC55XX_MMU_TAG_INITIALIZER(14, 0x40000000, MPC55XX_MMU_64K, 0, 1, 1, 0), + MPC55XX_MMU_TAG_INITIALIZER(3, 0x40000000, MPC55XX_MMU_64K, 0, 1, 1, 0), + MPC55XX_MMU_TAG_INITIALIZER(5, 0x40010000, MPC55XX_MMU_64K, 0, 1, 1, 0), /* External Ethernet Controller 64k */ MPC55XX_MMU_TAG_INITIALIZER(15, 0x3fff8000, MPC55XX_MMU_64K, 0, 1, 1, 1) #elif defined(MPC55XX_BOARD_MPC5674FEVB) diff --git a/c/src/lib/libbsp/powerpc/mpc55xxevb/startup/start-early.c b/c/src/lib/libbsp/powerpc/mpc55xxevb/startup/start-early.c index 4d0c35da58..62cf8f58d7 100644 --- a/c/src/lib/libbsp/powerpc/mpc55xxevb/startup/start-early.c +++ b/c/src/lib/libbsp/powerpc/mpc55xxevb/startup/start-early.c @@ -166,8 +166,8 @@ BSP_START_TEXT_SECTION void mpc55xx_start_early(void) #if defined(BSP_DATA_CACHE_ENABLED) || defined(BSP_INSTRUCTION_CACHE_ENABLED) mpc55xx_start_cache(); #endif - mpc55xx_start_mmu(); mpc55xx_start_internal_ram(); + mpc55xx_start_mmu(); mpc55xx_start_mode_change(); mpc55xx_start_siu(); mpc55xx_start_ebi_chip_select(); -- cgit v1.2.3 From d101853478993e435d4da854071863ad656a123c Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Tue, 24 Apr 2012 13:34:03 +0200 Subject: bsps/powerpc: Add no cache section --- c/src/lib/libbsp/powerpc/mpc55xxevb/Makefile.am | 1 + c/src/lib/libbsp/powerpc/mpc55xxevb/preinstall.am | 4 +++ .../powerpc/mpc55xxevb/startup/linkcmds.gwlcfm | 27 ++++++-------------- .../powerpc/mpc55xxevb/startup/linkcmds.mpc5566evb | 27 ++++++-------------- .../powerpc/mpc55xxevb/startup/linkcmds.mpc55xx | 13 ++++++++++ .../mpc55xxevb/startup/linkcmds.mpc5674fevb | 27 ++++++-------------- .../mpc55xxevb/startup/linkcmds.phycore_mpc5554 | 29 +++++++--------------- .../powerpc/mpc55xxevb/startup/linkcmds.xkt564levb | 13 +++------- .../powerpc/mpc55xxevb/startup/start-config-mmu.c | 6 ++++- .../powerpc/qoriq/startup/linkcmds.qoriq_core_0 | 1 + .../powerpc/qoriq/startup/linkcmds.qoriq_core_1 | 1 + .../powerpc/qoriq/startup/linkcmds.qoriq_p1020rdb | 1 + .../libbsp/powerpc/shared/include/linker-symbols.h | 8 +++++- .../libbsp/powerpc/shared/startup/linkcmds.base | 9 ++++++- 14 files changed, 78 insertions(+), 89 deletions(-) create mode 100644 c/src/lib/libbsp/powerpc/mpc55xxevb/startup/linkcmds.mpc55xx diff --git a/c/src/lib/libbsp/powerpc/mpc55xxevb/Makefile.am b/c/src/lib/libbsp/powerpc/mpc55xxevb/Makefile.am index 6c751fab11..7adf15e80b 100644 --- a/c/src/lib/libbsp/powerpc/mpc55xxevb/Makefile.am +++ b/c/src/lib/libbsp/powerpc/mpc55xxevb/Makefile.am @@ -25,6 +25,7 @@ project_lib_DATA += rtems_crti.$(OBJEXT) # Link commands project_lib_DATA += startup/linkcmds dist_project_lib_DATA += ../shared/startup/linkcmds.base +dist_project_lib_DATA += startup/linkcmds.mpc55xx dist_project_lib_DATA += startup/linkcmds.gwlcfm dist_project_lib_DATA += startup/linkcmds.mpc5566evb dist_project_lib_DATA += startup/linkcmds.mpc5566evb_spe diff --git a/c/src/lib/libbsp/powerpc/mpc55xxevb/preinstall.am b/c/src/lib/libbsp/powerpc/mpc55xxevb/preinstall.am index 8992081670..ab44e5b39a 100644 --- a/c/src/lib/libbsp/powerpc/mpc55xxevb/preinstall.am +++ b/c/src/lib/libbsp/powerpc/mpc55xxevb/preinstall.am @@ -57,6 +57,10 @@ $(PROJECT_LIB)/linkcmds.base: ../shared/startup/linkcmds.base $(PROJECT_LIB)/$(d $(INSTALL_DATA) $< $(PROJECT_LIB)/linkcmds.base PREINSTALL_FILES += $(PROJECT_LIB)/linkcmds.base +$(PROJECT_LIB)/linkcmds.mpc55xx: startup/linkcmds.mpc55xx $(PROJECT_LIB)/$(dirstamp) + $(INSTALL_DATA) $< $(PROJECT_LIB)/linkcmds.mpc55xx +PREINSTALL_FILES += $(PROJECT_LIB)/linkcmds.mpc55xx + $(PROJECT_LIB)/linkcmds.gwlcfm: startup/linkcmds.gwlcfm $(PROJECT_LIB)/$(dirstamp) $(INSTALL_DATA) $< $(PROJECT_LIB)/linkcmds.gwlcfm PREINSTALL_FILES += $(PROJECT_LIB)/linkcmds.gwlcfm diff --git a/c/src/lib/libbsp/powerpc/mpc55xxevb/startup/linkcmds.gwlcfm b/c/src/lib/libbsp/powerpc/mpc55xxevb/startup/linkcmds.gwlcfm index 2bdf5041d2..4dc5613ec3 100644 --- a/c/src/lib/libbsp/powerpc/mpc55xxevb/startup/linkcmds.gwlcfm +++ b/c/src/lib/libbsp/powerpc/mpc55xxevb/startup/linkcmds.gwlcfm @@ -1,23 +1,11 @@ -MEMORY -{ - ROM (RX) : ORIGIN = 0x0, LENGTH = 1536K - RAM (AIW) : ORIGIN = 0x40000000, LENGTH = 80K - RAM_EXT : ORIGIN = 0x20000000, LENGTH = 512K - NIRVANA : ORIGIN = 0x0, LENGTH = 0 +MEMORY { + ROM : ORIGIN = 0x0, LENGTH = 1536K + RAM : ORIGIN = 0x40000000, LENGTH = 80K + RAM_EXT : ORIGIN = 0x20000000, LENGTH = 512K + NOCACHE : ORIGIN = 0x0, LENGTH = 0 + NIRVANA : ORIGIN = 0x0, LENGTH = 0 } -bsp_ram_start = ORIGIN (RAM); -bsp_ram_end = ORIGIN (RAM) + LENGTH (RAM); -bsp_ram_size = LENGTH (RAM); - -bsp_rom_start = ORIGIN (ROM); -bsp_rom_end = ORIGIN (ROM) + LENGTH (ROM); -bsp_rom_size = LENGTH (ROM); - -bsp_external_ram_start = ORIGIN (RAM_EXT); -bsp_external_ram_end = ORIGIN (RAM_EXT) + LENGTH (RAM_EXT); -bsp_external_ram_size = LENGTH (RAM_EXT); - REGION_ALIAS ("REGION_START", ROM); REGION_ALIAS ("REGION_FAST_TEXT", RAM); REGION_ALIAS ("REGION_FAST_TEXT_LOAD", ROM); @@ -33,5 +21,6 @@ REGION_ALIAS ("REGION_BSS", RAM_EXT); REGION_ALIAS ("REGION_RWEXTRA", RAM_EXT); REGION_ALIAS ("REGION_WORK", RAM_EXT); REGION_ALIAS ("REGION_STACK", RAM_EXT); +REGION_ALIAS ("REGION_NOCACHE", NOCACHE); -INCLUDE linkcmds.base +INCLUDE linkcmds.mpc55xx diff --git a/c/src/lib/libbsp/powerpc/mpc55xxevb/startup/linkcmds.mpc5566evb b/c/src/lib/libbsp/powerpc/mpc55xxevb/startup/linkcmds.mpc5566evb index a8d94784e9..f148ca66ec 100644 --- a/c/src/lib/libbsp/powerpc/mpc55xxevb/startup/linkcmds.mpc5566evb +++ b/c/src/lib/libbsp/powerpc/mpc55xxevb/startup/linkcmds.mpc5566evb @@ -1,23 +1,11 @@ -MEMORY -{ - ROM (RX) : ORIGIN = 0x0, LENGTH = 3M - RAM (AIW) : ORIGIN = 0x40000000, LENGTH = 128K - RAM_EXT : ORIGIN = 0x20000000, LENGTH = 512K - NIRVANA : ORIGIN = 0x0, LENGTH = 0 +MEMORY { + ROM : ORIGIN = 0x0, LENGTH = 3M + RAM : ORIGIN = 0x40000000, LENGTH = 128K + RAM_EXT : ORIGIN = 0x20000000, LENGTH = 512K + NOCACHE : ORIGIN = 0x0, LENGTH = 0 + NIRVANA : ORIGIN = 0x0, LENGTH = 0 } -bsp_ram_start = ORIGIN (RAM); -bsp_ram_end = ORIGIN (RAM) + LENGTH (RAM); -bsp_ram_size = LENGTH (RAM); - -bsp_rom_start = ORIGIN (ROM); -bsp_rom_end = ORIGIN (ROM) + LENGTH (ROM); -bsp_rom_size = LENGTH (ROM); - -bsp_external_ram_start = ORIGIN (RAM_EXT); -bsp_external_ram_end = ORIGIN (RAM_EXT) + LENGTH (RAM_EXT); -bsp_external_ram_size = LENGTH (RAM_EXT); - REGION_ALIAS ("REGION_START", ROM); REGION_ALIAS ("REGION_FAST_TEXT", RAM); REGION_ALIAS ("REGION_FAST_TEXT_LOAD", ROM); @@ -33,5 +21,6 @@ REGION_ALIAS ("REGION_BSS", RAM_EXT); REGION_ALIAS ("REGION_RWEXTRA", RAM_EXT); REGION_ALIAS ("REGION_WORK", RAM_EXT); REGION_ALIAS ("REGION_STACK", RAM_EXT); +REGION_ALIAS ("REGION_NOCACHE", NOCACHE); -INCLUDE linkcmds.base +INCLUDE linkcmds.mpc55xx diff --git a/c/src/lib/libbsp/powerpc/mpc55xxevb/startup/linkcmds.mpc55xx b/c/src/lib/libbsp/powerpc/mpc55xxevb/startup/linkcmds.mpc55xx new file mode 100644 index 0000000000..1bfe8444ae --- /dev/null +++ b/c/src/lib/libbsp/powerpc/mpc55xxevb/startup/linkcmds.mpc55xx @@ -0,0 +1,13 @@ +bsp_ram_start = ORIGIN (RAM); +bsp_ram_size = LENGTH (RAM) + LENGTH (NOCACHE); +bsp_ram_end = bsp_ram_start + bsp_ram_size; + +bsp_rom_start = ORIGIN (ROM); +bsp_rom_size = LENGTH (ROM); +bsp_rom_end = bsp_rom_start + bsp_rom_size; + +bsp_external_ram_start = ORIGIN (RAM_EXT); +bsp_external_ram_size = LENGTH (RAM_EXT); +bsp_external_ram_end = bsp_external_ram_start + bsp_external_ram_size; + +INCLUDE linkcmds.base diff --git a/c/src/lib/libbsp/powerpc/mpc55xxevb/startup/linkcmds.mpc5674fevb b/c/src/lib/libbsp/powerpc/mpc55xxevb/startup/linkcmds.mpc5674fevb index aa4e1db16b..0126bdc93d 100644 --- a/c/src/lib/libbsp/powerpc/mpc55xxevb/startup/linkcmds.mpc5674fevb +++ b/c/src/lib/libbsp/powerpc/mpc55xxevb/startup/linkcmds.mpc5674fevb @@ -1,23 +1,11 @@ -MEMORY -{ - ROM (RX) : ORIGIN = 0x0, LENGTH = 4M - RAM (AIW) : ORIGIN = 0x40000000, LENGTH = 256K - RAM_EXT : ORIGIN = 0x20000000, LENGTH = 512K - NIRVANA : ORIGIN = 0x0, LENGTH = 0 +MEMORY { + ROM : ORIGIN = 0x0, LENGTH = 4M + RAM : ORIGIN = 0x40000000, LENGTH = 256K - 16k + RAM_EXT : ORIGIN = 0x20000000, LENGTH = 512K + NOCACHE : ORIGIN = 0x4003c000, LENGTH = 16k + NIRVANA : ORIGIN = 0x0, LENGTH = 0 } -bsp_ram_start = ORIGIN (RAM); -bsp_ram_end = ORIGIN (RAM) + LENGTH (RAM); -bsp_ram_size = LENGTH (RAM); - -bsp_rom_start = ORIGIN (ROM); -bsp_rom_end = ORIGIN (ROM) + LENGTH (ROM); -bsp_rom_size = LENGTH (ROM); - -bsp_external_ram_start = ORIGIN (RAM_EXT); -bsp_external_ram_end = ORIGIN (RAM_EXT) + LENGTH (RAM_EXT); -bsp_external_ram_size = LENGTH (RAM_EXT); - REGION_ALIAS ("REGION_START", ROM); REGION_ALIAS ("REGION_FAST_TEXT", RAM); REGION_ALIAS ("REGION_FAST_TEXT_LOAD", ROM); @@ -33,5 +21,6 @@ REGION_ALIAS ("REGION_BSS", RAM); REGION_ALIAS ("REGION_RWEXTRA", RAM_EXT); REGION_ALIAS ("REGION_WORK", RAM_EXT); REGION_ALIAS ("REGION_STACK", RAM_EXT); +REGION_ALIAS ("REGION_NOCACHE", NOCACHE); -INCLUDE linkcmds.base +INCLUDE linkcmds.mpc55xx diff --git a/c/src/lib/libbsp/powerpc/mpc55xxevb/startup/linkcmds.phycore_mpc5554 b/c/src/lib/libbsp/powerpc/mpc55xxevb/startup/linkcmds.phycore_mpc5554 index 4b6112e2b3..1e7337cf4e 100644 --- a/c/src/lib/libbsp/powerpc/mpc55xxevb/startup/linkcmds.phycore_mpc5554 +++ b/c/src/lib/libbsp/powerpc/mpc55xxevb/startup/linkcmds.phycore_mpc5554 @@ -2,27 +2,15 @@ * Debug RAM is the top 4MB of external RAM and is swapped with the * FLASH for development. */ -MEMORY -{ - ROM (RX) : ORIGIN = 0x00000000, LENGTH = 2M - RAM (AIW) : ORIGIN = 0x40000000, LENGTH = 64K - RAM_EXT (AIW) : ORIGIN = 0x21000000, LENGTH = 4M - DEBUG_RAM (AIW): ORIGIN = 0x21400000, LENGTH = 4M - NIRVANA : ORIGIN = 0x00000000, LENGTH = 0 +MEMORY { + ROM : ORIGIN = 0x00000000, LENGTH = 2M + RAM : ORIGIN = 0x40000000, LENGTH = 64K + RAM_EXT : ORIGIN = 0x21000000, LENGTH = 4M + DEBUG_RAM : ORIGIN = 0x21400000, LENGTH = 4M + NOCACHE : ORIGIN = 0x0, LENGTH = 0 + NIRVANA : ORIGIN = 0x00000000, LENGTH = 0 } -bsp_ram_start = ORIGIN (RAM); -bsp_ram_end = ORIGIN (RAM) + LENGTH (RAM); -bsp_ram_size = LENGTH (RAM); - -bsp_rom_start = ORIGIN (ROM); -bsp_rom_end = ORIGIN (ROM) + LENGTH (ROM); -bsp_rom_size = LENGTH (ROM); - -bsp_external_ram_start = ORIGIN (RAM_EXT); -bsp_external_ram_end = ORIGIN (RAM_EXT) + LENGTH (RAM_EXT); -bsp_external_ram_size = LENGTH (RAM_EXT); - bsp_debug_ram_start = ORIGIN (DEBUG_RAM); bsp_debug_ram_end = ORIGIN (DEBUG_RAM) + LENGTH (DEBUG_RAM); bsp_debug_ram_size = LENGTH (DEBUG_RAM); @@ -42,5 +30,6 @@ REGION_ALIAS ("REGION_BSS", RAM_EXT); REGION_ALIAS ("REGION_RWEXTRA", RAM_EXT); REGION_ALIAS ("REGION_WORK", RAM_EXT); REGION_ALIAS ("REGION_STACK", RAM_EXT); +REGION_ALIAS ("REGION_NOCACHE", NOCACHE); -INCLUDE linkcmds.base +INCLUDE linkcmds.mpc55xx diff --git a/c/src/lib/libbsp/powerpc/mpc55xxevb/startup/linkcmds.xkt564levb b/c/src/lib/libbsp/powerpc/mpc55xxevb/startup/linkcmds.xkt564levb index 503f52a887..72d3762da3 100644 --- a/c/src/lib/libbsp/powerpc/mpc55xxevb/startup/linkcmds.xkt564levb +++ b/c/src/lib/libbsp/powerpc/mpc55xxevb/startup/linkcmds.xkt564levb @@ -2,21 +2,15 @@ MEMORY { ROM : ORIGIN = 0x0, LENGTH = 1M RAM_0 : ORIGIN = 0x40000000, LENGTH = 64K RAM_1 : ORIGIN = 0x50000000, LENGTH = 64K + RAM_EXT : ORIGIN = 0x0, LENGTH = 0 + NOCACHE : ORIGIN = 0x0, LENGTH = 0 NIRVANA : ORIGIN = 0x0, LENGTH = 0 } -bsp_ram_start = ORIGIN (RAM_0); -bsp_ram_size = LENGTH (RAM_0); -bsp_ram_end = bsp_ram_start + bsp_ram_size; - bsp_ram_1_start = ORIGIN (RAM_1); bsp_ram_1_size = LENGTH (RAM_1); bsp_ram_1_end = bsp_ram_1_start + bsp_ram_1_size; -bsp_rom_start = ORIGIN (ROM); -bsp_rom_size = LENGTH (ROM); -bsp_rom_end = bsp_rom_start + bsp_rom_size; - REGION_ALIAS ("REGION_START", ROM); REGION_ALIAS ("REGION_FAST_TEXT", RAM_0); REGION_ALIAS ("REGION_FAST_TEXT_LOAD", ROM); @@ -32,5 +26,6 @@ REGION_ALIAS ("REGION_BSS", RAM_0); REGION_ALIAS ("REGION_RWEXTRA", RAM_0); REGION_ALIAS ("REGION_WORK", RAM_1); REGION_ALIAS ("REGION_STACK", RAM_1); +REGION_ALIAS ("REGION_NOCACHE", NOCACHE); -INCLUDE linkcmds.base +INCLUDE linkcmds.mpc55xx diff --git a/c/src/lib/libbsp/powerpc/mpc55xxevb/startup/start-config-mmu.c b/c/src/lib/libbsp/powerpc/mpc55xxevb/startup/start-config-mmu.c index dd79366455..4849167b41 100644 --- a/c/src/lib/libbsp/powerpc/mpc55xxevb/startup/start-config-mmu.c +++ b/c/src/lib/libbsp/powerpc/mpc55xxevb/startup/start-config-mmu.c @@ -114,7 +114,11 @@ BSP_START_TEXT_SECTION const struct MMU_tag /* External SRAM 512k */ MPC55XX_MMU_TAG_INITIALIZER(2, 0x20000000, MPC55XX_MMU_512K, 0, 1, 1, 0), /* Internal SRAM 256k */ - MPC55XX_MMU_TAG_INITIALIZER(3, 0x40000000, MPC55XX_MMU_256K, 0, 1, 1, 0), + MPC55XX_MMU_TAG_INITIALIZER(3, 0x40000000, MPC55XX_MMU_128K, 0, 1, 1, 0), + MPC55XX_MMU_TAG_INITIALIZER(11, 0x40020000, MPC55XX_MMU_64K, 0, 1, 1, 0), + MPC55XX_MMU_TAG_INITIALIZER(12, 0x40030000, MPC55XX_MMU_32K, 0, 1, 1, 0), + MPC55XX_MMU_TAG_INITIALIZER(13, 0x40038000, MPC55XX_MMU_16K, 0, 1, 1, 0), + MPC55XX_MMU_TAG_INITIALIZER(14, 0x4003c000, MPC55XX_MMU_16K, 0, 1, 1, 1), /* External Ethernet controller */ MPC55XX_MMU_TAG_INITIALIZER(15, 0x3fff8000, MPC55XX_MMU_64K, 0, 1, 1, 1) #elif MPC55XX_CHIP_TYPE / 10 == 564 diff --git a/c/src/lib/libbsp/powerpc/qoriq/startup/linkcmds.qoriq_core_0 b/c/src/lib/libbsp/powerpc/qoriq/startup/linkcmds.qoriq_core_0 index 4d2c130860..7940cd46f0 100644 --- a/c/src/lib/libbsp/powerpc/qoriq/startup/linkcmds.qoriq_core_0 +++ b/c/src/lib/libbsp/powerpc/qoriq/startup/linkcmds.qoriq_core_0 @@ -25,6 +25,7 @@ REGION_ALIAS ("REGION_BSS", HIGH); REGION_ALIAS ("REGION_RWEXTRA", HIGH); REGION_ALIAS ("REGION_WORK", HIGH); REGION_ALIAS ("REGION_STACK", HIGH); +REGION_ALIAS ("REGION_NOCACHE", HIGH); bsp_section_robarrier_align = 0x1000000; bsp_section_rwbarrier_align = 0x1000000; diff --git a/c/src/lib/libbsp/powerpc/qoriq/startup/linkcmds.qoriq_core_1 b/c/src/lib/libbsp/powerpc/qoriq/startup/linkcmds.qoriq_core_1 index 4d38dc6e8c..b9001a7054 100644 --- a/c/src/lib/libbsp/powerpc/qoriq/startup/linkcmds.qoriq_core_1 +++ b/c/src/lib/libbsp/powerpc/qoriq/startup/linkcmds.qoriq_core_1 @@ -24,6 +24,7 @@ REGION_ALIAS ("REGION_BSS", RAM); REGION_ALIAS ("REGION_RWEXTRA", RAM); REGION_ALIAS ("REGION_WORK", RAM); REGION_ALIAS ("REGION_STACK", RAM); +REGION_ALIAS ("REGION_NOCACHE", RAM); bsp_section_robarrier_align = 0x1000000; bsp_section_rwbarrier_align = 0x1000000; diff --git a/c/src/lib/libbsp/powerpc/qoriq/startup/linkcmds.qoriq_p1020rdb b/c/src/lib/libbsp/powerpc/qoriq/startup/linkcmds.qoriq_p1020rdb index 2ee00584cf..6e73fec23b 100644 --- a/c/src/lib/libbsp/powerpc/qoriq/startup/linkcmds.qoriq_p1020rdb +++ b/c/src/lib/libbsp/powerpc/qoriq/startup/linkcmds.qoriq_p1020rdb @@ -25,6 +25,7 @@ REGION_ALIAS ("REGION_BSS", HIGH); REGION_ALIAS ("REGION_RWEXTRA", HIGH); REGION_ALIAS ("REGION_WORK", HIGH); REGION_ALIAS ("REGION_STACK", HIGH); +REGION_ALIAS ("REGION_NOCACHE", HIGH); bsp_section_robarrier_align = 0x1000000; bsp_section_rwbarrier_align = 0x1000000; diff --git a/c/src/lib/libbsp/powerpc/shared/include/linker-symbols.h b/c/src/lib/libbsp/powerpc/shared/include/linker-symbols.h index 67f0aefc51..c5b51559e7 100644 --- a/c/src/lib/libbsp/powerpc/shared/include/linker-symbols.h +++ b/c/src/lib/libbsp/powerpc/shared/include/linker-symbols.h @@ -7,7 +7,7 @@ */ /* - * Copyright (c) 2010 embedded brains GmbH. All rights reserved. + * Copyright (c) 2010-2012 embedded brains GmbH. All rights reserved. * * embedded brains GmbH * Obere Lagerstr. 30 @@ -95,10 +95,16 @@ LINKER_SYMBOL(bsp_section_stack_begin) LINKER_SYMBOL(bsp_section_stack_end) LINKER_SYMBOL(bsp_section_stack_size) +LINKER_SYMBOL(bsp_section_nocache_begin) +LINKER_SYMBOL(bsp_section_nocache_end) +LINKER_SYMBOL(bsp_section_nocache_size) + #define BSP_FAST_TEXT_SECTION __attribute__((section(".bsp_fast_text"))) #define BSP_FAST_DATA_SECTION __attribute__((section(".bsp_fast_data"))) +#define BSP_NOCACHE_SECTION __attribute__((section(".bsp_nocache"))) + /** @} */ #ifdef __cplusplus diff --git a/c/src/lib/libbsp/powerpc/shared/startup/linkcmds.base b/c/src/lib/libbsp/powerpc/shared/startup/linkcmds.base index 25fc1dcd39..24cee144f4 100644 --- a/c/src/lib/libbsp/powerpc/shared/startup/linkcmds.base +++ b/c/src/lib/libbsp/powerpc/shared/startup/linkcmds.base @@ -7,7 +7,7 @@ */ /* - * Copyright (c) 2011 embedded brains GmbH. All rights reserved. + * Copyright (c) 2011-2012 embedded brains GmbH. All rights reserved. * * embedded brains GmbH * Obere Lagerstr. 30 @@ -324,6 +324,13 @@ SECTIONS { } > REGION_STACK AT > REGION_STACK bsp_section_stack_size = bsp_section_stack_end - bsp_section_stack_begin; + .nocache : { + bsp_section_nocache_begin = .; + *(.bsp_nocache) + bsp_section_nocache_end = .; + } > REGION_NOCACHE AT > REGION_NOCACHE + bsp_section_nocache_size = bsp_section_nocache_end - bsp_section_nocache_begin; + /* FIXME */ RamBase = ORIGIN (REGION_WORK); RamSize = LENGTH (REGION_WORK); -- cgit v1.2.3 From 3c6d7ae543ec3831234d41f8e2d3d8f5315e4e57 Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Tue, 24 Apr 2012 14:00:54 +0200 Subject: bsps/stackalloc: Use stack section symbols --- c/src/lib/libbsp/arm/lpc24xx/configure.ac | 4 ---- c/src/lib/libbsp/arm/lpc24xx/startup/bspstart.c | 9 --------- c/src/lib/libbsp/arm/lpc32xx/startup/bspstart.c | 19 +++++++---------- c/src/lib/libbsp/shared/include/stackalloc.h | 22 +++++++------------- c/src/lib/libbsp/shared/src/stackalloc.c | 27 +++++++++++-------------- 5 files changed, 26 insertions(+), 55 deletions(-) diff --git a/c/src/lib/libbsp/arm/lpc24xx/configure.ac b/c/src/lib/libbsp/arm/lpc24xx/configure.ac index e2d23bca35..9bdfc4c717 100644 --- a/c/src/lib/libbsp/arm/lpc24xx/configure.ac +++ b/c/src/lib/libbsp/arm/lpc24xx/configure.ac @@ -77,10 +77,6 @@ RTEMS_BSPOPTS_HELP([LPC24XX_EMC_SST39VF3201],[enable SST39VF3201 configuration f RTEMS_BSPOPTS_SET([LPC24XX_EMC_TEST],[*],[]) RTEMS_BSPOPTS_HELP([LPC24XX_EMC_TEST],[enable tests for EMC]) -RTEMS_BSPOPTS_SET([LPC24XX_SPECIAL_TASK_STACKS_SUPPORT],[lpc23*],[]) -RTEMS_BSPOPTS_SET([LPC24XX_SPECIAL_TASK_STACKS_SUPPORT],[*],[1]) -RTEMS_BSPOPTS_HELP([LPC24XX_SPECIAL_TASK_STACKS_SUPPORT],[enable special task stack support for task stacks in internal RAM]) - RTEMS_BSPOPTS_SET([LPC24XX_CONFIG_CONSOLE],[*],[0]) RTEMS_BSPOPTS_HELP([LPC24XX_CONFIG_CONSOLE],[configuration for console (UART 0)]) diff --git a/c/src/lib/libbsp/arm/lpc24xx/startup/bspstart.c b/c/src/lib/libbsp/arm/lpc24xx/startup/bspstart.c index 905336b4aa..a68e6b8f4c 100644 --- a/c/src/lib/libbsp/arm/lpc24xx/startup/bspstart.c +++ b/c/src/lib/libbsp/arm/lpc24xx/startup/bspstart.c @@ -28,7 +28,6 @@ #include #include #include -#include #include #include @@ -94,12 +93,4 @@ void bsp_start(void) /* DMA */ lpc24xx_dma_initialize(); - - /* Task stacks */ - #ifdef LPC24XX_SPECIAL_TASK_STACKS_SUPPORT - bsp_stack_initialize( - bsp_section_stack_begin, - (uintptr_t) bsp_section_stack_size - ); - #endif } diff --git a/c/src/lib/libbsp/arm/lpc32xx/startup/bspstart.c b/c/src/lib/libbsp/arm/lpc32xx/startup/bspstart.c index c685e27146..ec900a518f 100644 --- a/c/src/lib/libbsp/arm/lpc32xx/startup/bspstart.c +++ b/c/src/lib/libbsp/arm/lpc32xx/startup/bspstart.c @@ -7,12 +7,13 @@ */ /* - * Copyright (c) 2009, 2010 - * embedded brains GmbH - * Obere Lagerstr. 30 - * D-82178 Puchheim - * Germany - * + * Copyright (c) 2009-2012 embedded brains GmbH. All rights reserved. + * + * embedded brains GmbH + * Obere Lagerstr. 30 + * 82178 Puchheim + * Germany + * * * The license and distribution terms for this file may be * found in the file LICENSE in this distribution or at @@ -24,7 +25,6 @@ #include #include #include -#include #include void bsp_start(void) @@ -32,9 +32,4 @@ void bsp_start(void) if (bsp_interrupt_initialize() != RTEMS_SUCCESSFUL) { _CPU_Fatal_halt(0xe); } - - bsp_stack_initialize( - bsp_section_stack_begin, - (uintptr_t) bsp_section_stack_size - ); } diff --git a/c/src/lib/libbsp/shared/include/stackalloc.h b/c/src/lib/libbsp/shared/include/stackalloc.h index 9462ed5f2a..b8516ef85f 100644 --- a/c/src/lib/libbsp/shared/include/stackalloc.h +++ b/c/src/lib/libbsp/shared/include/stackalloc.h @@ -7,12 +7,13 @@ */ /* - * Copyright (c) 2009 - * embedded brains GmbH - * Obere Lagerstr. 30 - * D-82178 Puchheim - * Germany - * rtems@embedded-brains.de + * Copyright (c) 2009-2012 embedded brains GmbH. All rights reserved. + * + * embedded brains GmbH + * Obere Lagerstr. 30 + * 82178 Puchheim + * Germany + * * * The license and distribution terms for this file may be * found in the file LICENSE in this distribution or at @@ -50,15 +51,6 @@ extern "C" { * @{ */ -/** - * @brief Task stack management initialization. - * - * This function should be called in bsp_start() with the designated task stack - * area begin address @a begin and task stack area size @a size in bytes. The - * area boundaries have to be aligned properly. - */ -void bsp_stack_initialize(void *begin, uintptr_t size); - /** * @brief Task stack allocator for @ref CONFIGURE_TASK_STACK_ALLOCATOR. * diff --git a/c/src/lib/libbsp/shared/src/stackalloc.c b/c/src/lib/libbsp/shared/src/stackalloc.c index e6145d5873..be84057aae 100644 --- a/c/src/lib/libbsp/shared/src/stackalloc.c +++ b/c/src/lib/libbsp/shared/src/stackalloc.c @@ -7,22 +7,25 @@ */ /* - * Copyright (c) 2009 - * embedded brains GmbH - * Obere Lagerstr. 30 - * D-82178 Puchheim - * Germany - * rtems@embedded-brains.de + * Copyright (c) 2009-2012 embedded brains GmbH. All rights reserved. + * + * embedded brains GmbH + * Obere Lagerstr. 30 + * 82178 Puchheim + * Germany + * * * The license and distribution terms for this file may be * found in the file LICENSE in this distribution or at * http://www.rtems.com/license/LICENSE. */ +#include + #include #include -#include +#include #define BSP_STACK_MAGIC 0xdeadbeef @@ -30,12 +33,6 @@ static Heap_Control bsp_stack_heap = { .page_size = BSP_STACK_MAGIC }; -void bsp_stack_initialize(void *begin, uintptr_t size) -{ - bsp_stack_heap.area_begin = (uintptr_t) begin; - bsp_stack_heap.area_end = size; -} - void *bsp_stack_allocate(size_t size) { void *stack = NULL; @@ -43,8 +40,8 @@ void *bsp_stack_allocate(size_t size) if (bsp_stack_heap.page_size == BSP_STACK_MAGIC) { uintptr_t rv = _Heap_Initialize( &bsp_stack_heap, - (void *) bsp_stack_heap.area_begin, - bsp_stack_heap.area_end, + bsp_section_stack_begin, + (uintptr_t) bsp_section_stack_size, CPU_STACK_ALIGNMENT ); if (rv == 0) { -- cgit v1.2.3 From 05a20c1f79baf0e23adef2a5d0497d12b4daefd7 Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Tue, 24 Apr 2012 14:03:09 +0200 Subject: bsp/mpc55xxevb: Enable stack allocator --- c/src/lib/libbsp/powerpc/mpc55xxevb/Makefile.am | 2 ++ c/src/lib/libbsp/powerpc/mpc55xxevb/preinstall.am | 4 ++++ c/src/lib/libbsp/powerpc/mpc55xxevb/startup/linkcmds.gwlcfm | 2 +- c/src/lib/libbsp/powerpc/mpc55xxevb/startup/linkcmds.mpc5566evb | 2 +- c/src/lib/libbsp/powerpc/mpc55xxevb/startup/linkcmds.mpc5674fevb | 2 +- c/src/lib/libbsp/powerpc/mpc55xxevb/startup/linkcmds.phycore_mpc5554 | 2 +- 6 files changed, 10 insertions(+), 4 deletions(-) diff --git a/c/src/lib/libbsp/powerpc/mpc55xxevb/Makefile.am b/c/src/lib/libbsp/powerpc/mpc55xxevb/Makefile.am index 7adf15e80b..9e55382290 100644 --- a/c/src/lib/libbsp/powerpc/mpc55xxevb/Makefile.am +++ b/c/src/lib/libbsp/powerpc/mpc55xxevb/Makefile.am @@ -47,6 +47,7 @@ include_bsp_HEADERS = include_bsp_HEADERS += ../../../libcpu/powerpc/mpc83xx/i2c/mpc83xx_i2cdrv.h include_bsp_HEADERS += ../../shared/include/irq-generic.h include_bsp_HEADERS += ../../shared/include/irq-info.h +include_bsp_HEADERS += ../../shared/include/stackalloc.h include_bsp_HEADERS += ../../shared/include/utility.h include_bsp_HEADERS += ../shared/include/linker-symbols.h include_bsp_HEADERS += ../shared/include/start.h @@ -65,6 +66,7 @@ libbsp_a_SOURCES += ../../shared/bsplibc.c libbsp_a_SOURCES += ../../shared/bsppost.c libbsp_a_SOURCES += ../../shared/bsppredriverhook.c libbsp_a_SOURCES += ../../shared/bspgetworkarea.c +libbsp_a_SOURCES += ../../shared/src/stackalloc.c libbsp_a_SOURCES += ../shared/src/bsp-start-zero.S libbsp_a_SOURCES += ../shared/src/memcpy.c libbsp_a_SOURCES += ../shared/src/tictac.c diff --git a/c/src/lib/libbsp/powerpc/mpc55xxevb/preinstall.am b/c/src/lib/libbsp/powerpc/mpc55xxevb/preinstall.am index ab44e5b39a..4848b18fbf 100644 --- a/c/src/lib/libbsp/powerpc/mpc55xxevb/preinstall.am +++ b/c/src/lib/libbsp/powerpc/mpc55xxevb/preinstall.am @@ -121,6 +121,10 @@ $(PROJECT_INCLUDE)/bsp/irq-info.h: ../../shared/include/irq-info.h $(PROJECT_INC $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/bsp/irq-info.h PREINSTALL_FILES += $(PROJECT_INCLUDE)/bsp/irq-info.h +$(PROJECT_INCLUDE)/bsp/stackalloc.h: ../../shared/include/stackalloc.h $(PROJECT_INCLUDE)/bsp/$(dirstamp) + $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/bsp/stackalloc.h +PREINSTALL_FILES += $(PROJECT_INCLUDE)/bsp/stackalloc.h + $(PROJECT_INCLUDE)/bsp/utility.h: ../../shared/include/utility.h $(PROJECT_INCLUDE)/bsp/$(dirstamp) $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/bsp/utility.h PREINSTALL_FILES += $(PROJECT_INCLUDE)/bsp/utility.h diff --git a/c/src/lib/libbsp/powerpc/mpc55xxevb/startup/linkcmds.gwlcfm b/c/src/lib/libbsp/powerpc/mpc55xxevb/startup/linkcmds.gwlcfm index 4dc5613ec3..42e6bb2aca 100644 --- a/c/src/lib/libbsp/powerpc/mpc55xxevb/startup/linkcmds.gwlcfm +++ b/c/src/lib/libbsp/powerpc/mpc55xxevb/startup/linkcmds.gwlcfm @@ -20,7 +20,7 @@ REGION_ALIAS ("REGION_DATA_LOAD", ROM); REGION_ALIAS ("REGION_BSS", RAM_EXT); REGION_ALIAS ("REGION_RWEXTRA", RAM_EXT); REGION_ALIAS ("REGION_WORK", RAM_EXT); -REGION_ALIAS ("REGION_STACK", RAM_EXT); +REGION_ALIAS ("REGION_STACK", RAM); REGION_ALIAS ("REGION_NOCACHE", NOCACHE); INCLUDE linkcmds.mpc55xx diff --git a/c/src/lib/libbsp/powerpc/mpc55xxevb/startup/linkcmds.mpc5566evb b/c/src/lib/libbsp/powerpc/mpc55xxevb/startup/linkcmds.mpc5566evb index f148ca66ec..c8bbb59d58 100644 --- a/c/src/lib/libbsp/powerpc/mpc55xxevb/startup/linkcmds.mpc5566evb +++ b/c/src/lib/libbsp/powerpc/mpc55xxevb/startup/linkcmds.mpc5566evb @@ -20,7 +20,7 @@ REGION_ALIAS ("REGION_DATA_LOAD", ROM); REGION_ALIAS ("REGION_BSS", RAM_EXT); REGION_ALIAS ("REGION_RWEXTRA", RAM_EXT); REGION_ALIAS ("REGION_WORK", RAM_EXT); -REGION_ALIAS ("REGION_STACK", RAM_EXT); +REGION_ALIAS ("REGION_STACK", RAM); REGION_ALIAS ("REGION_NOCACHE", NOCACHE); INCLUDE linkcmds.mpc55xx diff --git a/c/src/lib/libbsp/powerpc/mpc55xxevb/startup/linkcmds.mpc5674fevb b/c/src/lib/libbsp/powerpc/mpc55xxevb/startup/linkcmds.mpc5674fevb index 0126bdc93d..49362b8979 100644 --- a/c/src/lib/libbsp/powerpc/mpc55xxevb/startup/linkcmds.mpc5674fevb +++ b/c/src/lib/libbsp/powerpc/mpc55xxevb/startup/linkcmds.mpc5674fevb @@ -20,7 +20,7 @@ REGION_ALIAS ("REGION_DATA_LOAD", ROM); REGION_ALIAS ("REGION_BSS", RAM); REGION_ALIAS ("REGION_RWEXTRA", RAM_EXT); REGION_ALIAS ("REGION_WORK", RAM_EXT); -REGION_ALIAS ("REGION_STACK", RAM_EXT); +REGION_ALIAS ("REGION_STACK", RAM); REGION_ALIAS ("REGION_NOCACHE", NOCACHE); INCLUDE linkcmds.mpc55xx diff --git a/c/src/lib/libbsp/powerpc/mpc55xxevb/startup/linkcmds.phycore_mpc5554 b/c/src/lib/libbsp/powerpc/mpc55xxevb/startup/linkcmds.phycore_mpc5554 index 1e7337cf4e..450193b9bf 100644 --- a/c/src/lib/libbsp/powerpc/mpc55xxevb/startup/linkcmds.phycore_mpc5554 +++ b/c/src/lib/libbsp/powerpc/mpc55xxevb/startup/linkcmds.phycore_mpc5554 @@ -29,7 +29,7 @@ REGION_ALIAS ("REGION_DATA_LOAD", ROM); REGION_ALIAS ("REGION_BSS", RAM_EXT); REGION_ALIAS ("REGION_RWEXTRA", RAM_EXT); REGION_ALIAS ("REGION_WORK", RAM_EXT); -REGION_ALIAS ("REGION_STACK", RAM_EXT); +REGION_ALIAS ("REGION_STACK", RAM); REGION_ALIAS ("REGION_NOCACHE", NOCACHE); INCLUDE linkcmds.mpc55xx -- cgit v1.2.3