mantech 53 17 июля, 2018 Опубликовано 17 июля, 2018 (изменено) · Жалоба Приветствую. Мозги сломал об инициализацию УСБ хоста на данных камнях, доки кот наплакал, в исходниках линукса противоречащие даташиту и здравому смыслу функции. В качестве примера - запись в регистры PHY производится по адресу базовый адрес контроллера+0x404, притом, как в даташите - это регистр OHCI !!! Как это работает - наверно волшебство... Может кто ковырял это дело и есть какие-то соображения, буду признателен. Особенно интересует, как инициализировать Host PHY... В baremetal, разумеется :rolleyes: Изменено 17 июля, 2018 пользователем mantech Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
repstosw 18 17 июля, 2018 Опубликовано 17 июля, 2018 · Жалоба Вы тут были? https://debugdump.com Меня вежливо послали ковырять Linux BSP по моему вопросу: https://debugdump.com/viewtopic.php?id=900 Лучше уже не придумать. А ответов они не дали, потому что не умеют LCD по i8080 к v3s подрубать. И костылей тами много Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 17 июля, 2018 Опубликовано 17 июля, 2018 · Жалоба В качестве примера - запись в регистры PHY производится по адресу базовый адрес контроллера+0x404, притом, как в даташите - это регистр OHCI !!! USB_HCI0 0x01C14000 SW_PA_USB0_IO_BASE 0x01c13000 Тщательнее надо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 53 17 июля, 2018 Опубликовано 17 июля, 2018 (изменено) · Жалоба USB_HCI0 0x01C14000 SW_PA_USB0_IO_BASE 0x01c13000 Тщательнее надо. Из даташита: USB OTG 0x01C1 3000---0x01C1 3FFF 4K USB HCI 0x01C1 4000---0x01C1 4FFF 4K Т.е. у них 0й порт не может работать в режиме хоста?? Не может такого быть, а если может, то в нем должно быть то же самое, что и в 1м + регистры, которые работают в режиме девайса, поэтому адрес 0х404 все-равно будет принадлежать OHCI 0. Или там совсем все "по турецки" сделано??? Опять-же по этому в даташитах ни слова... Вы тут были? А ответов они не дали, потому что не умеют LCD по i8080 к v3s подрубать. И костылей тами много Неа, я не силен в китайском :biggrin: А зачем к таким камням подключать такие дисплеи, когда в них есть хороший дисплейный контроллер RGB24, который к счастью хорошо описан в даташите?? ЗЫ. Кажется начинает доходить вся эта бредовая китайча... Правильно-ли я понимаю, в А13 есть 2 усб порта, первый, т.е. 0 - непойми чего, программнный порт, аля СТМ32, причем как в режиме девайса, так и хоста, как с ним работать - х.з. И какие там порты тоже непонятно, работа с ним похоже только в режиме фифо и т.п. PIO доступа, а вот второй порт т.е. 1 - это только хост, который совместим с EHCI специикацией, сам контроллер соотв. даташиту. В этом случае вопрос, на первый порт я забью болт, т.к. даже вникать не хочу, как этот бред работает, а по второму - как настраивать его PHY ? Либо что-то писать в 0х404, но это вроде, как ОТГ порт, есть еще адрес 0х800, там вроде, как физика порта... Вообщем какой-то трэш :crying: Так, мысли вслух - уж ругаю я МХ6 за тормознутую память и нагрев, как плитки, но надо отдать должное - УСБ порт они сделали хороший, и описали его очень доступно - заработал с пол-оборота, тут - печаль, тоска... Изменено 17 июля, 2018 пользователем mantech Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 17 июля, 2018 Опубликовано 17 июля, 2018 · Жалоба Т.е. у них 0й порт не может работать в режиме хоста?? Может, но... ЗЫ. Кажется начинает доходить вся эта бредовая китайча... Правильно-ли я понимаю, в А13 есть 2 усб порта, первый, т.е. 0 - непойми чего, программнный порт, аля СТМ32, причем как в режиме девайса, так и хоста, как с ним работать - х.з. И какие там порты тоже непонятно, работа с ним похоже только в режиме фифо и т.п. PIO доступа, а вот второй порт т.е. 1 - это только хост, который совместим с EHCI специикацией, сам контроллер соотв. даташиту. Да, нулевой порт отличается, а-ля STM. DMA там тоже есть, да не суть. В этом случае вопрос, на первый порт я забью болт, т.к. даже вникать не хочу, как этот бред работает, а по второму - как настраивать его PHY ? Либо что-то писать в 0х404, но это вроде, как ОТГ порт, есть еще адрес 0х800, там вроде, как физика порта... Все тут: drivers/usb/host/sw_hci_sunxi.c Нетрудно заметить, что все пишется через 0x404 - это общий интерфейс к PHY. Вообщем какой-то трэш Дык сами выбрали такой путь :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 53 17 июля, 2018 Опубликовано 17 июля, 2018 (изменено) · Жалоба Может, но... Да, нулевой порт отличается, а-ля STM. DMA там тоже есть, да не суть. Все тут: drivers/usb/host/sw_hci_sunxi.c Нетрудно заметить, что все пишется через 0x404 - это общий интерфейс к PHY. Дык сами выбрали такой путь :) Суть в том, что EHCI совсем другая логика работы, через очереди и дескрипторы, а в этом трэше - надо поллить все это и перекачивать все пакеты, которые надо и не надо, соблюдать тайминги и пр... Вообщем ничего приятного... Да, я тоже догадывался, что общий, под какими веществами китаезы это придумывали непонятно, но не суть, а вот что тогда делается в 0х800 ??? И еще вопросик, в догонку, работая с хостом в МХ6ом было сказано, что при подключении высокоскоростных устройств работает контроллер EHCI-совместимый, а низкоскоростных - EHCI аналог ОHCI контроллера с ремаппингом регистров, что я понял очень удобно, т.е. по-сути я работаю с одним контроллером, который выполняет функции скоростного и устаревшего с автопереключением, а как работать с раздельными? Переключение производить "вручную" или он сам переключает и мне надо только выбирать, с каким контроллером работать? Инициализировать их надо оба, как я понял... И что делать с рутхабом? Он там есть вообще, судя по спецификации контроллеров - да, по факту - х.з. Изменено 17 июля, 2018 пользователем mantech Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 17 июля, 2018 Опубликовано 17 июля, 2018 · Жалоба Да, я тоже догадывался, что общий, под какими веществами китаезы это придумывали непонятно, но не суть, а вот что тогда делается в 0х800 ??? Три почти одинаковых PHY, один интерфейс - причем тут вещества? В 0x800 ничего не делается, его содержимое просто выводится в дебаг. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 53 17 июля, 2018 Опубликовано 17 июля, 2018 (изменено) · Жалоба Три почти одинаковых PHY, один интерфейс - причем тут вещества? В 0x800 ничего не делается, его содержимое просто выводится в дебаг. Так-то один ОТГ и один хост, не совсем чтобы одинаковые?? Вот эта функция вызывается при инициализации: static void usb_passby(struct sw_hci_hcd *sw_hci, u32 enable) { unsigned long reg_value = 0; unsigned long bits = 0; static DEFINE_SPINLOCK(lock); unsigned long flags = 0; spin_lock_irqsave(&lock, flags); bits = BIT(10) | /* AHB Master interface INCR8 enable */ BIT(9) | /* AHB Master interface burst type INCR4 enable */ BIT(8) | /* AHB Master interface INCRX align enable */ BIT(0); /* ULPI bypass enable */ reg_value = readl(sw_hci->usb_vbase + SW_USB_PMU_IRQ_ENABLE); if (enable) reg_value |= bits; else reg_value &= ~bits; writel(reg_value, sw_hci->usb_vbase + SW_USB_PMU_IRQ_ENABLE); spin_unlock_irqrestore(&lock, flags); return; } А вот это "sw_hci->usb_vbase + SW_USB_PMU_IRQ_ENABLE" и есть адрес хоста +0х800 ... В даташите на А13 об этом ни слова, а в V3s - "PHY Interface description..." на стр 390. И как это понимать?? Изменено 17 июля, 2018 пользователем mantech Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 17 июля, 2018 Опубликовано 17 июля, 2018 · Жалоба Так-то один ОТГ и один хост, не совсем чтобы одинаковые?? Так я и написал - почти. Вполне возможно, что и совсем одинаковые. Это же PHY. В даташите на А13 об этом ни слова, а в V3s - "PHY Interface description..." на стр 390. И как это понимать?? Как небольшие огрехи документации :) Потому и коллекционирую даташиты на AW - иногда из соседнего можно почерпнуть что-то полезное. OFF: ох уж этот baremetal! Верите ли, до сегодняшнего дня в хвост и гриву использовал USB в режиме хоста и девайса, и даже не задумывался, как оно внутри устроено. Разве что конфигурацию endpoint'ов у устройства подстроил, чтобы нужную конфигурацию гаджета запустить. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 53 18 июля, 2018 Опубликовано 18 июля, 2018 (изменено) · Жалоба Так я и написал - почти. Вполне возможно, что и совсем одинаковые. Это же PHY. Как небольшие огрехи документации :) Потому и коллекционирую даташиты на AW - иногда из соседнего можно почерпнуть что-то полезное. OFF: ох уж этот baremetal! Верите ли, до сегодняшнего дня в хвост и гриву использовал USB в режиме хоста и девайса, и даже не задумывался, как оно внутри устроено. Разве что конфигурацию endpoint'ов у устройства подстроил, чтобы нужную конфигурацию гаджета запустить. Вот только б еще понять, что то, что "дернешь" из соседнего актуально и для того, с каким работаешь :laughing: Вот и дело то в том, что так же без проблем использовал да и по сей день пользуюсь усб стеком для МХ6, и поэтому решил и тут попробовать, но вот напоролся на грабли :( Кстати, есть-ли у кого мысли, что может "мешать" чтению OHCI регистров? Читаю с адреса база+0х00 - 0х50 все норм, а с адреса +0х400 и выше - виснет? Далее, регистры физики 0х800 и т.д. читаются нормально.. Изменено 18 июля, 2018 пользователем mantech Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 53 20 июля, 2018 Опубликовано 20 июля, 2018 · Жалоба Кстати, есть-ли у кого мысли, что может "мешать" чтению OHCI регистров? Читаю с адреса база+0х00 - 0х50 все норм, а с адреса +0х400 и выше - виснет? Далее, регистры физики 0х800 и т.д. читаются нормально.. Выяснил, пока не включен клок OHCI регистры читаются (хотя х.з. читаются или нет - в результате одни нули, но не зависает) как только включаешь клок первое же чтение с адреса 0х404 и др. из пула OHCI - зависание... Знатоки этих контроллеров, что это может быть такое, куда копать?? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GenaSPB 11 20 июля, 2018 Опубликовано 20 июля, 2018 (изменено) · Жалоба по опыту с Cortex-A9: чтение откуда нельзя вызывает трап, например Data Abort Изменено 20 июля, 2018 пользователем Genadi Zawidowski Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 53 21 июля, 2018 Опубликовано 21 июля, 2018 · Жалоба по опыту с Cortex-A9: чтение откуда нельзя вызывает трап, например Data Abort Вот почему нельзя?? Даже так, почему не виснет, при отключенном клоке? Вот просто сама суть процесса непонятна, я еще понимаю, если б писал в асинхронный регистр, где проц уходит в waitstate пока идет запись и т.к. что-то неправильно инициализировано, не выходит из него, но тут-то что?? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GenaSPB 11 21 июля, 2018 Опубликовано 21 июля, 2018 · Жалоба Да поставить печать чего-нибудбь внятного и вечный цикл в обработчики прерываний можете? Хоть убедитесь, по шине процессор держится или "ускакал" не туда... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 53 21 июля, 2018 Опубликовано 21 июля, 2018 (изменено) · Жалоба Да поставить печать чего-нибудбь внятного и вечный цикл в обработчики прерываний можете? Хоть убедитесь, по шине процессор держится или "ускакал" не туда... С зависом разобрался, в китайском даташите был бит клока перепутан, поставил тот, что нужно стали читаться регистры, но статус не реагирует, когда вставляю флешку или мышку в порт, походу что-то не проинициализировано еще... Вот не знаю, рутхаб надо каким-то образом инитить или достаточно того, что там по дефолту стоит? Изменено 21 июля, 2018 пользователем mantech Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться