summaryrefslogtreecommitdiff
path: root/firmware
diff options
context:
space:
mode:
authorAidan MacDonald <amachronic@protonmail.com>2022-12-03 15:55:41 +0000
committerAidan MacDonald <amachronic@protonmail.com>2023-01-12 06:05:55 -0500
commit39439f69094225380af1714e52a5ff145612e70e (patch)
tree1d27bc7c12206a912645d78949c9f4d366fc16f1 /firmware
parent541960a11061213f682d67bb036f861b2605f9d3 (diff)
downloadrockbox-39439f69094225380af1714e52a5ff145612e70e.tar.gz
rockbox-39439f69094225380af1714e52a5ff145612e70e.zip
Add INIT_ATTR to system_init()
On single-core targets, system_init() is only called from init() in main.c, which is also INIT_ATTR, so this is safe. Multi-core targets additionally call system_init() from cop_main(), which isn't marked INIT_ATTR. I'm fairly certain that it would be safe to add INIT_ATTR to cop_main() with a bit of refactoring, but I don't have a way of testing it. So for now, leave INIT_ATTR off for multi-core targets. Change-Id: I8fe4358f975880ca317d46bda01d7d9db529d3e3
Diffstat (limited to 'firmware')
-rw-r--r--firmware/export/system.h6
-rw-r--r--firmware/target/arm/imx31/gigabeat-s/system-gigabeat-s.c2
2 files changed, 7 insertions, 1 deletions
diff --git a/firmware/export/system.h b/firmware/export/system.h
index def3122205..172fe05b6e 100644
--- a/firmware/export/system.h
+++ b/firmware/export/system.h
@@ -31,7 +31,13 @@ extern void system_reboot (void);
31/* Called from any UIE handler and panicf - wait for a key and return 31/* Called from any UIE handler and panicf - wait for a key and return
32 * to reboot system. */ 32 * to reboot system. */
33extern void system_exception_wait(void); 33extern void system_exception_wait(void);
34
35#if NUM_CORES == 1
36extern void system_init(void) INIT_ATTR;
37#else
38/* TODO: probably safe to use INIT_ATTR on multicore but this needs checking */
34extern void system_init(void); 39extern void system_init(void);
40#endif
35 41
36extern long cpu_frequency; 42extern long cpu_frequency;
37 43
diff --git a/firmware/target/arm/imx31/gigabeat-s/system-gigabeat-s.c b/firmware/target/arm/imx31/gigabeat-s/system-gigabeat-s.c
index d7ebeea024..22873bfef0 100644
--- a/firmware/target/arm/imx31/gigabeat-s/system-gigabeat-s.c
+++ b/firmware/target/arm/imx31/gigabeat-s/system-gigabeat-s.c
@@ -199,7 +199,7 @@ void system_exception_wait(void)
199 system_halt(); 199 system_halt();
200} 200}
201 201
202void INIT_ATTR system_init(void) 202void system_init(void)
203{ 203{
204 static const enum IMX31_CG_LIST disable_clocks[] INITDATA_ATTR = 204 static const enum IMX31_CG_LIST disable_clocks[] INITDATA_ATTR =
205 { 205 {