Как изменить параметры stm32 PLL в дереве устройств uboot? - PullRequest
0 голосов
/ 05 августа 2020

Я новичок в u-boot, и у меня есть специальная плата на основе платы Waveshare CoreH7. частота моего кристалла (HSE) составляет 8 МГц, и я хочу иметь частоту ядра 400 МГц с использованием PLL1. согласно этой документации, я должен добавить приведенный ниже код в мой файл board.dts.

    rcc {
        vco1@58024430 {
            #clock-cells = <0>;
            compatible = "stm32,pll";
            reg = <0>;
            st,clock-div = <4>; // 8MHz divided by 4 = 2MHz
            st,clock-mult = <400>; // (2MHz * 400)/2 = 400MHz
            st,frac-status = <0>;
            st,frac = <0>;
            //st,vcosel = <1>;
            st,pllrge = <1>;
        };
    };

Итак, теперь моя частота должна быть 400 МГц. но это не так!

Я установил уровень ведения журнала uboot на 8, чтобы просмотреть все журналы. и после проверки журналов вывода на последовательном терминале я понял, что u-boot даже не заботится об этих параметрах "vco1" в моем дереве устройств. поэтому я решил взглянуть на драйвер r cc, и когда я увидел код, я понял, что параметры pll определены в самом драйвере, и драйвер даже не заботится о тех параметрах, в которые я их написал мое дерево устройств. это часть драйвера stm32h7 в 329-й строке:

/*
 * OSC_HSE = 25 MHz
 * VCO = 500MHz
 * pll1_p = 250MHz / pll1_q = 250MHz pll1_r = 250Mhz
 */
struct pll_psc sys_pll_psc = {
    .divm = 4,
    .divn = 80,
    .divp = 2,
    .divq = 2,
    .divr = 2,
};

Я не могу понять, что здесь происходит! Насколько я знаю, драйвер должен читать эти параметры из дерева устройств. Итак, если пользователь должен записать эти параметры в дереве устройств, почему драйвер имеет эти значения в нем, когда он может читать их из дерева устройств?

...