Linux device driver Linux设备树到硬件映射

Linux device driver Linux设备树到硬件映射,linux-device-driver,embedded-linux,device-driver,Linux Device Driver,Embedded Linux,Device Driver,我想知道设备中的一些具体细节如何与硬件相关,以及在哪里可以找到这些信息,如原理图、数据表等 usb节点的示例如下所示: 在上面的图片中,我想知道您是如何在硬件上找到CLK_BUS_OHCI2或RST_BUS_EHCI2的。如果您转到include文件,您会得到一个值CLK_BUS_OHCI2=39,但我不确定这与实际硬件有何关系。如哪个寄存器或哪个引脚等。就我在下面的结构中所知 ehci2: usb@01c1c000 { compatible = "allwinner,

我想知道设备中的一些具体细节如何与硬件相关,以及在哪里可以找到这些信息,如原理图、数据表等

usb节点的示例如下所示:


在上面的图片中,我想知道您是如何在硬件上找到CLK_BUS_OHCI2或RST_BUS_EHCI2的。如果您转到include文件,您会得到一个值CLK_BUS_OHCI2=39,但我不确定这与实际硬件有何关系。如哪个寄存器或哪个引脚等。

就我在下面的结构中所知

ehci2: usb@01c1c000 {
            compatible = "allwinner,sun8i-h3-ehci", "generic-ehci";
            reg = <0x01c1c000 0x100>;
            interrupts = <GIC_SPI 76 IRQ_TYPE_LEVEL_HIGH>;
            clocks = <&ccu CLK_BUS_EHCI2>, <&ccu CLK_BUS_OHCI2>;
            resets = <&ccu RST_BUS_EHCI2>, <&ccu RST_BUS_OHCI2>;
            phys = <&usbphy 2>;
            phy-names = "usb";
            status = "disabled";
        };
在上述结构中,有多个时钟源输出,因此上述USB控制器应使用时钟源39获取时钟输入,注意时钟单元=;表示多个时钟输出和时钟单元=;用于单时钟输出。
ccu结构只是一个例子。

好吧,据我在下面的结构中所知

ehci2: usb@01c1c000 {
            compatible = "allwinner,sun8i-h3-ehci", "generic-ehci";
            reg = <0x01c1c000 0x100>;
            interrupts = <GIC_SPI 76 IRQ_TYPE_LEVEL_HIGH>;
            clocks = <&ccu CLK_BUS_EHCI2>, <&ccu CLK_BUS_OHCI2>;
            resets = <&ccu RST_BUS_EHCI2>, <&ccu RST_BUS_OHCI2>;
            phys = <&usbphy 2>;
            phy-names = "usb";
            status = "disabled";
        };
在上述结构中,有多个时钟源输出,因此上述USB控制器应使用时钟源39获取时钟输入,注意时钟单元=;表示多个时钟输出和时钟单元=;用于单时钟输出。
ccu结构只是一个例子。

现在我正在使用一个类似的平台Allwinner A64,我试图了解DTS、时钟和复位是如何工作的。幸运的是,你的问题出现在搜索引擎结果中。Gaurav Pathak的回答为我澄清了大部分事情,我想从他的观点出发,再延伸一点,帮助那些试图填补DTS和硬件之间的空白的人

我将参考和

uart4和ehci2在节点定义方式上有相似之处;例如,我们有时钟和复位的属性。但ccu时钟输出使用的实现方式不同

让我们仔细看看uart4

但是什么是公共汽车?让我看看

定义为。这就是它的样子:

静态SUNXI_CCU_GATEbus_uart4_clk,总线-uart4,apb2, 0x06c,位20,0; SUNXI_CCU_门是一个宏,用于管理时钟控制单元的选通寄存器。第4个参数0x06c表示寄存器偏移量,第5个参数位20表示第n位20,在这种情况下,将0x06c的偏移量调整为驱动总线uart4时钟

同样的情况也适用于resets属性。举例说明;只需在Linux内核源代码中搜索RST_总线_UART4和0x2d8,然后查看A64用户手册第142页的底部


我希望没有太多的废话。。。如果我错了,请纠正我。

现在我正在使用一个类似的平台Allwinner A64,我试图了解DTS、时钟和重置是如何工作的。幸运的是,你的问题出现在搜索引擎结果中。Gaurav Pathak的回答为我澄清了大部分事情,我想从他的观点出发,再延伸一点,帮助那些试图填补DTS和硬件之间的空白的人

我将参考和

uart4和ehci2在节点定义方式上有相似之处;例如,我们有时钟和复位的属性。但ccu时钟输出使用的实现方式不同

让我们仔细看看uart4

但是什么是公共汽车?让我看看

定义为。这就是它的样子:

静态SUNXI_CCU_GATEbus_uart4_clk,总线-uart4,apb2, 0x06c,位20,0; SUNXI_CCU_门是一个宏,用于管理时钟控制单元的选通寄存器。第4个参数0x06c表示寄存器偏移量,第5个参数位20表示第n位20,在这种情况下,将0x06c的偏移量调整为驱动总线uart4时钟

同样的情况也适用于resets属性。举例说明;只需在Linux内核源代码中搜索RST_总线_UART4和0x2d8,然后查看A64用户手册第142页的底部

我希望没有太多的废话。。。如果我错了,请纠正我

uart4: serial@1c29000 {
        compatible = "snps,dw-apb-uart";
        reg = <0x01c29000 0x400>;
        interrupts = <GIC_SPI 4 IRQ_TYPE_LEVEL_HIGH>;
        reg-shift = <2>;
        reg-io-width = <4>;
        clocks = <&ccu CLK_BUS_UART4>;
        resets = <&ccu RST_BUS_UART4>;
        status = "disabled";
    };
<&ccu CLK_BUS_UART4>