- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 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.
Реализует поддержку динамического изменения частоты процессора, а приведенная функция меняет тайминги для памяти (как обычно, весьма альтернативным способом). Что характерно, это вполне себе работает на реальном железе, и вроде бы оно у меня в этом куске ни разу не падало.
Lure Of Chaos 01.03.2011 16:36 # +1
whitequark 03.03.2011 02:30 # −1
Подобным шуткам не место в ядре ОС.
Lure Of Chaos 03.03.2011 15:53 # 0
whitequark 03.03.2011 18:06 # +1
К.О.: Код, которого нет, не компилится, все верно. Вместо этого комментария должно было быть что-то вроде local_irq_disable().
Lure Of Chaos 03.03.2011 18:20 # 0
bormand 27.09.2021 21:40 # 0
А поможет? Не текущее ядро полезет к памяти, так соседнее или какая-нибудь периферия по DMA.
З.Ы. Нафиг вообще эти джедаи к таймингам полезли? Имхо, если проц пошёл на снижение частоты, то ему уже некуда торопиться, потерпит неоптимальные задержки.
guest6 27.09.2021 21:46 # 0
Я думал, такое ушло когда пришел SDRAM
>о, если проц пошёл на снижение частоты,
то он тротлица лол
bormand 27.09.2021 22:12 # 0
А что SDRAM? Физика там внутри та же самая и не особо зависит от частоты на интерфейсе...
Если ты частоту скинул, то можно и тайминги (в тактах) сделать поменьше. Лишь бы в наносекундах их хватало.
guest6 27.09.2021 22:13 # 0
Это попытка использовать с пользой понижение частоты.
Нет смысла ждать 9 тактов CAS, если у тебя частота упала?
Это как я выбираю более низкий JDEC профайл из SPD, и получаю меньшие тайминги
bormand 27.09.2021 22:43 # 0
Ну.
А вообще, чуваки или очень хорошо знают свой контроллер памяти или просто слабоумные и отважные... Возможно, просто так везёт, что всё в кеше и никаких обращений к памяти нету во время смены циферок.
guest6 27.09.2021 22:46 # 0
Хочется конечно каких-то пруфоф, что это не премачур оптимизейшн
bormand 27.09.2021 22:51 # 0
Я больше боюсь, что стейтмашина контроллера просто охуеет от смены таймингов без остановки и рестарта. Хотя может это и фича такая, фиг знает.
guest6 27.09.2021 22:52 # 0
>охуеет от смены таймингов без остановки шины.
у штеуда так можно, кстати?
Обычно эту херню ставит био firmware, и делает это вероятно ДО запуска контроллера памяти?
bormand 27.09.2021 22:59 # 0
Вероятно, по крайней мере в даташите STM'ки написано, что при смене частоты надо выключать clock и заново проходить инициализацию.
Может быть на более продвинутых контроллерах памяти можно и на ходу, но что-то я сомневаюсь.
guest6 27.09.2021 23:03 # 0
bormand 27.09.2021 23:05 # 0
Неа, там же голые SDRAM чипы обычно распаиваются, а SPD на планке стоит, а не в чипе.
Так что только даташит, только хардкод.
guest6 27.09.2021 23:19 # 0
Какая там шЫрина канала?
bormand 27.09.2021 23:47 # 0
Там 32 бита, можно в теории 2 по 16 впаять или 4 по 8.
> дуал ченнел
Не, только по-очереди, как если бы ты воткнул 2 планки в один канал. Это же простенький микроконтроллер а не комп, лол.
SadKo 02.03.2011 12:04 # +1
whitequark 03.03.2011 18:08 # 0
j123123 27.09.2021 21:59 # +1
какой-то "jz4750d", и ядро какое-то древнее. Вряд ли современное ядро этот SoC поддерживает, к тому же MIPS уже всё. Надо чтоб RISC-V
CBuHOKYP 27.09.2021 22:05 # 0