diff options
| author | Peng Fan <peng.fan@nxp.com> | 2026-02-10 16:12:14 +0800 |
|---|---|---|
| committer | Tom Rini <trini@konsulko.com> | 2026-02-26 09:04:46 -0600 |
| commit | 3ee1408eeb7352d770bbf063df85fa23cd6b79a4 (patch) | |
| tree | 2e3a145c6fe652245cb4064d34c47657be5879c9 | |
| parent | 7995bf8dea2d5b3eb7fcb836636f4773924ec35d (diff) | |
firmware: scmi: Validate device tree node before setup channel
SCMI base protocol device does not have a device tree, it should use and
need to use the agent base channel.
For scmi_base.[x], there is no real device tree node for it. ofnode_null() is
assigned as the device tree node for scmi base protocol device:
commit 7eb4eb541c14 ("firmware: scmi: install base protocol to SCMI agent")
However with recent update in commit 0535e46d55d7
("scripts/dtc: Update to upstream version v1.7.2-35-g52f07dcca47c"),
SPL panic in fdt_check_node_offset_()->fdt_next_tag(), because offset is -1
and SPL_OF_LIBFDT_ASSUME_MASK is 0xFF.
So add a check in x_get_channel() to validate the protocol devices'
ofnode.
Reported-by: Ye Li <ye.li@nxp.com>
Closes: https://lore.kernel.org/u-boot/939a9696-27fa-45a1-b428-feffe21ac6d5@oss.nxp.com/
Signed-off-by: Peng Fan <peng.fan@nxp.com>
| -rw-r--r-- | drivers/firmware/scmi/mailbox_agent.c | 2 | ||||
| -rw-r--r-- | drivers/firmware/scmi/optee_agent.c | 3 |
2 files changed, 3 insertions, 2 deletions
diff --git a/drivers/firmware/scmi/mailbox_agent.c b/drivers/firmware/scmi/mailbox_agent.c index 16a82f55ab7..cda94565de5 100644 --- a/drivers/firmware/scmi/mailbox_agent.c +++ b/drivers/firmware/scmi/mailbox_agent.c @@ -101,7 +101,7 @@ static int scmi_mbox_get_channel(struct udevice *dev, struct scmi_mbox_channel *chan; int ret; - if (!dev_read_prop(protocol, "shmem", NULL)) { + if (!dev_has_ofnode(protocol) || !dev_read_prop(protocol, "shmem", NULL)) { /* Uses agent base channel */ *channel = container_of(base_chan, struct scmi_channel, ref); diff --git a/drivers/firmware/scmi/optee_agent.c b/drivers/firmware/scmi/optee_agent.c index 631625d715b..7170bd1e682 100644 --- a/drivers/firmware/scmi/optee_agent.c +++ b/drivers/firmware/scmi/optee_agent.c @@ -331,7 +331,8 @@ static int scmi_optee_get_channel(struct udevice *dev, u32 channel_id; int ret; - if (dev_read_u32(protocol, "linaro,optee-channel-id", &channel_id)) { + if (!dev_has_ofnode(protocol) || + dev_read_u32(protocol, "linaro,optee-channel-id", &channel_id)) { /* Uses agent base channel */ *channel = container_of(base_chan, struct scmi_channel, ref); |
