This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

Setting AM3715 clock using 13 MHz crystal

Other Parts Discussed in Thread: AM3715

Hi, I have a problem setting clock on a new board using AM3715 CPU for x-loader. The evaluation board (Mistral OMAP EVM MAIN BOARD REV G) works fine. It uses a 26 MHz crystal . My new board uses 13 MHz crystal. I found that the clock initialization starts with the crystal clock measurement and setting appropriate index to PRM_CLKSEL 0x48306d40. The PLL3 and PLL4 setting values are exactly the same for either 26 MHz or 13 MHz. The platform.S file contains different values for different crystal clocks, but all clocks use the same values. I measured different clocks connecting them internally sys_clkout2. Following my measurements:

Mistral board:

CORE_CLOCK 400 MHz

SYS_CLOCK (Crystal) 26 MHz

96M 96 MHz

56M 56 MHz

New Board

CORE_CLOCK 200 MHz

SYS_CLOCK (Crystal) 13 MHz

96M 2 MHz

56M none

I modified PRM_CLKSRC_CTRL 0x48307270 value writing 0x41 instead of 0x141 on a new board. That stops dividing the input clock by 6.5 I got following results CORE_CLOCK 200 MHz

SYS_CLOCK (Crystal) 13 MHz

96M 48 MHz

56M 28 MHz

I tried to modify values of M and N for PLL4 (before I removed 6.5 times divider) that didn’t provide change I expected. Something is wrong with my understanding.

 

According to what I see from documents writing 0x181 to PRM_CLKSEL causes 26 MHz divided 13 to yield 2 MHz. For 13 MHz dividing 6.5 provides the same 2 MHz. But by some reason the PLLs are not locked. What happens?

Why providing 13 MHz causes 96M and 56M twice lower then 26/13 = 2MHz?


  • In the x-loader board/omap3evm.c file I found the following comment:

        /* If the input clock is greater than 19.2M always divide/2 */
        /*
         * On OMAP3630, DDR data corruption has been observed on OFF mode
         * exit if the sys clock was lower than 26M. As a work around,
         * OMAP3630 is operated at 26M sys clock and this internal division
         * is not performed.
         */
        if((is_cpu_family() != CPU_OMAP36XX) && (sys_clkin_sel > 2)) {
            sr32(PRM_CLKSRC_CTRL, 6, 2, 2);/* input clock divider */
            clk_index = sys_clkin_sel/2;
        } else {
            sr32(PRM_CLKSRC_CTRL, 6, 2, 1);/* input clock divider */
            clk_index = sys_clkin_sel;
        }

    Does that mean that a system based on AM3715 couldn't operate properly if clock is below 26 MHz?

  • The issue is described in Advisory 1.86 in the silicon errata (SPRZ319C). Silicon revision 1.0 and 1.1 are impacted and 1.2 is not impacted by the issue. Please refer to the advisory for the details.

  • Here are example of M, N and other divisor values for 13 MHz system clock. Please make sure that PRM_CLKSRC_CTRL.SYSCLKDIV is set to 0x1 (Sys_clk is external clock / 1).

    1) DPLL3

    2) DPLL4

    ROM code sets PRM_CLKSRC_CTRL.DPLL4_CLKINP_DIV to 1 for 13 MHz clock input. Please leave it to 1 and use below DPLL configurations.