Няшная / Говнокод #5832 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
static void jz_update_dram_prev(unsigned int cur_mclk, unsigned int new_mclk)
{
        /* No risk, no fun: run with interrupts on! */
        if (new_mclk > cur_mclk) {
                /* We're going FASTER, so first update TRAS, RCD, TPC, TRWL
                 * and TRC of DMCR before changing the frequency.
                 */
                jz_update_dram_dmcr(new_mclk);
        } else {
                /* We're going SLOWER: first update RTCOR value
                 * before changing the frequency.
                 */
                jz_update_dram_rtcor(new_mclk);
        }
}

Кусок кода из официального™ китайского дерева исходников Линукса для одного System-on-Chip.

Реализует поддержку динамического изменения частоты процессора, а приведенная функция меняет тайминги для памяти (как обычно, весьма альтернативным способом). Что характерно, это вполне себе работает на реальном железе, и вроде бы оно у меня в этом куске ни разу не падало.

Запостил: whitequark whitequark, (Updated )

Комментарии (22) RSS

    • У меня язык не повернется назвать хорошим код с комментарием /* No risk, no fun: run with interrupts on! */
      Подобным шуткам не место в ядре ОС.
      Ответить
        • Ага.

          К.О.: Код, которого нет, не компилится, все верно. Вместо этого комментария должно было быть что-то вроде local_irq_disable().
          Ответить
          • > local_irq_disable

            А поможет? Не текущее ядро полезет к памяти, так соседнее или какая-нибудь периферия по DMA.

            З.Ы. Нафиг вообще эти джедаи к таймингам полезли? Имхо, если проц пошёл на снижение частоты, то ему уже некуда торопиться, потерпит неоптимальные задержки.
            Ответить
            • Они тайминги памяти подстраивают под частоту процессора что ли?

              Я думал, такое ушло когда пришел SDRAM

              >о, если проц пошёл на снижение частоты,
              то он тротлица лол
              Ответить
              • > SDRAM

                А что SDRAM? Физика там внутри та же самая и не особо зависит от частоты на интерфейсе...

                Если ты частоту скинул, то можно и тайминги (в тактах) сделать поменьше. Лишь бы в наносекундах их хватало.
                Ответить
                • А, так это вовсе не попытка "подстроить" частоту памяти к частоте процессора.

                  Это попытка использовать с пользой понижение частоты.
                  Нет смысла ждать 9 тактов CAS, если у тебя частота упала?

                  Это как я выбираю более низкий JDEC профайл из SPD, и получаю меньшие тайминги
                  Ответить
                  • > Нет смысла ждать 9 тактов CAS, если у тебя частота упала?

                    Ну.

                    А вообще, чуваки или очень хорошо знают свой контроллер памяти или просто слабоумные и отважные... Возможно, просто так везёт, что всё в кеше и никаких обращений к памяти нету во время смены циферок.
                    Ответить
                    • ага, а потом на продакшене они обратятся к памяти с заниженным латенси, и считают оттуда мусор.

                      Хочется конечно каких-то пруфоф, что это не премачур оптимизейшн
                      Ответить
                      • Да не, заниженной латенси вроде не должно быть, там же в комменте написано, что они тайминги наращивают до повышения частоты. А уменьшают видимо после понижения.

                        Я больше боюсь, что стейтмашина контроллера просто охуеет от смены таймингов без остановки и рестарта. Хотя может это и фича такая, фиг знает.
                        Ответить
                        • А, ты имеешь ввиду, что они понизили их при понижении частоты, и получили выше скорость, но на самом деле потому, что тупо считали данные из кеша?

                          >охуеет от смены таймингов без остановки шины.
                          у штеуда так можно, кстати?

                          Обычно эту херню ставит био firmware, и делает это вероятно ДО запуска контроллера памяти?
                          Ответить
                          • > вероятно ДО запуска контроллера памяти

                            Вероятно, по крайней мере в даташите STM'ки написано, что при смене частоты надо выключать clock и заново проходить инициализацию.

                            Может быть на более продвинутых контроллерах памяти можно и на ходу, но что-то я сомневаюсь.
                            Ответить
                            • А там есть кстати SPD? Или надо читать датащит памяти и программировать частоту вручну.?
                              Ответить
                              • > SPD

                                Неа, там же голые SDRAM чипы обычно распаиваются, а SPD на планке стоит, а не в чипе.

                                Так что только даташит, только хардкод.
                                Ответить
                                • а он умеет с несколькими чипами одновременно работать, как RANK? А дуал ченел может?

                                  Какая там шЫрина канала?
                                  Ответить
                                  • > как RANK

                                    Там 32 бита, можно в теории 2 по 16 впаять или 4 по 8.

                                    > дуал ченнел

                                    Не, только по-очереди, как если бы ты воткнул 2 планки в один канал. Это же простенький микроконтроллер а не комп, лол.
                                    Ответить
  • Где здесь говнокод? Даже комментарии оставили, зачем это нужно. Писали этот кусок явно не китайцы.
    Ответить
    • Возможно, это было временное просветление. В целом поддержка этой архитектуры реализована настолько ужасно, насколько это может быть. (200-килобайтный хидер со всеми дефайнами для чипа, например. Причем для разных вариаций, отличающихся в лучшем случае наличием пары периферических модулей, они его дублируют.)
      Ответить
  • Печально, сайт стал падали. Раньше он не падали, теперь - падали.
    Ответить

Добавить комментарий

Где здесь C++, guest?!

    А не использовать ли нам bbcode?


    8