From patchwork Mon Apr 14 13:00:18 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Prabhakar X-Patchwork-Id: 14050323 X-Patchwork-Delegate: geert@linux-m68k.org Received: from mail-wr1-f49.google.com (mail-wr1-f49.google.com [209.85.221.49]) (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 7ECD019A; Mon, 14 Apr 2025 13:00:27 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.49 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744635629; cv=none; b=X7EwLaO+nUr53+I/Z7h/YykT8wPxJ219t+VlFVkLZ4Snoi4Cd6KpEX5XeV6PFjNyc6eH6Etkn73laDRrXQOR2dGgBFVzmi0Rx18+6PDpdGHNMnLPCuqfVDcAbac1c98H0oKXIcu8QkcCqdRfJSy6F3KGvnWjt1tF1YNuqB+Yx4k= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744635629; c=relaxed/simple; bh=DPb4jzdxAMjcjV5wM7HRySNLR1rqs6le4rxdDv3XTTc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=AMFs64sOyuxe0txKyLAe/WapFHhKC0LTTYRNJOCIkoKgC9WwdKEFrWCZEKjxGpr9kPrCrsS8CiwCC1u7qnn7gHNT5EPZusmWrT0BwoXryZ1qWMLMyct5VIzXb3IWAxz4u2T9+P1o5/sR714rseCckpvXCRdVc4nsw9URVDN9TK4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=lbTNCT9+; arc=none smtp.client-ip=209.85.221.49 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="lbTNCT9+" Received: by mail-wr1-f49.google.com with SMTP id ffacd0b85a97d-39c14016868so3942649f8f.1; Mon, 14 Apr 2025 06:00:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1744635626; x=1745240426; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=TuMrUsCWur1ZWPl1E2LSe7o6WHdw9/Jq4KxswMsH3Fg=; b=lbTNCT9+fdvJquma/EZZw8LFQqPoVG3OlxS9C2ksHh52VJLFMCOZaRuA4UtvUtZF8i DtKx4puILRlKIZdG/yd91FnBDpWpubJJ7DmZXiY1OVXEfGaSjznDPjv7KtJCTf0P25Bt Pehot4ygGiqj6ez9FvYIT/5inelILeA6jG6JiCE1pwf4LVT+usH66Vu2ngv+OnPJEOIp Oc/oL4mjGzBIqdKoH7uLCCRql3GltVzMFql6Q7uyK/v1Xe47Jq88qDiJPpYLcEXLZ67i dtGA8s9IzK7y2B593xt5w3ClAFKqYJ8GhCDtSFqHfrkGI8niDKMoH1BVYcVwNuXcTpvV hhGQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1744635626; x=1745240426; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=TuMrUsCWur1ZWPl1E2LSe7o6WHdw9/Jq4KxswMsH3Fg=; b=kxslfVPQnRpGjofLIwQlS86SIIvxxhXHcJgiSFwTHRLqunjzTlrSaRJqey2LpKWXE0 71ZSJyZ18Jq2+sP22YkTd05Rv76gvl8zkTOvCfCH1S6l/+vj9yAMJiG6B1A1Y4LsB6tJ xuv8ReM2uivrFltf3+HsvaYyfEAykdOPhRttuKqaALhhm3+J+lA3Dl+uYJX2LjtsS6Vg jsldPrIJpIKk+pHs0cgeQTbFwW17VK4UZTjSiqDh9j36D/1qMvtrxlxdgBGe1+KMnkjN Uc6i8tTXuj1bxrH/FLbA27Hbaf6vyCm/Fuz7oo5wGvUMmxV+h/cyZpzuZ9Wbje+2uEyZ vhwA== X-Forwarded-Encrypted: i=1; AJvYcCVz7Niv4RRJIG9w5+m1yLl77dNeM3/dI5ZJi2+4a7cDqD73UcMq87zwOfEJKjEteh3A2sRg+baNp+iI8QHB@vger.kernel.org, AJvYcCWDSIZ06JE6bJ0O6jdgs1JLiiFMbtSuSeNQJ5hbt3bJAB5ZJe36bVIzrIj1aJthZ6zvu6OEppRdKhTX@vger.kernel.org X-Gm-Message-State: AOJu0YwHpAkV0KC+M3Wz/FsF37ACSUcKSTBvdw9iowlle4WRYJyvWnKt uQeiwSnsr3E0jv/cVwJYJHRJaVuGQygNXOcd4QkcG/bhPqXwM6hR64CiCEOM X-Gm-Gg: ASbGncu6556O8AxDemz2+l4MDfRfJDPLbFNxksBkx87sqQRyuIE6ovuA3QFTqg032L1 IxGwM40J0DaGS0I/dTxk7c/2Sq/Pzxv5PjgDw6Rrmeguvn3yzTSQwUdnMeNkVXe1yTzu75jFK6G ZrhVfth8DI9e8d1yx1mPtaHR7TOhYyaZMrG76mHw18szYAZ87NLg14oNuQYfLrb+sRsB9gqZhEt +Qo0b4lgmt7v0aUUtRS3VebWD1F5FI+f/LpJrPnEdc1F2AL1EAFz/AS5Ht7ShqgA2jeMH5iCg5e VL8h9yHNlEcA5aRXs72iAqRg+MXNju/ic3Ct+1oHYSdJdfUzK/tguUhmJDgF96rd X-Google-Smtp-Source: AGHT+IHsVCKQuwpC4i/5POCuSG43hDK7jwcHhzo/wULwRbVQcILZ60LfPor1aRjolAyQ6yN/IN55Uw== X-Received: by 2002:a5d:5f42:0:b0:38f:39e5:6b5d with SMTP id ffacd0b85a97d-39eaaed20d3mr9735614f8f.44.1744635625100; Mon, 14 Apr 2025 06:00:25 -0700 (PDT) Received: from iku.Home ([2a06:5906:61b:2d00:eb55:397c:6c6:e937]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-39eae979663sm11214681f8f.51.2025.04.14.06.00.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 14 Apr 2025 06:00:24 -0700 (PDT) From: Prabhakar X-Google-Original-From: Prabhakar To: Philipp Zabel , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Geert Uytterhoeven , Magnus Damm Cc: linux-renesas-soc@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Prabhakar , Biju Das , Fabrizio Castro , Lad Prabhakar , Krzysztof Kozlowski Subject: [PATCH v4 1/3] dt-bindings: reset: Document RZ/V2H(P) USB2PHY reset Date: Mon, 14 Apr 2025 14:00:18 +0100 Message-ID: <20250414130020.248374-2-prabhakar.mahadev-lad.rj@bp.renesas.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250414130020.248374-1-prabhakar.mahadev-lad.rj@bp.renesas.com> References: <20250414130020.248374-1-prabhakar.mahadev-lad.rj@bp.renesas.com> Precedence: bulk X-Mailing-List: linux-renesas-soc@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 From: Lad Prabhakar Add a device tree binding document for the Renesas RZ/V2H(P) USB2PHY reset controller. This block manages the reset and power-down of the USB 2.0 PHY, which is used in both host and function modes. Signed-off-by: Lad Prabhakar Reviewed-by: Krzysztof Kozlowski --- .../reset/renesas,rzv2h-usb2phy-reset.yaml | 56 +++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 Documentation/devicetree/bindings/reset/renesas,rzv2h-usb2phy-reset.yaml diff --git a/Documentation/devicetree/bindings/reset/renesas,rzv2h-usb2phy-reset.yaml b/Documentation/devicetree/bindings/reset/renesas,rzv2h-usb2phy-reset.yaml new file mode 100644 index 000000000000..c79f61c2373b --- /dev/null +++ b/Documentation/devicetree/bindings/reset/renesas,rzv2h-usb2phy-reset.yaml @@ -0,0 +1,56 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/reset/renesas,rzv2h-usb2phy-reset.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Renesas RZ/V2H(P) USB2PHY Port reset Control + +maintainers: + - Lad Prabhakar + +description: + The RZ/V2H(P) USB2PHY Control mainly controls Port reset and power down of the + USB2.0 PHY. + +properties: + compatible: + const: renesas,r9a09g057-usb2phy-reset # RZ/V2H(P) + + reg: + maxItems: 1 + + clocks: + maxItems: 1 + + resets: + maxItems: 1 + + power-domains: + maxItems: 1 + + '#reset-cells': + const: 0 + +required: + - compatible + - reg + - clocks + - resets + - power-domains + - '#reset-cells' + +additionalProperties: false + +examples: + - | + #include + + reset-controller@15830000 { + compatible = "renesas,r9a09g057-usb2phy-reset"; + reg = <0x15830000 0x10000>; + clocks = <&cpg CPG_MOD 0xb6>; + resets = <&cpg 0xaf>; + power-domains = <&cpg>; + #reset-cells = <0>; + }; From patchwork Mon Apr 14 13:00:19 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Prabhakar X-Patchwork-Id: 14050324 X-Patchwork-Delegate: geert@linux-m68k.org Received: from mail-wr1-f43.google.com (mail-wr1-f43.google.com [209.85.221.43]) (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 255721EB36; Mon, 14 Apr 2025 13:00:27 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.43 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744635630; cv=none; b=JkAlACjEzvFnlUa3PMsoXIXme3Z2/gT+jWaosoOFcpiIgFy+obvLdfiOqzHWYcOUctNynr3HunIK9m8bJxSJ30RsaBIGaFjC13zyU3NIzK+kFQiM8lPZYBJ5e24DFPl99pxZdEeaQ5bHiuj/rzxU+jcJkTiVtFw2J4S6HPumWp4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744635630; c=relaxed/simple; bh=wzSitwedtw9xNDLPCXhBB9iD0tisj5xlZIUNyCvBXcM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=VuTTnxOEawnUGEfBo8StZQ/V3VF9THOgJPgz9V0fSgjzIc5nNXK1jvtOe2IlA0omrc/q2uVTCCP5Fphvn9ujtb91DFLMeEyDxlAI60nsi9Bu/Smf8hqGGWeoxIXv3f3JMJy71LJms+IYCGmB75RZF8UiEkTFGezzw2tNF3DFU6U= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=ljxzSUfW; arc=none smtp.client-ip=209.85.221.43 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="ljxzSUfW" Received: by mail-wr1-f43.google.com with SMTP id ffacd0b85a97d-39c14016868so3942664f8f.1; Mon, 14 Apr 2025 06:00:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1744635626; x=1745240426; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=7CV7p10zKNb8WhsH7g4dc5YsLzrHpuCUEgSJUjbNBRI=; b=ljxzSUfWJQLWJ9WxvG48U48jzzQMUmMZYjHr67/25/rzVK2k3ktWnuNLCgyElJNWf3 SyH5EhOHtUreW2oELkAIx4mdoRxHR7yYOKJltkFQPsLudqXX+OJs8xMLWZQ61upxI97R GXs9VyURGaB5bu+eW1Zna6WRqpbSIPPmMf/dgOU/JhnnKUgpB7A5fJFejFfjt+30PeAg OOos5VnG3jiXOVuVdmffQCJNJMM/o6kO94tkmVgF6UPc8cIKhN1ix8TzuVzFtJgZ0Wd1 5G2amlyPdxTuGbC4vL2Ggtp8hZA+JAykJQFAXZfG23M8KntXAu6uz5cWAkA95czaGICb dy7A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1744635626; x=1745240426; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=7CV7p10zKNb8WhsH7g4dc5YsLzrHpuCUEgSJUjbNBRI=; b=peLo9VYpUvLa5AnqCB3kURPn9BQzuJeL3/D3Wz/O6ZEbZi4smHl68WnDpBDq+o317z YOen8uANnGBknU+OHgojWSStfab7pVTyF2EWyOcCXUeEa3LxdDdIRhgeRy91UJDxpoTD egG0tFDs3qNFg2AiSLHToMivA2z56fnfbEF8LEbWeiY6ta4cvqM4H3/zcQM/wGnk93/V cppGjyJtIwSg97wTaJvgcRULV0cZe4jus3CSQ9oekPEhtSb5waSnDBY3Ljy43cXwwVB8 yWAmmcIc6M0cCGXc1merkBDtjnctXrW+fwZ05ME4zDI44Uqe9jF5Z4dBjyvwRhKFIXMk /TIw== X-Forwarded-Encrypted: i=1; AJvYcCUsUCfDNwDjDWnF3YoGMSyjKJUuFMJFhoqiYyFMqXsRj9z3miE8qCG2sKEEewJBHrmMvt3tD9X8NCel@vger.kernel.org, AJvYcCX6jAwDGmkkjsiZxWqhWieaeTCGbuxoHfjQUcARCvrGqq7JbUftlShfk0EE4s4AdmSwakhW1yGmntHQcJ6h@vger.kernel.org X-Gm-Message-State: AOJu0YyYfVlJup9ccFieoksc1BJ+z2JV6BNdAPAolr8jfd0x/0FmlMPE YaC2h/f4UTvm/XNmwcjNJGkIdGUR6rXZiRqJsj+ReF92V5e/tF59 X-Gm-Gg: ASbGncta/aFyghfGoaVbWxNDnt8S3ZmvHLEdNJdFdC+Tsoc6S8fpzdbDHSk6r6OkL0i xeqGTgGvFhwyVQk3kwUf/VA4/76/RBHpDg9pApp3AkcD2MI1ppFtAteeC3OV+KtI1lvr4q0Zkns Hcqnnxpw1rBJQgOAaDuBtsS+AeXa127RqXdqzlJuxMzUCzs0oxLgm9wlo3Qt2RvPpdubKM6A2JM oBqhEZvaOfd90Q6Ba4PlFTDWBjiuxmsPn7PguQz7RceyHypemb0eEMTHOmk7sg0qtrpH/t+5GNL JkF1JgIAcebuohJe4rn/haqad4aJg0qmMNSoOtvkHirpIJP1HSadExRJ2gaYCudF X-Google-Smtp-Source: AGHT+IGZ1ZQz88ZONpfCKHuYX6abKvCA2CvJM0svob3Y4lMtrlrjd1nMgwVDa1rVNIEz5KGiLmJccg== X-Received: by 2002:a05:6000:2282:b0:39c:30f9:1e57 with SMTP id ffacd0b85a97d-39ea5203576mr9852364f8f.18.1744635626057; Mon, 14 Apr 2025 06:00:26 -0700 (PDT) Received: from iku.Home ([2a06:5906:61b:2d00:eb55:397c:6c6:e937]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-39eae979663sm11214681f8f.51.2025.04.14.06.00.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 14 Apr 2025 06:00:25 -0700 (PDT) From: Prabhakar X-Google-Original-From: Prabhakar To: Philipp Zabel , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Geert Uytterhoeven , Magnus Damm Cc: linux-renesas-soc@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Prabhakar , Biju Das , Fabrizio Castro , Lad Prabhakar Subject: [PATCH v4 2/3] reset: Add USB2PHY port reset driver for Renesas RZ/V2H(P) Date: Mon, 14 Apr 2025 14:00:19 +0100 Message-ID: <20250414130020.248374-3-prabhakar.mahadev-lad.rj@bp.renesas.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250414130020.248374-1-prabhakar.mahadev-lad.rj@bp.renesas.com> References: <20250414130020.248374-1-prabhakar.mahadev-lad.rj@bp.renesas.com> Precedence: bulk X-Mailing-List: linux-renesas-soc@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 From: Lad Prabhakar Implement a USB2PHY port reset driver for the Renesas RZ/V2H(P) SoC. Enable control of USB2.0 PHY reset and power-down operations, including assert and deassert functionalities for the PHY. Leverage device tree (OF) data to support future SoCs with similar USB2PHY hardware but varying register configurations. Define initialization values and control register settings to ensure flexibility for upcoming platforms. Signed-off-by: Lad Prabhakar Reviewed-by: Biju Das --- drivers/reset/Kconfig | 7 + drivers/reset/Makefile | 1 + drivers/reset/reset-rzv2h-usb2phy.c | 241 ++++++++++++++++++++++++++++ 3 files changed, 249 insertions(+) create mode 100644 drivers/reset/reset-rzv2h-usb2phy.c diff --git a/drivers/reset/Kconfig b/drivers/reset/Kconfig index 99f6f9784e68..6c7dbd8ca580 100644 --- a/drivers/reset/Kconfig +++ b/drivers/reset/Kconfig @@ -225,6 +225,13 @@ config RESET_RZG2L_USBPHY_CTRL Support for USBPHY Control found on RZ/G2L family. It mainly controls reset and power down of the USB/PHY. +config RESET_RZV2H_USB2PHY + tristate "Renesas RZ/V2H(P) (and similar SoCs) USB2PHY Reset driver" + depends on ARCH_RENESAS || COMPILE_TEST + help + Support for USB2PHY Port reset Control found on the RZ/V2H(P) SoC + (and similar SoCs). + config RESET_SCMI tristate "Reset driver controlled via ARM SCMI interface" depends on ARM_SCMI_PROTOCOL || COMPILE_TEST diff --git a/drivers/reset/Makefile b/drivers/reset/Makefile index 31f9904d13f9..30d0fb4ac965 100644 --- a/drivers/reset/Makefile +++ b/drivers/reset/Makefile @@ -31,6 +31,7 @@ obj-$(CONFIG_RESET_QCOM_AOSS) += reset-qcom-aoss.o obj-$(CONFIG_RESET_QCOM_PDC) += reset-qcom-pdc.o obj-$(CONFIG_RESET_RASPBERRYPI) += reset-raspberrypi.o obj-$(CONFIG_RESET_RZG2L_USBPHY_CTRL) += reset-rzg2l-usbphy-ctrl.o +obj-$(CONFIG_RESET_RZV2H_USB2PHY) += reset-rzv2h-usb2phy.o obj-$(CONFIG_RESET_SCMI) += reset-scmi.o obj-$(CONFIG_RESET_SIMPLE) += reset-simple.o obj-$(CONFIG_RESET_SOCFPGA) += reset-socfpga.o diff --git a/drivers/reset/reset-rzv2h-usb2phy.c b/drivers/reset/reset-rzv2h-usb2phy.c new file mode 100644 index 000000000000..737b768829c9 --- /dev/null +++ b/drivers/reset/reset-rzv2h-usb2phy.c @@ -0,0 +1,241 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Renesas RZ/V2H(P) USB2PHY Port reset control driver + * + * Copyright (C) 2025 Renesas Electronics Corporation + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +struct rzv2h_usb2phy_regval { + u16 reg; + u16 val; +}; + +struct rzv2h_usb2phy_reset_of_data { + const struct rzv2h_usb2phy_regval *init_vals; + unsigned int init_val_count; + + u16 reset_reg; + u16 reset_assert_val; + u16 reset_deassert_val; + u16 reset_status_bits; + u16 reset_release_val; + + u16 reset2_reg; + u16 reset2_acquire_val; + u16 reset2_release_val; +}; + +struct rzv2h_usb2phy_reset_priv { + const struct rzv2h_usb2phy_reset_of_data *data; + void __iomem *base; + struct device *dev; + struct reset_controller_dev rcdev; + spinlock_t lock; /* protects register accesses */ +}; + +static inline struct rzv2h_usb2phy_reset_priv +*rzv2h_usbphy_rcdev_to_priv(struct reset_controller_dev *rcdev) +{ + return container_of(rcdev, struct rzv2h_usb2phy_reset_priv, rcdev); +} + +/* This function must be called only after pm_runtime_resume_and_get() has been called */ +static void rzv2h_usbphy_assert_helper(struct rzv2h_usb2phy_reset_priv *priv) +{ + const struct rzv2h_usb2phy_reset_of_data *data = priv->data; + + scoped_guard(spinlock, &priv->lock) { + writel(data->reset2_acquire_val, priv->base + data->reset2_reg); + writel(data->reset_assert_val, priv->base + data->reset_reg); + } + + usleep_range(11, 20); +} + +static int rzv2h_usbphy_reset_assert(struct reset_controller_dev *rcdev, + unsigned long id) +{ + struct rzv2h_usb2phy_reset_priv *priv = rzv2h_usbphy_rcdev_to_priv(rcdev); + struct device *dev = priv->dev; + int ret; + + ret = pm_runtime_resume_and_get(dev); + if (ret) { + dev_err(dev, "pm_runtime_resume_and_get failed\n"); + return ret; + } + + rzv2h_usbphy_assert_helper(priv); + + pm_runtime_put(dev); + + return 0; +} + +static int rzv2h_usbphy_reset_deassert(struct reset_controller_dev *rcdev, + unsigned long id) +{ + struct rzv2h_usb2phy_reset_priv *priv = rzv2h_usbphy_rcdev_to_priv(rcdev); + const struct rzv2h_usb2phy_reset_of_data *data = priv->data; + struct device *dev = priv->dev; + int ret; + + ret = pm_runtime_resume_and_get(dev); + if (ret) { + dev_err(dev, "pm_runtime_resume_and_get failed\n"); + return ret; + } + + scoped_guard(spinlock, &priv->lock) { + writel(data->reset_deassert_val, priv->base + data->reset_reg); + writel(data->reset2_release_val, priv->base + data->reset2_reg); + writel(data->reset_release_val, priv->base + data->reset_reg); + } + + pm_runtime_put(dev); + + return 0; +} + +static int rzv2h_usbphy_reset_status(struct reset_controller_dev *rcdev, + unsigned long id) +{ + struct rzv2h_usb2phy_reset_priv *priv = rzv2h_usbphy_rcdev_to_priv(rcdev); + struct device *dev = priv->dev; + int ret; + u32 reg; + + ret = pm_runtime_resume_and_get(dev); + if (ret) { + dev_err(dev, "pm_runtime_resume_and_get failed\n"); + return ret; + } + + reg = readl(priv->base + priv->data->reset_reg); + + pm_runtime_put(dev); + + return (reg & priv->data->reset_status_bits) == priv->data->reset_status_bits; +} + +static const struct reset_control_ops rzv2h_usbphy_reset_ops = { + .assert = rzv2h_usbphy_reset_assert, + .deassert = rzv2h_usbphy_reset_deassert, + .status = rzv2h_usbphy_reset_status, +}; + +static int rzv2h_usb2phy_reset_of_xlate(struct reset_controller_dev *rcdev, + const struct of_phandle_args *reset_spec) +{ + /* No special handling needed, we have only one reset line per device */ + return 0; +} + +static int rzv2h_usb2phy_reset_probe(struct platform_device *pdev) +{ + const struct rzv2h_usb2phy_reset_of_data *data; + struct rzv2h_usb2phy_reset_priv *priv; + struct device *dev = &pdev->dev; + struct reset_control *rstc; + int error; + + priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL); + if (!priv) + return -ENOMEM; + + data = of_device_get_match_data(dev); + if (!data) + return dev_err_probe(dev, -ENODEV, + "failed to match device\n"); + + priv->data = data; + priv->dev = dev; + priv->base = devm_platform_ioremap_resource(pdev, 0); + if (IS_ERR(priv->base)) + return PTR_ERR(priv->base); + + rstc = devm_reset_control_get_shared_deasserted(dev, NULL); + if (IS_ERR(rstc)) + return dev_err_probe(dev, PTR_ERR(rstc), + "failed to get deasserted reset\n"); + + spin_lock_init(&priv->lock); + dev_set_drvdata(dev, priv); + + error = devm_pm_runtime_enable(dev); + if (error) + return dev_err_probe(dev, error, "Failed to enable pm_runtime\n"); + + error = pm_runtime_resume_and_get(dev); + if (error) + return dev_err_probe(dev, error, "pm_runtime_resume_and_get failed\n"); + + for (unsigned int i = 0; i < data->init_val_count; i++) + writel(data->init_vals[i].val, priv->base + data->init_vals[i].reg); + + /* keep usb2phy in asserted state */ + rzv2h_usbphy_assert_helper(priv); + + pm_runtime_put(dev); + + priv->rcdev.ops = &rzv2h_usbphy_reset_ops; + priv->rcdev.of_reset_n_cells = 0; + priv->rcdev.nr_resets = 1; + priv->rcdev.of_xlate = rzv2h_usb2phy_reset_of_xlate; + priv->rcdev.of_node = dev->of_node; + priv->rcdev.dev = dev; + + return devm_reset_controller_register(dev, &priv->rcdev); +} + +/* + * initialization values required to prepare the PHY to receive + * assert and deassert requests. + */ +static const struct rzv2h_usb2phy_regval rzv2h_init_vals[] = { + { .reg = 0xc10, .val = 0x67c }, + { .reg = 0xc14, .val = 0x1f }, + { .reg = 0x600, .val = 0x909 }, +}; + +static const struct rzv2h_usb2phy_reset_of_data rzv2h_reset_of_data = { + .init_vals = rzv2h_init_vals, + .init_val_count = ARRAY_SIZE(rzv2h_init_vals), + .reset_reg = 0, + .reset_assert_val = 0x206, + .reset_status_bits = BIT(2), + .reset_deassert_val = 0x200, + .reset_release_val = 0x0, + .reset2_reg = 0xb04, + .reset2_acquire_val = 0x303, + .reset2_release_val = 0x3, +}; + +static const struct of_device_id rzv2h_usb2phy_reset_of_match[] = { + { .compatible = "renesas,r9a09g057-usb2phy-reset", .data = &rzv2h_reset_of_data }, + { /* Sentinel */ } +}; +MODULE_DEVICE_TABLE(of, rzv2h_usb2phy_reset_of_match); + +static struct platform_driver rzv2h_usb2phy_reset_driver = { + .driver = { + .name = "rzv2h_usb2phy_reset", + .of_match_table = rzv2h_usb2phy_reset_of_match, + }, + .probe = rzv2h_usb2phy_reset_probe, +}; +module_platform_driver(rzv2h_usb2phy_reset_driver); + +MODULE_LICENSE("GPL"); +MODULE_AUTHOR("Lad Prabhakar "); +MODULE_DESCRIPTION("Renesas RZ/V2H(P) USB2PHY Control"); From patchwork Mon Apr 14 13:00:20 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Prabhakar X-Patchwork-Id: 14050325 X-Patchwork-Delegate: geert@linux-m68k.org Received: from mail-wr1-f53.google.com (mail-wr1-f53.google.com [209.85.221.53]) (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 2AD3345C14; Mon, 14 Apr 2025 13:00:28 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.53 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744635630; cv=none; b=GG91N2fuNI+FeCeyIK2ezOWVeqTp5KIRSScVbeEk3ZefpUW7fHFHjcPP2ci039/4BN/Jahj6UNr91l67I3YsHxmN7SfV6VVO7kIeDPd2dLtu66I1Bf6kwQJHjsLsddv7DfYwukPC0/E8WhYA+h8zKLcy+cULSkHpsQMgcc+nHdk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744635630; c=relaxed/simple; bh=Ez/UPR4HSb5TIHx/JJX8f0N7DcjAQFyn3Ic8w/YWy8E=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=BMKY9dRz03W5+h0AVKptZk07vD4aea0h1B2nszlnNtMbyF5xyi7a0jzTi09ShUCLqstDUuDfRNJ7JFeH/QJBbt/cqCHQDT87v/zF7JWTNiA/GCeX6t/Zr9aRXRbn8E9WUxU0gBiiJpjnICzlWsNfew7FeVZ3hFoe3iB0zWclJDY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=ELapdiot; arc=none smtp.client-ip=209.85.221.53 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="ELapdiot" Received: by mail-wr1-f53.google.com with SMTP id ffacd0b85a97d-3914aba1ce4so3634958f8f.2; Mon, 14 Apr 2025 06:00:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1744635627; x=1745240427; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=/2427Gt32tJZ/eAtKR3IoeTfqSzJgoxatQqsLi3aD1w=; b=ELapdiotMw8ubGXbrvWPSj4Da16helJ9YamWHW2GK6K0ZFAldBWPCzRKX7bH9x5zAW vKkWWON0jEz8JfN/KpbIIXrDbJfvhWvKpi8ny0fuNpYjuBsLQJTJn61rP2CpWjg/2qDb lrzS99UoFwe8GNAL7kjrlKavdsz9SAxTDVf/NFFHbsLFOvdVKXQ93zYzNc9ZdmL61vdQ 8/PjC43nOakbu2+Hp5Kgpnhc6cYgl3WF1Y+GwAbPILx6B/FR1ZuTapBH5wIXvQEinHf0 VIxeB/NOLcjpu0+Hb7GEFJKb3gt5odBkdOiyLQXw7l1GVu5HIS61ARKcvRWbTkZ6RKrK 2qVQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1744635627; x=1745240427; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=/2427Gt32tJZ/eAtKR3IoeTfqSzJgoxatQqsLi3aD1w=; b=ZcktI19eHgJoBNuhh0kfOoV+ZtWxRBcl5jRobJPZjYVw8OC8i+KwWtlxBxhhaThhZ1 XK2+rZy+0Bgs5+3k2UntYUGVi0hzMJ7rrYbHnmq9UArDr8z1f7OVcaVoX1G+vWnqI3Kb ZI9tTaZ6BNDMTfxL0WUe64o/LQM7+B0RnLdmXpAuU0grdkgDhv8WvxsoykFOoeJJMwPC xlgevsuN1fGns8TmCsLXImBljQcJzJrnh64ePDlZhclO1IH85PA+ZqAxuyE+i5zT7eG4 n5xdCZxJ814hhPGHdVLHY+MB+MoGRFl8ja0SzOdJ717BPnoo7j2nF49GJYGblkupdIN0 eoRA== X-Forwarded-Encrypted: i=1; AJvYcCUs2WpqE/XNAztgrWNwem43/H0KAsLtpB2rkP5CS8jrSvQZjcKRAEIpCxo26zlU9TBGDJ/MLr2yuzbP2sSF@vger.kernel.org, AJvYcCXQ1FtrU1J1Pkf5MjCWePkGxZIPiBubKIemhTZekvcDhoWtkek8pY7CWlvLozOpqs01JAmUE+bHwwys@vger.kernel.org X-Gm-Message-State: AOJu0YxUOofYjKfuX/7OMqHPtAPFriG7hACxkfehku0IxA1FyPEeGjS3 Wg+rojW6HxyNYfs5zEgIxUVcadfFTCKRG3UxDTiMOf97nL5WfVQY X-Gm-Gg: ASbGncta+lgS34tcavpL96RYbZK4vcYP1dyBm1QvBySfs6Zm3t+bYC6jv3XKF7ItL4h 5Iqo4vAofoUQS+fA1EqIUKqxIpXHcimivsgAQFCYOpVsWzrNcQK2YUklqnQWiqxJSAeR/ipxKEU HAnE/Ef1xTsd8v4pp1vdgLEDbn536jZXCDNukNiwC9Hh/mlgjVq1tEm75ovcnK3fP3DRuZoAirZ vigUKQom5TL4A35yNz+9kP75kcyapL9EL5AdR8XRgKjNiBe3gFbm0hBEqSXJC1SOuK8sNgl3Uhe E424gSozrQZRH8eQTghuhyDgyW0c4xXte69d4uSgomqFtak+WPLjzjCtnJrPHHum X-Google-Smtp-Source: AGHT+IGt6CFoV6kYc1oA0gav70B3lraHCV6cPJ5lCOXquAVMEOKF33QQLauUeTQaI1Xv0ehjKBe+uQ== X-Received: by 2002:a05:6000:2481:b0:391:2bcc:11f2 with SMTP id ffacd0b85a97d-39ea51ed3ebmr10642258f8f.1.1744635627040; Mon, 14 Apr 2025 06:00:27 -0700 (PDT) Received: from iku.Home ([2a06:5906:61b:2d00:eb55:397c:6c6:e937]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-39eae979663sm11214681f8f.51.2025.04.14.06.00.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 14 Apr 2025 06:00:26 -0700 (PDT) From: Prabhakar X-Google-Original-From: Prabhakar To: Philipp Zabel , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Geert Uytterhoeven , Magnus Damm Cc: linux-renesas-soc@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Prabhakar , Biju Das , Fabrizio Castro , Lad Prabhakar Subject: [PATCH v4 3/3] MAINTAINERS: Add entry for Renesas RZ/V2H(P) USB2PHY Port Reset driver Date: Mon, 14 Apr 2025 14:00:20 +0100 Message-ID: <20250414130020.248374-4-prabhakar.mahadev-lad.rj@bp.renesas.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250414130020.248374-1-prabhakar.mahadev-lad.rj@bp.renesas.com> References: <20250414130020.248374-1-prabhakar.mahadev-lad.rj@bp.renesas.com> Precedence: bulk X-Mailing-List: linux-renesas-soc@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 From: Lad Prabhakar Add a new MAINTAINERS entry for the Renesas RZ/V2H(P) USB2PHY Port Reset driver. Signed-off-by: Lad Prabhakar --- MAINTAINERS | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/MAINTAINERS b/MAINTAINERS index 207ed66ead11..39adc1decb20 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -20609,6 +20609,14 @@ S: Maintained F: Documentation/devicetree/bindings/usb/renesas,rzn1-usbf.yaml F: drivers/usb/gadget/udc/renesas_usbf.c +RENESAS RZ/V2H(P) USB2PHY PORT RESET DRIVER +M: Fabrizio Castro +M: Lad Prabhakar +L: linux-renesas-soc@vger.kernel.org +S: Supported +F: Documentation/devicetree/bindings/reset/renesas,rzv2h-usb2phy-reset.yaml +F: drivers/reset/reset-rzv2h-usb2phy.c + RENESAS RZ/V2M I2C DRIVER M: Fabrizio Castro L: linux-i2c@vger.kernel.org