do_fw_call_smc(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

πŸ’– do_fw_call_smc β€” Kernel API Manual, section 9 πŸŽ€

okay so bestie, welcome to do_fw_call_smc(9) β€” the little kernel function that picks up the phone and calls the system-level platform management layer (that's SMC, and yes, we're obsessed) ✨


🌸 NAME 🌸

do_fw_call_smc β€” Call system-level platform management layer (SMC). that's it. that's the whole vibe. πŸ’…


πŸ¦‹ SYNOPSIS πŸ¦‹

int do_fw_call_smc (u32 *ret_payload , u32 num_args , ... );

look at her. iconic signature. returns an int, periodt.


πŸŽ€ ARGUMENTS πŸŽ€

  • ret_payload β€” the Returned value array πŸ’– this is where the good stuff comes back out.
  • num_args β€” the Number of variable arguments, and lowkey this one should be <= 8. like, that's the rule. don't push her past 8, she's doing her best πŸ™ˆ
  • ... β€” the variable arguments themselves. yeah. the little .... the vibes. 🌈

⭐ DESCRIPTION ⭐

so what does she actually do? she invokes the platform management function via an SMC call β€” and here's the key tea: no hypervisor present 🫢 that's the whole situation. straight to the platform management layer, no middleman.


πŸ‘‘ RETURN πŸ‘‘

Returns status β€” either success, or error+reason πŸ’€ like, she will tell you what went wrong, she's not gonna leave you guessing.

ngl bestie, always check the return value. just saying. that's the entire point of a return value 😭

πŸ”₯ SEE ALSO πŸ”₯

and now the part where I list literally every single thing she's connected to, because every one of these matters and I refuse to skip a single one πŸ’œ

Kernel file ./drivers/firmware/xilinx/zynqmp.c and friends: struct zynqmp_devinfo(9), struct pm_api_feature_data(9), zynqmp_pm_ret_code(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), 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), 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), zynqmp_pm_fpga_load(9), zynqmp_pm_fpga_get_status(9), zynqmp_pm_fpga_get_config_status(9), 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), 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), zynqmp_pm_force_pwrdwn(9), zynqmp_pm_request_wake(9), zynqmp_pm_start_rpu(9), zynqmp_pm_stop_rpu(9), 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)

like. that's the whole friend group. she knows everyone πŸ’…βœ¨


kisses bestie, this page lives in ./drivers/firmware/xilinx, it's the October 2026 edition, and it's filed under do_fw_call_smc(9) β€” go call your platform management layer, but respectfully πŸ«ΆπŸ’–πŸŽ€

πŸ“¦ where this page comes from