* [PATCH 1/6] usb: gadget: Inline usb_add_gadget_udc_release
@ 2024-08-26 14:38 Marek Vasut
2024-08-26 14:38 ` [PATCH 2/6] usb: gadget: Drop usb_udc_release() Marek Vasut
` (7 more replies)
0 siblings, 8 replies; 15+ messages in thread
From: Marek Vasut @ 2024-08-26 14:38 UTC (permalink / raw)
To: u-boot
Cc: Marek Vasut, Linus Walleij, Lukasz Majewski, Mattijs Korpershoek,
Miquel Raynal, Neil Armstrong, Nishanth Menon, Zixun LI
The release parameter of usb_add_gadget_udc_release() is never used.
The function is never called from anywhere except from a wrapper in
udc-core.c . Inline the function into the wrapper.
Signed-off-by: Marek Vasut <marek.vasut+renesas@mailbox.org>
---
Cc: Linus Walleij <linus.walleij@linaro.org>
Cc: Lukasz Majewski <lukma@denx.de>
Cc: Mattijs Korpershoek <mkorpershoek@baylibre.com>
Cc: Miquel Raynal <miquel.raynal@bootlin.com>
Cc: Neil Armstrong <neil.armstrong@linaro.org>
Cc: Nishanth Menon <nm@ti.com>
Cc: Zixun LI <admin@hifiphile.com>
---
drivers/usb/gadget/udc/udc-core.c | 20 ++------------------
include/linux/usb/gadget.h | 2 --
2 files changed, 2 insertions(+), 20 deletions(-)
diff --git a/drivers/usb/gadget/udc/udc-core.c b/drivers/usb/gadget/udc/udc-core.c
index 6bb419ae2ab..37c0ee43c52 100644
--- a/drivers/usb/gadget/udc/udc-core.c
+++ b/drivers/usb/gadget/udc/udc-core.c
@@ -166,16 +166,14 @@ static void usb_udc_release(struct device *dev)
}
/**
- * usb_add_gadget_udc_release - adds a new gadget to the udc class driver list
+ * usb_add_gadget_udc - adds a new gadget to the udc class driver list
* @parent: the parent device to this udc. Usually the controller driver's
* device.
* @gadget: the gadget to be added to the list.
- * @release: a gadget release function.
*
* Returns zero on success, negative errno otherwise.
*/
-int usb_add_gadget_udc_release(struct device *parent, struct usb_gadget *gadget,
- void (*release)(struct device *dev))
+int usb_add_gadget_udc(struct device *parent, struct usb_gadget *gadget)
{
struct usb_udc *udc;
int ret = -ENOMEM;
@@ -205,20 +203,6 @@ int usb_add_gadget_udc_release(struct device *parent, struct usb_gadget *gadget,
err1:
return ret;
}
-EXPORT_SYMBOL_GPL(usb_add_gadget_udc_release);
-
-/**
- * usb_add_gadget_udc - adds a new gadget to the udc class driver list
- * @parent: the parent device to this udc. Usually the controller
- * driver's device.
- * @gadget: the gadget to be added to the list
- *
- * Returns zero on success, negative errno otherwise.
- */
-int usb_add_gadget_udc(struct device *parent, struct usb_gadget *gadget)
-{
- return usb_add_gadget_udc_release(parent, gadget, NULL);
-}
EXPORT_SYMBOL_GPL(usb_add_gadget_udc);
static void usb_gadget_remove_driver(struct usb_udc *udc)
diff --git a/include/linux/usb/gadget.h b/include/linux/usb/gadget.h
index c7927df15aa..d62fba0ca02 100644
--- a/include/linux/usb/gadget.h
+++ b/include/linux/usb/gadget.h
@@ -890,8 +890,6 @@ int usb_gadget_register_driver(struct usb_gadget_driver *driver);
*/
int usb_gadget_unregister_driver(struct usb_gadget_driver *driver);
-int usb_add_gadget_udc_release(struct device *parent,
- struct usb_gadget *gadget, void (*release)(struct device *dev));
int usb_add_gadget_udc(struct device *parent, struct usb_gadget *gadget);
void usb_del_gadget_udc(struct usb_gadget *gadget);
/*-------------------------------------------------------------------------*/
--
2.45.2
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH 2/6] usb: gadget: Drop usb_udc_release()
2024-08-26 14:38 [PATCH 1/6] usb: gadget: Inline usb_add_gadget_udc_release Marek Vasut
@ 2024-08-26 14:38 ` Marek Vasut
2024-08-29 7:41 ` Mattijs Korpershoek
2024-08-26 14:38 ` [PATCH 3/6] usb: gadget: Track driver data as part of struct usb_gadget Marek Vasut
` (6 subsequent siblings)
7 siblings, 1 reply; 15+ messages in thread
From: Marek Vasut @ 2024-08-26 14:38 UTC (permalink / raw)
To: u-boot
Cc: Marek Vasut, Linus Walleij, Lukasz Majewski, Mattijs Korpershoek,
Miquel Raynal, Neil Armstrong, Nishanth Menon, Zixun LI
This callback is never called, drop it. Instead, call kfree(udc)
in usb_del_gadget_udc() to free the struct usb_udc data.
Signed-off-by: Marek Vasut <marek.vasut+renesas@mailbox.org>
---
Cc: Linus Walleij <linus.walleij@linaro.org>
Cc: Lukasz Majewski <lukma@denx.de>
Cc: Mattijs Korpershoek <mkorpershoek@baylibre.com>
Cc: Miquel Raynal <miquel.raynal@bootlin.com>
Cc: Neil Armstrong <neil.armstrong@linaro.org>
Cc: Nishanth Menon <nm@ti.com>
Cc: Zixun LI <admin@hifiphile.com>
---
drivers/usb/gadget/udc/udc-core.c | 19 +------------------
1 file changed, 1 insertion(+), 18 deletions(-)
diff --git a/drivers/usb/gadget/udc/udc-core.c b/drivers/usb/gadget/udc/udc-core.c
index 37c0ee43c52..275d6fe7be8 100644
--- a/drivers/usb/gadget/udc/udc-core.c
+++ b/drivers/usb/gadget/udc/udc-core.c
@@ -41,7 +41,6 @@ struct usb_udc {
struct list_head list;
};
-static struct class *udc_class;
static LIST_HEAD(udc_list);
DEFINE_MUTEX(udc_lock);
@@ -150,21 +149,6 @@ static inline void usb_gadget_udc_stop(struct usb_udc *udc)
udc->gadget->ops->udc_stop(udc->gadget);
}
-/**
- * usb_udc_release - release the usb_udc struct
- * @dev: the dev member within usb_udc
- *
- * This is called by driver's core in order to free memory once the last
- * reference is released.
- */
-static void usb_udc_release(struct device *dev)
-{
- struct usb_udc *udc;
-
- udc = container_of(dev, struct usb_udc, dev);
- kfree(udc);
-}
-
/**
* usb_add_gadget_udc - adds a new gadget to the udc class driver list
* @parent: the parent device to this udc. Usually the controller driver's
@@ -185,8 +169,6 @@ int usb_add_gadget_udc(struct device *parent, struct usb_gadget *gadget)
dev_set_name(&gadget->dev, "gadget");
gadget->dev.parent = parent;
- udc->dev.release = usb_udc_release;
- udc->dev.class = udc_class;
udc->dev.parent = parent;
udc->gadget = gadget;
@@ -247,6 +229,7 @@ found:
if (udc->driver)
usb_gadget_remove_driver(udc);
+ kfree(udc);
}
EXPORT_SYMBOL_GPL(usb_del_gadget_udc);
--
2.45.2
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH 3/6] usb: gadget: Track driver data as part of struct usb_gadget
2024-08-26 14:38 [PATCH 1/6] usb: gadget: Inline usb_add_gadget_udc_release Marek Vasut
2024-08-26 14:38 ` [PATCH 2/6] usb: gadget: Drop usb_udc_release() Marek Vasut
@ 2024-08-26 14:38 ` Marek Vasut
2024-08-29 7:42 ` Mattijs Korpershoek
2024-08-26 14:38 ` [PATCH 4/6] usb: gadget: Drop dev_to_usb_gadget() Marek Vasut
` (5 subsequent siblings)
7 siblings, 1 reply; 15+ messages in thread
From: Marek Vasut @ 2024-08-26 14:38 UTC (permalink / raw)
To: u-boot
Cc: Marek Vasut, Linus Walleij, Lukasz Majewski, Mattijs Korpershoek,
Miquel Raynal, Neil Armstrong, Nishanth Menon, Zixun LI
Move driver data directly into struct usb_gadget {} in preparation for
conversion of struct device to struct udevice * in struct usb_gadget.
Signed-off-by: Marek Vasut <marek.vasut+renesas@mailbox.org>
---
Cc: Linus Walleij <linus.walleij@linaro.org>
Cc: Lukasz Majewski <lukma@denx.de>
Cc: Mattijs Korpershoek <mkorpershoek@baylibre.com>
Cc: Miquel Raynal <miquel.raynal@bootlin.com>
Cc: Neil Armstrong <neil.armstrong@linaro.org>
Cc: Nishanth Menon <nm@ti.com>
Cc: Zixun LI <admin@hifiphile.com>
---
include/linux/usb/gadget.h | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/include/linux/usb/gadget.h b/include/linux/usb/gadget.h
index d62fba0ca02..a2b8520bc99 100644
--- a/include/linux/usb/gadget.h
+++ b/include/linux/usb/gadget.h
@@ -544,17 +544,18 @@ struct usb_gadget {
unsigned a_alt_hnp_support:1;
const char *name;
struct device dev;
+ void *driver_data;
unsigned quirk_ep_out_aligned_size:1;
};
static inline void set_gadget_data(struct usb_gadget *gadget, void *data)
{
- gadget->dev.driver_data = data;
+ gadget->driver_data = data;
}
static inline void *get_gadget_data(struct usb_gadget *gadget)
{
- return gadget->dev.driver_data;
+ return gadget->driver_data;
}
static inline struct usb_gadget *dev_to_usb_gadget(struct device *dev)
--
2.45.2
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH 4/6] usb: gadget: Drop dev_to_usb_gadget()
2024-08-26 14:38 [PATCH 1/6] usb: gadget: Inline usb_add_gadget_udc_release Marek Vasut
2024-08-26 14:38 ` [PATCH 2/6] usb: gadget: Drop usb_udc_release() Marek Vasut
2024-08-26 14:38 ` [PATCH 3/6] usb: gadget: Track driver data as part of struct usb_gadget Marek Vasut
@ 2024-08-26 14:38 ` Marek Vasut
2024-08-29 7:43 ` Mattijs Korpershoek
2024-08-26 14:38 ` [PATCH 5/6] usb: gadget: dwc2: Drop get/set_udc_gadget_private_data() Marek Vasut
` (4 subsequent siblings)
7 siblings, 1 reply; 15+ messages in thread
From: Marek Vasut @ 2024-08-26 14:38 UTC (permalink / raw)
To: u-boot
Cc: Marek Vasut, Linus Walleij, Lukasz Majewski, Mattijs Korpershoek,
Miquel Raynal, Neil Armstrong, Nishanth Menon, Zixun LI
This function is unused, remove it.
Signed-off-by: Marek Vasut <marek.vasut+renesas@mailbox.org>
---
Cc: Linus Walleij <linus.walleij@linaro.org>
Cc: Lukasz Majewski <lukma@denx.de>
Cc: Mattijs Korpershoek <mkorpershoek@baylibre.com>
Cc: Miquel Raynal <miquel.raynal@bootlin.com>
Cc: Neil Armstrong <neil.armstrong@linaro.org>
Cc: Nishanth Menon <nm@ti.com>
Cc: Zixun LI <admin@hifiphile.com>
---
include/linux/usb/gadget.h | 5 -----
1 file changed, 5 deletions(-)
diff --git a/include/linux/usb/gadget.h b/include/linux/usb/gadget.h
index a2b8520bc99..194025ebd12 100644
--- a/include/linux/usb/gadget.h
+++ b/include/linux/usb/gadget.h
@@ -558,11 +558,6 @@ static inline void *get_gadget_data(struct usb_gadget *gadget)
return gadget->driver_data;
}
-static inline struct usb_gadget *dev_to_usb_gadget(struct device *dev)
-{
- return container_of(dev, struct usb_gadget, dev);
-}
-
/* iterates the non-control endpoints; 'tmp' is a struct usb_ep pointer */
#define gadget_for_each_ep(tmp, gadget) \
list_for_each_entry(tmp, &(gadget)->ep_list, ep_list)
--
2.45.2
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH 5/6] usb: gadget: dwc2: Drop get/set_udc_gadget_private_data()
2024-08-26 14:38 [PATCH 1/6] usb: gadget: Inline usb_add_gadget_udc_release Marek Vasut
` (2 preceding siblings ...)
2024-08-26 14:38 ` [PATCH 4/6] usb: gadget: Drop dev_to_usb_gadget() Marek Vasut
@ 2024-08-26 14:38 ` Marek Vasut
2024-08-29 7:44 ` Mattijs Korpershoek
2024-08-26 14:38 ` [PATCH 6/6] usb: gadget: Pass struct udevice to usb_add_gadget_udc() Marek Vasut
` (3 subsequent siblings)
7 siblings, 1 reply; 15+ messages in thread
From: Marek Vasut @ 2024-08-26 14:38 UTC (permalink / raw)
To: u-boot
Cc: Marek Vasut, Linus Walleij, Lukasz Majewski, Mattijs Korpershoek,
Miquel Raynal, Neil Armstrong, Nishanth Menon, Zixun LI
Neither get_udc_gadget_private_data() nor set_udc_gadget_private_data()
is ever called anywhere, remove both.
Signed-off-by: Marek Vasut <marek.vasut+renesas@mailbox.org>
---
Cc: Linus Walleij <linus.walleij@linaro.org>
Cc: Lukasz Majewski <lukma@denx.de>
Cc: Mattijs Korpershoek <mkorpershoek@baylibre.com>
Cc: Miquel Raynal <miquel.raynal@bootlin.com>
Cc: Neil Armstrong <neil.armstrong@linaro.org>
Cc: Nishanth Menon <nm@ti.com>
Cc: Zixun LI <admin@hifiphile.com>
---
drivers/usb/gadget/dwc2_udc_otg.c | 13 -------------
1 file changed, 13 deletions(-)
diff --git a/drivers/usb/gadget/dwc2_udc_otg.c b/drivers/usb/gadget/dwc2_udc_otg.c
index 7e9dd6f4268..fbd6c9600fc 100644
--- a/drivers/usb/gadget/dwc2_udc_otg.c
+++ b/drivers/usb/gadget/dwc2_udc_otg.c
@@ -121,19 +121,6 @@ static void nuke(struct dwc2_ep *ep, int status);
static int dwc2_udc_set_halt(struct usb_ep *_ep, int value);
static void dwc2_udc_set_nak(struct dwc2_ep *ep);
-void set_udc_gadget_private_data(void *p)
-{
- debug_cond(DEBUG_SETUP != 0,
- "%s: the_controller: 0x%p, p: 0x%p\n", __func__,
- the_controller, p);
- the_controller->gadget.dev.device_data = p;
-}
-
-void *get_udc_gadget_private_data(struct usb_gadget *gadget)
-{
- return gadget->dev.device_data;
-}
-
static struct usb_ep_ops dwc2_ep_ops = {
.enable = dwc2_ep_enable,
.disable = dwc2_ep_disable,
--
2.45.2
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH 6/6] usb: gadget: Pass struct udevice to usb_add_gadget_udc()
2024-08-26 14:38 [PATCH 1/6] usb: gadget: Inline usb_add_gadget_udc_release Marek Vasut
` (3 preceding siblings ...)
2024-08-26 14:38 ` [PATCH 5/6] usb: gadget: dwc2: Drop get/set_udc_gadget_private_data() Marek Vasut
@ 2024-08-26 14:38 ` Marek Vasut
2024-08-29 8:44 ` Mattijs Korpershoek
2024-08-30 22:44 ` Linus Walleij
2024-08-26 15:47 ` [PATCH 1/6] usb: gadget: Inline usb_add_gadget_udc_release Miquel Raynal
` (2 subsequent siblings)
7 siblings, 2 replies; 15+ messages in thread
From: Marek Vasut @ 2024-08-26 14:38 UTC (permalink / raw)
To: u-boot
Cc: Marek Vasut, Linus Walleij, Lukasz Majewski, Mattijs Korpershoek,
Miquel Raynal, Neil Armstrong, Nishanth Menon, Zixun LI
Almost every UDC driver already passes casted pointer to struct udevice
usb_add_gadget_udc(), even if the behavior is not exactly correct. That
struct udevice is at risk of being corrupted in case something modified
it in the UDC core, which does not happen right now. Switch UDC core to
use struct udevice outright and drop the casts.
UX500 has to be updated slightly, as that is the last place which does
correctly use private struct device instance.
Signed-off-by: Marek Vasut <marek.vasut+renesas@mailbox.org>
---
Cc: Linus Walleij <linus.walleij@linaro.org>
Cc: Lukasz Majewski <lukma@denx.de>
Cc: Mattijs Korpershoek <mkorpershoek@baylibre.com>
Cc: Miquel Raynal <miquel.raynal@bootlin.com>
Cc: Neil Armstrong <neil.armstrong@linaro.org>
Cc: Nishanth Menon <nm@ti.com>
Cc: Zixun LI <admin@hifiphile.com>
---
drivers/usb/cdns3/gadget.c | 2 +-
drivers/usb/dwc3/gadget.c | 2 +-
drivers/usb/gadget/dwc2_udc_otg.c | 2 +-
drivers/usb/gadget/max3420_udc.c | 2 +-
drivers/usb/gadget/udc/udc-core.c | 19 +++++++++----------
drivers/usb/mtu3/mtu3_gadget.c | 2 +-
drivers/usb/musb-new/omap2430.c | 2 +-
drivers/usb/musb-new/ti-musb.c | 2 +-
drivers/usb/musb-new/ux500.c | 2 +-
include/linux/usb/gadget.h | 4 ++--
10 files changed, 19 insertions(+), 20 deletions(-)
diff --git a/drivers/usb/cdns3/gadget.c b/drivers/usb/cdns3/gadget.c
index 32b2c412068..b3513cc9bdc 100644
--- a/drivers/usb/cdns3/gadget.c
+++ b/drivers/usb/cdns3/gadget.c
@@ -2660,7 +2660,7 @@ static int cdns3_gadget_start(struct cdns3 *cdns)
}
/* add USB gadget device */
- ret = usb_add_gadget_udc((struct device *)priv_dev->dev,
+ ret = usb_add_gadget_udc(priv_dev->dev,
&priv_dev->gadget);
if (ret < 0) {
dev_err(priv_dev->dev,
diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c
index fe33e307d3e..a3c3437aa3e 100644
--- a/drivers/usb/dwc3/gadget.c
+++ b/drivers/usb/dwc3/gadget.c
@@ -2688,7 +2688,7 @@ int dwc3_gadget_init(struct dwc3 *dwc)
if (ret)
goto err4;
- ret = usb_add_gadget_udc((struct device *)dwc->dev, &dwc->gadget);
+ ret = usb_add_gadget_udc(dwc->dev, &dwc->gadget);
if (ret) {
dev_err(dwc->dev, "failed to register udc\n");
goto err4;
diff --git a/drivers/usb/gadget/dwc2_udc_otg.c b/drivers/usb/gadget/dwc2_udc_otg.c
index fbd6c9600fc..4b6327d86d1 100644
--- a/drivers/usb/gadget/dwc2_udc_otg.c
+++ b/drivers/usb/gadget/dwc2_udc_otg.c
@@ -1135,7 +1135,7 @@ static int dwc2_udc_otg_probe(struct udevice *dev)
the_controller->driver = 0;
- ret = usb_add_gadget_udc((struct device *)dev, &the_controller->gadget);
+ ret = usb_add_gadget_udc(dev, &the_controller->gadget);
return ret;
}
diff --git a/drivers/usb/gadget/max3420_udc.c b/drivers/usb/gadget/max3420_udc.c
index 557a1f0644e..7df73cd3625 100644
--- a/drivers/usb/gadget/max3420_udc.c
+++ b/drivers/usb/gadget/max3420_udc.c
@@ -836,7 +836,7 @@ static int max3420_udc_probe(struct udevice *dev)
max3420_setup_eps(udc);
max3420_setup_spi(udc);
- usb_add_gadget_udc((struct device *)dev, &udc->gadget);
+ usb_add_gadget_udc(dev, &udc->gadget);
return 0;
}
diff --git a/drivers/usb/gadget/udc/udc-core.c b/drivers/usb/gadget/udc/udc-core.c
index 275d6fe7be8..102d74ec02a 100644
--- a/drivers/usb/gadget/udc/udc-core.c
+++ b/drivers/usb/gadget/udc/udc-core.c
@@ -37,7 +37,7 @@
struct usb_udc {
struct usb_gadget_driver *driver;
struct usb_gadget *gadget;
- struct device dev;
+ struct udevice *dev;
struct list_head list;
};
@@ -157,7 +157,7 @@ static inline void usb_gadget_udc_stop(struct usb_udc *udc)
*
* Returns zero on success, negative errno otherwise.
*/
-int usb_add_gadget_udc(struct device *parent, struct usb_gadget *gadget)
+int usb_add_gadget_udc(struct udevice *parent, struct usb_gadget *gadget)
{
struct usb_udc *udc;
int ret = -ENOMEM;
@@ -166,10 +166,9 @@ int usb_add_gadget_udc(struct device *parent, struct usb_gadget *gadget)
if (!udc)
goto err1;
- dev_set_name(&gadget->dev, "gadget");
- gadget->dev.parent = parent;
+ gadget->dev = parent;
- udc->dev.parent = parent;
+ udc->dev = parent;
udc->gadget = gadget;
@@ -189,7 +188,7 @@ EXPORT_SYMBOL_GPL(usb_add_gadget_udc);
static void usb_gadget_remove_driver(struct usb_udc *udc)
{
- dev_dbg(&udc->dev, "unregistering UDC driver [%s]\n",
+ dev_dbg(udc->dev, "unregistering UDC driver [%s]\n",
udc->driver->function);
usb_gadget_disconnect(udc->gadget);
@@ -216,13 +215,13 @@ void usb_del_gadget_udc(struct usb_gadget *gadget)
if (udc->gadget == gadget)
goto found;
- dev_err(gadget->dev.parent, "gadget not registered.\n");
+ dev_err(gadget->dev, "gadget not registered.\n");
mutex_unlock(&udc_lock);
return;
found:
- dev_vdbg(gadget->dev.parent, "unregistering gadget\n");
+ dev_vdbg(gadget->dev, "unregistering gadget\n");
list_del(&udc->list);
mutex_unlock(&udc_lock);
@@ -260,7 +259,7 @@ static int udc_bind_to_driver(struct usb_udc *udc, struct usb_gadget_driver *dri
{
int ret;
- dev_dbg(&udc->dev, "registering UDC driver [%s]\n",
+ dev_dbg(udc->dev, "registering UDC driver [%s]\n",
driver->function);
udc->driver = driver;
@@ -280,7 +279,7 @@ static int udc_bind_to_driver(struct usb_udc *udc, struct usb_gadget_driver *dri
return 0;
err1:
if (ret != -EISNAM)
- dev_err(&udc->dev, "failed to start %s: %d\n",
+ dev_err(udc->dev, "failed to start %s: %d\n",
udc->driver->function, ret);
udc->driver = NULL;
return ret;
diff --git a/drivers/usb/mtu3/mtu3_gadget.c b/drivers/usb/mtu3/mtu3_gadget.c
index 027b7e61113..949b22f41c7 100644
--- a/drivers/usb/mtu3/mtu3_gadget.c
+++ b/drivers/usb/mtu3/mtu3_gadget.c
@@ -631,7 +631,7 @@ int mtu3_gadget_setup(struct mtu3 *mtu)
mtu3_gadget_init_eps(mtu);
- return usb_add_gadget_udc((struct device *)mtu->dev, &mtu->g);
+ return usb_add_gadget_udc(mtu->dev, &mtu->g);
}
void mtu3_gadget_cleanup(struct mtu3 *mtu)
diff --git a/drivers/usb/musb-new/omap2430.c b/drivers/usb/musb-new/omap2430.c
index ba600d01102..54dff01db71 100644
--- a/drivers/usb/musb-new/omap2430.c
+++ b/drivers/usb/musb-new/omap2430.c
@@ -231,7 +231,7 @@ static int omap2430_musb_probe(struct udevice *dev)
if (!host->host)
return -EIO;
- return usb_add_gadget_udc((struct device *)otg_board_data, &host->host->g);
+ return usb_add_gadget_udc(dev, &host->host->g);
}
musbp = musb_register(&plat->plat, (struct device *)otg_board_data,
diff --git a/drivers/usb/musb-new/ti-musb.c b/drivers/usb/musb-new/ti-musb.c
index ec1baa9337d..9e3f793af06 100644
--- a/drivers/usb/musb-new/ti-musb.c
+++ b/drivers/usb/musb-new/ti-musb.c
@@ -247,7 +247,7 @@ static int ti_musb_peripheral_probe(struct udevice *dev)
ti_musb_set_phy_power(dev, 1);
musb_gadget_setup(priv->periph);
- return usb_add_gadget_udc((struct device *)dev, &priv->periph->g);
+ return usb_add_gadget_udc(dev, &priv->periph->g);
}
static int ti_musb_peripheral_remove(struct udevice *dev)
diff --git a/drivers/usb/musb-new/ux500.c b/drivers/usb/musb-new/ux500.c
index be0085f403d..c994dc2f04d 100644
--- a/drivers/usb/musb-new/ux500.c
+++ b/drivers/usb/musb-new/ux500.c
@@ -130,7 +130,7 @@ static int ux500_musb_probe(struct udevice *dev)
if (!host->host)
return -EIO;
- return usb_add_gadget_udc(&glue->dev, &host->host->g);
+ return usb_add_gadget_udc(dev, &host->host->g);
#endif
}
diff --git a/include/linux/usb/gadget.h b/include/linux/usb/gadget.h
index 194025ebd12..e631f71eab8 100644
--- a/include/linux/usb/gadget.h
+++ b/include/linux/usb/gadget.h
@@ -543,7 +543,7 @@ struct usb_gadget {
unsigned a_hnp_support:1;
unsigned a_alt_hnp_support:1;
const char *name;
- struct device dev;
+ struct udevice *dev;
void *driver_data;
unsigned quirk_ep_out_aligned_size:1;
};
@@ -886,7 +886,7 @@ int usb_gadget_register_driver(struct usb_gadget_driver *driver);
*/
int usb_gadget_unregister_driver(struct usb_gadget_driver *driver);
-int usb_add_gadget_udc(struct device *parent, struct usb_gadget *gadget);
+int usb_add_gadget_udc(struct udevice *parent, struct usb_gadget *gadget);
void usb_del_gadget_udc(struct usb_gadget *gadget);
/*-------------------------------------------------------------------------*/
--
2.45.2
^ permalink raw reply related [flat|nested] 15+ messages in thread
* Re: [PATCH 1/6] usb: gadget: Inline usb_add_gadget_udc_release
2024-08-26 14:38 [PATCH 1/6] usb: gadget: Inline usb_add_gadget_udc_release Marek Vasut
` (4 preceding siblings ...)
2024-08-26 14:38 ` [PATCH 6/6] usb: gadget: Pass struct udevice to usb_add_gadget_udc() Marek Vasut
@ 2024-08-26 15:47 ` Miquel Raynal
2024-08-29 7:08 ` Mattijs Korpershoek
2024-09-10 8:27 ` Mattijs Korpershoek
7 siblings, 0 replies; 15+ messages in thread
From: Miquel Raynal @ 2024-08-26 15:47 UTC (permalink / raw)
To: Marek Vasut
Cc: u-boot, Linus Walleij, Lukasz Majewski, Mattijs Korpershoek,
Neil Armstrong, Nishanth Menon, Zixun LI
Hi Marek,
marek.vasut+renesas@mailbox.org wrote on Mon, 26 Aug 2024 16:38:36
+0200:
> The release parameter of usb_add_gadget_udc_release() is never used.
> The function is never called from anywhere except from a wrapper in
> udc-core.c . Inline the function into the wrapper.
>
> Signed-off-by: Marek Vasut <marek.vasut+renesas@mailbox.org>
> ---
> Cc: Linus Walleij <linus.walleij@linaro.org>
> Cc: Lukasz Majewski <lukma@denx.de>
> Cc: Mattijs Korpershoek <mkorpershoek@baylibre.com>
> Cc: Miquel Raynal <miquel.raynal@bootlin.com>
> Cc: Neil Armstrong <neil.armstrong@linaro.org>
> Cc: Nishanth Menon <nm@ti.com>
> Cc: Zixun LI <admin@hifiphile.com>
LGTM, thanks for the cleanup! Just a minor comment, I would really
appreciate a very succinct cover letter with your overall goal. Would
also be easier for the maintainers to pick-up the tags, like this one.
For the series:
Reviewed-by: Miquel Raynal <miquel.raynal@bootlin.com>
Thanks!
Miquèl
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH 1/6] usb: gadget: Inline usb_add_gadget_udc_release
2024-08-26 14:38 [PATCH 1/6] usb: gadget: Inline usb_add_gadget_udc_release Marek Vasut
` (5 preceding siblings ...)
2024-08-26 15:47 ` [PATCH 1/6] usb: gadget: Inline usb_add_gadget_udc_release Miquel Raynal
@ 2024-08-29 7:08 ` Mattijs Korpershoek
2024-09-10 8:27 ` Mattijs Korpershoek
7 siblings, 0 replies; 15+ messages in thread
From: Mattijs Korpershoek @ 2024-08-29 7:08 UTC (permalink / raw)
To: Marek Vasut, u-boot
Cc: Marek Vasut, Linus Walleij, Lukasz Majewski, Miquel Raynal,
Neil Armstrong, Nishanth Menon, Zixun LI
Hi Marek,
Thank you for the patch.
On lun., août 26, 2024 at 16:38, Marek Vasut <marek.vasut+renesas@mailbox.org> wrote:
> The release parameter of usb_add_gadget_udc_release() is never used.
> The function is never called from anywhere except from a wrapper in
> udc-core.c . Inline the function into the wrapper.
>
> Signed-off-by: Marek Vasut <marek.vasut+renesas@mailbox.org>
Reviewed-by: Mattijs Korpershoek <mkorpershoek@baylibre.com>
> ---
> Cc: Linus Walleij <linus.walleij@linaro.org>
> Cc: Lukasz Majewski <lukma@denx.de>
> Cc: Mattijs Korpershoek <mkorpershoek@baylibre.com>
> Cc: Miquel Raynal <miquel.raynal@bootlin.com>
> Cc: Neil Armstrong <neil.armstrong@linaro.org>
> Cc: Nishanth Menon <nm@ti.com>
> Cc: Zixun LI <admin@hifiphile.com>
> ---
> drivers/usb/gadget/udc/udc-core.c | 20 ++------------------
> include/linux/usb/gadget.h | 2 --
> 2 files changed, 2 insertions(+), 20 deletions(-)
>
> diff --git a/drivers/usb/gadget/udc/udc-core.c b/drivers/usb/gadget/udc/udc-core.c
> index 6bb419ae2ab..37c0ee43c52 100644
> --- a/drivers/usb/gadget/udc/udc-core.c
> +++ b/drivers/usb/gadget/udc/udc-core.c
> @@ -166,16 +166,14 @@ static void usb_udc_release(struct device *dev)
> }
>
> /**
> - * usb_add_gadget_udc_release - adds a new gadget to the udc class driver list
> + * usb_add_gadget_udc - adds a new gadget to the udc class driver list
> * @parent: the parent device to this udc. Usually the controller driver's
> * device.
> * @gadget: the gadget to be added to the list.
> - * @release: a gadget release function.
> *
> * Returns zero on success, negative errno otherwise.
> */
> -int usb_add_gadget_udc_release(struct device *parent, struct usb_gadget *gadget,
> - void (*release)(struct device *dev))
> +int usb_add_gadget_udc(struct device *parent, struct usb_gadget *gadget)
> {
> struct usb_udc *udc;
> int ret = -ENOMEM;
> @@ -205,20 +203,6 @@ int usb_add_gadget_udc_release(struct device *parent, struct usb_gadget *gadget,
> err1:
> return ret;
> }
> -EXPORT_SYMBOL_GPL(usb_add_gadget_udc_release);
> -
> -/**
> - * usb_add_gadget_udc - adds a new gadget to the udc class driver list
> - * @parent: the parent device to this udc. Usually the controller
> - * driver's device.
> - * @gadget: the gadget to be added to the list
> - *
> - * Returns zero on success, negative errno otherwise.
> - */
> -int usb_add_gadget_udc(struct device *parent, struct usb_gadget *gadget)
> -{
> - return usb_add_gadget_udc_release(parent, gadget, NULL);
> -}
> EXPORT_SYMBOL_GPL(usb_add_gadget_udc);
>
> static void usb_gadget_remove_driver(struct usb_udc *udc)
> diff --git a/include/linux/usb/gadget.h b/include/linux/usb/gadget.h
> index c7927df15aa..d62fba0ca02 100644
> --- a/include/linux/usb/gadget.h
> +++ b/include/linux/usb/gadget.h
> @@ -890,8 +890,6 @@ int usb_gadget_register_driver(struct usb_gadget_driver *driver);
> */
> int usb_gadget_unregister_driver(struct usb_gadget_driver *driver);
>
> -int usb_add_gadget_udc_release(struct device *parent,
> - struct usb_gadget *gadget, void (*release)(struct device *dev));
> int usb_add_gadget_udc(struct device *parent, struct usb_gadget *gadget);
> void usb_del_gadget_udc(struct usb_gadget *gadget);
> /*-------------------------------------------------------------------------*/
> --
> 2.45.2
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH 2/6] usb: gadget: Drop usb_udc_release()
2024-08-26 14:38 ` [PATCH 2/6] usb: gadget: Drop usb_udc_release() Marek Vasut
@ 2024-08-29 7:41 ` Mattijs Korpershoek
0 siblings, 0 replies; 15+ messages in thread
From: Mattijs Korpershoek @ 2024-08-29 7:41 UTC (permalink / raw)
To: Marek Vasut, u-boot
Cc: Marek Vasut, Linus Walleij, Lukasz Majewski, Miquel Raynal,
Neil Armstrong, Nishanth Menon, Zixun LI
Hi Marek,
Thank you for the patch.
On lun., août 26, 2024 at 16:38, Marek Vasut <marek.vasut+renesas@mailbox.org> wrote:
> This callback is never called, drop it. Instead, call kfree(udc)
> in usb_del_gadget_udc() to free the struct usb_udc data.
>
> Signed-off-by: Marek Vasut <marek.vasut+renesas@mailbox.org>
Reviewed-by: Mattijs Korpershoek <mkorpershoek@baylibre.com>
> ---
> Cc: Linus Walleij <linus.walleij@linaro.org>
> Cc: Lukasz Majewski <lukma@denx.de>
> Cc: Mattijs Korpershoek <mkorpershoek@baylibre.com>
> Cc: Miquel Raynal <miquel.raynal@bootlin.com>
> Cc: Neil Armstrong <neil.armstrong@linaro.org>
> Cc: Nishanth Menon <nm@ti.com>
> Cc: Zixun LI <admin@hifiphile.com>
> ---
> drivers/usb/gadget/udc/udc-core.c | 19 +------------------
> 1 file changed, 1 insertion(+), 18 deletions(-)
>
> diff --git a/drivers/usb/gadget/udc/udc-core.c b/drivers/usb/gadget/udc/udc-core.c
> index 37c0ee43c52..275d6fe7be8 100644
> --- a/drivers/usb/gadget/udc/udc-core.c
> +++ b/drivers/usb/gadget/udc/udc-core.c
> @@ -41,7 +41,6 @@ struct usb_udc {
> struct list_head list;
> };
>
> -static struct class *udc_class;
> static LIST_HEAD(udc_list);
> DEFINE_MUTEX(udc_lock);
>
> @@ -150,21 +149,6 @@ static inline void usb_gadget_udc_stop(struct usb_udc *udc)
> udc->gadget->ops->udc_stop(udc->gadget);
> }
>
> -/**
> - * usb_udc_release - release the usb_udc struct
> - * @dev: the dev member within usb_udc
> - *
> - * This is called by driver's core in order to free memory once the last
> - * reference is released.
> - */
> -static void usb_udc_release(struct device *dev)
> -{
> - struct usb_udc *udc;
> -
> - udc = container_of(dev, struct usb_udc, dev);
> - kfree(udc);
> -}
> -
> /**
> * usb_add_gadget_udc - adds a new gadget to the udc class driver list
> * @parent: the parent device to this udc. Usually the controller driver's
> @@ -185,8 +169,6 @@ int usb_add_gadget_udc(struct device *parent, struct usb_gadget *gadget)
> dev_set_name(&gadget->dev, "gadget");
> gadget->dev.parent = parent;
>
> - udc->dev.release = usb_udc_release;
> - udc->dev.class = udc_class;
> udc->dev.parent = parent;
>
> udc->gadget = gadget;
> @@ -247,6 +229,7 @@ found:
>
> if (udc->driver)
> usb_gadget_remove_driver(udc);
> + kfree(udc);
> }
> EXPORT_SYMBOL_GPL(usb_del_gadget_udc);
>
> --
> 2.45.2
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH 3/6] usb: gadget: Track driver data as part of struct usb_gadget
2024-08-26 14:38 ` [PATCH 3/6] usb: gadget: Track driver data as part of struct usb_gadget Marek Vasut
@ 2024-08-29 7:42 ` Mattijs Korpershoek
0 siblings, 0 replies; 15+ messages in thread
From: Mattijs Korpershoek @ 2024-08-29 7:42 UTC (permalink / raw)
To: Marek Vasut, u-boot
Cc: Marek Vasut, Linus Walleij, Lukasz Majewski, Miquel Raynal,
Neil Armstrong, Nishanth Menon, Zixun LI
Hi Marek,
Thank you for the patch.
On lun., août 26, 2024 at 16:38, Marek Vasut <marek.vasut+renesas@mailbox.org> wrote:
> Move driver data directly into struct usb_gadget {} in preparation for
> conversion of struct device to struct udevice * in struct usb_gadget.
>
> Signed-off-by: Marek Vasut <marek.vasut+renesas@mailbox.org>
Reviewed-by: Mattijs Korpershoek <mkorpershoek@baylibre.com>
> ---
> Cc: Linus Walleij <linus.walleij@linaro.org>
> Cc: Lukasz Majewski <lukma@denx.de>
> Cc: Mattijs Korpershoek <mkorpershoek@baylibre.com>
> Cc: Miquel Raynal <miquel.raynal@bootlin.com>
> Cc: Neil Armstrong <neil.armstrong@linaro.org>
> Cc: Nishanth Menon <nm@ti.com>
> Cc: Zixun LI <admin@hifiphile.com>
> ---
> include/linux/usb/gadget.h | 5 +++--
> 1 file changed, 3 insertions(+), 2 deletions(-)
>
> diff --git a/include/linux/usb/gadget.h b/include/linux/usb/gadget.h
> index d62fba0ca02..a2b8520bc99 100644
> --- a/include/linux/usb/gadget.h
> +++ b/include/linux/usb/gadget.h
> @@ -544,17 +544,18 @@ struct usb_gadget {
> unsigned a_alt_hnp_support:1;
> const char *name;
> struct device dev;
> + void *driver_data;
> unsigned quirk_ep_out_aligned_size:1;
> };
>
> static inline void set_gadget_data(struct usb_gadget *gadget, void *data)
> {
> - gadget->dev.driver_data = data;
> + gadget->driver_data = data;
> }
>
> static inline void *get_gadget_data(struct usb_gadget *gadget)
> {
> - return gadget->dev.driver_data;
> + return gadget->driver_data;
> }
>
> static inline struct usb_gadget *dev_to_usb_gadget(struct device *dev)
> --
> 2.45.2
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH 4/6] usb: gadget: Drop dev_to_usb_gadget()
2024-08-26 14:38 ` [PATCH 4/6] usb: gadget: Drop dev_to_usb_gadget() Marek Vasut
@ 2024-08-29 7:43 ` Mattijs Korpershoek
0 siblings, 0 replies; 15+ messages in thread
From: Mattijs Korpershoek @ 2024-08-29 7:43 UTC (permalink / raw)
To: Marek Vasut, u-boot
Cc: Marek Vasut, Linus Walleij, Lukasz Majewski, Miquel Raynal,
Neil Armstrong, Nishanth Menon, Zixun LI
Hi Marek,
Thank you for the patch.
On lun., août 26, 2024 at 16:38, Marek Vasut <marek.vasut+renesas@mailbox.org> wrote:
> This function is unused, remove it.
>
> Signed-off-by: Marek Vasut <marek.vasut+renesas@mailbox.org>
Reviewed-by: Mattijs Korpershoek <mkorpershoek@baylibre.com>
> ---
> Cc: Linus Walleij <linus.walleij@linaro.org>
> Cc: Lukasz Majewski <lukma@denx.de>
> Cc: Mattijs Korpershoek <mkorpershoek@baylibre.com>
> Cc: Miquel Raynal <miquel.raynal@bootlin.com>
> Cc: Neil Armstrong <neil.armstrong@linaro.org>
> Cc: Nishanth Menon <nm@ti.com>
> Cc: Zixun LI <admin@hifiphile.com>
> ---
> include/linux/usb/gadget.h | 5 -----
> 1 file changed, 5 deletions(-)
>
> diff --git a/include/linux/usb/gadget.h b/include/linux/usb/gadget.h
> index a2b8520bc99..194025ebd12 100644
> --- a/include/linux/usb/gadget.h
> +++ b/include/linux/usb/gadget.h
> @@ -558,11 +558,6 @@ static inline void *get_gadget_data(struct usb_gadget *gadget)
> return gadget->driver_data;
> }
>
> -static inline struct usb_gadget *dev_to_usb_gadget(struct device *dev)
> -{
> - return container_of(dev, struct usb_gadget, dev);
> -}
> -
> /* iterates the non-control endpoints; 'tmp' is a struct usb_ep pointer */
> #define gadget_for_each_ep(tmp, gadget) \
> list_for_each_entry(tmp, &(gadget)->ep_list, ep_list)
> --
> 2.45.2
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH 5/6] usb: gadget: dwc2: Drop get/set_udc_gadget_private_data()
2024-08-26 14:38 ` [PATCH 5/6] usb: gadget: dwc2: Drop get/set_udc_gadget_private_data() Marek Vasut
@ 2024-08-29 7:44 ` Mattijs Korpershoek
0 siblings, 0 replies; 15+ messages in thread
From: Mattijs Korpershoek @ 2024-08-29 7:44 UTC (permalink / raw)
To: Marek Vasut, u-boot
Cc: Marek Vasut, Linus Walleij, Lukasz Majewski, Miquel Raynal,
Neil Armstrong, Nishanth Menon, Zixun LI
Hi Marek,
Thank you for the patch.
On lun., août 26, 2024 at 16:38, Marek Vasut <marek.vasut+renesas@mailbox.org> wrote:
> Neither get_udc_gadget_private_data() nor set_udc_gadget_private_data()
> is ever called anywhere, remove both.
>
> Signed-off-by: Marek Vasut <marek.vasut+renesas@mailbox.org>
Reviewed-by: Mattijs Korpershoek <mkorpershoek@baylibre.com>
> ---
> Cc: Linus Walleij <linus.walleij@linaro.org>
> Cc: Lukasz Majewski <lukma@denx.de>
> Cc: Mattijs Korpershoek <mkorpershoek@baylibre.com>
> Cc: Miquel Raynal <miquel.raynal@bootlin.com>
> Cc: Neil Armstrong <neil.armstrong@linaro.org>
> Cc: Nishanth Menon <nm@ti.com>
> Cc: Zixun LI <admin@hifiphile.com>
> ---
> drivers/usb/gadget/dwc2_udc_otg.c | 13 -------------
> 1 file changed, 13 deletions(-)
>
> diff --git a/drivers/usb/gadget/dwc2_udc_otg.c b/drivers/usb/gadget/dwc2_udc_otg.c
> index 7e9dd6f4268..fbd6c9600fc 100644
> --- a/drivers/usb/gadget/dwc2_udc_otg.c
> +++ b/drivers/usb/gadget/dwc2_udc_otg.c
> @@ -121,19 +121,6 @@ static void nuke(struct dwc2_ep *ep, int status);
> static int dwc2_udc_set_halt(struct usb_ep *_ep, int value);
> static void dwc2_udc_set_nak(struct dwc2_ep *ep);
>
> -void set_udc_gadget_private_data(void *p)
> -{
> - debug_cond(DEBUG_SETUP != 0,
> - "%s: the_controller: 0x%p, p: 0x%p\n", __func__,
> - the_controller, p);
> - the_controller->gadget.dev.device_data = p;
> -}
> -
> -void *get_udc_gadget_private_data(struct usb_gadget *gadget)
> -{
> - return gadget->dev.device_data;
> -}
> -
> static struct usb_ep_ops dwc2_ep_ops = {
> .enable = dwc2_ep_enable,
> .disable = dwc2_ep_disable,
> --
> 2.45.2
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH 6/6] usb: gadget: Pass struct udevice to usb_add_gadget_udc()
2024-08-26 14:38 ` [PATCH 6/6] usb: gadget: Pass struct udevice to usb_add_gadget_udc() Marek Vasut
@ 2024-08-29 8:44 ` Mattijs Korpershoek
2024-08-30 22:44 ` Linus Walleij
1 sibling, 0 replies; 15+ messages in thread
From: Mattijs Korpershoek @ 2024-08-29 8:44 UTC (permalink / raw)
To: Marek Vasut, u-boot
Cc: Marek Vasut, Linus Walleij, Lukasz Majewski, Miquel Raynal,
Neil Armstrong, Nishanth Menon, Zixun LI
Hi Marek,
Thank you for the patch.
On lun., août 26, 2024 at 16:38, Marek Vasut <marek.vasut+renesas@mailbox.org> wrote:
> Almost every UDC driver already passes casted pointer to struct udevice
> usb_add_gadget_udc(), even if the behavior is not exactly correct. That
> struct udevice is at risk of being corrupted in case something modified
> it in the UDC core, which does not happen right now. Switch UDC core to
> use struct udevice outright and drop the casts.
>
> UX500 has to be updated slightly, as that is the last place which does
> correctly use private struct device instance.
>
> Signed-off-by: Marek Vasut <marek.vasut+renesas@mailbox.org>
Reviewed-by: Mattijs Korpershoek <mkorpershoek@baylibre.com>
> ---
> Cc: Linus Walleij <linus.walleij@linaro.org>
> Cc: Lukasz Majewski <lukma@denx.de>
> Cc: Mattijs Korpershoek <mkorpershoek@baylibre.com>
> Cc: Miquel Raynal <miquel.raynal@bootlin.com>
> Cc: Neil Armstrong <neil.armstrong@linaro.org>
> Cc: Nishanth Menon <nm@ti.com>
> Cc: Zixun LI <admin@hifiphile.com>
> ---
> drivers/usb/cdns3/gadget.c | 2 +-
> drivers/usb/dwc3/gadget.c | 2 +-
> drivers/usb/gadget/dwc2_udc_otg.c | 2 +-
> drivers/usb/gadget/max3420_udc.c | 2 +-
> drivers/usb/gadget/udc/udc-core.c | 19 +++++++++----------
> drivers/usb/mtu3/mtu3_gadget.c | 2 +-
> drivers/usb/musb-new/omap2430.c | 2 +-
> drivers/usb/musb-new/ti-musb.c | 2 +-
> drivers/usb/musb-new/ux500.c | 2 +-
> include/linux/usb/gadget.h | 4 ++--
> 10 files changed, 19 insertions(+), 20 deletions(-)
>
> diff --git a/drivers/usb/cdns3/gadget.c b/drivers/usb/cdns3/gadget.c
> index 32b2c412068..b3513cc9bdc 100644
> --- a/drivers/usb/cdns3/gadget.c
> +++ b/drivers/usb/cdns3/gadget.c
> @@ -2660,7 +2660,7 @@ static int cdns3_gadget_start(struct cdns3 *cdns)
> }
>
> /* add USB gadget device */
> - ret = usb_add_gadget_udc((struct device *)priv_dev->dev,
> + ret = usb_add_gadget_udc(priv_dev->dev,
> &priv_dev->gadget);
> if (ret < 0) {
> dev_err(priv_dev->dev,
> diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c
> index fe33e307d3e..a3c3437aa3e 100644
> --- a/drivers/usb/dwc3/gadget.c
> +++ b/drivers/usb/dwc3/gadget.c
> @@ -2688,7 +2688,7 @@ int dwc3_gadget_init(struct dwc3 *dwc)
> if (ret)
> goto err4;
>
> - ret = usb_add_gadget_udc((struct device *)dwc->dev, &dwc->gadget);
> + ret = usb_add_gadget_udc(dwc->dev, &dwc->gadget);
> if (ret) {
> dev_err(dwc->dev, "failed to register udc\n");
> goto err4;
> diff --git a/drivers/usb/gadget/dwc2_udc_otg.c b/drivers/usb/gadget/dwc2_udc_otg.c
> index fbd6c9600fc..4b6327d86d1 100644
> --- a/drivers/usb/gadget/dwc2_udc_otg.c
> +++ b/drivers/usb/gadget/dwc2_udc_otg.c
> @@ -1135,7 +1135,7 @@ static int dwc2_udc_otg_probe(struct udevice *dev)
>
> the_controller->driver = 0;
>
> - ret = usb_add_gadget_udc((struct device *)dev, &the_controller->gadget);
> + ret = usb_add_gadget_udc(dev, &the_controller->gadget);
>
> return ret;
> }
> diff --git a/drivers/usb/gadget/max3420_udc.c b/drivers/usb/gadget/max3420_udc.c
> index 557a1f0644e..7df73cd3625 100644
> --- a/drivers/usb/gadget/max3420_udc.c
> +++ b/drivers/usb/gadget/max3420_udc.c
> @@ -836,7 +836,7 @@ static int max3420_udc_probe(struct udevice *dev)
> max3420_setup_eps(udc);
> max3420_setup_spi(udc);
>
> - usb_add_gadget_udc((struct device *)dev, &udc->gadget);
> + usb_add_gadget_udc(dev, &udc->gadget);
>
> return 0;
> }
> diff --git a/drivers/usb/gadget/udc/udc-core.c b/drivers/usb/gadget/udc/udc-core.c
> index 275d6fe7be8..102d74ec02a 100644
> --- a/drivers/usb/gadget/udc/udc-core.c
> +++ b/drivers/usb/gadget/udc/udc-core.c
> @@ -37,7 +37,7 @@
> struct usb_udc {
> struct usb_gadget_driver *driver;
> struct usb_gadget *gadget;
> - struct device dev;
> + struct udevice *dev;
> struct list_head list;
> };
>
> @@ -157,7 +157,7 @@ static inline void usb_gadget_udc_stop(struct usb_udc *udc)
> *
> * Returns zero on success, negative errno otherwise.
> */
> -int usb_add_gadget_udc(struct device *parent, struct usb_gadget *gadget)
> +int usb_add_gadget_udc(struct udevice *parent, struct usb_gadget *gadget)
> {
> struct usb_udc *udc;
> int ret = -ENOMEM;
> @@ -166,10 +166,9 @@ int usb_add_gadget_udc(struct device *parent, struct usb_gadget *gadget)
> if (!udc)
> goto err1;
>
> - dev_set_name(&gadget->dev, "gadget");
> - gadget->dev.parent = parent;
> + gadget->dev = parent;
>
> - udc->dev.parent = parent;
> + udc->dev = parent;
>
> udc->gadget = gadget;
>
> @@ -189,7 +188,7 @@ EXPORT_SYMBOL_GPL(usb_add_gadget_udc);
>
> static void usb_gadget_remove_driver(struct usb_udc *udc)
> {
> - dev_dbg(&udc->dev, "unregistering UDC driver [%s]\n",
> + dev_dbg(udc->dev, "unregistering UDC driver [%s]\n",
> udc->driver->function);
>
> usb_gadget_disconnect(udc->gadget);
> @@ -216,13 +215,13 @@ void usb_del_gadget_udc(struct usb_gadget *gadget)
> if (udc->gadget == gadget)
> goto found;
>
> - dev_err(gadget->dev.parent, "gadget not registered.\n");
> + dev_err(gadget->dev, "gadget not registered.\n");
> mutex_unlock(&udc_lock);
>
> return;
>
> found:
> - dev_vdbg(gadget->dev.parent, "unregistering gadget\n");
> + dev_vdbg(gadget->dev, "unregistering gadget\n");
>
> list_del(&udc->list);
> mutex_unlock(&udc_lock);
> @@ -260,7 +259,7 @@ static int udc_bind_to_driver(struct usb_udc *udc, struct usb_gadget_driver *dri
> {
> int ret;
>
> - dev_dbg(&udc->dev, "registering UDC driver [%s]\n",
> + dev_dbg(udc->dev, "registering UDC driver [%s]\n",
> driver->function);
>
> udc->driver = driver;
> @@ -280,7 +279,7 @@ static int udc_bind_to_driver(struct usb_udc *udc, struct usb_gadget_driver *dri
> return 0;
> err1:
> if (ret != -EISNAM)
> - dev_err(&udc->dev, "failed to start %s: %d\n",
> + dev_err(udc->dev, "failed to start %s: %d\n",
> udc->driver->function, ret);
> udc->driver = NULL;
> return ret;
> diff --git a/drivers/usb/mtu3/mtu3_gadget.c b/drivers/usb/mtu3/mtu3_gadget.c
> index 027b7e61113..949b22f41c7 100644
> --- a/drivers/usb/mtu3/mtu3_gadget.c
> +++ b/drivers/usb/mtu3/mtu3_gadget.c
> @@ -631,7 +631,7 @@ int mtu3_gadget_setup(struct mtu3 *mtu)
>
> mtu3_gadget_init_eps(mtu);
>
> - return usb_add_gadget_udc((struct device *)mtu->dev, &mtu->g);
> + return usb_add_gadget_udc(mtu->dev, &mtu->g);
> }
>
> void mtu3_gadget_cleanup(struct mtu3 *mtu)
> diff --git a/drivers/usb/musb-new/omap2430.c b/drivers/usb/musb-new/omap2430.c
> index ba600d01102..54dff01db71 100644
> --- a/drivers/usb/musb-new/omap2430.c
> +++ b/drivers/usb/musb-new/omap2430.c
> @@ -231,7 +231,7 @@ static int omap2430_musb_probe(struct udevice *dev)
> if (!host->host)
> return -EIO;
>
> - return usb_add_gadget_udc((struct device *)otg_board_data, &host->host->g);
> + return usb_add_gadget_udc(dev, &host->host->g);
> }
>
> musbp = musb_register(&plat->plat, (struct device *)otg_board_data,
> diff --git a/drivers/usb/musb-new/ti-musb.c b/drivers/usb/musb-new/ti-musb.c
> index ec1baa9337d..9e3f793af06 100644
> --- a/drivers/usb/musb-new/ti-musb.c
> +++ b/drivers/usb/musb-new/ti-musb.c
> @@ -247,7 +247,7 @@ static int ti_musb_peripheral_probe(struct udevice *dev)
>
> ti_musb_set_phy_power(dev, 1);
> musb_gadget_setup(priv->periph);
> - return usb_add_gadget_udc((struct device *)dev, &priv->periph->g);
> + return usb_add_gadget_udc(dev, &priv->periph->g);
> }
>
> static int ti_musb_peripheral_remove(struct udevice *dev)
> diff --git a/drivers/usb/musb-new/ux500.c b/drivers/usb/musb-new/ux500.c
> index be0085f403d..c994dc2f04d 100644
> --- a/drivers/usb/musb-new/ux500.c
> +++ b/drivers/usb/musb-new/ux500.c
> @@ -130,7 +130,7 @@ static int ux500_musb_probe(struct udevice *dev)
> if (!host->host)
> return -EIO;
>
> - return usb_add_gadget_udc(&glue->dev, &host->host->g);
> + return usb_add_gadget_udc(dev, &host->host->g);
> #endif
> }
>
> diff --git a/include/linux/usb/gadget.h b/include/linux/usb/gadget.h
> index 194025ebd12..e631f71eab8 100644
> --- a/include/linux/usb/gadget.h
> +++ b/include/linux/usb/gadget.h
> @@ -543,7 +543,7 @@ struct usb_gadget {
> unsigned a_hnp_support:1;
> unsigned a_alt_hnp_support:1;
> const char *name;
> - struct device dev;
> + struct udevice *dev;
> void *driver_data;
> unsigned quirk_ep_out_aligned_size:1;
> };
> @@ -886,7 +886,7 @@ int usb_gadget_register_driver(struct usb_gadget_driver *driver);
> */
> int usb_gadget_unregister_driver(struct usb_gadget_driver *driver);
>
> -int usb_add_gadget_udc(struct device *parent, struct usb_gadget *gadget);
> +int usb_add_gadget_udc(struct udevice *parent, struct usb_gadget *gadget);
> void usb_del_gadget_udc(struct usb_gadget *gadget);
> /*-------------------------------------------------------------------------*/
>
> --
> 2.45.2
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH 6/6] usb: gadget: Pass struct udevice to usb_add_gadget_udc()
2024-08-26 14:38 ` [PATCH 6/6] usb: gadget: Pass struct udevice to usb_add_gadget_udc() Marek Vasut
2024-08-29 8:44 ` Mattijs Korpershoek
@ 2024-08-30 22:44 ` Linus Walleij
1 sibling, 0 replies; 15+ messages in thread
From: Linus Walleij @ 2024-08-30 22:44 UTC (permalink / raw)
To: Marek Vasut
Cc: u-boot, Lukasz Majewski, Mattijs Korpershoek, Miquel Raynal,
Neil Armstrong, Nishanth Menon, Zixun LI
On Mon, Aug 26, 2024 at 4:39 PM Marek Vasut
<marek.vasut+renesas@mailbox.org> wrote:
> Almost every UDC driver already passes casted pointer to struct udevice
> usb_add_gadget_udc(), even if the behavior is not exactly correct. That
> struct udevice is at risk of being corrupted in case something modified
> it in the UDC core, which does not happen right now. Switch UDC core to
> use struct udevice outright and drop the casts.
>
> UX500 has to be updated slightly, as that is the last place which does
> correctly use private struct device instance.
>
> Signed-off-by: Marek Vasut <marek.vasut+renesas@mailbox.org>
Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
Yours,
Linus Walleij
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH 1/6] usb: gadget: Inline usb_add_gadget_udc_release
2024-08-26 14:38 [PATCH 1/6] usb: gadget: Inline usb_add_gadget_udc_release Marek Vasut
` (6 preceding siblings ...)
2024-08-29 7:08 ` Mattijs Korpershoek
@ 2024-09-10 8:27 ` Mattijs Korpershoek
7 siblings, 0 replies; 15+ messages in thread
From: Mattijs Korpershoek @ 2024-09-10 8:27 UTC (permalink / raw)
To: u-boot, Marek Vasut
Cc: Linus Walleij, Lukasz Majewski, Miquel Raynal, Neil Armstrong,
Nishanth Menon, Zixun LI
Hi,
On Mon, 26 Aug 2024 16:38:36 +0200, Marek Vasut wrote:
> The release parameter of usb_add_gadget_udc_release() is never used.
> The function is never called from anywhere except from a wrapper in
> udc-core.c . Inline the function into the wrapper.
>
>
Thanks, Applied to https://source.denx.de/u-boot/custodians/u-boot-dfu (u-boot-dfu-next)
[1/6] usb: gadget: Inline usb_add_gadget_udc_release
https://source.denx.de/u-boot/custodians/u-boot-dfu/-/commit/188b26ea92f86b527f39ab66b38771a13fd67c7a
[2/6] usb: gadget: Drop usb_udc_release()
https://source.denx.de/u-boot/custodians/u-boot-dfu/-/commit/1ef703d73dbb5cf524045bdb34226a86b4ab0680
[3/6] usb: gadget: Track driver data as part of struct usb_gadget
https://source.denx.de/u-boot/custodians/u-boot-dfu/-/commit/534a3e8c1a067daf31f290acfbafdd0c407d28ad
[4/6] usb: gadget: Drop dev_to_usb_gadget()
https://source.denx.de/u-boot/custodians/u-boot-dfu/-/commit/1d030ba01de4ed7c2ae08301a00453c937df3cce
[5/6] usb: gadget: dwc2: Drop get/set_udc_gadget_private_data()
https://source.denx.de/u-boot/custodians/u-boot-dfu/-/commit/a765f5d6b4982202a42905db27f609365a47852e
[6/6] usb: gadget: Pass struct udevice to usb_add_gadget_udc()
https://source.denx.de/u-boot/custodians/u-boot-dfu/-/commit/75c142c73242d91b0ea9670d3b7b891216351749
--
Mattijs
^ permalink raw reply [flat|nested] 15+ messages in thread
end of thread, other threads:[~2024-09-10 8:27 UTC | newest]
Thread overview: 15+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-08-26 14:38 [PATCH 1/6] usb: gadget: Inline usb_add_gadget_udc_release Marek Vasut
2024-08-26 14:38 ` [PATCH 2/6] usb: gadget: Drop usb_udc_release() Marek Vasut
2024-08-29 7:41 ` Mattijs Korpershoek
2024-08-26 14:38 ` [PATCH 3/6] usb: gadget: Track driver data as part of struct usb_gadget Marek Vasut
2024-08-29 7:42 ` Mattijs Korpershoek
2024-08-26 14:38 ` [PATCH 4/6] usb: gadget: Drop dev_to_usb_gadget() Marek Vasut
2024-08-29 7:43 ` Mattijs Korpershoek
2024-08-26 14:38 ` [PATCH 5/6] usb: gadget: dwc2: Drop get/set_udc_gadget_private_data() Marek Vasut
2024-08-29 7:44 ` Mattijs Korpershoek
2024-08-26 14:38 ` [PATCH 6/6] usb: gadget: Pass struct udevice to usb_add_gadget_udc() Marek Vasut
2024-08-29 8:44 ` Mattijs Korpershoek
2024-08-30 22:44 ` Linus Walleij
2024-08-26 15:47 ` [PATCH 1/6] usb: gadget: Inline usb_add_gadget_udc_release Miquel Raynal
2024-08-29 7:08 ` Mattijs Korpershoek
2024-09-10 8:27 ` Mattijs Korpershoek
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox