Снова я в тупике с SoC на 9G45, помогите, не знаю уже, где искать причину.
У меня generic SoC с процессором, двумя видами памяти и слотом для SD-карт. Проблема состоит в том, что ядро не обнаруживает карту в слоте. Загрузка происходит с SD-карты. Стартует начальный загрузчик с первого раздела карты, он грузит ядро опять же с первого раздела, передавая ему командную строку с указанием "root=/dev/mmcblk0p2 rootwait". Ядро загружается относительно успешно, доходит до ожидания rootfs и зависает. Классическая причина - неправильно настроенный detect pin, но это проверено-перепроверено. Надписи "New SD card at address ..." не появляется.
Еще одна странность - я наблюдаю это поведение в двух свежайших версиях ядра - 3.14+ от xilinx и 3.16.1 с kernel.org. Когда переношу свой BSP из этих версий в относительно старый 3.2.62 - все отлично. Пин в БСП настраивается правильно, в конфигурации ядра включены Atmel MCI, SD Block device. Больше перепутать вроде нечего.
Подскажите, может кто-нибудь сталкивался с проблемами обнаружения SD на последних версиях ядра?
Я могу приложить конфиг ядра и код инициализации из BSP, если это понадобится, и лог загрузки.
Самое странное, настройки сделаны правильно, конфиги 3.2.62 и 3.16.1 похожи, конечно, не совпадают, они сильно отличаются по набору параметров, но ключевые совпадают.
Одно из отличий - в реализации обработки прерываний - может тут что-то зарыто?
3.14 лежит рядом, но не запустилось, т.к. то, что получилось на 3.12 в плане исправления BoardId, в 3.14 в очередной раз изменили и ядро отказывается запускаться..
Вообще моя воля - я бы 3.2 использовал - там все адекватно сделано, а то, например, из 3.16 вообще выпилили драйвер atmel macb!!! Такое впечатление, что релизы стабильных (!) ядер не проверяются на старых платах даже минимально. Но мне необходимо задействовать микроновскую serial nor, поддержка которой в ядрах отсутствует, а патчики есть только для 3.16. Применить патч к старым версиям не получается - в 3.16 капитально переделали mtd, перекидали по новым файлам начинку
да, я про это в курсе.. к сожалению, там еще надо копать в других местах.. я пару вечеров положил на поиски, но пока безуспешно, впрочем и не сильно хотелось бы..
Получается по логике, что наличие карты установлено, дальше mmc пытается ее инициализировать на трех частотах в функции mmc_rescan_try_freq, инициализация довольно длинная, и именно она проходит успешно в 3.2.62 на первом же значении частоты, проходит на подфункции mmc_attach_sd. То же самое в ядре 3.16.1 выполнение mmc_attach_sd проходит неуспешно.