mirror of
https://source.denx.de/u-boot/u-boot.git
synced 2026-06-02 09:46:37 +03:00
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: commit7eb4eb541c("firmware: scmi: install base protocol to SCMI agent") However with recent update in commit0535e46d55("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>
This commit is contained in:
@@ -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);
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user