Skip to content

STM32H7 MCO select and prescaler masks are incorrect #97881

@attie

Description

@attie

Describe the bug

#define STM32_DT_CLOCK_SELECT(val, mask, shift, reg) \
((((reg) & STM32_DT_CLKSEL_REG_MASK) << STM32_DT_CLKSEL_REG_SHIFT) | \
(((shift) & STM32_DT_CLKSEL_SHIFT_MASK) << STM32_DT_CLKSEL_SHIFT_SHIFT) | \
(((mask) & STM32_DT_CLKSEL_MASK_MASK) << STM32_DT_CLKSEL_MASK_SHIFT) | \
(((val) & STM32_DT_CLKSEL_VAL_MASK) << STM32_DT_CLKSEL_VAL_SHIFT))

#define MCO1_SEL(val) STM32_DT_CLOCK_SELECT((val), 0xF, 22, CFGR_REG)
#define MCO1_PRE(val) STM32_DT_CLOCK_SELECT((val), 0x7, 18, CFGR_REG)
#define MCO2_SEL(val) STM32_DT_CLOCK_SELECT((val), 0xF, 29, CFGR_REG)
#define MCO2_PRE(val) STM32_DT_CLOCK_SELECT((val), 0x7, 25, CFGR_REG)

Image

I believe the masks for these macros should be swapped (SEL vs PRE)... can someone confirm or deny this?

#define MCO1_SEL(val)           STM32_DT_CLOCK_SELECT((val), 0x7, 22, CFGR_REG)
#define MCO1_PRE(val)           STM32_DT_CLOCK_SELECT((val), 0xF, 18, CFGR_REG)
#define MCO2_SEL(val)           STM32_DT_CLOCK_SELECT((val), 0x7, 29, CFGR_REG)
#define MCO2_PRE(val)           STM32_DT_CLOCK_SELECT((val), 0xF, 25, CFGR_REG)

Steps to reproduce

Untested / unverified at the moment...

Relevant log output

None

Impact

Functional Limitation - Some features not working as expected, but system usable.

Environment

  • Linux fef609931a42 6.5.0-35-generic #35~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Tue May 7 09:00:52 UTC 2 x86_64 x86_64 x86_64 GNU/Linux
  • arm-none-eabi-gcc (Arm GNU Toolchain 13.2.rel1 (Build arm-13.7)) 13.2.1 20231009
  • Zephyr 90cd350, still present in 8a72d77

Additional context

I'm using STM32H753, and luckily I don't think this will affect me, as I'm not using MCO2 (so the LSB of MCO2PRE won't be clobbered), and have low values for MCO1 prescaler (so MSB won't be masked off).

I've not verified values for the other families.

I'll try to set a large prescaler on MCO1 to confirm this if nobody else can confirm.

Metadata

Metadata

Assignees

Labels

Type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions