-----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(&regs->gintsts) & DWC2_GINTSTS_CURMODE_HOST) {
> -             hprt0 = readl(&regs->hprt0);
> -             hprt0 &= ~(DWC2_HPRT0_PRTENA | DWC2_HPRT0_PRTCONNDET);
> -             hprt0 &= ~(DWC2_HPRT0_PRTENCHNG | DWC2_HPRT0_PRTOVRCURRCHNG);
> +             hprt0 = readl(&regs->hprt0) & ~DWC2_HPRT0_W1C_MASK;
>               if (!(hprt0 & DWC2_HPRT0_PRTPWR)) {
>                       hprt0 |= DWC2_HPRT0_PRTPWR;
>                       writel(hprt0, &regs->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(&regs->hprt0, DWC2_HPRT0_PRTCONNDET);
> +                     clrsetbits_le32(&regs->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(&regs->hprt0, DWC2_HPRT0_PRTENA |
> -                                     DWC2_HPRT0_PRTCONNDET |
> -                                     DWC2_HPRT0_PRTENCHNG |
> -                                     DWC2_HPRT0_PRTOVRCURRCHNG,
> -                                     DWC2_HPRT0_PRTRST);
> +                     clrsetbits_le32(&regs->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

[...]

Reply via email to