From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-wm1-f46.google.com (mail-wm1-f46.google.com [209.85.128.46]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5023220C488 for ; Tue, 18 Nov 2025 14:13:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.46 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763475221; cv=none; b=DHIwZdl2BvloZxOPpzsZtIjJLdwEyheTy7RcRlSbc/nShaR+SWTJnQpMCwCUqjPvmpUDMZT571TvJjny2j+Z31e99DiIuzpLkf1OBtJ+PSxf3Y9qyPGyuOS1bHcmZpM4vBsmCsZ5AAHntMWS/B+LvTLcvCyY+/Sx90hDq9Fzxfs= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763475221; c=relaxed/simple; bh=rp0083s5I4NKgkxKKYCbBvLPiTVc2O9OoM4hZXBN3do=; h=Message-ID:Date:MIME-Version:Subject:From:To:Cc:References: In-Reply-To:Content-Type; b=US6hPcHYtxj5ebF35R2nwDKknFHfrupefHuxPiXM8+ipZ6WY1pfGpMNpXb2vNfnC2yHpsra25eRv1DE1gFnWPW0pPRKsF8vapRuS9HK8ZC2tRwwg4qZi6q6y2zgzUjlQ95+jKz7sAK0X2B5rRN9yUQO44UWjl/9KXbr4V00z1h0= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=tuxon.dev; spf=pass smtp.mailfrom=tuxon.dev; dkim=pass (2048-bit key) header.d=tuxon.dev header.i=@tuxon.dev header.b=l0WFDpXF; arc=none smtp.client-ip=209.85.128.46 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=tuxon.dev Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=tuxon.dev Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=tuxon.dev header.i=@tuxon.dev header.b="l0WFDpXF" Received: by mail-wm1-f46.google.com with SMTP id 5b1f17b1804b1-47775fb6cb4so39851935e9.0 for ; Tue, 18 Nov 2025 06:13:39 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tuxon.dev; s=google; t=1763475218; x=1764080018; darn=vger.kernel.org; h=content-transfer-encoding:in-reply-to:content-language:references :cc:to:from:subject:user-agent:mime-version:date:message-id:from:to :cc:subject:date:message-id:reply-to; bh=ztfXAVtJF02n2U4iqu1oYXFqjTOpzewfao4XQU6K0fg=; b=l0WFDpXF628W55TZoWMA/QzdXgN0JkHgozF7deLA2PRKz9Mj7zAtOe4EzJZ43AiTWL s1Y+R6bjglPuSEno50UetWhGFBDRby/aMCABFJB0Gd1fj9l++3ZhMylKHJYaPn42gajL UyE3yR8injgH9+A/TXKFpbDkxcrw4gLQkvLp9YFbpbUNSac3ymLAsp6N1vtePjt3mzJq 73zwGpmVxg3c3tozD4x2jv/kLsCsnpw8l156AFUcugnbUD7KIvV7Vyt3FuboeM0mifWJ iCLE/yQJAMhNpMZrt92j7RxOyEqi6Dj/dRZlpuOdFSzwSM8C2keHcil/CnRthZFX1R5k Nztw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1763475218; x=1764080018; h=content-transfer-encoding:in-reply-to:content-language:references :cc:to:from:subject:user-agent:mime-version:date:message-id:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=ztfXAVtJF02n2U4iqu1oYXFqjTOpzewfao4XQU6K0fg=; b=xLlgouN8/VnmbTq3CjuJ9jves6QUZhtyasz8wHE2jqfUFQVvgZ7syxbNCBiTefzK0c 5vCWp+c2zazJOs0gF8FPt4bLEsPyJSRfuMdadK4YEfVzDhPh75i8osWq5vcrDRolzqqS rDwUwB5JmLRX5DokK+H/N+ejfYGAwNONdbB5M4+uS0zPDzAeb+n76O8KFDC/sW75ZKbv fP0YwQzRwgwKgZiaToL+N3fr01jAFNJzlYwpZNw2SZTUyuw61fM2tT8e26HsBBsKCbbs cUpLnp1CvNwBHgcEDoAS4PkduG1MdxBZrVlwjVgdy87rmTLCXFa8+D/6LnJqbxXL+WKN ZLqw== X-Forwarded-Encrypted: i=1; AJvYcCVuoj0kqSvGLqT567TA2kXkVr+9w09xXBysWhIJvP+BzJPcfN1pWHUKRU9bUjYstkHIFyEMmnScpr9r3Yg=@vger.kernel.org X-Gm-Message-State: AOJu0YxeIyFhTJJ5S9ERk2rDsAxcf3zO/qMH4RhT9amvUFDL0munTHjh wjioe3eK449SOar4ypwE5JF1tFfqtmYsxkaRxJ3bB2AeGftNRruFJk2D5gLgvT50oD0= X-Gm-Gg: ASbGncvD+u4hs2gMYDukjsRl26+f9Ir7x8E2WniNgaI8xh+DojGqfH3ZoKeWJ6BgpTa FdYEiM7DsjaJCZkHmXgXCyX2EsMnDZj0AY25vlMoBig0DBS5PSUW7HKZqikiVy49BXqgdgiMQAY ynDu41/+A9yTzj8Kzpdx3SRkSSGnXubAzA8tvSFnfv52Ms6XhqzOLUqufi7bYBwChMvqqdwZC72 q1ak/Vbq2CtKnM5aKzPv5Of9UlDi8t0gVmDOSVOIXWk4GEUu/e1CUkYZMisQ6jZTWEooapsaWs3 y5YDIVKyoCm766zHso7YpzLnQONHIk0wu/3MhudpDI4SdgiIGjx8MkOOqn3vCnMtAVjk9gVdhax ueBE3nb6cmQg16q5mN19DIC3ouAYx28fJUR59lpWJQuf6bNe63nZn9Sf0w2lAlYIfCovO+SKFBR BSlhekQ7um5ycP3Dmlg7M6Fuei4czItw== X-Google-Smtp-Source: AGHT+IGnLLVOgtBb6QoIpnryngoXF9ZsVrA0Hu/BPktiacTI1lwDmiBLrou7m3q1ehoWZoiBVrtp+A== X-Received: by 2002:a05:600c:6289:b0:46e:37fc:def0 with SMTP id 5b1f17b1804b1-4778fe62100mr154949795e9.9.1763475216662; Tue, 18 Nov 2025 06:13:36 -0800 (PST) Received: from [192.168.50.4] ([82.78.167.134]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4779a684202sm188236015e9.10.2025.11.18.06.13.34 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 18 Nov 2025 06:13:35 -0800 (PST) Message-ID: <3054e8f6-a11f-4278-a27b-1a868699b958@tuxon.dev> Date: Tue, 18 Nov 2025 16:13:34 +0200 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH] phy: renesas: rcar-gen3-usb2: Add suspend/resume support From: Claudiu Beznea To: Neil Armstrong , yoshihiro.shimoda.uh@renesas.com, vkoul@kernel.org, kishon@kernel.org, geert+renesas@glider.be, magnus.damm@gmail.com, p.zabel@pengutronix.de Cc: linux-renesas-soc@vger.kernel.org, linux-phy@lists.infradead.org, linux-kernel@vger.kernel.org, Claudiu Beznea References: <20251106144148.3051962-1-claudiu.beznea.uj@bp.renesas.com> <4d486bd8-9e87-4bf2-a96f-38aa0f701c45@linaro.org> <047df95e-b1b6-4e7b-89f7-d7cb69559a49@tuxon.dev> Content-Language: en-US In-Reply-To: <047df95e-b1b6-4e7b-89f7-d7cb69559a49@tuxon.dev> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit On 11/18/25 16:13, Claudiu Beznea wrote: > Hi, Neil, > > On 11/18/25 15:54, Neil Armstrong wrote: >> On 11/6/25 15:41, Claudiu wrote: >>> From: Claudiu Beznea >>> >>> The Renesas RZ/G3S supports a power saving mode where power to most of the >>> SoC components is turned off. The USB PHY is among these components. >>> Because of this the settings applied in driver probe need to be executed >>> also on resume path. On suspend path only reset signal need to be asserted. >>> Add suspend/resume support. >>> >>> Signed-off-by: Claudiu Beznea >>> --- >>> >>> This patch is built on top of patches 1/7, 2/7 at [1] >>> >>> [1] https://lore.kernel.org/all/20251023135810.1688415-2- >>> claudiu.beznea.uj@bp.renesas.com >>> >>>   drivers/phy/renesas/phy-rcar-gen3-usb2.c | 66 +++++++++++++++++------- >>>   1 file changed, 47 insertions(+), 19 deletions(-) >>> >>> diff --git a/drivers/phy/renesas/phy-rcar-gen3-usb2.c b/drivers/phy/ >>> renesas/phy-rcar-gen3-usb2.c >>> index a38ead7c8055..3c063e4dea41 100644 >>> --- a/drivers/phy/renesas/phy-rcar-gen3-usb2.c >>> +++ b/drivers/phy/renesas/phy-rcar-gen3-usb2.c >>> @@ -132,6 +132,7 @@ struct rcar_gen3_chan { >>>       struct device *dev;    /* platform_device's device */ >>>       const struct rcar_gen3_phy_drv_data *phy_data; >>>       struct extcon_dev *extcon; >>> +    struct reset_control *rstc; >>>       struct rcar_gen3_phy rphys[NUM_OF_PHYS]; >>>       struct regulator *vbus; >>>       struct work_struct work; >>> @@ -778,35 +779,24 @@ static void rcar_gen3_reset_assert(void *data) >>>   static int rcar_gen3_phy_usb2_init_bus(struct rcar_gen3_chan *channel) >>>   { >>>       struct device *dev = channel->dev; >>> -    struct reset_control *rstc; >>>       int ret; >>>       u32 val; >>>   -    rstc = devm_reset_control_array_get_shared(dev); >>> -    if (IS_ERR(rstc)) >>> -        return PTR_ERR(rstc); >>> +    if (!channel->phy_data->init_bus) >>> +        return 0; >>>         ret = pm_runtime_resume_and_get(dev); >>>       if (ret) >>>           return ret; >>>   -    ret = reset_control_deassert(rstc); >>> -    if (ret) >>> -        goto rpm_put; >>> - >>> -    ret = devm_add_action_or_reset(dev, rcar_gen3_reset_assert, rstc); >>> -    if (ret) >>> -        goto rpm_put; >>> - >>>       val = readl(channel->base + USB2_AHB_BUS_CTR); >>>       val &= ~USB2_AHB_BUS_CTR_MBL_MASK; >>>       val |= USB2_AHB_BUS_CTR_MBL_INCR4; >>>       writel(val, channel->base + USB2_AHB_BUS_CTR); >>>   -rpm_put: >>>       pm_runtime_put(dev); >>>   -    return ret; >>> +    return 0; >>>   } >>>     static int rcar_gen3_phy_usb2_probe(struct platform_device *pdev) >>> @@ -846,6 +836,18 @@ static int rcar_gen3_phy_usb2_probe(struct >>> platform_device *pdev) >>>           } >>>       } >>>   +    channel->rstc = devm_reset_control_array_get_optional_shared(dev); >>> +    if (IS_ERR(channel->rstc)) >>> +        return PTR_ERR(channel->rstc); >>> + >>> +    ret = reset_control_deassert(channel->rstc); >>> +    if (ret) >>> +        return ret; >>> + >>> +    ret = devm_add_action_or_reset(dev, rcar_gen3_reset_assert, channel- >>>> rstc); >>> +    if (ret) >>> +        return ret; >>> + >>>       /* >>>        * devm_phy_create() will call pm_runtime_enable(&phy->dev); >>>        * And then, phy-core will manage runtime pm for this device. >>> @@ -861,11 +863,9 @@ static int rcar_gen3_phy_usb2_probe(struct >>> platform_device *pdev) >>>       platform_set_drvdata(pdev, channel); >>>       channel->dev = dev; >>>   -    if (channel->phy_data->init_bus) { >>> -        ret = rcar_gen3_phy_usb2_init_bus(channel); >>> -        if (ret) >>> -            goto error; >>> -    } >> >> I don't see why you changed the logic of calling >> rcar_gen3_phy_usb2_init_bus(), >> moving the reset setup and handling should be enough, no ? >> > Sorry, I missed to mention it. I did it like this just to avoid this pattern: > > if (channel->phy_data->init_bus) { > ret = rcar_gen3_phy_usb2_init_bus(channel); > if (ret) > return ret; > } > > in both probe and resume path. The channel->phy_data->init_bus check is not s/not/now > embedded in rcar_gen3_phy_usb2_init_bus(). Please let me know if you want > me to revert it. > > Thank you, > Claudiu