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 |
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.
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()
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
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
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 --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); +}
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