Платформенная справка ArmSoM по китайскому RK-SM-YF-195 V1.8.0. Указаны Linux 4.4/4.19/5.10/6.1, RT-Thread; поддержка чипов/портов приведена ниже. Проверяйте плату ArmSoM, BSP и драйвер PHY; поддержка всех плат не заявляется. Английского PDF нет, полные переводы EN/RU/DE используют все 13 рисунков китайского исходника. По источнику, руководства PHY не опубликованы, а TRM не содержит подробных регистров: инструмент упрощает отладку, выдавая команды проверки соответствия/настройки и генерируя код драйвера PHY. Настройка и аппаратные тесты не выполнялись.
Неясности: §3.13 RK3562 заканчивается ], не }; это подтверждено страницей, сохранено, но напрямую не компилируется. Примеры с многоточиями §3.25/3.26 не являются полными патчами. Список USB3.1 §2.1 не содержит RK3588S, но таблица 2 содержит; оба сохранены, поддержку нужно проверить. TXPREEMPPLUSE сохранён как в оригинале. Текст китайских рисунков не перерисован. Большие параметры не обязательно лучше.
ArmSoM Docs · Rockchip USB SQ Tool
1. Настройка сигналов USB PHY Rockchip
Проблемы качества USB-сигналов в реальном устройстве решают улучшением схемы или программной настройкой регистров PHY. В обоих случаях сначала измерьте глазковую диаграмму и используйте отчёт для анализа. Rockchip USB SQ Tool предназначен для программной коррекции проваленных eye-тестов, ошибок перечисления из-за сигнала или перепада питания PHY, неожиданных отключений и отсутствия обнаружения извлечения. Проблемы сильно зависят от аппаратуры: плохих/длинных кабелей, высокого импеданса трасс или кабеля. Сначала улучшайте аппаратуру; программную коррекцию рассматривайте, только если это невозможно.
2. Интерфейс Rockchip USB SQ Tool
2.1 Главное окно
USB 2.0 поддерживает RK1808, RK1820, RK2116, RK2118, RK3036, RK312X, RK3228, RK3288, RK3308, RK3308B-S, RK3326, RK3326S, RK3328, RK3399, RK3506, RK3528, RK3562, RK3566, RK3568, RK3576, RK3588, RK3588S, RV1103, RV1103B, RV1106, RV1109, RV1126, RV1126B, RV1126B-P, PX30, PX30S. RK3328 поддерживает только USB2.0 OTG/HOST, не U2PHY USB3.0. USB 3.1 поддерживает RK1808, RK1820, RK3399, RK3528, RK3562, RK3566, RK3568, RK3576, RK3588, RV1126B; остальные платформы планируются после разработки/проверки. Инструмент работает только в Windows. Адрес исходника: https://redmine.rock-chips.com/documents/113 . Откройте Rockchip USB SQ Tool.exe: появится выбор платформы (рисунок 1). Нажмите кнопку платформы для её окна настройки.

Рисунок 1. Главное окно. Некоторые платформы имеют одинаковый интерфейс PHY, поэтому приводится один представитель группы. Таблицы 1 и 2 сопоставляют платформы USB2.0/USB3.1 с примерами интерфейса.
Таблица 1. Примеры интерфейса USB2.0 PHY.
| Платформа | Пример интерфейса настройки PHY |
|---|---|
| RK1808 | RK1808 USB2.0 Tuning интерфейс |
| RK3036、RK312X、RK3228、RK3308、RK3326、RK3328 、RK3399、PX30 | RK3399 USB2.0 Tuning интерфейс |
| RK1820、RK3308B-S、RK3326S、RK3506、RK3528、RK3562、RK3566、 RK3568、RV1126B、RV1126B-P、PX30S | RK3568 USB2.0 Tuning интерфейс |
| RK3576、RK3588、RK3588S | RK3588 USB2.0 Tuning интерфейс |
| RK2116、RK2118、RV1103、RV1103B、RV1106 | RV1106 USB2.0 Tuning интерфейс |
| RV1109、RV1126 | RV1109 USB2.0 Tuning интерфейс |
Таблица 2. Примеры интерфейса USB3.1 PHY.
| Платформа | Пример интерфейса настройки PHY |
|---|---|
| RK1808 | RK1808 USB3.1 Tuning интерфейс |
| RK1820 | RK1820 USB3.1 Tuning интерфейс |
| RK3399 | RK3399 USB3.1 Tuning интерфейс |
| RK3528、RK3562、RK3566、RK3568、RV1126B | RK3528 USB3.1 Tuning интерфейс |
| RK3576、RK3588、RK3588S | RK3588 USB3.1 Tuning интерфейс |
Соблюдайте порядок настройки в инструменте. Переходите дальше, только если предыдущие шаги не улучшили результат или не обеспечили требования; шаги с малым влиянием можно пропустить. Настройка рискованна: не меняйте параметры вслепую. Желательно наблюдать глазковую диаграмму и изменять умеренно, останавливаясь при выполнении требований; больше не значит лучше. Оценивайте риск самостоятельно.
2.2 RK1808 USB2.0 Tuning интерфейс
Параметры USB2.0 RK1808 совпадают с RK3568. В отличие от RK3568, регистры PHY имеют write_enable в старших 16 битах, поэтому читать начальные значения не требуется. Описание параметров см. в подразделе RK3568 USB2.0.

Рисунок 2. RK1808 USB2.0 PHY интерфейс настройки
2.3 RK3399 USB2.0 Tuning интерфейс
RK3399 USB2.0 поддерживает TYPE-C0, TYPE-C1, HOST0, HOST1. Порядок настройки:
-
Выберите интерфейс слева в рамке 1; справа автоматически появится команда SQ-теста.
-
Выберите параметры в красной рамке 2. Pre-emphasize выбирается флажками; остальные — элементами вроде рамки 4, вводом или кнопками вверх/вниз. Для каждого указаны диапазон и описание.
-
Выберите параметры и нажмите подтверждение в рамке 3. Рядом появятся команды io, в Code Output рамки 5 — пример кода.

Рисунок 3. RK3399 USB2.0 PHY интерфейс настройкиRK3399 USB2.0 параметры настройки сигнала.
Таблица 3. RK3399 USB2.0 параметры настройки сигнала
| Параметр | Описание |
|---|---|
| Pre-emphasize | Предыскажение HS Tx |
| Slew Rate | Скорость фронта глаза HS Tx |
| Compensation Voltage | Калибровка напряжения HS Tx: повышение увеличивает высоту глаза |
| Compensation Current | Калибровка тока HS Tx: повышение увеличивает высоту глаза |
| Pre-emphasize Strength | Сила предыскажения HS Tx |
| Bypass ODT & Driver Strength | Обход автоматической настройки сопротивления компенсационной схемы для изменения высоты глаза |
| Squelch | Порог шума HS Rx |
| HOST Disconnect Detection | Порог отключения HS, только HOST |
2.4 RK3568 USB2.0 Tuning интерфейс
RK3568 USB2.0 поддерживает OTG, HOST1, HOST2, HOST3. Порядок настройки:
-
Выберите интерфейс слева в рамке 1; справа автоматически появится команда SQ-теста.
-
Регистры PHY RK3568 USB2.0 не имеют write_enable в старших 16 битах. Чтобы не изменить посторонние биты, прочитайте исходное значение командой рамки 2 и введите его в поле справа.
-
Выберите параметры в рамке 3. Pre-emphasize задаётся флажками, остальные — элементами вроде рамки 5: вводом или кнопками вверх/вниз. Каждый параметр содержит диапазон и описание.
-
Нажмите подтверждение в рамке 4. Рядом появятся команды io, в Code Output рамки 6 — пример кода. Важно: поле начального значения заполнено по умолчанию; без замены это может повлиять на результат. Перед тестом обязательно прочитайте текущее значение регистра и введите его.

Рисунок 4. Интерфейс RK3568 USB2.0 PHY. Четыре категории: SQ, порог шума, порог отключения, B_Sessionvalid. SQ регулирует предыскажение, высоту глаза, скорость фронта и силу драйвера. Параметры — в таблице 4.
| Параметр | Описание |
|---|---|
| Pre-emphasize | Предыскажение HS Tx |
| HS Eye Height | Высота глаза HS Tx |
| HS ODT Value | Сопротивление ODT 45Ω: большее значение уменьшает сопротивление, повышает высоту глаза, но ускоряет фронты FS/LS |
| Slew Rate | Скорость фронта HS; влияние мало |
| Squelch | Порог шума HS Rx |
| HOST Disconnect Detection | Порог отключения, только HOST |
| B_Session Valid | Порог VBUS DET, только Device |
Порог шума RK3568 USB2.0: длинный, плохой или высокоимпедансный кабель может мешать перечислению High-speed. Обычно порог PHY равен 150mV. Затухание снижает полезный сигнал ниже 150mV, и он воспринимается как шум. Squelch позволяет умеренно снизить порог, обычно до 125mV или 112.5mV.
Порог отключения RK3568: используйте Host Disconnect Detection. Ниже типичный журнал подключения Host Rockchip:
[ 1204.092638] usb 1-1: new high-speed USB device number 3 using ehci-platform
[ 1204.280373] usb 1-1: New USB device found, idVendor=058f, idProduct=6387, bcdDevice= 1.04
[ 1204.280449] usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 1204.280476] usb 1-1: Product: Mass Storage
[ 1204.280498] usb 1-1: SerialNumber: FA45A19C
Типичный журнал отключения Host Rockchip:
[ 985.341233] usb 1-1: USB disconnect, device number 2
1) Извлечение USB2.0 не обнаруживается. Если журнал отключения отсутствует, попробуйте следующее:
- Включите предыскажение EOP, по умолчанию отключённое в SDK, как на рисунке 5.

Рисунок 5. Включение предыскажения EOP.
- Уменьшите порог отключения Host. Некоторые чипы не имеют настройки EOP: пропустите шаг 1 согласно интерфейсу. Иначе выполняйте шаг 2 дополнительно к шагу 1, только если первый не помог. Слишком низкий порог вызывает самопроизвольные отключения при нормальной работе; учитывайте риск.
2) Неожиданное отключение USB2.0 при работе: попробуйте повысить порог Host. Не все отключения вызваны порогом: часто виновато устройство или аппаратная среда, поэтому не настраивайте вслепую. EOP уже отключён по умолчанию SDK, дополнительная запись не нужна. Слишком высокий порог мешает обнаружению извлечения.
B_Sessionvalid RK356X применяют, когда ПК не распознаёт USB Device (ADB/MTP) или теряет его после распознавания. Снизьте порог решения по напряжению: исходное 3’b000; в источнике рекомендованы 3’b111 (7) либо 3’b101 (5).
Три основные аппаратные причины: низкий VBUS (ниже 4.7V часто вызывает проблемы); большая пульсация USB_AVDD1V0 либо повышение до 1.2V, из-за чего PHY не обнаруживает Bvalid; большая пульсация Logic, нарушающая работу контроллера.
2.5 RK3588 USB2.0 Tuning интерфейс
RK3588 USB2.0 поддерживает TYPE-C0, TYPE-C1, USB2.0 HOST0, USB2.0 HOST1. Шаги:
-
Выберите интерфейс слева в рамке 1; справа автоматически появится команда SQ-теста.
-
Выберите параметры в рамке 2 вводом или кнопками вверх/вниз. Каждый содержит диапазон и описание.
-
Выберите параметры и нажмите подтверждение в рамке 2. Рядом появятся команды io, в Code Output рамки 3 — пример кода.

Рисунок 6. RK3588 USB2.0 PHY интерфейс настройкиRK3588 USB2.0 параметры настройки сигнала.
Таблица 5. RK3588 USB2.0 параметры настройки сигнала
| Параметр | Описание |
|---|---|
| TXRISE | Скорость фронта HS Tx для изменения времени нарастания/спада |
| TXPREEMPAMP | Ток предыскажения HS Tx |
| TXPREEMPPLUSE | Коэффициент заполнения тока предыскажения; действует только при включённом TXPREEMPAMP TUNE |
| TXHSXV | Напряжение пересечения DP/DM HS Tx; заметного изменения нет |
| TXVREF | Постоянное напряжение HS Tx; заметно меняет амплитуду глаза |
| TXRES | Импеданс HS Tx; меняет амплитуду и время фронтов |
| TXFSLS | Импеданс FS/LS Tx; меняет амплитуду, фронты, напряжение пересечения и коэффициент заполнения |
| HOST DISCONNECT DETECTION | Порог отключения, только HOST |
2.6 RV1106 USB2.0 Tuning интерфейс
RV1106 USB2.0 поддерживает предыскажение и его силу, ODT, высоту глаза, пороги шума, Bvalid и отключения. У RV1103/RV1103B нет вывода VBUS DET, поэтому Bvalid не регулируется; остальные параметры совпадают с RV1106.

Рисунок 7. RV1106 USB2.0 PHY интерфейс настройки
Таблица 6. RV1106 USB2.0 параметры настройки сигнала
| Параметр | Описание |
|---|---|
| Pre-emphasize | Предыскажение HS Tx; по умолчанию включено |
| Pre-emphasize Strength | Сила предыскажения HS Tx; регистр действует только при включённом предыскажении |
| HS ODT Value | Сопротивление ODT 45Ω: большее значение снижает сопротивление и повышает высоту глаза, не меняя фронты FS/LS |
| Eye Height | Высота глаза HS Tx. Уровень 4:470mV требует напряжения logic чипа > 850mV |
| Squelch | Порог шума HS Rx |
| BValid | Порог VBUS DET, только Device |
| HOST Disconnect Detection | Порог отключения, только HOST |
2.7 RV1109 USB2.0 Tuning интерфейс
RV1109 USB2.0 поддерживает скорость фронта, высоту глаза, пороги шума и отключения. RV1126 имеет те же параметры.

Рисунок 8. RV1109 USB2.0 PHY интерфейс настройки
Таблица 7. RV1109 USB2.0 параметры настройки сигнала
| Параметр | Описание |
|---|---|
| Slew Rate | Скорость фронта глаза HS Tx |
| Eye Height | Высота глаза HS Tx |
| Squelch | Порог шума HS Rx |
| HOST Disconnect Detection | Порог отключения, только HOST |
2.8 RK1808 USB3.1 Tuning интерфейс
RK1808 USB3.1 поддерживает напряжение Tx driver, размах и силу предыскажения Tx driver.

Рисунок 9. RK1808 USB3.1 PHY интерфейс настройки
Таблица 8. RK1808 USB3.1 параметры настройки сигнала
| Параметр | Описание |
|---|---|
| TX driver voltage | Синфазное выходное напряжение дифференциальных сигналов TXP/TXN |
| TX driver swing | Размах драйвера Tx |
| TX driver pre-emphasis strength | Сила предыскажения драйвера Tx |
2.9 RK1820 USB3.1 Tuning интерфейс
RK1820 USB3.1 поддерживает Full Txswing and Txmargin, Low Swing and Txmargin, Tx De-emphasis, Boost Level. Шаги:
-
RK1820 USB3.1 поддерживает настройку PHY ID. Прочитайте регистр командой рамки 1 и введите значение в поле; иначе появится ошибка.
-
Нажмите start в рамке 2, чтобы активировать кнопки подтверждения.
-
Выберите параметры и нажмите подтверждение в рамке 3. Рядом появятся команды io, в Code Output рамки Code Output — пример кода.

2.10 RK3399 USB3.1 Tuning интерфейс
RK3399 USB3.1 поддерживает OTG0 и OTG1. Шаги:
-
Выберите интерфейс слева в рамке 1; справа автоматически появится команда SQ-теста.
-
RK3399 USB3.1 определяет обе ориентации Type-C. При правильно подключённом кабеле прочитайте регистр командой рамки 2 и введите значение; иначе появится ошибка.
-
Нажмите start в рамке 3. Выбор интерфейса рамки 1 блокируется, подтверждение рамки 5 активируется.
-
Регистры PHY RK3399 USB3.1 не имеют write_enable в старших 16 битах. Чтобы не изменить посторонние биты, прочитайте исходное значение командой рамки 4 и введите его в поле справа.
-
Выберите параметры и нажмите подтверждение в рамке 5. Рядом появятся команды io, в Code Output рамки 6 — пример кода.

Рисунок 10. RK3399 USB3.1 PHY интерфейс настройкиRK3399 USB3.1 параметры настройки сигнала.
Таблица 9. RK3399 USB3.1 параметры настройки сигнала
| Параметр | Описание |
|---|---|
| BOOST LEVEL | Уровень усиления Tx |
2.11 RK3528 USB3.1 Tuning интерфейс
RK3528 USB3.1 поддерживает Full Txswing and Txmargin, Low Swing and Txmargin, Tx De-emphasis, Boost Level. RK3562 и RK3568 имеют те же параметры.

Рисунок 11. RK3528 USB3.1 PHY интерфейс настройки
Таблица 10. RK3528 USB3.1 параметры настройки сигнала
| Параметр | Описание |
|---|---|
| Full Txswing and TXmargin | Полный размах/Txmargin: TX_SWING и TX_MARGIN[2:0] совместно управляют выходной амплитудой Tx |
| Low swing and Txmargin | Low swing/Txmargin: та же функция, что Full Tx swing, но другие уровни |
| TX De-emphasis | Уровень деэмфазиса передатчика |
| Boost Level | Уровень усиления Tx |
2.12 RK3588 USB3.1 Tuning интерфейс
RK3588 USB3.1 охватывает USB3-OTG0 (USB3&Dp CombPhy0), USB3-OTG1 (USB3&Dp CombPhy1), USB3-HOST2 (USB3&PCIE&SATA CombPhy). Шаги:
-
Выберите интерфейс слева в рамке 1; справа автоматически появится команда SQ-теста.
-
Для USB3-OTG0/1 прочитайте регистр ориентации CombPhy0/1 командой рамки 2 и введите значение. Требуется 0xCx либо 0x3x, иначе ошибка. Если чтение не удаётся (обычно Type-C), подключите кабель к проверяемому порту для активации CombPhy0/1 и повторите чтение.
-
Для USB3-HOST2 пропустите рамку 2 и нажмите START в рамке 3.
-
После START для USB3-OTG0/1 активны левые кнопки рамки 5, а правые USB3-HOST2 рамки 6 отключены; для HOST2 — наоборот.
-
Регистры PHY RK3588 USB3.1 не имеют write_enable в старших 16 битах. Чтобы не изменить посторонние биты, прочитайте исходное значение командой рамки 4 и введите его в поле справа.
-
Выберите параметры и нажмите подтверждение в рамке 5. Рядом появятся команды io, в Code Output рамки 7 — пример кода.

Рисунок 12. RK3588 USB3.0 PHY интерфейс настройкиRK3588 USB3.1 параметры настройки сигнала.
Таблица 11. RK3588 USB3.1 параметры настройки сигнала
| Параметр | Описание |
|---|---|
| TX Driver main-tap level(USB3-OTG) | Напряжение SS Tx |
| TX Pmos current control(USB3-OTG) | Ток SS Tx; рекомендуется только если настройки напряжения недостаточно |
| TX De-emphasis(USB3-OTG) | Деэмфазис SS Tx |
| TX Slew Rate(USB3-OTG) | Скорость фронта SS Tx |
| Full Txswing and TXmargin(USB3-HOST) | Полный размах/Txmargin: TX_SWING и TX_MARGIN[2:0] совместно управляют выходной амплитудой Tx |
| Low swing and Txmargin(USB3-HOST) | Low swing/Txmargin: та же функция, что Full Tx swing, но другие уровни |
| TX De-emphasis(USB3- HOST) | Уровень деэмфазиса передатчика |
3. Генерация кода настройки USB PHY
3.1 RK1808 USB2.0 PHY
Добавьте код настройки RK1808 USB2.0 в rk1808_usb2phy_tuning() файла kernel/drivers/phy/rockchip/phy-rockchip-inno-usb2.c.
static int rk1808_usb2phy_tuning(struct rockchip_usb2phy *rphy)
{
.../* OTG/Host PHY Tuning Code */
}
3.2 RK1820 USB2.0 PHY
Добавьте код настройки RK1820 USB2.0 в HAL_USB_HsPhyInit() файла bsp/rockchip/common/hal/lib/hal/src/hal_usb_phy.c.
HAL_Status HAL_USB_HsPhyInit(uint8_t id)
{
...
#elif defined(SOC_RK1820)
/* OTG/Host PHY Tuning Code */
#elif defined(XXXX)
...
}
3.3 RK2116 USB2.0 PHY
Добавьте код настройки RK2116 USB2.0 в HAL_USB_HsPhyInit() файла bsp/rockchip/common/hal/lib/hal/src/hal_usb_phy.c.
HAL_Status HAL_USB_HsPhyInit(uint8_t id)
{
...
#elif defined(RKMCU_RK2116)
/* OTG PHY Tuning Code */
#elif defined(XXXX)
...
}
3.4 RK2118 USB2.0 PHY
Добавьте код настройки RK2118 USB2.0 в HAL_USB_HsPhyInit() файла bsp/rockchip/common/hal/lib/hal/src/hal_usb_phy.c.
HAL_Status HAL_USB_HsPhyInit(uint8_t id)
{
...
#elif defined(RKMCU_RK2118)
/* OTG PHY Tuning Code */
#elif defined(XXXX)
...
}
3.5 RK3036/RK312X USB2.0 PHY
RK3036 пока поддерживает только ядро 3.10. Добавьте код в usb20otg_hw_init() файла kernel/drivers/usb/dwc_otg_310/usbdev_rk3036.c.
static void usb20otg_hw_init(void) {
.../* OTG/Host PHY Tuning Code */
}
Добавьте код настройки RK312X в rk312x_usb2phy_tuning() файла kernel/drivers/phy/rockchip/phy-rockchip-inno-usb2.c.
static int rk312x_usb2phy_tuning(struct rockchip_usb2phy *rphy)
{
.../* OTG/Host PHY Tuning Code */
}
3.6 RK3228 USB2.0 PHY
Добавьте код настройки RK3228 в rk3228_usb2phy_tuning() файла kernel/drivers/phy/rockchip/phy-rockchip-inno-usb2.c.
static int rk3228_usb2phy_tuning(struct rockchip_usb2phy *rphy)
{
.../* OTG/Host PHY Tuning Code */
}
3.7 RK3288 USB2.0 PHY
RK3288 имеет две версии PHY-драйвера. Выбирайте Kernel Version 4.4 для ядра 4.4 и старше, 4.19 для 4.19 и новее. Меняется лишь формат кода, не команды io. Для 4.19 добавляйте в конец rk3288_usb_phy_probe_init() файла kernel/drivers/phy/rockchip/phy-rockchip-usb.c. Для трёх портов перед фрагментами требуется проверка смещения регистра. Код OTG:
if (rk_phy->reg_offset == 0x320) {
... /* OTG PHY Tuning Code */
}
Код HOST1:
if (rk_phy->reg_offset == 0x334) {
... /* HOST1 PHY Tuning Code */
}
Код HOST2:
if (rk_phy->reg_offset == 0x348) {
... /* HOST2 PHY Tuning Code */
}
Драйвер RK3288 ядра 4.4: kernel/drivers/usb/dwc_otg_310/usbdev_rk32.c. Код OTG добавьте в конец usb20otg_hw_init(), HOST1 — rk_ehci_hw_init(), HOST2 — usb20host_hw_init().
3.8 RK3308B_S/RK3308 USB2.0 PHY
Для RK3308B_S добавьте код в конец ветви soc_is_rk3308bs() функции rk3308_usb2phy_tuning() файла kernel/drivers/phy/rockchip/phy-rockchip-inno-usb2.c.
if (soc_is_rk3308bs()) {
... /* OTG/HOST PHY Tuning Code */
}
Для RK3308 добавьте код в конец ветви else функции rk3308_usb2phy_tuning() файла kernel/drivers/phy/rockchip/phy-rockchip-inno-usb2.c.
if (soc_is_rk3308bs()) {
...
} else {
.../* OTG/HOST PHY Tuning Code */
}
3.9 RK3326S/PX30S/RK3326/PX30/RK3328 USB2.0 PHY
Для RK3326S/PX30S добавьте код в конец ветви soc_is_px30s() функции rk3328_usb2phy_tuning() файла kernel/drivers/phy/rockchip/phy-rockchip-inno-usb2.c.
if (soc_is_px30s()) {
.../* OTG/HOST PHY Tuning Code */
}
Для RK3326/PX30/RK3328 добавьте код в конец ветви else функции rk3328_usb2phy_tuning() файла kernel/drivers/phy/rockchip/phy-rockchip-inno-usb2.c.
if (soc_is_px30s()) {
...
} else {
.../* OTG/HOST PHY Tuning Code */
}
3.10 RK3399 USB2.0 PHY
Добавьте настройку RK3399 USB2.0 перед if (!of_property_read_bool(node, "rockchip,u2phy-tuning")) в rk3399_usb2phy_tuning() файла kernel/drivers/phy/rockchip/phy-rockchip-inno-usb2.c. TYPE-C0/HOST0 используют PHY 0xe450, TYPE-C1/HOST1 — 0xe460. Перед кодом нужна проверка адреса для различения четырёх портов.
if (rphy->phy_cfg->reg == 0xe450) {
.../* TYPE-C0/HOST0 PHY Tuning Code */
} else {
... /* TYPE-C1/HOST1 PHY Tuning Code */
}
if (!of_property_read_bool(node, "rockchip,u2phy-tuning"))
return ret;
3.11 RK3506 USB2.0 PHY
Добавьте код настройки RK3506 USB2.0 в rk3506_usb2phy_tuning() файла kernel/drivers/phy/rockchip/phy-rockchip-inno-usb2.c.
static int rk3506_usb2phy_tuning(struct rockchip_usb2phy *rphy)
{
.../* USB2.0 PHY Tuning Code */
}
3.12 RK3528 USB2.0 PHY
Добавьте код настройки RK3528 USB2.0 в rk3528_usb2phy_tuning() файла kernel/drivers/phy/rockchip/phy-rockchip-inno-usb2.c.
static int rk3528_usb2phy_tuning(struct rockchip_usb2phy *rphy)
{
.../* USB2.0 PHY Tuning Code */
}
3.13 RK3562 USB2.0 PHY
Добавьте код настройки RK3562 USB2.0 в rk3562_usb2phy_tuning() файла kernel/drivers/phy/rockchip/phy-rockchip-inno-usb2.c.
static int rk3562_usb2phy_tuning(struct rockchip_usb2phy *rphy)
{
.../* USB2.0 PHY Tuning Code */
]
3.14 RK3568/RK3566 USB2.0 PHY
RK3568/RK3566 используют общий код в конце rk3568_usb2phy_tuning() файла kernel/drivers/phy/rockchip/phy-rockchip-inno-usb2.c. OTG/HOST1 RK3568 имеют базу 0xfe8a0000, HOST2/HOST3 — 0xfe8b0000. Перед кодом проверяйте базовый адрес. OTG/HOST1:
if (rphy->phy_cfg->reg == 0xfe8a0000) {
... /* OTG/Host1 PHY Tuning Code */
}
Код HOST2/HOST3:
if (rphy->phy_cfg->reg == 0xfe8b0000) {
... /* Host2/Host3 PHY Tuning Code */
}
3.15 RK3576 USB2.0 PHY
Добавьте настройку RK3576 USB2.0 в rk3576_usb2phy_tuning() файла kernel/drivers/phy/rockchip/phy-rockchip-inno-usb2.c. Два порта OTG0/OTG1 различаются по rphy->phy_cfg->reg, как ниже:
static int rk3576_usb2phy_tuning(struct rockchip_usb2phy *rphy)
{
unsigned int reg;
int ret = 0;
if (rphy->phy_cfg->reg == 0x0) {
.../* OTG0 PHY Tuning Code */
} else if (rphy->phy_cfg->reg == 0x2000) {
.../* OTG1 PHY Tuning Code */
}
return ret;
}
3.16 RK3588 USB2.0 PHY
Добавьте настройку RK3588 USB2.0 в rk3588_usb2phy_tuning() файла kernel/drivers/phy/rockchip/phy-rockchip-inno-usb2.c. TYPE-C0, TYPE-C1, HOST0, HOST1 различаются по rphy->phy_cfg->reg:
if (rphy->phy_cfg->reg == 0x0000) {
.../* TYPE-C0 PHY Tuning Code */
} else if (rphy->phy_cfg->reg == 0x4000) {
.../* TYPE-C1 PHY Tuning Code */
} else if (rphy->phy_cfg->reg == 0x8000) {
.../* HOST0 PHY Tuning Code */
} else if (rphy->phy_cfg->reg == 0xc000) {
.../* HOST1 PHY Tuning Code */
}
3.17 RV1103/RV1106 USB2.0 PHY
Добавьте код настройки RV1103/RV1106 в rv1106_usb2phy_tuning() файла kernel/drivers/phy/rockchip/phy-rockchip-inno-usb2.c.
static int rv1106_usb2phy_tuning(struct rockchip_usb2phy *rphy)
{
.../* OTG PHY Tuning Code */
}
3.18 RV1103B USB2.0 PHY
Добавьте код настройки RV1103B в rv1103b_usb2phy_tuning() файла kernel/drivers/phy/rockchip/phy-rockchip-inno-usb2.c.
static int rv1103b_usb2phy_tuning(struct rockchip_usb2phy *rphy)
{
.../* OTG PHY Tuning Code */
}
3.19 RV1109/RV1126 USB2.0 PHY
Добавьте код настройки RV1109/RV1126 в rv1126_usb2phy_tuning() файла kernel/drivers/phy/rockchip/phy-rockchip-naneng-usb2.c.
static int rv1126_usb2phy_tuning(struct rockchip_usb2phy *rphy)
{
if (rphy->phy_cfg->reg == 0xff4c0000) {
.../* OTG PHY Tuning Code */
}
if (rphy->phy_cfg->reg == 0xff4c8000) {
.../* HOST PHY Tuning Code */
}
}
3.20 RV1126B/RV1126B-P USB2.0 PHY
Добавьте код настройки RV1126B/RV1126B-P в rv1126b_usb2phy_tuning() файла kernel/drivers/phy/rockchip/phy-rockchip-inno-usb2.c.
static int rv1126b_usb2phy_tuning(struct rockchip_usb2phy *rphy)
{
.../* OTG/HOST PHY Tuning Code */
}
3.21 RK1808 USB3.1 PHY
Добавьте код настройки RK1808 USB3.1 в rk1808_combphy_cfg файла kernel/drivers/phy/rockchip/phy-rockchip-inno-combphy.c.
static int rk1808_combphy_cfg(struct rockchip_combphy_priv *priv)
{
...
if (priv->phy_type == PHY_TYPE_PCIE) {
...
} else if (priv->phy_type == PHY_TYPE_USB3) {
...
/*
* Tuning Tx:
* offset 0x21b8 bit[7:4]: lane 0 TX driver swing
* tuning bits with weight, "1111" represents the
* largest swing and "0000" the smallest.
*/
reg = readl(priv->mmio + 0x21b8);
reg = (reg & ~0xf0) | 0xe0;
writel(reg, priv->mmio + 0x21b8);
.../* USB3.1 PHY Tuning Code */
...
} else {
dev_err(priv->dev, "failed to cfg incompatible PHY type\n");
return -EINVAL;
}
return 0;
}
3.22 RK1820 USB3.1 PHY
Добавьте код настройки RK1820 USB3.1 в HAL_USB_SsPhyInit() файла bsp/rockchip/common/hal/lib/hal/src/hal_usb_phy.c.
HAL_Status HAL_USB_SsPhyInit(uint8_t id)
{
...
switch (id) {
case 0:
#ifdef COMB_PIPE_PHY0_BASE
/* OTG PHY Tuning Code */
#endif
break;
case 1:
#ifdef COMB_PIPE_PHY1_BASE
/* OTG PHY Tuning Code */
#endif
break;
default:
break;
}
...
}
3.23 RK3399 USB3.1 PHY
Добавьте код настройки RK3399 USB3.1 в tcphy_tx_usb3_cfg_lane() файла kernel/drivers/phy/phy-rockchip-typec.c.
static void tcphy_tx_usb3_cfg_lane(struct rockchip_typec_phy *tcphy, u32 lane)
{
.../* OTG0/OTG1 PHY Tuning Code */
}
3.24 RK3528/RK3562/RK3566/RK3568 USB3.1 PHY
Код USB3.1 RK3528, RK3562, RK3568 добавляется в соответствующую combphy_cfg файла kernel/drivers/phy/rockchip/phy-rockchip-naneng-combphy.c. Место в rk3528_combphy_cfg для RK3528:
case PHY_TYPE_USB3:
...
/* Enable adaptive CTLE for USB3.0 Rx */
val = readl(priv->mmio + 0x200);
val &= ~GENMASK(17, 17);
val |= 0x01;
writel(val, priv->mmio + 0x200);
...
.../* USB3.1 PHY Tuning Code */
...
param_write(priv->phy_grf, &cfg->pipe_txcomp_sel, false);
param_write(priv->phy_grf, &cfg->pipe_txelec_sel, false);
param_write(priv->phy_grf, &cfg->usb_mode_set, true);
break;
Место RK3562 в rk3562_combphy_cfg:
case PHY_TYPE_USB3:
/* Set SSC downward spread spectrum */
val = readl(priv->mmio + (0x1f << 2));
val &= ~GENMASK(5, 4);
val |= 0x01 << 4;
writel(val, priv->mmio + 0x7c);
...
.../* USB3.1 PHY Tuning Code */
...
param_write(priv->phy_grf, &cfg->pipe_sel_usb, true);
param_write(priv->phy_grf, &cfg->pipe_txcomp_sel, false);
param_write(priv->phy_grf, &cfg->pipe_txelec_sel, false);
param_write(priv->phy_grf, &cfg->usb_mode_set, true);
break;
RK3566 и RK3568 используют общий код; добавьте его здесь в rk3568_combphy_cfg:
case PHY_TYPE_USB3:
...
/* Set PLL KVCO to min and set PLL charge pump current to max */
writel(0xf0, priv->mmio + (0xa << 2));
...
.../* USB3.1 PHY Tuning Code */
...
param_write(priv->phy_grf, &cfg->pipe_sel_usb, true);
param_write(priv->phy_grf, &cfg->pipe_txcomp_sel, false);
param_write(priv->phy_grf, &cfg->pipe_txelec_sel, false);
param_write(priv->phy_grf, &cfg->usb_mode_set, true);
3.25 RK3576 USB3.1 PHY
Добавьте RK3576 USB3-OTG0 в конец udphy_init() файла kernel/drivers/phy/rockchip/phy-rockchip-usbdp.c.
ret = udphy_status_check(udphy);
if (ret)
goto assert_phy;
.../* USB3-OTG0 PHY Tuning Code */
return 0;
Добавьте RK3576 USB3-OTG1 в конец rk3576_combphy_cfg() файла kernel/drivers/phy/rockchip/phy-rockchip-naneng-combphy.c.
case PHY_TYPE_USB3:
/* Set Rx squelch input filler bandwidth */
writel(0x0d, priv->mmio + (0x14 << 2));
...
.../* USB3-OTG1 PHY Tuning Code */
...
param_write(priv->phy_grf, &cfg->pipe_txcomp_sel, false);
param_write(priv->phy_grf, &cfg->pipe_txelec_sel, false);
param_write(priv->phy_grf, &cfg->usb_mode_set, true);
break;
3.26 RK3588 USB3.1 PHY
Для RK3588 USB3-OTG и USB3-HOST места различаются. У USB3-OTG пока нет отдельного интерфейса настройки как у USB2.0; добавьте код в конец rk3588_udphy_init() файла kernel/drivers/phy/rockchip/phy-rockchip-usbdp.c.
ret = rk3588_udphy_status_check(udphy);
if (ret)
goto assert_phy;
.../* USB3-OTG PHY Tuning Code */
return 0;
RK3588 USB3-HOST добавляется в rk3588_combphy_cfg() файла kernel/drivers/phy/rockchip/phy-rockchip-naneng-combphy.c.
case PHY_TYPE_USB3:
/* Set SSC downward spread spectrum */
val = readl(priv->mmio + (0x1f << 2));
val &= ~GENMASK(5, 4);
val |= 0x01 << 4;
...
.../* USB3-HOST PHY Tuning Code */
...
param_write(priv->phy_grf, &cfg->pipe_txcomp_sel, false);
param_write(priv->phy_grf, &cfg->pipe_txelec_sel, false);
param_write(priv->phy_grf, &cfg->usb_mode_set, true);
break;
3.27 RV1126B USB3.1 PHY
Добавьте код настройки RV1126B USB3.1 в rv1126b_combphy_cfg() файла kernel/drivers/phy/rockchip/phy-rockchip-naneng-combphy.c.
case PHY_TYPE_USB3:
/* Set Rx squelch input filler bandwidth */
writel(0x0e, priv->mmio + (0x14 << 2));
...
.../* USB3.1 PHY Tuning Code */
...
rockchip_combphy_param_write(priv->phy_grf, &cfg->pipe_sel_usb, true);
rockchip_combphy_param_write(priv->phy_grf, &cfg->pipe_txcomp_sel, false);
rockchip_combphy_param_write(priv->phy_grf, &cfg->pipe_txelec_sel, false);
rockchip_combphy_param_write(priv->phy_grf, &cfg->usb_mode_set, true);
break;
