ID del artículo: 000086392 Tipo de contenido: Resolución de problemas Última revisión: 31/03/2023

¿Por qué se ejecuta el periférico Intel® Stratix® 10 HPS UART / I2C / SPI a la velocidad incorrecta o no funciona en Linux?

Entorno

  • Intel® Quartus® Prime Pro Edition
  • Linux-socfpga 4.X

    BUILT IN - ARTICLE INTRO SECOND COMPONENT
    Descripción

    Debido a dos problemas diferentes, UART, I2C y SPI IP en Intel® Stratix® 10 dispositivos soC FPGA sistema de procesador físico (HPS) pueden ejecutarse a la velocidad incorrecta en las versiones anteriores de Kernel.

    SoC FPGA Linux Kernels 4.17 y posteriores (posteriores a junio del 2018) cuando se utiliza una frecuencia de reloj de MPU no predeterminada: Fijo y parche cargado en https://github.com/altera-opensource/linux-socfpga commit 23d4f7b2c6000e095399a6266ef35c213f93649e

    • En SoC FPGA Linux 4.17 Kernels y versiones posteriores, el controlador Stratix 10 Clock Manager extrae la información de temporación de FPGA bitstream. Solo se especifican las frecuencias de reloj de referencia en el árbol de dispositivos.
    • Debido a un problema, algunas frecuencias pueden ser incorrectas si la frecuencia MPU se establece en un valor no predeterminado.

    SoC FPGA los kernels de Linux 4.17 anteriores a junio del 2018, 4.16 y anteriores:

    • El árbol de dispositivos de Linux contiene información sobre la estructura de temporación del Intel® Stratix® 10 SoC FPGA sistema de procesadores de disco duro (HPS). Debe reflejar la configuración del reloj en el sistema de procesador físico Intel Stratix 10 FPGA IP en el sistema 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.  Los problemas típicos son interfaces UART o I2C que funcionan en u-boot, pero que no funcionan en Linux.
    • Debido a un problema, algunas frecuencias pueden ser incorrectas si la frecuencia de MPU se establece en un valor no predeterminado (solución alternativa a continuación)

    Se corrigió este problema para las versiones más recientes del kernel. La información de reloj se lee de FPGA bitstream de configuración y de un controlador de reloj actualizado.

    Resolución

    SoC FPGA Linux Kernels 4.17 y posteriores (posteriores a junio del 2018) cuando se utiliza una frecuencia de reloj de MPU no predeterminada

    • Este problema se corrigió para el kernel 4.18 en https://github.com/altera-opensource/linux-socfpga con la confirmación de 23d4f7b2c6000e095399a6266ef35c213f93649e
    • También hay un parche disponible para solucionar este problema 0002_clk-pll-s10_L3L4clockFrequencyFix_1.patch

    Además, consulte el KDB relacionado: ¿Por qué Linux no arranca en mi Intel® Stratix® soC 10 cuando uso el f2s_free_clock como reloj de referencia de HPS?

     

    Soc FPGA Linux Kernels 4.17 antes de junio del 2018 y 4.16 y anteriores:

    Consulte ¿Cómo puedo actualizar el árbol de dispositivos de Linux para que Stratix 10 SX coincida con la configuración de reloj en la herramienta de diseño de plataformas? Para obtener información sobre cómo actualizar el árbol de dispositivos Linux para reflejar la configuración de temporización en su diseño.

    Para solucionar el error matemático si se utiliza la frecuencia de reloj MPU no predeterminada

    - Establecer manualmente frecuencias de reloj lento L3,L4 L4 en el árbol de dispositivos

    ○ Deje la lógica para describir el PLL

    ○ Sobrescribir los relojes del divisor L3

     

    l3_main_free_clk: l3_main_free_clk {

    #clock-cells = ;

    #compatible = "altr,socfpga-s10-perip-clk";

    #clocks = ;

    #fixed-divisor = ;

    frecuencia de reloj = ;

    compatible = "reloj fijo"

                        

    };

     

    l4_sys_free_clk: l4_sys_free_clk {

    #clock-cells = ;

    #compatible = "altr,socfpga-s10-perip-clk";

    #clocks = ;

    #fixed-divisor = ;

    frecuencia de reloj = ;

    compatible = "reloj fijo"

    };

     

    l4_main_clk: l4_main_clk {

    #clock-cells = ;

    #compatible = "altr,socfpga-s10-gate-clk";

    #clocks = ;

    frecuencia de reloj = ;

    compatible = "reloj fijo";

    #div-reg = ;

    #clk-gate = ;

    };

     

    l4_mp_clk: l4_mp_clk {

    #clock-cells = ;

    #compatible = "altr,socfpga-s10-gate-clk";

    #clocks = ;

    frecuencia de reloj = ;

    compatible = "reloj fijo";

    #div-reg= ;

    #clk-gate = ;

    };

     

    l4_sp_clk: l4_sp_clk {

    #clock-cells = ;

    #compatible = "altr,socfpga-s10-gate-clk";

    #clocks = ;

    frecuencia de reloj = ;

    compatible = "reloj fijo";

    #div-reg= ;

    #clk-gate = ;

    };

    Productos relacionados

    Este artículo se aplica a 1 productos

    Mostrar todo

    El contenido de esta página es una combinación de la traducción humana y automática del contenido original en inglés. Este contenido se ofrece únicamente para su comodidad como información general y no debe considerarse completa o precisa. Si hay alguna contradicción entre la versión en inglés de esta página y la traducción, prevalecerá la versión en inglés. Consulte la versión en inglés de esta página.