diff options
author | Moteen Shah <m-shah@ti.com> | 2025-06-09 13:44:31 +0530 |
---|---|---|
committer | Tom Rini <trini@konsulko.com> | 2025-06-18 12:20:25 -0600 |
commit | e1252194b622284ed941c83e55a2277c061e5a95 (patch) | |
tree | 218ded1fd1555202c929cf13175dee2444b3a4e2 | |
parent | 33fc7751b9adce0bc76989f399107078b2c21fd8 (diff) |
firmware: ti_sci.c: Add a function to query DM firmware's capability
Add a new function to query the capabilities of the DM firmware, using
TI SCI protocol to retrieve a 64-bit firmware capability, where each bit
represents a specific capability supported by the firmware.
Signed-off-by: Moteen Shah <m-shah@ti.com>
Reviewed-by: Neha Malcom Francis <n-francis@ti.com>
Reviewed-by: Dhruva Gole <d-gole@ti.com>
-rw-r--r-- | drivers/firmware/ti_sci.c | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/drivers/firmware/ti_sci.c b/drivers/firmware/ti_sci.c index 344df9454b3..2c91b2b71f5 100644 --- a/drivers/firmware/ti_sci.c +++ b/drivers/firmware/ti_sci.c @@ -279,6 +279,48 @@ static int ti_sci_do_xfer(struct ti_sci_info *info, } /** + * ti_sci_cmd_query_dm_cap() - Command to query DM firmware's capabilities + * @handle: Pointer to TI SCI handle + * @fw_caps: Pointer to firmware capabilities + * + * Return: 0 if all went fine, else return appropriate error. + */ +static int ti_sci_cmd_query_dm_cap(struct ti_sci_handle *handle, u64 *fw_caps) +{ + struct ti_sci_query_fw_caps_resp *cap_info; + struct ti_sci_msg_hdr hdr; + struct ti_sci_info *info; + struct ti_sci_xfer *xfer; + int ret; + + if (IS_ERR(handle)) + return PTR_ERR(handle); + if (!handle) + return -EINVAL; + + info = handle_to_ti_sci_info(handle); + + xfer = ti_sci_setup_one_xfer(info, TI_SCI_MSG_QUERY_FW_CAPS, + TI_SCI_FLAG_REQ_ACK_ON_PROCESSED, + (u32 *)&hdr, sizeof(struct ti_sci_msg_hdr), + sizeof(*cap_info)); + if (IS_ERR(xfer)) { + ret = PTR_ERR(xfer); + return ret; + } + + ret = ti_sci_do_xfer(info, xfer); + if (ret) + return ret; + + cap_info = (struct ti_sci_query_fw_caps_resp *)xfer->tx_message.buf; + + *fw_caps = cap_info->fw_caps; + + return 0; +} + +/** * ti_sci_cmd_get_revision() - command to get the revision of the SCI entity * @handle: pointer to TI SCI handle * @@ -2624,6 +2666,7 @@ static void ti_sci_setup_ops(struct ti_sci_info *info) struct ti_sci_dev_ops *dops = &ops->dev_ops; struct ti_sci_clk_ops *cops = &ops->clk_ops; struct ti_sci_core_ops *core_ops = &ops->core_ops; + struct ti_sci_firmware_ops *fw_ops = &ops->fw_ops; struct ti_sci_rm_core_ops *rm_core_ops = &ops->rm_core_ops; struct ti_sci_proc_ops *pops = &ops->proc_ops; struct ti_sci_rm_ringacc_ops *rops = &ops->rm_ring_ops; @@ -2694,6 +2737,8 @@ static void ti_sci_setup_ops(struct ti_sci_info *info) fwl_ops->set_fwl_region = ti_sci_cmd_set_fwl_region; fwl_ops->get_fwl_region = ti_sci_cmd_get_fwl_region; fwl_ops->change_fwl_owner = ti_sci_cmd_change_fwl_owner; + + fw_ops->query_dm_cap = ti_sci_cmd_query_dm_cap; } /** |