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/tms570/start/tms570-pom.c | |
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 '')
-rw-r--r-- | bsps/arm/tms570/start/tms570-pom.c | 12 |
1 files changed, 10 insertions, 2 deletions
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 { |