]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
reset: zynqmp: Add reset driver support for versal
authorT Karthik Reddy <t.karthik.reddy@amd.com>
Wed, 20 Jul 2022 09:59:57 +0000 (03:59 -0600)
committerMichal Simek <michal.simek@amd.com>
Tue, 26 Jul 2022 06:27:15 +0000 (08:27 +0200)
Add support for versal platform by adding "xlnx,versal-reset"
compatible string in zynqmp-reset driver. Reset numbering schema
for versal is not same as zynqmp, so nr_reset and reset_id are
set to zero. In case of assert/dessert, required device reset id
is sent from respective driver through struct reset_ctl.

Signed-off-by: T Karthik Reddy <t.karthik.reddy@amd.com>
Signed-off-by: Ashok Reddy Soma <ashok.reddy.soma@xilinx.com>
Link: https://lore.kernel.org/r/20220720095959.29610-2-ashok.reddy.soma@xilinx.com
Signed-off-by: Michal Simek <michal.simek@amd.com>
drivers/reset/Kconfig
drivers/reset/reset-zynqmp.c

index b57714111b5a748b81a9284dfed1c2a85fb341aa..69a7b4ccbad6bb11d45e2d2b892e092202010520 100644 (file)
@@ -199,11 +199,11 @@ config RESET_SCMI
          protocol communication with a SCMI server.
 
 config RESET_ZYNQMP
-       bool "Reset Driver for Xilinx ZynqMP SoC's"
+       bool "Reset Driver for Xilinx ZynqMP & Versal SoC's"
        depends on DM_RESET && ZYNQMP_FIRMWARE
        help
-         Support for reset controller on Xilinx ZynqMP SoC. Driver is only
-         passing request via Xilinx firmware interface to TF-A and PMU
+         Support for reset controller on Xilinx ZynqMP & Versal SoC's. Driver
+         is only passing request via Xilinx firmware interface to TF-A and PMU
          firmware.
 
 config RESET_DRA7
index 4e3f907980f61d96afb546e5c23998bc74f2baa9..52c08c4722daa94ba0b944deb40dc1e8221a2231 100644 (file)
@@ -53,7 +53,7 @@ static int zynqmp_reset_request(struct reset_ctl *rst)
        dev_dbg(rst->dev, "%s(rst=%p) (id=%lu) (nr_reset=%d)\n", __func__,
                rst, rst->id, priv->nr_reset);
 
-       if (rst->id > priv->nr_reset)
+       if (priv->nr_reset && rst->id > priv->nr_reset)
                return -EINVAL;
 
        return 0;
@@ -63,8 +63,11 @@ static int zynqmp_reset_probe(struct udevice *dev)
 {
        struct zynqmp_reset_priv *priv = dev_get_priv(dev);
 
-       priv->reset_id = ZYNQMP_RESET_ID;
-       priv->nr_reset = ZYNQMP_NR_RESETS;
+       if (device_is_compatible(dev, "xlnx,zynqmp-reset")) {
+               priv->reset_id = ZYNQMP_RESET_ID;
+               priv->nr_reset = ZYNQMP_NR_RESETS;
+       }
+
        return 0;
 }
 
@@ -76,6 +79,7 @@ const struct reset_ops zynqmp_reset_ops = {
 
 static const struct udevice_id zynqmp_reset_ids[] = {
        { .compatible = "xlnx,zynqmp-reset" },
+       { .compatible = "xlnx,versal-reset" },
        { }
 };