zynqmp_pm_start_rpu(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

πŸ’– NAME πŸ’–

okay so bestie, welcome to zynqmp_pm_start_rpu(9) β€” yes that's the page, yes it's from the Kernel API Manual, and yes it's kinda iconic. This one function does exactly one thing and it does it with main character energy:

zynqmp_pm_start_rpu β€” Boot Real-time Processing Unit (Cortex-R) on SoC πŸ”₯

like. it literally wakes up the RPU. no cap. the Cortex-R core said "i'm up, i'm up" and this call is the reason.


✨ SYNOPSIS ✨

int zynqmp_pm_start_rpu (const u32 node , const u64 bootaddr );

that's the whole vibe πŸ’… two args, one int coming back at you. copy it character for character because we do not freestyle signatures in this house 🫢


πŸŽ€ ARGUMENTS πŸŽ€

  • node β€” the power-domains id of the core 🌸 like, which core are we booting, bestie? that id. this is the one.
  • bootaddr β€” the Boot address of elf πŸ¦‹ the address where the elf gets to start its little life. that's the spot.

πŸ”₯ RETURN πŸ”₯

status, either success or error+reason 😭

so like β€” it works, or it tells you it didn't and why. no silent failures, no ghosting. we love a function with communication skills.


🌈 SEE ALSO 🌈

first up, the kernel file that actually holds this whole saga: ./drivers/firmware/xilinx/zynqmp.c πŸ“

and now the group chat β€” the entire extended fam, all of them (9) pages, none of them skipped, periodt:

struct zynqmp_devinfo(9), struct pm_api_feature_data(9), zynqmp_pm_ret_code(9), do_fw_call_smc(9), do_fw_call_hvc(9), zynqmp_pm_feature(9), zynqmp_pm_is_function_supported(9), zynqmp_pm_invoke_fw_fn(9), zynqmp_pm_invoke_fn(9), zynqmp_pm_get_api_version(9), zynqmp_pm_get_chipid(9), zynqmp_pm_get_family_info(9), zynqmp_pm_get_sip_svc_version(9), zynqmp_pm_get_trustzone_version(9), get_set_conduit_method(9), zynqmp_pm_query_data(9) β€” the whole "who am i and what firmware is this" arc, obsessed πŸ’œ

then the clock girlies: zynqmp_pm_clock_enable(9), zynqmp_pm_clock_disable(9), zynqmp_pm_clock_getstate(9), zynqmp_pm_clock_setdivider(9), zynqmp_pm_clock_getdivider(9), zynqmp_pm_clock_setparent(9), zynqmp_pm_clock_getparent(9), zynqmp_pm_set_pll_frac_mode(9), zynqmp_pm_get_pll_frac_mode(9), zynqmp_pm_set_pll_frac_data(9), zynqmp_pm_get_pll_frac_data(9), zynqmp_pm_set_sd_tapdelay(9), zynqmp_pm_sd_dll_reset(9), zynqmp_pm_ospi_mux_select(9) πŸ•°οΈβœ¨

then the mysterious ones: zynqmp_pm_write_ggs(9), zynqmp_pm_read_ggs(9), zynqmp_pm_write_pggs(9), zynqmp_pm_read_pggs(9), zynqmp_pm_set_boot_health_status(9), zynqmp_pm_reset_assert(9), zynqmp_pm_reset_get_status(9) πŸ’€ (ggs. pggs. iykyk.)

the FPGA crew: zynqmp_pm_fpga_load(9), zynqmp_pm_fpga_get_status(9), zynqmp_pm_fpga_get_config_status(9) 🧚 and the pin people: zynqmp_pm_pinctrl_request(9), zynqmp_pm_pinctrl_release(9), zynqmp_pm_pinctrl_set_function(9), zynqmp_pm_pinctrl_get_config(9), zynqmp_pm_pinctrl_set_config(9) πŸ“

boot + power management besties: zynqmp_pm_bootmode_read(9), zynqmp_pm_bootmode_write(9), zynqmp_pm_init_finalize(9), zynqmp_pm_set_suspend_mode(9), zynqmp_pm_request_node(9), zynqmp_pm_release_node(9), zynqmp_pm_get_rpu_mode(9), zynqmp_pm_set_rpu_mode(9), zynqmp_pm_set_tcm_config(9), zynqmp_pm_get_node_status(9), zynqmp_pm_get_rpu_node_status(9) πŸ‘‘

and the RPU fam this page lowkey belongs to: zynqmp_pm_force_pwrdwn(9), zynqmp_pm_request_wake(9), zynqmp_pm_stop_rpu(9) β€” yeah, stop_rpu is literally the sibling of start_rpu, they're giving sibling energy fr fr πŸ˜­πŸ’–

the rest of the roster, no one left behind: zynqmp_pm_set_requirement(9), zynqmp_pm_load_pdi(9), zynqmp_pm_efuse_access(9), zynqmp_pm_register_notifier(9), zynqmp_pm_system_shutdown(9), zynqmp_pm_set_feature_config(9), zynqmp_pm_get_feature_config(9), zynqmp_pm_sec_read_reg(9), zynqmp_pm_sec_mask_write_reg(9), zynqmp_pm_set_sd_config(9), zynqmp_pm_set_gem_config(9), struct zynqmp_pm_shutdown_scope(9), zynqmp_pm_is_shutdown_scope_valid(9), zynqmp_clear_pm_state(9) ⭐

ngl that's a lot of see-also. but every single one is here, so vibe check passed βœ…

mwah πŸ’‹ okay that's the whole page, bestie β€” go boot that Cortex-R and slay.

this lil masterpiece comes to you from the source tree at ./drivers/firmware/xilinx, dated October 2026, and it lives at zynqmp_pm_start_rpu(9) forever and ever πŸŽ€βœ¨

πŸ“¦ where this page comes from