En raison de deux problèmes différents, les périphériques UART, I2C et SPI IP sur les périphériques Intel® Stratix® 10 SoC FPGA de processeur dur (HPS) peuvent fonctionner à une vitesse incorrecte sur les versions plus anciennes du noyau.
SoC FPGA noyaux Linux 4.17 et ultérieures (après juin 2018) lorsqu’une fréquence d’horloge MPU non par défaut est utilisée : correctif et correctif téléchargé pour https://github.com/altera-opensource/linux-socfpga valider 23d4f7b2c6000e095399a6266ef35c213f93649e
- Dans la SoC FPGA les noyaux Linux 4.17 et les versions ultérieures, le pilote Stratix 10 Clock Manager extraie les informations d’horloge du flux binaire FPGA. Seules les fréquences d’horloge de référence sont spécifiées dans l’arbre des périphériques.
- En raison d’un problème, certaines fréquences peuvent être incorrectes si la fréquence du MPU est définie sur une valeur non par défaut.
SoC FPGA noyaux Linux 4.17 avant juin 2018, 4.16 et antérieurs :
- L’arbre de périphérique Linux contient des informations sur la structure d’horloge du système de processeur dur (HPS) Intel® Stratix® 10 SoC FPGA. Il doit refléter la configuration de l’horloge dans le système de processeur dur Intel Stratix l’IP de 10 FPGA dans le système Intel® Quartus® Prime Pro Platform Designer. Si la structure d’horloge n’est pas mise à jour pour refléter votre carte et votre conception, les périphériques peuvent fonctionner de manière incorrecte sous Linux. Les problèmes typiques sont les interfaces UART ou I2C fonctionnant en u-boot mais qui ne fonctionnent pas sous Linux.
- En raison d’un problème, certaines fréquences peuvent être incorrectes si la fréquence du MPU est définie sur une valeur non par défaut (solution de contournement ci-dessous)
Ce problème a été résolu pour les nouvelles versions du noyau. Les informations relatives à l’horloge sont lues à partir du bitstream de la configuration FPGA et par un pilote d’horloge mis à jour.
SoC FPGA noyaux Linux 4.17 et ultérieures (après juin 2018) lorsqu’une fréquence d’horloge MPU non par défaut est utilisée
- Ce problème est résolu pour le noyau 4.18 sur https://github.com/altera-opensource/linux-socfpga avec validation 23d4f7b2c6000e095399a6266ef35c213f93649e
- Un correctif est également disponible pour contourner ce problème 0002_clk-pll-s10_L3L4clockFrequencyFix_1.patch
Également, voir KDB connexe : Pourquoi Linux ne démarre-t-il pas sur mon Intel® Stratix® 10 SoC lorsque j’utilise le f2s_free_clock comme horloge de référence HPS ?
Soc FPGA noyaux Linux 4.17 avant juin 2018 et 4.16 et antérieurs :
Voir Comment mettre à jour l’arbre de périphériques Linux pour Stratix 10 SX pour correspondre aux paramètres d’horloge de Platform Designer ? Pour obtenir des informations sur la façon de mettre à jour l’arbre des périphériques Linux pour refléter les paramètres d’horloge de votre conception.
Pour contourner l’erreur de calcul si la fréquence d’horloge du MPU non par défaut est utilisée
- Définir manuellement les fréquences d’horloge lentes L3,L4 L4 dans l’arbre des périphériques
𘕛 Laissez la logique décrire les
𘕛 remplacer les horloges du diviseur L3
l3_main_free_clk : l3_main_free_clk {
cellules #clock = ;
#compatible = « altr,socfpga-s10-perip-clk » ;
#clocks = ;
diviseur #fixed = ;
fréquence d’horloge = ;
compatible = « horloge fixe »
};
l4_sys_free_clk : l4_sys_free_clk {
cellules #clock = ;
#compatible = « altr,socfpga-s10-perip-clk » ;
#clocks = ;
diviseur #fixed = ;
fréquence d’horloge = ;
compatible = « horloge fixe »
};
l4_main_clk : l4_main_clk {
cellules #clock = ;
#compatible = « altr, socfpga-s10-gate-clk » ;
#clocks = < et noc_clk> ;
fréquence d’horloge = ;
compatible = « horloge fixe » ;
#div-reg = ;
#clk-gate = ;
};
l4_mp_clk : l4_mp_clk {
cellules #clock = ;
#compatible = « altr, socfpga-s10-gate-clk » ;
#clocks = < et noc_clk> ;
fréquence d’horloge = ;
compatible = « horloge fixe » ;
#div-reg= ;
#clk-gate = ;
};
l4_sp_clk : l4_sp_clk {
cellules #clock = ;
#compatible = « altr, socfpga-s10-gate-clk » ;
#clocks = < et noc_clk> ;
fréquence d’horloge = ;
compatible = « horloge fixe » ;
#div-reg= ;
#clk-gate = ;
};