From patchwork Sun Aug 1 16:09:19 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Romain Perier X-Patchwork-Id: 12413055 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-13.7 required=3.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED,DKIM_SIGNED,DKIM_VALID,FREEMAIL_FORGED_FROMDOMAIN, FREEMAIL_FROM,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 1EF3BC4338F for ; Sun, 1 Aug 2021 16:11:53 +0000 (UTC) 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 mail.kernel.org (Postfix) with ESMTPS id D975260F9D for ; Sun, 1 Aug 2021 16:11:52 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org D975260F9D Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=lists.infradead.org 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=hB5RkMx5i//JU2DaHjIFSY1z/+y65Q5mNUWYH8PJTxE=; b=myQA09K4+3pD1E N9qAceLdkbU4oSJLqJkMTnk9GMjPzUEMYIuEF4gpKSgniLhP/HhhC0xc8jE3ZVIQ/+4jwL7o2uiMx sSOJtBFhyE3Biit+thWrUdVHgnmtUO+R+qPcXSgzoXb02iLPbEgnvYl7QRYvSuR5TKl2BF9L/qgTr FhSoIYK13J6B+1pE2+LEDWHjt7X6l+IFQ3TQjBMPHTPLmInafJ/MToam5HFkPU173sXpOFQImp7J0 QV7pvmcuoNnyn6yM/JOUBuNY0mujjUoUnKA1MgoRJLM+L2B48zSLxLXThcOZS1XW1aSoyIfAwPWHo oHyLtcOMqs5m5O7W0SrA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1mAE2G-00DpgS-Ld; Sun, 01 Aug 2021 16:09:56 +0000 Received: from mail-wm1-x332.google.com ([2a00:1450:4864:20::332]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1mAE22-00DpeK-0r for linux-arm-kernel@lists.infradead.org; Sun, 01 Aug 2021 16:09:43 +0000 Received: by mail-wm1-x332.google.com with SMTP id x17so2692734wmc.5 for ; Sun, 01 Aug 2021 09:09:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=bqypCuA/5g372Rx9Rz05biiSxWQ4PkE/P3VoSjAxRvc=; b=Gy9JQj0S8bg+qmfQ/z8v2Y5prbjs1vmzda6meVzzFdaNvzrvQkmkDsbqkiwDRKwHNB pddECND3rP0dqkJ+igNP7rBGG0VHV9oPOtNZ9j/12rj6yA0m4PHDZgFzCDZs/2gnk/fk D+uez6OKnZsQkS7dg1G/JRTbxvw4wfA8vb1p1iOuc9sEj48I1XvWa70qywJ2z0SGeTxn IItxq9Fyj53hizDmXNwsw1cyXcnsegTBs6lCb/vS+CfKfgdmnA3CfVv0/e2ADZoNUYy+ iKXujZueB1SYADh7ww4vUGpY09BZRcpOHjkDfc7869GGf0Fj/CCANLiZyQO6ouJJVrAs 20XQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=bqypCuA/5g372Rx9Rz05biiSxWQ4PkE/P3VoSjAxRvc=; b=SInMWJDRV3ga33slnsf4GqBQOXDGkz19Q0JjDHXIdHDQ0sUtJdGj847PRlPwdKh8RL GU8EIOSoQJZN4TO0LFnKuDxkguGxm5qG/kUtgTEmOTROgxwHviQC1Te+U5FgRfsarzua ih6QNNuwIPukW72ficJ76ovPQLy9nGVdwSq5FlMlM2rScK81Y6saPh7mTW/nokL/a6YS AAnDX3gdKx3WdXuW+0FGbKN2EF1YRDOKgE8Pq/vWBQvuv1APUh8BwT+TMal7eHDI6zdN W4d81oitkmfV8EVCMKrY1P+ih56CAppW9LQVdYEfERA0+k6iPNprR0Vfs3IxOkMhPA92 T/xA== X-Gm-Message-State: AOAM5304MLej+WsUQn54AaxCz+B0lGQPG9NzZRUBiPsP6FTT/vPBd6zL eaVX8zjhgRg3lU4C9SLVKcR+jFQIWA8= X-Google-Smtp-Source: ABdhPJyoVBtIiHnph6y0UGHgQn6ZbHEJ/GKNqzttSyAUew+Fs0YjGm7Q0Nd6EbnGTB5SSQVUzgPo6Q== X-Received: by 2002:a1c:1dcf:: with SMTP id d198mr12789173wmd.103.1627834179951; Sun, 01 Aug 2021 09:09:39 -0700 (PDT) Received: from debby (176-141-241-253.abo.bbox.fr. [176.141.241.253]) by smtp.gmail.com with ESMTPSA id j1sm7466090wmo.4.2021.08.01.09.09.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 01 Aug 2021 09:09:39 -0700 (PDT) From: Romain Perier To: Alessandro Zummo , Alexandre Belloni , Daniel Palmer , Rob Herring Cc: linux-rtc@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org Subject: [PATCH v2 1/3] dt-bindings: rtc: Add Mstar MSC313e RTC devicetree bindings documentation Date: Sun, 1 Aug 2021 18:09:19 +0200 Message-Id: <20210801160921.233081-2-romain.perier@gmail.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20210801160921.233081-1-romain.perier@gmail.com> References: <20210801160921.233081-1-romain.perier@gmail.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20210801_090942_106961_92A788E8 X-CRM114-Status: GOOD ( 15.21 ) X-BeenThere: linux-arm-kernel@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-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org This adds the documentation for the devicetree bindings of the Mstar MSC313e RTC driver, found from MSC313e SoCs and newer. Signed-off-by: Romain Perier --- .../bindings/rtc/mstar,msc313-rtc.yaml | 49 +++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 Documentation/devicetree/bindings/rtc/mstar,msc313-rtc.yaml diff --git a/Documentation/devicetree/bindings/rtc/mstar,msc313-rtc.yaml b/Documentation/devicetree/bindings/rtc/mstar,msc313-rtc.yaml new file mode 100644 index 000000000000..62bc12b1feb6 --- /dev/null +++ b/Documentation/devicetree/bindings/rtc/mstar,msc313-rtc.yaml @@ -0,0 +1,49 @@ +# SPDX-License-Identifier: GPL-2.0 +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/rtc/mstar,msc313-rtc.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Mstar MSC313e RTC Device Tree Bindings + +allOf: + - $ref: "rtc.yaml#" + +maintainers: + - Daniel Palmer + - Romain Perier + +properties: + compatible: + enum: + - mstar,msc313-rtc + + reg: + maxItems: 1 + + interrupts: + maxItems: 1 + + start-year: true + + clocks: + maxItems: 1 + +required: + - compatible + - reg + - interrupts + - clocks + +additionalProperties: false + +examples: + - | + #include + rtc@2400 { + compatible = "mstar,msc313-rtc"; + reg = <0x2400 0x40>; + clocks = <&xtal_div2>; + interrupts-extended = <&intc_irq GIC_SPI 44 IRQ_TYPE_LEVEL_HIGH>; + }; +... From patchwork Sun Aug 1 16:09:20 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Romain Perier X-Patchwork-Id: 12413057 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-13.7 required=3.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED,DKIM_SIGNED,DKIM_VALID,FREEMAIL_FORGED_FROMDOMAIN, FREEMAIL_FROM,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 0976FC4338F for ; Sun, 1 Aug 2021 16:11:59 +0000 (UTC) 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 mail.kernel.org (Postfix) with ESMTPS id C98C760462 for ; Sun, 1 Aug 2021 16:11:58 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org C98C760462 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=lists.infradead.org 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=QohCMYO4Jo0mH5X+a3UfBQxyasDkxQU0jMJZ8EP4ozI=; b=v/Dwy2HC5mjmzk GTItDd+Dco36vmxnmI0raeH3Vodefd9OZE3Fbc14fJurogb3ZHmFg/i0WdHctl3LZpkY6I/K/jLWa c43PEAdKTjIyK3APgsXN/J9w+oUM6xSs/m5/sD6vSsspJY6EvR6knS9DOq40I5nqSfIaRIQI/gGAh E+T4tvbDxJw2J6OivDHvH64vkg9kPoy80bWNBPS/Dd4q+EIDIIxgTGfi33MuDwxtJPG+w2UVtz9E5 R6WCUL3yWvHPoUGdk+Llp3E+83B8TNmh1csG7I+d1uWqbbyyUuBrGRAApmfuquFZuY1nEmExE73VR tw4pPQtk3gAQyqtwV4LQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1mAE2R-00DpiU-Em; Sun, 01 Aug 2021 16:10:07 +0000 Received: from mail-wr1-x42d.google.com ([2a00:1450:4864:20::42d]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1mAE24-00Dpeb-3Z for linux-arm-kernel@lists.infradead.org; Sun, 01 Aug 2021 16:09:45 +0000 Received: by mail-wr1-x42d.google.com with SMTP id h13so4950053wrp.1 for ; Sun, 01 Aug 2021 09:09:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=qE0LMOZZ291lskFavoeOKKY3j060l4s309rf2WDUJVE=; b=i5agS1/WsLaleNK45u/uSF+hCuZbN+LXq90aZFRoNysUDEvx0Qk1Uhhjx+36yq0CR8 kwieRiJ75Zk2fG0mCm1k0i+u1rxLrNj+NqHqmTVxHWSUIwpUBwDfIJJDVyQWWfTvs2Zw onIp2WSza618Y4httI5xNALD5IJjVrmujRT5e+zY5wc2LCCgDRfgVWP6JhVpvoJ6nXhg vBJ5pQLPCs4g3d7VkO7dD8hvSL2ILz5khFklAEByXrbwPOj2va/m7pFwbhqgxUCq4/lt yvGM/+h/Hyhbi86BWJ0vjcdc4WMXI7gM78Yfsh2Ec0EkXiCtTiBhq3f/fCobHkBjVJMF 296A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=qE0LMOZZ291lskFavoeOKKY3j060l4s309rf2WDUJVE=; b=TJbcp8EqeLPAjF4bqZPAEpw8o8KHDTHj2EZ1HAdQw//fSS1p9SfcMUMYR0nHIGqQ3H KXSVaCKRf8HGDb4q7fTNz6Aa5lgJ665SFXS1x0xANACyrsV3iYlyvoQdXpdNeA8OHvQz HCHkVau/d0Wkq4SI40UCpHNFQx//DMiRnb8IVakxoZ0OYVDFjI2I53YB8lGz61AW0Jbp 28wxRxgbXWbJzB2zPYfTTKjK4IYlDXKiCCzzUaXAXA+h1ShOhjdHPUPchPdARataRE6o HbwVBqHcIHpwKiQHCbNeu6HSYQWu+hcTv1jvjYC7ZmwXOwy817lOBP/bWsgboEBdwlE7 qgsA== X-Gm-Message-State: AOAM532TIVoV4OqUph3IWKk2iEUCI4ebyGyLRKhk3xPt9L0M5GL7eSxX fxNjgE88lKxPSINcqi+RyJItMguQBTU= X-Google-Smtp-Source: ABdhPJycDGXyvlsfDnBRduIfLLa7wOFcX/jYAYk9TWuGJPAZkv1bwKL9fZ3Gn4IzuiiXJKKx8PF9Pg== X-Received: by 2002:a5d:6acd:: with SMTP id u13mr5702281wrw.149.1627834181200; Sun, 01 Aug 2021 09:09:41 -0700 (PDT) Received: from debby (176-141-241-253.abo.bbox.fr. [176.141.241.253]) by smtp.gmail.com with ESMTPSA id n186sm8864252wme.40.2021.08.01.09.09.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 01 Aug 2021 09:09:40 -0700 (PDT) From: Romain Perier To: Alessandro Zummo , Alexandre Belloni , Daniel Palmer , Rob Herring Cc: linux-rtc@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org Subject: [PATCH v2 2/3] rtc: Add support for the MSTAR MSC313 RTC Date: Sun, 1 Aug 2021 18:09:20 +0200 Message-Id: <20210801160921.233081-3-romain.perier@gmail.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20210801160921.233081-1-romain.perier@gmail.com> References: <20210801160921.233081-1-romain.perier@gmail.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20210801_090944_202976_AAE94AE5 X-CRM114-Status: GOOD ( 30.46 ) X-BeenThere: linux-arm-kernel@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-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org From: Daniel Palmer This adds support for the RTC block on the Mstar MSC313e SoCs and newer. Signed-off-by: Daniel Palmer Co-developed-by: Romain Perier Signed-off-by: Romain Perier --- MAINTAINERS | 1 + drivers/rtc/Kconfig | 10 ++ drivers/rtc/Makefile | 1 + drivers/rtc/rtc-msc313.c | 246 +++++++++++++++++++++++++++++++++++++++ 4 files changed, 258 insertions(+) create mode 100644 drivers/rtc/rtc-msc313.c diff --git a/MAINTAINERS b/MAINTAINERS index c9467d2839f5..bff16c7bafb8 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -2220,6 +2220,7 @@ F: arch/arm/boot/dts/mstar-* F: arch/arm/mach-mstar/ F: drivers/clk/mstar/ F: drivers/gpio/gpio-msc313.c +F: drivers/rtc/rtc-msc313.c F: drivers/watchdog/msc313e_wdt.c F: include/dt-bindings/clock/mstar-* F: include/dt-bindings/gpio/msc313-gpio.h diff --git a/drivers/rtc/Kconfig b/drivers/rtc/Kconfig index 12153d5801ce..9ce4baab5fcf 100644 --- a/drivers/rtc/Kconfig +++ b/drivers/rtc/Kconfig @@ -1925,4 +1925,14 @@ config RTC_DRV_WILCO_EC This can also be built as a module. If so, the module will be named "rtc_wilco_ec". +config RTC_DRV_MSC313 + tristate "MStar MSC313 RTC" + depends on ARCH_MSTARV7 || COMPILE_TEST + help + If you say yes here you get support for the Mstar MSC313e On-Chip + Real Time Clock. + + This driver can also be built as a module, if so, the module + will be called "rtc-msc313". + endif # RTC_CLASS diff --git a/drivers/rtc/Makefile b/drivers/rtc/Makefile index 2dd0dd956b0e..5efda8a60cee 100644 --- a/drivers/rtc/Makefile +++ b/drivers/rtc/Makefile @@ -101,6 +101,7 @@ obj-$(CONFIG_RTC_DRV_MCP795) += rtc-mcp795.o obj-$(CONFIG_RTC_DRV_MESON) += rtc-meson.o obj-$(CONFIG_RTC_DRV_MOXART) += rtc-moxart.o obj-$(CONFIG_RTC_DRV_MPC5121) += rtc-mpc5121.o +obj-$(CONFIG_RTC_DRV_MSC313) += rtc-msc313.o obj-$(CONFIG_RTC_DRV_MSM6242) += rtc-msm6242.o obj-$(CONFIG_RTC_DRV_MT2712) += rtc-mt2712.o obj-$(CONFIG_RTC_DRV_MT6397) += rtc-mt6397.o diff --git a/drivers/rtc/rtc-msc313.c b/drivers/rtc/rtc-msc313.c new file mode 100644 index 000000000000..f7b9fd2807cb --- /dev/null +++ b/drivers/rtc/rtc-msc313.c @@ -0,0 +1,246 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* + * Real time clocks driver for MStar/SigmaStar ARMv7 SoCs. + * Based on "Real Time Clock driver for msb252x." that was contained + * in various MStar kernels. + * + * (C) 2019 Daniel Palmer + * (C) 2021 Romain Perier + */ + +#include +#include +#include +#include +#include +#include + +/* Registers */ +#define REG_RTC_CTRL 0x00 +#define REG_RTC_FREQ_CW_L 0x04 +#define REG_RTC_FREQ_CW_H 0x08 +#define REG_RTC_LOAD_VAL_L 0x0C +#define REG_RTC_LOAD_VAL_H 0x10 +#define REG_RTC_MATCH_VAL_L 0x14 +#define REG_RTC_MATCH_VAL_H 0x18 +#define REG_RTC_STATUS_INT 0x1C +#define REG_RTC_CNT_VAL_L 0x20 +#define REG_RTC_CNT_VAL_H 0x24 + +/* Control bits for REG_RTC_CTRL */ +#define SOFT_RSTZ_BIT BIT(0) +#define CNT_EN_BIT BIT(1) +#define WRAP_EN_BIT BIT(2) +#define LOAD_EN_BIT BIT(3) +#define READ_EN_BIT BIT(4) +#define INT_MASK_BIT BIT(5) +#define INT_FORCE_BIT BIT(6) +#define INT_CLEAR_BIT BIT(7) + +/* Control bits for REG_RTC_STATUS_INT */ +#define RAW_INT_BIT BIT(0) +#define ALM_INT_BIT BIT(1) + +struct msc313_rtc { + struct rtc_device *rtc_dev; + void __iomem *rtc_base; + struct clk *clk; +}; + +static int msc313_rtc_read_alarm(struct device *dev, struct rtc_wkalrm *alarm) +{ + struct msc313_rtc *priv = dev_get_drvdata(dev); + unsigned long seconds; + + seconds = readw(priv->rtc_base + REG_RTC_MATCH_VAL_L) + | (readw(priv->rtc_base + REG_RTC_MATCH_VAL_H) << 16); + + rtc_time64_to_tm(seconds, &alarm->time); + + if (!(readw(priv->rtc_base + REG_RTC_CTRL) & INT_MASK_BIT)) + alarm->enabled = 1; + + return 0; +} + +static int msc313_rtc_alarm_irq_enable(struct device *dev, unsigned int enabled) +{ + struct msc313_rtc *priv = dev_get_drvdata(dev); + u16 reg; + + reg = readw(priv->rtc_base + REG_RTC_CTRL); + if (enabled) + reg &= ~INT_MASK_BIT; + else + reg |= INT_MASK_BIT; + writew(reg, priv->rtc_base + REG_RTC_CTRL); + return 0; +} + +static int msc313_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alarm) +{ + struct msc313_rtc *priv = dev_get_drvdata(dev); + unsigned long seconds; + + seconds = rtc_tm_to_time64(&alarm->time); + writew((seconds & 0xFFFF), priv->rtc_base + REG_RTC_MATCH_VAL_L); + writew((seconds >> 16) & 0xFFFF, priv->rtc_base + REG_RTC_MATCH_VAL_H); + + msc313_rtc_alarm_irq_enable(dev, alarm->enabled); + + return 0; +} + +static int msc313_rtc_read_time(struct device *dev, struct rtc_time *tm) +{ + struct msc313_rtc *priv = dev_get_drvdata(dev); + u32 seconds; + u16 reg; + + reg = readw(priv->rtc_base + REG_RTC_CTRL); + writew(reg | READ_EN_BIT, priv->rtc_base + REG_RTC_CTRL); + + /* Wait for HW latch done */ + while (readw(priv->rtc_base + REG_RTC_CTRL) & READ_EN_BIT) + udelay(1); + + seconds = readw(priv->rtc_base + REG_RTC_CNT_VAL_L) + | (readw(priv->rtc_base + REG_RTC_CNT_VAL_H) << 16); + + rtc_time64_to_tm(seconds, tm); + + return 0; +} + +static int msc313_rtc_set_time(struct device *dev, struct rtc_time *tm) +{ + struct msc313_rtc *priv = dev_get_drvdata(dev); + unsigned long seconds; + u16 reg; + + seconds = rtc_tm_to_time64(tm); + writew(seconds & 0xFFFF, priv->rtc_base + REG_RTC_LOAD_VAL_L); + writew((seconds >> 16) & 0xFFFF, priv->rtc_base + REG_RTC_LOAD_VAL_H); + + /* Enable load for loading value into internal RTC counter */ + reg = readw(priv->rtc_base + REG_RTC_CTRL); + writew(reg | LOAD_EN_BIT, priv->rtc_base + REG_RTC_CTRL); + + /* Wait for HW latch done */ + while (readw(priv->rtc_base + REG_RTC_CTRL) & LOAD_EN_BIT) + udelay(1); + return 0; +} + +static const struct rtc_class_ops msc313_rtc_ops = { + .read_time = msc313_rtc_read_time, + .set_time = msc313_rtc_set_time, + .read_alarm = msc313_rtc_read_alarm, + .set_alarm = msc313_rtc_set_alarm, + .alarm_irq_enable = msc313_rtc_alarm_irq_enable, +}; + +static irqreturn_t msc313_rtc_interrupt(s32 irq, void *dev_id) +{ + struct msc313_rtc *priv = dev_get_drvdata(dev_id); + u16 reg; + + reg = readw(priv->rtc_base + REG_RTC_STATUS_INT); + if (!(reg & ALM_INT_BIT)) + return IRQ_NONE; + + reg = readw(priv->rtc_base + REG_RTC_CTRL); + reg |= INT_CLEAR_BIT; + reg &= ~INT_FORCE_BIT; + writew(reg, priv->rtc_base + REG_RTC_CTRL); + + rtc_update_irq(priv->rtc_dev, 1, RTC_IRQF | RTC_AF); + + return IRQ_HANDLED; +} + +static int msc313_rtc_probe(struct platform_device *pdev) +{ + struct device *dev = &pdev->dev; + struct msc313_rtc *priv; + int ret; + int irq; + unsigned long rate; + u16 reg; + + priv = devm_kzalloc(&pdev->dev, sizeof(struct msc313_rtc), GFP_KERNEL); + if (!priv) + return -ENOMEM; + + priv->rtc_base = devm_platform_ioremap_resource(pdev, 0); + if (IS_ERR(priv->rtc_base)) + return PTR_ERR(priv->rtc_base); + + irq = platform_get_irq(pdev, 0); + if (irq < 0) + return -EINVAL; + + priv->rtc_dev = devm_rtc_allocate_device(dev); + if (IS_ERR(priv->rtc_dev)) + return PTR_ERR(priv->rtc_dev); + + priv->rtc_dev->ops = &msc313_rtc_ops; + priv->rtc_dev->range_min = RTC_TIMESTAMP_BEGIN_0000; + priv->rtc_dev->range_max = U32_MAX - 1; /* 2106-02-07 06:28:14 */ + + ret = devm_request_irq(dev, irq, msc313_rtc_interrupt, IRQF_SHARED, + dev_name(&pdev->dev), &pdev->dev); + if (ret) { + dev_err(dev, "Could not request IRQ\n"); + return ret; + } + + priv->clk = devm_clk_get(dev, NULL); + if (IS_ERR(priv->clk)) { + dev_err(dev, "No input reference clock\n"); + return PTR_ERR(priv->clk); + } + + ret = clk_prepare_enable(priv->clk); + if (ret) { + dev_err(dev, "Failed to enable the reference clock, %d\n", ret); + return ret; + } + + ret = devm_add_action_or_reset(dev, (void (*) (void *))clk_disable_unprepare, priv->clk); + if (ret) + return ret; + + rate = clk_get_rate(priv->clk); + writew(rate & 0xFFFF, priv->rtc_base + REG_RTC_FREQ_CW_L); + writew((rate >> 16) & 0xFFFF, priv->rtc_base + REG_RTC_FREQ_CW_H); + + reg = readw(priv->rtc_base + REG_RTC_CTRL); + reg |= CNT_EN_BIT; + writew(reg, priv->rtc_base + REG_RTC_CTRL); + + platform_set_drvdata(pdev, priv); + + return devm_rtc_register_device(priv->rtc_dev); +} + +static const struct of_device_id msc313_rtc_of_match_table[] = { + { .compatible = "mstar,msc313-rtc" }, + { } +}; +MODULE_DEVICE_TABLE(of, ms_rtc_of_match_table); + +static struct platform_driver msc313_rtc_driver = { + .probe = msc313_rtc_probe, + .driver = { + .name = "msc313-rtc", + .of_match_table = msc313_rtc_of_match_table, + }, +}; + +module_platform_driver(msc313_rtc_driver); + +MODULE_AUTHOR("Daniel Palmer "); +MODULE_AUTHOR("Romain Perier "); +MODULE_DESCRIPTION("MStar RTC Driver"); +MODULE_LICENSE("GPL v2"); From patchwork Sun Aug 1 16:09:21 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Romain Perier X-Patchwork-Id: 12413059 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-13.7 required=3.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED,DKIM_SIGNED,DKIM_VALID,FREEMAIL_FORGED_FROMDOMAIN, FREEMAIL_FROM,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 45CEBC4338F for ; Sun, 1 Aug 2021 16:12:09 +0000 (UTC) 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 mail.kernel.org (Postfix) with ESMTPS id 14F1360462 for ; Sun, 1 Aug 2021 16:12:09 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org 14F1360462 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=lists.infradead.org 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=GI0IEhX7eyTKVyMhaGkib4i0qfxdzWhJx5ZtOPgvjOY=; b=teYA57CPU64LCX yMNYAyj73+CoV6OGZO2YIgDkfKYA4HI5ePmlqPThh2B8XYz+xFiaJL9h6YNpNR8Emlouvz+l1ZxrJ c5BnBUnYiZ3zeQvs1Rz2lyS8wTNoTZJnlbNFAFRbRimaYojqSHKxy8OHUGjWChwS50oyAxzKtkl+B +vcB7hrpMVg07AN6CVvR0rewabNIUSh6sdb/SVJ+uWTvMV1ATuglVVoNem2iCU44FSHxRO+pHN2jn FRRYNXr+4lliMLrxV93FANRQ3U6JWtnOEop3FWDulZ2vmG4dqGJj/M364+Vg2fOPqeqO+qAgNkBOM tlKvbTyTCxAw58i8tBjQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1mAE2e-00Dpkb-5A; Sun, 01 Aug 2021 16:10:20 +0000 Received: from mail-wr1-x436.google.com ([2a00:1450:4864:20::436]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1mAE25-00Dpet-5J for linux-arm-kernel@lists.infradead.org; Sun, 01 Aug 2021 16:09:46 +0000 Received: by mail-wr1-x436.google.com with SMTP id z4so18454173wrv.11 for ; Sun, 01 Aug 2021 09:09:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=Irrd4jtOn6498HfdXqzrUQsx/bjOrWlV0M76X3ljkdk=; b=gs6U3eiL1KjltW6y4MiFi5EsWYHt4Yx/XntgKQ/n1j8Xk8hOZuoLbVFBD53MBo4lFC yc69MxSsOe2qmcJlqaMQKb8qhVOGH0GrTKydZ4TS/RzYDFWCfGdP2u2q5dJ0n0N9qYYs nRBsuOLZU+tyJ6dBhoKMJfoA5wZrFq9eo3ZWxQtdeO8HBgmgl2hgXAUHlPMEpYXlh3rc vdFSi6yy6BjDshszY1wSyOR7/eNtzkbcW1Ctzxx8KO/NslfEm6WdEKQnu6JcbQ7rmtaF SNOVIxVNmYwSx3CF4eWoW5N3e8O72QhLPWykd+fb3xD4ThwiT+4QN+95uLrZEeoVatxe ihbg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=Irrd4jtOn6498HfdXqzrUQsx/bjOrWlV0M76X3ljkdk=; b=WwuCZRTNzRQO1KXSkrlsYiA0GR7MxR8joNAmmvWh2t9uiVY1ZH4XzAWva7srKsX6vb re1rCQJ4ZX+lQaArmndFnUJ5K+Xui8MIXbx3b262/4c33iNyYskOib3tI2R6H2Wvpbf1 NJRIzyfEZeyKZvR+MjgNU89ZWkgwzU0pdigh67eTj3RUjdMQ93TxmALSePAUDhzv04fw 4Soq7HYSRFG2PwGdv/lUILZ6MIj0nXUax0hFbd/GJbmaY3YVhu5IWL2ZCx/rnBTFV44Y 4RCpY2ivP8vby93QiA7M6vhL7xgkcTaW8QjshQQCScWep230l6NCwPneeQ7MG3iqn2j/ 2GPw== X-Gm-Message-State: AOAM530VlzoBfs2os4BS7GsRQgc3FDWSrzb2sARQ8ZmkY7P/QPRN8Im+ M0++Pwht7c552GumsGwkrVRAoD6NgVQ= X-Google-Smtp-Source: ABdhPJxTowqFvdlDg1aQ9rOi2w93d2I1rV4UdL2UhVKGao2Yfhw8OUHCTcl/QgtVW/RkBvHWfwsSBA== X-Received: by 2002:a5d:6908:: with SMTP id t8mr13551915wru.421.1627834182374; Sun, 01 Aug 2021 09:09:42 -0700 (PDT) Received: from debby (176-141-241-253.abo.bbox.fr. [176.141.241.253]) by smtp.gmail.com with ESMTPSA id 140sm7875835wmb.43.2021.08.01.09.09.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 01 Aug 2021 09:09:41 -0700 (PDT) From: Romain Perier To: Alessandro Zummo , Alexandre Belloni , Daniel Palmer , Rob Herring Cc: linux-rtc@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org Subject: [PATCH v2 3/3] ARM: dts: mstar: Add rtc device node Date: Sun, 1 Aug 2021 18:09:21 +0200 Message-Id: <20210801160921.233081-4-romain.perier@gmail.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20210801160921.233081-1-romain.perier@gmail.com> References: <20210801160921.233081-1-romain.perier@gmail.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20210801_090945_240065_FFF91672 X-CRM114-Status: GOOD ( 14.28 ) X-BeenThere: linux-arm-kernel@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-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org This adds the definition of the rtc device node. The RTC being able to work with the oscillator at 12Mhz for now, it shares the same xtal than the watchdog. Signed-off-by: Romain Perier --- arch/arm/boot/dts/mstar-v7.dtsi | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/arch/arm/boot/dts/mstar-v7.dtsi b/arch/arm/boot/dts/mstar-v7.dtsi index 982dba9d28eb..1d4419aee67d 100644 --- a/arch/arm/boot/dts/mstar-v7.dtsi +++ b/arch/arm/boot/dts/mstar-v7.dtsi @@ -116,6 +116,13 @@ watchdog@6000 { clocks = <&xtal_div2>; }; + rtc@2400 { + compatible = "mstar,msc313-rtc"; + reg = <0x2400 0x40>; + clocks = <&xtal_div2>; + interrupts-extended = <&intc_irq GIC_SPI 44 IRQ_TYPE_LEVEL_HIGH>; + }; + intc_fiq: interrupt-controller@201310 { compatible = "mstar,mst-intc"; reg = <0x201310 0x40>;