Add a common helper function for doing the basic configuration required for enabling the 32k crystal on some of the TI boards.
Signed-off-by: Vishal Mahaveer <[email protected]> --- board/ti/common/Kconfig | 5 +++++ board/ti/common/Makefile | 1 + board/ti/common/k3_32k_lfosc.c | 22 ++++++++++++++++++++++ board/ti/common/k3_32k_lfosc.h | 15 +++++++++++++++ 4 files changed, 43 insertions(+) create mode 100644 board/ti/common/k3_32k_lfosc.c create mode 100644 board/ti/common/k3_32k_lfosc.h diff --git a/board/ti/common/Kconfig b/board/ti/common/Kconfig index 3dd2852e6b0..409454813f3 100644 --- a/board/ti/common/Kconfig +++ b/board/ti/common/Kconfig @@ -22,6 +22,11 @@ config CAPE_EEPROM_BUS_NUM default 2 depends on SUPPORT_EXTENSION_SCAN +config TI_K3_BOARD_LFOSC + bool "Initialize 32k LFOSC" + help + Enable the 32k LFOSC on the device + config TI_COMMON_CMD_OPTIONS bool "Enable cmd options on TI platforms" imply CMD_ASKENV diff --git a/board/ti/common/Makefile b/board/ti/common/Makefile index f58935b4103..b40c93cf312 100644 --- a/board/ti/common/Makefile +++ b/board/ti/common/Makefile @@ -5,3 +5,4 @@ obj-${CONFIG_TI_I2C_BOARD_DETECT} += board_detect.o obj-${CONFIG_$(PHASE_)SUPPORT_EXTENSION_SCAN} += cape_detect.o obj-${CONFIG_OF_LIBFDT} += fdt_ops.o obj-${CONFIG_ARCH_K3} += k3-ddr.o +obj-${CONFIG_TI_K3_BOARD_LFOSC} += k3_32k_lfosc.o diff --git a/board/ti/common/k3_32k_lfosc.c b/board/ti/common/k3_32k_lfosc.c new file mode 100644 index 00000000000..24c5bad76b9 --- /dev/null +++ b/board/ti/common/k3_32k_lfosc.c @@ -0,0 +1,22 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/* + * Library to support LFOSC operations common to some of the K3 devices + * + * Copyright (C) 2026 Texas Instruments Incorporated - https://www.ti.com/ + */ + +#include <asm/arch/hardware.h> + +void enable_32k_lfosc(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); +} diff --git a/board/ti/common/k3_32k_lfosc.h b/board/ti/common/k3_32k_lfosc.h new file mode 100644 index 00000000000..08752033f2e --- /dev/null +++ b/board/ti/common/k3_32k_lfosc.h @@ -0,0 +1,15 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/* + * Library to support LFOSC operations common to some of the K3 devices + * + * Copyright (C) 2026 Texas Instruments Incorporated - https://www.ti.com/ + */ +#ifndef __32K_LFOSC_OPS_H +#define __32K_LFOSC_OPS_H + +/** + * enable_32k_lfosc - Do basic initialization of the 32k crystal + */ +void enable_32k_lfosc(void); + +#endif /* __32K_LFOSC_OPS_H */ -- 2.34.1

