由于两种不同问题,英特尔® Stratix® 10 SoC FPGA 硬核处理器系统 (HPS) 设备上的 UART、I2C 和 SPI IP 在旧内核版本上可能会以错误的速度运行。
SoC FPGA Linux 内核 4.17 及更高版本(2018 年 6 月之后),使用非默认 MPU 时钟频率:固定和补丁上传到 https://github.com/altera-opensource/linux-socfpga 提交 23d4f7b2c6000e095399a6266ef35c213f93649e
- 在 SoC FPGA Linux 4.17 内核和更高版本中,Stratix 10 时钟管理器驱动程序从FPGA比特流中提取时钟信息。只有参考时钟频率在设备树中指定。
- 一个问题导致,如果 MPU 频率设置为非默认值,则某些频率可能不正确。
SoC FPGA Linux 内核 4.17,2018 年 6 月和 4.16 及更早版本:
- Linux 设备树包含有关 英特尔® Stratix® 10 SoC FPGA 硬核处理器系统 (HPS) 的时钟结构的信息。它必须反映英特尔® Quartus® Prime Pro Platform Designer 系统中的硬核处理器系统英特尔 Stratix 10 FPGA IP 中的时钟设置。 如果时钟结构未更新以反映您的主板和设计,外围设备可能会在 Linux 中操作不正确。 典型的问题在于 UART 或 I2C 接口在 u-boot 中工作,但它们在 Linux 中不起作用。
- 一个问题导致,如果 MPU 频率设置为非默认值,则某些频率可能不正确(下面的变通办法)
此问题已针对较新的内核版本修复。时钟信息可从FPGA配置比特流和更新的时钟驱动程序中读取。
使用非默认 MPU 时钟频率的 SoC FPGA Linux 内核 4.17 和更高版本(2018 年 6 月之后)
- 此问题适用于 https://github.com/altera-opensource/linux-socfpga 上 4.18 内核,其中提交 23d4f7b2c6000e095399a6266ef35c213f93649e
- 0002_clk-pll-s10_L3L4clockFrequencyFix_1.patch 也可使用补丁来解决此问题
另请参阅 相关 KDB:当我使用f2s_free_clock作为 HPS 参考时钟时,Linux 为何无法在英特尔® Stratix® 10 SoC 上启动?
Soc FPGA Linux 内核 4.17 预预 2018 年 6 月和 4.16 及更早:
请参阅 如何更新Stratix 10 SX 的 Linux 设备树以与 Platform Designer 中的时钟设置相匹配? 了解有关如何更新 Linux 设备树以反映设计中的时钟设置的信息。
如果使用非默认 MPU 时钟频率,则要解决数学错误
- 在设备树中手动设置 L3、L4 L4 慢速时钟频率
○ 保留用逻辑来描述 PLL 的
○ 从 L3 分压器覆盖时钟
l3_main_free_clk:l3_main_free_clk {
#clock蜂窝 = ;
#compatible = “altr,socfPGA-s10-perip-clk”;
#clocks = ;
#fixed除法器 = ;
时钟频率 = ;
兼容 = “固定时钟”
};
l4_sys_free_clk:l4_sys_free_clk {
#clock蜂窝 = ;
#compatible = “altr,socfPGA-s10-perip-clk”;
#clocks = ;
#fixed分压器 = ;
时钟频率 = ;
兼容 = “固定时钟”
};
l4_main_clk:l4_main_clk {
#clock蜂窝 = ;
#compatible = “altr,socfpga-s10-gate-clk”;
#clocks = ;
时钟频率 = ;
兼容 = “固定时钟”;
#div-reg = ;
#clk栅极 = ;
};
l4_mp_clk:l4_mp_clk {
#clock蜂窝 = ;
#compatible = “altr,socfpga-s10-gate-clk”;
#clocks = ;
时钟频率 = ;
兼容 = “固定时钟”;
#div-reg= ;
#clk门 = ;
};
l4_sp_clk:l4_sp_clk {
#clock蜂窝 = ;
#compatible = “altr,socfpga-s10-gate-clk”;
#clocks = ;
时钟频率 = ;
兼容 = “固定时钟”;
#div-reg= ;
#clk栅极 = ;
};