]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
firmware: arm_scpi: Add compatibility checks for shmem node
authorSudeep Holla <sudeep.holla@arm.com>
Wed, 2 Jun 2021 07:38:50 +0000 (08:38 +0100)
committerSudeep Holla <sudeep.holla@arm.com>
Thu, 3 Jun 2021 15:46:53 +0000 (16:46 +0100)
The shared memory node used for communication between the firmware and
the OS should be compatible with one of the following:
- amlogic,meson-gxbb-scp-shmem
- amlogic,meson-axg-scp-shmem
- arm,juno-scp-shmem
- arm,scp-shmem
Add the check for the same while parsing the node before fetching the memory
regions.

Link: https://lore.kernel.org/r/20210602073851.1005607-1-sudeep.holla@arm.com
Cc: Rob Herring <robh+dt@kernel.org>
Cc: Kevin Hilman <khilman@baylibre.com>
Cc: Neil Armstrong <narmstrong@baylibre.com>
Cc: Jerome Brunet <jbrunet@baylibre.com>
Reviewed-by: Cristian Marussi <cristian.marussi@arm.com>
Tested-by: Cristian Marussi <cristian.marussi@arm.com>
Signed-off-by: Sudeep Holla <sudeep.holla@arm.com>
drivers/firmware/arm_scpi.c

index d0dee37ad5228814e61142fe14dc9a992c6d2430..cc90a11a69c39332c2927ec39cf948ab7035cfbc 100644 (file)
@@ -897,6 +897,14 @@ static const struct of_device_id legacy_scpi_of_match[] = {
        {},
 };
 
+static const struct of_device_id shmem_of_match[] __maybe_unused = {
+       { .compatible = "amlogic,meson-gxbb-scp-shmem", },
+       { .compatible = "amlogic,meson-axg-scp-shmem", },
+       { .compatible = "arm,juno-scp-shmem", },
+       { .compatible = "arm,scp-shmem", },
+       { }
+};
+
 static int scpi_probe(struct platform_device *pdev)
 {
        int count, idx, ret;
@@ -933,6 +941,9 @@ static int scpi_probe(struct platform_device *pdev)
                struct mbox_client *cl = &pchan->cl;
                struct device_node *shmem = of_parse_phandle(np, "shmem", idx);
 
+               if (!of_match_node(shmem_of_match, shmem))
+                       return -ENXIO;
+
                ret = of_address_to_resource(shmem, 0, &res);
                of_node_put(shmem);
                if (ret) {