procixx 时钟的坑

error

1.procixx设置800M,uboot中是720M

了解到整个过程是,当procixx配置后,通过FSBL中的ps_init.c反应出来

    // ARM_PLL_FDIV = 48
    // [22:16]
    EMIT_MASKWRITE(SLCR_REG_BASE + 0x100, 0x007f0000U, 0x00300000U),
    // ARM_PLL_CLKOUT0_DIVISOR = 2
    // [6:0]
    EMIT_MASKWRITE(SLCR_REG_BASE + 0x104, 0x0000007fU, 0x00000002U),

因为在procixx中设置的输入频率为33.3333M

33.3333/2*48=799.999

为什么在uboot中 clk dump得到的是720M呢

因为虽然procixx中设置了,但是我fmxx_nb1708_defconfig中使用的是fmxx-ql7010.dts

fmxx-ql7010.dts又包含了fmxx-psoc.dtsi

fmxx-psoc.dtsi中重新将clk设置为30000000

        slcr: slcr@e0026000 {
            u-boot,dm-pre-reloc;
            #address-cells = <1>;
            #size-cells = <1>;
            compatible = "fmxx,psoc-slcr", "syscon", "simple-mfd";
            reg = <0xE0026000 0x1000>;
            ranges;

            clkc: clkc@100 {
                u-boot,dm-pre-reloc;
                compatible = "fmxx,psoc-clkc";
                reg = <0x100 0x100>;
                #clock-cells = <1>;
                ps-clk-frequency = <30000000>; 

30/2*48=720

解决办法就是,使用fmxx-ql7010-ai.dts,里面有对ps-clk-frequency的定义

&clkc {
    ps-clk-frequency = <33333333>;
};

另/home/zhangyi/work/psoc_linux/u-boot-2018.07-fmxx-idyll/board/fmxx/fmql/Makefile

obj-y    += board.o
#obj-y    += ps_init_zb1.o
#obj-y    += ps_init_zb2.o
#obj-y    += ps_init_zb3.o
#obj-y    += ps_init_zb4.o
#obj-y    += ps_init_ai_demo.o
如果将全部都注释掉,那么在board.c中需要将ps_init();注释掉,因为其定义在ps_init_zbx中。

int board_early_init_f(void)
{
    //ps_init();
#ifdef CONFIG_DEBUG_UART
    debug_uart_init();
#endif

    clocks_init();
    return 0;
}

是为记。

原文地址:https://www.cnblogs.com/idyllcheung/p/11244201.html