• RK3568 USB驱动开发


    一.USB的DTS配置说明

    1.USB 2.0 控制器 DTS

    1.1 USB 2.0 Host 控制器 DTS

    USB 2.0 Host0 控制器 (EHCI & OHCI) 的DTS为例:

    其中,EHCI 控制器的 compatible 固定为 “generic-ehci”,OHCI 控制器的 compatible 固定为 “genericohci”。并且,EHCI 和 OHCI 复用同样的 clocks 和 phys。属性 “power-domains” 并不是每种芯片都需要配 置,只有当芯片的 USB 2.0 Host 控制器支持 power-domains 功能时,才需要配置该属性。

    1. usb_host0_ehci: usb@fe380000 {
    2. compatible = "generic-ehci";
    3. reg = <0x0 0xfe380000 0x0 0x20000>;
    4. interrupts = <GIC_SPI 26 IRQ_TYPE_LEVEL_HIGH 0>;
    5. clocks = <&cru HCLK_HOST0>, <&cru HCLK_HOST0_ARB>,
    6. <&cru SCLK_USBPHY0_480M_SRC>;
    7. clock-names = "hclk_host0", "hclk_host0_arb", "usbphy0_480m";
    8. phys = <&u2phy0_host>;
    9. phy-names = "usb";
    10. power-domains = <&power RK356x_PD_PERIHP>;
    11. status = "disabled";
    12. };
    13. usb_host0_ohci: usb@fe3a0000 {
    14. compatible = "generic-ohci";
    15. reg = <0x0 0xfe3a0000 0x0 0x20000>;
    16. interrupts = <GIC_SPI 28 IRQ_TYPE_LEVEL_HIGH 0>;
    17. clocks = <&cru HCLK_HOST0>, <&cru HCLK_HOST0_ARB>,
    18. <&cru SCLK_USBPHY0_480M_SRC>;
    19. clock-names = "hclk_host0", "hclk_host0_arb", "usbphy0_480m";
    20. phys = <&u2phy0_host>;
    21. phy-names = "usb";
    22. power-domains = <&power RK356x、_PD_PERIHP>;
    23. status = "disabled";
    24. };

    RK356x HOST2 第DTS节点名称定义如下:

     RK356x HOST2 DTS 配置如下:

    1. &u2phy1_otg {
    2.       phy-supply = <&vcc5v0_host>;
    3.       status = "okay";
    4. };
    5. &usb2phy1 {
    6.       status = "okay";
    7. };
    8. &usb_host0_ehci {
    9.       status = "okay";
    10. };
    11. &usb_host0_ohci {
    12.       status = "okay";
    13. };

    2.USB 2.0 OTG 控制器 DTS

    2.1.USB 2.0 OTG DTS (适配 dwc2 驱动):

    1. usb20_otg: usb@ff580000 {
    2. compatible = "rockchip,rk3328-usb", "rockchip,rk3066-usb",
    3. "snps,dwc2";
    4. reg = <0x0 0xff580000 0x0 0x40000>;
    5. interrupts = <GIC_SPI 23 IRQ_TYPE_LEVEL_HIGH>;
    6. clocks = <&cru HCLK_OTG>, <&cru HCLK_OTG_PMU>;
    7. clock-names = "otg", "otg_pmu";
    8. dr_mode = "otg";
    9. g-np-tx-fifo-size = <16>;
    10. g-rx-fifo-size = <275>;
    11. g-tx-fifo-size = <256 128 128 64 64 32>;
    12. g-use-dma;
    13. phys = <&u2phy_otg>;
    14. phy-names = "usb2-phy";
    15. status = "disabled";
    16. };

    dr_mode:必须配置为 "host", "peripheral" 或者 "otg";

    g-rx-fifo-size:配置 Gadget mode 的 rx fifo 大小;

    g-np-tx-fifo-size:配置 Gadget mode 的 non-periodic tx fifo 大小;

    g-tx-fifo-size:配置 Gadget mode 的每个 IN 端点的 tx fifo 大小(端点 0 除外);

    g-use-dma:使能 Gadget 驱动使用 DMA 传输;

    phys:配置 PHY 节点;

    phy-names: 必须配置为 "usb2-phy".

    二.USB 3.0 控制器 DTS

    1.USB 3.0 Host 控制器 DTS

    USB 3.0 Host 控制器为 xHCI,集成于 DWC3 OTG IP 中,所以不用单独配置 dts,只需要配置 DWC3 节 点,并且设置 DWC3 的 dr_mode 属性为 dr_mode = "otg"或者 dr_mode = "host",就可以使能 xHCI 控制 器。

    2.USB 3.0 OTG 控制器 DTS

    1. usbdrd3_0: usb0 {
    2. compatible = "rockchip,rk3399-dwc3";
    3. clocks = <&cru SCLK_USB3OTG0_REF>, <&cru SCLK_USB3OTG0_SUSPEND>,
    4. <&cru ACLK_USB3OTG0>, <&cru ACLK_USB3_GRF>;
    5. clock-names = "ref_clk", "suspend_clk",
    6. "bus_clk", "grf_clk";
    7. power-domains = <&power RK3399_PD_USB3>;
    8. resets = <&cru SRST_A_USB3_OTG0>;
    9. reset-names = "usb3-otg";
    10. #address-cells = <2>;
    11. #size-cells = <2>;
    12. ranges;
    13. status = "disabled";
    14. usbdrd_dwc3_0: dwc3@fe800000 {
    15. compatible = "snps,dwc3";
    16. reg = <0x0 0xfe800000 0x0 0x100000>;
    17. interrupts = <GIC_SPI 105 IRQ_TYPE_LEVEL_HIGH 0>;
    18. dr_mode = "otg";
    19. phys = <&u2phy0_otg>, <&tcphy0_usb3>;
    20. phy-names = "usb2-phy", "usb3-phy";
    21. phy_type = "utmi_wide";
    22. snps,dis_enblslpm_quirk;
    23. snps,dis-u2-freeclk-exists-quirk;
    24. snps,dis_u2_susphy_quirk;
    25. snps,dis-del-phy-power-chg-quirk;
    26. snps,tx-ipgap-linecheck-dis-quirk;
    27. snps,xhci-slow-suspend-quirk;
    28. snps,xhci-trb-ent-quirk;
    29. snps,usb3-warm-reset-on-resume-quirk;
    30. status = "disabled"; };
    31. };

    USB 3.0 OTG DTS 包含了父节点 “usbdrd3_0” 和子节点 “usbdrd_dwc3_0”。其中,除了 RK3328/RK3228H外,所有支持 DWC3 控制器的芯片,父节点的 compatible 都要加上 “rockchip,rk3399-dwc3”。所有芯片的 子节点 compatible 都配置为 “snps,dwc3”。父节点的作用是,配置芯片级相关的属性,如:clocks,power-domains,reset。子节点的作用是,配置控制器相关的属性,其中的 quirk 属性,适用于所有芯片 的 DWC3 控制器。

  • 相关阅读:
    【LeetCode】Day135-课程表 I&II
    Spring Boot + EasyExcel导入导出,简直太好用了!
    Redis 多线程操作同一个Key如何保证一致性?
    ggpicrust2包:简化和直观化微生物功能预测分析
    MySQL表的增删查改
    04-React脚手架
    TypeScript免费视频图文教程(2W字)
    java毕业设计电影订票系统Mybatis+系统+数据库+调试部署
    MySQL 篇
    数据结构之B数
  • 原文地址:https://blog.csdn.net/weixin_49303682/article/details/133978126