# SPDX-License-Identifier: GPL-2.0-or-later

set RCC_CR            [expr {$RCC_BASE + 0x00}]
set RCC_CFGR          [expr {$RCC_BASE + 0x04}]
set RCC_CIR           [expr {$RCC_BASE + 0x08}]
set RCC_APB2RSTR      [expr {$RCC_BASE + 0x0c}]
set RCC_APB1RSTR      [expr {$RCC_BASE + 0x10}]
set RCC_AHBENR        [expr {$RCC_BASE + 0x14}]
set RCC_APB2ENR       [expr {$RCC_BASE + 0x18}]
set RCC_APB1ENR       [expr {$RCC_BASE + 0x1c}]
set RCC_BDCR          [expr {$RCC_BASE + 0x20}]
set RCC_CSR           [expr {$RCC_BASE + 0x24}]


proc show_RCC_CR { } {
    if [ catch { set val [show_mmr32_reg RCC_CR] } msg ] {
	error $msg
    }

    show_mmr_bitfield  0  0 $val HSI      { OFF ON }
    show_mmr_bitfield  1  1 $val HSIRDY   { NOTRDY RDY  }
    show_mmr_bitfield  7  3 $val HSITRIM  { _NUMBER_ }
    show_mmr_bitfield 15  8 $val HSICAL   { _NUMBER_ }
    show_mmr_bitfield 16 16 $val HSEON    { OFF ON }
    show_mmr_bitfield 17 17 $val HSERDY   { NOTRDY RDY  }
    show_mmr_bitfield 18 18 $val HSEBYP   { NOTBYPASSED BYPASSED }
    show_mmr_bitfield 19 19 $val CSSON    { OFF ON }
    show_mmr_bitfield 24 24 $val PLLON    { OFF ON }
    show_mmr_bitfield 25 25 $val PLLRDY   { NOTRDY RDY }
}

proc show_RCC_CFGR { } {
    if [ catch { set val [show_mmr32_reg RCC_CFGR] } msg ] {
	error $msg
    }


    show_mmr_bitfield  1  0 $val  SW     { HSI HSE PLL ILLEGAL }
    show_mmr_bitfield  3  2 $val  SWS    { HSI HSE PLL ILLEGAL }
    show_mmr_bitfield  7  4 $val  HPRE   { sysclk_div_1 sysclk_div_1 sysclk_div_1 sysclk_div_1 sysclk_div_1 sysclk_div_1 sysclk_div_1 sysclk_div_1 sysclk_div_2 sysclk_div_4 sysclk_div_8 sysclk_div_16 sysclk_div_64 sysclk_div_128 sysclk_div_256 sysclk_div_512 }
    show_mmr_bitfield 10  8 $val  PPRE1  { hclk_div1 hclk_div1 hclk_div1 hclk_div1 hclk_div2 hclk_div4 hclk_div8 hclk_div16 }
    show_mmr_bitfield 13 11 $val  PPRE2  { hclk_div1 hclk_div1 hclk_div1 hclk_div1 hclk_div2 hclk_div4 hclk_div8 hclk_div16 }
    show_mmr_bitfield 15 14 $val  ADCPRE { pclk2_div1 pclk2_div1 pclk2_div1 pclk2_div1 pclk2_div2 pclk2_div4 pclk2_div8 pclk2_div16 }
    show_mmr_bitfield 16 16 $val  PLLSRC { HSI_div_2 HSE }
    show_mmr_bitfield 17 17 $val  PLLXTPRE { hse_div1 hse_div2 }
    show_mmr_bitfield 21 18 $val  PLLMUL { x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x16 }
    show_mmr_bitfield 22 22 $val  USBPRE { div1 div1_5 }
    show_mmr_bitfield 26 24 $val  MCO    { none none none none SysClk HSI HSE PLL_div2 }
}


proc show_RCC_CIR { } {
    if [ catch { set val [show_mmr32_reg RCC_CIR] } msg ] {
	error $msg
    }

}

proc show_RCC_APB2RSTR { } {
    if [ catch { set val [ show_mmr32_reg RCC_APB2RSTR] } msg ] {
	error $msg
    }
    for { set x 0 } { $x < 32 } { incr x } {
	set bits($x) xxx
    }
    set bits(15) adc3
    set bits(14) usart1
    set bits(13) tim8
    set bits(12) spi1
    set bits(11) tim1
    set bits(10) adc2
    set bits(9) adc1
    set bits(8) iopg
    set bits(7) iopf
    set bits(6) iope
    set bits(5) iopd
    set bits(4) iopc
    set bits(3) iopb
    set bits(2) iopa
    set bits(1) xxx
    set bits(0) afio
    show_mmr32_bits bits $val
}

proc show_RCC_APB1RSTR { } {
    if [ catch { set val [ show_mmr32_reg RCC_APB1RSTR] } msg ] {
	error $msg
    }
    set bits(31) xxx
    set bits(30) xxx
    set bits(29) dac
    set bits(28) pwr
    set bits(27) bkp
    set bits(26) xxx
    set bits(25) can
    set bits(24) xxx
    set bits(23) usb
    set bits(22) i2c2
    set bits(21) i2c1
    set bits(20) uart5
    set bits(19) uart4
    set bits(18) uart3
    set bits(17) uart2
    set bits(16) xxx
    set bits(15) spi3
    set bits(14) spi2
    set bits(13) xxx
    set bits(12) xxx
    set bits(11) wwdg
    set bits(10) xxx
    set bits(9) xxx
    set bits(8) xxx
    set bits(7) xxx
    set bits(6) xxx
    set bits(5) tim7
    set bits(4) tim6
    set bits(3) tim5
    set bits(2) tim4
    set bits(1) tim3
    set bits(0) tim2
    show_mmr32_bits bits $val

}

proc show_RCC_AHBENR   { } {
    if [ catch { set val [ show_mmr32_reg RCC_AHBENR  ] } msg ] {
	error $msg
    }
    set bits(31) xxx
    set bits(30) xxx
    set bits(29) xxx
    set bits(28) xxx
    set bits(27) xxx
    set bits(26) xxx
    set bits(25) xxx
    set bits(24) xxx
    set bits(23) xxx
    set bits(22) xxx
    set bits(21) xxx
    set bits(20) xxx
    set bits(19) xxx
    set bits(18) xxx
    set bits(17) xxx
    set bits(16) xxx
    set bits(15) xxx
    set bits(14) xxx
    set bits(13) xxx
    set bits(12) xxx
    set bits(11) xxx
    set bits(10) sdio
    set bits(9) xxx
    set bits(8) fsmc
    set bits(7) xxx
    set bits(6) crce
    set bits(5) xxx
    set bits(4) flitf
    set bits(3) xxx
    set bits(2) sram
    set bits(1) dma2
    set bits(0) dma1
    show_mmr32_bits bits $val
}

proc show_RCC_APB2ENR  { } {
    if [ catch { set val [ show_mmr32_reg RCC_APB2ENR ] } msg ] {
	error $msg
    }
    set bits(31) xxx
    set bits(30) xxx
    set bits(29) xxx
    set bits(28) xxx
    set bits(27) xxx
    set bits(26) xxx
    set bits(25) xxx
    set bits(24) xxx
    set bits(23) xxx
    set bits(22) xxx
    set bits(21) xxx
    set bits(20) xxx
    set bits(19) xxx
    set bits(18) xxx
    set bits(17) xxx
    set bits(16) xxx
    set bits(15) adc3
    set bits(14) usart1
    set bits(13) tim8
    set bits(12) spi1
    set bits(11) tim1
    set bits(10) adc2
    set bits(9) adc1
    set bits(8) iopg
    set bits(7) iopf
    set bits(6) iope
    set bits(5) iopd
    set bits(4) iopc
    set bits(3) iopb
    set bits(2) iopa
    set bits(1) xxx
    set bits(0) afio
    show_mmr32_bits bits $val

}

proc show_RCC_APB1ENR  { } {
    if [ catch { set val [ show_mmr32_reg RCC_APB1ENR ] } msg ] {
	error $msg
    }
    set bits(31) xxx
    set bits(30) xxx
    set bits(29) dac
    set bits(28) pwr
    set bits(27) bkp
    set bits(26) xxx
    set bits(25) can
    set bits(24) xxx
    set bits(23) usb
    set bits(22) i2c2
    set bits(21) i2c1
    set bits(20) usart5
    set bits(19) usart4
    set bits(18) usart3
    set bits(17) usart2
    set bits(16) xxx
    set bits(15) spi3
    set bits(14) spi2
    set bits(13) xxx
    set bits(12) xxx
    set bits(11) wwdg
    set bits(10) xxx
    set bits(9) xxx
    set bits(8) xxx
    set bits(7) xxx
    set bits(6) xxx
    set bits(5) tim7
    set bits(4) tim6
    set bits(3) tim5
    set bits(2) tim4
    set bits(1) tim3
    set bits(0) tim2
    show_mmr32_bits bits $val
}

proc show_RCC_BDCR     { } {
    if [ catch { set val [ show_mmr32_reg RCC_BDCR    ] } msg ] {
	error $msg
    }
    for { set x 0 } { $x < 32 } { incr x } {
	set bits($x) xxx
    }
    set bits(0) lseon
    set bits(1) lserdy
    set bits(2) lsebyp
    set bits(8) rtcsel0
    set bits(9) rtcsel1
    set bits(15) rtcen
    set bits(16) bdrst
    show_mmr32_bits bits $val
}

proc show_RCC_CSR      { } {
    if [ catch { set val [ show_mmr32_reg RCC_CSR     ] } msg ] {
	error $msg
    }
    for { set x 0 } { $x < 32 } { incr x } {
	set bits($x) xxx
    }
    set bits(0) lsion
    set bits(1) lsirdy
    set bits(24) rmvf
    set bits(26) pin
    set bits(27) por
    set bits(28) sft
    set bits(29) iwdg
    set bits(30) wwdg
    set bits(31) lpwr
    show_mmr32_bits bits $val
}

proc show_RCC { } {

    show_RCC_CR
    show_RCC_CFGR
    show_RCC_CIR
    show_RCC_APB2RSTR
    show_RCC_APB1RSTR
    show_RCC_AHBENR
    show_RCC_APB2ENR
    show_RCC_APB1ENR
    show_RCC_BDCR
    show_RCC_CSR
}
