All of lore.kernel.org
 help / color / mirror / Atom feed
* [U-Boot] [PATCH 1/3] dm: core: Add dev_read_bytes()
@ 2019-04-15  9:10 Thierry Reding
  2019-04-15  9:10 ` [U-Boot] [PATCH 2/3] net: eth-uclass: Write MAC address to hardware after probe Thierry Reding
                   ` (2 more replies)
  0 siblings, 3 replies; 8+ messages in thread
From: Thierry Reding @ 2019-04-15  9:10 UTC (permalink / raw)
  To: u-boot

From: Thierry Reding <treding@nvidia.com>

This function can be used to read a binary property into a buffer. One
example where this is needed is to read a MAC address from device tree.

Signed-off-by: Thierry Reding <treding@nvidia.com>
---
 drivers/core/of_access.c | 21 +++++++++++++++++++++
 drivers/core/ofnode.c    | 13 +++++++++++++
 drivers/core/read.c      |  6 ++++++
 include/dm/of_access.h   | 15 +++++++++++++++
 include/dm/ofnode.h      | 11 +++++++++++
 include/dm/read.h        | 17 +++++++++++++++++
 6 files changed, 83 insertions(+)

diff --git a/drivers/core/of_access.c b/drivers/core/of_access.c
index 945b81448cce..d110d171a3ea 100644
--- a/drivers/core/of_access.c
+++ b/drivers/core/of_access.c
@@ -446,6 +446,27 @@ static void *of_find_property_value_of_size(const struct device_node *np,
 	return prop->value;
 }
 
+int of_read_bytes(const struct device_node *np, const char *propname,
+		  u8 *buffer, int size)
+{
+	const fdt32_t *value;
+
+	debug("%s: %s: ", __func__, propname);
+
+	if (!np)
+		return -EINVAL;
+
+	value = of_find_property_value_of_size(np, propname, size);
+	if (IS_ERR(value)) {
+		debug("(not found)\n");
+		return PTR_ERR(value);
+	}
+
+	memcpy(buffer, value, size);
+
+	return 0;
+}
+
 int of_read_u32(const struct device_node *np, const char *propname, u32 *outp)
 {
 	const __be32 *val;
diff --git a/drivers/core/ofnode.c b/drivers/core/ofnode.c
index 785f5c3acf7a..21b24e5aa00e 100644
--- a/drivers/core/ofnode.c
+++ b/drivers/core/ofnode.c
@@ -15,6 +15,19 @@
 #include <linux/err.h>
 #include <linux/ioport.h>
 
+int ofnode_read_bytes(ofnode node, const char *propname, u8 *buffer, int size)
+{
+	assert(ofnode_valid(node));
+	debug("%s: %s: ", __func__, propname);
+
+	if (ofnode_is_np(node))
+		return of_read_bytes(ofnode_to_np(node), propname, buffer,
+				     size);
+
+	return fdtdec_get_byte_array(gd->fdt_blob, ofnode_to_offset(node),
+				     propname, buffer, size);
+}
+
 int ofnode_read_u32(ofnode node, const char *propname, u32 *outp)
 {
 	assert(ofnode_valid(node));
diff --git a/drivers/core/read.c b/drivers/core/read.c
index 6bda077a34b9..9919ec19d4d8 100644
--- a/drivers/core/read.c
+++ b/drivers/core/read.c
@@ -11,6 +11,12 @@
 #include <mapmem.h>
 #include <dm/of_access.h>
 
+int dev_read_bytes(struct udevice *dev, const char *propname, u8 *buffer,
+		   int size)
+{
+	return ofnode_read_bytes(dev_ofnode(dev), propname, buffer, size);
+}
+
 int dev_read_u32(struct udevice *dev, const char *propname, u32 *outp)
 {
 	return ofnode_read_u32(dev_ofnode(dev), propname, outp);
diff --git a/include/dm/of_access.h b/include/dm/of_access.h
index 13fedb7cf5e6..fc6a86959b23 100644
--- a/include/dm/of_access.h
+++ b/include/dm/of_access.h
@@ -218,6 +218,21 @@ struct device_node *of_find_node_by_prop_value(struct device_node *from,
  */
 struct device_node *of_find_node_by_phandle(phandle handle);
 
+/**
+ * of_read_bytes() - Find and read an array of bytes from a property
+ *
+ * Search for a property in a device node and read an array of bytes from it.
+ *
+ * @np: device node from which the property is to be read
+ * @propname: name of the property to be read
+ * @buffer: buffer to read the property value into
+ * @size: number of bytes to read
+ *
+ * @return 0 on success, or a negative error-code on failure.
+ */
+int of_read_bytes(const struct device_node *np, const char *propname,
+		  u8 *buffer, int size);
+
 /**
  * of_read_u32() - Find and read a 32-bit integer from a property
  *
diff --git a/include/dm/ofnode.h b/include/dm/ofnode.h
index d206ee2caab7..5158296dfd96 100644
--- a/include/dm/ofnode.h
+++ b/include/dm/ofnode.h
@@ -192,6 +192,17 @@ static inline ofnode ofnode_null(void)
 	return node;
 }
 
+/**
+ * ofnode_read_bytes() - Read an array of bytes from a property
+ *
+ * @node: valid node reference to read property from
+ * @propname: name of the property to read from
+ * @buffer: buffer to read the value into
+ * @size: size of @buffer
+ * @return 0 on success, or a negative error code on failure
+ */
+int ofnode_read_bytes(ofnode node, const char *propname, u8 *buffer, int size);
+
 /**
  * ofnode_read_u32() - Read a 32-bit integer from a property
  *
diff --git a/include/dm/read.h b/include/dm/read.h
index 60b727cbd821..cb9776b39721 100644
--- a/include/dm/read.h
+++ b/include/dm/read.h
@@ -44,6 +44,18 @@ static inline bool dev_of_valid(struct udevice *dev)
 }
 
 #ifndef CONFIG_DM_DEV_READ_INLINE
+/**
+ * dev_read_bytes() - read an array of bytes from a device's DT property
+ *
+ * @dev: device to read DT property from
+ * @propname: name of the property to read from
+ * @buffer: buffer to read the value into
+ * @size: size of @buffer
+ * @return 0 on success, or a negative error code on failure
+ */
+int dev_read_bytes(struct udevice *dev, const char *propname, u8 *buffer,
+		   int size);
+
 /**
  * dev_read_u32() - read a 32-bit integer from a device's DT property
  *
@@ -522,6 +534,11 @@ u64 dev_translate_address(struct udevice *dev, const fdt32_t *in_addr);
 int dev_read_alias_highest_id(const char *stem);
 
 #else /* CONFIG_DM_DEV_READ_INLINE is enabled */
+static inline int dev_read_bytes(struct udevice *dev, const char *propname,
+				 u8 *buffer, int size)
+{
+	return ofnode_read_bytes(dev_ofnode(dev), propname, buffer, size);
+}
 
 static inline int dev_read_u32(struct udevice *dev,
 			       const char *propname, u32 *outp)
-- 
2.21.0

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [U-Boot] [PATCH 2/3] net: eth-uclass: Write MAC address to hardware after probe
  2019-04-15  9:10 [U-Boot] [PATCH 1/3] dm: core: Add dev_read_bytes() Thierry Reding
@ 2019-04-15  9:10 ` Thierry Reding
  2019-04-15 21:24   ` Joe Hershberger
  2019-04-15  9:10 ` [U-Boot] [PATCH 3/3] net: eth-uclass: Support device tree MAC addresses Thierry Reding
  2019-04-15 21:21 ` [U-Boot] [PATCH 1/3] dm: core: Add dev_read_bytes() Joe Hershberger
  2 siblings, 1 reply; 8+ messages in thread
From: Thierry Reding @ 2019-04-15  9:10 UTC (permalink / raw)
  To: u-boot

From: Thierry Reding <treding@nvidia.com>

In order for the device to use the proper MAC address, which can have
been configured in the environment prior to the device being registered,
ensure that the MAC address is written after the device has been probed.
For devices that are registered before the network stack is initialized,
this is already done during eth_initialize(). If the Ethernet device is
on a bus that is not initialized on early boot, such as PCI, the device
is not available at the time eth_initialize() is called, so we need the
MAC address programming to also happen after probe.

Signed-off-by: Thierry Reding <treding@nvidia.com>
---
 net/eth-uclass.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/net/eth-uclass.c b/net/eth-uclass.c
index 2ef20df19203..4225aabf1fa1 100644
--- a/net/eth-uclass.c
+++ b/net/eth-uclass.c
@@ -524,6 +524,8 @@ static int eth_post_probe(struct udevice *dev)
 #endif
 	}
 
+	eth_write_hwaddr(dev);
+
 	return 0;
 }
 
-- 
2.21.0

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [U-Boot] [PATCH 3/3] net: eth-uclass: Support device tree MAC addresses
  2019-04-15  9:10 [U-Boot] [PATCH 1/3] dm: core: Add dev_read_bytes() Thierry Reding
  2019-04-15  9:10 ` [U-Boot] [PATCH 2/3] net: eth-uclass: Write MAC address to hardware after probe Thierry Reding
@ 2019-04-15  9:10 ` Thierry Reding
  2019-04-15 21:26   ` Joe Hershberger
  2019-04-15 21:21 ` [U-Boot] [PATCH 1/3] dm: core: Add dev_read_bytes() Joe Hershberger
  2 siblings, 1 reply; 8+ messages in thread
From: Thierry Reding @ 2019-04-15  9:10 UTC (permalink / raw)
  To: u-boot

From: Thierry Reding <treding@nvidia.com>

Add the standard Ethernet device tree bindings (imported from v5.0 of
the Linux kernel) and implement support for reading the MAC address for
Ethernet devices in the Ethernet uclass. If the "mac-address" property
exists, the MAC address will be parsed from that. If that property does
not exist, the "local-mac-address" property will be tried as fallback.

MAC addresses from device tree take precedence over the ones stored in
a network interface card's ROM.

Signed-off-by: Thierry Reding <treding@nvidia.com>
---
 .../devicetree/bindings/net/ethernet.txt      | 66 +++++++++++++++++++
 net/eth-uclass.c                              | 23 ++++++-
 2 files changed, 86 insertions(+), 3 deletions(-)
 create mode 100644 Documentation/devicetree/bindings/net/ethernet.txt

diff --git a/Documentation/devicetree/bindings/net/ethernet.txt b/Documentation/devicetree/bindings/net/ethernet.txt
new file mode 100644
index 000000000000..cfc376bc977a
--- /dev/null
+++ b/Documentation/devicetree/bindings/net/ethernet.txt
@@ -0,0 +1,66 @@
+The following properties are common to the Ethernet controllers:
+
+NOTE: All 'phy*' properties documented below are Ethernet specific. For the
+generic PHY 'phys' property, see
+Documentation/devicetree/bindings/phy/phy-bindings.txt.
+
+- local-mac-address: array of 6 bytes, specifies the MAC address that was
+  assigned to the network device;
+- mac-address: array of 6 bytes, specifies the MAC address that was last used by
+  the boot program; should be used in cases where the MAC address assigned to
+  the device by the boot program is different from the "local-mac-address"
+  property;
+- nvmem-cells: phandle, reference to an nvmem node for the MAC address;
+- nvmem-cell-names: string, should be "mac-address" if nvmem is to be used;
+- max-speed: number, specifies maximum speed in Mbit/s supported by the device;
+- max-frame-size: number, maximum transfer unit (IEEE defined MTU), rather than
+  the maximum frame size (there's contradiction in the Devicetree
+  Specification).
+- phy-mode: string, operation mode of the PHY interface. This is now a de-facto
+  standard property; supported values are:
+  * "internal"
+  * "mii"
+  * "gmii"
+  * "sgmii"
+  * "qsgmii"
+  * "tbi"
+  * "rev-mii"
+  * "rmii"
+  * "rgmii" (RX and TX delays are added by the MAC when required)
+  * "rgmii-id" (RGMII with internal RX and TX delays provided by the PHY, the
+     MAC should not add the RX or TX delays in this case)
+  * "rgmii-rxid" (RGMII with internal RX delay provided by the PHY, the MAC
+     should not add an RX delay in this case)
+  * "rgmii-txid" (RGMII with internal TX delay provided by the PHY, the MAC
+     should not add an TX delay in this case)
+  * "rtbi"
+  * "smii"
+  * "xgmii"
+  * "trgmii"
+  * "2000base-x",
+  * "2500base-x",
+  * "rxaui"
+  * "xaui"
+  * "10gbase-kr" (10GBASE-KR, XFI, SFI)
+- phy-connection-type: the same as "phy-mode" property but described in the
+  Devicetree Specification;
+- phy-handle: phandle, specifies a reference to a node representing a PHY
+  device; this property is described in the Devicetree Specification and so
+  preferred;
+- phy: the same as "phy-handle" property, not recommended for new bindings.
+- phy-device: the same as "phy-handle" property, not recommended for new
+  bindings.
+- rx-fifo-depth: the size of the controller's receive fifo in bytes. This
+  is used for components that can have configurable receive fifo sizes,
+  and is useful for determining certain configuration settings such as
+  flow control thresholds.
+- tx-fifo-depth: the size of the controller's transmit fifo in bytes. This
+  is used for components that can have configurable fifo sizes.
+- managed: string, specifies the PHY management type. Supported values are:
+  "auto", "in-band-status". "auto" is the default, it usess MDIO for
+  management if fixed-link is not specified.
+
+Child nodes of the Ethernet controller are typically the individual PHY devices
+connected via the MDIO bus (sometimes the MDIO bus controller is separate).
+They are described in the phy.txt file in this same directory.
+For non-MDIO PHY management see fixed-link.txt.
diff --git a/net/eth-uclass.c b/net/eth-uclass.c
index 4225aabf1fa1..6bc7efbcdf9c 100644
--- a/net/eth-uclass.c
+++ b/net/eth-uclass.c
@@ -455,6 +455,20 @@ static int eth_pre_unbind(struct udevice *dev)
 	return 0;
 }
 
+static int eth_dev_get_mac_address(struct udevice *dev, u8 mac[ARP_HLEN])
+{
+	int err;
+
+	err = dev_read_bytes(dev, "mac-address", mac, ARP_HLEN);
+	if (err < 0)
+		err = dev_read_bytes(dev, "local-mac-address", mac, ARP_HLEN);
+
+	if (err < 0)
+		memset(mac, 0, ARP_HLEN);
+
+	return err;
+}
+
 static int eth_post_probe(struct udevice *dev)
 {
 	struct eth_device_priv *priv = dev->uclass_priv;
@@ -489,9 +503,12 @@ static int eth_post_probe(struct udevice *dev)
 
 	priv->state = ETH_STATE_INIT;
 
-	/* Check if the device has a MAC address in ROM */
-	if (eth_get_ops(dev)->read_rom_hwaddr)
-		eth_get_ops(dev)->read_rom_hwaddr(dev);
+	/* Check if the device has a MAC address in device tree */
+	if (eth_dev_get_mac_address(dev, pdata->enetaddr) < 0) {
+		/* Check if the device has a MAC address in ROM */
+		if (eth_get_ops(dev)->read_rom_hwaddr)
+			eth_get_ops(dev)->read_rom_hwaddr(dev);
+	}
 
 	eth_env_get_enetaddr_by_index("eth", dev->seq, env_enetaddr);
 	if (!is_zero_ethaddr(env_enetaddr)) {
-- 
2.21.0

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [U-Boot] [PATCH 1/3] dm: core: Add dev_read_bytes()
  2019-04-15  9:10 [U-Boot] [PATCH 1/3] dm: core: Add dev_read_bytes() Thierry Reding
  2019-04-15  9:10 ` [U-Boot] [PATCH 2/3] net: eth-uclass: Write MAC address to hardware after probe Thierry Reding
  2019-04-15  9:10 ` [U-Boot] [PATCH 3/3] net: eth-uclass: Support device tree MAC addresses Thierry Reding
@ 2019-04-15 21:21 ` Joe Hershberger
  2019-04-16  8:06   ` Thierry Reding
  2 siblings, 1 reply; 8+ messages in thread
From: Joe Hershberger @ 2019-04-15 21:21 UTC (permalink / raw)
  To: u-boot

On Mon, Apr 15, 2019 at 4:11 AM Thierry Reding <thierry.reding@gmail.com> wrote:
>
> From: Thierry Reding <treding@nvidia.com>
>
> This function can be used to read a binary property into a buffer. One
> example where this is needed is to read a MAC address from device tree.
>
> Signed-off-by: Thierry Reding <treding@nvidia.com>

Is there a reason dev_read_u8_array_ptr is insuffient?

Thanks,
-Joe

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [U-Boot] [PATCH 2/3] net: eth-uclass: Write MAC address to hardware after probe
  2019-04-15  9:10 ` [U-Boot] [PATCH 2/3] net: eth-uclass: Write MAC address to hardware after probe Thierry Reding
@ 2019-04-15 21:24   ` Joe Hershberger
  2019-04-16  8:21     ` Thierry Reding
  0 siblings, 1 reply; 8+ messages in thread
From: Joe Hershberger @ 2019-04-15 21:24 UTC (permalink / raw)
  To: u-boot

On Mon, Apr 15, 2019 at 4:11 AM Thierry Reding <thierry.reding@gmail.com> wrote:
>
> From: Thierry Reding <treding@nvidia.com>
>
> In order for the device to use the proper MAC address, which can have
> been configured in the environment prior to the device being registered,
> ensure that the MAC address is written after the device has been probed.
> For devices that are registered before the network stack is initialized,
> this is already done during eth_initialize(). If the Ethernet device is
> on a bus that is not initialized on early boot, such as PCI, the device
> is not available at the time eth_initialize() is called, so we need the
> MAC address programming to also happen after probe.

I would expect to also see a removal of the call in eth_initialize,
right? Why do it both places?

> Signed-off-by: Thierry Reding <treding@nvidia.com>
> ---
>  net/eth-uclass.c | 2 ++
>  1 file changed, 2 insertions(+)
>
> diff --git a/net/eth-uclass.c b/net/eth-uclass.c
> index 2ef20df19203..4225aabf1fa1 100644
> --- a/net/eth-uclass.c
> +++ b/net/eth-uclass.c
> @@ -524,6 +524,8 @@ static int eth_post_probe(struct udevice *dev)
>  #endif
>         }
>
> +       eth_write_hwaddr(dev);
> +
>         return 0;
>  }
>
> --
> 2.21.0
>
> _______________________________________________
> U-Boot mailing list
> U-Boot at lists.denx.de
> https://lists.denx.de/listinfo/u-boot

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [U-Boot] [PATCH 3/3] net: eth-uclass: Support device tree MAC addresses
  2019-04-15  9:10 ` [U-Boot] [PATCH 3/3] net: eth-uclass: Support device tree MAC addresses Thierry Reding
@ 2019-04-15 21:26   ` Joe Hershberger
  0 siblings, 0 replies; 8+ messages in thread
From: Joe Hershberger @ 2019-04-15 21:26 UTC (permalink / raw)
  To: u-boot

On Mon, Apr 15, 2019 at 4:11 AM Thierry Reding <thierry.reding@gmail.com> wrote:
>
> From: Thierry Reding <treding@nvidia.com>
>
> Add the standard Ethernet device tree bindings (imported from v5.0 of
> the Linux kernel) and implement support for reading the MAC address for
> Ethernet devices in the Ethernet uclass. If the "mac-address" property
> exists, the MAC address will be parsed from that. If that property does
> not exist, the "local-mac-address" property will be tried as fallback.
>
> MAC addresses from device tree take precedence over the ones stored in
> a network interface card's ROM.
>
> Signed-off-by: Thierry Reding <treding@nvidia.com>

Acked-by: Joe Hershberger <joe.hershberger@ni.com>

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [U-Boot] [PATCH 1/3] dm: core: Add dev_read_bytes()
  2019-04-15 21:21 ` [U-Boot] [PATCH 1/3] dm: core: Add dev_read_bytes() Joe Hershberger
@ 2019-04-16  8:06   ` Thierry Reding
  0 siblings, 0 replies; 8+ messages in thread
From: Thierry Reding @ 2019-04-16  8:06 UTC (permalink / raw)
  To: u-boot

On Mon, Apr 15, 2019 at 09:21:45PM +0000, Joe Hershberger wrote:
> On Mon, Apr 15, 2019 at 4:11 AM Thierry Reding <thierry.reding@gmail.com> wrote:
> >
> > From: Thierry Reding <treding@nvidia.com>
> >
> > This function can be used to read a binary property into a buffer. One
> > example where this is needed is to read a MAC address from device tree.
> >
> > Signed-off-by: Thierry Reding <treding@nvidia.com>
> 
> Is there a reason dev_read_u8_array_ptr is insuffient?

No, it's perfectly suitable, I just hadn't seen it.

Thierry
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: not available
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20190416/c8e64ee6/attachment.sig>

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [U-Boot] [PATCH 2/3] net: eth-uclass: Write MAC address to hardware after probe
  2019-04-15 21:24   ` Joe Hershberger
@ 2019-04-16  8:21     ` Thierry Reding
  0 siblings, 0 replies; 8+ messages in thread
From: Thierry Reding @ 2019-04-16  8:21 UTC (permalink / raw)
  To: u-boot

On Mon, Apr 15, 2019 at 09:24:00PM +0000, Joe Hershberger wrote:
> On Mon, Apr 15, 2019 at 4:11 AM Thierry Reding <thierry.reding@gmail.com> wrote:
> >
> > From: Thierry Reding <treding@nvidia.com>
> >
> > In order for the device to use the proper MAC address, which can have
> > been configured in the environment prior to the device being registered,
> > ensure that the MAC address is written after the device has been probed.
> > For devices that are registered before the network stack is initialized,
> > this is already done during eth_initialize(). If the Ethernet device is
> > on a bus that is not initialized on early boot, such as PCI, the device
> > is not available at the time eth_initialize() is called, so we need the
> > MAC address programming to also happen after probe.
> 
> I would expect to also see a removal of the call in eth_initialize,
> right? Why do it both places?

I'm hesitant to do that. eth_initialize() happens after eth_post_probe()
for devices that are on a fixed bus and there may be code setting up the
MAC address that runs between eth_post_probe() and eth_initialize(). If
we don't write the MAC address down to hardware in eth_initialize(), we
may end up regressing those boards.

Thierry

> > Signed-off-by: Thierry Reding <treding@nvidia.com>
> > ---
> >  net/eth-uclass.c | 2 ++
> >  1 file changed, 2 insertions(+)
> >
> > diff --git a/net/eth-uclass.c b/net/eth-uclass.c
> > index 2ef20df19203..4225aabf1fa1 100644
> > --- a/net/eth-uclass.c
> > +++ b/net/eth-uclass.c
> > @@ -524,6 +524,8 @@ static int eth_post_probe(struct udevice *dev)
> >  #endif
> >         }
> >
> > +       eth_write_hwaddr(dev);
> > +
> >         return 0;
> >  }
> >
> > --
> > 2.21.0
> >
> > _______________________________________________
> > U-Boot mailing list
> > U-Boot at lists.denx.de
> > https://lists.denx.de/listinfo/u-boot
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: not available
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20190416/a61fef90/attachment.sig>

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2019-04-16  8:21 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-04-15  9:10 [U-Boot] [PATCH 1/3] dm: core: Add dev_read_bytes() Thierry Reding
2019-04-15  9:10 ` [U-Boot] [PATCH 2/3] net: eth-uclass: Write MAC address to hardware after probe Thierry Reding
2019-04-15 21:24   ` Joe Hershberger
2019-04-16  8:21     ` Thierry Reding
2019-04-15  9:10 ` [U-Boot] [PATCH 3/3] net: eth-uclass: Support device tree MAC addresses Thierry Reding
2019-04-15 21:26   ` Joe Hershberger
2019-04-15 21:21 ` [U-Boot] [PATCH 1/3] dm: core: Add dev_read_bytes() Joe Hershberger
2019-04-16  8:06   ` Thierry Reding

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.