SoC FPGA Linux Kernel versões 4.17 de junho de 2018 e mais recente, e 4.18 e mais recente:
- Apenas as frequências de clock de referência de nível superior para o Intel® Stratix® 10 SX são especificadas na Árvore de Dispositivos Linux.
- A configuração da árvore de clock conforme definida no componente Stratix 10 HPS no design da plataforma Intel® Quartus® Prime Pro Designer é carregada a partir do fluxo FPGA bitstream pelo driver do Gerenciador de Clock.
Para SoC FPGA Linux Kernel versão 4.17 (pré-junho de 2018) e anterior:
A Árvore de dispositivos Linux contém informações sobre a estrutura completa de clocking do Intel® Stratix® 10 SX e deve refletir a configuração do clock no componente de HPS Stratix 10 no design de designer de plataformas Intel® Quartus® Prime Pro.
Se a estrutura de clocking não for atualizada para refletir sua placa e seu design, os periféricos podem operar incorretamente no Linux.
O kernel Linux contém uma árvore de dispositivos genérica de alto nível e uma árvore de dispositivos de exemplo para o kit de desenvolvimento Intel Stratix 10 SX:
arch/arm64/boot/dts/altera/
socfpga_stratix10.dtsi #Generic árvore de dispositivos de alto nível
Socfpga_stratix10_socdk.dts # Árvore de dispositivos de exemplo para o kit de desenvolvimento Intel Stratix 10 SX, Design de referência de hardware dourado (GHRD) e Design de referência de software dourado (GSRD)
Nota:
- O Design de referência de hardware dourado (GHRD) é enviado com Intel FPGA SoC EDS nos exemplos/hardware/pasta
- O Design de referência de software dourado (GSRD) pode ser baixado Rocketboards.org https://rocketboards.org/foswiki/Documentation/GSRD
Este problema foi corrigido em versões mais recentes do kernel (5.X)
SoC FPGA Linux Kernel versões 4.17 de junho de 2018 e mais recente, e 4.18 e mais recente:
Apenas as frequências de clock de referência de nível superior para o Intel® Stratix® 10 SX são especificadas na Árvore de Dispositivos Linux.
clkmgr@ffd10000 {
clocks {
osc1 { frequência do clock = ; };
};
};
Para SoC FPGA Linux Kernel versão 4.17 (antes de junho de 2018) e anterior:
O socfpga_stratix10.dtsi mostra as configurações possíveis para cada componente da árvore de clock.
peri_emacb_clk: peri_emacb_clk@ec {
#clock-células = ;
compatível = "altr,socfpga-s10-perip-clk";
clocks = , , , , ;
reg = ;
};
Abaixo está parte da árvore mostrando o clock que fornece o UART e o I2C. Observe que, por padrão, os clocks de origem para o IP estão definidos, mas sua conexão na árvore não está definida. O conjunto de IP que há de l4_sp_clock, que é impulsionado por noc_clk, mas noc_clk e noc_free_clk não tem um driver definido:
:
main_noc_base_clk: main_noc_base_clk {
...
clocks = < e main_pll>;
...
};
noc_free_clk: noc_free_clk@4c {
...
clocks = , ,
, ,
< e f2s_free_clk>;
...
};
noc_clk: noc_clk@30 {
...
clocks = , < e boot_clk>;
...
};
l4_sp_clk: l4_sp_clk {
...
clocks = < e noc_clk>;
...
};
i2c1: i2c@ffc02900 {
...
clocks = < e l4_sp_clk>;
...
};
uart0: serial0@ffc02000 {
...
clocks = < e l4_sp_clk>;
...
};
As configurações necessárias podem ser aplicadas através do arquivo .dts para sua placa usando a sintaxe mostrada abaixo:
soc {
clkmgr@ffd10000 {
clocks {
osc1 {
frequência do clock = ;
};
periph_pll@e4 {
peri_emaca_clk@e8{
clocks = < e periph_pll>;
};
peri_emacb_clk@ec {
clocks = < e periph_pll>;
};
};
noc_free_clk@4c {
clocks = < e main_noc_base_clk>;
};
noc_clk@30 {
clocks = < e noc_free_clk>;
};
emaca_free_clk {
clocks = < e peri_emaca_clk>;
};
emacb_free_clk {
clocks = ;
};
emac0_clk {
clocks = ;
};
emac1_clk {
clocks = ;
};
emac2_clk{
clocks = ;
};
};
};
};
};
O acima corrije o problema para o UART/I2C e também define alguns clocks Ethernet. A árvore do clock agora está completa desde UART/I2C até o PLL principal.. Isso significa que a lógica que configura o UART e o I2C com base na frequência do clock de origem pode fazer o cálculo certo.
Para obter mais informações sobre a Árvore de Dispositivos, consulte a documentação do Linux Kernel.