diff options
author | Aidan MacDonald <amachronic@protonmail.com> | 2022-12-03 15:55:41 +0000 |
---|---|---|
committer | Aidan MacDonald <amachronic@protonmail.com> | 2023-01-12 06:05:55 -0500 |
commit | 39439f69094225380af1714e52a5ff145612e70e (patch) | |
tree | 1d27bc7c12206a912645d78949c9f4d366fc16f1 | |
parent | 541960a11061213f682d67bb036f861b2605f9d3 (diff) | |
download | rockbox-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
-rw-r--r-- | firmware/export/system.h | 6 | ||||
-rw-r--r-- | firmware/target/arm/imx31/gigabeat-s/system-gigabeat-s.c | 2 |
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. */ |
33 | extern void system_exception_wait(void); | 33 | extern void system_exception_wait(void); |
34 | |||
35 | #if NUM_CORES == 1 | ||
36 | extern void system_init(void) INIT_ATTR; | ||
37 | #else | ||
38 | /* TODO: probably safe to use INIT_ATTR on multicore but this needs checking */ | ||
34 | extern void system_init(void); | 39 | extern void system_init(void); |
40 | #endif | ||
35 | 41 | ||
36 | extern long cpu_frequency; | 42 | extern 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 | ||
202 | void INIT_ATTR system_init(void) | 202 | void 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 | { |