4. 추천 학습 순서 (Step by Step Code)

4. 추천 학습 순서 (Step by Step Code)

 

1) 코드 분석 전

 

사전 이해도

  • 네트워크 C 프로그래밍 중급

앞으로 익숙해져야 할 툴

  • Linux bash shell
  • GCC
  • Git
  • Vim

코드 분석 전 읽어야 할 이론서

  • 간단한 커널 이론서
  • ARM 및 ARM64 아키텍처에 관한 이론서

2) 어셈블리 코드 분석 시작

 


3) C 코드 분석 시작

 

 


4) 아키텍처 설정

 

 


5) 페이징 및 메모리 설정

 

 


6) 클럭, 타이머 및 인터럽트

 

 


7) 스케줄러, mutex 및 RCU

 

 


8) 디바이스 드라이버

 

 


9. 네트워크 시스템 및 파일 시스템

각자 도생 ^^;

 

DTB – 라즈베리파이 4b

<kernel v5.15>

DTB – 라즈베리파이 4b

사용한 디바이스 트리 파일은 다음과 같고, 괄호안의 번호 순서대로 보여준다.

  • bcm2711-rpi-4-b.dts (6~7)
    •  bcm2711.dtsi (2)
      • bcm283x.dtsi (1)
    • bcm2711-rpi.dtsi (4)
      • bcm2835-rpi.dtsi (3)
    • bcm283x-rpi-usb-peripheral.dtsi (5)

 

(1) bcm283x.dtsi

arch/arm/boot/dts/bcm283x.dtsi

#include <dt-bindings/pinctrl/bcm2835.h>
#include <dt-bindings/clock/bcm2835.h>
#include <dt-bindings/clock/bcm2835-aux.h>
#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/interrupt-controller/irq.h>
#include <dt-bindings/soc/bcm2835-pm.h>

/* firmware-provided startup stubs live here, where the secondary CPUs are
 * spinning.
 */
/memreserve/ 0x00000000 0x00001000;

/* This include file covers the common peripherals and configuration between
 * bcm2835 and bcm2836 implementations, leaving the CPU configuration to
 * bcm2835.dtsi and bcm2836.dtsi.
 */

/ {
        compatible = "brcm,bcm2835";
        model = "BCM2835";
        #address-cells = <1>;
        #size-cells = <1>;

        aliases {
                serial0 = &uart0;
                serial1 = &uart1;
        };

        chosen {
                stdout-path = "serial0:115200n8";
        };

        rmem: reserved-memory {
                #address-cells = <1>;
                #size-cells = <1>;
                ranges;

                cma: linux,cma {
                        compatible = "shared-dma-pool";
                        size = <0x4000000>; /* 64MB */
                        reusable;
                        linux,cma-default;
                };
        };

        thermal-zones {
                cpu_thermal: cpu-thermal {
                        polling-delay-passive = <0>;
                        polling-delay = <1000>;

                        trips {
                                cpu-crit {
                                        temperature     = <90000>;
                                        hysteresis      = <0>;
                                        type            = "critical";
                                };
                        };

                        cooling-maps {
                        };
                };
        };

        soc {
                compatible = "simple-bus";
                #address-cells = <1>;
                #size-cells = <1>;

                system_timer: timer@7e003000 {
                        compatible = "brcm,bcm2835-system-timer";
                        reg = <0x7e003000 0x1000>;
                        interrupts = <1 0>, <1 1>, <1 2>, <1 3>;
                        /* This could be a reference to BCM2835_CLOCK_TIMER,
                         * but we don't have the driver using the common clock
                         * support yet.
                         */
                        clock-frequency = <1000000>;
                };

                txp: txp@7e004000 {
                        compatible = "brcm,bcm2835-txp";
                        reg = <0x7e004000 0x20>;
                        interrupts = <1 11>;
                };

                clocks: cprman@7e101000 {
                        compatible = "brcm,bcm2835-cprman";
                        #clock-cells = <1>;
                        reg = <0x7e101000 0x2000>;

                        /* CPRMAN derives almost everything from the
                         * platform's oscillator.  However, the DSI
                         * pixel clocks come from the DSI analog PHY.
                         */
                        clocks = <&clk_osc>,
                                <&dsi0 0>, <&dsi0 1>, <&dsi0 2>,
                                <&dsi1 0>, <&dsi1 1>, <&dsi1 2>;
                };

                mailbox: mailbox@7e00b880 {
                        compatible = "brcm,bcm2835-mbox";
                        reg = <0x7e00b880 0x40>;
                        interrupts = <0 1>;
                        #mbox-cells = <0>;
                };

                gpio: gpio@7e200000 {
                        compatible = "brcm,bcm2835-gpio";
                        reg = <0x7e200000 0xb4>;
                        /*
                         * The GPIO IP block is designed for 3 banks of GPIOs.
                         * Each bank has a GPIO interrupt for itself.
                         * There is an overall "any bank" interrupt.
                         * In order, these are GIC interrupts 17, 18, 19, 20.
                         * Since the BCM2835 only has 2 banks, the 2nd bank
                         * interrupt output appears to be mirrored onto the
                         * 3rd bank's interrupt signal.
                         * So, a bank0 interrupt shows up on 17, 20, and
                         * a bank1 interrupt shows up on 18, 19, 20!
                         */
                        interrupts = <2 17>, <2 18>, <2 19>, <2 20>;

                        gpio-controller;
                        #gpio-cells = <2>;

                        interrupt-controller;
                        #interrupt-cells = <2>;

                        /* Defines common pin muxing groups
                         *
                         * While each pin can have its mux selected
                         * for various functions individually, some
                         * groups only make sense to switch to a
                         * particular function together.
                         */
                        dpi_gpio0: dpi_gpio0 {
                                brcm,pins = <0 1 2 3 4 5 6 7 8 9 10 11
                                             12 13 14 15 16 17 18 19
                                             20 21 22 23 24 25 26 27>;
                                brcm,function = <BCM2835_FSEL_ALT2>;
                        };
                        emmc_gpio22: emmc_gpio22 {
                                brcm,pins = <22 23 24 25 26 27>;
                                brcm,function = <BCM2835_FSEL_ALT3>;
                        };
                        emmc_gpio34: emmc_gpio34 {
                                brcm,pins = <34 35 36 37 38 39>;
                                brcm,function = <BCM2835_FSEL_ALT3>;
                                brcm,pull = <BCM2835_PUD_OFF
                                             BCM2835_PUD_UP
                                             BCM2835_PUD_UP
                                             BCM2835_PUD_UP
                                             BCM2835_PUD_UP
                                             BCM2835_PUD_UP>;
                        };
                        emmc_gpio48: emmc_gpio48 {
                                brcm,pins = <48 49 50 51 52 53>;
                                brcm,function = <BCM2835_FSEL_ALT3>;
                        };

                        gpclk0_gpio4: gpclk0_gpio4 {
                                brcm,pins = <4>;
                                brcm,function = <BCM2835_FSEL_ALT0>;
                        };
                        gpclk1_gpio5: gpclk1_gpio5 {
                                brcm,pins = <5>;
                                brcm,function = <BCM2835_FSEL_ALT0>;
                        };
                        gpclk1_gpio42: gpclk1_gpio42 {
                                brcm,pins = <42>;
                                brcm,function = <BCM2835_FSEL_ALT0>;
                        };
                        gpclk1_gpio44: gpclk1_gpio44 {
                                brcm,pins = <44>;
                                brcm,function = <BCM2835_FSEL_ALT0>;
                        };
                        gpclk2_gpio6: gpclk2_gpio6 {
                                brcm,pins = <6>;
                                brcm,function = <BCM2835_FSEL_ALT0>;
                        };
                        gpclk2_gpio43: gpclk2_gpio43 {
                                brcm,pins = <43>;
                                brcm,function = <BCM2835_FSEL_ALT0>;
                                brcm,pull = <BCM2835_PUD_OFF>;
                        };

                        i2c0_gpio0: i2c0_gpio0 {
                                brcm,pins = <0 1>;
                                brcm,function = <BCM2835_FSEL_ALT0>;
                        };
                        i2c0_gpio28: i2c0_gpio28 {
                                brcm,pins = <28 29>;
                                brcm,function = <BCM2835_FSEL_ALT0>;
                        };
                        i2c0_gpio44: i2c0_gpio44 {
                                brcm,pins = <44 45>;
                                brcm,function = <BCM2835_FSEL_ALT1>;
                        };
                        i2c1_gpio2: i2c1_gpio2 {
                                brcm,pins = <2 3>;
                                brcm,function = <BCM2835_FSEL_ALT0>;
                        };
                        i2c1_gpio44: i2c1_gpio44 {
                                brcm,pins = <44 45>;
                                brcm,function = <BCM2835_FSEL_ALT2>;
                        };

                        jtag_gpio22: jtag_gpio22 {
                                brcm,pins = <22 23 24 25 26 27>;
                                brcm,function = <BCM2835_FSEL_ALT4>;
                        };

                        pcm_gpio18: pcm_gpio18 {
                                brcm,pins = <18 19 20 21>;
                                brcm,function = <BCM2835_FSEL_ALT0>;
                        };
                        pcm_gpio28: pcm_gpio28 {
                                brcm,pins = <28 29 30 31>;
                                brcm,function = <BCM2835_FSEL_ALT2>;
                        };

                        sdhost_gpio48: sdhost_gpio48 {
                                brcm,pins = <48 49 50 51 52 53>;
                                brcm,function = <BCM2835_FSEL_ALT0>;
                        };

                        spi0_gpio7: spi0_gpio7 {
                                brcm,pins = <7 8 9 10 11>;
                                brcm,function = <BCM2835_FSEL_ALT0>;
                        };
                        spi0_gpio35: spi0_gpio35 {
                                brcm,pins = <35 36 37 38 39>;
                                brcm,function = <BCM2835_FSEL_ALT0>;
                        };
                        spi1_gpio16: spi1_gpio16 {
                                brcm,pins = <16 17 18 19 20 21>;
                                brcm,function = <BCM2835_FSEL_ALT4>;
                        };
                        spi2_gpio40: spi2_gpio40 {
                                brcm,pins = <40 41 42 43 44 45>;
                                brcm,function = <BCM2835_FSEL_ALT4>;
                        };

                        uart0_gpio14: uart0_gpio14 {
                                brcm,pins = <14 15>;
                                brcm,function = <BCM2835_FSEL_ALT0>;
                        };
                        /* Separate from the uart0_gpio14 group
                         * because it conflicts with spi1_gpio16, and
                         * people often run uart0 on the two pins
                         * without flow control.
                         */
                        uart0_ctsrts_gpio16: uart0_ctsrts_gpio16 {
                                brcm,pins = <16 17>;
                                brcm,function = <BCM2835_FSEL_ALT3>;
                        };
                        uart0_ctsrts_gpio30: uart0_ctsrts_gpio30 {
                                brcm,pins = <30 31>;
                                brcm,function = <BCM2835_FSEL_ALT3>;
                                brcm,pull = <BCM2835_PUD_UP BCM2835_PUD_OFF>;
                        };
                        uart0_gpio32: uart0_gpio32 {
                                brcm,pins = <32 33>;
                                brcm,function = <BCM2835_FSEL_ALT3>;
                                brcm,pull = <BCM2835_PUD_OFF BCM2835_PUD_UP>;
                        };
                        uart0_gpio36: uart0_gpio36 {
                                brcm,pins = <36 37>;
                                brcm,function = <BCM2835_FSEL_ALT2>;
                        };
                        uart0_ctsrts_gpio38: uart0_ctsrts_gpio38 {
                                brcm,pins = <38 39>;
                                brcm,function = <BCM2835_FSEL_ALT2>;
                        };

                        uart1_gpio14: uart1_gpio14 {
                                brcm,pins = <14 15>;
                                brcm,function = <BCM2835_FSEL_ALT5>;
                        };
                        uart1_ctsrts_gpio16: uart1_ctsrts_gpio16 {
                                brcm,pins = <16 17>;
                                brcm,function = <BCM2835_FSEL_ALT5>;
                        };
                        uart1_gpio32: uart1_gpio32 {
                                brcm,pins = <32 33>;
                                brcm,function = <BCM2835_FSEL_ALT5>;
                        };
                        uart1_ctsrts_gpio30: uart1_ctsrts_gpio30 {
                                brcm,pins = <30 31>;
                                brcm,function = <BCM2835_FSEL_ALT5>;
                        };
                        uart1_gpio40: uart1_gpio40 {
                                brcm,pins = <40 41>;
                                brcm,function = <BCM2835_FSEL_ALT5>;
                        };
                        uart1_ctsrts_gpio42: uart1_ctsrts_gpio42 {
                                brcm,pins = <42 43>;
                                brcm,function = <BCM2835_FSEL_ALT5>;
                        };
                };

                uart0: serial@7e201000 {
                        compatible = "arm,pl011", "arm,primecell";
                        reg = <0x7e201000 0x200>;
                        interrupts = <2 25>;
                        clocks = <&clocks BCM2835_CLOCK_UART>,
                                 <&clocks BCM2835_CLOCK_VPU>;
                        clock-names = "uartclk", "apb_pclk";
                        arm,primecell-periphid = <0x00241011>;
                };

                sdhost: mmc@7e202000 {
                        compatible = "brcm,bcm2835-sdhost";
                        reg = <0x7e202000 0x100>;
                        interrupts = <2 24>;
                        clocks = <&clocks BCM2835_CLOCK_VPU>;
                        status = "disabled";
                };

                i2s: i2s@7e203000 {
                        compatible = "brcm,bcm2835-i2s";
                        reg = <0x7e203000 0x24>;
                        clocks = <&clocks BCM2835_CLOCK_PCM>;
                        status = "disabled";
                };

                spi: spi@7e204000 {
                        compatible = "brcm,bcm2835-spi";
                        reg = <0x7e204000 0x200>;
                        interrupts = <2 22>;
                        clocks = <&clocks BCM2835_CLOCK_VPU>;
                        #address-cells = <1>;
                        #size-cells = <0>;
                        status = "disabled";
                };

                i2c0: i2c@7e205000 {
                        compatible = "brcm,bcm2835-i2c";
                        reg = <0x7e205000 0x200>;
                        interrupts = <2 21>;
                        clocks = <&clocks BCM2835_CLOCK_VPU>;
                        #address-cells = <1>;
                        #size-cells = <0>;
                        status = "disabled";
                };

                dpi: dpi@7e208000 {
                        compatible = "brcm,bcm2835-dpi";
                        reg = <0x7e208000 0x8c>;
                        clocks = <&clocks BCM2835_CLOCK_VPU>,
                                 <&clocks BCM2835_CLOCK_DPI>;
                        clock-names = "core", "pixel";
                        #address-cells = <1>;
                        #size-cells = <0>;
                        status = "disabled";
                };

                dsi0: dsi@7e209000 {
                        compatible = "brcm,bcm2835-dsi0";
                        reg = <0x7e209000 0x78>;
                        interrupts = <2 4>;
                        #address-cells = <1>;
                        #size-cells = <0>;
                        #clock-cells = <1>;

                        clocks = <&clocks BCM2835_PLLA_DSI0>,
                                 <&clocks BCM2835_CLOCK_DSI0E>,
                                 <&clocks BCM2835_CLOCK_DSI0P>;
                        clock-names = "phy", "escape", "pixel";

                        clock-output-names = "dsi0_byte",
                                             "dsi0_ddr2",
                                             "dsi0_ddr";

                        status = "disabled";
                };

                aux: aux@7e215000 {
                        compatible = "brcm,bcm2835-aux";
                        #clock-cells = <1>;
                        reg = <0x7e215000 0x8>;
                        clocks = <&clocks BCM2835_CLOCK_VPU>;
                };

                uart1: serial@7e215040 {
                        compatible = "brcm,bcm2835-aux-uart";
                        reg = <0x7e215040 0x40>;
                        interrupts = <1 29>;
                        clocks = <&aux BCM2835_AUX_CLOCK_UART>;
                        status = "disabled";
                };

                spi1: spi@7e215080 {
                        compatible = "brcm,bcm2835-aux-spi";
                        reg = <0x7e215080 0x40>;
                        interrupts = <1 29>;
                        clocks = <&aux BCM2835_AUX_CLOCK_SPI1>;
                        #address-cells = <1>;
                        #size-cells = <0>;
                        status = "disabled";
                };

                spi2: spi@7e2150c0 {
                        compatible = "brcm,bcm2835-aux-spi";
                        reg = <0x7e2150c0 0x40>;
                        interrupts = <1 29>;
                        clocks = <&aux BCM2835_AUX_CLOCK_SPI2>;
                        #address-cells = <1>;
                        #size-cells = <0>;
                        status = "disabled";
                };

                pwm: pwm@7e20c000 {
                        compatible = "brcm,bcm2835-pwm";
                        reg = <0x7e20c000 0x28>;
                        clocks = <&clocks BCM2835_CLOCK_PWM>;
                        assigned-clocks = <&clocks BCM2835_CLOCK_PWM>;
                        assigned-clock-rates = <10000000>;
                        #pwm-cells = <2>;
                        status = "disabled";
                };

                sdhci: mmc@7e300000 {
                        compatible = "brcm,bcm2835-sdhci";
                        reg = <0x7e300000 0x100>;
                        interrupts = <2 30>;
                        clocks = <&clocks BCM2835_CLOCK_EMMC>;
                        status = "disabled";
                };

                hvs@7e400000 {
                        compatible = "brcm,bcm2835-hvs";
                        reg = <0x7e400000 0x6000>;
                        interrupts = <2 1>;
                };

                dsi1: dsi@7e700000 {
                        compatible = "brcm,bcm2835-dsi1";
                        reg = <0x7e700000 0x8c>;
                        interrupts = <2 12>;
                        #address-cells = <1>;
                        #size-cells = <0>;
                        #clock-cells = <1>;

                        clocks = <&clocks BCM2835_PLLD_DSI1>,
                                 <&clocks BCM2835_CLOCK_DSI1E>,
                                 <&clocks BCM2835_CLOCK_DSI1P>;
                        clock-names = "phy", "escape", "pixel";

                        clock-output-names = "dsi1_byte",
                                             "dsi1_ddr2",
                                             "dsi1_ddr";

                        status = "disabled";
                };

                i2c1: i2c@7e804000 {
                        compatible = "brcm,bcm2835-i2c";
                        reg = <0x7e804000 0x1000>;
                        interrupts = <2 21>;
                        clocks = <&clocks BCM2835_CLOCK_VPU>;
                        #address-cells = <1>;
                        #size-cells = <0>;
                        status = "disabled";
                };

                usb: usb@7e980000 {
                        compatible = "brcm,bcm2835-usb";
                        reg = <0x7e980000 0x10000>;
                        interrupts = <1 9>;
                        #address-cells = <1>;
                        #size-cells = <0>;
                        clocks = <&clk_usb>;
                        clock-names = "otg";
                        phys = <&usbphy>;
                        phy-names = "usb2-phy";
                };
        };

        clocks {
                /* The oscillator is the root of the clock tree. */
                clk_osc: clk-osc {
                        compatible = "fixed-clock";
                        #clock-cells = <0>;
                        clock-output-names = "osc";
                        clock-frequency = <19200000>;
                };

                clk_usb: clk-usb {
                        compatible = "fixed-clock";
                        #clock-cells = <0>;
                        clock-output-names = "otg";
                        clock-frequency = <480000000>;
                };
        };

        usbphy: phy {
                compatible = "usb-nop-xceiv";
                #phy-cells = <0>;
        };
};

 

(2) bcm2711.dtsi

arch/arm/boot/dts/bcm2711.dtsi

// SPDX-License-Identifier: GPL-2.0
#include "bcm283x.dtsi"

#include <dt-bindings/interrupt-controller/arm-gic.h>
#include <dt-bindings/soc/bcm2835-pm.h>

/ {
        compatible = "brcm,bcm2711";

        #address-cells = <2>;
        #size-cells = <1>;

        interrupt-parent = <&gicv2>;

        vc4: gpu {
                compatible = "brcm,bcm2711-vc5";
                status = "disabled";
        };

        clk_27MHz: clk-27M {
                #clock-cells = <0>;
                compatible = "fixed-clock";
                clock-frequency = <27000000>;
                clock-output-names = "27MHz-clock";
        };

        clk_108MHz: clk-108M {
                #clock-cells = <0>;
                compatible = "fixed-clock";
                clock-frequency = <108000000>;
                clock-output-names = "108MHz-clock";
        };

        soc {
                /*
                 * Defined ranges:
                 *   Common BCM283x peripherals
                 *   BCM2711-specific peripherals
                 *   ARM-local peripherals
                 */
                ranges = <0x7e000000  0x0 0xfe000000  0x01800000>,
                         <0x7c000000  0x0 0xfc000000  0x02000000>,
                         <0x40000000  0x0 0xff800000  0x00800000>;
                /* Emulate a contiguous 30-bit address range for DMA */
                dma-ranges = <0xc0000000  0x0 0x00000000  0x40000000>;

                /*
                 * This node is the provider for the enable-method for
                 * bringing up secondary cores.
                 */
                local_intc: local_intc@40000000 {
                        compatible = "brcm,bcm2836-l1-intc";
                        reg = <0x40000000 0x100>;
                };

                gicv2: interrupt-controller@40041000 {
                        interrupt-controller;
                        #interrupt-cells = <3>;
                        compatible = "arm,gic-400";
                        reg =   <0x40041000 0x1000>,
                                <0x40042000 0x2000>,
                                <0x40044000 0x2000>,
                                <0x40046000 0x2000>;
                        interrupts = <GIC_PPI 9 (GIC_CPU_MASK_SIMPLE(4) |
                                                 IRQ_TYPE_LEVEL_HIGH)>;
                };

                avs_monitor: avs-monitor@7d5d2000 {
                        compatible = "brcm,bcm2711-avs-monitor",
                                     "syscon", "simple-mfd";
                        reg = <0x7d5d2000 0xf00>;

                        thermal: thermal {
                                compatible = "brcm,bcm2711-thermal";
                                #thermal-sensor-cells = <0>;
                        };
                };

                dma: dma@7e007000 {
                        compatible = "brcm,bcm2835-dma";
                        reg = <0x7e007000 0xb00>;
                        interrupts = <GIC_SPI 80 IRQ_TYPE_LEVEL_HIGH>,
                                     <GIC_SPI 81 IRQ_TYPE_LEVEL_HIGH>,
                                     <GIC_SPI 82 IRQ_TYPE_LEVEL_HIGH>,
                                     <GIC_SPI 83 IRQ_TYPE_LEVEL_HIGH>,
                                     <GIC_SPI 84 IRQ_TYPE_LEVEL_HIGH>,
                                     <GIC_SPI 85 IRQ_TYPE_LEVEL_HIGH>,
                                     <GIC_SPI 86 IRQ_TYPE_LEVEL_HIGH>,
                                     /* DMA lite 7 - 10 */
                                     <GIC_SPI 87 IRQ_TYPE_LEVEL_HIGH>,
                                     <GIC_SPI 87 IRQ_TYPE_LEVEL_HIGH>,
                                     <GIC_SPI 88 IRQ_TYPE_LEVEL_HIGH>,
                                     <GIC_SPI 88 IRQ_TYPE_LEVEL_HIGH>;
                        interrupt-names = "dma0",
                                          "dma1",
                                          "dma2",
                                          "dma3",
                                          "dma4",
                                          "dma5",
                                          "dma6",
                                          "dma7",
                                          "dma8",
                                          "dma9",
                                          "dma10";
                        #dma-cells = <1>;
                        brcm,dma-channel-mask = <0x07f5>;
                };

                pm: watchdog@7e100000 {
                        compatible = "brcm,bcm2835-pm", "brcm,bcm2835-pm-wdt";
                        #power-domain-cells = <1>;
                        #reset-cells = <1>;
                        reg = <0x7e100000 0x114>,
                              <0x7e00a000 0x24>,
                              <0x7ec11000 0x20>;
                        clocks = <&clocks BCM2835_CLOCK_V3D>,
                                 <&clocks BCM2835_CLOCK_PERI_IMAGE>,
                                 <&clocks BCM2835_CLOCK_H264>,
                                 <&clocks BCM2835_CLOCK_ISP>;
                        clock-names = "v3d", "peri_image", "h264", "isp";
                        system-power-controller;
                };

                rng@7e104000 {
                        compatible = "brcm,bcm2711-rng200";
                        reg = <0x7e104000 0x28>;
                };

                uart2: serial@7e201400 {
                        compatible = "arm,pl011", "arm,primecell";
                        reg = <0x7e201400 0x200>;
                        interrupts = <GIC_SPI 121 IRQ_TYPE_LEVEL_HIGH>;
                        clocks = <&clocks BCM2835_CLOCK_UART>,
                                 <&clocks BCM2835_CLOCK_VPU>;
                        clock-names = "uartclk", "apb_pclk";
                        arm,primecell-periphid = <0x00241011>;
                        status = "disabled";
                };

                uart3: serial@7e201600 {
                        compatible = "arm,pl011", "arm,primecell";
                        reg = <0x7e201600 0x200>;
                        interrupts = <GIC_SPI 121 IRQ_TYPE_LEVEL_HIGH>;
                        clocks = <&clocks BCM2835_CLOCK_UART>,
                                 <&clocks BCM2835_CLOCK_VPU>;
                        clock-names = "uartclk", "apb_pclk";
                        arm,primecell-periphid = <0x00241011>;
                        status = "disabled";
                };

                uart4: serial@7e201800 {
                        compatible = "arm,pl011", "arm,primecell";
                        reg = <0x7e201800 0x200>;
                        interrupts = <GIC_SPI 121 IRQ_TYPE_LEVEL_HIGH>;
                        clocks = <&clocks BCM2835_CLOCK_UART>,
                                 <&clocks BCM2835_CLOCK_VPU>;
                        clock-names = "uartclk", "apb_pclk";
                        arm,primecell-periphid = <0x00241011>;
                        status = "disabled";
                };

                uart5: serial@7e201a00 {
                        compatible = "arm,pl011", "arm,primecell";
                        reg = <0x7e201a00 0x200>;
                        interrupts = <GIC_SPI 121 IRQ_TYPE_LEVEL_HIGH>;
                        clocks = <&clocks BCM2835_CLOCK_UART>,
                                 <&clocks BCM2835_CLOCK_VPU>;
                        clock-names = "uartclk", "apb_pclk";
                        arm,primecell-periphid = <0x00241011>;
                        status = "disabled";
                };

                spi3: spi@7e204600 {
                        compatible = "brcm,bcm2835-spi";
                        reg = <0x7e204600 0x0200>;
                        interrupts = <GIC_SPI 118 IRQ_TYPE_LEVEL_HIGH>;
                        clocks = <&clocks BCM2835_CLOCK_VPU>;
                        #address-cells = <1>;
                        #size-cells = <0>;
                        status = "disabled";
                };

                spi4: spi@7e204800 {
                        compatible = "brcm,bcm2835-spi";
                        reg = <0x7e204800 0x0200>;
                        interrupts = <GIC_SPI 118 IRQ_TYPE_LEVEL_HIGH>;
                        clocks = <&clocks BCM2835_CLOCK_VPU>;
                        #address-cells = <1>;
                        #size-cells = <0>;
                        status = "disabled";
                };

                spi5: spi@7e204a00 {
                        compatible = "brcm,bcm2835-spi";
                        reg = <0x7e204a00 0x0200>;
                        interrupts = <GIC_SPI 118 IRQ_TYPE_LEVEL_HIGH>;
                        clocks = <&clocks BCM2835_CLOCK_VPU>;
                        #address-cells = <1>;
                        #size-cells = <0>;
                        status = "disabled";
                };

                spi6: spi@7e204c00 {
                        compatible = "brcm,bcm2835-spi";
                        reg = <0x7e204c00 0x0200>;
                        interrupts = <GIC_SPI 118 IRQ_TYPE_LEVEL_HIGH>;
                        clocks = <&clocks BCM2835_CLOCK_VPU>;
                        #address-cells = <1>;
                        #size-cells = <0>;
                        status = "disabled";
                };

                i2c3: i2c@7e205600 {
                        compatible = "brcm,bcm2711-i2c", "brcm,bcm2835-i2c";
                        reg = <0x7e205600 0x200>;
                        interrupts = <GIC_SPI 117 IRQ_TYPE_LEVEL_HIGH>;
                        clocks = <&clocks BCM2835_CLOCK_VPU>;
                        #address-cells = <1>;
                        #size-cells = <0>;
                        status = "disabled";
                };

                i2c4: i2c@7e205800 {
                        compatible = "brcm,bcm2711-i2c", "brcm,bcm2835-i2c";
                        reg = <0x7e205800 0x200>;
                        interrupts = <GIC_SPI 117 IRQ_TYPE_LEVEL_HIGH>;
                        clocks = <&clocks BCM2835_CLOCK_VPU>;
                        #address-cells = <1>;
                        #size-cells = <0>;
                        status = "disabled";
                };

                i2c5: i2c@7e205a00 {
                        compatible = "brcm,bcm2711-i2c", "brcm,bcm2835-i2c";
                        reg = <0x7e205a00 0x200>;
                        interrupts = <GIC_SPI 117 IRQ_TYPE_LEVEL_HIGH>;
                        clocks = <&clocks BCM2835_CLOCK_VPU>;
                        #address-cells = <1>;
                        #size-cells = <0>;
                        status = "disabled";
                };

                i2c6: i2c@7e205c00 {
                        compatible = "brcm,bcm2711-i2c", "brcm,bcm2835-i2c";
                        reg = <0x7e205c00 0x200>;
                        interrupts = <GIC_SPI 117 IRQ_TYPE_LEVEL_HIGH>;
                        clocks = <&clocks BCM2835_CLOCK_VPU>;
                        #address-cells = <1>;
                        #size-cells = <0>;
                        status = "disabled";
                };

                pixelvalve0: pixelvalve@7e206000 {
                        compatible = "brcm,bcm2711-pixelvalve0";
                        reg = <0x7e206000 0x100>;
                        interrupts = <GIC_SPI 109 IRQ_TYPE_LEVEL_HIGH>;
                        status = "disabled";
                };

                pixelvalve1: pixelvalve@7e207000 {
                        compatible = "brcm,bcm2711-pixelvalve1";
                        reg = <0x7e207000 0x100>;
                        interrupts = <GIC_SPI 110 IRQ_TYPE_LEVEL_HIGH>;
                        status = "disabled";
                };

                pixelvalve2: pixelvalve@7e20a000 {
                        compatible = "brcm,bcm2711-pixelvalve2";
                        reg = <0x7e20a000 0x100>;
                        interrupts = <GIC_SPI 101 IRQ_TYPE_LEVEL_HIGH>;
                        status = "disabled";
                };

                pwm1: pwm@7e20c800 {
                        compatible = "brcm,bcm2835-pwm";
                        reg = <0x7e20c800 0x28>;
                        clocks = <&clocks BCM2835_CLOCK_PWM>;
                        assigned-clocks = <&clocks BCM2835_CLOCK_PWM>;
                        assigned-clock-rates = <10000000>;
                        #pwm-cells = <2>;
                        status = "disabled";
                };

                pixelvalve4: pixelvalve@7e216000 {
                        compatible = "brcm,bcm2711-pixelvalve4";
                        reg = <0x7e216000 0x100>;
                        interrupts = <GIC_SPI 110 IRQ_TYPE_LEVEL_HIGH>;
                        status = "disabled";
                };

                hvs: hvs@7e400000 {
                        compatible = "brcm,bcm2711-hvs";
                        interrupts = <GIC_SPI 97 IRQ_TYPE_LEVEL_HIGH>;
                };

                pixelvalve3: pixelvalve@7ec12000 {
                        compatible = "brcm,bcm2711-pixelvalve3";
                        reg = <0x7ec12000 0x100>;
                        interrupts = <GIC_SPI 106 IRQ_TYPE_LEVEL_HIGH>;
                        status = "disabled";
                };

                vec: vec@7ec13000 {
                        compatible = "brcm,bcm2711-vec";
                        reg = <0x7ec13000 0x1000>;
                        clocks = <&clocks BCM2835_CLOCK_VEC>;
                        interrupts = <GIC_SPI 123 IRQ_TYPE_LEVEL_HIGH>;
                        status = "disabled";
                };

                dvp: clock@7ef00000 {
                        compatible = "brcm,brcm2711-dvp";
                        reg = <0x7ef00000 0x10>;
                        clocks = <&clk_108MHz>;
                        #clock-cells = <1>;
                        #reset-cells = <1>;
                };

                aon_intr: interrupt-controller@7ef00100 {
                        compatible = "brcm,bcm2711-l2-intc", "brcm,l2-intc";
                        reg = <0x7ef00100 0x30>;
                        interrupts = <GIC_SPI 96 IRQ_TYPE_LEVEL_HIGH>;
                        interrupt-controller;
                        #interrupt-cells = <1>;
                };

                hdmi0: hdmi@7ef00700 {
                        compatible = "brcm,bcm2711-hdmi0";
                        reg = <0x7ef00700 0x300>,
                              <0x7ef00300 0x200>,
                              <0x7ef00f00 0x80>,
                              <0x7ef00f80 0x80>,
                              <0x7ef01b00 0x200>,
                              <0x7ef01f00 0x400>,
                              <0x7ef00200 0x80>,
                              <0x7ef04300 0x100>,
                              <0x7ef20000 0x100>;
                        reg-names = "hdmi",
                                    "dvp",
                                    "phy",
                                    "rm",
                                    "packet",
                                    "metadata",
                                    "csc",
                                    "cec",
                                    "hd";
                        clock-names = "hdmi", "bvb", "audio", "cec";
                        resets = <&dvp 0>;
                        interrupt-parent = <&aon_intr>;
                        interrupts = <0>, <1>, <2>,
                                     <3>, <4>, <5>;
                        interrupt-names = "cec-tx", "cec-rx", "cec-low",
                                          "wakeup", "hpd-connected", "hpd-removed";
                        ddc = <&ddc0>;
                        dmas = <&dma 10>;
                        dma-names = "audio-rx";
                        status = "disabled";
                };

                ddc0: i2c@7ef04500 {
                        compatible = "brcm,bcm2711-hdmi-i2c";
                        reg = <0x7ef04500 0x100>, <0x7ef00b00 0x300>;
                        reg-names = "bsc", "auto-i2c";
                        clock-frequency = <97500>;
                        status = "disabled";
                };

                hdmi1: hdmi@7ef05700 {
                        compatible = "brcm,bcm2711-hdmi1";
                        reg = <0x7ef05700 0x300>,
                              <0x7ef05300 0x200>,
                              <0x7ef05f00 0x80>,
                              <0x7ef05f80 0x80>,
                              <0x7ef06b00 0x200>,
                              <0x7ef06f00 0x400>,
                              <0x7ef00280 0x80>,
                              <0x7ef09300 0x100>,
                              <0x7ef20000 0x100>;
                        reg-names = "hdmi",
                                    "dvp",
                                    "phy",
                                    "rm",
                                    "packet",
                                    "metadata",
                                    "csc",
                                    "cec",
                                    "hd";
                        ddc = <&ddc1>;
                        clock-names = "hdmi", "bvb", "audio", "cec";
                        resets = <&dvp 1>;
                        interrupt-parent = <&aon_intr>;
                        interrupts = <8>, <7>, <6>,
                                     <9>, <10>, <11>;
                        interrupt-names = "cec-tx", "cec-rx", "cec-low",
                                          "wakeup", "hpd-connected", "hpd-removed";
                        dmas = <&dma 17>;
                        dma-names = "audio-rx";
                        status = "disabled";
                };

                ddc1: i2c@7ef09500 {
                        compatible = "brcm,bcm2711-hdmi-i2c";
                        reg = <0x7ef09500 0x100>, <0x7ef05b00 0x300>;
                        reg-names = "bsc", "auto-i2c";
                        clock-frequency = <97500>;
                        status = "disabled";
                };
        };

        /*
         * emmc2 has different DMA constraints based on SoC revisions. It was
         * moved into its own bus, so as for RPi4's firmware to update them.
         * The firmware will find whether the emmc2bus alias is defined, and if
         * so, it'll edit the dma-ranges property below accordingly.
         */
        emmc2bus: emmc2bus {
                compatible = "simple-bus";
                #address-cells = <2>;
                #size-cells = <1>;

                ranges = <0x0 0x7e000000  0x0 0xfe000000  0x01800000>;
                dma-ranges = <0x0 0xc0000000  0x0 0x00000000  0x40000000>;

                emmc2: mmc@7e340000 {
                        compatible = "brcm,bcm2711-emmc2";
                        reg = <0x0 0x7e340000 0x100>;
                        interrupts = <GIC_SPI 126 IRQ_TYPE_LEVEL_HIGH>;
                        clocks = <&clocks BCM2711_CLOCK_EMMC2>;
                        status = "disabled";
                };
        };

        arm-pmu {
                compatible = "arm,cortex-a72-pmu", "arm,armv8-pmuv3";
                interrupts = <GIC_SPI 16 IRQ_TYPE_LEVEL_HIGH>,
                        <GIC_SPI 17 IRQ_TYPE_LEVEL_HIGH>,
                        <GIC_SPI 18 IRQ_TYPE_LEVEL_HIGH>,
                        <GIC_SPI 19 IRQ_TYPE_LEVEL_HIGH>;
                interrupt-affinity = <&cpu0>, <&cpu1>, <&cpu2>, <&cpu3>;
        };

        timer {
                compatible = "arm,armv8-timer";
                interrupts = <GIC_PPI 13 (GIC_CPU_MASK_SIMPLE(4) |
                                          IRQ_TYPE_LEVEL_LOW)>,
                             <GIC_PPI 14 (GIC_CPU_MASK_SIMPLE(4) |
                                          IRQ_TYPE_LEVEL_LOW)>,
                             <GIC_PPI 11 (GIC_CPU_MASK_SIMPLE(4) |
                                          IRQ_TYPE_LEVEL_LOW)>,
                             <GIC_PPI 10 (GIC_CPU_MASK_SIMPLE(4) |
                                          IRQ_TYPE_LEVEL_LOW)>;
                /* This only applies to the ARMv7 stub */
                arm,cpu-registers-not-fw-configured;
        };


        cpus: cpus {
                #address-cells = <1>;
                #size-cells = <0>;
                enable-method = "brcm,bcm2836-smp"; // for ARM 32-bit

                cpu0: cpu@0 {
                        device_type = "cpu";
                        compatible = "arm,cortex-a72";
                        reg = <0>;
                        enable-method = "spin-table";
                        cpu-release-addr = <0x0 0x000000d8>;
                };

                cpu1: cpu@1 {
                        device_type = "cpu";
                        compatible = "arm,cortex-a72";
                        reg = <1>;
                        enable-method = "spin-table";
                        cpu-release-addr = <0x0 0x000000e0>;
                };

                cpu2: cpu@2 {
                        device_type = "cpu";
                        compatible = "arm,cortex-a72";
                        reg = <2>;
                        enable-method = "spin-table";
                        cpu-release-addr = <0x0 0x000000e8>;
                };

                cpu3: cpu@3 {
                        device_type = "cpu";
                        compatible = "arm,cortex-a72";
                        reg = <3>;
                        enable-method = "spin-table";
                        cpu-release-addr = <0x0 0x000000f0>;
                };
        };

        scb {
                compatible = "simple-bus";
                #address-cells = <2>;
                #size-cells = <1>;

                ranges = <0x0 0x7c000000  0x0 0xfc000000  0x03800000>,
                         <0x6 0x00000000  0x6 0x00000000  0x40000000>;

                pcie0: pcie@7d500000 {
                        compatible = "brcm,bcm2711-pcie";
                        reg = <0x0 0x7d500000 0x9310>;
                        device_type = "pci";
                        #address-cells = <3>;
                        #interrupt-cells = <1>;
                        #size-cells = <2>;
                        interrupts = <GIC_SPI 148 IRQ_TYPE_LEVEL_HIGH>,
                                     <GIC_SPI 148 IRQ_TYPE_LEVEL_HIGH>;
                        interrupt-names = "pcie", "msi";
                        interrupt-map-mask = <0x0 0x0 0x0 0x7>;
                        interrupt-map = <0 0 0 1 &gicv2 GIC_SPI 143
                                                        IRQ_TYPE_LEVEL_HIGH>;
                        msi-controller;
                        msi-parent = <&pcie0>;

                        ranges = <0x02000000 0x0 0xf8000000 0x6 0x00000000
                                  0x0 0x04000000>;
                        /*
                         * The wrapper around the PCIe block has a bug
                         * preventing it from accessing beyond the first 3GB of
                         * memory.
                         */
                        dma-ranges = <0x02000000 0x0 0x00000000 0x0 0x00000000
                                      0x0 0xc0000000>;
                        brcm,enable-ssc;
                };

                genet: ethernet@7d580000 {
                        compatible = "brcm,bcm2711-genet-v5";
                        reg = <0x0 0x7d580000 0x10000>;
                        #address-cells = <0x1>;
                        #size-cells = <0x1>;
                        interrupts = <GIC_SPI 157 IRQ_TYPE_LEVEL_HIGH>,
                                     <GIC_SPI 158 IRQ_TYPE_LEVEL_HIGH>;
                        status = "disabled";

                        genet_mdio: mdio@e14 {
                                compatible = "brcm,genet-mdio-v5";
                                reg = <0xe14 0x8>;
                                reg-names = "mdio";
                                #address-cells = <0x1>;
                                #size-cells = <0x0>;
                        };
                };
        };
};

&clk_osc {
        clock-frequency = <54000000>;
};

&clocks {
        compatible = "brcm,bcm2711-cprman";
};

&cpu_thermal {
        coefficients = <(-487) 410040>;
        thermal-sensors = <&thermal>;
};

&dsi0 {
        interrupts = <GIC_SPI 100 IRQ_TYPE_LEVEL_HIGH>;
};

&dsi1 {
        interrupts = <GIC_SPI 108 IRQ_TYPE_LEVEL_HIGH>;
        compatible = "brcm,bcm2711-dsi1";
};

&gpio {
        compatible = "brcm,bcm2711-gpio";
        interrupts = <GIC_SPI 113 IRQ_TYPE_LEVEL_HIGH>,
                     <GIC_SPI 114 IRQ_TYPE_LEVEL_HIGH>,
                     <GIC_SPI 115 IRQ_TYPE_LEVEL_HIGH>,
                     <GIC_SPI 116 IRQ_TYPE_LEVEL_HIGH>;

        gpclk0_gpio49: gpclk0_gpio49 {
                pin-gpclk {
                        pins = "gpio49";
                        function = "alt1";
                        bias-disable;
                };
        };
        gpclk1_gpio50: gpclk1_gpio50 {
                pin-gpclk {
                        pins = "gpio50";
                        function = "alt1";
                        bias-disable;
                };
        };
        gpclk2_gpio51: gpclk2_gpio51 {
                pin-gpclk {
                        pins = "gpio51";
                        function = "alt1";
                        bias-disable;
                };
        };

        i2c0_gpio46: i2c0_gpio46 {
                pin-sda {
                        function = "alt0";
                        pins = "gpio46";
                        bias-pull-up;
                };
                pin-scl {
                        function = "alt0";
                        pins = "gpio47";
                        bias-disable;
                };
        };
        i2c1_gpio46: i2c1_gpio46 {
                pin-sda {
                        function = "alt1";
                        pins = "gpio46";
                        bias-pull-up;
                };
                pin-scl {
                        function = "alt1";
                        pins = "gpio47";
                        bias-disable;
                };
        };
        i2c3_gpio2: i2c3_gpio2 {
                pin-sda {
                        function = "alt5";
                        pins = "gpio2";
                        bias-pull-up;
                };
                pin-scl {
                        function = "alt5";
                        pins = "gpio3";
                        bias-disable;
                };
        };
        i2c3_gpio4: i2c3_gpio4 {
                pin-sda {
                        function = "alt5";
                        pins = "gpio4";
                        bias-pull-up;
                };
                pin-scl {
                        function = "alt5";
                        pins = "gpio5";
                        bias-disable;
                };
        };
        i2c4_gpio6: i2c4_gpio6 {
                pin-sda {
                        function = "alt5";
                        pins = "gpio6";
                        bias-pull-up;
                };
                pin-scl {
                        function = "alt5";
                        pins = "gpio7";
                        bias-disable;
                };
        };
        i2c4_gpio8: i2c4_gpio8 {
                pin-sda {
                        function = "alt5";
                        pins = "gpio8";
                        bias-pull-up;
                };
                pin-scl {
                        function = "alt5";
                        pins = "gpio9";
                        bias-disable;
                };
        };
        i2c5_gpio10: i2c5_gpio10 {
                pin-sda {
                        function = "alt5";
                        pins = "gpio10";
                        bias-pull-up;
                };
                pin-scl {
                        function = "alt5";
                        pins = "gpio11";
                        bias-disable;
                };
        };
        i2c5_gpio12: i2c5_gpio12 {
                pin-sda {
                        function = "alt5";
                        pins = "gpio12";
                        bias-pull-up;
                };
                pin-scl {
                        function = "alt5";
                        pins = "gpio13";
                        bias-disable;
                };
        };
        i2c6_gpio0: i2c6_gpio0 {
                pin-sda {
                        function = "alt5";
                        pins = "gpio0";
                        bias-pull-up;
                };
                pin-scl {
                        function = "alt5";
                        pins = "gpio1";
                        bias-disable;
                };
        };
        i2c6_gpio22: i2c6_gpio22 {
                pin-sda {
                        function = "alt5";
                        pins = "gpio22";
                        bias-pull-up;
                };
                pin-scl {
                        function = "alt5";
                        pins = "gpio23";
                        bias-disable;
                };
        };
        i2c_slave_gpio8: i2c_slave_gpio8 {
                pins-i2c-slave {
                        pins = "gpio8",
                               "gpio9",
                               "gpio10",
                               "gpio11";
                        function = "alt3";
                };
        };

        jtag_gpio48: jtag_gpio48 {
                pins-jtag {
                        pins = "gpio48",
                               "gpio49",
                               "gpio50",
                               "gpio51",
                               "gpio52",
                               "gpio53";
                        function = "alt4";
                };
        };

        mii_gpio28: mii_gpio28 {
                pins-mii {
                        pins = "gpio28",
                               "gpio29",
                               "gpio30",
                               "gpio31";
                        function = "alt4";
                };
        };
        mii_gpio36: mii_gpio36 {
                pins-mii {
                        pins = "gpio36",
                               "gpio37",
                               "gpio38",
                               "gpio39";
                        function = "alt5";
                };
        };

        pcm_gpio50: pcm_gpio50 {
                pins-pcm {
                        pins = "gpio50",
                               "gpio51",
                               "gpio52",
                               "gpio53";
                        function = "alt2";
                };
        };

        pwm0_0_gpio12: pwm0_0_gpio12 {
                pin-pwm {
                        pins = "gpio12";
                        function = "alt0";
                        bias-disable;
                };
        };
        pwm0_0_gpio18: pwm0_0_gpio18 {
                pin-pwm {
                        pins = "gpio18";
                        function = "alt5";
                        bias-disable;
                };
        };
        pwm1_0_gpio40: pwm1_0_gpio40 {
                pin-pwm {
                        pins = "gpio40";
                        function = "alt0";
                        bias-disable;
                };
        };
        pwm0_1_gpio13: pwm0_1_gpio13 {
                pin-pwm {
                        pins = "gpio13";
                        function = "alt0";
                        bias-disable;
                };
        };
        pwm0_1_gpio19: pwm0_1_gpio19 {
                pin-pwm {
                        pins = "gpio19";
                        function = "alt5";
                        bias-disable;
                };
        };
        pwm1_1_gpio41: pwm1_1_gpio41 {
                pin-pwm {
                        pins = "gpio41";
                        function = "alt0";
                        bias-disable;
                };
        };
        pwm0_1_gpio45: pwm0_1_gpio45 {
                pin-pwm {
                        pins = "gpio45";
                        function = "alt0";
                        bias-disable;
                };
        };
        pwm0_0_gpio52: pwm0_0_gpio52 {
                pin-pwm {
                        pins = "gpio52";
                        function = "alt1";
                        bias-disable;
                };
        };
        pwm0_1_gpio53: pwm0_1_gpio53 {
                pin-pwm {
                        pins = "gpio53";
                        function = "alt1";
                        bias-disable;
                };
        };

        rgmii_gpio35: rgmii_gpio35 {
                pin-start-stop {
                        pins = "gpio35";
                        function = "alt4";
                };
                pin-rx-ok {
                        pins = "gpio36";
                        function = "alt4";
                };
        };
        rgmii_irq_gpio34: rgmii_irq_gpio34 {
                pin-irq {
                        pins = "gpio34";
                        function = "alt5";
                };
        };
        rgmii_irq_gpio39: rgmii_irq_gpio39 {
                pin-irq {
                        pins = "gpio39";
                        function = "alt4";
                };
        };
        rgmii_mdio_gpio28: rgmii_mdio_gpio28 {
                pins-mdio {
                        pins = "gpio28",
                               "gpio29";
                        function = "alt5";
                };
        };
        rgmii_mdio_gpio37: rgmii_mdio_gpio37 {
                pins-mdio {
                        pins = "gpio37",
                               "gpio38";
                        function = "alt4";
                };
        };

        spi0_gpio46: spi0_gpio46 {
                pins-spi {
                        pins = "gpio46",
                               "gpio47",
                               "gpio48",
                               "gpio49";
                        function = "alt2";
                };
        };
        spi2_gpio46: spi2_gpio46 {
                pins-spi {
                        pins = "gpio46",
                               "gpio47",
                               "gpio48",
                               "gpio49",
                               "gpio50";
                        function = "alt5";
                };
        };
        spi3_gpio0: spi3_gpio0 {
                pins-spi {
                        pins = "gpio0",
                               "gpio1",
                               "gpio2",
                               "gpio3";
                        function = "alt3";
                };
        };
        spi4_gpio4: spi4_gpio4 {
                pins-spi {
                        pins = "gpio4",
                               "gpio5",
                               "gpio6",
                               "gpio7";
                        function = "alt3";
                };
        };
        spi5_gpio12: spi5_gpio12 {
                pins-spi {
                        pins = "gpio12",
                               "gpio13",
                               "gpio14",
                               "gpio15";
                        function = "alt3";
                };
        };
        spi6_gpio18: spi6_gpio18 {
                pins-spi {
                        pins = "gpio18",
                               "gpio19",
                               "gpio20",
                               "gpio21";
                        function = "alt3";
                };
        };

        uart2_gpio0: uart2_gpio0 {
                pin-tx {
                        pins = "gpio0";
                        function = "alt4";
                        bias-disable;
                };
                pin-rx {
                        pins = "gpio1";
                        function = "alt4";
                        bias-pull-up;
                };
        };
        uart2_ctsrts_gpio2: uart2_ctsrts_gpio2 {
                pin-cts {
                        pins = "gpio2";
                        function = "alt4";
                        bias-pull-up;
                };
                pin-rts {
                        pins = "gpio3";
                        function = "alt4";
                        bias-disable;
                };
        };
        uart3_gpio4: uart3_gpio4 {
                pin-tx {
                        pins = "gpio4";
                        function = "alt4";
                        bias-disable;
                };
                pin-rx {
                        pins = "gpio5";
                        function = "alt4";
                        bias-pull-up;
                };
        };
        uart3_ctsrts_gpio6: uart3_ctsrts_gpio6 {
                pin-cts {
                        pins = "gpio6";
                        function = "alt4";
                        bias-pull-up;
                };
                pin-rts {
                        pins = "gpio7";
                        function = "alt4";
                        bias-disable;
                };
        };
        uart4_gpio8: uart4_gpio8 {
                pin-tx {
                        pins = "gpio8";
                        function = "alt4";
                        bias-disable;
                };
                pin-rx {
                        pins = "gpio9";
                        function = "alt4";
                        bias-pull-up;
                };
        };
        uart4_ctsrts_gpio10: uart4_ctsrts_gpio10 {
                pin-cts {
                        pins = "gpio10";
                        function = "alt4";
                        bias-pull-up;
                };
                pin-rts {
                        pins = "gpio11";
                        function = "alt4";
                        bias-disable;
                };
        };
        uart5_gpio12: uart5_gpio12 {
                pin-tx {
                        pins = "gpio12";
                        function = "alt4";
                        bias-disable;
                };
                pin-rx {
                        pins = "gpio13";
                        function = "alt4";
                        bias-pull-up;
                };
        };
        uart5_ctsrts_gpio14: uart5_ctsrts_gpio14 {
                pin-cts {
                        pins = "gpio14";
                        function = "alt4";
                        bias-pull-up;
                };
                pin-rts {
                        pins = "gpio15";
                        function = "alt4";
                        bias-disable;
                };
        };
};

&rmem {
        #address-cells = <2>;
};

&cma {
        /*
         * arm64 reserves the CMA by default somewhere in ZONE_DMA32,
         * that's not good enough for the BCM2711 as some devices can
         * only address the lower 1G of memory (ZONE_DMA).
         */
        alloc-ranges = <0x0 0x00000000 0x40000000>;
};

&i2c0 {
        compatible = "brcm,bcm2711-i2c", "brcm,bcm2835-i2c";
        interrupts = <GIC_SPI 117 IRQ_TYPE_LEVEL_HIGH>;
};

&i2c1 {
        compatible = "brcm,bcm2711-i2c", "brcm,bcm2835-i2c";
        interrupts = <GIC_SPI 117 IRQ_TYPE_LEVEL_HIGH>;
};

&mailbox {
        interrupts = <GIC_SPI 33 IRQ_TYPE_LEVEL_HIGH>;
};

&sdhci {
        interrupts = <GIC_SPI 126 IRQ_TYPE_LEVEL_HIGH>;
};

&sdhost {
        interrupts = <GIC_SPI 120 IRQ_TYPE_LEVEL_HIGH>;
};

&spi {
        interrupts = <GIC_SPI 118 IRQ_TYPE_LEVEL_HIGH>;
};

&spi1 {
        interrupts = <GIC_SPI 93 IRQ_TYPE_LEVEL_HIGH>;
};

&spi2 {
        interrupts = <GIC_SPI 93 IRQ_TYPE_LEVEL_HIGH>;
};

&system_timer {
        interrupts = <GIC_SPI 64 IRQ_TYPE_LEVEL_HIGH>,
                     <GIC_SPI 65 IRQ_TYPE_LEVEL_HIGH>,
                     <GIC_SPI 66 IRQ_TYPE_LEVEL_HIGH>,
                     <GIC_SPI 67 IRQ_TYPE_LEVEL_HIGH>;
};

&txp {
        interrupts = <GIC_SPI 75 IRQ_TYPE_LEVEL_HIGH>;
};

&uart0 {
        interrupts = <GIC_SPI 121 IRQ_TYPE_LEVEL_HIGH>;
};

&uart1 {
        interrupts = <GIC_SPI 93 IRQ_TYPE_LEVEL_HIGH>;
};

&usb {
        interrupts = <GIC_SPI 73 IRQ_TYPE_LEVEL_HIGH>;
};

&vec {
        compatible = "brcm,bcm2711-vec";
        interrupts = <GIC_SPI 123 IRQ_TYPE_LEVEL_HIGH>;
};

 

(3) bcm2835-rpi.dtsi

arch/arm/boot/dts/bcm2835-rpi.dtsi

#include <dt-bindings/power/raspberrypi-power.h>

/ {
        leds {
                compatible = "gpio-leds";

                led-act {
                        label = "ACT";
                        default-state = "keep";
                        linux,default-trigger = "heartbeat";
                };
        };

        soc {
                firmware: firmware {
                        compatible = "raspberrypi,bcm2835-firmware", "simple-mfd";
                        #address-cells = <1>;
                        #size-cells = <1>;

                        mboxes = <&mailbox>;
                        dma-ranges;
                };

                power: power {
                        compatible = "raspberrypi,bcm2835-power";
                        firmware = <&firmware>;
                        #power-domain-cells = <1>;
                };

                vchiq: mailbox@7e00b840 {
                        compatible = "brcm,bcm2835-vchiq";
                        reg = <0x7e00b840 0x3c>;
                        interrupts = <0 2>;
                };
        };
};

&gpio {
        pinctrl-names = "default";

        gpioout: gpioout {
                brcm,pins = <6>;
                brcm,function = <BCM2835_FSEL_GPIO_OUT>;
        };

        alt0: alt0 {
                brcm,pins = <4 5 7 8 9 10 11>;
                brcm,function = <BCM2835_FSEL_ALT0>;
        };
};

&i2c0 {
        pinctrl-names = "default";
        pinctrl-0 = <&i2c0_gpio0>;
        status = "okay";
        clock-frequency = <100000>;
};

&i2c1 {
        pinctrl-names = "default";
        pinctrl-0 = <&i2c1_gpio2>;
        status = "okay";
        clock-frequency = <100000>;
};

&usb {
        power-domains = <&power RPI_POWER_DOMAIN_USB>;
};

&vec {
        power-domains = <&power RPI_POWER_DOMAIN_VEC>;
        status = "okay";
};

&dsi0 {
        power-domains = <&power RPI_POWER_DOMAIN_DSI0>;
};

&dsi1 {
        power-domains = <&power RPI_POWER_DOMAIN_DSI1>;
};

 

(4) bcm2711-rpi.dtsi

arch/arm/boot/dts/bcm2711-rpi.dtsi

// SPDX-License-Identifier: GPL-2.0
#include "bcm2835-rpi.dtsi"

#include <dt-bindings/reset/raspberrypi,firmware-reset.h>

/ {
        /* Will be filled by the bootloader */
        memory@0 {
                device_type = "memory";
                reg = <0 0 0>;
        };

        aliases {
                emmc2bus = &emmc2bus;
                ethernet0 = &genet;
                pcie0 = &pcie0;
                blconfig = &blconfig;
        };
};

&firmware {
        firmware_clocks: clocks {
                compatible = "raspberrypi,firmware-clocks";
                #clock-cells = <1>;
        };

        expgpio: gpio {
                compatible = "raspberrypi,firmware-gpio";
                gpio-controller;
                #gpio-cells = <2>;
                status = "okay";
        };

        reset: reset {
                compatible = "raspberrypi,firmware-reset";
                #reset-cells = <1>;
        };
};

&hdmi0 {
        clocks = <&firmware_clocks 13>, <&firmware_clocks 14>, <&dvp 0>, <&clk_27MHz>;
        clock-names = "hdmi", "bvb", "audio", "cec";
        wifi-2.4ghz-coexistence;
};

&hdmi1 {
        clocks = <&firmware_clocks 13>, <&firmware_clocks 14>, <&dvp 1>, <&clk_27MHz>;
        clock-names = "hdmi", "bvb", "audio", "cec";
        wifi-2.4ghz-coexistence;
};

&hvs {
        clocks = <&firmware_clocks 4>;
};

&rmem {
        /*
         * RPi4's co-processor will copy the board's bootloader configuration
         * into memory for the OS to consume. It'll also update this node with
         * its placement information.
         */
        blconfig: nvram@0 {
                compatible = "raspberrypi,bootloader-config", "nvmem-rmem";
                #address-cells = <1>;
                #size-cells = <1>;
                reg = <0x0 0x0 0x0>;
                no-map;
                status = "disabled";
        };
};

&vchiq {
        interrupts = <GIC_SPI 34 IRQ_TYPE_LEVEL_HIGH>;
};

 

(5) bcm283x-rpi-usb-peripheral.dtsi

arch/arm/boot/dts/bcm283x-rpi-usb-peripheral.dtsi

// SPDX-License-Identifier: GPL-2.0
&usb {
        dr_mode = "peripheral";
        g-rx-fifo-size = <256>;
        g-np-tx-fifo-size = <32>;
        g-tx-fifo-size = <256 256 512 512 512 768 768>;
};

 

(6) bcm2711-rpi-4-b.dts

arch/arm/boot/dts/bcm2711-rpi-4-b.dts

// SPDX-License-Identifier: GPL-2.0
/dts-v1/;
#include "bcm2711.dtsi"
#include "bcm2711-rpi.dtsi"
#include "bcm283x-rpi-usb-peripheral.dtsi"

/ {
        compatible = "raspberrypi,4-model-b", "brcm,bcm2711";
        model = "Raspberry Pi 4 Model B";

        chosen {
                /* 8250 auxiliary UART instead of pl011 */
                stdout-path = "serial1:115200n8";
        };

        leds {
                led-act {
                        gpios = <&gpio 42 GPIO_ACTIVE_HIGH>;
                };

                led-pwr {
                        label = "PWR";
                        gpios = <&expgpio 2 GPIO_ACTIVE_LOW>;
                        default-state = "keep";
                        linux,default-trigger = "default-on";
                };
        };

        wifi_pwrseq: wifi-pwrseq {
                compatible = "mmc-pwrseq-simple";
                reset-gpios = <&expgpio 1 GPIO_ACTIVE_LOW>;
        };

        sd_io_1v8_reg: sd_io_1v8_reg {
                compatible = "regulator-gpio";
                regulator-name = "vdd-sd-io";
                regulator-min-microvolt = <1800000>;
                regulator-max-microvolt = <3300000>;
                regulator-boot-on;
                regulator-always-on;
                regulator-settling-time-us = <5000>;
                gpios = <&expgpio 4 GPIO_ACTIVE_HIGH>;
                states = <1800000 0x1>,
                         <3300000 0x0>;
                status = "okay";
        };

        sd_vcc_reg: sd_vcc_reg {
                compatible = "regulator-fixed";
                regulator-name = "vcc-sd";
                regulator-min-microvolt = <3300000>;
                regulator-max-microvolt = <3300000>;
                regulator-boot-on;
                enable-active-high;
                gpio = <&expgpio 6 GPIO_ACTIVE_HIGH>;
        };
};

&ddc0 {
        status = "okay";
};

&ddc1 {
        status = "okay";
};

expgpio {
        gpio-line-names = "BT_ON",
                          "WL_ON",
                          "PWR_LED_OFF",
                          "GLOBAL_RESET",
                          "VDD_SD_IO_SEL",
                          "CAM_GPIO",
                          "SD_PWR_ON",
                          "";
};

&gpio {
        /*
         * Parts taken from rpi_SCH_4b_4p0_reduced.pdf and
         * the official GPU firmware DT blob.
         *
         * Legend:
         * "FOO" = GPIO line named "FOO" on the schematic
         * "FOO_N" = GPIO line named "FOO" on schematic, active low
         */
        gpio-line-names = "ID_SDA",
                          "ID_SCL",
                          "SDA1",
                          "SCL1",
                          "GPIO_GCLK",
                          "GPIO5",
                          "GPIO6",
                          "SPI_CE1_N",
                          "SPI_CE0_N",
                          "SPI_MISO",
                          "SPI_MOSI",
                          "SPI_SCLK",
                          "GPIO12",
                          "GPIO13",
                          /* Serial port */
                          "TXD1",
                          "RXD1",
                          "GPIO16",
                          "GPIO17",
                          "GPIO18",
                          "GPIO19",
                          "GPIO20",
                          "GPIO21",
                          "GPIO22",
                          "GPIO23",
                          "GPIO24",
                          "GPIO25",
                          "GPIO26",
                          "GPIO27",
                          "RGMII_MDIO",
                          "RGMIO_MDC",
                          /* Used by BT module */
                          "CTS0",
                          "RTS0",
                          "TXD0",
                          "RXD0",
                          /* Used by Wifi */
                          "SD1_CLK",
                          "SD1_CMD",
                          "SD1_DATA0",
                          "SD1_DATA1",
                          "SD1_DATA2",
                          "SD1_DATA3",
                          /* Shared with SPI flash */
                          "PWM0_MISO",
                          "PWM1_MOSI",
                          "STATUS_LED_G_CLK",
                          "SPIFLASH_CE_N",
                          "SDA0",
                          "SCL0",
                          "RGMII_RXCLK",
                          "RGMII_RXCTL",
                          "RGMII_RXD0",
                          "RGMII_RXD1",
                          "RGMII_RXD2",
                          "RGMII_RXD3",
                          "RGMII_TXCLK",
                          "RGMII_TXCTL",
                          "RGMII_TXD0",
                          "RGMII_TXD1",
                          "RGMII_TXD2",
                          "RGMII_TXD3";
};

&hdmi0 {
        status = "okay";
};

&hdmi1 {
        status = "okay";
};

&pixelvalve0 {
        status = "okay";
};

&pixelvalve1 {
        status = "okay";
};

&pixelvalve2 {
        status = "okay";
};

&pixelvalve4 {
        status = "okay";
};

&pwm1 {
        pinctrl-names = "default";
        pinctrl-0 = <&pwm1_0_gpio40 &pwm1_1_gpio41>;
        status = "okay";
};

/* SDHCI is used to control the SDIO for wireless */
&sdhci {
        #address-cells = <1>;
        #size-cells = <0>;
        pinctrl-names = "default";
        pinctrl-0 = <&emmc_gpio34>;
        bus-width = <4>;
        non-removable;
        mmc-pwrseq = <&wifi_pwrseq>;
        status = "okay";

        brcmf: wifi@1 {
                reg = <1>;
                compatible = "brcm,bcm4329-fmac";
        };
};

/* EMMC2 is used to drive the SD card */
&emmc2 {
        vqmmc-supply = <&sd_io_1v8_reg>;
        vmmc-supply = <&sd_vcc_reg>;
        broken-cd;
        status = "okay";
};

&genet {
        phy-handle = <&phy1>;
        phy-mode = "rgmii-rxid";
        status = "okay";
};

&genet_mdio {
        phy1: ethernet-phy@1 {
                /* No PHY interrupt */
                reg = <0x1>;
        };
};

&pcie0 {
        pci@0,0 {
                device_type = "pci";
                #address-cells = <3>;
                #size-cells = <2>;
                ranges;

                reg = <0 0 0 0 0>;

                usb@0,0 {
                        reg = <0 0 0 0 0>;
                        resets = <&reset RASPBERRYPI_FIRMWARE_RESET_ID_USB>;
                };
        };
};

/* uart0 communicates with the BT module */
&uart0 {
        pinctrl-names = "default";
        pinctrl-0 = <&uart0_ctsrts_gpio30 &uart0_gpio32>;
        uart-has-rtscts;
        status = "okay";

        bluetooth {
                compatible = "brcm,bcm43438-bt";
                max-speed = <2000000>;
                shutdown-gpios = <&expgpio 0 GPIO_ACTIVE_HIGH>;
        };
};

/* uart1 is mapped to the pin header */
&uart1 {
        pinctrl-names = "default";
        pinctrl-0 = <&uart1_gpio14>;
        status = "okay";
};

&vc4 {
        status = "okay";
};

&vec {
        status = "disabled";
};

 

(7) bcm2711-rpi-4-b.dts

arch/arm64/boot/dts/bcm2711-rpi-4-b.dts

// SPDX-License-Identifier: GPL-2.0
#include "arm/bcm2711-rpi-4-b.dts"

 


통합 Script

위의 디바이스 트리들을 dtc로 컴파일하면 하나의 스크립트로 병합시킨 모습을 보여줄 수 있다.

  • dtc bcm2711-rpi-4-b.dts -O dtb > a.dtsi

 

/dts-v1/;

/memreserve/    0x0000000000000000 0x0000000000001000;
/ {
        compatible = "raspberrypi,4-model-b", "brcm,bcm2711";
        model = "Raspberry Pi 4 Model B";
        #address-cells = <0x2>;
        #size-cells = <0x1>;
        interrupt-parent = <0x1>;

        aliases {
                serial0 = "/soc/serial@7e201000";
                serial1 = "/soc/serial@7e215040";
                emmc2bus = "/emmc2bus";
                ethernet0 = "/scb/ethernet@7d580000";
                pcie0 = "/scb/pcie@7d500000";
                blconfig = "/reserved-memory/nvram@0";
        };

        chosen {
                stdout-path = "serial1:115200n8";
        };

        reserved-memory {
                #address-cells = <0x2>;
                #size-cells = <0x1>;
                ranges;

                linux,cma {
                        compatible = "shared-dma-pool";
                        size = <0x4000000>;
                        reusable;
                        linux,cma-default;
                        alloc-ranges = <0x0 0x0 0x40000000>;
                };

                nvram@0 {
                        compatible = "raspberrypi,bootloader-config", "nvmem-rmem";
                        #address-cells = <0x1>;
                        #size-cells = <0x1>;
                        reg = <0x0 0x0 0x0>;
                        no-map;
                        status = "disabled";
                };
        };

        thermal-zones {

                cpu-thermal {
                        polling-delay-passive = <0x0>;
                        polling-delay = <0x3e8>;
                        coefficients = <0xfffffe19 0x641b8>;
                        thermal-sensors = <0x2>;

                        trips {

                                cpu-crit {
                                        temperature = <0x15f90>;
                                        hysteresis = <0x0>;
                                        type = "critical";
                                };
                        };

                        cooling-maps {
                        };
                };
        };

        soc {
                compatible = "simple-bus";
                #address-cells = <0x1>;
                #size-cells = <0x1>;
                ranges = <0x7e000000 0x0 0xfe000000 0x1800000 0x7c000000 0x0 0xfc000000 0x2000000 0x40000000 0x0 0xff800000 0x800000>;
                dma-ranges = <0xc0000000 0x0 0x0 0x40000000>;

                timer@7e003000 {
                        compatible = "brcm,bcm2835-system-timer";
                        reg = <0x7e003000 0x1000>;
                        interrupts = <0x0 0x40 0x4 0x0 0x41 0x4 0x0 0x42 0x4 0x0 0x43 0x4>;
                        clock-frequency = <0xf4240>;
                };

                txp@7e004000 {
                        compatible = "brcm,bcm2835-txp";
                        reg = <0x7e004000 0x20>;
                        interrupts = <0x0 0x4b 0x4>;
                };

                cprman@7e101000 {
                        compatible = "brcm,bcm2711-cprman";
                        #clock-cells = <0x1>;
                        reg = <0x7e101000 0x2000>;
                        clocks = <0x3 0x4 0x0 0x4 0x1 0x4 0x2 0x5 0x0 0x5 0x1 0x5 0x2>;
                        phandle = <0x6>;
                };

                mailbox@7e00b880 {
                        compatible = "brcm,bcm2835-mbox";
                        reg = <0x7e00b880 0x40>;
                        interrupts = <0x0 0x21 0x4>;
                        #mbox-cells = <0x0>;
                        phandle = <0x1d>;
                };

                gpio@7e200000 {
                        compatible = "brcm,bcm2711-gpio";
                        reg = <0x7e200000 0xb4>;
                        interrupts = <0x0 0x71 0x4 0x0 0x72 0x4 0x0 0x73 0x4 0x0 0x74 0x4>;
                        gpio-controller;
                        #gpio-cells = <0x2>;
                        interrupt-controller;
                        #interrupt-cells = <0x2>;
                        pinctrl-names = "default";
                        gpio-line-names = "ID_SDA", "ID_SCL", "SDA1", "SCL1", "GPIO_GCLK", "GPIO5", "GPIO6", "SPI_CE1_N", "SPI_CE0_N", "SPI_MISO", "SPI_MOSI", "SPI_SCLK", "GPIO12", "GPIO13", "TXD1", "RXD1", "GPIO16", "GPIO17", "GPIO18", "GPIO19", "GPIO20", "GPIO21", "GPIO22", "GPIO23", "GPIO24", "GPIO25", "GPIO26", "GPIO27", "RGMII_MDIO", "RGMIO_MDC", "CTS0", "RTS0", "TXD0", "RXD0", "SD1_CLK", "SD1_CMD", "SD1_DATA0", "SD1_DATA1", "SD1_DATA2", "SD1_DATA3", "PWM0_MISO", "PWM1_MOSI", "STATUS_LED_G_CLK", "SPIFLASH_CE_N", "SDA0", "SCL0", "RGMII_RXCLK", "RGMII_RXCTL", "RGMII_RXD0", "RGMII_RXD1", "RGMII_RXD2", "RGMII_RXD3", "RGMII_TXCLK", "RGMII_TXCTL", "RGMII_TXD0", "RGMII_TXD1", "RGMII_TXD2", "RGMII_TXD3";
                        phandle = <0x28>;

                        dpi_gpio0 {
                                brcm,pins = <0x0 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10 0x11 0x12 0x13 0x14 0x15 0x16 0x17 0x18 0x19 0x1a 0x1b>;
                                brcm,function = <0x6>;
                        };

                        emmc_gpio22 {
                                brcm,pins = <0x16 0x17 0x18 0x19 0x1a 0x1b>;
                                brcm,function = <0x7>;
                        };

                        emmc_gpio34 {
                                brcm,pins = <0x22 0x23 0x24 0x25 0x26 0x27>;
                                brcm,function = <0x7>;
                                brcm,pull = <0x0 0x2 0x2 0x2 0x2 0x2>;
                                phandle = <0xe>;
                        };

                        emmc_gpio48 {
                                brcm,pins = <0x30 0x31 0x32 0x33 0x34 0x35>;
                                brcm,function = <0x7>;
                        };

                        gpclk0_gpio4 {
                                brcm,pins = <0x4>;
                                brcm,function = <0x4>;
                        };

                        gpclk1_gpio5 {
                                brcm,pins = <0x5>;
                                brcm,function = <0x4>;
                        };

                        gpclk1_gpio42 {
                                brcm,pins = <0x2a>;
                                brcm,function = <0x4>;
                        };

                        gpclk1_gpio44 {
                                brcm,pins = <0x2c>;
                                brcm,function = <0x4>;
                        };

                        gpclk2_gpio6 {
                                brcm,pins = <0x6>;
                                brcm,function = <0x4>;
                        };

                        gpclk2_gpio43 {
                                brcm,pins = <0x2b>;
                                brcm,function = <0x4>;
                                brcm,pull = <0x0>;
                        };

                        i2c0_gpio0 {
                                brcm,pins = <0x0 0x1>;
                                brcm,function = <0x4>;
                                phandle = <0xa>;
                        };

                        i2c0_gpio28 {
                                brcm,pins = <0x1c 0x1d>;
                                brcm,function = <0x4>;
                        };

                        i2c0_gpio44 {
                                brcm,pins = <0x2c 0x2d>;
                                brcm,function = <0x5>;
                        };

                        i2c1_gpio2 {
                                brcm,pins = <0x2 0x3>;
                                brcm,function = <0x4>;
                                phandle = <0x11>;
                        };

                        i2c1_gpio44 {
                                brcm,pins = <0x2c 0x2d>;
                                brcm,function = <0x6>;
                        };

                        jtag_gpio22 {
                                brcm,pins = <0x16 0x17 0x18 0x19 0x1a 0x1b>;
                                brcm,function = <0x3>;
                        };

                        pcm_gpio18 {
                                brcm,pins = <0x12 0x13 0x14 0x15>;
                                brcm,function = <0x4>;
                        };

                        pcm_gpio28 {
                                brcm,pins = <0x1c 0x1d 0x1e 0x1f>;
                                brcm,function = <0x6>;
                        };

                        sdhost_gpio48 {
                                brcm,pins = <0x30 0x31 0x32 0x33 0x34 0x35>;
                                brcm,function = <0x4>;
                        };

                        spi0_gpio7 {
                                brcm,pins = <0x7 0x8 0x9 0xa 0xb>;
                                brcm,function = <0x4>;
                        };

                        spi0_gpio35 {
                                brcm,pins = <0x23 0x24 0x25 0x26 0x27>;
                                brcm,function = <0x4>;
                        };

                        spi1_gpio16 {
                                brcm,pins = <0x10 0x11 0x12 0x13 0x14 0x15>;
                                brcm,function = <0x3>;
                        };

                        spi2_gpio40 {
                                brcm,pins = <0x28 0x29 0x2a 0x2b 0x2c 0x2d>;
                                brcm,function = <0x3>;
                        };

                        uart0_gpio14 {
                                brcm,pins = <0xe 0xf>;
                                brcm,function = <0x4>;
                        };

                        uart0_ctsrts_gpio16 {
                                brcm,pins = <0x10 0x11>;
                                brcm,function = <0x7>;
                        };

                        uart0_ctsrts_gpio30 {
                                brcm,pins = <0x1e 0x1f>;
                                brcm,function = <0x7>;
                                brcm,pull = <0x2 0x0>;
                                phandle = <0x7>;
                        };

                        uart0_gpio32 {
                                brcm,pins = <0x20 0x21>;
                                brcm,function = <0x7>;
                                brcm,pull = <0x0 0x2>;
                                phandle = <0x8>;
                        };

                        uart0_gpio36 {
                                brcm,pins = <0x24 0x25>;
                                brcm,function = <0x6>;
                        };

                        uart0_ctsrts_gpio38 {
                                brcm,pins = <0x26 0x27>;
                                brcm,function = <0x6>;
                        };

                        uart1_gpio14 {
                                brcm,pins = <0xe 0xf>;
                                brcm,function = <0x2>;
                                phandle = <0xd>;
                        };

                        uart1_ctsrts_gpio16 {
                                brcm,pins = <0x10 0x11>;
                                brcm,function = <0x2>;
                        };

                        uart1_gpio32 {
                                brcm,pins = <0x20 0x21>;
                                brcm,function = <0x2>;
                        };

                        uart1_ctsrts_gpio30 {
                                brcm,pins = <0x1e 0x1f>;
                                brcm,function = <0x2>;
                        };

                        uart1_gpio40 {
                                brcm,pins = <0x28 0x29>;
                                brcm,function = <0x2>;
                        };

                        uart1_ctsrts_gpio42 {
                                brcm,pins = <0x2a 0x2b>;
                                brcm,function = <0x2>;
                        };

                        gpclk0_gpio49 {

                                pin-gpclk {
                                        pins = "gpio49";
                                        function = "alt1";
                                        bias-disable;
                                };
                        };

                        gpclk1_gpio50 {

                                pin-gpclk {
                                        pins = "gpio50";
                                        function = "alt1";
                                        bias-disable;
                                };
                        };

                        gpclk2_gpio51 {

                                pin-gpclk {
                                        pins = "gpio51";
                                        function = "alt1";
                                        bias-disable;
                                };
                        };

                        i2c0_gpio46 {

                                pin-sda {
                                        function = "alt0";
                                        pins = "gpio46";
                                        bias-pull-up;
                                };

                                pin-scl {
                                        function = "alt0";
                                        pins = "gpio47";
                                        bias-disable;
                                };
                        };

                        i2c1_gpio46 {

                                pin-sda {
                                        function = "alt1";
                                        pins = "gpio46";
                                        bias-pull-up;
                                };

                                pin-scl {
                                        function = "alt1";
                                        pins = "gpio47";
                                        bias-disable;
                                };
                        };

                        i2c3_gpio2 {

                                pin-sda {
                                        function = "alt5";
                                        pins = "gpio2";
                                        bias-pull-up;
                                };

                                pin-scl {
                                        function = "alt5";
                                        pins = "gpio3";
                                        bias-disable;
                                };
                        };

                        i2c3_gpio4 {

                                pin-sda {
                                        function = "alt5";
                                        pins = "gpio4";
                                        bias-pull-up;
                                };

                                pin-scl {
                                        function = "alt5";
                                        pins = "gpio5";
                                        bias-disable;
                                };
                        };

                        i2c4_gpio6 {

                                pin-sda {
                                        function = "alt5";
                                        pins = "gpio6";
                                        bias-pull-up;
                                };

                                pin-scl {
                                        function = "alt5";
                                        pins = "gpio7";
                                        bias-disable;
                                };
                        };

                        i2c4_gpio8 {

                                pin-sda {
                                        function = "alt5";
                                        pins = "gpio8";
                                        bias-pull-up;
                                };

                                pin-scl {
                                        function = "alt5";
                                        pins = "gpio9";
                                        bias-disable;
                                };
                        };

                        i2c5_gpio10 {

                                pin-sda {
                                        function = "alt5";
                                        pins = "gpio10";
                                        bias-pull-up;
                                };

                                pin-scl {
                                        function = "alt5";
                                        pins = "gpio11";
                                        bias-disable;
                                };
                        };

                        i2c5_gpio12 {

                                pin-sda {
                                        function = "alt5";
                                        pins = "gpio12";
                                        bias-pull-up;
                                };

                                pin-scl {
                                        function = "alt5";
                                        pins = "gpio13";
                                        bias-disable;
                                };
                        };

                        i2c6_gpio0 {

                                pin-sda {
                                        function = "alt5";
                                        pins = "gpio0";
                                        bias-pull-up;
                                };

                                pin-scl {
                                        function = "alt5";
                                        pins = "gpio1";
                                        bias-disable;
                                };
                        };

                        i2c6_gpio22 {

                                pin-sda {
                                        function = "alt5";
                                        pins = "gpio22";
                                        bias-pull-up;
                                };

                                pin-scl {
                                        function = "alt5";
                                        pins = "gpio23";
                                        bias-disable;
                                };
                        };

                        i2c_slave_gpio8 {

                                pins-i2c-slave {
                                        pins = "gpio8", "gpio9", "gpio10", "gpio11";
                                        function = "alt3";
                                };
                        };

                        jtag_gpio48 {

                                pins-jtag {
                                        pins = "gpio48", "gpio49", "gpio50", "gpio51", "gpio52", "gpio53";
                                        function = "alt4";
                                };
                        };

                        mii_gpio28 {

                                pins-mii {
                                        pins = "gpio28", "gpio29", "gpio30", "gpio31";
                                        function = "alt4";
                                };
                        };

                        mii_gpio36 {

                                pins-mii {
                                        pins = "gpio36", "gpio37", "gpio38", "gpio39";
                                        function = "alt5";
                                };
                        };

                        pcm_gpio50 {

                                pins-pcm {
                                        pins = "gpio50", "gpio51", "gpio52", "gpio53";
                                        function = "alt2";
                                };
                        };

                        pwm0_0_gpio12 {

                                pin-pwm {
                                        pins = "gpio12";
                                        function = "alt0";
                                        bias-disable;
                                };
                        };

                        pwm0_0_gpio18 {

                                pin-pwm {
                                        pins = "gpio18";
                                        function = "alt5";
                                        bias-disable;
                                };
                        };

                        pwm1_0_gpio40 {
                                phandle = <0x14>;

                                pin-pwm {
                                        pins = "gpio40";
                                        function = "alt0";
                                        bias-disable;
                                };
                        };

                        pwm0_1_gpio13 {

                                pin-pwm {
                                        pins = "gpio13";
                                        function = "alt0";
                                        bias-disable;
                                };
                        };

                        pwm0_1_gpio19 {

                                pin-pwm {
                                        pins = "gpio19";
                                        function = "alt5";
                                        bias-disable;
                                };
                        };

                        pwm1_1_gpio41 {
                                phandle = <0x15>;

                                pin-pwm {
                                        pins = "gpio41";
                                        function = "alt0";
                                        bias-disable;
                                };
                        };

                        pwm0_1_gpio45 {

                                pin-pwm {
                                        pins = "gpio45";
                                        function = "alt0";
                                        bias-disable;
                                };
                        };

                        pwm0_0_gpio52 {

                                pin-pwm {
                                        pins = "gpio52";
                                        function = "alt1";
                                        bias-disable;
                                };
                        };

                        pwm0_1_gpio53 {

                                pin-pwm {
                                        pins = "gpio53";
                                        function = "alt1";
                                        bias-disable;
                                };
                        };

                        rgmii_gpio35 {

                                pin-start-stop {
                                        pins = "gpio35";
                                        function = "alt4";
                                };

                                pin-rx-ok {
                                        pins = "gpio36";
                                        function = "alt4";
                                };
                        };

                        rgmii_irq_gpio34 {

                                pin-irq {
                                        pins = "gpio34";
                                        function = "alt5";
                                };
                        };

                        rgmii_irq_gpio39 {

                                pin-irq {
                                        pins = "gpio39";
                                        function = "alt4";
                                };
                        };

                        rgmii_mdio_gpio28 {

                                pins-mdio {
                                        pins = "gpio28", "gpio29";
                                        function = "alt5";
                                };
                        };

                        rgmii_mdio_gpio37 {

                                pins-mdio {
                                        pins = "gpio37", "gpio38";
                                        function = "alt4";
                                };
                        };

                        spi0_gpio46 {

                                pins-spi {
                                        pins = "gpio46", "gpio47", "gpio48", "gpio49";
                                        function = "alt2";
                                };
                        };

                        spi2_gpio46 {

                                pins-spi {
                                        pins = "gpio46", "gpio47", "gpio48", "gpio49", "gpio50";
                                        function = "alt5";
                                };
                        };

                        spi3_gpio0 {

                                pins-spi {
                                        pins = "gpio0", "gpio1", "gpio2", "gpio3";
                                        function = "alt3";
                                };
                        };

                        spi4_gpio4 {

                                pins-spi {
                                        pins = "gpio4", "gpio5", "gpio6", "gpio7";
                                        function = "alt3";
                                };
                        };

                        spi5_gpio12 {

                                pins-spi {
                                        pins = "gpio12", "gpio13", "gpio14", "gpio15";
                                        function = "alt3";
                                };
                        };

                        spi6_gpio18 {

                                pins-spi {
                                        pins = "gpio18", "gpio19", "gpio20", "gpio21";
                                        function = "alt3";
                                };
                        };

                        uart2_gpio0 {

                                pin-tx {
                                        pins = "gpio0";
                                        function = "alt4";
                                        bias-disable;
                                };

                                pin-rx {
                                        pins = "gpio1";
                                        function = "alt4";
                                        bias-pull-up;
                                };
                        };

                        uart2_ctsrts_gpio2 {

                                pin-cts {
                                        pins = "gpio2";
                                        function = "alt4";
                                        bias-pull-up;
                                };

                                pin-rts {
                                        pins = "gpio3";
                                        function = "alt4";
                                        bias-disable;
                                };
                        };

                        uart3_gpio4 {

                                pin-tx {
                                        pins = "gpio4";
                                        function = "alt4";
                                        bias-disable;
                                };

                                pin-rx {
                                        pins = "gpio5";
                                        function = "alt4";
                                        bias-pull-up;
                                };
                        };

                        uart3_ctsrts_gpio6 {

                                pin-cts {
                                        pins = "gpio6";
                                        function = "alt4";
                                        bias-pull-up;
                                };

                                pin-rts {
                                        pins = "gpio7";
                                        function = "alt4";
                                        bias-disable;
                                };
                        };

                        uart4_gpio8 {

                                pin-tx {
                                        pins = "gpio8";
                                        function = "alt4";
                                        bias-disable;
                                };

                                pin-rx {
                                        pins = "gpio9";
                                        function = "alt4";
                                        bias-pull-up;
                                };
                        };

                        uart4_ctsrts_gpio10 {

                                pin-cts {
                                        pins = "gpio10";
                                        function = "alt4";
                                        bias-pull-up;
                                };

                                pin-rts {
                                        pins = "gpio11";
                                        function = "alt4";
                                        bias-disable;
                                };
                        };

                        uart5_gpio12 {

                                pin-tx {
                                        pins = "gpio12";
                                        function = "alt4";
                                        bias-disable;
                                };

                                pin-rx {
                                        pins = "gpio13";
                                        function = "alt4";
                                        bias-pull-up;
                                };
                        };

                        uart5_ctsrts_gpio14 {

                                pin-cts {
                                        pins = "gpio14";
                                        function = "alt4";
                                        bias-pull-up;
                                };

                                pin-rts {
                                        pins = "gpio15";
                                        function = "alt4";
                                        bias-disable;
                                };
                        };

                        gpioout {
                                brcm,pins = <0x6>;
                                brcm,function = <0x1>;
                        };

                        alt0 {
                                brcm,pins = <0x4 0x5 0x7 0x8 0x9 0xa 0xb>;
                                brcm,function = <0x4>;
                        };
                };

                serial@7e201000 {
                        compatible = "arm,pl011", "arm,primecell";
                        reg = <0x7e201000 0x200>;
                        interrupts = <0x0 0x79 0x4>;
                        clocks = <0x6 0x13 0x6 0x14>;
                        clock-names = "uartclk", "apb_pclk";
                        arm,primecell-periphid = <0x241011>;
                        pinctrl-names = "default";
                        pinctrl-0 = <0x7 0x8>;
                        uart-has-rtscts;
                        status = "okay";

                        bluetooth {
                                compatible = "brcm,bcm43438-bt";
                                max-speed = <0x1e8480>;
                                shutdown-gpios = <0x9 0x0 0x0>;
                        };
                };

                mmc@7e202000 {
                        compatible = "brcm,bcm2835-sdhost";
                        reg = <0x7e202000 0x100>;
                        interrupts = <0x0 0x78 0x4>;
                        clocks = <0x6 0x14>;
                        status = "disabled";
                };

                i2s@7e203000 {
                        compatible = "brcm,bcm2835-i2s";
                        reg = <0x7e203000 0x24>;
                        clocks = <0x6 0x1f>;
                        status = "disabled";
                };

                spi@7e204000 {
                        compatible = "brcm,bcm2835-spi";
                        reg = <0x7e204000 0x200>;
                        interrupts = <0x0 0x76 0x4>;
                        clocks = <0x6 0x14>;
                        #address-cells = <0x1>;
                        #size-cells = <0x0>;
                        status = "disabled";
                };

                i2c@7e205000 {
                        compatible = "brcm,bcm2711-i2c", "brcm,bcm2835-i2c";
                        reg = <0x7e205000 0x200>;
                        interrupts = <0x0 0x75 0x4>;
                        clocks = <0x6 0x14>;
                        #address-cells = <0x1>;
                        #size-cells = <0x0>;
                        status = "okay";
                        pinctrl-names = "default";
                        pinctrl-0 = <0xa>;
                        clock-frequency = <0x186a0>;
                };

                dpi@7e208000 {
                        compatible = "brcm,bcm2835-dpi";
                        reg = <0x7e208000 0x8c>;
                        clocks = <0x6 0x14 0x6 0x2c>;
                        clock-names = "core", "pixel";
                        #address-cells = <0x1>;
                        #size-cells = <0x0>;
                        status = "disabled";
                };

                dsi@7e209000 {
                        compatible = "brcm,bcm2835-dsi0";
                        reg = <0x7e209000 0x78>;
                        interrupts = <0x0 0x64 0x4>;
                        #address-cells = <0x1>;
                        #size-cells = <0x0>;
                        #clock-cells = <0x1>;
                        clocks = <0x6 0x20 0x6 0x2f 0x6 0x31>;
                        clock-names = "phy", "escape", "pixel";
                        clock-output-names = "dsi0_byte", "dsi0_ddr2", "dsi0_ddr";
                        status = "disabled";
                        power-domains = <0xb 0x11>;
                        phandle = <0x4>;
                };

                aux@7e215000 {
                        compatible = "brcm,bcm2835-aux";
                        #clock-cells = <0x1>;
                        reg = <0x7e215000 0x8>;
                        clocks = <0x6 0x14>;
                        phandle = <0xc>;
                };

                serial@7e215040 {
                        compatible = "brcm,bcm2835-aux-uart";
                        reg = <0x7e215040 0x40>;
                        interrupts = <0x0 0x5d 0x4>;
                        clocks = <0xc 0x0>;
                        status = "okay";
                        pinctrl-names = "default";
                        pinctrl-0 = <0xd>;
                };

                spi@7e215080 {
                        compatible = "brcm,bcm2835-aux-spi";
                        reg = <0x7e215080 0x40>;
                        interrupts = <0x0 0x5d 0x4>;
                        clocks = <0xc 0x1>;
                        #address-cells = <0x1>;
                        #size-cells = <0x0>;
                        status = "disabled";
                };

                spi@7e2150c0 {
                        compatible = "brcm,bcm2835-aux-spi";
                        reg = <0x7e2150c0 0x40>;
                        interrupts = <0x0 0x5d 0x4>;
                        clocks = <0xc 0x2>;
                        #address-cells = <0x1>;
                        #size-cells = <0x0>;
                        status = "disabled";
                };

                pwm@7e20c000 {
                        compatible = "brcm,bcm2835-pwm";
                        reg = <0x7e20c000 0x28>;
                        clocks = <0x6 0x1e>;
                        assigned-clocks = <0x6 0x1e>;
                        assigned-clock-rates = <0x989680>;
                        #pwm-cells = <0x2>;
                        status = "disabled";
                };

                mmc@7e300000 {
                        compatible = "brcm,bcm2835-sdhci";
                        reg = <0x7e300000 0x100>;
                        interrupts = <0x0 0x7e 0x4>;
                        clocks = <0x6 0x1c>;
                        status = "okay";
                        #address-cells = <0x1>;
                        #size-cells = <0x0>;
                        pinctrl-names = "default";
                        pinctrl-0 = <0xe>;
                        bus-width = <0x4>;
                        non-removable;
                        mmc-pwrseq = <0xf>;

                        wifi@1 {
                                reg = <0x1>;
                                compatible = "brcm,bcm4329-fmac";
                        };
                };

                hvs@7e400000 {
                        compatible = "brcm,bcm2711-hvs";
                        reg = <0x7e400000 0x6000>;
                        interrupts = <0x0 0x61 0x4>;
                        clocks = <0x10 0x4>;
                };

                dsi@7e700000 {
                        compatible = "brcm,bcm2711-dsi1";
                        reg = <0x7e700000 0x8c>;
                        interrupts = <0x0 0x6c 0x4>;
                        #address-cells = <0x1>;
                        #size-cells = <0x0>;
                        #clock-cells = <0x1>;
                        clocks = <0x6 0x23 0x6 0x30 0x6 0x32>;
                        clock-names = "phy", "escape", "pixel";
                        clock-output-names = "dsi1_byte", "dsi1_ddr2", "dsi1_ddr";
                        status = "disabled";
                        power-domains = <0xb 0x12>;
                        phandle = <0x5>;
                };

                i2c@7e804000 {
                        compatible = "brcm,bcm2711-i2c", "brcm,bcm2835-i2c";
                        reg = <0x7e804000 0x1000>;
                        interrupts = <0x0 0x75 0x4>;
                        clocks = <0x6 0x14>;
                        #address-cells = <0x1>;
                        #size-cells = <0x0>;
                        status = "okay";
                        pinctrl-names = "default";
                        pinctrl-0 = <0x11>;
                        clock-frequency = <0x186a0>;
                };

                usb@7e980000 {
                        compatible = "brcm,bcm2835-usb";
                        reg = <0x7e980000 0x10000>;
                        interrupts = <0x0 0x49 0x4>;
                        #address-cells = <0x1>;
                        #size-cells = <0x0>;
                        clocks = <0x12>;
                        clock-names = "otg";
                        phys = <0x13>;
                        phy-names = "usb2-phy";
                        power-domains = <0xb 0x6>;
                        dr_mode = "peripheral";
                        g-rx-fifo-size = <0x100>;
                        g-np-tx-fifo-size = <0x20>;
                        g-tx-fifo-size = <0x100 0x100 0x200 0x200 0x200 0x300 0x300>;
                };

                local_intc@40000000 {
                        compatible = "brcm,bcm2836-l1-intc";
                        reg = <0x40000000 0x100>;
                };

                interrupt-controller@40041000 {
                        interrupt-controller;
                        #interrupt-cells = <0x3>;
                        compatible = "arm,gic-400";
                        reg = <0x40041000 0x1000 0x40042000 0x2000 0x40044000 0x2000 0x40046000 0x2000>;
                        interrupts = <0x1 0x9 0xf04>;
                        phandle = <0x1>;
                };

                avs-monitor@7d5d2000 {
                        compatible = "brcm,bcm2711-avs-monitor", "syscon", "simple-mfd";
                        reg = <0x7d5d2000 0xf00>;

                        thermal {
                                compatible = "brcm,bcm2711-thermal";
                                #thermal-sensor-cells = <0x0>;
                                phandle = <0x2>;
                        };
                };

                dma@7e007000 {
                        compatible = "brcm,bcm2835-dma";
                        reg = <0x7e007000 0xb00>;
                        interrupts = <0x0 0x50 0x4 0x0 0x51 0x4 0x0 0x52 0x4 0x0 0x53 0x4 0x0 0x54 0x4 0x0 0x55 0x4 0x0 0x56 0x4 0x0 0x57 0x4 0x0 0x57 0x4 0x0 0x58 0x4 0x0 0x58 0x4>;
                        interrupt-names = "dma0", "dma1", "dma2", "dma3", "dma4", "dma5", "dma6", "dma7", "dma8", "dma9", "dma10";
                        #dma-cells = <0x1>;
                        brcm,dma-channel-mask = <0x7f5>;
                        phandle = <0x1a>;
                };

                watchdog@7e100000 {
                        compatible = "brcm,bcm2835-pm", "brcm,bcm2835-pm-wdt";
                        #power-domain-cells = <0x1>;
                        #reset-cells = <0x1>;
                        reg = <0x7e100000 0x114 0x7e00a000 0x24 0x7ec11000 0x20>;
                        clocks = <0x6 0x15 0x6 0x1d 0x6 0x17 0x6 0x16>;
                        clock-names = "v3d", "peri_image", "h264", "isp";
                        system-power-controller;
                };

                rng@7e104000 {
                        compatible = "brcm,bcm2711-rng200";
                        reg = <0x7e104000 0x28>;
                };

                serial@7e201400 {
                        compatible = "arm,pl011", "arm,primecell";
                        reg = <0x7e201400 0x200>;
                        interrupts = <0x0 0x79 0x4>;
                        clocks = <0x6 0x13 0x6 0x14>;
                        clock-names = "uartclk", "apb_pclk";
                        arm,primecell-periphid = <0x241011>;
                        status = "disabled";
                };

                serial@7e201600 {
                        compatible = "arm,pl011", "arm,primecell";
                        reg = <0x7e201600 0x200>;
                        interrupts = <0x0 0x79 0x4>;
                        clocks = <0x6 0x13 0x6 0x14>;
                        clock-names = "uartclk", "apb_pclk";
                        arm,primecell-periphid = <0x241011>;
                        status = "disabled";
                };

                serial@7e201800 {
                        compatible = "arm,pl011", "arm,primecell";
                        reg = <0x7e201800 0x200>;
                        interrupts = <0x0 0x79 0x4>;
                        clocks = <0x6 0x13 0x6 0x14>;
                        clock-names = "uartclk", "apb_pclk";
                        arm,primecell-periphid = <0x241011>;
                        status = "disabled";
                };

                serial@7e201a00 {
                        compatible = "arm,pl011", "arm,primecell";
                        reg = <0x7e201a00 0x200>;
                        interrupts = <0x0 0x79 0x4>;
                        clocks = <0x6 0x13 0x6 0x14>;
                        clock-names = "uartclk", "apb_pclk";
                        arm,primecell-periphid = <0x241011>;
                        status = "disabled";
                };

                spi@7e204600 {
                        compatible = "brcm,bcm2835-spi";
                        reg = <0x7e204600 0x200>;
                        interrupts = <0x0 0x76 0x4>;
                        clocks = <0x6 0x14>;
                        #address-cells = <0x1>;
                        #size-cells = <0x0>;
                        status = "disabled";
                };

                spi@7e204800 {
                        compatible = "brcm,bcm2835-spi";
                        reg = <0x7e204800 0x200>;
                        interrupts = <0x0 0x76 0x4>;
                        clocks = <0x6 0x14>;
                        #address-cells = <0x1>;
                        #size-cells = <0x0>;
                        status = "disabled";
                };

                spi@7e204a00 {
                        compatible = "brcm,bcm2835-spi";
                        reg = <0x7e204a00 0x200>;
                        interrupts = <0x0 0x76 0x4>;
                        clocks = <0x6 0x14>;
                        #address-cells = <0x1>;
                        #size-cells = <0x0>;
                        status = "disabled";
                };

                spi@7e204c00 {
                        compatible = "brcm,bcm2835-spi";
                        reg = <0x7e204c00 0x200>;
                        interrupts = <0x0 0x76 0x4>;
                        clocks = <0x6 0x14>;
                        #address-cells = <0x1>;
                        #size-cells = <0x0>;
                        status = "disabled";
                };

                i2c@7e205600 {
                        compatible = "brcm,bcm2711-i2c", "brcm,bcm2835-i2c";
                        reg = <0x7e205600 0x200>;
                        interrupts = <0x0 0x75 0x4>;
                        clocks = <0x6 0x14>;
                        #address-cells = <0x1>;
                        #size-cells = <0x0>;
                        status = "disabled";
                };

                i2c@7e205800 {
                        compatible = "brcm,bcm2711-i2c", "brcm,bcm2835-i2c";
                        reg = <0x7e205800 0x200>;
                        interrupts = <0x0 0x75 0x4>;
                        clocks = <0x6 0x14>;
                        #address-cells = <0x1>;
                        #size-cells = <0x0>;
                        status = "disabled";
                };

                i2c@7e205a00 {
                        compatible = "brcm,bcm2711-i2c", "brcm,bcm2835-i2c";
                        reg = <0x7e205a00 0x200>;
                        interrupts = <0x0 0x75 0x4>;
                        clocks = <0x6 0x14>;
                        #address-cells = <0x1>;
                        #size-cells = <0x0>;
                        status = "disabled";
                };

                i2c@7e205c00 {
                        compatible = "brcm,bcm2711-i2c", "brcm,bcm2835-i2c";
                        reg = <0x7e205c00 0x200>;
                        interrupts = <0x0 0x75 0x4>;
                        clocks = <0x6 0x14>;
                        #address-cells = <0x1>;
                        #size-cells = <0x0>;
                        status = "disabled";
                };

                pixelvalve@7e206000 {
                        compatible = "brcm,bcm2711-pixelvalve0";
                        reg = <0x7e206000 0x100>;
                        interrupts = <0x0 0x6d 0x4>;
                        status = "okay";
                };

                pixelvalve@7e207000 {
                        compatible = "brcm,bcm2711-pixelvalve1";
                        reg = <0x7e207000 0x100>;
                        interrupts = <0x0 0x6e 0x4>;
                        status = "okay";
                };

                pixelvalve@7e20a000 {
                        compatible = "brcm,bcm2711-pixelvalve2";
                        reg = <0x7e20a000 0x100>;
                        interrupts = <0x0 0x65 0x4>;
                        status = "okay";
                };

                pwm@7e20c800 {
                        compatible = "brcm,bcm2835-pwm";
                        reg = <0x7e20c800 0x28>;
                        clocks = <0x6 0x1e>;
                        assigned-clocks = <0x6 0x1e>;
                        assigned-clock-rates = <0x989680>;
                        #pwm-cells = <0x2>;
                        status = "okay";
                        pinctrl-names = "default";
                        pinctrl-0 = <0x14 0x15>;
                };

                pixelvalve@7e216000 {
                        compatible = "brcm,bcm2711-pixelvalve4";
                        reg = <0x7e216000 0x100>;
                        interrupts = <0x0 0x6e 0x4>;
                        status = "okay";
                };

                pixelvalve@7ec12000 {
                        compatible = "brcm,bcm2711-pixelvalve3";
                        reg = <0x7ec12000 0x100>;
                        interrupts = <0x0 0x6a 0x4>;
                        status = "disabled";
                };

                vec@7ec13000 {
                        compatible = "brcm,bcm2711-vec";
                        reg = <0x7ec13000 0x1000>;
                        clocks = <0x6 0x18>;
                        interrupts = <0x0 0x7b 0x4>;
                        status = "disabled";
                        power-domains = <0xb 0x7>;
                };

                clock@7ef00000 {
                        compatible = "brcm,brcm2711-dvp";
                        reg = <0x7ef00000 0x10>;
                        clocks = <0x16>;
                        #clock-cells = <0x1>;
                        #reset-cells = <0x1>;
                        phandle = <0x17>;
                };

                interrupt-controller@7ef00100 {
                        compatible = "brcm,bcm2711-l2-intc", "brcm,l2-intc";
                        reg = <0x7ef00100 0x30>;
                        interrupts = <0x0 0x60 0x4>;
                        interrupt-controller;
                        #interrupt-cells = <0x1>;
                        phandle = <0x18>;
                };

                hdmi@7ef00700 {
                        compatible = "brcm,bcm2711-hdmi0";
                        reg = <0x7ef00700 0x300 0x7ef00300 0x200 0x7ef00f00 0x80 0x7ef00f80 0x80 0x7ef01b00 0x200 0x7ef01f00 0x400 0x7ef00200 0x80 0x7ef04300 0x100 0x7ef20000 0x100>;
                        reg-names = "hdmi", "dvp", "phy", "rm", "packet", "metadata", "csc", "cec", "hd";
                        clock-names = "hdmi", "bvb", "audio", "cec";
                        resets = <0x17 0x0>;
                        interrupt-parent = <0x18>;
                        interrupts = <0x0 0x1 0x2 0x3 0x4 0x5>;
                        interrupt-names = "cec-tx", "cec-rx", "cec-low", "wakeup", "hpd-connected", "hpd-removed";
                        ddc = <0x19>;
                        dmas = <0x1a 0xa>;
                        dma-names = "audio-rx";
                        status = "okay";
                        clocks = <0x10 0xd 0x10 0xe 0x17 0x0 0x1b>;
                        wifi-2.4ghz-coexistence;
                };

                i2c@7ef04500 {
                        compatible = "brcm,bcm2711-hdmi-i2c";
                        reg = <0x7ef04500 0x100 0x7ef00b00 0x300>;
                        reg-names = "bsc", "auto-i2c";
                        clock-frequency = <0x17cdc>;
                        status = "okay";
                        phandle = <0x19>;
                };

                hdmi@7ef05700 {
                        compatible = "brcm,bcm2711-hdmi1";
                        reg = <0x7ef05700 0x300 0x7ef05300 0x200 0x7ef05f00 0x80 0x7ef05f80 0x80 0x7ef06b00 0x200 0x7ef06f00 0x400 0x7ef00280 0x80 0x7ef09300 0x100 0x7ef20000 0x100>;
                        reg-names = "hdmi", "dvp", "phy", "rm", "packet", "metadata", "csc", "cec", "hd";
                        ddc = <0x1c>;
                        clock-names = "hdmi", "bvb", "audio", "cec";
                        resets = <0x17 0x1>;
                        interrupt-parent = <0x18>;
                        interrupts = <0x8 0x7 0x6 0x9 0xa 0xb>;
                        interrupt-names = "cec-tx", "cec-rx", "cec-low", "wakeup", "hpd-connected", "hpd-removed";
                        dmas = <0x1a 0x11>;
                        dma-names = "audio-rx";
                        status = "okay";
                        clocks = <0x10 0xd 0x10 0xe 0x17 0x1 0x1b>;
                        wifi-2.4ghz-coexistence;
                };

                i2c@7ef09500 {
                        compatible = "brcm,bcm2711-hdmi-i2c";
                        reg = <0x7ef09500 0x100 0x7ef05b00 0x300>;
                        reg-names = "bsc", "auto-i2c";
                        clock-frequency = <0x17cdc>;
                        status = "okay";
                        phandle = <0x1c>;
                };

                firmware {
                        compatible = "raspberrypi,bcm2835-firmware", "simple-mfd";
                        #address-cells = <0x1>;
                        #size-cells = <0x1>;
                        mboxes = <0x1d>;
                        dma-ranges;
                        phandle = <0x1e>;

                        clocks {
                                compatible = "raspberrypi,firmware-clocks";
                                #clock-cells = <0x1>;
                                phandle = <0x10>;
                        };

                        gpio {
                                compatible = "raspberrypi,firmware-gpio";
                                gpio-controller;
                                #gpio-cells = <0x2>;
                                status = "okay";
                                gpio-line-names = "BT_ON", "WL_ON", "PWR_LED_OFF", "GLOBAL_RESET", "VDD_SD_IO_SEL", "CAM_GPIO", "SD_PWR_ON", "";
                                phandle = <0x9>;
                        };

                        reset {
                                compatible = "raspberrypi,firmware-reset";
                                #reset-cells = <0x1>;
                                phandle = <0x26>;
                        };
                };

                power {
                        compatible = "raspberrypi,bcm2835-power";
                        firmware = <0x1e>;
                        #power-domain-cells = <0x1>;
                        phandle = <0xb>;
                };

                mailbox@7e00b840 {
                        compatible = "brcm,bcm2835-vchiq";
                        reg = <0x7e00b840 0x3c>;
                        interrupts = <0x0 0x22 0x4>;
                };
        };

        clocks {

                clk-osc {
                        compatible = "fixed-clock";
                        #clock-cells = <0x0>;
                        clock-output-names = "osc";
                        clock-frequency = <0x337f980>;
                        phandle = <0x3>;
                };

                clk-usb {
                        compatible = "fixed-clock";
                        #clock-cells = <0x0>;
                        clock-output-names = "otg";
                        clock-frequency = <0x1c9c3800>;
                        phandle = <0x12>;
                };
        };

        phy {
                compatible = "usb-nop-xceiv";
                #phy-cells = <0x0>;
                phandle = <0x13>;
        };

        gpu {
                compatible = "brcm,bcm2711-vc5";
                status = "okay";
        };

        clk-27M {
                #clock-cells = <0x0>;
                compatible = "fixed-clock";
                clock-frequency = <0x19bfcc0>;
                clock-output-names = "27MHz-clock";
                phandle = <0x1b>;
        };

        clk-108M {
                #clock-cells = <0x0>;
                compatible = "fixed-clock";
                clock-frequency = <0x66ff300>;
                clock-output-names = "108MHz-clock";
                phandle = <0x16>;
        };

        emmc2bus {
                compatible = "simple-bus";
                #address-cells = <0x2>;
                #size-cells = <0x1>;
                ranges = <0x0 0x7e000000 0x0 0xfe000000 0x1800000>;
                dma-ranges = <0x0 0xc0000000 0x0 0x0 0x40000000>;

                mmc@7e340000 {
                        compatible = "brcm,bcm2711-emmc2";
                        reg = <0x0 0x7e340000 0x100>;
                        interrupts = <0x0 0x7e 0x4>;
                        clocks = <0x6 0x33>;
                        status = "okay";
                        vqmmc-supply = <0x1f>;
                        vmmc-supply = <0x20>;
                        broken-cd;
                };
        };

        arm-pmu {
                compatible = "arm,cortex-a72-pmu", "arm,armv8-pmuv3";
                interrupts = <0x0 0x10 0x4 0x0 0x11 0x4 0x0 0x12 0x4 0x0 0x13 0x4>;
                interrupt-affinity = <0x21 0x22 0x23 0x24>;
        };

        timer {
                compatible = "arm,armv8-timer";
                interrupts = <0x1 0xd 0xf08 0x1 0xe 0xf08 0x1 0xb 0xf08 0x1 0xa 0xf08>;
                arm,cpu-registers-not-fw-configured;
        };

        cpus {
                #address-cells = <0x1>;
                #size-cells = <0x0>;
                enable-method = "brcm,bcm2836-smp";

                cpu@0 {
                        device_type = "cpu";
                        compatible = "arm,cortex-a72";
                        reg = <0x0>;
                        enable-method = "spin-table";
                        cpu-release-addr = <0x0 0xd8>;
                        phandle = <0x21>;
                };

                cpu@1 {
                        device_type = "cpu";
                        compatible = "arm,cortex-a72";
                        reg = <0x1>;
                        enable-method = "spin-table";
                        cpu-release-addr = <0x0 0xe0>;
                        phandle = <0x22>;
                };

                cpu@2 {
                        device_type = "cpu";
                        compatible = "arm,cortex-a72";
                        reg = <0x2>;
                        enable-method = "spin-table";
                        cpu-release-addr = <0x0 0xe8>;
                        phandle = <0x23>;
                };

                cpu@3 {
                        device_type = "cpu";
                        compatible = "arm,cortex-a72";
                        reg = <0x3>;
                        enable-method = "spin-table";
                        cpu-release-addr = <0x0 0xf0>;
                        phandle = <0x24>;
                };
        };

        scb {
                compatible = "simple-bus";
                #address-cells = <0x2>;
                #size-cells = <0x1>;
                ranges = <0x0 0x7c000000 0x0 0xfc000000 0x3800000 0x6 0x0 0x6 0x0 0x40000000>;

                pcie@7d500000 {
                        compatible = "brcm,bcm2711-pcie";
                        reg = <0x0 0x7d500000 0x9310>;
                        device_type = "pci";
                        #address-cells = <0x3>;
                        #interrupt-cells = <0x1>;
                        #size-cells = <0x2>;
                        interrupts = <0x0 0x94 0x4 0x0 0x94 0x4>;
                        interrupt-names = "pcie", "msi";
                        interrupt-map-mask = <0x0 0x0 0x0 0x7>;
                        interrupt-map = <0x0 0x0 0x0 0x1 0x1 0x0 0x8f 0x4>;
                        msi-controller;
                        msi-parent = <0x25>;
                        ranges = <0x2000000 0x0 0xf8000000 0x6 0x0 0x0 0x4000000>;
                        dma-ranges = <0x2000000 0x0 0x0 0x0 0x0 0x0 0xc0000000>;
                        brcm,enable-ssc;
                        phandle = <0x25>;

                        pci@0,0 {
                                device_type = "pci";
                                #address-cells = <0x3>;
                                #size-cells = <0x2>;
                                ranges;
                                reg = <0x0 0x0 0x0 0x0 0x0>;

                                usb@0,0 {
                                        reg = <0x0 0x0 0x0 0x0 0x0>;
                                        resets = <0x26 0x0>;
                                };
                        };
                };

                ethernet@7d580000 {
                        compatible = "brcm,bcm2711-genet-v5";
                        reg = <0x0 0x7d580000 0x10000>;
                        #address-cells = <0x1>;
                        #size-cells = <0x1>;
                        interrupts = <0x0 0x9d 0x4 0x0 0x9e 0x4>;
                        status = "okay";
                        phy-handle = <0x27>;
                        phy-mode = "rgmii-rxid";

                        mdio@e14 {
                                compatible = "brcm,genet-mdio-v5";
                                reg = <0xe14 0x8>;
                                reg-names = "mdio";
                                #address-cells = <0x1>;
                                #size-cells = <0x0>;

                                ethernet-phy@1 {
                                        reg = <0x1>;
                                        phandle = <0x27>;
                                };
                        };
                };
        };

        leds {
                compatible = "gpio-leds";

                led-act {
                        label = "ACT";
                        default-state = "keep";
                        linux,default-trigger = "heartbeat";
                        gpios = <0x28 0x2a 0x0>;
                };

                led-pwr {
                        label = "PWR";
                        gpios = <0x9 0x2 0x1>;
                        default-state = "keep";
                        linux,default-trigger = "default-on";
                };
        };

        memory@0 {
                device_type = "memory";
                reg = <0x0 0x0 0x0>;
        };

        wifi-pwrseq {
                compatible = "mmc-pwrseq-simple";
                reset-gpios = <0x9 0x1 0x1>;
                phandle = <0xf>;
        };

        sd_io_1v8_reg {
                compatible = "regulator-gpio";
                regulator-name = "vdd-sd-io";
                regulator-min-microvolt = <0x1b7740>;
                regulator-max-microvolt = <0x325aa0>;
                regulator-boot-on;
                regulator-always-on;
                regulator-settling-time-us = <0x1388>;
                gpios = <0x9 0x4 0x0>;
                states = <0x1b7740 0x1 0x325aa0 0x0>;
                status = "okay";
                phandle = <0x1f>;
        };

        sd_vcc_reg {
                compatible = "regulator-fixed";
                regulator-name = "vcc-sd";
                regulator-min-microvolt = <0x325aa0>;
                regulator-max-microvolt = <0x325aa0>;
                regulator-boot-on;
                enable-active-high;
                gpio = <0x9 0x6 0x0>;
                phandle = <0x20>;
        };
};

 

참고