From: Jagan Teki <jagan@amarulasolutions.com>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH v2 50/53] reset: Get the RESET by index without device
Date: Fri, 10 Aug 2018 11:37:08 +0530 [thread overview]
Message-ID: <20180810060711.6547-51-jagan@amarulasolutions.com> (raw)
In-Reply-To: <20180810060711.6547-1-jagan@amarulasolutions.com>
Getting a RESET by index with device is not straight forward
for some use-cases like handling clock operations for child
node in parent driver. So we need to process the child node
in parent probe via ofnode and process RESET operation for child
without udevice but with ofnode.
So add reset_get_by_index_nodev() and move the common code
in reset_get_by_index_tail() to use for reset_get_by_index()
Cc: Simon Glass <sjg@chromium.org>
Cc: Joe Hershberger <joe.hershberger@ni.com>
Signed-off-by: Jagan Teki <jagan@amarulasolutions.com>
---
drivers/reset/reset-uclass.c | 53 ++++++++++++++++++++++++------------
include/reset.h | 16 +++++++++++
2 files changed, 52 insertions(+), 17 deletions(-)
diff --git a/drivers/reset/reset-uclass.c b/drivers/reset/reset-uclass.c
index 6320efcb49..755bbf7a5e 100644
--- a/drivers/reset/reset-uclass.c
+++ b/drivers/reset/reset-uclass.c
@@ -34,41 +34,34 @@ static int reset_of_xlate_default(struct reset_ctl *reset_ctl,
return 0;
}
-int reset_get_by_index(struct udevice *dev, int index,
- struct reset_ctl *reset_ctl)
+static int reset_get_by_index_tail(int ret, ofnode node,
+ struct ofnode_phandle_args *args,
+ const char *list_name, int index,
+ struct reset_ctl *reset_ctl)
{
- struct ofnode_phandle_args args;
- int ret;
struct udevice *dev_reset;
struct reset_ops *ops;
- debug("%s(dev=%p, index=%d, reset_ctl=%p)\n", __func__, dev, index,
- reset_ctl);
+ assert(reset_ctl);
reset_ctl->dev = NULL;
-
- ret = dev_read_phandle_with_args(dev, "resets", "#reset-cells", 0,
- index, &args);
- if (ret) {
- debug("%s: fdtdec_parse_phandle_with_args() failed: %d\n",
- __func__, ret);
+ if (ret)
return ret;
- }
- ret = uclass_get_device_by_ofnode(UCLASS_RESET, args.node,
+ ret = uclass_get_device_by_ofnode(UCLASS_RESET, args->node,
&dev_reset);
if (ret) {
debug("%s: uclass_get_device_by_ofnode() failed: %d\n",
__func__, ret);
- debug("%s %d\n", ofnode_get_name(args.node), args.args[0]);
+ debug("%s %d\n", ofnode_get_name(args->node), args->args[0]);
return ret;
}
ops = reset_dev_ops(dev_reset);
reset_ctl->dev = dev_reset;
if (ops->of_xlate)
- ret = ops->of_xlate(reset_ctl, &args);
+ ret = ops->of_xlate(reset_ctl, args);
else
- ret = reset_of_xlate_default(reset_ctl, &args);
+ ret = reset_of_xlate_default(reset_ctl, args);
if (ret) {
debug("of_xlate() failed: %d\n", ret);
return ret;
@@ -86,6 +79,32 @@ int reset_get_by_index(struct udevice *dev, int index,
return 0;
}
+int reset_get_by_index(struct udevice *dev, int index,
+ struct reset_ctl *reset_ctl)
+{
+ struct ofnode_phandle_args args;
+ int ret;
+
+ ret = dev_read_phandle_with_args(dev, "resets", "#reset-cells", 0,
+ index, &args);
+
+ return reset_get_by_index_tail(ret, dev_ofnode(dev), &args, "resets",
+ index > 0, reset_ctl);
+}
+
+int reset_get_by_index_nodev(ofnode node, int index,
+ struct reset_ctl *reset_ctl)
+{
+ struct ofnode_phandle_args args;
+ int ret;
+
+ ret = ofnode_parse_phandle_with_args(node, "resets", "#reset-cells", 0,
+ index > 0, &args);
+
+ return reset_get_by_index_tail(ret, node, &args, "resets",
+ index > 0, reset_ctl);
+}
+
int reset_get_bulk(struct udevice *dev, struct reset_ctl_bulk *bulk)
{
int i, ret, err, count;
diff --git a/include/reset.h b/include/reset.h
index 70130bb886..581cc2579b 100644
--- a/include/reset.h
+++ b/include/reset.h
@@ -6,6 +6,7 @@
#ifndef _RESET_H
#define _RESET_H
+#include <dm/ofnode.h>
#include <linux/errno.h>
/**
@@ -97,6 +98,21 @@ struct reset_ctl_bulk {
int reset_get_by_index(struct udevice *dev, int index,
struct reset_ctl *reset_ctl);
+/**
+ * reset_get_by_index_nodev - Get/request a reset signal by integer index
+ * without a device.
+ *
+ * This is a version of reset_get_by_index() that does not use a device.
+ *
+ * @node: The client ofnode.
+ * @index: The index of the reset signal to request, within the client's
+ * list of reset signals.
+ * @reset_ctl A pointer to a reset control struct to initialize.
+ * @return 0 if OK, or a negative error code.
+ */
+int reset_get_by_index_nodev(ofnode node, int index,
+ struct reset_ctl *reset_ctl);
+
/**
* reset_get_bulk - Get/request all reset signals of a device.
*
--
2.18.0.321.gffc6fa0e3
next prev parent reply other threads:[~2018-08-10 6:07 UTC|newest]
Thread overview: 56+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-08-10 6:06 [U-Boot] [PATCH v2 00/53] clk: Add Allwinner CLK, RESET support Jagan Teki
2018-08-10 6:06 ` [U-Boot] [PATCH v2 01/53] clk: Kconfig: Ascending order to sub directiory kconfigs Jagan Teki
2018-08-13 10:34 ` Jagan Teki
2018-08-10 6:06 ` [U-Boot] [PATCH v2 02/53] clk: Add Allwinner A64 CLK driver Jagan Teki
2018-08-10 6:06 ` [U-Boot] [PATCH v2 03/53] reset: Add default request ops Jagan Teki
2018-08-10 6:06 ` [U-Boot] [PATCH v2 04/53] reset: Add Allwinner RESET driver Jagan Teki
2018-08-10 6:06 ` [U-Boot] [PATCH v2 05/53] clk: sunxi: Add Allwinner H3/H5 CLK driver Jagan Teki
2018-08-10 6:06 ` [U-Boot] [PATCH v2 06/53] clk: sunxi: Add Allwinner A10/A20 " Jagan Teki
2018-08-10 6:06 ` [U-Boot] [PATCH v2 07/53] clk: sunxi: Add Allwinner A10s/A13 " Jagan Teki
2018-08-10 6:06 ` [U-Boot] [PATCH v2 08/53] clk: sunxi: Add Allwinner A31 " Jagan Teki
2018-08-10 6:06 ` [U-Boot] [PATCH v2 09/53] clk: sunxi: Add Allwinner A23 " Jagan Teki
2018-08-10 6:06 ` [U-Boot] [PATCH v2 10/53] clk: sunxi: a23: Add CLK support for A33 Jagan Teki
2018-08-10 6:06 ` [U-Boot] [PATCH v2 11/53] clk: sunxi: Add Allwinner A83T CLK driver Jagan Teki
2018-08-10 6:06 ` [U-Boot] [PATCH v2 12/53] clk: sunxi: Add Allwinner R40 " Jagan Teki
2018-08-10 6:06 ` [U-Boot] [PATCH v2 13/53] clk: sunxi: Add Allwinner V3S " Jagan Teki
2018-08-10 6:06 ` [U-Boot] [PATCH v2 14/53] sunxi: Enable CLK Jagan Teki
2018-08-10 6:06 ` [U-Boot] [PATCH v2 15/53] musb-new: sunxi: Use CLK and RESET support Jagan Teki
2018-08-10 6:06 ` [U-Boot] [PATCH v2 16/53] phy: sun4i-usb: " Jagan Teki
2018-08-10 6:06 ` [U-Boot] [PATCH v2 17/53] sunxi: usb: Switch to Generic host controllers Jagan Teki
2018-08-10 6:06 ` [U-Boot] [PATCH v2 18/53] usb: host: Drop [e-o]hci-sunxi drivers Jagan Teki
2018-08-10 6:06 ` [U-Boot] [PATCH v2 19/53] clk: sunxi: Implement AHB bus MMC clocks Jagan Teki
2018-08-10 6:06 ` [U-Boot] [PATCH v2 20/53] clk: sunxi: Implement direct " Jagan Teki
2018-08-10 6:06 ` [U-Boot] [PATCH v2 21/53] clk: sunxi: Implement AHB bus MMC resets Jagan Teki
2018-08-10 6:06 ` [U-Boot] [PATCH v2 22/53] reset: Add get reset by name optionally Jagan Teki
2018-08-10 6:06 ` [U-Boot] [PATCH v2 23/53] reset: Add reset valid Jagan Teki
2018-08-10 6:06 ` [U-Boot] [PATCH v2 24/53] dm: mmc: sunxi: Add CLK and RESET support Jagan Teki
2018-08-10 6:06 ` [U-Boot] [PATCH v2 25/53] fastboot: sunxi: Update fastboot mmc default device Jagan Teki
2018-08-10 6:06 ` [U-Boot] [PATCH v2 26/53] env: sunxi: Update default env fat device Jagan Teki
2018-08-10 6:06 ` [U-Boot] [PATCH v2 27/53] sunxi: Use mmc_bootdev=2 for MMC2 boot Jagan Teki
2018-08-10 6:06 ` [U-Boot] [PATCH v2 28/53] sunxi: A20: Enable DM_MMC Jagan Teki
2018-08-10 6:06 ` [U-Boot] [PATCH v2 29/53] mmc: sunxi: Add mmc, emmc H5/A64 compatible Jagan Teki
2018-08-10 6:06 ` [U-Boot] [PATCH v2 30/53] sunxi: H3_H5: Enable DM_MMC Jagan Teki
2018-08-10 6:06 ` [U-Boot] [PATCH v2 31/53] sunxi: A64: " Jagan Teki
2018-08-10 6:06 ` [U-Boot] [PATCH v2 32/53] mmc: sunxi: Add A83T emmc compatible Jagan Teki
2018-08-10 6:06 ` [U-Boot] [PATCH v2 33/53] sunxi: A83T: Enable DM_MMC Jagan Teki
2018-08-10 6:06 ` [U-Boot] [PATCH v2 34/53] sunxi: V40: " Jagan Teki
2018-08-10 6:06 ` [U-Boot] [PATCH v2 35/53] sunxi: A13/A31: " Jagan Teki
2018-08-10 6:06 ` [U-Boot] [PATCH v2 36/53] sunxi: A23/A33/V3S: " Jagan Teki
2018-08-10 6:06 ` [U-Boot] [PATCH v2 37/53] clk: sunxi: Implement SPI clocks Jagan Teki
2018-08-10 6:06 ` [U-Boot] [PATCH v2 38/53] clk: sunxi: Implement SPI resets Jagan Teki
2018-08-10 6:06 ` [U-Boot] [PATCH v2 39/53] spi: sun4i: Add CLK support Jagan Teki
2018-08-10 6:06 ` [U-Boot] [PATCH v2 40/53] spi: Add Allwinner A31 SPI driver Jagan Teki
2018-08-11 0:38 ` Fahad Sadah
2018-08-10 6:06 ` [U-Boot] [PATCH v2 41/53] clk: sunxi: Implement UART clocks Jagan Teki
2018-08-10 6:07 ` [U-Boot] [PATCH v2 42/53] clk: sunxi: Implement UART resets Jagan Teki
2018-08-10 6:07 ` [U-Boot] [PATCH v2 43/53] clk: sunxi: Implement Ethernet clocks Jagan Teki
2018-08-10 6:07 ` [U-Boot] [PATCH v2 44/53] clk: sunxi: Implement Ethernet resets Jagan Teki
2018-08-10 6:07 ` [U-Boot] [PATCH v2 45/53] net: sunxi_emac: Add CLK support Jagan Teki
2018-08-10 6:07 ` [U-Boot] [PATCH v2 46/53] net: sun8i_emac: Retrieve GMAC clock via 'syscon' phandle Jagan Teki
2018-08-10 6:07 ` [U-Boot] [PATCH v2 47/53] net: sun8i_emac: Add CLK and RESET support Jagan Teki
2018-08-10 6:07 ` [U-Boot] [PATCH v2 48/53] clk: Get the CLK by index without device Jagan Teki
2018-08-10 6:07 ` [U-Boot] [PATCH v2 49/53] clk: Use clk_get_by_index_tail() Jagan Teki
2018-08-10 6:07 ` Jagan Teki [this message]
2018-08-10 6:07 ` [U-Boot] [PATCH v2 51/53] clk: sunxi: h3: Implement EPHY CLK and RESET Jagan Teki
2018-08-10 6:07 ` [U-Boot] [PATCH v2 52/53] net: sun8i_emac: Add EPHY CLK and RESET support Jagan Teki
2018-08-10 6:07 ` [U-Boot] [PATCH v2 53/53] board: sunxi: gmac: Remove Ethernet clock and reset Jagan Teki
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20180810060711.6547-51-jagan@amarulasolutions.com \
--to=jagan@amarulasolutions.com \
--cc=u-boot@lists.denx.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox