Skip to content

soc: ambiq: adjust init process #90909

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion soc/ambiq/apollo5x/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ config SOC_SERIES_APOLLO5X
select AMBIQ_HAL
select HAS_PM
select SOC_EARLY_INIT_HOOK
select REQUIRES_FULL_LIBC
select FPU

config SOC_AMBIQ_DCACHE_SIZE
int
Expand Down
45 changes: 26 additions & 19 deletions soc/ambiq/apollo5x/soc.c
Original file line number Diff line number Diff line change
Expand Up @@ -38,25 +38,6 @@ void soc_early_init_hook(void)

/* Internal timer15 for SPOT manager */
IRQ_CONNECT(82, 0, hal_internal_timer_isr, 0, 0);

/* Initialize for low power in the power control block */
am_hal_pwrctrl_low_power_init();

/* Enable SIMOBUCK for the apollo5 Family */
am_hal_pwrctrl_control(AM_HAL_PWRCTRL_CONTROL_SIMOBUCK_INIT, NULL);

/*
* Set default temperature for spotmgr to room temperature
*/
am_hal_pwrctrl_temp_thresh_t dummy;

am_hal_pwrctrl_temp_update(25.0f, &dummy);

/* Enable Icache*/
sys_cache_instr_enable();

/* Enable Dcache */
sys_cache_data_enable();
}

#if CONFIG_CACHE_MANAGEMENT
Expand Down Expand Up @@ -84,3 +65,29 @@ bool buf_in_nocache(uintptr_t buf, size_t len_bytes)
return buf_within_nocache;
}
#endif

int apollo5x_init(void)
{
/* Initialize for low power in the power control block */
am_hal_pwrctrl_low_power_init();

/* Enable SIMOBUCK for the apollo5 Family */
am_hal_pwrctrl_control(AM_HAL_PWRCTRL_CONTROL_SIMOBUCK_INIT, NULL);

/*
* Set default temperature for spotmgr to room temperature
*/
am_hal_pwrctrl_temp_thresh_t dummy;

am_hal_pwrctrl_temp_update(25.0f, &dummy);

/* Enable Icache*/
sys_cache_instr_enable();

/* Enable Dcache */
sys_cache_data_enable();

return 0;
}

SYS_INIT(apollo5x_init, PRE_KERNEL_1, 0);
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

use soc hooks

Copy link
Collaborator Author

@swift-tk swift-tk Jun 4, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is another attempt to try fix #90777 as we have too much stuff be putting into early init hook. There seems to be no other way as modifying thread.c or simply making the dummy bigger is not the way to go…

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Too much stuff how? This goes against the idea of what soc hooks were introduced for @nashif

Copy link
Collaborator Author

@swift-tk swift-tk Jun 4, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Too much stuff how? This goes against the idea of what soc hooks were introduced for @nashif

Our low power init function and its calling functions occupy too much ROM space, it gets to the point that the literals used by the ldr instruction in thread.c gets pushed too far away from its caller. Then the offset out of range error is emitted.

I think it is also inappropriate to run large amount of code in the early init hook. @nashif Is this correct?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

no, you can do pretty much whatever you want in the hooks as long you have the right dependencies in place.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

no, you can do pretty much whatever you want in the hooks as long you have the right dependencies in place.

okay, then can we split it for now, in order to get around the build failure… We don’t have a lot of choice here.. and it is blocking all our PR for apollo5 platform.

Loading