diff mbox series

[1/3] board: ti: common: add rtc setup to common folder

Message ID 20231107232139.2839534-6-bb@ti.com
State Changes Requested
Delegated to: Tom Rini
Headers show
Series board: ti: common: setup mux and debounce for 32k RTC crystal | expand

Commit Message

Bryan Brattlof Nov. 7, 2023, 11:21 p.m. UTC
All of the starter kit boards for the am62xxx extended family utilize
the same 32k crystal oscillator for a more accurate clock for the RTC
instance. Add the setup the clock mux and debounce configuration to the
common board directory so the entire am62xxx extended family can utilize
it.

Signed-off-by: Bryan Brattlof <bb@ti.com>
---
 board/ti/common/Kconfig |  8 +++++++
 board/ti/common/rtc.c   | 47 +++++++++++++++++++++++++++++++++++++++++
 2 files changed, 55 insertions(+)
 create mode 100644 board/ti/common/rtc.c

Comments

Tom Rini Nov. 7, 2023, 11:30 p.m. UTC | #1
On Tue, Nov 07, 2023 at 05:21:41PM -0600, Bryan Brattlof wrote:

> All of the starter kit boards for the am62xxx extended family utilize
> the same 32k crystal oscillator for a more accurate clock for the RTC
> instance. Add the setup the clock mux and debounce configuration to the
> common board directory so the entire am62xxx extended family can utilize
> it.
> 
> Signed-off-by: Bryan Brattlof <bb@ti.com>
[snip]
> diff --git a/board/ti/common/Kconfig b/board/ti/common/Kconfig
> index 49edd98014ab7..56a65c0a402bb 100644
> --- a/board/ti/common/Kconfig
> +++ b/board/ti/common/Kconfig
> @@ -1,3 +1,11 @@
> +config BOARD_HAS_32K_RTC_CRYSTAL
> +	bool "Enable the 32k crystial for RTC"
> +	help
> +	   Some of Texas Instrument's Starter-Kit boards have
> +	   an onboard 32k crystal. Select this option if you wish Uboot
> +	   to enable this crystal for Linux
> +	default n

No "default n" as that is the default. And we (a) need some depends on
for what families this is found on and then (b) how, if at all, does
this match up with the 32k crystal used on other TI reference platforms
over the years? If this is specific to the K3 families of reference
platforms, the help needs re-phrasing and the filename is too generic.
It's also not a "RTC" in terms of something we can talk to via
drivers/rtc/rtc-uclass.c and drivers/rtc/davinci.c, or in this case
porting the kernel's drivers/rtc/rtc-ti-k3.c over, yes?

Oh, and "U-Boot" not "Uboot". Should see if the checkpatch typo list
can be easily expanded by us, one of these days.
Raghavendra, Vignesh Nov. 8, 2023, 7:26 a.m. UTC | #2
On 08/11/23 04:51, Bryan Brattlof wrote:
> All of the starter kit boards for the am62xxx extended family utilize
> the same 32k crystal oscillator for a more accurate clock for the RTC
> instance. Add the setup the clock mux and debounce configuration to the
> common board directory so the entire am62xxx extended family can utilize
> it.
> 
> Signed-off-by: Bryan Brattlof <bb@ti.com>
> ---
>  board/ti/common/Kconfig |  8 +++++++
>  board/ti/common/rtc.c   | 47 +++++++++++++++++++++++++++++++++++++++++
>  2 files changed, 55 insertions(+)
>  create mode 100644 board/ti/common/rtc.c
> 
> diff --git a/board/ti/common/Kconfig b/board/ti/common/Kconfig
> index 49edd98014ab7..56a65c0a402bb 100644
> --- a/board/ti/common/Kconfig
> +++ b/board/ti/common/Kconfig
> @@ -1,3 +1,11 @@
> +config BOARD_HAS_32K_RTC_CRYSTAL
> +	bool "Enable the 32k crystial for RTC"
> +	help
> +	   Some of Texas Instrument's Starter-Kit boards have
> +	   an onboard 32k crystal. Select this option if you wish Uboot
> +	   to enable this crystal for Linux
> +	default n
> +
>  config TI_I2C_BOARD_DETECT
>  	bool "Support for Board detection for TI platforms"
>  	help
> diff --git a/board/ti/common/rtc.c b/board/ti/common/rtc.c
> new file mode 100644
> index 0000000000000..e117a927765c5
> --- /dev/null
> +++ b/board/ti/common/rtc.c
> @@ -0,0 +1,47 @@
> +// SPDX-License-Identifier: GPL-2.0+
> +/*
> + * RTC setup for TI Platforms
> + *
> + * Copyright (C) 2023 Texas Instruments Incorporated - https://www.ti.com/
> + */
> +#include <asm/arch/hardware.h>
> +#include <asm/io.h>
> +#include <log.h>
> +
> +#define WKUP_CTRLMMR_DBOUNCE_CFG1 0x04504084
> +#define WKUP_CTRLMMR_DBOUNCE_CFG2 0x04504088
> +#define WKUP_CTRLMMR_DBOUNCE_CFG3 0x0450408c
> +#define WKUP_CTRLMMR_DBOUNCE_CFG4 0x04504090
> +#define WKUP_CTRLMMR_DBOUNCE_CFG5 0x04504094
> +#define WKUP_CTRLMMR_DBOUNCE_CFG6 0x04504098
> +
> +void board_rtc_init(void)
> +{
> +	u32 val;
> +
> +	/* We have 32k crystal, so lets enable it */
> +	val = readl(MCU_CTRL_LFXOSC_CTRL);
> +	val &= ~(MCU_CTRL_LFXOSC_32K_DISABLE_VAL);
> +	writel(val, MCU_CTRL_LFXOSC_CTRL);
> +
> +	/* Add any TRIM needed for the crystal here.. */
> +	/* Make sure to mux up to take the SoC 32k from the crystal */
> +	writel(MCU_CTRL_DEVICE_CLKOUT_LFOSC_SELECT_VAL,
> +	       MCU_CTRL_DEVICE_CLKOUT_32K_CTRL);
> +
> +	/* Setup debounce conf registers - arbitrary values.
> +	 * Times are approx
> +	 */
> +	/* 1.9ms debounce @ 32k */
> +	writel(WKUP_CTRLMMR_DBOUNCE_CFG1, 0x1);
> +	/* 5ms debounce @ 32k */
> +	writel(WKUP_CTRLMMR_DBOUNCE_CFG2, 0x5);
> +	/* 20ms debounce @ 32k */
> +	writel(WKUP_CTRLMMR_DBOUNCE_CFG3, 0x14);
> +	/* 46ms debounce @ 32k */
> +	writel(WKUP_CTRLMMR_DBOUNCE_CFG4, 0x18);
> +	/* 100ms debounce @ 32k */
> +	writel(WKUP_CTRLMMR_DBOUNCE_CFG5, 0x1c);
> +	/* 156ms debounce @ 32k */
> +	writel(WKUP_CTRLMMR_DBOUNCE_CFG6, 0x1f);
> +}


Pad Debounce settings has nothing to do with RTC. This doesn't belong to
board_rtc_init()
Bryan Brattlof Nov. 8, 2023, 3:38 p.m. UTC | #3
On November  8, 2023 thus sayeth Vignesh Raghavendra:
> On 08/11/23 04:51, Bryan Brattlof wrote:
> > All of the starter kit boards for the am62xxx extended family utilize
> > the same 32k crystal oscillator for a more accurate clock for the RTC
> > instance. Add the setup the clock mux and debounce configuration to the
> > common board directory so the entire am62xxx extended family can utilize
> > it.
> > 
> > Signed-off-by: Bryan Brattlof <bb@ti.com>
> > ---

...

> > +	/* Setup debounce conf registers - arbitrary values.
> > +	 * Times are approx
> > +	 */
> > +	/* 1.9ms debounce @ 32k */
> > +	writel(WKUP_CTRLMMR_DBOUNCE_CFG1, 0x1);
> > +	/* 5ms debounce @ 32k */
> > +	writel(WKUP_CTRLMMR_DBOUNCE_CFG2, 0x5);
> > +	/* 20ms debounce @ 32k */
> > +	writel(WKUP_CTRLMMR_DBOUNCE_CFG3, 0x14);
> > +	/* 46ms debounce @ 32k */
> > +	writel(WKUP_CTRLMMR_DBOUNCE_CFG4, 0x18);
> > +	/* 100ms debounce @ 32k */
> > +	writel(WKUP_CTRLMMR_DBOUNCE_CFG5, 0x1c);
> > +	/* 156ms debounce @ 32k */
> > +	writel(WKUP_CTRLMMR_DBOUNCE_CFG6, 0x1f);
> > +}
> 
> 
> Pad Debounce settings has nothing to do with RTC. This doesn't belong to
> board_rtc_init()
> 

Oops.. I have no idea what I was thinking yesterday. This was a really 
half-baked plan all the way through :) 

I'll get this properly sorted out for v2

Thanks for reviewing though
~Bryan
Bryan Brattlof Nov. 8, 2023, 3:46 p.m. UTC | #4
On November  7, 2023 thus sayeth Tom Rini:
> On Tue, Nov 07, 2023 at 05:21:41PM -0600, Bryan Brattlof wrote:
> 
> > All of the starter kit boards for the am62xxx extended family utilize
> > the same 32k crystal oscillator for a more accurate clock for the RTC
> > instance. Add the setup the clock mux and debounce configuration to the
> > common board directory so the entire am62xxx extended family can utilize
> > it.
> > 
> > Signed-off-by: Bryan Brattlof <bb@ti.com>
> [snip]
> > diff --git a/board/ti/common/Kconfig b/board/ti/common/Kconfig
> > index 49edd98014ab7..56a65c0a402bb 100644
> > --- a/board/ti/common/Kconfig
> > +++ b/board/ti/common/Kconfig
> > @@ -1,3 +1,11 @@
> > +config BOARD_HAS_32K_RTC_CRYSTAL
> > +	bool "Enable the 32k crystial for RTC"
> > +	help
> > +	   Some of Texas Instrument's Starter-Kit boards have
> > +	   an onboard 32k crystal. Select this option if you wish Uboot
> > +	   to enable this crystal for Linux
> > +	default n
> 
> No "default n" as that is the default. And we (a) need some depends on
> for what families this is found on and then (b) how, if at all, does
> this match up with the 32k crystal used on other TI reference platforms
> over the years? If this is specific to the K3 families of reference
> platforms, the help needs re-phrasing and the filename is too generic.
> It's also not a "RTC" in terms of something we can talk to via
> drivers/rtc/rtc-uclass.c and drivers/rtc/davinci.c, or in this case
> porting the kernel's drivers/rtc/rtc-ti-k3.c over, yes?
> 
> Oh, and "U-Boot" not "Uboot". Should see if the checkpatch typo list
> can be easily expanded by us, one of these days.

Yeah I'll work on the wording.

We just need to toggle a few bits for Linux to get the crystal muxed 
properly for the RTC driver in Linux.

We also toggle a few bits for the debouce settings that apparently I 
didn't separate out from this series.

Thanks for the quick review though.
~Bryan
Tom Rini Nov. 8, 2023, 4:49 p.m. UTC | #5
On Wed, Nov 08, 2023 at 09:46:34AM -0600, Bryan Brattlof wrote:
> On November  7, 2023 thus sayeth Tom Rini:
> > On Tue, Nov 07, 2023 at 05:21:41PM -0600, Bryan Brattlof wrote:
> > 
> > > All of the starter kit boards for the am62xxx extended family utilize
> > > the same 32k crystal oscillator for a more accurate clock for the RTC
> > > instance. Add the setup the clock mux and debounce configuration to the
> > > common board directory so the entire am62xxx extended family can utilize
> > > it.
> > > 
> > > Signed-off-by: Bryan Brattlof <bb@ti.com>
> > [snip]
> > > diff --git a/board/ti/common/Kconfig b/board/ti/common/Kconfig
> > > index 49edd98014ab7..56a65c0a402bb 100644
> > > --- a/board/ti/common/Kconfig
> > > +++ b/board/ti/common/Kconfig
> > > @@ -1,3 +1,11 @@
> > > +config BOARD_HAS_32K_RTC_CRYSTAL
> > > +	bool "Enable the 32k crystial for RTC"
> > > +	help
> > > +	   Some of Texas Instrument's Starter-Kit boards have
> > > +	   an onboard 32k crystal. Select this option if you wish Uboot
> > > +	   to enable this crystal for Linux
> > > +	default n
> > 
> > No "default n" as that is the default. And we (a) need some depends on
> > for what families this is found on and then (b) how, if at all, does
> > this match up with the 32k crystal used on other TI reference platforms
> > over the years? If this is specific to the K3 families of reference
> > platforms, the help needs re-phrasing and the filename is too generic.
> > It's also not a "RTC" in terms of something we can talk to via
> > drivers/rtc/rtc-uclass.c and drivers/rtc/davinci.c, or in this case
> > porting the kernel's drivers/rtc/rtc-ti-k3.c over, yes?
> > 
> > Oh, and "U-Boot" not "Uboot". Should see if the checkpatch typo list
> > can be easily expanded by us, one of these days.
> 
> Yeah I'll work on the wording.
> 
> We just need to toggle a few bits for Linux to get the crystal muxed 
> properly for the RTC driver in Linux.

This sounds a whole lot like what AM33XX_ENABLE_RTC32K_OSC symbol (which
could be badly named, too!) is about, and hence some of my other
questions. So please keep in mind the am33xx case here, and also how
likely or not every custom K3 platform is also going to be doing this,
or not. On am33xx, it does look like a few do disable it, but it's in
common code since most custom platforms want it.

> We also toggle a few bits for the debouce settings that apparently I 
> didn't separate out from this series.

Please keep in mind if these too are essentially generic changes for the
SoC family as well (or just how board specific they might be and how
wrong they could be before a problem is seen, ie technical vs
practical considerations).
diff mbox series

Patch

diff --git a/board/ti/common/Kconfig b/board/ti/common/Kconfig
index 49edd98014ab7..56a65c0a402bb 100644
--- a/board/ti/common/Kconfig
+++ b/board/ti/common/Kconfig
@@ -1,3 +1,11 @@ 
+config BOARD_HAS_32K_RTC_CRYSTAL
+	bool "Enable the 32k crystial for RTC"
+	help
+	   Some of Texas Instrument's Starter-Kit boards have
+	   an onboard 32k crystal. Select this option if you wish Uboot
+	   to enable this crystal for Linux
+	default n
+
 config TI_I2C_BOARD_DETECT
 	bool "Support for Board detection for TI platforms"
 	help
diff --git a/board/ti/common/rtc.c b/board/ti/common/rtc.c
new file mode 100644
index 0000000000000..e117a927765c5
--- /dev/null
+++ b/board/ti/common/rtc.c
@@ -0,0 +1,47 @@ 
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * RTC setup for TI Platforms
+ *
+ * Copyright (C) 2023 Texas Instruments Incorporated - https://www.ti.com/
+ */
+#include <asm/arch/hardware.h>
+#include <asm/io.h>
+#include <log.h>
+
+#define WKUP_CTRLMMR_DBOUNCE_CFG1 0x04504084
+#define WKUP_CTRLMMR_DBOUNCE_CFG2 0x04504088
+#define WKUP_CTRLMMR_DBOUNCE_CFG3 0x0450408c
+#define WKUP_CTRLMMR_DBOUNCE_CFG4 0x04504090
+#define WKUP_CTRLMMR_DBOUNCE_CFG5 0x04504094
+#define WKUP_CTRLMMR_DBOUNCE_CFG6 0x04504098
+
+void board_rtc_init(void)
+{
+	u32 val;
+
+	/* We have 32k crystal, so lets enable it */
+	val = readl(MCU_CTRL_LFXOSC_CTRL);
+	val &= ~(MCU_CTRL_LFXOSC_32K_DISABLE_VAL);
+	writel(val, MCU_CTRL_LFXOSC_CTRL);
+
+	/* Add any TRIM needed for the crystal here.. */
+	/* Make sure to mux up to take the SoC 32k from the crystal */
+	writel(MCU_CTRL_DEVICE_CLKOUT_LFOSC_SELECT_VAL,
+	       MCU_CTRL_DEVICE_CLKOUT_32K_CTRL);
+
+	/* Setup debounce conf registers - arbitrary values.
+	 * Times are approx
+	 */
+	/* 1.9ms debounce @ 32k */
+	writel(WKUP_CTRLMMR_DBOUNCE_CFG1, 0x1);
+	/* 5ms debounce @ 32k */
+	writel(WKUP_CTRLMMR_DBOUNCE_CFG2, 0x5);
+	/* 20ms debounce @ 32k */
+	writel(WKUP_CTRLMMR_DBOUNCE_CFG3, 0x14);
+	/* 46ms debounce @ 32k */
+	writel(WKUP_CTRLMMR_DBOUNCE_CFG4, 0x18);
+	/* 100ms debounce @ 32k */
+	writel(WKUP_CTRLMMR_DBOUNCE_CFG5, 0x1c);
+	/* 156ms debounce @ 32k */
+	writel(WKUP_CTRLMMR_DBOUNCE_CFG6, 0x1f);
+}