SoC FPGA Linux Kernel Versiones 4.17 de junio del 2018 y posteriores, y 4.18 y posteriores:
- Solo se especifican las frecuencias de reloj de referencia de nivel superior para el Intel® Stratix® 10 SX en el árbol de dispositivos de Linux.
- El controlador del administrador de relojes carga la configuración del árbol de reloj establecida en el componente Stratix 10 HPS en el diseño de la Intel® Quartus® Prime Pro Platform Designer desde el FPGA bitstream.
Para SoC FPGA Linux Kernel versión 4.17 (antes de junio del 2018) y anteriores:
El árbol de dispositivos de Linux contiene información sobre la estructura de temporación completa del Intel® Stratix® 10 SX y debe reflejar la configuración del reloj en el componente Stratix 10 HPS en el diseño de la herramienta de diseño de plataformas Intel® Quartus® Prime Pro.
Si la estructura de temporizado no se actualiza para reflejar su placa y diseño, los periféricos pueden funcionar incorrectamente en Linux.
El kernel de Linux contiene un árbol de dispositivos genérico de nivel superior y un árbol de dispositivos de ejemplo para el kit de desarrollo Intel Stratix 10 SX:
arch/arm64/boot/dts/altera/
socfpga_stratix10.dtsi #Generic árbol de dispositivos de nivel superior
Socfpga_stratix10_socdk.dts # Ejemplo del árbol de dispositivos para el kit de desarrollo Intel Stratix 10 SX, Golden Hardware Reference Design (GHRD) y Golden Software Reference Design (GSRD)
Nota:
- El Diseño de referencia de hardware Golden (GHRD) se envía con Intel FPGA SoC EDS en la carpeta examples/hardware/folder
- El Diseño de referencia de software Golden (GSRD) se puede descargar de Rocketboards.org https://rocketboards.org/foswiki/Documentation/GSRD
Este problema se corrigió en versiones posteriores del kernel (5.X)
SoC FPGA Linux Kernel Versiones 4.17 de junio del 2018 y posteriores, y 4.18 y posteriores:
Solo se especifican las frecuencias de reloj de referencia de nivel superior para el Intel® Stratix® 10 SX en el árbol de dispositivos de Linux.
clkmgr@ffd10000 {
relojes {
1 { frecuencia de reloj = ; };
};
};
Para SoC FPGA Linux Kernel versión 4.17 (antes de junio del 2018) y anteriores:
El socfpga_stratix10.dtsi muestra la posible configuración de cada componente del árbol de reloj.
peri_emacb_clk: peri_emacb_clk@ec {
#clock-cells = ;
compatible = "altr,socfpga-s10-perip-clk";
relojes = , , , , ;
reg = ;
};
A continuación, se muestra una parte del árbol que muestra el reloj que proporciona el UART y el I2C. Tenga en cuenta que, de forma predeterminada, se establecen los relojes de origen para la PI, pero su conexión con el árbol no está establecida. La PI establece que hay relojes que se l4_sp_clock, que es impulsado por noc_clk, pero noc_clk y noc_free_clk no tienen un controlador definido:
:
main_noc_base_clk: main_noc_base_clk {
...
relojes = ;
...
};
noc_free_clk: noc_free_clk@4c {
...
relojes = , ,
>, ,
;
...
};
noc_clk: noc_clk@30 {
...
relojes = , ;
...
};
l4_sp_clk: l4_sp_clk {
...
relojes = ;
...
};
i2c1: i2c@ffc02900 {
...
relojes = ;
...
};
uart0: serial0@ffc02000 {
...
relojes = ;
...
};
La configuración requerida se puede aplicar a través del archivo .dts para su placa utilizando la sintaxis que se muestra a continuación:
soc {
clkmgr@ffd10000 {
relojes {
1 {
frecuencia de reloj = ;
};
periph_pll@e4 {
peri_emaca_clk@e8{
relojes = ;
};
peri_emacb_clk@ec {
relojes = ;
};
};
noc_free_clk@4c {
relojes = ;
};
noc_clk@30 {
relojes = ;
};
emaca_free_clk {
relojes = ;
};
emacb_free_clk {
relojes = ;
};
emac0_clk {
relojes = ;
};
emac1_clk {
relojes = ;
};
emac2_clk{
relojes = ;
};
};
};
};
};
Lo anterior corrige el problema para UART/I2C y también define algunos relojes Ethernet. El árbol de reloj ahora está completo desde UART/I2C hasta el PLL principal. Esto significa que la lógica que configura el UART y el I2C basado en la frecuencia del reloj de origen puede hacer el cálculo adecuado.
Para obtener más información sobre el Árbol de dispositivos, consulte la documentación del kernel de Linux.