firmware: xilinx: enable feature check for ZynqMP
authorRonak Jain <ronak.jain@xilinx.com>
Wed, 6 Apr 2022 10:55:26 +0000 (03:55 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 22 Apr 2022 15:20:03 +0000 (17:20 +0200)
Enable the feature check if the PM_FEATURE_CHECK API returns success
with the supported version for the ZynqMP. Currently, it is enabled
for Versal only.

Move get_set_conduit_method() at the beginning as the Linux is
requesting to TF-A for the PM_FEATURE_CHECK API version for which the
interface should be enabled with TF-A.

Signed-off-by: Ronak Jain <ronak.jain@xilinx.com>
Link: https://lore.kernel.org/r/1649242526-17493-5-git-send-email-ronak.jain@xilinx.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/firmware/xilinx/zynqmp.c

index 6ee94f3..7977a49 100644 (file)
@@ -1662,6 +1662,10 @@ static int zynqmp_firmware_probe(struct platform_device *pdev)
        struct zynqmp_devinfo *devinfo;
        int ret;
 
+       ret = get_set_conduit_method(dev->of_node);
+       if (ret)
+               return ret;
+
        np = of_find_compatible_node(NULL, NULL, "xlnx,zynqmp");
        if (!np) {
                np = of_find_compatible_node(NULL, NULL, "xlnx,versal");
@@ -1670,11 +1674,14 @@ static int zynqmp_firmware_probe(struct platform_device *pdev)
 
                feature_check_enabled = true;
        }
-       of_node_put(np);
 
-       ret = get_set_conduit_method(dev->of_node);
-       if (ret)
-               return ret;
+       if (!feature_check_enabled) {
+               ret = do_feature_check_call(PM_FEATURE_CHECK);
+               if (ret >= 0)
+                       feature_check_enabled = true;
+       }
+
+       of_node_put(np);
 
        devinfo = devm_kzalloc(dev, sizeof(*devinfo), GFP_KERNEL);
        if (!devinfo)