From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-wm1-f47.google.com (mail-wm1-f47.google.com [209.85.128.47]) (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 BE9293570CA for ; Tue, 18 Nov 2025 13:54:44 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.47 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763474088; cv=none; b=A2RWUQc7oeZax6/yRnYR0R45cGk24W+1a13t+xa/WtSuOXuUX1+smRAUaljb37ddsg3dPf8+Me2RfbQXrLzFjkMlMIl8nJRPqRmOr7UhVaPtfCK47uvZy8oCH3F+k+jGm8Ca+9SuHpT9VjKKqD3DuP9Z8Rsbnfzp+hfSPi0L9PY= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763474088; c=relaxed/simple; bh=ignDpCV4eibCugjiEN1Nv5kwc5unKL/mc7DxiXV2KEk=; h=Message-ID:Date:MIME-Version:Subject:To:Cc:References:From: In-Reply-To:Content-Type; b=LixtH13cLkbs42B2JabRNglTmBBrC6sKgwzd88mwZax4J/Z6aCUTbYn83ez+f20pZa2BFP+B09ZtDm1GDrWpfN9PXuDr3oPd6FhYCDfXbOfydwzLFdLvqJxzZKYN0H0iFjPI0MF1yGJZ5afPrpmimXOMSZNUgeiae4wX4DUJTas= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=opmRpqX+; arc=none smtp.client-ip=209.85.128.47 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="opmRpqX+" Received: by mail-wm1-f47.google.com with SMTP id 5b1f17b1804b1-4779aa4f928so34448735e9.1 for ; Tue, 18 Nov 2025 05:54:44 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1763474083; x=1764078883; darn=vger.kernel.org; h=content-transfer-encoding:in-reply-to:organization:autocrypt :content-language:from:references:cc:to:subject:reply-to:user-agent :mime-version:date:message-id:from:to:cc:subject:date:message-id :reply-to; bh=Z4rTQs6cNVDsxXvXmMBx4hq1l1GKxmU7dSKs02Pj2AE=; b=opmRpqX+scjgeqe0d3Jyr321sXIZvFg5kr/UnAKYqjQZgPZ3D2vhtNjnaEOZiFmanb hCrQ8ZCknb7SVo5mKxwbixLy8h8SKPKRsbE1BPPDRU9pzfy2UZ0LgI3QFrGHaDh+J8gp rzzCZ1hpZuiZq6yY+mMvcjPWqx1jew7UzvPxgqxLTbZ8O62Nv/Jj0vmCML5BQCwlxX27 Q2yqBhvkRi+ODRR85Z+QNQeUNBW2XScahLc4CKwc5gTdS+J6pO4PSyMDkRH3zyL+9xan adI0vcbi7X0aLJFD6fJ02IhWFt5rPKrYbHsduR+piOpYWlwwCkuW51ZcvC7a6T35TQwX 5pGA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1763474083; x=1764078883; h=content-transfer-encoding:in-reply-to:organization:autocrypt :content-language:from:references:cc:to:subject:reply-to:user-agent :mime-version:date:message-id:x-gm-gg:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Z4rTQs6cNVDsxXvXmMBx4hq1l1GKxmU7dSKs02Pj2AE=; b=ny8/zAUa9EfqDSFolo00RYl6Yf7tSTjM6CiZxtZxL0K5ndMIvU21nvNYqDaS4KpJxV e8Yo9BxANMM1HIAHNiZkbNT83rLrOGuWHni7JBNT79Up/1K6wEGAL4FvjK2Lg/UmB88T J7CrNRM+RMcM4vXjPhUmdomZaIumtiElKeQ41wnjrA1TK8f6HSnm6IaQ7nZhWtGL45ig j6gu/rWC5JqoYSnPV8jLcshRE9wxcNDFBqrjGbTv4zX7mcnmZLymcyHtxIVyZ3bNrf/3 kY9HlwHY5CA8AIAfwyN3BJTRingI54BDkSTou5X8/mP1Uhl6r1ZfkeiGiTuHEJag++lh h9Ug== X-Forwarded-Encrypted: i=1; AJvYcCXigUKvdg/fnJhr1SjQqeJx5CWqqUwo3RGta/1cBUcex76rgpMpH9VOvLdO8kW9lJ861SJGD8yUbPMZYQM=@vger.kernel.org X-Gm-Message-State: AOJu0YzoR49LsTS+eF9vjH6KxpfQO7TSMmgiPWTtp2ohoN7aX1lTFYYx CNEcR+2w6x5YjOnIrHI+Hhd6erCwq9pVOM1G2DZBu8/dFfuhV2cJT9apzt14PUfk5w8= X-Gm-Gg: ASbGncuvk7kISPqumafHnpCRzodeQ3XeYVXiI7L/ZK97voYQXfsoeFj3dq4eD/FNEMi vuLLQAUlIfN+BHybHwagn6cCP/dG6s96EbXtmN+eVVNY6r0s1vVdgCoBYGEyIjVgnr+oLN8RGkh saLsm2Ri6u4Fwarnsgqm3kONo4WvXiMlRdZ5tCIX/C+O314Xs9+mbZuE+J6kvLHkuvl/Q0U7PRy KfOFtzdJaHovMqxa1SXlswA74QQsR7qNue3V2iZgU9ejntIJMmKD2u0dsuAN4dzW5XYwqDA1B+m y1zgKcg6Qa0ZmaTPCEZqQLTxeZNkjm/qeFzxfFHs9r8oE757TljWGpu5LTLQUjVBq7zwrX5qaKm lZb7qj/efKDYKMQUx3ZIbiR6FCksZaXvK/UJAZhcgYlJyk+7rD+uznRPMG+7lpMEikqrwrR8G0Q P11kJKXjhzbBrgu3j93cNMl1ulVPb0KhI41Iy+u4YMxoOoaceX/3tVJPAihipT+1rlo1UZhneAg w== X-Google-Smtp-Source: AGHT+IHhitoziKhXGK/4vUvir0RlhvYqtbf0w6VoUxFm0DXXGjIIgAo5tsERHyW1tWVmq0iyACjNnQ== X-Received: by 2002:a05:600c:3593:b0:477:557b:6917 with SMTP id 5b1f17b1804b1-4778fe4fdecmr165470535e9.18.1763474082956; Tue, 18 Nov 2025 05:54:42 -0800 (PST) Received: from ?IPV6:2a01:e0a:3d9:2080:366e:5264:fffe:1c49? ([2a01:e0a:3d9:2080:366e:5264:fffe:1c49]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-477a96a58c5sm19787245e9.0.2025.11.18.05.54.42 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 18 Nov 2025 05:54:42 -0800 (PST) Message-ID: <4d486bd8-9e87-4bf2-a96f-38aa0f701c45@linaro.org> Date: Tue, 18 Nov 2025 14:54:42 +0100 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Reply-To: Neil Armstrong Subject: Re: [PATCH] phy: renesas: rcar-gen3-usb2: Add suspend/resume support To: Claudiu , 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> From: Neil Armstrong Content-Language: en-US, fr Autocrypt: addr=neil.armstrong@linaro.org; keydata= xsBNBE1ZBs8BCAD78xVLsXPwV/2qQx2FaO/7mhWL0Qodw8UcQJnkrWmgTFRobtTWxuRx8WWP GTjuhvbleoQ5Cxjr+v+1ARGCH46MxFP5DwauzPekwJUD5QKZlaw/bURTLmS2id5wWi3lqVH4 BVF2WzvGyyeV1o4RTCYDnZ9VLLylJ9bneEaIs/7cjCEbipGGFlfIML3sfqnIvMAxIMZrvcl9 qPV2k+KQ7q+aXavU5W+yLNn7QtXUB530Zlk/d2ETgzQ5FLYYnUDAaRl+8JUTjc0CNOTpCeik 80TZcE6f8M76Xa6yU8VcNko94Ck7iB4vj70q76P/J7kt98hklrr85/3NU3oti3nrIHmHABEB AAHNKk5laWwgQXJtc3Ryb25nIDxuZWlsLmFybXN0cm9uZ0BsaW5hcm8ub3JnPsLAkQQTAQoA OwIbIwULCQgHAwUVCgkICwUWAgMBAAIeAQIXgBYhBInsPQWERiF0UPIoSBaat7Gkz/iuBQJk Q5wSAhkBAAoJEBaat7Gkz/iuyhMIANiD94qDtUTJRfEW6GwXmtKWwl/mvqQtaTtZID2dos04 YqBbshiJbejgVJjy+HODcNUIKBB3PSLaln4ltdsV73SBcwUNdzebfKspAQunCM22Mn6FBIxQ GizsMLcP/0FX4en9NaKGfK6ZdKK6kN1GR9YffMJd2P08EO8mHowmSRe/ExAODhAs9W7XXExw UNCY4pVJyRPpEhv373vvff60bHxc1k/FF9WaPscMt7hlkbFLUs85kHtQAmr8pV5Hy9ezsSRa GzJmiVclkPc2BY592IGBXRDQ38urXeM4nfhhvqA50b/nAEXc6FzqgXqDkEIwR66/Gbp0t3+r yQzpKRyQif3OwE0ETVkGzwEIALyKDN/OGURaHBVzwjgYq+ZtifvekdrSNl8TIDH8g1xicBYp QTbPn6bbSZbdvfeQPNCcD4/EhXZuhQXMcoJsQQQnO4vwVULmPGgtGf8PVc7dxKOeta+qUh6+ SRh3vIcAUFHDT3f/Zdspz+e2E0hPV2hiSvICLk11qO6cyJE13zeNFoeY3ggrKY+IzbFomIZY 4yG6xI99NIPEVE9lNBXBKIlewIyVlkOaYvJWSV+p5gdJXOvScNN1epm5YHmf9aE2ZjnqZGoM Mtsyw18YoX9BqMFInxqYQQ3j/HpVgTSvmo5ea5qQDDUaCsaTf8UeDcwYOtgI8iL4oHcsGtUX oUk33HEAEQEAAcLAXwQYAQIACQUCTVkGzwIbDAAKCRAWmrexpM/4rrXiB/sGbkQ6itMrAIfn M7IbRuiSZS1unlySUVYu3SD6YBYnNi3G5EpbwfBNuT3H8//rVvtOFK4OD8cRYkxXRQmTvqa3 3eDIHu/zr1HMKErm+2SD6PO9umRef8V82o2oaCLvf4WeIssFjwB0b6a12opuRP7yo3E3gTCS KmbUuLv1CtxKQF+fUV1cVaTPMyT25Od+RC1K+iOR0F54oUJvJeq7fUzbn/KdlhA8XPGzwGRy 4zcsPWvwnXgfe5tk680fEKZVwOZKIEuJC3v+/yZpQzDvGYJvbyix0lHnrCzq43WefRHI5XTT QbM0WUIBIcGmq38+OgUsMYu4NzLu7uZFAcmp6h8g Organization: Linaro In-Reply-To: <20251106144148.3051962-1-claudiu.beznea.uj@bp.renesas.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit 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 ? Neil > + ret = rcar_gen3_phy_usb2_init_bus(channel); > + if (ret) > + goto error; > > spin_lock_init(&channel->lock); > for (i = 0; i < NUM_OF_PHYS; i++) { > @@ -936,10 +936,38 @@ static void rcar_gen3_phy_usb2_remove(struct platform_device *pdev) > pm_runtime_disable(&pdev->dev); > }; > > +static int rcar_gen3_phy_usb2_suspend(struct device *dev) > +{ > + struct rcar_gen3_chan *channel = dev_get_drvdata(dev); > + > + return reset_control_assert(channel->rstc); > +} > + > +static int rcar_gen3_phy_usb2_resume(struct device *dev) > +{ > + struct rcar_gen3_chan *channel = dev_get_drvdata(dev); > + int ret; > + > + ret = reset_control_deassert(channel->rstc); > + if (ret) > + return ret; > + > + ret = rcar_gen3_phy_usb2_init_bus(channel); > + if (ret) > + reset_control_assert(channel->rstc); > + > + return ret; > +} > + > +static DEFINE_SIMPLE_DEV_PM_OPS(rcar_gen3_phy_usb2_pm_ops, > + rcar_gen3_phy_usb2_suspend, > + rcar_gen3_phy_usb2_resume); > + > static struct platform_driver rcar_gen3_phy_usb2_driver = { > .driver = { > .name = "phy_rcar_gen3_usb2", > .of_match_table = rcar_gen3_phy_usb2_match_table, > + .pm = pm_ptr(&rcar_gen3_phy_usb2_pm_ops), > }, > .probe = rcar_gen3_phy_usb2_probe, > .remove = rcar_gen3_phy_usb2_remove,