From: Miquel Raynal <miquel.raynal@bootlin.com>
To: Alexandre Belloni <alexandre.belloni@bootlin.com>
Cc: Alessandro Zummo <a.zummo@towertech.it>,
Rob Herring <robh+dt@kernel.org>,
devicetree@vger.kernel.org,
Krzysztof Kozlowski <krzk+dt@kernel.org>,
linux-renesas-soc@vger.kernel.org,
Magnus Damm <magnus.damm@gmail.com>,
Gareth Williams <gareth.williams.jx@renesas.com>,
Phil Edworthy <phil.edworthy@renesas.com>,
Geert Uytterhoeven <geert@linux-m68k.org>,
Stephen Boyd <sboyd@kernel.org>,
Michael Turquette <mturquette@baylibre.com>,
linux-clk@vger.kernel.org,
Milan Stevanovic <milan.stevanovic@se.com>,
Jimmy Lalande <jimmy.lalande@se.com>,
Pascal Eberhard <pascal.eberhard@se.com>,
Thomas Petazzoni <thomas.petazzoni@bootlin.com>,
Herve Codina <herve.codina@bootlin.com>,
Clement Leger <clement.leger@bootlin.com>,
linux-rtc@vger.kernel.org,
Michel Pollet <michel.pollet@bp.renesas.com>
Subject: Re: [PATCH 3/7] rtc: rzn1: Add new RTC driver
Date: Wed, 13 Apr 2022 17:23:27 +0200 [thread overview]
Message-ID: <20220413172327.73d1fcc1@xps13> (raw)
In-Reply-To: <Yk1UXjTk32Vc9+/k@mail.local>
Hi Alex,
> > + tm->tm_sec = bcd2bin(tm->tm_sec);
> > + tm->tm_min = bcd2bin(tm->tm_min);
> > + tm->tm_hour = bcd2bin(tm->tm_hour);
> > + tm->tm_wday = bcd2bin(tm->tm_wday);
> > + tm->tm_mday = bcd2bin(tm->tm_mday);
> > + tm->tm_mon = bcd2bin(tm->tm_mon);
> > + tm->tm_year = bcd2bin(tm->tm_year);
> > +
> > + dev_dbg(dev, "%d-%d-%d(%d)T%d:%d:%d\n",
> > + tm->tm_year, tm->tm_mon, tm->tm_mday, tm->tm_wday,
> > + tm->tm_hour, tm->tm_min, tm->tm_sec);
> > +
>
> This is not really useful because we have tracepoints in the core.
> Anyway, please use %ptR.
Nice printk operator :)
I've dropped this dev_dbg call, it actually does not serve any useful
purpose.
[...]
> > +static int rzn1_rtc_probe(struct platform_device *pdev)
> > +{
> > + struct rzn1_rtc *rtc;
> > + int ret;
> > +
> > + rtc = devm_kzalloc(&pdev->dev, sizeof(*rtc), GFP_KERNEL);
> > + if (!rtc)
> > + return -ENOMEM;
> > +
> > + platform_set_drvdata(pdev, rtc);
> > +
> > + rtc->clk = devm_clk_get(&pdev->dev, "hclk");
> > + if (IS_ERR(rtc->clk))
> > + return dev_err_probe(&pdev->dev, PTR_ERR(rtc->clk), "Missing hclk\n");
> > +
> > + rtc->base = devm_platform_ioremap_resource(pdev, 0);
> > + if (IS_ERR(rtc->base))
> > + return dev_err_probe(&pdev->dev, PTR_ERR(rtc->base), "Missing reg\n");
> > +
> > + rtc->rtcdev = devm_rtc_allocate_device(&pdev->dev);
> > + if (IS_ERR(rtc->rtcdev))
> > + return PTR_ERR(rtc);
> > +
> > + rtc->rtcdev->range_max = 3178591199UL; /* 100 years */
>
> I'm not sure how you came to this value, this is 2070-09-22T05:59:59.
> I'm pretty sure the RTC will not fail at that time. Also, the comment
> seems fishy.
The RTC itself as no "starting point", but just a counter that can
count up to 100. So the max range is start-year + 100 years. But at
this point I don't yet have access to the start-year value. What's
your advise?
> > + rtc->rtcdev->ops = &rzn1_rtc_ops;
> > +
> > + ret = r9a06g032_sysctrl_enable_rtc(true);
> > + if (ret)
> > + return ret;
> > +
> > + ret = clk_prepare_enable(rtc->clk);
> > + if (ret)
> > + goto disable_rtc;
> > +
> > + /*
> > + * Ensure the clock counter is enabled.
> > + * Set 24-hour mode and possible oscillator offset compensation in SUBU mode.
> > + */
> > + writel(RZN1_RTC_CTL0_CE | RZN1_RTC_CTL0_AMPM | RZN1_RTC_CTL0_SLSB_SUBU,
> > + rtc->base + RZN1_RTC_CTL0);
> > +
> > + /* Disable all interrupts */
> > + writel(0, rtc->base + RZN1_RTC_CTL1);
> > +
> > + /* Enable counter operation */
> > + writel(0, rtc->base + RZN1_RTC_CTL2);
> > +
>
> I don't think you should do that unconditionally. The RTC is either
> not already started (and doesn't carry the proper time/date) or already
> started. It would be better to start it in .set_time. Maybe you can even
> use that to detect whether it has already been set once.
Actually there is only one (interesting) writeable bit in this register
and it defaults to 0 whenever we enable the register interface so we
don't really need to enable anything.
But I've added the necessary logic to handle the situation where the
bootloader would disable the rtc (which is the only situation where
the driver can diagnose an erroneous time/date).
> > + ret = devm_rtc_register_device(rtc->rtcdev);
> > + if (ret) {
> > + dev_err(&pdev->dev, "Failed to register RTC\n");
>
> No error message is needed here.
Ok.
>
> > + goto disable_clk;
> > + }
> > +
> > + return 0;
> > +
> > +disable_clk:
> > + clk_disable_unprepare(rtc->clk);
> > +disable_rtc:
> > + r9a06g032_sysctrl_enable_rtc(false);
> > +
> > + return ret;
> > +}
> > +
> > +static int rzn1_rtc_remove(struct platform_device *pdev)
> > +{
> > + struct rzn1_rtc *rtc = platform_get_drvdata(pdev);
> > +
> > + clk_disable_unprepare(rtc->clk);
> > + r9a06g032_sysctrl_enable_rtc(false);
>
> Does this stop the RTC or just the register interface?
Mmmh actually if I reset the sysctrl bit manually I loose the counter
entirely, so I'll drop this call.
Thanks,
Miquèl
next prev parent reply other threads:[~2022-04-13 15:23 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-04-05 18:47 [PATCH 0/7] RZN1 RTC support Miquel Raynal
2022-04-05 18:47 ` [PATCH 1/7] dt-bindings: rtc: rzn1: Describe the RZN1 RTC Miquel Raynal
2022-04-07 7:37 ` Krzysztof Kozlowski
2022-04-07 9:21 ` Miquel Raynal
2022-04-05 18:47 ` [PATCH 2/7] soc: renesas: rzn1-sysc: Export a function to enable/disable the RTC Miquel Raynal
2022-04-06 7:00 ` Thomas Petazzoni
2022-04-06 7:43 ` Miquel Raynal
2022-04-06 8:32 ` Alexandre Belloni
2022-04-05 18:47 ` [PATCH 3/7] rtc: rzn1: Add new RTC driver Miquel Raynal
2022-04-06 8:50 ` Alexandre Belloni
2022-04-13 15:23 ` Miquel Raynal [this message]
2022-04-13 15:48 ` Alexandre Belloni
2022-04-14 11:19 ` Miquel Raynal
2022-04-05 18:47 ` [PATCH 4/7] rtc: rzn1: Add alarm support Miquel Raynal
2022-04-06 9:10 ` Alexandre Belloni
2022-04-05 18:47 ` [PATCH 5/7] rtc: rzn1: Add oscillator offset support Miquel Raynal
2022-04-05 18:47 ` [PATCH 6/7] MAINTAINERS: Add myself as maintainer of the RZN1 RTC driver Miquel Raynal
2022-04-11 15:22 ` Geert Uytterhoeven
2022-04-05 18:47 ` [PATCH 7/7] ARM: dts: r9a06g032: Describe the RTC Miquel Raynal
2022-04-11 15:32 ` Geert Uytterhoeven
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20220413172327.73d1fcc1@xps13 \
--to=miquel.raynal@bootlin.com \
--cc=a.zummo@towertech.it \
--cc=alexandre.belloni@bootlin.com \
--cc=clement.leger@bootlin.com \
--cc=devicetree@vger.kernel.org \
--cc=gareth.williams.jx@renesas.com \
--cc=geert@linux-m68k.org \
--cc=herve.codina@bootlin.com \
--cc=jimmy.lalande@se.com \
--cc=krzk+dt@kernel.org \
--cc=linux-clk@vger.kernel.org \
--cc=linux-renesas-soc@vger.kernel.org \
--cc=linux-rtc@vger.kernel.org \
--cc=magnus.damm@gmail.com \
--cc=michel.pollet@bp.renesas.com \
--cc=milan.stevanovic@se.com \
--cc=mturquette@baylibre.com \
--cc=pascal.eberhard@se.com \
--cc=phil.edworthy@renesas.com \
--cc=robh+dt@kernel.org \
--cc=sboyd@kernel.org \
--cc=thomas.petazzoni@bootlin.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).