SoC FPGA Linux 内核版本 4.17 2018 年 6 月和更高版本,以及 4.18 及更高版本:
- Linux 设备树中仅指定了英特尔® Stratix® 10 SX 的顶级参考时钟频率。
- 时钟管理器驱动程序从FPGA比特流中加载英特尔® Quartus® Prime Pro Platform Designer 设计中的Stratix 10 HPS 组件上的时钟树设置。
对于 SoC FPGA Linux 内核版本 4.17(2018 年 6 月之前)和更早的版本:
Linux 设备树包含有关 英特尔® Stratix® 10 SX 的完整时钟结构的信息,并且必须在英特尔® Quartus® Prime Pro Platform Designer 设计中反映Stratix 10 HPS 组件中的时钟设置。
如果时钟结构未更新以反映您的主板和设计,外围设备可能会在 Linux 中操作不正确。
Linux 内核包含一个通用顶级设备树和 英特尔 Stratix 10 SX 开发套件的示例设备树:
arch/arm64/boot/dts/altera/
socfpga_stratix10.dtsi #Generic顶级设备树
英特尔 Stratix 10 SX 开发套件、黄金硬件参考设计 (GHRD) 和黄金软件参考设计 (GSRD) 的 Socfpga_stratix10_socdk.dts # 示例器件树
注意:
- 黄金硬件参考设计 (GHRD) 随示例/硬件/文件夹中的英特尔 FPGA SoC EDS 一同发货
- 黄金软件参考设计 (GSRD) 可从 Rocketboards.org https://rocketboards.org/foswiki/Documentation/GSRD 下载
此问题已在以后的内核版本 (5.X) 中修复
SoC FPGA Linux 内核版本 4.17 2018 年 6 月和更高版本,以及 4.18 及更高版本:
在 Linux 设备树中仅指定了英特尔® Stratix® 10 SX 的顶级参考时钟频率。
clkmgr@ffd10000 {
时钟 {
osc1 { 时钟频率 = ; };
};
};
对于 SoC FPGA Linux 内核版本 4.17(2018 年 6 月之前)和更早的版本:
socfpga_stratix10.dtsi 显示每个时钟树组件的可能设置。
peri_emacb_clk:peri_emacb_clk@ec {
#clock蜂窝 = ;
兼容 = “altr,socfPGA-s10-perip-clk”;
时钟 = , , , , ;
reg = ;
};
以下是树的一部分,显示提供 UART 和 I2C 的时钟。 请注意,默认设置 IP 的源时钟,但未设置与树的连接。 IP 设置有时钟需要l4_sp_clock,这由noc_clk驱动,但noc_clk和noc_free_clk没有定义的驱动程序:
:
main_noc_base_clk:main_noc_base_clk {
...
时钟 = ;
...
};
noc_free_clk:noc_free_clk@4c {
...
时钟 = , ,
, ,
;
...
};
noc_clk:noc_clk@30 {
...
时钟 = , ;
...
};
l4_sp_clk:l4_sp_clk {
...
时钟 = ;
...
};
i2c1:i2c@ffc02900 {
...
时钟 = ;
...
};
uart0:serial0@ffc02000 {
...
时钟 = ;
...
};
所需的设置可通过适用于您的主板的 .dts 文件使用以下语法应用:
soc {
clkmgr@ffd10000 {
时钟 {
osc1 {
时钟频率 = ;
};
periph_pll@e4 {
peri_emaca_clk@e8{
时钟 = ;
};
peri_emacb_clk@ec {
时钟 = ;
};
};
noc_free_clk@4c {
时钟 = ;
};
noc_clk@30 {
时钟 = ;
};
emaca_free_clk {
时钟 = ;
};
emacb_free_clk {
时钟 = ;
};
emac0_clk {
时钟 = ;
};
emac1_clk {
时钟 = ;
};
emac2_clk{
时钟 = ;
};
};
};
};
};
上述方法解决了 UART/I2C 的问题,并定义了部分以太网时钟。 现在,时钟树已从 UART / I2C 完成,直至主 PLL。。 这意味着基于源时钟频率设置 UART 和 I2C 的逻辑可以进行正确的计算。
有关设备树的更多信息,请参阅 Linux 内核文档。