diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2023-04-03 08:11:49 +0200 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2023-12-06 14:27:48 +0100 |
commit | 05a4c70aa90aff30788f8081037ed977b8a94144 (patch) | |
tree | f8273a3c12856a0faf293dc409914f01202eb708 /bsps/arm | |
parent | bsp/tms570: Adjust BSP_OSCILATOR_CLOCK (diff) | |
download | rtems-05a4c70aa90aff30788f8081037ed977b8a94144.tar.bz2 |
bsp/tms570: Improve POM handling
Place the vector table in the start section so that the overlay can be
avoided if we execute from internal flash. The problem is that when the
POM is enabled, the ECC cannot be enabled for the internal flash.
Diffstat (limited to 'bsps/arm')
5 files changed, 14 insertions, 2 deletions
diff --git a/bsps/arm/tms570/start/linkcmds.tms570ls3137_hdk b/bsps/arm/tms570/start/linkcmds.tms570ls3137_hdk index ca68617231..ce23803fa3 100644 --- a/bsps/arm/tms570/start/linkcmds.tms570ls3137_hdk +++ b/bsps/arm/tms570/start/linkcmds.tms570ls3137_hdk @@ -24,6 +24,7 @@ REGION_ALIAS ("REGION_STACK", RAM_INT); REGION_ALIAS ("REGION_NOCACHE", RAM_INT); REGION_ALIAS ("REGION_NOCACHE_LOAD", RAM_INT); +bsp_vector_table_in_start_section = 1; bsp_int_vec_overlay_start = ORIGIN(RAM_INT_VEC); INCLUDE linkcmds.armv4 diff --git a/bsps/arm/tms570/start/linkcmds.tms570ls3137_hdk_intram b/bsps/arm/tms570/start/linkcmds.tms570ls3137_hdk_intram index ca216204dc..c5f2d1cfaf 100644 --- a/bsps/arm/tms570/start/linkcmds.tms570ls3137_hdk_intram +++ b/bsps/arm/tms570/start/linkcmds.tms570ls3137_hdk_intram @@ -24,6 +24,7 @@ REGION_ALIAS ("REGION_STACK", RAM_INT); REGION_ALIAS ("REGION_NOCACHE", RAM_INT); REGION_ALIAS ("REGION_NOCACHE_LOAD", RAM_INT); +bsp_vector_table_in_start_section = 1; bsp_int_vec_overlay_start = ORIGIN(RAM_INT_VEC); INCLUDE linkcmds.armv4 diff --git a/bsps/arm/tms570/start/linkcmds.tms570ls3137_hdk_sdram b/bsps/arm/tms570/start/linkcmds.tms570ls3137_hdk_sdram index d2b924395f..fa8365bad1 100644 --- a/bsps/arm/tms570/start/linkcmds.tms570ls3137_hdk_sdram +++ b/bsps/arm/tms570/start/linkcmds.tms570ls3137_hdk_sdram @@ -24,6 +24,7 @@ REGION_ALIAS ("REGION_STACK", RAM_EXT); REGION_ALIAS ("REGION_NOCACHE", RAM_EXT); REGION_ALIAS ("REGION_NOCACHE_LOAD", RAM_EXT); +bsp_vector_table_in_start_section = 1; bsp_int_vec_overlay_start = ORIGIN(RAM_INT_VEC); INCLUDE linkcmds.armv4 diff --git a/bsps/arm/tms570/start/linkcmds.tms570ls3137_hdk_with_loader b/bsps/arm/tms570/start/linkcmds.tms570ls3137_hdk_with_loader index aa0000379d..86b602b1f1 100644 --- a/bsps/arm/tms570/start/linkcmds.tms570ls3137_hdk_with_loader +++ b/bsps/arm/tms570/start/linkcmds.tms570ls3137_hdk_with_loader @@ -25,6 +25,7 @@ REGION_ALIAS ("REGION_STACK", RAM_INT); REGION_ALIAS ("REGION_NOCACHE", RAM_INT); REGION_ALIAS ("REGION_NOCACHE_LOAD", RAM_INT); +bsp_vector_table_in_start_section = 1; bsp_int_vec_overlay_start = ORIGIN(RAM_INT_VEC); INCLUDE linkcmds.armv4 diff --git a/bsps/arm/tms570/start/tms570-pom.c b/bsps/arm/tms570/start/tms570-pom.c index 8f31d01b77..1dc12f8607 100644 --- a/bsps/arm/tms570/start/tms570-pom.c +++ b/bsps/arm/tms570/start/tms570-pom.c @@ -87,7 +87,12 @@ void tms570_initialize_and_clear(void) */ void tms570_pom_remap(void) { - uint32_t vec_overlay_start = pom_global_overlay_target_address_start; + void *vec_overlay_start = (void *) pom_global_overlay_target_address_start; + void *addr_tab = (char *) bsp_start_vector_table_begin + 64; + + if (vec_overlay_start == addr_tab) { + return; + } /* * Copy RTEMS the first level exception processing code @@ -99,7 +104,10 @@ void tms570_pom_remap(void) * table found in * c/src/lib/libbsp/arm/shared/start/start.S */ - memcpy((void*)vec_overlay_start, bsp_start_vector_table_begin, 64); + rtems_cache_invalidate_multiple_data_lines(addr_tab, 64); + memcpy(vec_overlay_start, addr_tab, 64); + rtems_cache_flush_multiple_data_lines(vec_overlay_start, 64); + rtems_cache_invalidate_multiple_instruction_lines(vec_overlay_start, 64); #if 0 { |