From patchwork Sun Mar 2 19:51:54 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alexander Sverdlin X-Patchwork-Id: 13997997 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id ED230C19F32 for ; Sun, 2 Mar 2025 19:52:35 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=jvF8JbLlwWkSyV9bPSpavto1bNW20MCWFFpHxZd7rVs=; b=ewL8DR7KCKhVny NQ9e17/ww+8xo55418M0lTRcj9/6OYOuvQ6vD/deek5YfGM/fqxb1gWTbgyEDxymK6m8l7LpR2r/S VpcsI/ygm45p2goZMuUJl2XXNRkONwuVE6A/nF4btCRcv8p9KC5kb8Ts1A+YazMKn8iIt/H1CYJ8y uMjDdQxAcAahCgRpgw/yOwLCtSYEfiHtsY/IZ4jgsCAbPcjzFZDSLYhLxcArR6M1LdOqPhn6SW3in Wk7h4LEl7zj5kKGOnbj/nJ0fjN7VrU6VFLiIcEIEc5dbwOGpFaAFvoyYIZDuCvjRxCivROu6DCrCw TXOo/mTCtyQM6/j/up6g==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1topMQ-0000000GbWO-29tO; Sun, 02 Mar 2025 19:52:26 +0000 Received: from mail-ed1-x536.google.com ([2a00:1450:4864:20::536]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1topMN-0000000GbV2-0D5c for linux-riscv@lists.infradead.org; Sun, 02 Mar 2025 19:52:24 +0000 Received: by mail-ed1-x536.google.com with SMTP id 4fb4d7f45d1cf-5e50de0b5easo1947194a12.3 for ; Sun, 02 Mar 2025 11:52:22 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1740945141; x=1741549941; darn=lists.infradead.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=5c4NPufpKoLHDbbT+GlLj3VGqCkTEQTVZclMQAkqv7A=; b=R/EK3T+wTtGZqVQX4DJh7baCRpJVErIOVxEse4lbp9cMqezakB63lxypWN1tt16lyS RHveApZi8DFP75VYvXKzHWmdyO+A5bd2iIEzzkplfByW8gkIPkNDJ2vx+MYpy8gI7QTF 1fIyBU3qC2fa+oHu3xt9XPguoQ1ogf+7T7okKdLQD4HV5bkj3qE+3t15kuxHsGNFQy6/ KeLMB8zX+MGVB51iVgtLRl9dAs4b0ci5h9ubCoXw56fc/Rt6CcunIcUVpRoCdLtkcQ+w 4HsSrkp0YQPVjUFN6s0mQ9q1fir4t4z8HJwLhYo3ZrrSySyYkKz7yPV8VXMNRMlIdVHd FjFQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1740945141; x=1741549941; 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=5c4NPufpKoLHDbbT+GlLj3VGqCkTEQTVZclMQAkqv7A=; b=qiETlh0gFYe55SUhpWTxCCW30vGr0ndr6UbqUDfbeQNHNZ00A8FHN8O9CB/GTnxhpr hYKHUrba5df9hzTuWuDt9qXWcZS0gCh8NCa2rBZgz4mn8rmsNiuffyQdf18TABbd3iHH fgvNlHIOTFLSexz0vskTkCxgeIK+Tq5tJhg7bqmdfOYvJdIeZ5eHFKMari/N+K6c1hOb 2VQpbNxogYeuEuZtXjxIIxnXFAcPhgFnXlR0XGNr/dfAiVJELxjqiwP914SvxSIjz8X2 8V2do+X7PgVhLtPuSJhKaIRg3zYr3ds66lzX02B4lNt9plxnMRqjp/V2F6Fk2EZWboju q2cQ== X-Forwarded-Encrypted: i=1; AJvYcCXxsrNCMDib6eiiKcJnJaMcwi99hZ5jYTVGoU4GCljhxWHadpDN0wMblamM5fHRYHHfCys/EgZH2/i7pA==@lists.infradead.org X-Gm-Message-State: AOJu0YxM+70wJ9ryZp9yeoOTlMp7Yrlw5c0RNs1jdJ1opa7OoOpcwC8E 4R2uZeAGm/xUxTJ0OUkSpn61JWAF/SUJnSuCY6ytKjnfNBEjWgKU X-Gm-Gg: ASbGnct0Se+wXZSRLqdU8tIC0+pN91Sr0XwjDrkJx0AOQtxTmU9P3crH239RYTmxXEc Gu9uXFhLClK5QRNcRdv1jwkal2qMWVA/PjCvFrQHOQVcCj7kOmfgCI8QFMCgv3ou6xxO8F7JNud 1c6GiukqUOPQh84iN/t+aNYgUf8zyGnHbBq+6rMJa6EtdSW0TlLidjpfk2tlOEmYQ3zBCy+s5jd xs0fp+WMXIb2PKdSV0neQTiHIMvsuGa3eLN8b4zghP8r7hoJlirw+PjzijC2tJuQ/q5+zLdb+uL PvS5hiGwZSJHy/JrBhKRw5P3eKxckb6xvAVbKJ8F78+Zkjc/qhjgQNB3EQ== X-Google-Smtp-Source: AGHT+IHMRWSeokwzGm9sYVxt6NEktsQseTTVLAH9cmQzwWOcNzWx1ZDznjFLVkWHDK9J21xpb4xkkQ== X-Received: by 2002:a05:6402:528a:b0:5e5:437c:1daf with SMTP id 4fb4d7f45d1cf-5e5437c22a7mr3296240a12.16.1740945140979; Sun, 02 Mar 2025 11:52:20 -0800 (PST) Received: from giga-mm.. ([2a02:1210:861b:6f00:82ee:73ff:feb8:99e3]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-5e4c43a5acdsm5809705a12.77.2025.03.02.11.52.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 02 Mar 2025 11:52:20 -0800 (PST) From: Alexander Sverdlin To: devicetree@vger.kernel.org, linux-riscv@lists.infradead.org, linux-rtc@vger.kernel.org Cc: Jingbao Qiu , Inochi Amaoto , dlan@gentoo.org, linux-kernel@vger.kernel.org, Lee Jones , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Chen Wang , Paul Walmsley , Palmer Dabbelt , Albert Ou , Alexandre Belloni , sophgo@lists.linux.dev, Alexander Sverdlin Subject: [PATCH v12 1/3] dt-bindings: mfd: sophgo: add RTC support for Sophgo CV1800 series SoC Date: Sun, 2 Mar 2025 20:51:54 +0100 Message-ID: <20250302195205.3183174-2-alexander.sverdlin@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250302195205.3183174-1-alexander.sverdlin@gmail.com> References: <20250302195205.3183174-1-alexander.sverdlin@gmail.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250302_115223_092438_A5E6921A X-CRM114-Status: GOOD ( 15.14 ) X-BeenThere: linux-riscv@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-riscv" Errors-To: linux-riscv-bounces+linux-riscv=archiver.kernel.org@lists.infradead.org From: Jingbao Qiu Add RTC devicetree binding for Sophgo CV1800 series SoC. The device is called RTC, but contains control registers of other HW blocks in its address space, most notably of Power-on-Reset (PoR) module, DW8051 IP (MCU core), accompanying SRAM, hence putting it in MFD subsystem. Signed-off-by: Jingbao Qiu Signed-off-by: Alexander Sverdlin --- Changelog: v12: - maintainer Jingbao Qiu -> sophgo@lists.linux.dev - dropped Reviewed-by: Krzysztof Kozlowski - link to TRM - mentioned 8051 core in the description - binding is now MFD, not RTC - added "syscon" compatible - added "interrupt-names", "clock-names" (because of added PM/remoteproc) - main compatible "sophgo,cv1800-rtc" -> "sophgo,cv1800b-rtc" .../bindings/mfd/sophgo,cv1800b-rtc.yaml | 86 +++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 Documentation/devicetree/bindings/mfd/sophgo,cv1800b-rtc.yaml diff --git a/Documentation/devicetree/bindings/mfd/sophgo,cv1800b-rtc.yaml b/Documentation/devicetree/bindings/mfd/sophgo,cv1800b-rtc.yaml new file mode 100644 index 000000000000..b80d68502c48 --- /dev/null +++ b/Documentation/devicetree/bindings/mfd/sophgo,cv1800b-rtc.yaml @@ -0,0 +1,86 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/mfd/sophgo,cv1800b-rtc.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Real Time Clock of the Sophgo CV1800 SoC + +description: + The RTC (Real Time Clock) is an independently powered module in the chip. It + contains a 32KHz oscillator and a Power-On-Reset (POR) sub-module, which can + be used for time display and scheduled alarm produce. In addition, the + hardware state machine provides triggering and timing control for chip + power-on, power-off and reset. + + Furthermore, the 8051 subsystem is located within RTCSYS and is independently + powered. System software can use the 8051 to manage wake conditions and wake + the system while the system is asleep, and communicate with external devices + through peripheral controllers. + + Technical Reference Manual available at + https://github.com/sophgo/sophgo-doc/tree/main/SG200X/TRM + +maintainers: + - sophgo@lists.linux.dev + +allOf: + - $ref: /schemas/rtc/rtc.yaml# + +properties: + compatible: + items: + - const: sophgo,cv1800b-rtc + - const: syscon + + reg: + maxItems: 1 + + interrupts: + items: + - description: RTC Alarm + - description: RTC Longpress + - description: VBAT DET + + interrupt-names: + items: + - const: alarm + - const: longpress + - const: vbat + + clocks: + items: + - description: RTC clock source + - description: DW8051 MCU clock source + + clock-names: + items: + - const: rtc + - const: mcu + +required: + - compatible + - reg + - interrupts + - interrupt-names + - clocks + - clock-names + +unevaluatedProperties: false + +examples: + - | + #include + #include + + rtc@5025000 { + compatible = "sophgo,cv1800b-rtc", "syscon"; + reg = <0x5025000 0x2000>; + interrupts = <17 IRQ_TYPE_LEVEL_HIGH>, + <18 IRQ_TYPE_LEVEL_HIGH>, + <19 IRQ_TYPE_LEVEL_HIGH>; + interrupt-names = "alarm", "longpress", "vbat"; + clocks = <&clk CLK_RTC_25M>, + <&clk CLK_SRC_RTC_SYS_0>; + clock-names = "rtc", "mcu"; + }; From patchwork Sun Mar 2 19:51:55 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alexander Sverdlin X-Patchwork-Id: 13998000 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 347D8C282CD for ; Sun, 2 Mar 2025 19:52:49 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=duJkdCq/d8qd1f7AZL9tLPgMm+oDASHl0vDIJLVuB9Y=; b=pplY8gsK2TfLxy kXA1a6fbak8xykKDI+ERWaF6qfDDFr/28l8FS4XD7XqxouAbdPUib+cE2TsvXbfaRXM8LdmQKhRTJ eu6fKeqoKDGR6K2tybtjfIi1Ba4auXk9h2hk2xzAw04JvL63yRI2jZkNMZRTwVxw/Ld6kWoCi2rGM sE5J78NOs8f6gF9iUbMR0tyMctRTeFRSMFLHFLtU3Q6zcAvxE//7ETJzlmtZX5kRa1dfnsXvY01jN J3Qt+4pWcDDQ17dAEPaMkXaaaIuBdL4xTLgxkCahyY4/RwBS/s0bOXB4rA8al4xreGLyvZ7MAzOTr uOCp6OP0TIgpf0Opon/Q==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1topMR-0000000GbWX-0EFR; Sun, 02 Mar 2025 19:52:27 +0000 Received: from mail-ed1-x52f.google.com ([2a00:1450:4864:20::52f]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1topMO-0000000GbVV-1DBt for linux-riscv@lists.infradead.org; Sun, 02 Mar 2025 19:52:25 +0000 Received: by mail-ed1-x52f.google.com with SMTP id 4fb4d7f45d1cf-5e4d3f92250so4632317a12.1 for ; Sun, 02 Mar 2025 11:52:23 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1740945142; x=1741549942; darn=lists.infradead.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=tBIPfPR4UgxUw2DZuLDEZ4PWQB7JnRoO7gZczhX9Dz4=; b=VZyi8FCtKAk+/ops6sCkbylOv1uxMCzgDqbgIcKRQ+sMSzFBdraUofhjtfvwdkYpM4 kHLMNW3DJBDwOGO+vQX86qpmCleT1P0CdtPPe7oywT+O4mqhynkPWUHX+PydcLNWGbL8 ye25ogXHSr9MGAQc99+XGU9IjMqdm4/bzkvsZq5q5JDjzEMpqPjaLnrctexrpCxRCaQB T6cGfYzpCS8XNH4cBdysxMPo3Nef+wbgQhGiQLgQLs8jQELn2qIj1s0wlpmpVce++eZG cNt7uV4lFaL3S+sX79myKGBcitfMqo/1TBFoJ8XunT9vAUkKgF1+/X23kcQklmW+s3P1 LWMw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1740945142; x=1741549942; 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=tBIPfPR4UgxUw2DZuLDEZ4PWQB7JnRoO7gZczhX9Dz4=; b=buBhhBqNk14rIVMm2bW8/OI+2tM6NxakdNXxf48E1UDFMPjJ9xwnb9UQxbBi1KhNOV fXwR3H6lQvDOeM2CRgX2m0+TOe0zFYZ4iIg6G3wEN+lwskBLwdoCyBaQCC/0l7sVtu9U xU87FpiT4i7VGiJZep2pBHsb0+7mPNxAByiWdeNoPQv3hCv4c3aiPR1e5ZnPzbUucwLN ZTLnw1etOFr2PJTAvD2sbzsv2PT5B96OYsMXFTkJ0bfH6xTB98cZZcsHtk2eh8S4tfZO lxycbCl8dLwHWl95rhouwkepLXLTDHecW1lVeLh/0hJduzi/KZe26gbfHbPRIr4vpMyo v/uA== X-Forwarded-Encrypted: i=1; AJvYcCXJSFjyMQsAdfT6V6e5bmazLjBMHO3EhzXkuOhW5xmFF7nvZa+1piPbTp/DFVlxTUD9Vk5ZydgcAhDW9A==@lists.infradead.org X-Gm-Message-State: AOJu0YzfIQb2c59bZiPLK86Bxh2HdauJJ+KFO/QFNzydu0pgmXdTx12v F1Ya6iwFbl2Zub87znumAVlfLCne8Q/Fw3rLMNFd7pVG3Ia5sfvI X-Gm-Gg: ASbGncsmCWlMvX0Az06FHb5N7+EIYOPpHyIV7r7JY4IDB8qK2/BnKGSzGUe6ABqm/Jb OGOnMjhBsWLu5aOwrzUBAcfeCD8w6daXArjopRCYz23rmDcDRyR8z+tlY5MGhXxVtUlaq/6mceU gTQxgRrK+BEx+pMsR/lP1wLFLIXuNBEYuHSEpV8LnHYobd5pFcWXowqxY9HqXVrs073ddHuEZmx ZA751sQwolEJy1w5ex2Xb41Y3HzrnrCf/s78TMLl4ZpItTEeiTfQAzw+GR0LQmry8BpBP25Kd9e sLRoH6EI2lPSsf8d7zEeEGv7mxF3ca/Wj+K+qf7z4BvZ1htgLOAKP4O6RQ== X-Google-Smtp-Source: AGHT+IFuq//yKaBD8TJ1fGUNSicZNMgRwkWcmO30Mxpb/rZWbY3IEDKofA4wWgUEzTrF67UfWfThGw== X-Received: by 2002:a05:6402:3715:b0:5e0:5605:211a with SMTP id 4fb4d7f45d1cf-5e4d6b0e4admr12438605a12.18.1740945142275; Sun, 02 Mar 2025 11:52:22 -0800 (PST) Received: from giga-mm.. ([2a02:1210:861b:6f00:82ee:73ff:feb8:99e3]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-5e4c43a5acdsm5809705a12.77.2025.03.02.11.52.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 02 Mar 2025 11:52:21 -0800 (PST) From: Alexander Sverdlin To: devicetree@vger.kernel.org, linux-riscv@lists.infradead.org, linux-rtc@vger.kernel.org Cc: Alexander Sverdlin , Inochi Amaoto , dlan@gentoo.org, linux-kernel@vger.kernel.org, Jingbao Qiu , Lee Jones , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Chen Wang , Paul Walmsley , Palmer Dabbelt , Albert Ou , Alexandre Belloni , sophgo@lists.linux.dev Subject: [PATCH v12 2/3] mfd: sophgo: cv1800: rtcsys: New driver (handling RTC only) Date: Sun, 2 Mar 2025 20:51:55 +0100 Message-ID: <20250302195205.3183174-3-alexander.sverdlin@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250302195205.3183174-1-alexander.sverdlin@gmail.com> References: <20250302195205.3183174-1-alexander.sverdlin@gmail.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250302_115224_329293_6200C8E5 X-CRM114-Status: GOOD ( 20.56 ) X-BeenThere: linux-riscv@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-riscv" Errors-To: linux-riscv-bounces+linux-riscv=archiver.kernel.org@lists.infradead.org Add driver for Sophgo CV1800 series SoC RTC MFD. The RTC module comprises a 32kHz oscillator, Power-on-Reset (PoR) sub-module, HW state machine to control chip power-on, power-off and reset. Furthermore, the 8051 subsystem is located within RTCSYS including associated SRAM block. This patch only populates RTC sub-device. Signed-off-by: Alexander Sverdlin --- Changelog: v12: - new patch MAINTAINERS | 1 + drivers/mfd/Kconfig | 14 ++++++++ drivers/mfd/Makefile | 1 + drivers/mfd/cv1800-rtcsys.c | 66 +++++++++++++++++++++++++++++++++++++ 4 files changed, 82 insertions(+) create mode 100644 drivers/mfd/cv1800-rtcsys.c diff --git a/MAINTAINERS b/MAINTAINERS index 92fc0eca7061..446156998380 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -22185,6 +22185,7 @@ M: Chen Wang M: Inochi Amaoto T: git https://github.com/sophgo/linux.git S: Maintained +F: drivers/mfd/cv1800-rtcsys.c N: sophgo K: sophgo diff --git a/drivers/mfd/Kconfig b/drivers/mfd/Kconfig index 6b0682af6e32..842cc4d95c4b 100644 --- a/drivers/mfd/Kconfig +++ b/drivers/mfd/Kconfig @@ -285,6 +285,20 @@ config MFD_CS42L43_SDW Select this to support the Cirrus Logic CS42L43 PC CODEC with headphone and class D speaker drivers over SoundWire. +config MFD_CV1800_RTCSYS + tristate "Sophgo CV1800 RTC MFD" + depends on ARCH_SOPHGO || COMPILE_TEST + select MFD_CORE + help + If you say yes here you get support the RTC MFD driver for Sophgo + CV1800 series SoC. The RTC module comprises a 32kHz oscillator, + Power-on-Reset (PoR) sub-module, HW state machine to control chip + power-on, power-off and reset. Furthermore, the 8051 subsystem is + located within RTCSYS including associated SRAM block. + + This driver can also be built as a module. If so, the module will be + called cv1800-rtcsys. + config MFD_MADERA tristate "Cirrus Logic Madera codecs" select MFD_CORE diff --git a/drivers/mfd/Makefile b/drivers/mfd/Makefile index 9220eaf7cf12..3cf03ffeedbb 100644 --- a/drivers/mfd/Makefile +++ b/drivers/mfd/Makefile @@ -18,6 +18,7 @@ obj-$(CONFIG_MFD_CROS_EC_DEV) += cros_ec_dev.o obj-$(CONFIG_MFD_CS42L43) += cs42l43.o obj-$(CONFIG_MFD_CS42L43_I2C) += cs42l43-i2c.o obj-$(CONFIG_MFD_CS42L43_SDW) += cs42l43-sdw.o +obj-$(CONFIG_MFD_CV1800_RTCSYS) += cv1800-rtcsys.o obj-$(CONFIG_MFD_ENE_KB3930) += ene-kb3930.o obj-$(CONFIG_MFD_EXYNOS_LPASS) += exynos-lpass.o obj-$(CONFIG_MFD_GATEWORKS_GSC) += gateworks-gsc.o diff --git a/drivers/mfd/cv1800-rtcsys.c b/drivers/mfd/cv1800-rtcsys.c new file mode 100644 index 000000000000..72d11284f1de --- /dev/null +++ b/drivers/mfd/cv1800-rtcsys.c @@ -0,0 +1,66 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Driver for Sophgo CV1800 series SoC RTC MFD + * + * The RTC module comprises a 32kHz oscillator, Power-on-Reset (PoR) sub-module, + * HW state machine to control chip power-on, power-off and reset. Furthermore, + * the 8051 subsystem is located within RTCSYS including associated SRAM block. + * + * Copyright (C) 2025 Alexander Sverdlin + * + */ + +#include +#include +#include +#include + +static struct resource cv1800_rtcsys_irq_resources[] = { + DEFINE_RES_IRQ_NAMED(0, "alarm"), +}; + +static const struct mfd_cell cv1800_rtcsys_subdev[] = { + { + .name = "cv1800-rtc", + .num_resources = 1, + .resources = &cv1800_rtcsys_irq_resources[0], + }, +}; + +static const struct mfd_cell cv1800_rtcsys_rtc_subdev = + MFD_CELL_NAME("cv1800-rtc"); + +static int cv1800_rtcsys_probe(struct platform_device *pdev) +{ + int irq; + + irq = platform_get_irq_byname(pdev, "alarm"); + if (irq < 0) + return irq; + cv1800_rtcsys_irq_resources[0].start = irq; + cv1800_rtcsys_irq_resources[0].end = irq; + + return devm_mfd_add_devices(&pdev->dev, PLATFORM_DEVID_AUTO, + cv1800_rtcsys_subdev, + ARRAY_SIZE(cv1800_rtcsys_subdev), + NULL, 0, NULL); +} + +static const struct of_device_id cv1800_rtcsys_of_match[] = { + { .compatible = "sophgo,cv1800b-rtc" }, + { /* sentinel */ } +}; +MODULE_DEVICE_TABLE(of, cv1800_rtcsys_of_match); + +static struct platform_driver cv1800_rtcsys_mfd = { + .probe = cv1800_rtcsys_probe, + .driver = { + .name = "cv1800_rtcsys", + .of_match_table = cv1800_rtcsys_of_match, + }, +}; +module_platform_driver(cv1800_rtcsys_mfd); + +MODULE_AUTHOR("Alexander Sverdlin "); +MODULE_DESCRIPTION("Sophgo CV1800 series SoC RTC MFD driver"); +MODULE_LICENSE("GPL"); From patchwork Sun Mar 2 19:51:56 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alexander Sverdlin X-Patchwork-Id: 13997998 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 34FBCC282CD for ; Sun, 2 Mar 2025 19:52:37 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=AY7NidcmPWb6i+v6MF5u0yt7dffkxX496/gfTm/xk5I=; b=HkhsUUiXxBh88n mzLkK+OLB0MSKhBSZW89/1SPCZwgAfbP+t+El1FX+MWwctfLWADFdb6ZMfLwFVmQwSdNsSCupCQ/a Z+5gWIVLpMuAlTNL/QsxbP/brSuRjR/i7klcDsVzvlK7ybO27MwKQ3ZOcG64dtRtJI40rJn5kCz8l IBX95v6LWDpIiMbNN99gybkohCKQm0aohFj+Q3lBSSv/a7zAhRIk/C6xOaTMS62odQoidhpdbEygc gqafxvPEbytyPMWMyjWTornQXGe1d9yB+wHot73+R6t6RijMgni9IZlXxgiuAkHcWplLfkvg3MVe8 h51tcxXM8UDu5iUP+Z+w==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1topMS-0000000GbWs-2bYW; Sun, 02 Mar 2025 19:52:28 +0000 Received: from mail-ej1-x62e.google.com ([2a00:1450:4864:20::62e]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1topMP-0000000GbVx-2KmH for linux-riscv@lists.infradead.org; Sun, 02 Mar 2025 19:52:26 +0000 Received: by mail-ej1-x62e.google.com with SMTP id a640c23a62f3a-abf4b376f2fso240429166b.3 for ; Sun, 02 Mar 2025 11:52:25 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1740945144; x=1741549944; darn=lists.infradead.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=geqIJH4ZbhDfifYmudp+lR9EwCjUFtE9Nbs9m0I7Hhw=; b=M4TwOG+4NpUE6cZ2ArVmXu1XASFC+eqA5gIAGYyXwW3mzhzFaMiihDoCGfeBYgQ5NR wElD7qJN35u44ulCjcOSWwVi1qFGDXksd4dZilzQpGfYRolgzg3CX0CafOWyYQR9TPBn Cih5yKUI0wfSIsb2KsWaP09LDv9zwMbaIP3KUI+8XaLMTHpt9NSIckDPoHytSmTITypi pH8dnHeJQmsRjqsli6dvugmNUvehb0dmMHiKAdSS4BlYdeqbcNCxCiuchNOJfTZ2Idsm HZxi9n7CP988fg/xyEQDNrHxM5ND1JZAL/pANPexSuuQpNM7P48qGDi9sK1efpXYUhSA Ze3Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1740945144; x=1741549944; 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=geqIJH4ZbhDfifYmudp+lR9EwCjUFtE9Nbs9m0I7Hhw=; b=Nw20ciYkq1hVZN1yo96Jw/a0CAsSOs/s1yvUET8uiZb8mwMrLNXZSwK++fiFyUWJMp u83sIm673nRz5dVqAQUE1PAedL2aOoaVq53bUMG8JhGPAmBnBXswJCpAhpLU45fCjjAo MLsTHjNgOVF5xpO+5qUSU9KQzklRMmBurYGUxp8294LFoXbimWadB4JdEVL5xfwhA+cm rkW6EN9JDCMYgXLIJ7AfFioR1UGw1dCAQxZmgs3JEvvDD+DTsqqsU1PAj1AGA48ZTmn+ 078Jdku9uM3vu+B04zMeAfKpXJ1Hp27eBCsIFPwPMwfsQdNPs1pmqU7FjdCsz8rS+7eI twWg== X-Forwarded-Encrypted: i=1; AJvYcCUWu9IU3GM/w2qRPVLi7s2xV7yq4BAOIc31t/7ch2ZK5Jg9Q5TLsf7FN8aV5VZoAl86Cp8NpeXbTVz2Fw==@lists.infradead.org X-Gm-Message-State: AOJu0YzJ0LT4mvYErwe8NZdGGlkcW7onpCBHD0NweNFZlrpA0uiQhv5S X/bJHX7NCBGY6QIGQ8LPwMVr8fWSgrao1j2wLG1RFLq5hUgkJx0E X-Gm-Gg: ASbGncsuNJjaaNydUbmg7A9lluzEUcyFAYVB1sr4vTlLLDB3lioCTX6PVFWYahZ3p65 a+75tTd/LJB5SJ2sz6jJkKPFHOtKIE6/0tExqsinxg+SxQ6M4+vnUwnf3XVkgtHTRM/nVFXgk25 ipOUpSTez77TlashRakioXjlq+gui+OPMT1sNXSOJtVmy9rcGTUGO6DNpMDKpriUWrp3dKNDu0V zdihXsFEifq8Yuutofm2rP/BSCLoeHMT0SZTkQGGJu7DQtCbth7dyQqWWW6x7H5DY6Y44A5sYit m+NHNv1gNU0EwHBjKI/EZdEiORREftKW1jFKDlRwMxKQUlc3PCqiA8SqHA== X-Google-Smtp-Source: AGHT+IEVQi87WpvJPE+ITZKW4KN8LE8ET2pDw7bFNwsDi7FEYME4D4Cx72dGVTss6isDxSYXAcgHKA== X-Received: by 2002:a17:907:9620:b0:abe:f8c0:c1ab with SMTP id a640c23a62f3a-abf265d3be4mr1399615466b.46.1740945143564; Sun, 02 Mar 2025 11:52:23 -0800 (PST) Received: from giga-mm.. ([2a02:1210:861b:6f00:82ee:73ff:feb8:99e3]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-5e4c43a5acdsm5809705a12.77.2025.03.02.11.52.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 02 Mar 2025 11:52:23 -0800 (PST) From: Alexander Sverdlin To: devicetree@vger.kernel.org, linux-riscv@lists.infradead.org, linux-rtc@vger.kernel.org Cc: Jingbao Qiu , Inochi Amaoto , dlan@gentoo.org, linux-kernel@vger.kernel.org, Lee Jones , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Chen Wang , Paul Walmsley , Palmer Dabbelt , Albert Ou , Alexandre Belloni , sophgo@lists.linux.dev, Alexander Sverdlin Subject: [PATCH v12 3/3] rtc: sophgo: add rtc support for Sophgo CV1800 SoC Date: Sun, 2 Mar 2025 20:51:56 +0100 Message-ID: <20250302195205.3183174-4-alexander.sverdlin@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250302195205.3183174-1-alexander.sverdlin@gmail.com> References: <20250302195205.3183174-1-alexander.sverdlin@gmail.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250302_115225_599409_26C60F80 X-CRM114-Status: GOOD ( 26.59 ) X-BeenThere: linux-riscv@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-riscv" Errors-To: linux-riscv-bounces+linux-riscv=archiver.kernel.org@lists.infradead.org From: Jingbao Qiu Implement the RTC driver for CV1800, which able to provide time alarm. Signed-off-by: Jingbao Qiu Signed-off-by: Alexander Sverdlin --- v12: - added MAINTAINERS entry - depends on cv1800-rtcsys MFD driver - use syscon for regmap - get named clock from parent MFD - corresponding platform device is expected to be instantiated by MFD stub Changes since v10: - only start RTC on set_time; Changes since v9: - further simplified bitmask macros; - unconditional RTC start (rtc_enable_sec_counter()), otherwise didn't start on SG2000; - dropped ANA_CALIB modification (has been forgotten in v8 with the drop of SW calibration to switch to HW calibration); - successfully tested on SG2000; MAINTAINERS | 1 + drivers/rtc/Kconfig | 12 +++ drivers/rtc/Makefile | 1 + drivers/rtc/rtc-cv1800.c | 218 +++++++++++++++++++++++++++++++++++++++ 4 files changed, 232 insertions(+) create mode 100644 drivers/rtc/rtc-cv1800.c diff --git a/MAINTAINERS b/MAINTAINERS index 446156998380..d4e0569da602 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -22186,6 +22186,7 @@ M: Inochi Amaoto T: git https://github.com/sophgo/linux.git S: Maintained F: drivers/mfd/cv1800-rtcsys.c +F: drivers/rtc/rtc-cv1800.c N: sophgo K: sophgo diff --git a/drivers/rtc/Kconfig b/drivers/rtc/Kconfig index 0bbbf778ecfa..9da247ec4084 100644 --- a/drivers/rtc/Kconfig +++ b/drivers/rtc/Kconfig @@ -1395,6 +1395,18 @@ config RTC_DRV_ASM9260 This driver can also be built as a module. If so, the module will be called rtc-asm9260. +config RTC_DRV_CV1800 + tristate "Sophgo CV1800 RTC" + depends on MFD_CV1800_RTCSYS || COMPILE_TEST + select MFD_SYSCON + select REGMAP + help + If you say yes here you get support the RTC driver for Sophgo CV1800 + series SoC. + + This driver can also be built as a module. If so, the module will be + called rtc-cv1800. + config RTC_DRV_DIGICOLOR tristate "Conexant Digicolor RTC" depends on ARCH_DIGICOLOR || COMPILE_TEST diff --git a/drivers/rtc/Makefile b/drivers/rtc/Makefile index 489b4ab07068..621b30a33dda 100644 --- a/drivers/rtc/Makefile +++ b/drivers/rtc/Makefile @@ -44,6 +44,7 @@ obj-$(CONFIG_RTC_DRV_CADENCE) += rtc-cadence.o obj-$(CONFIG_RTC_DRV_CMOS) += rtc-cmos.o obj-$(CONFIG_RTC_DRV_CPCAP) += rtc-cpcap.o obj-$(CONFIG_RTC_DRV_CROS_EC) += rtc-cros-ec.o +obj-$(CONFIG_RTC_DRV_CV1800) += rtc-cv1800.o obj-$(CONFIG_RTC_DRV_DA9052) += rtc-da9052.o obj-$(CONFIG_RTC_DRV_DA9055) += rtc-da9055.o obj-$(CONFIG_RTC_DRV_DA9063) += rtc-da9063.o diff --git a/drivers/rtc/rtc-cv1800.c b/drivers/rtc/rtc-cv1800.c new file mode 100644 index 000000000000..18bc542bbdb8 --- /dev/null +++ b/drivers/rtc/rtc-cv1800.c @@ -0,0 +1,218 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* + * rtc-cv1800.c: RTC driver for Sophgo cv1800 RTC + * + * Author: Jingbao Qiu + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define SEC_PULSE_GEN 0x1004 +#define ALARM_TIME 0x1008 +#define ALARM_ENABLE 0x100C +#define SET_SEC_CNTR_VAL 0x1010 +#define SET_SEC_CNTR_TRIG 0x1014 +#define SEC_CNTR_VAL 0x1018 + +/* + * When in VDDBKUP domain, this MACRO register + * does not power down + */ +#define MACRO_RO_T 0x14A8 +#define MACRO_RG_SET_T 0x1498 + +#define ALARM_ENABLE_MASK BIT(0) +#define SEL_SEC_PULSE BIT(31) + +struct cv1800_rtc_priv { + struct rtc_device *rtc_dev; + struct regmap *rtc_map; + struct clk *clk; + int irq; +}; + +static bool cv1800_rtc_enabled(struct device *dev) +{ + struct cv1800_rtc_priv *info = dev_get_drvdata(dev); + u32 reg; + + regmap_read(info->rtc_map, SEC_PULSE_GEN, ®); + + return (reg & SEL_SEC_PULSE) == 0; +} + +static void cv1800_rtc_enable(struct device *dev) +{ + struct cv1800_rtc_priv *info = dev_get_drvdata(dev); + + /* Sec pulse generated internally */ + regmap_update_bits(info->rtc_map, SEC_PULSE_GEN, SEL_SEC_PULSE, 0); +} + +static int cv1800_rtc_alarm_irq_enable(struct device *dev, unsigned int enabled) +{ + struct cv1800_rtc_priv *info = dev_get_drvdata(dev); + + regmap_write(info->rtc_map, ALARM_ENABLE, enabled); + + return 0; +} + +static int cv1800_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alrm) +{ + struct cv1800_rtc_priv *info = dev_get_drvdata(dev); + unsigned long alarm_time; + + alarm_time = rtc_tm_to_time64(&alrm->time); + + cv1800_rtc_alarm_irq_enable(dev, 0); + + regmap_write(info->rtc_map, ALARM_TIME, alarm_time); + + cv1800_rtc_alarm_irq_enable(dev, alrm->enabled); + + return 0; +} + +static int cv1800_rtc_read_alarm(struct device *dev, struct rtc_wkalrm *alarm) +{ + struct cv1800_rtc_priv *info = dev_get_drvdata(dev); + u32 enabled; + u32 time; + + if (!cv1800_rtc_enabled(dev)) { + alarm->enabled = 0; + return 0; + } + + regmap_read(info->rtc_map, ALARM_ENABLE, &enabled); + + alarm->enabled = enabled & ALARM_ENABLE_MASK; + + regmap_read(info->rtc_map, ALARM_TIME, &time); + + rtc_time64_to_tm(time, &alarm->time); + + return 0; +} + +static int cv1800_rtc_read_time(struct device *dev, struct rtc_time *tm) +{ + struct cv1800_rtc_priv *info = dev_get_drvdata(dev); + u32 sec; + + if (!cv1800_rtc_enabled(dev)) + return -EINVAL; + + regmap_read(info->rtc_map, SEC_CNTR_VAL, &sec); + + rtc_time64_to_tm(sec, tm); + + return 0; +} + +static int cv1800_rtc_set_time(struct device *dev, struct rtc_time *tm) +{ + struct cv1800_rtc_priv *info = dev_get_drvdata(dev); + unsigned long sec; + + sec = rtc_tm_to_time64(tm); + + regmap_write(info->rtc_map, SET_SEC_CNTR_VAL, sec); + regmap_write(info->rtc_map, SET_SEC_CNTR_TRIG, 1); + + regmap_write(info->rtc_map, MACRO_RG_SET_T, sec); + + cv1800_rtc_enable(dev); + + return 0; +} + +static irqreturn_t cv1800_rtc_irq_handler(int irq, void *dev_id) +{ + struct cv1800_rtc_priv *info = dev_id; + + rtc_update_irq(info->rtc_dev, 1, RTC_IRQF | RTC_AF); + + regmap_write(info->rtc_map, ALARM_ENABLE, 0); + + return IRQ_HANDLED; +} + +static const struct rtc_class_ops cv1800_rtc_ops = { + .read_time = cv1800_rtc_read_time, + .set_time = cv1800_rtc_set_time, + .read_alarm = cv1800_rtc_read_alarm, + .set_alarm = cv1800_rtc_set_alarm, + .alarm_irq_enable = cv1800_rtc_alarm_irq_enable, +}; + +static int cv1800_rtc_probe(struct platform_device *pdev) +{ + struct cv1800_rtc_priv *rtc; + int ret; + + rtc = devm_kzalloc(&pdev->dev, sizeof(*rtc), GFP_KERNEL); + if (!rtc) + return -ENOMEM; + + rtc->rtc_map = device_node_to_regmap(pdev->dev.parent->of_node); + if (IS_ERR(rtc->rtc_map)) + return dev_err_probe(&pdev->dev, PTR_ERR(rtc->rtc_map), + "cannot get parent regmap\n"); + + rtc->irq = platform_get_irq(pdev, 0); + if (rtc->irq < 0) + return rtc->irq; + + rtc->clk = devm_clk_get_enabled(pdev->dev.parent, "rtc"); + if (IS_ERR(rtc->clk)) + return dev_err_probe(&pdev->dev, PTR_ERR(rtc->clk), + "rtc clk not found\n"); + + platform_set_drvdata(pdev, rtc); + + device_init_wakeup(&pdev->dev, 1); + + rtc->rtc_dev = devm_rtc_allocate_device(&pdev->dev); + if (IS_ERR(rtc->rtc_dev)) + return PTR_ERR(rtc->rtc_dev); + + rtc->rtc_dev->ops = &cv1800_rtc_ops; + rtc->rtc_dev->range_max = U32_MAX; + + ret = devm_request_irq(&pdev->dev, rtc->irq, cv1800_rtc_irq_handler, + IRQF_TRIGGER_HIGH, "rtc alarm", rtc); + if (ret) + return dev_err_probe(&pdev->dev, ret, + "cannot register interrupt handler\n"); + + return devm_rtc_register_device(rtc->rtc_dev); +} + +static const struct platform_device_id cv1800_rtc_id[] = { + { .name = "cv1800-rtc" }, + { /* sentinel */ }, +}; +MODULE_DEVICE_TABLE(platform, cv1800_rtc_id); + +static struct platform_driver cv1800_rtc_driver = { + .driver = { + .name = "sophgo-cv1800-rtc", + }, + .probe = cv1800_rtc_probe, + .id_table = cv1800_rtc_id, +}; + +module_platform_driver(cv1800_rtc_driver); +MODULE_AUTHOR("Jingbao Qiu"); +MODULE_DESCRIPTION("Sophgo cv1800 RTC Driver"); +MODULE_LICENSE("GPL");