From patchwork Wed May 17 01:55:21 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marek Vasut X-Patchwork-Id: 1782395 X-Patchwork-Delegate: marek.vasut@gmail.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de (client-ip=85.214.62.61; helo=phobos.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=denx.de header.i=@denx.de header.a=rsa-sha256 header.s=phobos-20191101 header.b=YH1TpxPO; dkim=pass (2048-bit key) header.d=denx.de header.i=@denx.de header.a=rsa-sha256 header.s=phobos-20191101 header.b=hD3X7pbT; dkim-atps=neutral Received: from phobos.denx.de (phobos.denx.de [85.214.62.61]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-384) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4QLbmJ0pz9z20dq for ; Wed, 17 May 2023 11:55:42 +1000 (AEST) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id 82D5A866A0; Wed, 17 May 2023 03:55:36 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=denx.de Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=denx.de; s=phobos-20191101; t=1684288536; bh=+t9CdEXx7RQq5JSW5bfc5xd+O/8gxihxcxPh/muPNXQ=; h=From:To:Cc:Subject:Date:List-Id:List-Unsubscribe:List-Archive: List-Post:List-Help:List-Subscribe:From; b=YH1TpxPOfdpwMOvlUgKvYCCyZPmaZ98LMqc0TqhmIy9JdPj2H6hSVeHwekuRaVrJF zz4IjiYES2nvINJKoCJhKfCh7e1tGl2LR09INbe8hX395bISQBQQPwA6x9HKIO4r5j Nb9a+AsPAk32Jlv/Wqy9e8tj5an8NF0eLXRisWiJEVnDyTy1YLii0Pr10DS2477SVr zZ0hGgCSqUXRhi13RpCD5M19WTJsAqCGdEcivC4A9eutL0GF4XuuKn/cd8yzNSWRHC hKzBoW5wi8gRtfjjOhnHiX5LS1OqAD6hS7CVAvAHgF/CABmRcSEQtAYn4eLy6y10U/ qSHaK5c1KGE5Q== Received: from tr.lan (ip-86-49-120-218.bb.vodafone.cz [86.49.120.218]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) (No client certificate requested) (Authenticated sender: marex@denx.de) by phobos.denx.de (Postfix) with ESMTPSA id 1FB9686180; Wed, 17 May 2023 03:55:35 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=denx.de; s=phobos-20191101; t=1684288535; bh=+t9CdEXx7RQq5JSW5bfc5xd+O/8gxihxcxPh/muPNXQ=; h=From:To:Cc:Subject:Date:From; b=hD3X7pbTlmHw+Py8o3qqsA+B+ugr+RWQXJlzbgCXkUtqH4/YxIICLp+gvTJiMO+5/ +dhePzL+EL8d8vFokhd0BWVPth/5J9f3DJtR5zWkKffSo9KZeDc7AIMjtp3BaJBKbz b52jKN4yg/fcYFo8m0dG5yCe8qpg2NjpeRv7VQu+6w7VzAeCFK2utznx4TMbyemcQ/ rz6krOUmB5gmBOG3a1f5B4IuHAtjgmsgRto74+zpEsn0P41GQNoh4H2qPyBCuiKN2p 4a7Rk7DiUgEcCuiPeoO9/QUAp4ROmlybeDBy1AI2kjILXfN6NA9CBcmYvXPVz3G7qq oco4mgnGp+Www== From: Marek Vasut To: u-boot@lists.denx.de Cc: Marek Vasut , Kevin Hilman , Lukasz Majewski , Simon Glass Subject: [PATCH 1/4] cmd: bind: Add unbind command with driver filter Date: Wed, 17 May 2023 03:55:21 +0200 Message-Id: <20230517015524.1039361-1-marex@denx.de> X-Mailer: git-send-email 2.39.2 MIME-Version: 1.0 X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.39 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" X-Virus-Scanned: clamav-milter 0.103.8 at phobos.denx.de X-Virus-Status: Clean Extend the driver core to perform lookup by both OF node and driver bound to the node. Use this to look up specific device instances to unbind from nodes in the unbind command. One example where this is needed is USB peripheral controller, which may have multiple gadget drivers bound to it. The unbind command has to select that specific gadget driver instance to unbind from the controller, not unbind the controller driver itself from the controller. USB ethernet gadget usage looks as follows with this change. Notice the extra 'usb_ether' addition in the 'unbind' command at the end. " bind /soc/usb-otg@49000000 usb_ether setenv ethact usb_ether setenv loadaddr 0xc2000000 setenv ipaddr 10.0.0.2 setenv serverip 10.0.0.1 setenv netmask 255.255.255.0 tftpboot 0xc2000000 10.0.0.1:test.file unbind /soc/usb-otg@49000000 usb_ether " Signed-off-by: Marek Vasut --- Cc: Kevin Hilman Cc: Lukasz Majewski Cc: Marek Vasut Cc: Simon Glass --- cmd/bind.c | 10 +++++----- drivers/core/device.c | 20 +++++++++++++++----- include/dm/device.h | 17 +++++++++++++++++ 3 files changed, 37 insertions(+), 10 deletions(-) diff --git a/cmd/bind.c b/cmd/bind.c index 4d1b7885e60..3137cdf6cb5 100644 --- a/cmd/bind.c +++ b/cmd/bind.c @@ -162,7 +162,7 @@ static int bind_by_node_path(const char *path, const char *drv_name) return 0; } -static int unbind_by_node_path(const char *path) +static int unbind_by_node_path(const char *path, const char *drv_name) { struct udevice *dev; int ret; @@ -174,7 +174,7 @@ static int unbind_by_node_path(const char *path) return -EINVAL; } - ret = device_find_global_by_ofnode(ofnode, &dev); + ret = device_find_global_by_ofnode_driver(ofnode, drv_name, &dev); if (!dev || ret) { printf("Cannot find a device with path %s\n", path); @@ -214,9 +214,9 @@ static int do_bind_unbind(struct cmd_tbl *cmdtp, int flag, int argc, return CMD_RET_USAGE; ret = bind_by_node_path(argv[1], argv[2]); } else if (by_node && !bind) { - if (argc != 2) + if (argc != 2 && argc != 3) return CMD_RET_USAGE; - ret = unbind_by_node_path(argv[1]); + ret = unbind_by_node_path(argv[1], argv[2]); } else if (!by_node && bind) { int index = (argc > 2) ? dectoul(argv[2], NULL) : 0; @@ -251,7 +251,7 @@ U_BOOT_CMD( U_BOOT_CMD( unbind, 4, 0, do_bind_unbind, "Unbind a device from a driver", - "\n" + " []\n" "unbind \n" "unbind \n" ); diff --git a/drivers/core/device.c b/drivers/core/device.c index 6e26b64fb81..52fceb69341 100644 --- a/drivers/core/device.c +++ b/drivers/core/device.c @@ -877,15 +877,17 @@ int device_get_child_by_of_offset(const struct udevice *parent, int node, } static struct udevice *_device_find_global_by_ofnode(struct udevice *parent, - ofnode ofnode) + ofnode ofnode, + const char *drv) { struct udevice *dev, *found; - if (ofnode_equal(dev_ofnode(parent), ofnode)) + if (ofnode_equal(dev_ofnode(parent), ofnode) && + (!drv || (drv && !strcmp(parent->driver->name, drv)))) return parent; device_foreach_child(dev, parent) { - found = _device_find_global_by_ofnode(dev, ofnode); + found = _device_find_global_by_ofnode(dev, ofnode, drv); if (found) return found; } @@ -895,7 +897,15 @@ static struct udevice *_device_find_global_by_ofnode(struct udevice *parent, int device_find_global_by_ofnode(ofnode ofnode, struct udevice **devp) { - *devp = _device_find_global_by_ofnode(gd->dm_root, ofnode); + *devp = _device_find_global_by_ofnode(gd->dm_root, ofnode, NULL); + + return *devp ? 0 : -ENOENT; +} + +int device_find_global_by_ofnode_driver(ofnode ofnode, const char *drv, + struct udevice **devp) +{ + *devp = _device_find_global_by_ofnode(gd->dm_root, ofnode, drv); return *devp ? 0 : -ENOENT; } @@ -904,7 +914,7 @@ int device_get_global_by_ofnode(ofnode ofnode, struct udevice **devp) { struct udevice *dev; - dev = _device_find_global_by_ofnode(gd->dm_root, ofnode); + dev = _device_find_global_by_ofnode(gd->dm_root, ofnode, NULL); return device_get_device_tail(dev, dev ? 0 : -ENOENT, devp); } diff --git a/include/dm/device.h b/include/dm/device.h index b86bf90609b..5f05ae0924f 100644 --- a/include/dm/device.h +++ b/include/dm/device.h @@ -748,6 +748,23 @@ int device_get_child_by_of_offset(const struct udevice *parent, int of_offset, int device_find_global_by_ofnode(ofnode node, struct udevice **devp); +/** + * device_find_global_by_ofnode_driver() - Get a device based on ofnode and driver + * + * Locates a device by its device tree ofnode and driver currently bound to + * it, searching globally throughout the all driver model devices. + * + * The device is NOT probed + * + * @node: Device tree ofnode to find + * @drv: Driver name bound to device + * @devp: Returns pointer to device if found, otherwise this is set to NULL + * Return: 0 if OK, -ve on error + */ + +int device_find_global_by_ofnode_driver(ofnode node, const char *drv, + struct udevice **devp); + /** * device_get_global_by_ofnode() - Get a device based on ofnode * From patchwork Wed May 17 01:55:22 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marek Vasut X-Patchwork-Id: 1782396 X-Patchwork-Delegate: marek.vasut@gmail.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de (client-ip=2a01:238:438b:c500:173d:9f52:ddab:ee01; helo=phobos.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=denx.de header.i=@denx.de header.a=rsa-sha256 header.s=phobos-20191101 header.b=opef7vZ0; dkim=pass (2048-bit key) header.d=denx.de header.i=@denx.de header.a=rsa-sha256 header.s=phobos-20191101 header.b=dFRC7c+8; dkim-atps=neutral Received: from phobos.denx.de (phobos.denx.de [IPv6:2a01:238:438b:c500:173d:9f52:ddab:ee01]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-384) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4QLbmd5hRSz20dq for ; Wed, 17 May 2023 11:56:01 +1000 (AEST) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id DBA39866A5; Wed, 17 May 2023 03:55:37 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=denx.de Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=denx.de; s=phobos-20191101; t=1684288538; bh=anwkHOHiJlXiLHxKYQ16k/onzwYC8rYlBtCVH50aKNw=; h=From:To:Cc:Subject:Date:In-Reply-To:References:List-Id: List-Unsubscribe:List-Archive:List-Post:List-Help:List-Subscribe: From; b=opef7vZ0sMBoUAQglDOvrZGGuSaSwm54JgrEQbmOwvuC0R+C2kyGHpHP45Z+23T1p u1eYBQL4IkOWntN3qMZNxGxJNgVCKB6LnvcUdZp2cvTVhxuf9VI9tZtpXaO3u0L+Rq 3LSyrL/c2roKVtLxk7oG/prF9sX6Z2QUUOzdnUAFVVwElnwtBBGbQuBCVWThTyYOqp MDb9l5nHzMAG5ZH6g/BeneMXp/EcwTlIZIAx28n50szsY3ewpHQXmnc2yyh2zU9sJi lywteLa2SAPJWHmsRtW1fqKndQCyWrsRfO6GcWFiOkGwxY6rTRtmDUdu91FYiKaQ0k DPu+oawNzZQXw== Received: from tr.lan (ip-86-49-120-218.bb.vodafone.cz [86.49.120.218]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) (No client certificate requested) (Authenticated sender: marex@denx.de) by phobos.denx.de (Postfix) with ESMTPSA id 7865D861BA; Wed, 17 May 2023 03:55:35 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=denx.de; s=phobos-20191101; t=1684288535; bh=anwkHOHiJlXiLHxKYQ16k/onzwYC8rYlBtCVH50aKNw=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=dFRC7c+8CXJo9DULs7nQvfD5kxFdkCQ4qtWkQwBs8tvXCgBxyo7HFcBYCg8ck71Ij Xr/5P8x9gZiUldLQVvEr8/Ywm4BREyhJ7RdJvZUdQxw2Tq1e4/hcejKCqB1ar58GjT RPk8jGuITLHuS8HUx4E2PSp8J5I2PLflEVVgOGllgqBdKkIT9Qp8SKB2xwEfd2KLY/ vJTHje0pRihiHOuFoxxQFaJDauXhvHtWfz9+Ti87xf4yDPf79Bw7naEtGYffBVdYyJ uwlzywlXXWcbhyy3MTEnvmFgT73VkONaZPh8m9nhdcbdRE2rSzp1GX9RpkP/pqsVLe 6aBLmOT9U+gog== From: Marek Vasut To: u-boot@lists.denx.de Cc: Marek Vasut , Kevin Hilman , Lukasz Majewski , Simon Glass Subject: [PATCH 2/4] usb: gadget: ether: Inline functions used once Date: Wed, 17 May 2023 03:55:22 +0200 Message-Id: <20230517015524.1039361-2-marex@denx.de> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230517015524.1039361-1-marex@denx.de> References: <20230517015524.1039361-1-marex@denx.de> MIME-Version: 1.0 X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.39 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" X-Virus-Scanned: clamav-milter 0.103.8 at phobos.denx.de X-Virus-Status: Clean These functions here are only ever called once since drop of non-DM networking code. Inline them. No functional change. Signed-off-by: Marek Vasut --- Cc: Kevin Hilman Cc: Lukasz Majewski Cc: Marek Vasut Cc: Simon Glass --- drivers/usb/gadget/ether.c | 48 +++++++------------------------------- 1 file changed, 9 insertions(+), 39 deletions(-) diff --git a/drivers/usb/gadget/ether.c b/drivers/usb/gadget/ether.c index 85c971e4c43..88c656c4dc0 100644 --- a/drivers/usb/gadget/ether.c +++ b/drivers/usb/gadget/ether.c @@ -2273,10 +2273,11 @@ fail: } /*-------------------------------------------------------------------------*/ -static void _usb_eth_halt(struct ether_priv *priv); +static void usb_eth_stop(struct udevice *dev); -static int _usb_eth_init(struct ether_priv *priv) +static int usb_eth_start(struct udevice *udev) { + struct ether_priv *priv = dev_get_priv(udev); struct eth_dev *dev = &priv->ethdev; struct usb_gadget *gadget; unsigned long ts; @@ -2347,12 +2348,13 @@ static int _usb_eth_init(struct ether_priv *priv) rx_submit(dev, dev->rx_req, 0); return 0; fail: - _usb_eth_halt(priv); + usb_eth_stop(udev); return -1; } -static int _usb_eth_send(struct ether_priv *priv, void *packet, int length) +static int usb_eth_send(struct udevice *udev, void *packet, int length) { + struct ether_priv *priv = dev_get_priv(udev); int retval; void *rndis_pkt = NULL; struct eth_dev *dev = &priv->ethdev; @@ -2419,15 +2421,9 @@ drop: return -ENOMEM; } -static int _usb_eth_recv(struct ether_priv *priv) -{ - usb_gadget_handle_interrupts(0); - - return 0; -} - -static void _usb_eth_halt(struct ether_priv *priv) +static void usb_eth_stop(struct udevice *udev) { + struct ether_priv *priv = dev_get_priv(udev); struct eth_dev *dev = &priv->ethdev; /* If the gadget not registered, simple return */ @@ -2459,31 +2455,12 @@ static void _usb_eth_halt(struct ether_priv *priv) usb_gadget_release(0); } -static int usb_eth_start(struct udevice *dev) -{ - struct ether_priv *priv = dev_get_priv(dev); - - return _usb_eth_init(priv); -} - -static int usb_eth_send(struct udevice *dev, void *packet, int length) -{ - struct ether_priv *priv = dev_get_priv(dev); - - return _usb_eth_send(priv, packet, length); -} - static int usb_eth_recv(struct udevice *dev, int flags, uchar **packetp) { struct ether_priv *priv = dev_get_priv(dev); struct eth_dev *ethdev = &priv->ethdev; - int ret; - ret = _usb_eth_recv(priv); - if (ret) { - pr_err("error packet receive\n"); - return ret; - } + usb_gadget_handle_interrupts(0); if (packet_received) { if (ethdev->rx_req) { @@ -2509,13 +2486,6 @@ static int usb_eth_free_pkt(struct udevice *dev, uchar *packet, return rx_submit(ethdev, ethdev->rx_req, 0); } -static void usb_eth_stop(struct udevice *dev) -{ - struct ether_priv *priv = dev_get_priv(dev); - - _usb_eth_halt(priv); -} - static int usb_eth_probe(struct udevice *dev) { struct ether_priv *priv = dev_get_priv(dev); From patchwork Wed May 17 01:55:23 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marek Vasut X-Patchwork-Id: 1782397 X-Patchwork-Delegate: marek.vasut@gmail.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de (client-ip=2a01:238:438b:c500:173d:9f52:ddab:ee01; helo=phobos.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=denx.de header.i=@denx.de header.a=rsa-sha256 header.s=phobos-20191101 header.b=x6ns30ck; dkim=pass (2048-bit key) header.d=denx.de header.i=@denx.de header.a=rsa-sha256 header.s=phobos-20191101 header.b=AHsB7tL/; dkim-atps=neutral Received: from phobos.denx.de (phobos.denx.de [IPv6:2a01:238:438b:c500:173d:9f52:ddab:ee01]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-384) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4QLbmq0kBBz20dq for ; Wed, 17 May 2023 11:56:11 +1000 (AEST) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id 34462866AB; Wed, 17 May 2023 03:55:39 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=denx.de Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=denx.de; s=phobos-20191101; t=1684288539; bh=f45JjcQN6cSj4kgkC3JNSdMqveCrFUh6rdk14mQaHJo=; h=From:To:Cc:Subject:Date:In-Reply-To:References:List-Id: List-Unsubscribe:List-Archive:List-Post:List-Help:List-Subscribe: From; b=x6ns30ckT/1VJ7sQisnMcpfkEOhEsYcEgP8azUsGg1A5ApEwslemYuL2M3r8/h23H Xu+SKuxgY5/WSMVx4M2Uq3vUdpN3XLeikmDFifdQTQcNArT/qtsV6T4TzERuowa15C HaNA5km3JHSEGUrIetbLn6nwyccU6kNKZ11JJgtsPsB8EGvwUaC0uERI79cPLPQvmh ukCrLp4VI2Za+VQuID1BMt82p/VW+jI2TvQrr61PRBUNu691ZzlTa8+H7Qyf1QbEw1 0ZPC3B9UfOQI9m2qDyRrNJzjuWqPgCgN8QoIcsFYZWxm87xBF1stqrunWp/mwjfHXh fvF4h9I0iu3pg== Received: from tr.lan (ip-86-49-120-218.bb.vodafone.cz [86.49.120.218]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) (No client certificate requested) (Authenticated sender: marex@denx.de) by phobos.denx.de (Postfix) with ESMTPSA id C52A48621A; Wed, 17 May 2023 03:55:35 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=denx.de; s=phobos-20191101; t=1684288536; bh=f45JjcQN6cSj4kgkC3JNSdMqveCrFUh6rdk14mQaHJo=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=AHsB7tL/4YkQUpb5zqo+fnlVdSWwuXrXRdk2atol3lTDWPsJzkpinsFzEhy4WE9ha 5tKvv57tkzPqev5cFUb8LWL/4+BUvHhh8/T/dd1kaTV7CqGtoqpLxZpyIzSCQO4G35 lZPpEZP4GQw+1LCP5nQ/WLu+Iuh5CziFFZBJ3B2ePGp6lVKDCMDUcG85rU6HH/+Orm DUES+QUffQCoPyxKYMcwQ2jywIuAUaVcLLH4v71h3+exENuc5r9tfb+BgKdZMqcP0x 0NqdaR9Zc3GiOUZV+m6jZ5c9Rrmrx07T6OuLjfPHng2i/CYmbwasyF8vQMnGVdvYUj rwvmvwbHGR56Q== From: Marek Vasut To: u-boot@lists.denx.de Cc: Marek Vasut , Kevin Hilman , Lukasz Majewski , Simon Glass Subject: [PATCH 3/4] usb: gadget: ether: Move probe function above driver structure Date: Wed, 17 May 2023 03:55:23 +0200 Message-Id: <20230517015524.1039361-3-marex@denx.de> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230517015524.1039361-1-marex@denx.de> References: <20230517015524.1039361-1-marex@denx.de> MIME-Version: 1.0 X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.39 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" X-Virus-Scanned: clamav-milter 0.103.8 at phobos.denx.de X-Virus-Status: Clean Move the driver probe function above the driver structure, so it can be placed alongside other related functions, like upcoming remove function. No functional change. Signed-off-by: Marek Vasut --- Cc: Kevin Hilman Cc: Lukasz Majewski Cc: Marek Vasut Cc: Simon Glass --- drivers/usb/gadget/ether.c | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/drivers/usb/gadget/ether.c b/drivers/usb/gadget/ether.c index 88c656c4dc0..2040b5b5081 100644 --- a/drivers/usb/gadget/ether.c +++ b/drivers/usb/gadget/ether.c @@ -2486,20 +2486,6 @@ static int usb_eth_free_pkt(struct udevice *dev, uchar *packet, return rx_submit(ethdev, ethdev->rx_req, 0); } -static int usb_eth_probe(struct udevice *dev) -{ - struct ether_priv *priv = dev_get_priv(dev); - struct eth_pdata *pdata = dev_get_plat(dev); - - priv->netdev = dev; - l_priv = priv; - - get_ether_addr(CONFIG_USBNET_DEV_ADDR, pdata->enetaddr); - eth_env_set_enetaddr("usbnet_devaddr", pdata->enetaddr); - - return 0; -} - static const struct eth_ops usb_eth_ops = { .start = usb_eth_start, .send = usb_eth_send, @@ -2528,6 +2514,20 @@ int usb_ether_init(void) return 0; } +static int usb_eth_probe(struct udevice *dev) +{ + struct ether_priv *priv = dev_get_priv(dev); + struct eth_pdata *pdata = dev_get_plat(dev); + + priv->netdev = dev; + l_priv = priv; + + get_ether_addr(CONFIG_USBNET_DEV_ADDR, pdata->enetaddr); + eth_env_set_enetaddr("usbnet_devaddr", pdata->enetaddr); + + return 0; +} + U_BOOT_DRIVER(eth_usb) = { .name = "usb_ether", .id = UCLASS_ETH, From patchwork Wed May 17 01:55:24 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marek Vasut X-Patchwork-Id: 1782398 X-Patchwork-Delegate: marek.vasut@gmail.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de (client-ip=85.214.62.61; helo=phobos.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=denx.de header.i=@denx.de header.a=rsa-sha256 header.s=phobos-20191101 header.b=DgxTgPsi; dkim=pass (2048-bit key) header.d=denx.de header.i=@denx.de header.a=rsa-sha256 header.s=phobos-20191101 header.b=NSHTXr/k; dkim-atps=neutral Received: from phobos.denx.de (phobos.denx.de [85.214.62.61]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-384)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4QLbn53CWzz20dq for ; Wed, 17 May 2023 11:56:25 +1000 (AEST) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id C3C9A8669F; Wed, 17 May 2023 03:55:42 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=denx.de Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=denx.de; s=phobos-20191101; t=1684288542; bh=rApkpaYWUwbGv7ErufZoyjYxLle4WKoRNj6qvu5IS5A=; h=From:To:Cc:Subject:Date:In-Reply-To:References:List-Id: List-Unsubscribe:List-Archive:List-Post:List-Help:List-Subscribe: From; b=DgxTgPsi5WxqN6JnOWd5B/3yzL7Es7Yu3KcV8b/7/ZY07405y2yyn9V3crJLKMAXo ypvWORdbFZNdicXbVedb5U84UGxWLHzA4hLad3fz4iuKPky9zlX2Dos+swRfAlaoP/ YBUWZvfa7ZJV2UjuWvAL110fQo6QqG9I/TxUQq7RaFeGiZTBOJqkbtg3ce5g/uikxF wLujDWqlYpfa4OyYXC6Jg2ZU2CQoEvwGXN367u+1FRVOvCm6//so8DVaTzvC7QFRNJ tOxDpkcv1ksatzBm7JxbJekUGnWowhIFOhY0xMN6VbFzQebEU2PAuwPdJkiIb4iTWN NTrLTi8KmJGGA== Received: from tr.lan (ip-86-49-120-218.bb.vodafone.cz [86.49.120.218]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) (No client certificate requested) (Authenticated sender: marex@denx.de) by phobos.denx.de (Postfix) with ESMTPSA id 217578669E; Wed, 17 May 2023 03:55:36 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=denx.de; s=phobos-20191101; t=1684288536; bh=rApkpaYWUwbGv7ErufZoyjYxLle4WKoRNj6qvu5IS5A=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=NSHTXr/k2JRz/gICmUEDD41l7X/gm5MCl5UD11Py0LnSxRQ4YeBYIxgv94YE+f25/ s2OOwNcTHkwdSJJs1E1VXi6ZkRdomBwIQ8TFcDoibqnMu+3K/RnTRvrlVQH4fISHAE bkUoX/9G5MEw+RMv7aXGnsKEbWxXAdVEIQhbQD29sZNrM2MXTxFTYqK33LGmh9Nhtq wBAzGcuKhGkqCtaEY46Pf2n+pGni3zOzEYC/YYYSAj2Kv5iOi0EWJwuB6X4YdAZly0 Rc9rEgJdVAsCLSlGAxGr66r/iFH25hTKguJZ3WEYL8UfgoAZqoqR95SJmgBzDbQdMg gV+haUTuHwnVA== From: Marek Vasut To: u-boot@lists.denx.de Cc: Marek Vasut , Kevin Hilman , Lukasz Majewski , Simon Glass Subject: [PATCH 4/4] usb: gadget: ether: Handle gadget driver registration in probe and remove Date: Wed, 17 May 2023 03:55:24 +0200 Message-Id: <20230517015524.1039361-4-marex@denx.de> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230517015524.1039361-1-marex@denx.de> References: <20230517015524.1039361-1-marex@denx.de> MIME-Version: 1.0 X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.39 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" X-Virus-Scanned: clamav-milter 0.103.8 at phobos.denx.de X-Virus-Status: Clean Move the ethernet gadget driver registration and removal from ethernet bind and unbind callbacks into driver DM probe and remove callbacks. This way, when the driver is bound, which is triggered deliberately using 'bind' command, the USB ethernet gadget driver is instantiated and bound to the matching UDC. In reverse, when the driver is unbound, which is again triggered deliberately using 'unbind' command, the USB ethernet gadget driver instance is removed. Effectively, this now behaves like running either 'ums' or 'dfu' or any other commands utilizing USB gadget functionality. This also drops use of usb_gadget_initialize()/usb_gadget_release(), which are helper functions implemented in the UDC uclass to bind and unbind UDC drivers to controllers from U-Boot command line. Those have no place in drivers. Signed-off-by: Marek Vasut --- NOTE: This must be thoroughly tested. --- Cc: Kevin Hilman Cc: Lukasz Majewski Cc: Marek Vasut Cc: Simon Glass --- drivers/usb/gadget/ether.c | 95 ++++++++++++++++++++------------------ 1 file changed, 51 insertions(+), 44 deletions(-) diff --git a/drivers/usb/gadget/ether.c b/drivers/usb/gadget/ether.c index 2040b5b5081..55853fa98fd 100644 --- a/drivers/usb/gadget/ether.c +++ b/drivers/usb/gadget/ether.c @@ -2281,49 +2281,8 @@ static int usb_eth_start(struct udevice *udev) struct eth_dev *dev = &priv->ethdev; struct usb_gadget *gadget; unsigned long ts; - int ret; unsigned long timeout = USB_CONNECT_TIMEOUT; - ret = usb_gadget_initialize(0); - if (ret) - return ret; - - /* Configure default mac-addresses for the USB ethernet device */ -#ifdef CONFIG_USBNET_DEV_ADDR - strlcpy(dev_addr, CONFIG_USBNET_DEV_ADDR, sizeof(dev_addr)); -#endif -#ifdef CONFIG_USBNET_HOST_ADDR - strlcpy(host_addr, CONFIG_USBNET_HOST_ADDR, sizeof(host_addr)); -#endif - /* Check if the user overruled the MAC addresses */ - if (env_get("usbnet_devaddr")) - strlcpy(dev_addr, env_get("usbnet_devaddr"), - sizeof(dev_addr)); - - if (env_get("usbnet_hostaddr")) - strlcpy(host_addr, env_get("usbnet_hostaddr"), - sizeof(host_addr)); - - if (!is_eth_addr_valid(dev_addr)) { - pr_err("Need valid 'usbnet_devaddr' to be set"); - goto fail; - } - if (!is_eth_addr_valid(host_addr)) { - pr_err("Need valid 'usbnet_hostaddr' to be set"); - goto fail; - } - - priv->eth_driver.speed = DEVSPEED; - priv->eth_driver.bind = eth_bind; - priv->eth_driver.unbind = eth_unbind; - priv->eth_driver.setup = eth_setup; - priv->eth_driver.reset = eth_disconnect; - priv->eth_driver.disconnect = eth_disconnect; - priv->eth_driver.suspend = eth_suspend; - priv->eth_driver.resume = eth_resume; - if (usb_gadget_register_driver(&priv->eth_driver) < 0) - goto fail; - dev->network_started = 0; packet_received = 0; @@ -2450,9 +2409,6 @@ static void usb_eth_stop(struct udevice *udev) usb_gadget_handle_interrupts(0); dev->network_started = 0; } - - usb_gadget_unregister_driver(&priv->eth_driver); - usb_gadget_release(0); } static int usb_eth_recv(struct udevice *dev, int flags, uchar **packetp) @@ -2518,6 +2474,7 @@ static int usb_eth_probe(struct udevice *dev) { struct ether_priv *priv = dev_get_priv(dev); struct eth_pdata *pdata = dev_get_plat(dev); + int ret; priv->netdev = dev; l_priv = priv; @@ -2525,6 +2482,55 @@ static int usb_eth_probe(struct udevice *dev) get_ether_addr(CONFIG_USBNET_DEV_ADDR, pdata->enetaddr); eth_env_set_enetaddr("usbnet_devaddr", pdata->enetaddr); + /* Configure default mac-addresses for the USB ethernet device */ +#ifdef CONFIG_USBNET_DEV_ADDR + strlcpy(dev_addr, CONFIG_USBNET_DEV_ADDR, sizeof(dev_addr)); +#endif +#ifdef CONFIG_USBNET_HOST_ADDR + strlcpy(host_addr, CONFIG_USBNET_HOST_ADDR, sizeof(host_addr)); +#endif + /* Check if the user overruled the MAC addresses */ + if (env_get("usbnet_devaddr")) + strlcpy(dev_addr, env_get("usbnet_devaddr"), + sizeof(dev_addr)); + + if (env_get("usbnet_hostaddr")) + strlcpy(host_addr, env_get("usbnet_hostaddr"), + sizeof(host_addr)); + + if (!is_eth_addr_valid(dev_addr)) { + pr_err("Need valid 'usbnet_devaddr' to be set"); + goto fail; + } + if (!is_eth_addr_valid(host_addr)) { + pr_err("Need valid 'usbnet_hostaddr' to be set"); + goto fail; + } + + priv->eth_driver.speed = DEVSPEED; + priv->eth_driver.bind = eth_bind; + priv->eth_driver.unbind = eth_unbind; + priv->eth_driver.setup = eth_setup; + priv->eth_driver.reset = eth_disconnect; + priv->eth_driver.disconnect = eth_disconnect; + priv->eth_driver.suspend = eth_suspend; + priv->eth_driver.resume = eth_resume; + ret = usb_gadget_register_driver(&priv->eth_driver); + if (ret < 0) + goto fail; + + return 0; +fail: + usb_gadget_release(0); + return ret; +} + +static int usb_eth_remove(struct udevice *dev) +{ + struct ether_priv *priv = dev_get_priv(dev); + + usb_gadget_unregister_driver(&priv->eth_driver); + return 0; } @@ -2532,6 +2538,7 @@ U_BOOT_DRIVER(eth_usb) = { .name = "usb_ether", .id = UCLASS_ETH, .probe = usb_eth_probe, + .remove = usb_eth_remove, .ops = &usb_eth_ops, .priv_auto = sizeof(struct ether_priv), .plat_auto = sizeof(struct eth_pdata),