Skip to content

Температура процессора на Orange Pi Zero под FreeBSD

Внимание!!!
С версии r354736 разработчиками дополнен оверлей sun8i-h3-sid.dtso и добавлен оверлей sun8i-h3-ths.dtso. Для чипсета h2+, по-прежнему, рекомендуется исправить объявление совместимости с "allwinner,sun8i-h3" на "allwinner,sun8i-h2-plus", предварительно скопировав файлы с новыми именами. Статья утратила актуальность.


Просто не смог пройти мимо интересной информации...

Угнетающе неторопливое реализация возможностей SoC-платформ под FreeBSD стимулирует поиск крупиц информации по этой тематике в поисковых системах. Уж не помню, что я искал, но натолкнулся на обсуждение патча к дереву устройств (DT), предлагаемого FreeBSD коммитером по имени Emmanuel Vadot, для объявления устройства aw_thermal - датчика температуры для ряда процессоров семейства Allwinner. Несмотря на десяток неудачных попыток реализовать DT-оверлей, используя патчи разной достоверности от разных авторов, этот патч все-же показался интересным тем, что, вдобавок к примелькавшимся описаниям устройства aw_thermal, содержал дополнительный фрагмент кода к устройству aw_sid. Вот этот фрагмент:
CODE:
--- a/arch/arm/boot/dts/sun8i-h3.dtsi +++ b/arch/arm/boot/dts/sun8i-h3.dtsi @@ -145,6 +145,25 @@   sid: eeprom@1c14000 {   compatible = "allwinner,sun8i-h3-sid";   reg = <0x1c14000 0x400>; + + ths_calib: calib@234 { + reg = <0x234 0x2>; + }; + }; + + ths: thermal_sensor@1c25000 { + compatible = "allwinner,sun8i-h3-ths"; + reg = <0x01c25000 0x100>; + interrupts = <GIC_SPI 31 IRQ_TYPE_LEVEL_HIGH>; + clocks = <&ccu CLK_BUS_THS>, <&ccu CLK_THS>; + clock-names = "apb", "ths"; + resets = <&ccu RST_BUS_THS>; + reset-names = "apb"; + #thermal-sensor-cells = <0>; + status = "disabled"; + + nvmem-cells = <&ths_calib>; + nvmem-cell-names = "ths-calib";   };     mali: gpu@1c40000 {


Thanks to Emmanuel Vadot for this thread: [PATCH 2/7] ARM: dts: sun8i: h3: Add thermal sensor controller node

Ознакомившись с содержанием файла sun8i-h3-sid.dtso, расположенного в дереве исходного кода FreeBSD в папке /usr/src/sys/dts/arm/overlays/, я добавил сюда еще один файл sun8i-h3-ths.dtso, учтя пожелание еще одного разработчика по имени Rob Herring:
CODE:
/dts-v1/; /plugin/; #include <dt-bindings/interrupt-controller/arm-gic.h> #include <dt-bindings/clock/sun8i-h3-ccu.h> #include <dt-bindings/reset/sun8i-h3-ccu.h> / { compatible = "allwinner,sun8i-h3"; }; &{/soc/eeprom@1c14000} { ths_calib: calib@234 { reg = <0x234 0x2>; }; }; &{/soc} { ths: thermal-sensor@1c25000 { compatible = "allwinner,sun8i-h3-ths"; reg = <0x01c25000 0x100>; interrupts = <GIC_SPI 31 IRQ_TYPE_LEVEL_HIGH>; clocks = <&ccu CLK_BUS_THS>, <&ccu CLK_THS>; clock-names = "apb", "ths"; resets = <&ccu RST_BUS_THS>; reset-names = "apb"; #thermal-sensor-cells = <0>; status = "okay"; nvmem-cells = <&ths_calib>; nvmem-cell-names = "ths-calib"; }; };

А теперь подведу итог, что, я думаю, я сделал:
  • Первый фрагмент для "/" объявляет совместимость создаваемого оверлея с DT;
  • Второй фрагмент для "&{/soc/eeprom@1c14000}" содержит дополнение для устройства aw_sid, которое, следуя информации из sun8i-h3-sid.dtso, имеет настоящее имя eeprom@1c14000 и располагается в /soc.
    ВНИМАНИЕ! Это означает, что Вы должны загрузить оверлей sun8i-h3-sid перед sun8i-h3-ths, чтобы новое устройство было успешно добавлено в систему.
  • И третий фрагмент "&{/soc}", собственно, и есть описание нового устройсва, создаваемого в /soc;
Теперь, находясь в папке /usr/src/sys/dts/arm/overlays/, запускаем команду make. Если ошибок нет, созданные оверлеи *.dtbo можно найти в /tmp. Я делаю это прямо на хост-машине с архитектурой amd64 и готовые блобы копирую на arm-машину в папку /boot/dtb/overlays, где им и положено находиться.
Осталось загрузить оверлеи строкой в /boot/loader.conf:
CODE:
fdt_overlays="sun8i-h3-sid,sun8i-h3-ths"


Ещё одно ВАЖНОЕ ЗАМЕЧАНИЕ:
Мой Orange Pi Zero имеет чип h2+, эдакий облегчённый вариант чипа h3. DT подобных неточностей "не прощает"! Это значит, что объявление совместимости с DT (первый фрагмент) НЕОБХОДИМО исправить с "allwinner,sun8i-h3" на "allwinner,sun8i-h2-plus", и не только для sun8i-h3-ths.dtso, но и для sun8i-h3-sid.dtso. И пересобрать их командой make. Я бы скопировал эти файлы как sun8i-h2-plus-ths.dtso и sun8i-h2-plus-sid.dtso и редактировал именно их.

Уфф!!!

Блоб оверлея собран, помещен в надлежащую папку и загружен с помощью fdt_overlays в /boot/loader.conf. Следующие команды помогут посмотреть, появилось ли и работает ли устройство:
CODE:
devinfo | grep aw_ dmesg | grep aw_ sysctl -a | grep aw_therm

ищем слово aw_thermal...
Хотя, лично мне кажется, что к точности измерений есть вопросы - я спокойно держу на радиаторе палец, даже 40 градусов не ощущаю, а sysctl -a | grep aw_therm показывает 62C

Thanks to Emmanuel Vadot for this thread: [PATCH 2/7] ARM: dts: sun8i: h3: Add thermal sensor controller node.
Хорошего человека не грех и два раза поблагодарить :-)

Обратные ссылки

Нет обратных ссылок

Комментарии

Показывать комментарии Как список | Древовидной структурой

Нет комментариев.

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

Enclosing asterisks marks text as bold (*word*), underscore are made via _word_.
Standard emoticons like :-) and ;-) are converted to images.
E-Mail addresses will not be displayed and will only be used for E-Mail notifications.
To leave a comment you must approve it via e-mail, which will be sent to your address after submission.
Опции формы