From c4e945531e0c6bdf479715987162f661f595f6da Mon Sep 17 00:00:00 2001 From: Peter Csaszar Date: Fri, 25 Oct 2024 17:16:32 -0700 Subject: [PATCH] da1469x/clock: Protect register bitfields This commit adds masking to register bitfields, where a wrong syscfg value may result in the inadvertent overrides of neighboring bitfields. --- hw/mcu/dialog/da1469x/src/da1469x_clock.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/hw/mcu/dialog/da1469x/src/da1469x_clock.c b/hw/mcu/dialog/da1469x/src/da1469x_clock.c index c0867a2e82..8a7464336a 100644 --- a/hw/mcu/dialog/da1469x/src/da1469x_clock.c +++ b/hw/mcu/dialog/da1469x/src/da1469x_clock.c @@ -111,7 +111,8 @@ da1469x_clock_sys_xtal32m_init(void) */ xtalrdy_cnt = MYNEWT_VAL(MCU_CLOCK_XTAL32M_SETTLE_TIME_US) * XTALRDY_IRQ_FREQ_MAX / 1000000; - CRG_XTAL->XTALRDY_CTRL_REG = (xtalrdy_cnt << CRG_XTAL_XTALRDY_CTRL_REG_XTALRDY_CNT_Pos) | + CRG_XTAL->XTALRDY_CTRL_REG = ((xtalrdy_cnt << CRG_XTAL_XTALRDY_CTRL_REG_XTALRDY_CNT_Pos) & + CRG_XTAL_XTALRDY_CTRL_REG_XTALRDY_CNT_Msk) | (DA1469X_XTALRDY_CLK_SEL << CRG_XTAL_XTALRDY_CTRL_REG_XTALRDY_CLK_SEL_Pos); } @@ -294,7 +295,8 @@ da1469x_clock_calibrate(uint8_t clock_sel, uint16_t ref_cnt) /* Select reference clock & calibrated clock */ ANAMISC_BIF->CLK_REF_SEL_REG = (DA1469X_REF_SEL << ANAMISC_BIF_CLK_REF_SEL_REG_CAL_CLK_SEL_Pos) | - (clock_sel << ANAMISC_BIF_CLK_REF_SEL_REG_REF_CLK_SEL_Pos); + ((clock_sel << ANAMISC_BIF_CLK_REF_SEL_REG_REF_CLK_SEL_Pos) & + ANAMISC_BIF_CLK_REF_SEL_REG_REF_CLK_SEL_Msk); /* Start measurement */ ANAMISC_BIF->CLK_REF_SEL_REG |= ANAMISC_BIF_CLK_REF_SEL_REG_REF_CAL_START_Msk; @@ -332,7 +334,7 @@ rc32k_trim_set(uint32_t trim) { CRG_TOP->CLK_RC32K_REG = (CRG_TOP->CLK_RC32K_REG & ~CRG_TOP_CLK_RC32K_REG_RC32K_TRIM_Msk) | - (trim << CRG_TOP_CLK_RC32K_REG_RC32K_TRIM_Pos); + ((trim << CRG_TOP_CLK_RC32K_REG_RC32K_TRIM_Pos) & CRG_TOP_CLK_RC32K_REG_RC32K_TRIM_Msk); } void