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;
}
是为记。