Skip to content

Commit

Permalink
remoteproc: mediatek: Refactor single core check and fix retrocompati…
Browse files Browse the repository at this point in the history
…bility

In older devicetrees we had the ChromeOS EC in a node called "cros-ec"
instead of the newer "cros-ec-rpmsg", but this driver is now checking
only for the latter, breaking compatibility with those.

Besides, we can check if the SCP is single or dual core by simply
walking through the children of the main SCP node and checking if
if there's more than one "mediatek,scp-core" compatible node.

Fixes: 1fdbf0c ("remoteproc: mediatek: Probe SCP cluster on multi-core SCP")
Reported-by: "kernelci.org bot" <bot@kernelci.org>
Tested-by: Laura Nao <laura.nao@collabora.com>
Reviewed-by: Chen-Yu Tsai <wenst@chromium.org>
Tested-by: Chen-Yu Tsai <wenst@chromium.org>
Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
Link: https://lore.kernel.org/r/20230919092336.51007-1-angelogioacchino.delregno@collabora.com
Signed-off-by: Mathieu Poirier <mathieu.poirier@linaro.org>
  • Loading branch information
AngeloGioacchino Del Regno authored and Mathieu Poirier committed Sep 21, 2023
1 parent e159298 commit 34eb78f
Showing 1 changed file with 7 additions and 11 deletions.
18 changes: 7 additions & 11 deletions drivers/remoteproc/mtk_scp.c
Original file line number Diff line number Diff line change
@@ -1144,29 +1144,25 @@ static int scp_add_multi_core(struct platform_device *pdev,
return ret;
}

static int scp_is_single_core(struct platform_device *pdev)
static bool scp_is_single_core(struct platform_device *pdev)
{
struct device *dev = &pdev->dev;
struct device_node *np = dev_of_node(dev);
struct device_node *child;
int num_cores = 0;

child = of_get_next_available_child(np, NULL);
if (!child)
return dev_err_probe(dev, -ENODEV, "No child node\n");
for_each_child_of_node(np, child)
if (of_device_is_compatible(child, "mediatek,scp-core"))
num_cores++;

of_node_put(child);
return of_node_name_eq(child, "cros-ec-rpmsg");
return num_cores < 2;
}

static int scp_cluster_init(struct platform_device *pdev, struct mtk_scp_of_cluster *scp_cluster)
{
int ret;

ret = scp_is_single_core(pdev);
if (ret < 0)
return ret;

if (ret)
if (scp_is_single_core(pdev))
ret = scp_add_single_core(pdev, scp_cluster);
else
ret = scp_add_multi_core(pdev, scp_cluster);

0 comments on commit 34eb78f

Please sign in to comment.