SoC FPGA Linux Kernel 버전 2018년 6월 4.17 이상, 4.18 이상:
- 인텔® Stratix® 10 SX의 최상위 참조 클럭 주파수만 Linux 장치 트리에 지정되어 있습니다.
- 인텔® Quartus® Prime Pro 플랫폼 디자이너 설계의 Stratix 10 HPS 구성 요소에 설정된 클럭 트리 설정은 클럭 관리자 드라이버가 FPGA 비트스트림에서 로드합니다.
SoC FPGA Linux Kernel 버전 4.17(2018년 6월 이전) 이전의 경우:
Linux Device Tree는 인텔® Stratix® 10 SX의 전체 클럭 구조에 대한 정보를 포함하고 있으며, 인텔® Quartus® Prime Pro 플랫폼 디자이너 디자인의 Stratix 10 HPS 구성 요소의 클럭 설정을 반영해야 합니다.
보드와 디자인을 반영하도록 클럭 구조가 업데이트되지 않은 경우, 주변 장치는 Linux에서 잘못 작동할 수 있습니다.
Linux 커널에는 인텔 Stratix 10 SX 개발 키트에 대한 일반 최상위 장치 트리와 예제 장치 트리가 포함되어 있습니다.
arch/arm64/boot/dts/altera/
socfpga_stratix10.dtsi #Generic 최상위 장치 트리
인텔 Stratix 10 SX 개발 키트의 Socfpga_stratix10_socdk.dts # 예제 장치 트리, 골든 하드웨어 참조 설계(GHRD), 골든 소프트웨어 참조 설계(GSRD)
참고:
- 골든 하드웨어 참조 설계(GHRD)는 예시/하드웨어/폴더에 인텔 FPGA SoC EDS와 함께 배송됩니다.
- 골든 소프트웨어 참조 디자인(GSRD)은 Rocketboards.org https://rocketboards.org/foswiki/Documentation/GSRD 다운로드할 수 있습니다.
이 문제는 이후 커널 버전(5.X)에서 해결되었습니다.
SoC FPGA Linux Kernel 버전 2018년 6월 4.17 이상, 4.18 이상:
인텔® Stratix® 10 SX의 최상위 참조 클럭 주파수만 Linux 장치 트리에 지정되어 있습니다.
clkmgr@ffd10000 {
클럭 {
osc1 { 클럭 주파수 = ; };
};
};
SoC FPGA Linux Kernel 버전 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 세트에는 noc_clk 의해 구동되지만 noc_clk 및 noc_free_clk 정의된 드라이버가 없는 l4_sp_clock 클럭이 설정됩니다.
:
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 커널 문서를 참조하십시오.