Добрйы день!
Являюсь обладателем платы SK-AT91SAM9G45-XC6SLX и возникла следующая проблема.
В образовательных интересах решил собрать для этой платы наиболее актуальные версии bootstrap/uboot/kernel(впоследствии оформить и выложить в вики), но столкнулся со следующей проблемой: с новой версией ядра(3.16+) не могу заставить работать шину между fpga и arm.
Для проверки я написал прошивку для фпга, которая выводит на диоды состояние пинов CS0, CS1 и OE, а в шину через тристейт буффер шлет константу: надеялся обратиться по физ. адресу из арма и считать эту константу. Со стандартным ядром пины CS0, CS1 и OE выставлены в 1(диоды горят), в моем же - 0.
Вероятно, мне нужно настроить шину EBI. В пдф на этот арм я, к сожалению, не нашел ничего, что мне могло бы помочь. Клок гейтинга для EBI в нем нет(по крайней мере я найти не смог), пины CS0, CS1 и OE не мультиплексируются(ОЕ может мультиплексироваться, если подключен компактфлеш), регистр CCFG_EBICSA настроен в значение 0x00070008.
Не подскажете, что я упускаю и куда стоит посмотреть?
В board-файлах для работы с SMC, если я правильно понял, достаточно только настроить работу сигнала CS и настроить тайминги SMC. В моем случае оба этих пункта выполнены, но что-то идет не так.
Заметил, что при перезагрузке платы на новом ядре в убуте светодиоды загораются, что позволяет сделать однозначный вывод о том, что ядро перезаписывает какие-то регистры.
Заранее спасибо.
ПС: при необходимости готов привести листинг dts и прошивки для фпга.
Разумеется, я смотрел в исходники fpga_test и fpga_loader: первый взял за основу программы, которая вычитывает адрес 0х10000000. В fpga_test пишутся 3 регистра с таймингами SMC и один регистр с SMC_MODE, эту часть программы я не изменял.
В исходники прошивки с микроблейзом, увы, не было возможности посмотреть, тк на фтп их найти не удалось.
В данный момент на стандартном ядре из поставки со своей прошивкой мне удается считать верные данные с шины(пускай почему-то только 4 бита), на новом - нет. Виной тому - неправильная работа сигналов CS0, CS1, OE.
Поясняю(возможно повторяюсь): в тестовой прошивке фпга я вывел на светодиоды сигналы (CS0&&CS1), ~(CS0&&CS1), OE, ~OE. На стандартном ядре эти светодиоды горели так, как и должны(2 горят, 2 не горят), в то время как на новом - все 4 светодиода не горели.
Хочу отметить, что с новым ядром при перезагрузке системы(именно перезагрузке, а не убирании питания) в u-boot светодиоды начинают гореть "нормально". Это позволяет сделать мне вывод, что ядро во время загрузки перезаписывает какие-то регистры, отвечающие за работу пинов CS и OE. Проблема в том, что я не могу найти ничего подобного в пдфке, из-за чего обратился за помощью на форум.
Спасибо.
sasamy, я уже смотрел на эти файлы(и board файлы тоже), когда пытался выявить проблему. Честно говоря, я не нашел ничего интересного в sam9_smc.c: там только выставляют тайминги SMC и рулят CSами(надо отметить, что CS0 всегда должен оставаться CS0, судя по документации). Кроме того, я выкинул из ядра поддержку ATAGS и использую dtb-файл. В dtb файле ничего про EBI/SMC нет(ну кроме нанда, который я временно отключил в ядре и в dtb).
Сегодня вечером попробую включить нанд обратно: вдруг нужные мне пины CS и OE примут нужное мне состояние. Тогда надо будет смотреть, как драйвер нанда инициализирует что-то там на чипе.
но я все равно не очень понял - почему не хотите загрузить тестовый пример Павла - там настройка через полный маппинг регистров в юзерспейс и соотвественно ему все равно что до этого какой-то драйвер настроил. Это хотя бы даст представление о картине, а так может у вас светодиоды неисправны :)
Все как раз таки началось с того, что я запустился с новыи ядром, попробовал запустить тестовый пример Павла, но он не заработал и я начал разбираться. НА данный момент удалось выяснить, что проблема кроется в управляющих сигналах.
И эту проблему настройка таймингов SMC решить не может. Складывается ощущение, что интерфейс EBI работает некорректно в моем случае. Но мне так и не удалось найти место, где его можно сконфигурировать(кроме регистра (CCFG_EBICSA).