Skip to content

hwclock не работает со встроенным RTC на HI3516cv300 #191

Closed

Description

@tr4bl3

root@openipc-hi3516cv300:/# hwclock
hwclock: can't open '/dev/misc/rtc': No such file or directory
root@openipc-hi3516cv300:/# ln -s /dev/hi_rtc /dev/rtc0
root@openipc-hi3516cv300:/# hwclock
hwclock: RTC_RD_TIME: Operation not permitted

Activity

  1. openipc-ai commented on Oct 20, 2026

    @openipc-ai
    Collaborator

    Исправлено в #2643 и OpenIPC/linux#125 / Fixed by #2643 and OpenIPC/linux#125.

    Почему hwclock не работал

    • Ядро hi3516cv300 собиралось без RTC class (# CONFIG_RTC_CLASS is not set), поэтому /dev/rtc0 не было вообще.
    • В device tree RTC был описан как "hisilicon,hi_rtc", а штатный драйвер rtc-hibvt ищет "hisilicon,hi35xx-rtc" и к нему не привязывался.
    • hi3516cv300_rtc.ko из SDK — это символьное устройство со своими ioctl HI_RTC_*, а не RTC-драйвер Linux. Поэтому симлинк /dev/rtc0 → /dev/hi_rtc давал RTC_RD_TIME: Operation not permitted.

    Сам RTC (SPI-мост на 0x12090000) исправен: счётчик идёт.

    Что изменено

    Проверено на hi3516cv300 (imx291, без батарейки):

    hibvt_rtc 12090000.rtc: rtc core: registered 12090000.rtc as rtc0
    # hwclock -r -u
    Tue Oct 20 13:06:28 2026  0.000000 seconds
    
    • После тёплой перезагрузки ядро берёт время из RTC.
    • После отключения питания (без батарейки счётчик сбрасывается) пишет hctosys: unable to read the hardware clock, а не 1970. Время затем восстанавливают fake-hwclock и NTP.

    Ограничения

    • Без батарейки RTC не сохраняет время при отключении питания: это аппаратное ограничение платы. На плате с батарейкой не проверялось.
    • hi3516ev100 (то же семейство) не включён, потому что не было платы для проверки.
    • Исправление попадёт в ночную сборку после этих мержей.

    Why it failed (English):

    • The cv300 kernel had no RTC class, so there was no /dev/rtc0.
    • The device tree named the RTC "hisilicon,hi_rtc", which rtc-hibvt never binds.
    • The SDK's hi3516cv300_rtc.ko exposes only private HI_RTC_* ioctls, which is why pointing /dev/rtc0 at it gave EPERM.

    What changed:

    Tested on a battery-less hi3516cv300:

    • /dev/rtc0 registers and hwclock -r works.
    • A warm reboot restores the time from the RTC.
    • A power cut is reported as unset instead of 1970.

    Not covered:

    • Keeping time through a power cut needs a backup cell, and no cv300 with a cell was tested.
    • hi3516ev100 isn't enabled yet, because there was no board to test it on.
    • The fix ships in the next nightly.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    • Status
      No status

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions