Здравствуйте.
Одноплатная система на SOC AllWinner V3s (Cortex A7). Ранее использовалось ядро 4.13-rc2 . По ряду причин пришлось перейти на 5.14.11.
В linux используется графический драйвер SimpleFB, которому загручик передает параметры и адрес в памяти фреймбуфера. Видеоконтроллер (TCON) заранее настраивается в загрузчике, поэтому доступ в регистры TCON для SimpleFB не нужен. В user space написан драйвер для регулировки гамма-коррекции дисплея. Драйвер получает виртуальные адреса регистров TCON через mmap и осуществляет запись значений гаммы в соответствующие регистры.
После перехода на 5.14 драйвер перестал работать. То есть, mmap-ится без ошибок, но от записи значений нулевой эффект.
Я не поленился, и сляпал драйвер ядра, в котором виртуальные адреса регистров получаются через ioremap. Эффект от записи значений в адреса, что через writel(), что напрямую, тот же, то есть, нулевой. Получение адресов через devm_regmap_init_mmio() и запись регистров вызовом regmap_write() проблемы также не решает.
В системе есть мой драйвер ядра для специализированного RS-485. Драйвер также использует запись в регистры UART и управления GPIO. Адреса регистров получаются через ioremap. Но этот драйвер работает в 5.14 без проблем.
Куда копать? В чем злое колдунство?
Физические адреса начала диапазонов регистров:
GPIO: 0x01C20800 UART: 0x01C28000 TCON: 0x01C0C000