From nobody Thu Dec 18 20:17:34 2025 Received: from mail-ed1-f45.google.com (mail-ed1-f45.google.com [209.85.208.45]) (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 1C035241673; Thu, 13 Feb 2025 21:57:04 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.45 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739483826; cv=none; b=pdbxK3cKK2ik8cj7WqxEBMox3T8nc8gf7rKjUYzLzbqCuSb2JjRe7ezA244J2e7df23ELjsESyF5ezfPI/4hM3+W7P0eAUuSJJf0/CWpN0cGldKLUz4H3nM7337cfo6kgPAFNL73bO2kOVy+merL6BT+CI8xlr5JokxRnruuiKg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739483826; c=relaxed/simple; bh=EcaW/xsVIzx/Y8EaGBnW0qa+FROa5JbgJtCUwY+OtGo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=jh+5Sjsg6WXz+SA1hebTbrGAXYRVMSahRewH6SQfAoNw+x/7Exht/amkgb9MaVRLm4advMKpnyn9moN9Zo8EU67QuHn1tAc2TjcmyskFZjgMqHtzZrfVF5LsD5irrFCZiGLkHBompsq+x1NmrZsBxk4sdbwXUlNMP07HFNs9zC0= 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=LzFAvcGp; arc=none smtp.client-ip=209.85.208.45 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="LzFAvcGp" Received: by mail-ed1-f45.google.com with SMTP id 4fb4d7f45d1cf-5deb0ea1129so2185092a12.3; Thu, 13 Feb 2025 13:57:04 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1739483823; x=1740088623; 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=h9v7NZsx7uvmI0y//U+H5k+9INR1KuR11hKVq6XpN7Q=; b=LzFAvcGpRW5vo3B8f/RGGFG5EJUmiEgDtI6/lCjszNYEwRxv1P+jtEePpqQNscbQq8 nuNGv+O7XMThcgzZLaxF49BdYY/17RcxBDbfHt2PFH8gV89DgctPMnEWh06Ec2X9ij1p lsQzYoY1VBXxYQHWEsQrEXPnE8uLiE4Z2UVjiu2SUME67wMJS07n79dx8Dp5zBrCDAnZ U561wzxREIeVD2bAEgn3Hmtsa2YyAPZG4z9Osl459kq40ZE5nyKF8nKzLgkK2z0SJTlH 4chki3M8+cvuXDH61K4/Zy6/KPbaZ+GfB16v29esAWODXu4auz+SywI/r79+IvRMD7ir l7/Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739483823; x=1740088623; 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=h9v7NZsx7uvmI0y//U+H5k+9INR1KuR11hKVq6XpN7Q=; b=A3mlS5TtNdJW9QZaQyTISp5PDfqfUNO0+mITdO95ygIuIh9qpaIn2i5Bk62xOEPgJw RmClj2yVstU/QPMbc/VXsHiB/JZnVeh0Akwwzc/IDutT1reXYU64XhL3/M45p4J6yYKB cHFIhF6bgc8l5bdlzRbHCgUZu+9llSdsNHU+l0siNy/Qxal1/W1BhavxMGWtydfjTHq6 DC6n+IP1wKNsNcWgRvnhWfy/0nYeMTeqW2aio57Y0mz6GgsLO8Yg09hib0ZtlffgIpSr XIWxb2hchAtCrHrBjK5m6KHswJYzMcadxdSDJHMcXzLERIecCsQ0txQ1soAB+2qixgUN 7ABA== X-Forwarded-Encrypted: i=1; AJvYcCXKmzqr0WOcCqJ+BDQy34AlcWoFKHD+CvmSeyVL2BX4qqPlycxUUNJrOBRyGs55levNOF+lIJjeqWJV@vger.kernel.org, AJvYcCXpNqs7hT5XQqnc3auL6V28pQhFsmjKcvSCmNw94ynKB6PX2UtGCwwHtwwShLiI+z2Ie8M6/HzIBEBkck4=@vger.kernel.org X-Gm-Message-State: AOJu0YwS7Eb1Ht7NhVvPv7WcY9OKlqnbInCHLlaLIvH2GMsebEQZQIq1 IisPpn3iysUALuDWk0M3wGGl2gZPFZE6iugnLFH3A3pzGE6OWyHGl6b1PyBL X-Gm-Gg: ASbGncsbVhR8dTHh2Oqo9VZPu8b8RvrvkN/ed/U5g6Fi5Y0AmS6KXcInqahMk12C5cb KuUG7E8SXnzLW7RjImAj+WZjWiuSgyEbP88SFialxU7/ahe6l9KQSGZ84CbdRINQ4yLx4e+Q1Rg ogocYqadjk0s+L46dMyj75uwjAwAp9zUWejpYMlIEjsH8bqQsgwD1mVJSulKqwclypvDnZO2+lP ENosqq7uUINKDKiTFXbY21dSuCvl5T46bEej1P5eY5dl3vYudZuexW3JcDqE8XTpQl3AEMiupqZ E0piVl2amYFXELlF0uOHVINi+rf0 X-Google-Smtp-Source: AGHT+IHRAtCVWNq8XpVzN2rzWEH+RsMalBJZKuJ/XEshW4YbV21Zyi2VxFzWNvpxpGYTpMRSyYy/gQ== X-Received: by 2002:a17:907:9451:b0:ab7:b390:5c67 with SMTP id a640c23a62f3a-ab7f33c1715mr947209466b.18.1739483823072; Thu, 13 Feb 2025 13:57:03 -0800 (PST) Received: from giga-mm.. ([2a02:1210:861b:6f00:82ee:73ff:feb8:99e3]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-aba532595dfsm209794266b.70.2025.02.13.13.57.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 13 Feb 2025 13:57:02 -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 , alexandre.belloni@bootlin.com, robh@kernel.org, krzysztof.kozlowski+dt@linaro.org, conor+dt@kernel.org, unicorn_wang@outlook.com, inochiama@outlook.com, paul.walmsley@sifive.com, palmer@dabbelt.com, aou@eecs.berkeley.edu, dlan@gentoo.org, linux-kernel@vger.kernel.org, Krzysztof Kozlowski , Alexander Sverdlin Subject: [PATCH v11 1/3] dt-bindings: rtc: sophgo: add RTC support for Sophgo CV1800 series SoC Date: Thu, 13 Feb 2025 22:56:45 +0100 Message-ID: <20250213215655.2311793-2-alexander.sverdlin@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250213215655.2311793-1-alexander.sverdlin@gmail.com> References: <20250213215655.2311793-1-alexander.sverdlin@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Jingbao Qiu Add RTC devicetree binding for Sophgo CV1800 SoC. Reviewed-by: Krzysztof Kozlowski Signed-off-by: Jingbao Qiu Signed-off-by: Alexander Sverdlin Reviewed-by: Inochi Amaoto --- .../bindings/rtc/sophgo,cv1800-rtc.yaml | 53 +++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 Documentation/devicetree/bindings/rtc/sophgo,cv1800-rtc= .yaml diff --git a/Documentation/devicetree/bindings/rtc/sophgo,cv1800-rtc.yaml b= /Documentation/devicetree/bindings/rtc/sophgo,cv1800-rtc.yaml new file mode 100644 index 000000000000..b36b51a69166 --- /dev/null +++ b/Documentation/devicetree/bindings/rtc/sophgo,cv1800-rtc.yaml @@ -0,0 +1,53 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/rtc/sophgo,cv1800-rtc.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Real Time Clock of the Sophgo CV1800 SoC + +description: + Real Time Clock (RTC) is an independently powered module + within the chip, which includes a 32KHz oscillator and a + Power On Reset/POR submodule. It can be used for time display + and timed alarm generation. In addition, the hardware state + machine provides triggering and timing control for chip + power on, off, and reset. + +maintainers: + - Jingbao Qiu + +allOf: + - $ref: rtc.yaml# + +properties: + compatible: + const: sophgo,cv1800-rtc + + reg: + maxItems: 1 + + interrupts: + maxItems: 1 + + clocks: + maxItems: 1 + +required: + - compatible + - reg + - interrupts + - clocks + +unevaluatedProperties: false + +examples: + - | + #include + + rtc@5025000 { + compatible =3D "sophgo,cv1800-rtc"; + reg =3D <0x5025000 0x2000>; + interrupts =3D <17 IRQ_TYPE_LEVEL_HIGH>; + clocks =3D <&osc>; + }; --=20 2.48.1 From nobody Thu Dec 18 20:17:34 2025 Received: from mail-ed1-f50.google.com (mail-ed1-f50.google.com [209.85.208.50]) (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 28ECB269824; Thu, 13 Feb 2025 21:57:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.50 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739483828; cv=none; b=qAhX+cVIiYz1TRqLNnaxSCGwcE3MfbiAu8C/90v4d7vT6s/bCd2I+hp7LVAiFLw5YwMx+hHZTCu6IKYu1UEiy0OxqTxvUyo30BrElPg8NoszbBJvkWEM7mCyUY689th7L6eydRH5pHZGOkV+5NwMUfXXH9q5raQ/YUlFObeFkCQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739483828; c=relaxed/simple; bh=sttVRjq65WaCaVQlPN11K9MwlfArFnNT00YrYgX+qcQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=q8fxnsgnK+FUawjgNA6R7Uy85dBTDqF4BSwIkxBoaX1sWj3Lax2xK89ZziFgRadJ9sdfo6TXXq0dPfBW6ZUwyYKIJHYmc4je23weED/QcJKtpmE2KFk9cr2ze42WE4VG9cj4zYDqLxx3c/kVnDrdd4Y8pxm5pB9Mm3adqgeUZYQ= 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=A7Kog9P0; arc=none smtp.client-ip=209.85.208.50 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="A7Kog9P0" Received: by mail-ed1-f50.google.com with SMTP id 4fb4d7f45d1cf-5dec817f453so2128305a12.2; Thu, 13 Feb 2025 13:57:05 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1739483824; x=1740088624; 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=pbCezODlOubTBwMs4YHw1Z0Ort7bqbiDHdUSGG4yl38=; b=A7Kog9P0kiH+SkObESutWkOtvPklFAeQptIRyO1zGNLxYrnMXqJJYQJaP7nFQOlfoe DMXWqxgM4Kx91Dt+PhcmJixWzR+chUn8FOox2SUhNVqvDK/2pahpPCJIHkbySjR5IG14 P2ThYxQka6xoT4cqciXS4oKM18vPyrQlrmxLdH8mVJoy78GZC2gmTIKzTT/unRQ/6Dvg aj7KKtr1A8QA5BhQbtY0VwKTAobZRX64JnJd46c8NVDcISLXnfzk65Z2txVro+GnNtY7 +rDbllRttBZUQgtSAfWCSpPC06sLBUNmWtQFe05gTFUpyyefnCitodaw0FFaenmVl84H THEg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739483824; x=1740088624; 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=pbCezODlOubTBwMs4YHw1Z0Ort7bqbiDHdUSGG4yl38=; b=avxpWFsr1jG103kT/7r3hnpB8wH4z32wwiW+oQJ9V0UcbZAR705+b0uruktaLeEcWQ xuktQbY829Vz65616qACIfKwdWHEgvCRG2weNV6wV6c2Te0LYi6KQNlUuzEVgjRhFCHD 8krZk9VdCwcBYlqRVgyLraDfRA8N1Zgv/eGyuRuQIvY+YZoCo5/TW5NzeuhxKyxcBsVO L5yA9G7O5DDs5lHN+Xsm7Th4b4LF4c1x8jVcq2A1j+ZQHDPTDyTAaSJpOmmiEVO9jLAb lRz9dAXwY/KUZ5F8suVVKm7uKvmFIFA+XLrTdWtZ6Uihf1ao1J/07vKY2d+uofOti8tS BidQ== X-Forwarded-Encrypted: i=1; AJvYcCW8c0BKDFUIHX6FvQtj7Mm6S7GqEU8mY2yiGqJsU076ONtveXux5A+vh3nMStBaszGHeb7U8/hIbGgu@vger.kernel.org, AJvYcCWjzQQThN1LGYgMZJW4FuhbGEAMAl6L7MvULezy3v2K3OQV2TGLLO8YrNwTIFntqW56l0rvHImrOi91Dd8=@vger.kernel.org X-Gm-Message-State: AOJu0YwUhv1koGF+GzhoITRDD5wYrAHBI1giGWMZGTLvddIruSKqpGK0 4BkloTpDEB+BCxDqeThgDIDcykdrnKYqqOKz6ptQi4vZvda9ZmXqx3zs3J6Z X-Gm-Gg: ASbGncvdlcqeZECwTfGEhxF1yWiDx+xKNOktazUJXeZEK8VjjdHegeWSJgqZPWRAq7P ppAHcB0yooYmu02NBp+SR6e0rgbLAxiJnEsHx/K4rPYbjwjOfzlq7NDcUtIUl77ufKqMv9uXEAA W1zE4AZ7RADVhztzbnwnfuOGypehe8B1M1A8ocDEKd9pU4mnOjNM+CSQzWzkPPFeJ8TGRRBtCiB 3J8K/6RsP29nKvkLOSVRxs5Zt14YwWO0G7HXx58QbflhGjDpW00IZH5T3XVYZZlxwXfNXp6TkSo F3MbLykIiGOyRx7LirwWGgcBjQdZ X-Google-Smtp-Source: AGHT+IF59vMa4beqMALmWIFmwJA51XJOPDvt3Vr5/aqg3nAaFFzRF/d69KpBiLJLoc2aU8lM+WVzDw== X-Received: by 2002:a05:6402:254c:b0:5dc:8ed9:6bc3 with SMTP id 4fb4d7f45d1cf-5deade07e05mr7030168a12.26.1739483823982; Thu, 13 Feb 2025 13:57:03 -0800 (PST) Received: from giga-mm.. ([2a02:1210:861b:6f00:82ee:73ff:feb8:99e3]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-aba532595dfsm209794266b.70.2025.02.13.13.57.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 13 Feb 2025 13:57:03 -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 , alexandre.belloni@bootlin.com, robh@kernel.org, krzysztof.kozlowski+dt@linaro.org, conor+dt@kernel.org, unicorn_wang@outlook.com, inochiama@outlook.com, paul.walmsley@sifive.com, palmer@dabbelt.com, aou@eecs.berkeley.edu, dlan@gentoo.org, linux-kernel@vger.kernel.org, Krzysztof Kozlowski , Alexander Sverdlin Subject: [PATCH v11 2/3] rtc: sophgo: add rtc support for Sophgo CV1800 SoC Date: Thu, 13 Feb 2025 22:56:46 +0100 Message-ID: <20250213215655.2311793-3-alexander.sverdlin@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250213215655.2311793-1-alexander.sverdlin@gmail.com> References: <20250213215655.2311793-1-alexander.sverdlin@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" 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 --- 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; drivers/rtc/Kconfig | 10 ++ drivers/rtc/Makefile | 1 + drivers/rtc/rtc-cv1800.c | 228 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 239 insertions(+) create mode 100644 drivers/rtc/rtc-cv1800.c diff --git a/drivers/rtc/Kconfig b/drivers/rtc/Kconfig index 0bbbf778ecfa..019622db3e93 100644 --- a/drivers/rtc/Kconfig +++ b/drivers/rtc/Kconfig @@ -1159,6 +1159,16 @@ config RTC_DRV_DS2404 This driver can also be built as a module. If so, the module will be called rtc-ds2404. =20 +config RTC_DRV_CV1800 + tristate "Sophgo CV1800 RTC" + depends on ARCH_SOPHGO || COMPILE_TEST + help + If you say yes here you get support the RTC driver + for Sophgo CV1800 chip. + + This driver can also be built as a module. If so, the + module will be called rtc-cv1800. + config RTC_DRV_DA9052 tristate "Dialog DA9052/DA9053 RTC" depends on PMIC_DA9052 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) +=3D rtc-cadence.o obj-$(CONFIG_RTC_DRV_CMOS) +=3D rtc-cmos.o obj-$(CONFIG_RTC_DRV_CPCAP) +=3D rtc-cpcap.o obj-$(CONFIG_RTC_DRV_CROS_EC) +=3D rtc-cros-ec.o +obj-$(CONFIG_RTC_DRV_CV1800) +=3D rtc-cv1800.o obj-$(CONFIG_RTC_DRV_DA9052) +=3D rtc-da9052.o obj-$(CONFIG_RTC_DRV_DA9055) +=3D rtc-da9055.o obj-$(CONFIG_RTC_DRV_DA9063) +=3D rtc-da9063.o diff --git a/drivers/rtc/rtc-cv1800.c b/drivers/rtc/rtc-cv1800.c new file mode 100644 index 000000000000..5c30f7388983 --- /dev/null +++ b/drivers/rtc/rtc-cv1800.c @@ -0,0 +1,228 @@ +// 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 + +#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 const struct regmap_config cv1800_rtc_regmap_config =3D { + .reg_bits =3D 32, + .val_bits =3D 32, + .reg_stride =3D 4, +}; + +static bool cv1800_rtc_enabled(struct device *dev) +{ + struct cv1800_rtc_priv *info =3D dev_get_drvdata(dev); + u32 reg; + + regmap_read(info->rtc_map, SEC_PULSE_GEN, ®); + + return (reg & SEL_SEC_PULSE) =3D=3D 0; +} + +static void cv1800_rtc_enable(struct device *dev) +{ + struct cv1800_rtc_priv *info =3D 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 en= abled) +{ + struct cv1800_rtc_priv *info =3D 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 *alr= m) +{ + struct cv1800_rtc_priv *info =3D dev_get_drvdata(dev); + unsigned long alarm_time; + + alarm_time =3D 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 *al= arm) +{ + struct cv1800_rtc_priv *info =3D dev_get_drvdata(dev); + u32 enabled; + u32 time; + + if (!cv1800_rtc_enabled(dev)) { + alarm->enabled =3D 0; + return 0; + } + + regmap_read(info->rtc_map, ALARM_ENABLE, &enabled); + + alarm->enabled =3D 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 =3D 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 =3D dev_get_drvdata(dev); + unsigned long sec; + + sec =3D 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 =3D 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 =3D { + .read_time =3D cv1800_rtc_read_time, + .set_time =3D cv1800_rtc_set_time, + .read_alarm =3D cv1800_rtc_read_alarm, + .set_alarm =3D cv1800_rtc_set_alarm, + .alarm_irq_enable =3D cv1800_rtc_alarm_irq_enable, +}; + +static int cv1800_rtc_probe(struct platform_device *pdev) +{ + struct cv1800_rtc_priv *rtc; + void __iomem *base; + int ret; + + rtc =3D devm_kzalloc(&pdev->dev, sizeof(*rtc), GFP_KERNEL); + if (!rtc) + return -ENOMEM; + + base =3D devm_platform_ioremap_resource(pdev, 0); + if (IS_ERR(base)) + return PTR_ERR(base); + + rtc->rtc_map =3D devm_regmap_init_mmio(&pdev->dev, base, + &cv1800_rtc_regmap_config); + if (IS_ERR(rtc->rtc_map)) + return PTR_ERR(rtc->rtc_map); + + rtc->irq =3D platform_get_irq(pdev, 0); + if (rtc->irq < 0) + return rtc->irq; + + rtc->clk =3D devm_clk_get_enabled(&pdev->dev, NULL); + if (IS_ERR(rtc->clk)) + return dev_err_probe(&pdev->dev, PTR_ERR(rtc->clk), + "clk not found\n"); + + platform_set_drvdata(pdev, rtc); + + device_init_wakeup(&pdev->dev, 1); + + rtc->rtc_dev =3D devm_rtc_allocate_device(&pdev->dev); + if (IS_ERR(rtc->rtc_dev)) + return PTR_ERR(rtc->rtc_dev); + + rtc->rtc_dev->ops =3D &cv1800_rtc_ops; + rtc->rtc_dev->range_max =3D U32_MAX; + + ret =3D 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 of_device_id cv1800_dt_ids[] =3D { + { .compatible =3D "sophgo,cv1800-rtc" }, + { /* sentinel */ }, +}; +MODULE_DEVICE_TABLE(of, cv1800_dt_ids); + +static struct platform_driver cv1800_rtc_driver =3D { + .driver =3D { + .name =3D "sophgo-cv1800-rtc", + .of_match_table =3D cv1800_dt_ids, + }, + .probe =3D cv1800_rtc_probe, +}; + +module_platform_driver(cv1800_rtc_driver); +MODULE_AUTHOR("Jingbao Qiu"); +MODULE_DESCRIPTION("Sophgo cv1800 RTC Driver"); +MODULE_LICENSE("GPL"); --=20 2.48.1 From nobody Thu Dec 18 20:17:34 2025 Received: from mail-ej1-f41.google.com (mail-ej1-f41.google.com [209.85.218.41]) (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 F086D269837; Thu, 13 Feb 2025 21:57:06 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.41 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739483828; cv=none; b=HwV36WOB3n5VnJdgZWx0fiX634UmREKc5DdCBZtnnuFHGd3hSpwyONiUXKNsi0FrrBMND+QJRgoEnZ6Np1rgChfg/CrNEAk1BJNcfOwRPtfvMEdrqaZ1euOC+KL+J3mrXpZ0QOWZmG8O9Xz1kJSlUWVcwSVxzeN7LuwHj97Kq/c= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739483828; c=relaxed/simple; bh=nMH8RpVPPDjuHL4kqWt8ZxllbsjE47OlV9xxxE7dtnE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=jqhx4Op/kx6xgIazyQ/2BkOfrV+BN5sjkAgqHejeBEdIHfqopolfALezUW6I0oQ1OvotZmOivr2CXVfv5AZZ6JWv7ux9ypjgWIeblfXr5HztVwwXX6/PddF1dEUMsIc9pkPKpP0KJo8I+A9LdFVsN8++I2XsbiwHhBPya4Ob8Vs= 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=Vo1GCYyI; arc=none smtp.client-ip=209.85.218.41 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="Vo1GCYyI" Received: by mail-ej1-f41.google.com with SMTP id a640c23a62f3a-ab7b80326cdso262155266b.3; Thu, 13 Feb 2025 13:57:06 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1739483825; x=1740088625; 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=cG6py7yu0z9B7maNjhp2/7SOVI/QwUJmvU/x6WtNkGo=; b=Vo1GCYyIsi1pS+hcL/jhI3uWGSH2R4yNpCv4d2h5Glsls8PHfMbLcrY3LQZu2lIWZC INSXodmzfKF0sRic/wrcHGF893DMVj585sWHocUD7CIT3hFIfkkm9EwkEtVklMUnwQoP 0Isn2fSmaimCEBe9/Kk575DqgY/KbovILTId98aife/U5K6KY9VZFBobotXioRhiXfbU QDpDFh/FNbufOe7Q78dfXhaxhmaA+KTN9DC2QvA4ctBox96op3h+VTUkE7hhdFlOtNFf fHVJCfn6wrVDUQy9bUZU88mDLdgGVvrRmMj6EUpahdN4n9wQj0V4Rh2+NGYva71R55XD p38g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739483825; x=1740088625; 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=cG6py7yu0z9B7maNjhp2/7SOVI/QwUJmvU/x6WtNkGo=; b=jeLr+CbQfCLV4LiJHLk/2VG6116oQg+9+quBYkhaUYJrKMgN6TCgSSqM8HbBf7gADD 2jsLcRiKRn8vTQf3wKRPEBIJ2tTLpdPMx+EeJbleqtEc9ceug17BwIyQGxByzTu1qUsU 8erJv21MI1sG6r4aEFRMfyoLbi9UeG6Rs5GjZ76pvq98x1kpcjNsAluE3C/Swv7e1O4X /0VGVc0MEJsc4qs24LvikZUb1MdrygFtKzaWfZ+49vZlZGuKFq5KWFmaxf8BECjIzrQi PDgsQ63UeozHm320jcuVS2WYtscHrUaGQe8gVDzl7WAcQ6cvxyEepAt+9qs5DL6Jybbg nsQQ== X-Forwarded-Encrypted: i=1; AJvYcCVWr0ppAwwItUD0/Jz7U7q04LqZEc81mxp4yLJ84wSQyI66uBUyL/SbQEPa2ZtWKsYRmYEJdeqYRLeN4fI=@vger.kernel.org, AJvYcCX67/Fn/xede+kNAFG3Rs56VhXXTgYBsnCmTMQss/mVdmGpqYPSiVf3o+a0E4PY9TU63sJboM9TXq/C@vger.kernel.org X-Gm-Message-State: AOJu0Yy4CuH6bUbuhubamKmKucCnuCZfUa8gG9oGwzO72F3dR/npmBng pfZNbNolUyH+HtQyrby7VPSnocF00OKxYd0VzVeXt8WrMT6tFZoVZJ19oj7E X-Gm-Gg: ASbGnctWmplhGCtgbFwP4VQ7BFCJIQAXXhHrqy9osweb9JnFfSrSEVIW2w3NG38whOT N3bQtM+Av9kK+AGFXxH30399lOecoYPaVy3H0DFLaXoiMK5bmKwkC230dXhQVXF4f5r5/bQsOXB 0R5Dr5NkLwGnXNTJdeWvCZ5Rselr786svmXmqVIHiR2kZ1YydE5+MuEeSUfINcpVZAXdD8OYCyG u/QAWNSnpBvpF8eNKyQBssLL8UHdbE+b5pFXoQimo+E3eF3W/g0jWDpIIXtXKpLDDBIblZRj0SW vmztjgbZKYch9qNx4y5UyDHd4lUs X-Google-Smtp-Source: AGHT+IGZkO+tFWVJ/XSuIahWDkoxtDrJAoFaUbSRaWC5deMFCkWx1eq6xUWev2dyvM2gpdCMvuD1Yw== X-Received: by 2002:a17:907:944a:b0:ab7:bc17:b3ae with SMTP id a640c23a62f3a-aba4ec15dffmr550867166b.34.1739483825104; Thu, 13 Feb 2025 13:57:05 -0800 (PST) Received: from giga-mm.. ([2a02:1210:861b:6f00:82ee:73ff:feb8:99e3]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-aba532595dfsm209794266b.70.2025.02.13.13.57.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 13 Feb 2025 13:57:04 -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 , alexandre.belloni@bootlin.com, robh@kernel.org, krzysztof.kozlowski+dt@linaro.org, conor+dt@kernel.org, unicorn_wang@outlook.com, inochiama@outlook.com, paul.walmsley@sifive.com, palmer@dabbelt.com, aou@eecs.berkeley.edu, dlan@gentoo.org, linux-kernel@vger.kernel.org, Jingbao Qiu , Krzysztof Kozlowski Subject: [PATCH v11 3/3] rtc: sophgo: cv18xx: Add restart handler Date: Thu, 13 Feb 2025 22:56:47 +0100 Message-ID: <20250213215655.2311793-4-alexander.sverdlin@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250213215655.2311793-1-alexander.sverdlin@gmail.com> References: <20250213215655.2311793-1-alexander.sverdlin@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Currently provided ATF firmware for ARM64 Sophgo SoCs is binary-only. To make Linux independent from this binary firmware, provide restart handler triggering COLD or WARM reboot directly via RTC HW block as alternative to PSCI interface. Handler priority SYS_OFF_PRIO_DEFAULT of 0 is desired, because if PSCI is indeed present, its priority of 129 will override the new one. On RiskV side the behaviour is unchanged as well because SBI SRST handler has higher priority as well (192). Tested on SG2000 in ARM64 mode. Signed-off-by: Alexander Sverdlin --- v11: - patch introduced; drivers/rtc/rtc-cv1800.c | 51 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 50 insertions(+), 1 deletion(-) diff --git a/drivers/rtc/rtc-cv1800.c b/drivers/rtc/rtc-cv1800.c index 5c30f7388983..586d7195f1f4 100644 --- a/drivers/rtc/rtc-cv1800.c +++ b/drivers/rtc/rtc-cv1800.c @@ -9,17 +9,23 @@ #include #include #include +#include #include #include +#include #include #include =20 +#define CTRL_UNLOCKKEY 0x0004 +#define CTRL0 0x0008 #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 +#define EN_PWR_CYC_REQ 0x10C8 +#define EN_WARM_RST_REQ 0x10CC =20 /* * When in VDDBKUP domain, this MACRO register @@ -28,6 +34,10 @@ #define MACRO_RO_T 0x14A8 #define MACRO_RG_SET_T 0x1498 =20 +/* CTRL0 bits */ +#define REQ_PWR_CYC BIT(3) +#define REQ_WARM_RST BIT(4) + #define ALARM_ENABLE_MASK BIT(0) #define SEL_SEC_PULSE BIT(31) =20 @@ -160,6 +170,29 @@ static const struct rtc_class_ops cv1800_rtc_ops =3D { .alarm_irq_enable =3D cv1800_rtc_alarm_irq_enable, }; =20 +static int cv1800_restart_handler(struct sys_off_data *data) +{ + struct cv1800_rtc_priv *info =3D data->cb_data; + u32 reg_en =3D EN_WARM_RST_REQ; + u32 request =3D 0xFFFF0800; + + if (data->mode =3D=3D REBOOT_COLD) { + reg_en =3D EN_PWR_CYC_REQ; + request |=3D REQ_PWR_CYC; + } else { + request |=3D REQ_WARM_RST; + } + + /* Enable reset request */ + regmap_write(info->rtc_map, reg_en, 1); + /* Enable CTRL0 register access */ + regmap_write(info->rtc_map, CTRL_UNLOCKKEY, 0xAB18); + /* Request reset */ + regmap_write(info->rtc_map, CTRL0, request); + + return NOTIFY_DONE; +} + static int cv1800_rtc_probe(struct platform_device *pdev) { struct cv1800_rtc_priv *rtc; @@ -205,7 +238,23 @@ static int cv1800_rtc_probe(struct platform_device *pd= ev) return dev_err_probe(&pdev->dev, ret, "cannot register interrupt handler\n"); =20 - return devm_rtc_register_device(rtc->rtc_dev); + ret =3D devm_rtc_register_device(rtc->rtc_dev); + if (ret) + return dev_err_probe(&pdev->dev, ret, "cannot register RTC\n"); + + /* + * SYS_OFF_PRIO_DEFAULT of 0 is desired here because both RiscV SBI SRST + * (prio 192) and ARM PSCI (prio 129) will override this one; this + * handler shall serve as a fallback in cases where firmware is not + * present. + */ + ret =3D devm_register_restart_handler(&pdev->dev, cv1800_restart_handler, + rtc); + if (ret) + return dev_err_probe(&pdev->dev, ret, + "cannot register restart handler\n"); + + return 0; } =20 static const struct of_device_id cv1800_dt_ids[] =3D { --=20 2.48.1