Перейти к содержанию
    

Allwinner A13 и др...

Приветствую.

 

Мозги сломал об инициализацию УСБ хоста на данных камнях, доки кот наплакал, в исходниках линукса противоречащие даташиту и здравому смыслу функции.

В качестве примера - запись в регистры PHY производится по адресу базовый адрес контроллера+0x404, притом, как в даташите - это регистр OHCI !!! Как это работает - наверно волшебство...

 

Может кто ковырял это дело и есть какие-то соображения, буду признателен.

 

Особенно интересует, как инициализировать Host PHY... В baremetal, разумеется :rolleyes:

Изменено пользователем mantech

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вы тут были? https://debugdump.com

 

Меня вежливо послали ковырять Linux BSP по моему вопросу: https://debugdump.com/viewtopic.php?id=900

 

Лучше уже не придумать. А ответов они не дали, потому что не умеют LCD по i8080 к v3s подрубать. И костылей тами много

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В качестве примера - запись в регистры PHY производится по адресу базовый адрес контроллера+0x404, притом, как в даташите - это регистр OHCI !!!

 USB_HCI0              0x01C14000
SW_PA_USB0_IO_BASE    0x01c13000

Тщательнее надо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

 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 за тормознутую память и нагрев, как плитки, но надо отдать должное - УСБ порт они сделали хороший, и описали его очень доступно - заработал с пол-оборота, тут - печаль, тоска...

Изменено пользователем mantech

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Т.е. у них 0й порт не может работать в режиме хоста??

Может, но...

 

ЗЫ. Кажется начинает доходить вся эта бредовая китайча... Правильно-ли я понимаю, в А13 есть 2 усб порта, первый, т.е. 0 - непойми чего, программнный порт, аля СТМ32, причем как в режиме девайса, так и хоста, как с ним работать - х.з. И какие там порты тоже непонятно, работа с ним похоже только в режиме фифо и т.п. PIO доступа, а вот второй порт т.е. 1 - это только хост, который совместим с EHCI специикацией, сам контроллер соотв. даташиту.

Да, нулевой порт отличается, а-ля STM. DMA там тоже есть, да не суть.

 

В этом случае вопрос, на первый порт я забью болт, т.к. даже вникать не хочу, как этот бред работает, а по второму - как настраивать его PHY ? Либо что-то писать в 0х404, но это вроде, как ОТГ порт, есть еще адрес 0х800, там вроде, как физика порта...

Все тут:

drivers/usb/host/sw_hci_sunxi.c

 

Нетрудно заметить, что все пишется через 0x404 - это общий интерфейс к PHY.

 

Вообщем какой-то трэш crying.gif

Дык сами выбрали такой путь :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Может, но...

 

 

Да, нулевой порт отличается, а-ля STM. DMA там тоже есть, да не суть.

 

 

Все тут:

drivers/usb/host/sw_hci_sunxi.c

 

Нетрудно заметить, что все пишется через 0x404 - это общий интерфейс к PHY.

 

 

Дык сами выбрали такой путь :)

 

Суть в том, что EHCI совсем другая логика работы, через очереди и дескрипторы, а в этом трэше - надо поллить все это и перекачивать все пакеты, которые надо и не надо, соблюдать тайминги и пр... Вообщем ничего приятного...

 

Да, я тоже догадывался, что общий, под какими веществами китаезы это придумывали непонятно, но не суть, а вот что тогда делается в 0х800 ???

 

И еще вопросик, в догонку, работая с хостом в МХ6ом было сказано, что при подключении высокоскоростных устройств работает контроллер EHCI-совместимый, а низкоскоростных - EHCI аналог ОHCI контроллера с ремаппингом регистров, что я понял очень удобно, т.е. по-сути я работаю с одним контроллером, который выполняет функции скоростного и устаревшего с автопереключением, а как работать с раздельными? Переключение производить "вручную" или он сам переключает и мне надо только выбирать, с каким контроллером работать? Инициализировать их надо оба, как я понял...

 

И что делать с рутхабом? Он там есть вообще, судя по спецификации контроллеров - да, по факту - х.з.

Изменено пользователем mantech

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да, я тоже догадывался, что общий, под какими веществами китаезы это придумывали непонятно, но не суть, а вот что тогда делается в 0х800 ???

Три почти одинаковых PHY, один интерфейс - причем тут вещества? В 0x800 ничего не делается, его содержимое просто выводится в дебаг.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Три почти одинаковых 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. И как это понимать??

Изменено пользователем mantech

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Так-то один ОТГ и один хост, не совсем чтобы одинаковые??

Так я и написал - почти. Вполне возможно, что и совсем одинаковые. Это же PHY.

 

В даташите на А13 об этом ни слова, а в V3s - "PHY Interface description..." на стр 390. И как это понимать??

Как небольшие огрехи документации :) Потому и коллекционирую даташиты на AW - иногда из соседнего можно почерпнуть что-то полезное.

 

OFF: ох уж этот baremetal! Верите ли, до сегодняшнего дня в хвост и гриву использовал USB в режиме хоста и девайса, и даже не задумывался,

как оно внутри устроено. Разве что конфигурацию endpoint'ов у устройства подстроил, чтобы нужную конфигурацию гаджета запустить.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Так я и написал - почти. Вполне возможно, что и совсем одинаковые. Это же PHY.

 

 

Как небольшие огрехи документации :) Потому и коллекционирую даташиты на AW - иногда из соседнего можно почерпнуть что-то полезное.

 

OFF: ох уж этот baremetal! Верите ли, до сегодняшнего дня в хвост и гриву использовал USB в режиме хоста и девайса, и даже не задумывался,

как оно внутри устроено. Разве что конфигурацию endpoint'ов у устройства подстроил, чтобы нужную конфигурацию гаджета запустить.

 

Вот только б еще понять, что то, что "дернешь" из соседнего актуально и для того, с каким работаешь :laughing:

 

Вот и дело то в том, что так же без проблем использовал да и по сей день пользуюсь усб стеком для МХ6, и поэтому решил и тут попробовать, но вот напоролся на грабли :(

 

Кстати, есть-ли у кого мысли, что может "мешать" чтению OHCI регистров? Читаю с адреса база+0х00 - 0х50 все норм, а с адреса +0х400 и выше - виснет? Далее, регистры физики 0х800 и т.д. читаются нормально..

Изменено пользователем mantech

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Кстати, есть-ли у кого мысли, что может "мешать" чтению OHCI регистров? Читаю с адреса база+0х00 - 0х50 все норм, а с адреса +0х400 и выше - виснет? Далее, регистры физики 0х800 и т.д. читаются нормально..

 

Выяснил, пока не включен клок OHCI регистры читаются (хотя х.з. читаются или нет - в результате одни нули, но не зависает) как только включаешь клок первое же чтение с адреса 0х404 и др. из пула OHCI - зависание...

Знатоки этих контроллеров, что это может быть такое, куда копать??

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

по опыту с Cortex-A9: чтение откуда нельзя вызывает трап, например Data Abort

Изменено пользователем Genadi Zawidowski

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

по опыту с Cortex-A9: чтение откуда нельзя вызывает трап, например Data Abort

 

Вот почему нельзя?? Даже так, почему не виснет, при отключенном клоке? Вот просто сама суть процесса непонятна, я еще понимаю, если б писал в асинхронный регистр, где проц уходит в waitstate пока идет запись и т.к. что-то неправильно инициализировано, не выходит из него, но тут-то что??

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да поставить печать чего-нибудбь внятного и вечный цикл в обработчики прерываний можете? Хоть убедитесь, по шине процессор держится или "ускакал" не туда...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да поставить печать чего-нибудбь внятного и вечный цикл в обработчики прерываний можете? Хоть убедитесь, по шине процессор держится или "ускакал" не туда...

 

С зависом разобрался, в китайском даташите был бит клока перепутан, поставил тот, что нужно стали читаться регистры, но статус не реагирует, когда вставляю флешку или мышку в порт, походу что-то не проинициализировано еще...

Вот не знаю, рутхаб надо каким-то образом инитить или достаточно того, что там по дефолту стоит?

Изменено пользователем mantech

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...