RK3588 kernel-6.1:drivers/usb/isp1760 功能与实现要点

RK3588 kernel-6.1:drivers/usb/isp1760 功能与实现要点

源码基准:rk3588/kernel-6.1/drivers/usb/isp1760/。模块 isp1760CONFIG_USB_ISP1760)。

1. 芯片与驱动定位

NXP ISP1760 / ISP1761 / ISP1763 为外置 USB 2.0 主机控制器(及部分型号的 设备控制器)IP,常挂在 CPU 本地总线 / FPGA / PCI 评估卡(如经 PLX9054 桥),不要求芯片自己做 DMA master:负载数据多在 控制器片内 SRAMurb 缓冲区 之间由驱动搬运(配合 PTD 调度)。

Kconfig 声明的限制

  • 不支持等时(ISO)传输不支持 OTG(代码里对 ISP1761Host/Device 切换有寄存器配置,OTG 协议栈仍为 TODO)。
  • 依赖 REGMAP_MMIO,寄存器访问统一走 regmap/regmap_field

与 RK3588:RK3588 片上 USB 一般为 DWC3/xHCI很少外挂 ISP176x。本目录适用于 NXP 兼容评估板、自定义总线上的 ISP176x 等场景。


2. 源码分层(Makefile

对象 文件 职责
公共核心 isp1760-core.c isp1760_register/unregisterisp1760_init_core(复位、总线宽度、过流极性、中断极性、1761 的 HC/DC IRQ 共用处理)、片内存储布局regmap 配置
总线胶水 isp1760-if.c platform(OF)、可选 PCI(PLX + ISP1761);解析 nxp,usb-isp176{0,1,3}bus-widthusb-dr-mode 等 → devflags
主机 isp1760-hcd.c usb_hcd + hc_driverPTD(Philips Proprietary Transfer Descriptor)ATL/INT/ISO 三段队列偏移(ISO 路径声明不可用)、片内 payloadisp1760_qh/isp1760_qtd
设备 isp1760-udc.c usb_gadgetISP1761/1763 带 DC);VBUS 轮询、EP/usb_request 队列
寄存器 isp1760-regs.h MMIO 偏移与宏
头文件 isp1760-core.hisp1760-hcd.hisp1760-udc.h struct isp1760_devicedevflags、导出 isp1760_set_pullup

编译选项:USB_ISP1760_HOST_ROLEUSB_ISP1760_HCDGADGET_ROLEUSB_ISP1761_UDCDUAL_ROLE → 二者都选。


3. 初始化与寄存器模型(isp1760-core.c

  1. isp1760_registerdevm_kzalloc struct isp1760_device(内含 isp1760_hcd + isp1760_udc)。
  2. ISP1760_FLAG_ISP1763 选用 1763176xregmap_configREG_FIELD 表(1763 的 DC 为 8-bit 寄存器 / 16-bit 值 等不同形态)。
  3. devm_ioremap_resource 单一 mem 窗口;HCDC 各自 devm_regmap_init_mmio(基地址相同,访问特性不同)。
  4. isp1760_init_core:可选 GPIO 复位软件复位所有模块HW Mode Control(数据线宽度、模拟/数字过流、DREQ/DACK、中断 电平/边沿)。
  5. ISP1761:临时关闭 DC 全局中断、打开 HW_COMN_IRQISP176x_HC_OTG_CTRLISP1760_FLAG_PERIPHERAL_EN主机(VBUS 驱动)外设(关闭 OTG、下拉控制) 间写死一路(注释:真正 OTG 待完成)。
  6. 若编译 HCDisp1760_hcd_register;若芯片支持且编译 UDCisp1760_udc_register(失败则撤销 HCD)。

片内 RAM 布局isp176x_memory_conf(约 60 KB,多块 256/1024/8192)与 isp1763_memory_conf(约 20 KB)供 HCD 做 slot/payload 管理。


4. 主机实现要点(isp1760-hcd.c

  • 对接 usbcore 的标准入口:urb_enqueueroot hub、端口状态位等。
  • 调度核心为硬件 PTDstruct ptd,多 DW 编码长度、设备地址、PID、分组类型、split、数据区偏移、toggle/ping/NAK/CERR、ACTIVE/错误位等),写入芯片 ISO/INT/ATL 银行等偏移(如 PTD_OFFSETATL_PTD_OFFSETPAYLOAD_OFFSET)。
  • 软件侧 isp1760_qh(每活跃 endpoint)挂 isp1760_qtd 链表,状态机 QTD_ENQUEUEDQTD_PAYLOAD_ALLOCQTD_XFER_STARTED → complete/retire
  • 文件头注释:ISO、OTG 不可用;中断缺省 低电平有效

5. 设备实现要点(isp1760-udc.c

  • usb_gadget/usb_ep,请求 isp1760_request
  • 通过 regmap_field 读写 DC 寄存器;必要时 regmap_raw_* 访问 FIFO。
  • isp1760_set_pullup(core 导出)控制 D+ 上拉
  • VBUS:定时器周期 ISP1760_VBUS_POLL_INTERVAL 轮询(非 OTG HNP 完整实现)。

6. 平台绑定(isp1760-if.c

  • OFnxp,usb-isp1760 / isp1761 / isp1763bus-widthusb-dr-modeperipheral 时置 ISP1760_FLAG_PERIPHERAL_ENanalog-ocdack-polaritydreq-polarity 等。
  • PCI:针对 PLX 9054 一类表项,检测 scratch、配置 PLX 中断路由isp1760_register 使用 resource[3] 映射区。

7. 小结

维度 内容
对上接口 Host:usb_hcd;Device(1761/1763):usb_gadget
传输 控制/批量/中断为主;ISO 未支持
数据通路 PTD + 片内 payload RAM;非典型 PCI DMA 形态
双角色 主要通过 DT + PERIPHERAL_EN 与寄存器固定 HC/DC 角色;非完整 OTG

调试时可结合 debugfs(HCD 内可选)与 usbmon(主机 URB)观察枚举与传输;移植新板级重点核对 bus-width、中断极性、复位 GPIO、usb-dr-mode

文章互动

阅读 --

留言

0 条留言

正在加载留言…