Skip to contentSkip to conversation

an additional path to control charging current

PATCH In review Ray Chi 4 participants 7 messages Feb 22, 2021 – Mar 4, 2021

Subsystems (4)
lore
Share & tools
lore

Ray Chi

author
#0 lore raw

cover an additional path to control charging current

Currently, VBUS draw callback does no action when the generic PHYs are used. The patches add an additional path to control charging current through power supply property POWER_SUPPLY_PROP_INPUT_CURRENT_LIMIT.

Ray Chi (2):
usb: dwc3: add a power supply for current control
usb: dwc3: add an alternate path in vbus_draw callback

 drivers/usb/dwc3/core.c   | 15 +++++++++++++++
 drivers/usb/dwc3/core.h   |  4 ++++
 drivers/usb/dwc3/gadget.c | 10 +++++++++-
 3 files changed, 28 insertions(+), 1 deletion(-)
Signature · 1 line
2.30.0.617.g56c4b15f3c-goog
author
#1 lore raw

PATCH 1/2 usb: dwc3: add a power supply for current control

Currently, VBUS draw callback does no action when the generic PHYs are used. This patch adds an additional path to control charging current through power supply interface.

---
 drivers/usb/dwc3/core.c | 15 +++++++++++++++
 drivers/usb/dwc3/core.h |  4 ++++
 2 files changed, 19 insertions(+)
drivers/usb/dwc3/core.c +15 -0
index f2448d0a9d39..d15f065849cd 100644
@@ -1238,6 +1238,8 @@ static void dwc3_get_properties(struct dwc3 *dwc)
 	u8			rx_max_burst_prd;
 	u8			tx_thr_num_pkt_prd;
 	u8			tx_max_burst_prd;
+	const char		*usb_psy_name;
+	int			ret;
 
 	/* default to highest possible threshold */
 	lpm_nyet_threshold = 0xf;
@@ -1263,6 +1265,13 @@ static void dwc3_get_properties(struct dwc3 *dwc)
 	else
 		dwc->sysdev = dwc->dev;
 
+	ret = device_property_read_string(dev, "usb-psy-name", &usb_psy_name);
+	if (ret >= 0) {
+		dwc->usb_psy = power_supply_get_by_name(usb_psy_name);
+		if (!dwc->usb_psy)
+			dev_err(dev, "couldn't get usb power supply\n");
+	}
+
 	dwc->has_lpm_erratum = device_property_read_bool(dev,
 				"snps,has-lpm-erratum");
 	device_property_read_u8(dev, "snps,lpm-nyet-threshold",
@@ -1619,6 +1628,9 @@ static int dwc3_probe(struct platform_device *pdev)
 assert_reset:
 	reset_control_assert(dwc->reset);
 
+	if (!dwc->usb_psy)
+		power_supply_put(dwc->usb_psy);
+
 	return ret;
 }
 
@@ -1641,6 +1653,9 @@ static int dwc3_remove(struct platform_device *pdev)
 	dwc3_free_event_buffers(dwc);
 	dwc3_free_scratch_buffers(dwc);
 
+	if (!dwc->usb_psy)
+		power_supply_put(dwc->usb_psy);
+
 	return 0;
 }
 
drivers/usb/dwc3/core.h +4 -0
index 052b20d52651..6708fdf358b3 100644
@@ -30,6 +30,8 @@
 
 #include <linux/phy/phy.h>
 
+#include <linux/power_supply.h>
+
 #define DWC3_MSG_MAX	500
 
 /* Global constants */
@@ -1125,6 +1127,8 @@ struct dwc3 {
 	struct usb_role_switch	*role_sw;
 	enum usb_dr_mode	role_switch_default_mode;
 
+	struct power_supply	*usb_psy;
+
 	u32			fladj;
 	u32			irq_gadget;
 	u32			otg_irq;
Signature · 1 line
2.30.0.617.g56c4b15f3c-goog
#2 lore raw

Re: [PATCH 1/2] usb: dwc3: add a power supply for current control

While building linux next 20210304 the following builds failed,
- mips (cavium_octeon_defconfig) with gcc-8
- mips (cavium_octeon_defconfig) with gcc-9
- mips (cavium_octeon_defconfig) with gcc-10

Quoted 50 lines · Ray Chi

Currently, VBUS draw callback does no action when the generic PHYs are used. This patch adds an additional path to control charging current through power supply interface.

---
 drivers/usb/dwc3/core.c | 15 +++++++++++++++
 drivers/usb/dwc3/core.h |  4 ++++
 2 files changed, 19 insertions(+)
drivers/usb/dwc3/core.c +12 -0
index f2448d0a9d39..d15f065849cd 100644
@@ -1238,6 +1238,8 @@ static void dwc3_get_properties(struct dwc3 *dwc)
        u8                      rx_max_burst_prd;
        u8                      tx_thr_num_pkt_prd;
        u8                      tx_max_burst_prd;
+       const char              *usb_psy_name;
+       int                     ret;
 
        /* default to highest possible threshold */
        lpm_nyet_threshold = 0xf;
@@ -1263,6 +1265,13 @@ static void dwc3_get_properties(struct dwc3 *dwc)
        else
                dwc->sysdev = dwc->dev;
 
+       ret = device_property_read_string(dev, "usb-psy-name", &usb_psy_name);
+       if (ret >= 0) {
+               dwc->usb_psy = power_supply_get_by_name(usb_psy_name);
+               if (!dwc->usb_psy)
+                       dev_err(dev, "couldn't get usb power supply\n");
+       }
+
        dwc->has_lpm_erratum = device_property_read_bool(dev,
                                "snps,has-lpm-erratum");
        device_property_read_u8(dev, "snps,lpm-nyet-threshold",
@@ -1619,6 +1628,9 @@ static int dwc3_probe(struct platform_device *pdev)
 assert_reset:
        reset_control_assert(dwc->reset);
 
+       if (!dwc->usb_psy)
+               power_supply_put(dwc->usb_psy);
+
        return ret;
 }
 

drivers/usb/dwc3/core.c static int dwc3_remove(struct platform_device *pdev) · line 1657

Quoted 5 lines
drivers/usb/dwc3/core.c +2 -0
@@ -1641,6 +1653,9 @@ static int dwc3_remove(struct platform_device *pdev)
        dwc3_free_event_buffers(dwc);
        dwc3_free_scratch_buffers(dwc);
 
+       if (!dwc->usb_psy)
+               power_supply_put(dwc->usb_psy);
# to reproduce this build locally:

tuxmake --target-arch=mips --kconfig=cavium_octeon_defconfig
--toolchain=gcc-8 --wrapper=sccache --environment=SCCACHE_BUCKET=sccache.tuxbuild.com --runtime=podman --image=public.ecr.aws/tuxmake/mips_gcc-8 config default kernel xipkernel modules dtbs dtbs-legacy debugkernel headers make --silent --keep-going --jobs=8 O=/home/tuxbuild/.cache/tuxmake/builds/1/tmp ARCH=mips CROSS_COMPILE=mips-linux-gnu- 'CC=sccache mips-linux-gnu-gcc' 'HOSTCC=sccache gcc' cavium_octeon_defconfig
make --silent --keep-going --jobs=8 O=/home/tuxbuild/.cache/tuxmake/builds/1/tmp ARCH=mips CROSS_COMPILE=mips-linux-gnu- 'CC=sccache mips-linux-gnu-gcc' 'HOSTCC=sccache gcc'
kernel/sched/fair.c:8384:13: warning: 'update_nohz_stats' defined but not used [-Wunused-function]
static bool update_nohz_stats(struct rq *rq)

             ^~~~~~~~~~~~~~~~~

mips-linux-gnu-ld: drivers/usb/dwc3/core.o: in function `dwc3_remove':
drivers/usb/dwc3/core.c:1657: undefined reference to `power_supply_put'
mips-linux-gnu-ld: drivers/usb/dwc3/core.o: in function `dwc3_get_properties':
drivers/usb/dwc3/core.c:1270: undefined reference to `power_supply_get_by_name'
mips-linux-gnu-ld: drivers/usb/dwc3/core.o: in function `dwc3_probe':
drivers/usb/dwc3/core.c:1632: undefined reference to `power_supply_put'

Build link,
https://gitlab.com/Linaro/lkft/mirrors/next/linux-next/-/jobs/1071668201#L146

Signature · 2 lines
Linaro LKFT
https://lkft.linaro.org
author
#3 lore raw

PATCH 2/2 usb: dwc3: add an alternate path in vbus_draw callback

In reply to Ray Chi

This patch adds an alternate path in vbus_draw callback through power supply property POWER_SUPPLY_PROP_INPUT_CURRENT_LIMIT.

---
 drivers/usb/dwc3/gadget.c | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)
drivers/usb/dwc3/gadget.c +9 -1
index aebcf8ec0716..47809835e163 100644
@@ -2530,11 +2530,19 @@ static void dwc3_gadget_set_ssp_rate(struct usb_gadget *g,
 static int dwc3_gadget_vbus_draw(struct usb_gadget *g, unsigned int mA)
 {
 	struct dwc3		*dwc = gadget_to_dwc(g);
+	union power_supply_propval	val = {0};
+	int				ret;
 
 	if (dwc->usb2_phy)
 		return usb_phy_set_power(dwc->usb2_phy, mA);
 
-	return 0;
+	if (!dwc->usb_psy)
+		return -EOPNOTSUPP;
+
+	val.intval = mA;
+	ret = power_supply_set_property(dwc->usb_psy, POWER_SUPPLY_PROP_INPUT_CURRENT_LIMIT, &val);
+
+	return ret;
 }
 
 static const struct usb_gadget_ops dwc3_gadget_ops = {
Signature · 1 line
2.30.0.617.g56c4b15f3c-goog
#4 lore raw
In reply to Ray Chi

Hi Ray,

Quoted 8 lines

Currently, VBUS draw callback does no action when the generic PHYs are used. The patches add an additional path to control charging current through power supply property POWER_SUPPLY_PROP_INPUT_CURRENT_LIMIT.

Ray Chi (2):
usb: dwc3: add a power supply for current control
usb: dwc3: add an alternate path in vbus_draw callback

While using next-20210303 this patchset leads to the following kernel crash on my board:

---- 8< ----

[    1.392084] VFIO - User Level meta-driver version: 0.3
[    1.398370] Unable to handle kernel NULL pointer dereference at virtual address 00000000000003a0
[    1.407552] Mem abort info:
[    1.410479]   ESR = 0x96000004
[    1.413668]   EC = 0x25: DABT (current EL), IL = 32 bits
[    1.419217]   SET = 0, FnV = 0
[    1.422413]   EA = 0, S1PTW = 0
[    1.425690] Data abort info:
[    1.428705]   ISV = 0, ISS = 0x00000004
[    1.432715]   CM = 0, WnR = 0
[    1.435821] [00000000000003a0] user address but active_mm is swapper
[    1.442458] Internal error: Oops: 96000004 [#1] PREEMPT SMP
[    1.448274] Modules linked in:
[    1.451469] CPU: 1 PID: 1 Comm: swapper/0 Not tainted 5.12.0-rc1-next-20210303-00005-g090e892099db #126
[    1.461269] Hardware name: Kontron pITX-imx8m (DT)
[    1.466268] pstate: 60000005 (nZCv daif -PAN -UAO -TCO BTYPE=--)
[    1.472538] pc : devm_power_supply_get_by_phandle+0xe4/0x148
[    1.478455] lr : dwc3_probe+0xbac/0xfa0
[    1.482462] sp : ffff800011f1bb00
[    1.485918] x29: ffff800011f1bb00 x28: 0000000000000000 
[    1.491467] x27: ffff800011681078 x26: ffff8000115d048c 
[    1.497016] x25: ffff0000c089ea00 x24: 0000000000000003 
[    1.502564] x23: ffff0000c089ea00 x22: ffff800011b89948 
[    1.508112] x21: 0000000000000003 x20: 00000000fffffdfb 
[    1.513660] x19: ffff0000c03f1080 x18: 00000000000000c0 
[    1.519209] x17: 0000000000000000 x16: 0000000000000000 
[    1.524757] x15: fffffc0000001000 x14: 0000000000000000 
[    1.530306] x13: 0000000000000000 x12: 0000000000000030 
[    1.535853] x11: 0101010101010101 x10: ffff800011f1ba50 
[    1.541402] x9 : ffff0000ff784c70 x8 : 0000000000000010 
[    1.546950] x7 : ffff0000c03a5590 x6 : 0000000000000080 
[    1.552498] x5 : ffff0000c0098000 x4 : 00000000000003a0 
[    1.558047] x3 : ffff800011cb2dc8 x2 : 0000000000000000 
[    1.563596] x1 : 0000000000000001 x0 : 0000000000000000 
[    1.569146] Call trace:
[    1.571700]  devm_power_supply_get_by_phandle+0xe4/0x148
[    1.577248]  dwc3_probe+0xbac/0xfa0
[    1.580890]  platform_probe+0x68/0xd8
[    1.584719]  really_probe+0xe4/0x3c0
[    1.588454]  driver_probe_device+0x58/0xb8
[    1.592733]  device_driver_attach+0x74/0x80
[    1.597100]  __driver_attach+0x58/0xe0
[    1.601016]  bus_for_each_dev+0x74/0xc8
[    1.605020]  driver_attach+0x24/0x30
[    1.608753]  bus_add_driver+0x184/0x1e8
[    1.612758]  driver_register+0x64/0x120
[    1.616764]  __platform_driver_register+0x28/0x38
[    1.621675]  dwc3_driver_init+0x1c/0x28
[    1.625684]  do_one_initcall+0x74/0x1d0
[    1.629691]  kernel_init_freeable+0x1d4/0x23c
[    1.634240]  kernel_init+0x14/0x118
[    1.637885]  ret_from_fork+0x10/0x30
[    1.641624] Code: 88027c01 35ffffa2 17fffe96 f9800091 (885f7c82) 
[    1.647992] ---[ end trace c6e48cea897d0b0d ]---
[    1.652833] Kernel panic - not syncing: Attempted to kill init! exitcode=0x0000000b
[    1.660822] SMP: stopping secondary CPUs
[    1.664921] Kernel Offset: disabled
[    1.668560] CPU features: 0x00240002,2000200c
[    1.673106] Memory Limit: none
[    1.676296] ---[ end Kernel panic - not syncing: Attempted to kill init! exitcode=0x0000000b ]---

---- 8< ----

After reverting these 2 patches the problem is gone.

Signature · 1 line
Heiko
#5 lore raw

Hi,

Am Mi., 3. März 2021 um 16:01 Uhr schrieb Heiko Thiery <[email protected]>:

Quoted 79 lines

Hi Ray,

Quoted 8 lines

Currently, VBUS draw callback does no action when the generic PHYs are used. The patches add an additional path to control charging current through power supply property POWER_SUPPLY_PROP_INPUT_CURRENT_LIMIT.

Ray Chi (2):
usb: dwc3: add a power supply for current control
usb: dwc3: add an alternate path in vbus_draw callback

While using next-20210303 this patchset leads to the following kernel crash on my board:

---- 8< ----

[    1.392084] VFIO - User Level meta-driver version: 0.3
[    1.398370] Unable to handle kernel NULL pointer dereference at virtual address 00000000000003a0
[    1.407552] Mem abort info:
[    1.410479]   ESR = 0x96000004
[    1.413668]   EC = 0x25: DABT (current EL), IL = 32 bits
[    1.419217]   SET = 0, FnV = 0
[    1.422413]   EA = 0, S1PTW = 0
[    1.425690] Data abort info:
[    1.428705]   ISV = 0, ISS = 0x00000004
[    1.432715]   CM = 0, WnR = 0
[    1.435821] [00000000000003a0] user address but active_mm is swapper
[    1.442458] Internal error: Oops: 96000004 [#1] PREEMPT SMP
[    1.448274] Modules linked in:
[    1.451469] CPU: 1 PID: 1 Comm: swapper/0 Not tainted 5.12.0-rc1-next-20210303-00005-g090e892099db #126
[    1.461269] Hardware name: Kontron pITX-imx8m (DT)
[    1.466268] pstate: 60000005 (nZCv daif -PAN -UAO -TCO BTYPE=--)
[    1.472538] pc : devm_power_supply_get_by_phandle+0xe4/0x148
[    1.478455] lr : dwc3_probe+0xbac/0xfa0
[    1.482462] sp : ffff800011f1bb00
[    1.485918] x29: ffff800011f1bb00 x28: 0000000000000000
[    1.491467] x27: ffff800011681078 x26: ffff8000115d048c
[    1.497016] x25: ffff0000c089ea00 x24: 0000000000000003
[    1.502564] x23: ffff0000c089ea00 x22: ffff800011b89948
[    1.508112] x21: 0000000000000003 x20: 00000000fffffdfb
[    1.513660] x19: ffff0000c03f1080 x18: 00000000000000c0
[    1.519209] x17: 0000000000000000 x16: 0000000000000000
[    1.524757] x15: fffffc0000001000 x14: 0000000000000000
[    1.530306] x13: 0000000000000000 x12: 0000000000000030
[    1.535853] x11: 0101010101010101 x10: ffff800011f1ba50
[    1.541402] x9 : ffff0000ff784c70 x8 : 0000000000000010
[    1.546950] x7 : ffff0000c03a5590 x6 : 0000000000000080
[    1.552498] x5 : ffff0000c0098000 x4 : 00000000000003a0
[    1.558047] x3 : ffff800011cb2dc8 x2 : 0000000000000000
[    1.563596] x1 : 0000000000000001 x0 : 0000000000000000
[    1.569146] Call trace:
[    1.571700]  devm_power_supply_get_by_phandle+0xe4/0x148
[    1.577248]  dwc3_probe+0xbac/0xfa0
[    1.580890]  platform_probe+0x68/0xd8
[    1.584719]  really_probe+0xe4/0x3c0
[    1.588454]  driver_probe_device+0x58/0xb8
[    1.592733]  device_driver_attach+0x74/0x80
[    1.597100]  __driver_attach+0x58/0xe0
[    1.601016]  bus_for_each_dev+0x74/0xc8
[    1.605020]  driver_attach+0x24/0x30
[    1.608753]  bus_add_driver+0x184/0x1e8
[    1.612758]  driver_register+0x64/0x120
[    1.616764]  __platform_driver_register+0x28/0x38
[    1.621675]  dwc3_driver_init+0x1c/0x28
[    1.625684]  do_one_initcall+0x74/0x1d0
[    1.629691]  kernel_init_freeable+0x1d4/0x23c
[    1.634240]  kernel_init+0x14/0x118
[    1.637885]  ret_from_fork+0x10/0x30
[    1.641624] Code: 88027c01 35ffffa2 17fffe96 f9800091 (885f7c82)
[    1.647992] ---[ end trace c6e48cea897d0b0d ]---
[    1.652833] Kernel panic - not syncing: Attempted to kill init! exitcode=0x0000000b
[    1.660822] SMP: stopping secondary CPUs
[    1.664921] Kernel Offset: disabled
[    1.668560] CPU features: 0x00240002,2000200c
[    1.673106] Memory Limit: none
[    1.676296] ---[ end Kernel panic - not syncing: Attempted to kill init! exitcode=0x0000000b ]---
Quoted 1 line

---- 8< ----

This fixes the crash.

drivers/usb/dwc3/core.c +2 -2
index d15f065849cd..94fdbe502ce9 100644
@@ -1628,7 +1628,7 @@ static int dwc3_probe(struct platform_device *pdev)
 assert_reset:
        reset_control_assert(dwc->reset);
 
-       if (!dwc->usb_psy)
+       if (dwc->usb_psy)
                power_supply_put(dwc->usb_psy);
 
        return ret;
@@ -1653,7 +1653,7 @@ static int dwc3_remove(struct platform_device *pdev)
        dwc3_free_event_buffers(dwc);
        dwc3_free_scratch_buffers(dwc);
 
-       if (!dwc->usb_psy)
+       if (dwc->usb_psy)
                power_supply_put(dwc->usb_psy);
 
        return 0;
Signature · 1 line
Heiko
maintainer
#6 lore raw
Quoted 101 lines · Heiko Thiery

Hi,

Am Mi., 3. März 2021 um 16:01 Uhr schrieb Heiko Thiery <[email protected]>:

Quoted 79 lines

Hi Ray,

Quoted 8 lines

Currently, VBUS draw callback does no action when the generic PHYs are used. The patches add an additional path to control charging current through power supply property POWER_SUPPLY_PROP_INPUT_CURRENT_LIMIT.

Ray Chi (2):
usb: dwc3: add a power supply for current control
usb: dwc3: add an alternate path in vbus_draw callback

While using next-20210303 this patchset leads to the following kernel crash on my board:

---- 8< ----

[    1.392084] VFIO - User Level meta-driver version: 0.3
[    1.398370] Unable to handle kernel NULL pointer dereference at virtual address 00000000000003a0
[    1.407552] Mem abort info:
[    1.410479]   ESR = 0x96000004
[    1.413668]   EC = 0x25: DABT (current EL), IL = 32 bits
[    1.419217]   SET = 0, FnV = 0
[    1.422413]   EA = 0, S1PTW = 0
[    1.425690] Data abort info:
[    1.428705]   ISV = 0, ISS = 0x00000004
[    1.432715]   CM = 0, WnR = 0
[    1.435821] [00000000000003a0] user address but active_mm is swapper
[    1.442458] Internal error: Oops: 96000004 [#1] PREEMPT SMP
[    1.448274] Modules linked in:
[    1.451469] CPU: 1 PID: 1 Comm: swapper/0 Not tainted 5.12.0-rc1-next-20210303-00005-g090e892099db #126
[    1.461269] Hardware name: Kontron pITX-imx8m (DT)
[    1.466268] pstate: 60000005 (nZCv daif -PAN -UAO -TCO BTYPE=--)
[    1.472538] pc : devm_power_supply_get_by_phandle+0xe4/0x148
[    1.478455] lr : dwc3_probe+0xbac/0xfa0
[    1.482462] sp : ffff800011f1bb00
[    1.485918] x29: ffff800011f1bb00 x28: 0000000000000000
[    1.491467] x27: ffff800011681078 x26: ffff8000115d048c
[    1.497016] x25: ffff0000c089ea00 x24: 0000000000000003
[    1.502564] x23: ffff0000c089ea00 x22: ffff800011b89948
[    1.508112] x21: 0000000000000003 x20: 00000000fffffdfb
[    1.513660] x19: ffff0000c03f1080 x18: 00000000000000c0
[    1.519209] x17: 0000000000000000 x16: 0000000000000000
[    1.524757] x15: fffffc0000001000 x14: 0000000000000000
[    1.530306] x13: 0000000000000000 x12: 0000000000000030
[    1.535853] x11: 0101010101010101 x10: ffff800011f1ba50
[    1.541402] x9 : ffff0000ff784c70 x8 : 0000000000000010
[    1.546950] x7 : ffff0000c03a5590 x6 : 0000000000000080
[    1.552498] x5 : ffff0000c0098000 x4 : 00000000000003a0
[    1.558047] x3 : ffff800011cb2dc8 x2 : 0000000000000000
[    1.563596] x1 : 0000000000000001 x0 : 0000000000000000
[    1.569146] Call trace:
[    1.571700]  devm_power_supply_get_by_phandle+0xe4/0x148
[    1.577248]  dwc3_probe+0xbac/0xfa0
[    1.580890]  platform_probe+0x68/0xd8
[    1.584719]  really_probe+0xe4/0x3c0
[    1.588454]  driver_probe_device+0x58/0xb8
[    1.592733]  device_driver_attach+0x74/0x80
[    1.597100]  __driver_attach+0x58/0xe0
[    1.601016]  bus_for_each_dev+0x74/0xc8
[    1.605020]  driver_attach+0x24/0x30
[    1.608753]  bus_add_driver+0x184/0x1e8
[    1.612758]  driver_register+0x64/0x120
[    1.616764]  __platform_driver_register+0x28/0x38
[    1.621675]  dwc3_driver_init+0x1c/0x28
[    1.625684]  do_one_initcall+0x74/0x1d0
[    1.629691]  kernel_init_freeable+0x1d4/0x23c
[    1.634240]  kernel_init+0x14/0x118
[    1.637885]  ret_from_fork+0x10/0x30
[    1.641624] Code: 88027c01 35ffffa2 17fffe96 f9800091 (885f7c82)
[    1.647992] ---[ end trace c6e48cea897d0b0d ]---
[    1.652833] Kernel panic - not syncing: Attempted to kill init! exitcode=0x0000000b
[    1.660822] SMP: stopping secondary CPUs
[    1.664921] Kernel Offset: disabled
[    1.668560] CPU features: 0x00240002,2000200c
[    1.673106] Memory Limit: none
[    1.676296] ---[ end Kernel panic - not syncing: Attempted to kill init! exitcode=0x0000000b ]---
Quoted 1 line

---- 8< ----

This fixes the crash.

drivers/usb/dwc3/core.c +1 -1
index d15f065849cd..94fdbe502ce9 100644
@@ -1628,7 +1628,7 @@ static int dwc3_probe(struct platform_device *pdev)
 assert_reset:
        reset_control_assert(dwc->reset);
 
-       if (!dwc->usb_psy)
+       if (dwc->usb_psy)
                power_supply_put(dwc->usb_psy);
 
        return ret;

drivers/usb/dwc3/core.c static int dwc3_remove(struct platform_device *pdev) · line 1659

Quoted 8 lines
drivers/usb/dwc3/core.c +1 -1
@@ -1653,7 +1653,7 @@ static int dwc3_remove(struct platform_device *pdev)
        dwc3_free_event_buffers(dwc);
        dwc3_free_scratch_buffers(dwc);
 
-       if (!dwc->usb_psy)
+       if (dwc->usb_psy)
                power_supply_put(dwc->usb_psy);
 
        return 0;

Fixed with d05a12f0478c ("usb: dwc3: Fix dereferencing of null dwc->usb_psy") in my tree and should show up in the next linux-next.

thanks,

greg k-h