-----Original Message----- From: Marek Vasut <ma...@denx.de> Sent: Thursday, 2 February, 2023 11:16 PM To: Chong, Teik Heng <teik.heng.ch...@intel.com>; u-boot@lists.denx.de Cc: Simon <simon.k.r.goldschm...@gmail.com>; Chee, Tien Fong <tien.fong.c...@intel.com>; Hea, Kok Kiang <kok.kiang....@intel.com>; Lim, Elly Siew Chin <elly.siew.chin....@intel.com>; Kho, Sin Hui <sin.hui....@intel.com>; Lokanathan, Raaj <raaj.lokanat...@intel.com>; Maniyam, Dinesh <dinesh.mani...@intel.com>; Ng, Boon Khai <boon.khai...@intel.com>; Yuslaimi, Alif Zakuan <alif.zakuan.yusla...@intel.com>; Zamri, Muhammad Hazim Izzat <muhammad.hazim.izzat.za...@intel.com>; Lim, Jit Loon <jit.loon....@intel.com>; Tang, Sieu Mun <sieu.mun.t...@intel.com> Subject: Re: [PATCH] drivers: usb: host: Fix the write to W1C fields in HPRT register
On 2/2/23 02:14, teik.heng.ch...@intel.com wrote: The subject tags are 'usb: dwc2:' . > diff --git a/drivers/usb/host/dwc2.c b/drivers/usb/host/dwc2.c index > 23060fc369..9818f9be94 100644 > --- a/drivers/usb/host/dwc2.c > +++ b/drivers/usb/host/dwc2.c > @@ -315,9 +315,7 @@ static void dwc_otg_core_host_init(struct udevice > *dev, > > /* Turn on the vbus power. */ > if (readl(®s->gintsts) & DWC2_GINTSTS_CURMODE_HOST) { > - hprt0 = readl(®s->hprt0); > - hprt0 &= ~(DWC2_HPRT0_PRTENA | DWC2_HPRT0_PRTCONNDET); > - hprt0 &= ~(DWC2_HPRT0_PRTENCHNG | DWC2_HPRT0_PRTOVRCURRCHNG); > + hprt0 = readl(®s->hprt0) & ~DWC2_HPRT0_W1C_MASK; > if (!(hprt0 & DWC2_HPRT0_PRTPWR)) { > hprt0 |= DWC2_HPRT0_PRTPWR; > writel(hprt0, ®s->hprt0); > @@ -748,7 +746,7 @@ static int dwc_otg_submit_rh_msg_out(struct dwc2_priv > *priv, > case (USB_REQ_CLEAR_FEATURE << 8) | USB_RECIP_OTHER | USB_TYPE_CLASS: > switch (wValue) { > case USB_PORT_FEAT_C_CONNECTION: > - setbits_le32(®s->hprt0, DWC2_HPRT0_PRTCONNDET); > + clrsetbits_le32(®s->hprt0, DWC2_HPRT0_W1C_MASK, > +DWC2_HPRT0_PRTCONNDET); > break; > } > break; > @@ -759,21 +757,13 @@ static int dwc_otg_submit_rh_msg_out(struct dwc2_priv > *priv, > break; > > case USB_PORT_FEAT_RESET: > - clrsetbits_le32(®s->hprt0, DWC2_HPRT0_PRTENA | > - DWC2_HPRT0_PRTCONNDET | > - DWC2_HPRT0_PRTENCHNG | > - DWC2_HPRT0_PRTOVRCURRCHNG, > - DWC2_HPRT0_PRTRST); > + clrsetbits_le32(®s->hprt0, DWC2_HPRT0_W1C_MASK, > +DWC2_HPRT0_PRTRST); The code above used to be clearing the W1C (write 1 to clear) bits , while the changed code is no longer clearing those bits. Is that correct ? yes [...]