Merge branch 'master' of git://git.denx.de/u-boot-tegra
This commit is contained in:
@@ -16,8 +16,8 @@
|
||||
i2c2 = "/i2c@7000c400";
|
||||
i2c3 = "/i2c@7000c500";
|
||||
i2c4 = "/i2c@7000c700";
|
||||
sdhci0 = "/sdhci@78000600";
|
||||
sdhci1 = "/sdhci@78000400";
|
||||
mmc0 = "/sdhci@78000600";
|
||||
mmc1 = "/sdhci@78000400";
|
||||
usb0 = "/usb@7d000000";
|
||||
usb1 = "/usb@7d008000";
|
||||
};
|
||||
@@ -66,6 +66,7 @@
|
||||
sdhci@78000600 {
|
||||
bus-width = <8>;
|
||||
status = "okay";
|
||||
non-removable;
|
||||
};
|
||||
|
||||
usb@7d000000 {
|
||||
@@ -78,4 +79,17 @@
|
||||
nvidia,vbus-gpio = <&gpio TEGRA_GPIO(K, 6) GPIO_ACTIVE_HIGH>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
clocks {
|
||||
compatible = "simple-bus";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
clk32k_in: clock@0 {
|
||||
compatible = "fixed-clock";
|
||||
reg=<0>;
|
||||
#clock-cells = <0>;
|
||||
clock-frequency = <32768>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
@@ -1,53 +1,222 @@
|
||||
#include <dt-bindings/clock/tegra114-car.h>
|
||||
#include <dt-bindings/gpio/tegra-gpio.h>
|
||||
#include <dt-bindings/memory/tegra114-mc.h>
|
||||
#include <dt-bindings/pinctrl/pinctrl-tegra.h>
|
||||
#include <dt-bindings/interrupt-controller/arm-gic.h>
|
||||
|
||||
#include "skeleton.dtsi"
|
||||
|
||||
/ {
|
||||
compatible = "nvidia,tegra114";
|
||||
interrupt-parent = <&lic>;
|
||||
|
||||
tegra_car: clock {
|
||||
host1x@50000000 {
|
||||
compatible = "nvidia,tegra114-host1x", "simple-bus";
|
||||
reg = <0x50000000 0x00028000>;
|
||||
interrupts = <GIC_SPI 65 IRQ_TYPE_LEVEL_HIGH>, /* syncpt */
|
||||
<GIC_SPI 67 IRQ_TYPE_LEVEL_HIGH>; /* general */
|
||||
clocks = <&tegra_car TEGRA114_CLK_HOST1X>;
|
||||
resets = <&tegra_car 28>;
|
||||
reset-names = "host1x";
|
||||
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
|
||||
ranges = <0x54000000 0x54000000 0x01000000>;
|
||||
|
||||
gr2d@54140000 {
|
||||
compatible = "nvidia,tegra114-gr2d", "nvidia,tegra20-gr2d";
|
||||
reg = <0x54140000 0x00040000>;
|
||||
interrupts = <GIC_SPI 72 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&tegra_car TEGRA114_CLK_GR2D>;
|
||||
resets = <&tegra_car 21>;
|
||||
reset-names = "2d";
|
||||
};
|
||||
|
||||
gr3d@54180000 {
|
||||
compatible = "nvidia,tegra114-gr3d", "nvidia,tegra20-gr3d";
|
||||
reg = <0x54180000 0x00040000>;
|
||||
clocks = <&tegra_car TEGRA114_CLK_GR3D>;
|
||||
resets = <&tegra_car 24>;
|
||||
reset-names = "3d";
|
||||
};
|
||||
|
||||
dc@54200000 {
|
||||
compatible = "nvidia,tegra114-dc", "nvidia,tegra20-dc";
|
||||
reg = <0x54200000 0x00040000>;
|
||||
interrupts = <GIC_SPI 73 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&tegra_car TEGRA114_CLK_DISP1>,
|
||||
<&tegra_car TEGRA114_CLK_PLL_P>;
|
||||
clock-names = "dc", "parent";
|
||||
resets = <&tegra_car 27>;
|
||||
reset-names = "dc";
|
||||
|
||||
iommus = <&mc TEGRA_SWGROUP_DC>;
|
||||
|
||||
nvidia,head = <0>;
|
||||
|
||||
rgb {
|
||||
status = "disabled";
|
||||
};
|
||||
};
|
||||
|
||||
dc@54240000 {
|
||||
compatible = "nvidia,tegra114-dc", "nvidia,tegra20-dc";
|
||||
reg = <0x54240000 0x00040000>;
|
||||
interrupts = <GIC_SPI 74 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&tegra_car TEGRA114_CLK_DISP2>,
|
||||
<&tegra_car TEGRA114_CLK_PLL_P>;
|
||||
clock-names = "dc", "parent";
|
||||
resets = <&tegra_car 26>;
|
||||
reset-names = "dc";
|
||||
|
||||
iommus = <&mc TEGRA_SWGROUP_DCB>;
|
||||
|
||||
nvidia,head = <1>;
|
||||
|
||||
rgb {
|
||||
status = "disabled";
|
||||
};
|
||||
};
|
||||
|
||||
hdmi@54280000 {
|
||||
compatible = "nvidia,tegra114-hdmi";
|
||||
reg = <0x54280000 0x00040000>;
|
||||
interrupts = <GIC_SPI 75 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&tegra_car TEGRA114_CLK_HDMI>,
|
||||
<&tegra_car TEGRA114_CLK_PLL_D2_OUT0>;
|
||||
clock-names = "hdmi", "parent";
|
||||
resets = <&tegra_car 51>;
|
||||
reset-names = "hdmi";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
dsi@54300000 {
|
||||
compatible = "nvidia,tegra114-dsi";
|
||||
reg = <0x54300000 0x00040000>;
|
||||
clocks = <&tegra_car TEGRA114_CLK_DSIA>,
|
||||
<&tegra_car TEGRA114_CLK_DSIALP>,
|
||||
<&tegra_car TEGRA114_CLK_PLL_D_OUT0>;
|
||||
clock-names = "dsi", "lp", "parent";
|
||||
resets = <&tegra_car 48>;
|
||||
reset-names = "dsi";
|
||||
nvidia,mipi-calibrate = <&mipi 0x060>; /* DSIA & DSIB pads */
|
||||
status = "disabled";
|
||||
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
};
|
||||
|
||||
dsi@54400000 {
|
||||
compatible = "nvidia,tegra114-dsi";
|
||||
reg = <0x54400000 0x00040000>;
|
||||
clocks = <&tegra_car TEGRA114_CLK_DSIB>,
|
||||
<&tegra_car TEGRA114_CLK_DSIBLP>,
|
||||
<&tegra_car TEGRA114_CLK_PLL_D2_OUT0>;
|
||||
clock-names = "dsi", "lp", "parent";
|
||||
resets = <&tegra_car 82>;
|
||||
reset-names = "dsi";
|
||||
nvidia,mipi-calibrate = <&mipi 0x180>; /* DSIC & DSID pads */
|
||||
status = "disabled";
|
||||
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
};
|
||||
};
|
||||
|
||||
gic: interrupt-controller@50041000 {
|
||||
compatible = "arm,cortex-a15-gic";
|
||||
#interrupt-cells = <3>;
|
||||
interrupt-controller;
|
||||
reg = <0x50041000 0x1000>,
|
||||
<0x50042000 0x1000>,
|
||||
<0x50044000 0x2000>,
|
||||
<0x50046000 0x2000>;
|
||||
interrupts = <GIC_PPI 9
|
||||
(GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_HIGH)>;
|
||||
interrupt-parent = <&gic>;
|
||||
};
|
||||
|
||||
lic: interrupt-controller@60004000 {
|
||||
compatible = "nvidia,tegra114-ictlr", "nvidia,tegra30-ictlr";
|
||||
reg = <0x60004000 0x100>,
|
||||
<0x60004100 0x50>,
|
||||
<0x60004200 0x50>,
|
||||
<0x60004300 0x50>,
|
||||
<0x60004400 0x50>;
|
||||
interrupt-controller;
|
||||
#interrupt-cells = <3>;
|
||||
interrupt-parent = <&gic>;
|
||||
};
|
||||
|
||||
timer@60005000 {
|
||||
compatible = "nvidia,tegra114-timer", "nvidia,tegra30-timer", "nvidia,tegra20-timer";
|
||||
reg = <0x60005000 0x400>;
|
||||
interrupts = <GIC_SPI 0 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 1 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 41 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 42 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 121 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 122 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&tegra_car TEGRA114_CLK_TIMER>;
|
||||
};
|
||||
|
||||
tegra_car: clock@60006000 {
|
||||
compatible = "nvidia,tegra114-car";
|
||||
reg = <0x60006000 0x1000>;
|
||||
#clock-cells = <1>;
|
||||
#reset-cells = <1>;
|
||||
};
|
||||
|
||||
apbdma: dma {
|
||||
compatible = "nvidia,tegra114-apbdma", "nvidia,tegra30-apbdma", "nvidia,tegra20-apbdma";
|
||||
flow-controller@60007000 {
|
||||
compatible = "nvidia,tegra114-flowctrl";
|
||||
reg = <0x60007000 0x1000>;
|
||||
};
|
||||
|
||||
apbdma: dma@6000a000 {
|
||||
compatible = "nvidia,tegra114-apbdma";
|
||||
reg = <0x6000a000 0x1400>;
|
||||
interrupts = <0 104 0x04
|
||||
0 105 0x04
|
||||
0 106 0x04
|
||||
0 107 0x04
|
||||
0 108 0x04
|
||||
0 109 0x04
|
||||
0 110 0x04
|
||||
0 111 0x04
|
||||
0 112 0x04
|
||||
0 113 0x04
|
||||
0 114 0x04
|
||||
0 115 0x04
|
||||
0 116 0x04
|
||||
0 117 0x04
|
||||
0 118 0x04
|
||||
0 119 0x04
|
||||
0 128 0x04
|
||||
0 129 0x04
|
||||
0 130 0x04
|
||||
0 131 0x04
|
||||
0 132 0x04
|
||||
0 133 0x04
|
||||
0 134 0x04
|
||||
0 135 0x04
|
||||
0 136 0x04
|
||||
0 137 0x04
|
||||
0 138 0x04
|
||||
0 139 0x04
|
||||
0 140 0x04
|
||||
0 141 0x04
|
||||
0 142 0x04
|
||||
0 143 0x04>;
|
||||
interrupts = <GIC_SPI 104 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 105 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 106 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 107 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 108 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 109 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 110 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 111 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 112 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<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>,
|
||||
<GIC_SPI 117 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 118 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 119 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 128 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 129 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 130 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 131 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 132 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 133 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 134 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 135 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 136 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 137 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 138 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 139 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 140 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 141 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 142 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 143 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&tegra_car TEGRA114_CLK_APBDMA>;
|
||||
resets = <&tegra_car 34>;
|
||||
reset-names = "dma";
|
||||
#dma-cells = <1>;
|
||||
};
|
||||
|
||||
ahb: ahb@6000c000 {
|
||||
compatible = "nvidia,tegra114-ahb", "nvidia,tegra30-ahb";
|
||||
reg = <0x6000c000 0x150>;
|
||||
};
|
||||
|
||||
gpio: gpio@6000d000 {
|
||||
@@ -65,58 +234,31 @@
|
||||
gpio-controller;
|
||||
#interrupt-cells = <2>;
|
||||
interrupt-controller;
|
||||
/*
|
||||
gpio-ranges = <&pinmux 0 0 246>;
|
||||
*/
|
||||
};
|
||||
|
||||
i2c@7000c000 {
|
||||
compatible = "nvidia,tegra114-i2c";
|
||||
reg = <0x7000c000 0x100>;
|
||||
interrupts = <0 38 0x04>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
clocks = <&tegra_car 12>;
|
||||
status = "disabled";
|
||||
apbmisc@70000800 {
|
||||
compatible = "nvidia,tegra114-apbmisc", "nvidia,tegra20-apbmisc";
|
||||
reg = <0x70000800 0x64 /* Chip revision */
|
||||
0x70000008 0x04>; /* Strapping options */
|
||||
};
|
||||
|
||||
i2c@7000c400 {
|
||||
compatible = "nvidia,tegra114-i2c";
|
||||
reg = <0x7000c400 0x100>;
|
||||
interrupts = <0 84 0x04>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
clocks = <&tegra_car 54>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
i2c@7000c500 {
|
||||
compatible = "nvidia,tegra114-i2c";
|
||||
reg = <0x7000c500 0x100>;
|
||||
interrupts = <0 92 0x04>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
clocks = <&tegra_car 67>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
i2c@7000c700 {
|
||||
compatible = "nvidia,tegra114-i2c";
|
||||
reg = <0x7000c700 0x100>;
|
||||
interrupts = <0 120 0x04>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
clocks = <&tegra_car 103>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
i2c@7000d000 {
|
||||
compatible = "nvidia,tegra114-i2c";
|
||||
reg = <0x7000d000 0x100>;
|
||||
interrupts = <0 53 0x04>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
clocks = <&tegra_car 47>;
|
||||
status = "disabled";
|
||||
pinmux: pinmux@70000868 {
|
||||
compatible = "nvidia,tegra114-pinmux";
|
||||
reg = <0x70000868 0x148 /* Pad control registers */
|
||||
0x70003000 0x40c>; /* Mux registers */
|
||||
};
|
||||
|
||||
/*
|
||||
* There are two serial driver i.e. 8250 based simple serial
|
||||
* driver and APB DMA based serial driver for higher baudrate
|
||||
* and performace. To enable the 8250 based driver, the compatible
|
||||
* is "nvidia,tegra114-uart", "nvidia,tegra20-uart" and to enable
|
||||
* the APB DMA based serial driver, the compatible is
|
||||
* "nvidia,tegra114-hsuart", "nvidia,tegra30-hsuart".
|
||||
*/
|
||||
uarta: serial@70006000 {
|
||||
compatible = "nvidia,tegra114-uart", "nvidia,tegra20-uart";
|
||||
reg = <0x70006000 0x40>;
|
||||
@@ -169,134 +311,477 @@
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
pwm: pwm@7000a000 {
|
||||
compatible = "nvidia,tegra114-pwm", "nvidia,tegra20-pwm";
|
||||
reg = <0x7000a000 0x100>;
|
||||
#pwm-cells = <2>;
|
||||
clocks = <&tegra_car TEGRA114_CLK_PWM>;
|
||||
resets = <&tegra_car 17>;
|
||||
reset-names = "pwm";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
i2c@7000c000 {
|
||||
compatible = "nvidia,tegra114-i2c";
|
||||
reg = <0x7000c000 0x100>;
|
||||
interrupts = <GIC_SPI 38 IRQ_TYPE_LEVEL_HIGH>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
clocks = <&tegra_car TEGRA114_CLK_I2C1>;
|
||||
clock-names = "div-clk";
|
||||
resets = <&tegra_car 12>;
|
||||
reset-names = "i2c";
|
||||
dmas = <&apbdma 21>, <&apbdma 21>;
|
||||
dma-names = "rx", "tx";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
i2c@7000c400 {
|
||||
compatible = "nvidia,tegra114-i2c";
|
||||
reg = <0x7000c400 0x100>;
|
||||
interrupts = <GIC_SPI 84 IRQ_TYPE_LEVEL_HIGH>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
clocks = <&tegra_car TEGRA114_CLK_I2C2>;
|
||||
clock-names = "div-clk";
|
||||
resets = <&tegra_car 54>;
|
||||
reset-names = "i2c";
|
||||
dmas = <&apbdma 22>, <&apbdma 22>;
|
||||
dma-names = "rx", "tx";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
i2c@7000c500 {
|
||||
compatible = "nvidia,tegra114-i2c";
|
||||
reg = <0x7000c500 0x100>;
|
||||
interrupts = <GIC_SPI 92 IRQ_TYPE_LEVEL_HIGH>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
clocks = <&tegra_car TEGRA114_CLK_I2C3>;
|
||||
clock-names = "div-clk";
|
||||
resets = <&tegra_car 67>;
|
||||
reset-names = "i2c";
|
||||
dmas = <&apbdma 23>, <&apbdma 23>;
|
||||
dma-names = "rx", "tx";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
i2c@7000c700 {
|
||||
compatible = "nvidia,tegra114-i2c";
|
||||
reg = <0x7000c700 0x100>;
|
||||
interrupts = <GIC_SPI 120 IRQ_TYPE_LEVEL_HIGH>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
clocks = <&tegra_car TEGRA114_CLK_I2C4>;
|
||||
clock-names = "div-clk";
|
||||
resets = <&tegra_car 103>;
|
||||
reset-names = "i2c";
|
||||
dmas = <&apbdma 26>, <&apbdma 26>;
|
||||
dma-names = "rx", "tx";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
i2c@7000d000 {
|
||||
compatible = "nvidia,tegra114-i2c";
|
||||
reg = <0x7000d000 0x100>;
|
||||
interrupts = <GIC_SPI 53 IRQ_TYPE_LEVEL_HIGH>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
clocks = <&tegra_car TEGRA114_CLK_I2C5>;
|
||||
clock-names = "div-clk";
|
||||
resets = <&tegra_car 47>;
|
||||
reset-names = "i2c";
|
||||
dmas = <&apbdma 24>, <&apbdma 24>;
|
||||
dma-names = "rx", "tx";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
spi@7000d400 {
|
||||
compatible = "nvidia,tegra114-spi";
|
||||
reg = <0x7000d400 0x200>;
|
||||
interrupts = <0 59 0x04>;
|
||||
nvidia,dma-request-selector = <&apbdma 15>;
|
||||
interrupts = <GIC_SPI 59 IRQ_TYPE_LEVEL_HIGH>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
clocks = <&tegra_car TEGRA114_CLK_SBC1>;
|
||||
clock-names = "spi";
|
||||
resets = <&tegra_car 41>;
|
||||
reset-names = "spi";
|
||||
dmas = <&apbdma 15>, <&apbdma 15>;
|
||||
dma-names = "rx", "tx";
|
||||
status = "disabled";
|
||||
/* PERIPH_ID_SBC1, PLLP_OUT0 */
|
||||
clocks = <&tegra_car 41>;
|
||||
};
|
||||
|
||||
spi@7000d600 {
|
||||
compatible = "nvidia,tegra114-spi";
|
||||
reg = <0x7000d600 0x200>;
|
||||
interrupts = <0 82 0x04>;
|
||||
nvidia,dma-request-selector = <&apbdma 16>;
|
||||
interrupts = <GIC_SPI 82 IRQ_TYPE_LEVEL_HIGH>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
clocks = <&tegra_car TEGRA114_CLK_SBC2>;
|
||||
clock-names = "spi";
|
||||
resets = <&tegra_car 44>;
|
||||
reset-names = "spi";
|
||||
dmas = <&apbdma 16>, <&apbdma 16>;
|
||||
dma-names = "rx", "tx";
|
||||
status = "disabled";
|
||||
/* PERIPH_ID_SBC2, PLLP_OUT0 */
|
||||
clocks = <&tegra_car 44>;
|
||||
};
|
||||
|
||||
spi@7000d800 {
|
||||
compatible = "nvidia,tegra114-spi";
|
||||
reg = <0x7000d800 0x200>;
|
||||
interrupts = <0 83 0x04>;
|
||||
nvidia,dma-request-selector = <&apbdma 17>;
|
||||
interrupts = <GIC_SPI 83 IRQ_TYPE_LEVEL_HIGH>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
clocks = <&tegra_car TEGRA114_CLK_SBC3>;
|
||||
clock-names = "spi";
|
||||
resets = <&tegra_car 46>;
|
||||
reset-names = "spi";
|
||||
dmas = <&apbdma 17>, <&apbdma 17>;
|
||||
dma-names = "rx", "tx";
|
||||
status = "disabled";
|
||||
/* PERIPH_ID_SBC3, PLLP_OUT0 */
|
||||
clocks = <&tegra_car 46>;
|
||||
};
|
||||
|
||||
spi@7000da00 {
|
||||
compatible = "nvidia,tegra114-spi";
|
||||
reg = <0x7000da00 0x200>;
|
||||
interrupts = <0 93 0x04>;
|
||||
nvidia,dma-request-selector = <&apbdma 18>;
|
||||
interrupts = <GIC_SPI 93 IRQ_TYPE_LEVEL_HIGH>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
clocks = <&tegra_car TEGRA114_CLK_SBC4>;
|
||||
clock-names = "spi";
|
||||
resets = <&tegra_car 68>;
|
||||
reset-names = "spi";
|
||||
dmas = <&apbdma 18>, <&apbdma 18>;
|
||||
dma-names = "rx", "tx";
|
||||
status = "disabled";
|
||||
/* PERIPH_ID_SBC4, PLLP_OUT0 */
|
||||
clocks = <&tegra_car 68>;
|
||||
};
|
||||
|
||||
spi@7000dc00 {
|
||||
compatible = "nvidia,tegra114-spi";
|
||||
reg = <0x7000dc00 0x200>;
|
||||
interrupts = <0 94 0x04>;
|
||||
nvidia,dma-request-selector = <&apbdma 27>;
|
||||
interrupts = <GIC_SPI 94 IRQ_TYPE_LEVEL_HIGH>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
clocks = <&tegra_car TEGRA114_CLK_SBC5>;
|
||||
clock-names = "spi";
|
||||
resets = <&tegra_car 104>;
|
||||
reset-names = "spi";
|
||||
dmas = <&apbdma 27>, <&apbdma 27>;
|
||||
dma-names = "rx", "tx";
|
||||
status = "disabled";
|
||||
/* PERIPH_ID_SBC5, PLLP_OUT0 */
|
||||
clocks = <&tegra_car 104>;
|
||||
};
|
||||
|
||||
spi@7000de00 {
|
||||
compatible = "nvidia,tegra114-spi";
|
||||
reg = <0x7000de00 0x200>;
|
||||
interrupts = <0 79 0x04>;
|
||||
nvidia,dma-request-selector = <&apbdma 28>;
|
||||
interrupts = <GIC_SPI 79 IRQ_TYPE_LEVEL_HIGH>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
clocks = <&tegra_car TEGRA114_CLK_SBC6>;
|
||||
clock-names = "spi";
|
||||
resets = <&tegra_car 105>;
|
||||
reset-names = "spi";
|
||||
dmas = <&apbdma 28>, <&apbdma 28>;
|
||||
dma-names = "rx", "tx";
|
||||
status = "disabled";
|
||||
/* PERIPH_ID_SBC6, PLLP_OUT0 */
|
||||
clocks = <&tegra_car 105>;
|
||||
};
|
||||
|
||||
rtc@7000e000 {
|
||||
compatible = "nvidia,tegra114-rtc", "nvidia,tegra20-rtc";
|
||||
reg = <0x7000e000 0x100>;
|
||||
interrupts = <GIC_SPI 2 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&tegra_car TEGRA114_CLK_RTC>;
|
||||
};
|
||||
|
||||
kbc@7000e200 {
|
||||
compatible = "nvidia,tegra114-kbc";
|
||||
reg = <0x7000e200 0x100>;
|
||||
interrupts = <GIC_SPI 85 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&tegra_car TEGRA114_CLK_KBC>;
|
||||
resets = <&tegra_car 36>;
|
||||
reset-names = "kbc";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
pmc@7000e400 {
|
||||
compatible = "nvidia,tegra114-pmc";
|
||||
reg = <0x7000e400 0x400>;
|
||||
clocks = <&tegra_car TEGRA114_CLK_PCLK>, <&clk32k_in>;
|
||||
clock-names = "pclk", "clk32k_in";
|
||||
};
|
||||
|
||||
fuse@7000f800 {
|
||||
compatible = "nvidia,tegra114-efuse";
|
||||
reg = <0x7000f800 0x400>;
|
||||
clocks = <&tegra_car TEGRA114_CLK_FUSE>;
|
||||
clock-names = "fuse";
|
||||
resets = <&tegra_car 39>;
|
||||
reset-names = "fuse";
|
||||
};
|
||||
|
||||
mc: memory-controller@70019000 {
|
||||
compatible = "nvidia,tegra114-mc";
|
||||
reg = <0x70019000 0x1000>;
|
||||
clocks = <&tegra_car TEGRA114_CLK_MC>;
|
||||
clock-names = "mc";
|
||||
|
||||
interrupts = <GIC_SPI 77 IRQ_TYPE_LEVEL_HIGH>;
|
||||
|
||||
#iommu-cells = <1>;
|
||||
};
|
||||
|
||||
ahub@70080000 {
|
||||
compatible = "nvidia,tegra114-ahub";
|
||||
reg = <0x70080000 0x200>,
|
||||
<0x70080200 0x100>,
|
||||
<0x70081000 0x200>;
|
||||
interrupts = <GIC_SPI 103 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&tegra_car TEGRA114_CLK_D_AUDIO>,
|
||||
<&tegra_car TEGRA114_CLK_APBIF>;
|
||||
clock-names = "d_audio", "apbif";
|
||||
resets = <&tegra_car 106>, /* d_audio */
|
||||
<&tegra_car 107>, /* apbif */
|
||||
<&tegra_car 30>, /* i2s0 */
|
||||
<&tegra_car 11>, /* i2s1 */
|
||||
<&tegra_car 18>, /* i2s2 */
|
||||
<&tegra_car 101>, /* i2s3 */
|
||||
<&tegra_car 102>, /* i2s4 */
|
||||
<&tegra_car 108>, /* dam0 */
|
||||
<&tegra_car 109>, /* dam1 */
|
||||
<&tegra_car 110>, /* dam2 */
|
||||
<&tegra_car 10>, /* spdif */
|
||||
<&tegra_car 153>, /* amx */
|
||||
<&tegra_car 154>; /* adx */
|
||||
reset-names = "d_audio", "apbif", "i2s0", "i2s1", "i2s2",
|
||||
"i2s3", "i2s4", "dam0", "dam1", "dam2",
|
||||
"spdif", "amx", "adx";
|
||||
dmas = <&apbdma 1>, <&apbdma 1>,
|
||||
<&apbdma 2>, <&apbdma 2>,
|
||||
<&apbdma 3>, <&apbdma 3>,
|
||||
<&apbdma 4>, <&apbdma 4>,
|
||||
<&apbdma 6>, <&apbdma 6>,
|
||||
<&apbdma 7>, <&apbdma 7>,
|
||||
<&apbdma 12>, <&apbdma 12>,
|
||||
<&apbdma 13>, <&apbdma 13>,
|
||||
<&apbdma 14>, <&apbdma 14>,
|
||||
<&apbdma 29>, <&apbdma 29>;
|
||||
dma-names = "rx0", "tx0", "rx1", "tx1", "rx2", "tx2",
|
||||
"rx3", "tx3", "rx4", "tx4", "rx5", "tx5",
|
||||
"rx6", "tx6", "rx7", "tx7", "rx8", "tx8",
|
||||
"rx9", "tx9";
|
||||
ranges;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
|
||||
tegra_i2s0: i2s@70080300 {
|
||||
compatible = "nvidia,tegra114-i2s", "nvidia,tegra30-i2s";
|
||||
reg = <0x70080300 0x100>;
|
||||
nvidia,ahub-cif-ids = <4 4>;
|
||||
clocks = <&tegra_car TEGRA114_CLK_I2S0>;
|
||||
resets = <&tegra_car 30>;
|
||||
reset-names = "i2s";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
tegra_i2s1: i2s@70080400 {
|
||||
compatible = "nvidia,tegra114-i2s", "nvidia,tegra30-i2s";
|
||||
reg = <0x70080400 0x100>;
|
||||
nvidia,ahub-cif-ids = <5 5>;
|
||||
clocks = <&tegra_car TEGRA114_CLK_I2S1>;
|
||||
resets = <&tegra_car 11>;
|
||||
reset-names = "i2s";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
tegra_i2s2: i2s@70080500 {
|
||||
compatible = "nvidia,tegra114-i2s", "nvidia,tegra30-i2s";
|
||||
reg = <0x70080500 0x100>;
|
||||
nvidia,ahub-cif-ids = <6 6>;
|
||||
clocks = <&tegra_car TEGRA114_CLK_I2S2>;
|
||||
resets = <&tegra_car 18>;
|
||||
reset-names = "i2s";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
tegra_i2s3: i2s@70080600 {
|
||||
compatible = "nvidia,tegra114-i2s", "nvidia,tegra30-i2s";
|
||||
reg = <0x70080600 0x100>;
|
||||
nvidia,ahub-cif-ids = <7 7>;
|
||||
clocks = <&tegra_car TEGRA114_CLK_I2S3>;
|
||||
resets = <&tegra_car 101>;
|
||||
reset-names = "i2s";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
tegra_i2s4: i2s@70080700 {
|
||||
compatible = "nvidia,tegra114-i2s", "nvidia,tegra30-i2s";
|
||||
reg = <0x70080700 0x100>;
|
||||
nvidia,ahub-cif-ids = <8 8>;
|
||||
clocks = <&tegra_car TEGRA114_CLK_I2S4>;
|
||||
resets = <&tegra_car 102>;
|
||||
reset-names = "i2s";
|
||||
status = "disabled";
|
||||
};
|
||||
};
|
||||
|
||||
mipi: mipi@700e3000 {
|
||||
compatible = "nvidia,tegra114-mipi";
|
||||
reg = <0x700e3000 0x100>;
|
||||
clocks = <&tegra_car TEGRA114_CLK_MIPI_CAL>;
|
||||
#nvidia,mipi-calibrate-cells = <1>;
|
||||
};
|
||||
|
||||
sdhci@78000000 {
|
||||
compatible = "nvidia,tegra114-sdhci", "nvidia,tegra30-sdhci";
|
||||
reg = <0x78000000 0x200>;
|
||||
interrupts = <0 14 0x04>;
|
||||
clocks = <&tegra_car 14>;
|
||||
status = "disable";
|
||||
interrupts = <GIC_SPI 14 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&tegra_car TEGRA114_CLK_SDMMC1>;
|
||||
resets = <&tegra_car 14>;
|
||||
reset-names = "sdhci";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
sdhci@78000200 {
|
||||
compatible = "nvidia,tegra114-sdhci", "nvidia,tegra30-sdhci";
|
||||
reg = <0x78000200 0x200>;
|
||||
interrupts = <0 15 0x04>;
|
||||
clocks = <&tegra_car 9>;
|
||||
status = "disable";
|
||||
interrupts = <GIC_SPI 15 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&tegra_car TEGRA114_CLK_SDMMC2>;
|
||||
resets = <&tegra_car 9>;
|
||||
reset-names = "sdhci";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
sdhci@78000400 {
|
||||
compatible = "nvidia,tegra114-sdhci", "nvidia,tegra30-sdhci";
|
||||
reg = <0x78000400 0x200>;
|
||||
interrupts = <0 19 0x04>;
|
||||
clocks = <&tegra_car 69>;
|
||||
status = "disable";
|
||||
interrupts = <GIC_SPI 19 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&tegra_car TEGRA114_CLK_SDMMC3>;
|
||||
resets = <&tegra_car 69>;
|
||||
reset-names = "sdhci";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
sdhci@78000600 {
|
||||
compatible = "nvidia,tegra114-sdhci", "nvidia,tegra30-sdhci";
|
||||
reg = <0x78000600 0x200>;
|
||||
interrupts = <0 31 0x04>;
|
||||
clocks = <&tegra_car 15>;
|
||||
status = "disable";
|
||||
};
|
||||
|
||||
usb@7d000000 {
|
||||
compatible = "nvidia,tegra114-ehci";
|
||||
reg = <0x7d000000 0x4000>;
|
||||
interrupts = <52>;
|
||||
phy_type = "utmi";
|
||||
clocks = <&tegra_car 22>; /* PERIPH_ID_USBD */
|
||||
interrupts = <GIC_SPI 31 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&tegra_car TEGRA114_CLK_SDMMC4>;
|
||||
resets = <&tegra_car 15>;
|
||||
reset-names = "sdhci";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
usb@7d004000 {
|
||||
compatible = "nvidia,tegra114-ehci";
|
||||
reg = <0x7d004000 0x4000>;
|
||||
interrupts = <53>;
|
||||
phy_type = "hsic";
|
||||
clocks = <&tegra_car 58>; /* PERIPH_ID_USB2 */
|
||||
usb@7d000000 {
|
||||
compatible = "nvidia,tegra114-ehci", "nvidia,tegra30-ehci", "usb-ehci";
|
||||
reg = <0x7d000000 0x4000>;
|
||||
interrupts = <GIC_SPI 20 IRQ_TYPE_LEVEL_HIGH>;
|
||||
phy_type = "utmi";
|
||||
clocks = <&tegra_car TEGRA114_CLK_USBD>;
|
||||
resets = <&tegra_car 22>;
|
||||
reset-names = "usb";
|
||||
nvidia,phy = <&phy1>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
phy1: usb-phy@7d000000 {
|
||||
compatible = "nvidia,tegra114-usb-phy", "nvidia,tegra30-usb-phy";
|
||||
reg = <0x7d000000 0x4000 0x7d000000 0x4000>;
|
||||
phy_type = "utmi";
|
||||
clocks = <&tegra_car TEGRA114_CLK_USBD>,
|
||||
<&tegra_car TEGRA114_CLK_PLL_U>,
|
||||
<&tegra_car TEGRA114_CLK_USBD>;
|
||||
clock-names = "reg", "pll_u", "utmi-pads";
|
||||
resets = <&tegra_car 22>, <&tegra_car 22>;
|
||||
reset-names = "usb", "utmi-pads";
|
||||
nvidia,hssync-start-delay = <0>;
|
||||
nvidia,idle-wait-delay = <17>;
|
||||
nvidia,elastic-limit = <16>;
|
||||
nvidia,term-range-adj = <6>;
|
||||
nvidia,xcvr-setup = <9>;
|
||||
nvidia,xcvr-lsfslew = <0>;
|
||||
nvidia,xcvr-lsrslew = <3>;
|
||||
nvidia,hssquelch-level = <2>;
|
||||
nvidia,hsdiscon-level = <5>;
|
||||
nvidia,xcvr-hsslew = <12>;
|
||||
nvidia,has-utmi-pad-registers;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
usb@7d008000 {
|
||||
compatible = "nvidia,tegra114-ehci";
|
||||
compatible = "nvidia,tegra114-ehci", "nvidia,tegra30-ehci", "usb-ehci";
|
||||
reg = <0x7d008000 0x4000>;
|
||||
interrupts = <129>;
|
||||
interrupts = <GIC_SPI 97 IRQ_TYPE_LEVEL_HIGH>;
|
||||
phy_type = "utmi";
|
||||
clocks = <&tegra_car 59>; /* PERIPH_ID_USB3 */
|
||||
clocks = <&tegra_car TEGRA114_CLK_USB3>;
|
||||
resets = <&tegra_car 59>;
|
||||
reset-names = "usb";
|
||||
nvidia,phy = <&phy3>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
phy3: usb-phy@7d008000 {
|
||||
compatible = "nvidia,tegra114-usb-phy", "nvidia,tegra30-usb-phy";
|
||||
reg = <0x7d008000 0x4000 0x7d000000 0x4000>;
|
||||
phy_type = "utmi";
|
||||
clocks = <&tegra_car TEGRA114_CLK_USB3>,
|
||||
<&tegra_car TEGRA114_CLK_PLL_U>,
|
||||
<&tegra_car TEGRA114_CLK_USBD>;
|
||||
clock-names = "reg", "pll_u", "utmi-pads";
|
||||
resets = <&tegra_car 59>, <&tegra_car 22>;
|
||||
reset-names = "usb", "utmi-pads";
|
||||
nvidia,hssync-start-delay = <0>;
|
||||
nvidia,idle-wait-delay = <17>;
|
||||
nvidia,elastic-limit = <16>;
|
||||
nvidia,term-range-adj = <6>;
|
||||
nvidia,xcvr-setup = <9>;
|
||||
nvidia,xcvr-lsfslew = <0>;
|
||||
nvidia,xcvr-lsrslew = <3>;
|
||||
nvidia,hssquelch-level = <2>;
|
||||
nvidia,hsdiscon-level = <5>;
|
||||
nvidia,xcvr-hsslew = <12>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
cpus {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
cpu@0 {
|
||||
device_type = "cpu";
|
||||
compatible = "arm,cortex-a15";
|
||||
reg = <0>;
|
||||
};
|
||||
|
||||
cpu@1 {
|
||||
device_type = "cpu";
|
||||
compatible = "arm,cortex-a15";
|
||||
reg = <1>;
|
||||
};
|
||||
|
||||
cpu@2 {
|
||||
device_type = "cpu";
|
||||
compatible = "arm,cortex-a15";
|
||||
reg = <2>;
|
||||
};
|
||||
|
||||
cpu@3 {
|
||||
device_type = "cpu";
|
||||
compatible = "arm,cortex-a15";
|
||||
reg = <3>;
|
||||
};
|
||||
};
|
||||
|
||||
timer {
|
||||
compatible = "arm,armv7-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)>;
|
||||
interrupt-parent = <&gic>;
|
||||
};
|
||||
};
|
||||
|
||||
@@ -16,8 +16,8 @@
|
||||
i2c2 = "/i2c@7000c400";
|
||||
i2c3 = "/i2c@7000c500";
|
||||
i2c4 = "/i2c@7000c700";
|
||||
sdhci0 = "/sdhci@700b0600";
|
||||
sdhci1 = "/sdhci@700b0400";
|
||||
mmc0 = "/sdhci@700b0600";
|
||||
mmc1 = "/sdhci@700b0400";
|
||||
spi0 = "/spi@7000d400";
|
||||
spi1 = "/spi@7000da00";
|
||||
usb0 = "/usb@7d000000";
|
||||
|
||||
@@ -16,8 +16,8 @@
|
||||
i2c2 = "/i2c@7000c400";
|
||||
i2c3 = "/i2c@7000c500";
|
||||
i2c4 = "/i2c@7000c700";
|
||||
sdhci0 = "/sdhci@700b0600";
|
||||
sdhci1 = "/sdhci@700b0400";
|
||||
mmc0 = "/sdhci@700b0600";
|
||||
mmc1 = "/sdhci@700b0400";
|
||||
spi0 = "/spi@7000d400";
|
||||
spi1 = "/spi@7000da00";
|
||||
usb0 = "/usb@7d000000";
|
||||
@@ -312,6 +312,7 @@
|
||||
sdhci@700b0600 {
|
||||
status = "okay";
|
||||
bus-width = <8>;
|
||||
non-removable;
|
||||
};
|
||||
|
||||
usb@7d000000 {
|
||||
|
||||
@@ -15,10 +15,10 @@
|
||||
i2c3 = "/i2c@7000c500";
|
||||
i2c4 = "/i2c@7000c700";
|
||||
i2c5 = "/i2c@7000d100";
|
||||
rtc0 = "/i2c@0,7000d000/pmic@40";
|
||||
rtc1 = "/rtc@0,7000e000";
|
||||
sdhci0 = "/sdhci@700b0600";
|
||||
sdhci1 = "/sdhci@700b0400";
|
||||
rtc0 = "/i2c@7000d000/pmic@40";
|
||||
rtc1 = "/rtc@7000e000";
|
||||
mmc0 = "/sdhci@700b0600";
|
||||
mmc1 = "/sdhci@700b0400";
|
||||
spi0 = "/spi@7000d400";
|
||||
spi1 = "/spi@7000da00";
|
||||
usb0 = "/usb@7d000000";
|
||||
@@ -58,7 +58,7 @@
|
||||
ddc-i2c-bus = <&dpaux>;
|
||||
};
|
||||
|
||||
sdhci@0,700b0400 { /* SD Card on this bus */
|
||||
sdhci@700b0400 { /* SD Card on this bus */
|
||||
wp-gpios = <&gpio TEGRA_GPIO(Q, 4) GPIO_ACTIVE_LOW>;
|
||||
};
|
||||
|
||||
@@ -69,7 +69,7 @@
|
||||
nvidia,model = "GoogleNyanBig";
|
||||
};
|
||||
|
||||
pinmux@0,70000868 {
|
||||
pinmux@70000868 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinmux_default>;
|
||||
|
||||
|
||||
@@ -3,8 +3,8 @@
|
||||
|
||||
/ {
|
||||
aliases {
|
||||
rtc0 = "/i2c@0,7000d000/pmic@40";
|
||||
rtc1 = "/rtc@0,7000e000";
|
||||
rtc0 = "/i2c@7000d000/pmic@40";
|
||||
rtc1 = "/rtc@7000e000";
|
||||
serial0 = &uarta;
|
||||
};
|
||||
|
||||
@@ -424,10 +424,12 @@
|
||||
|
||||
usb@7d004000 { /* Internal webcam. */
|
||||
status = "okay";
|
||||
phy_type = "hsic";
|
||||
};
|
||||
|
||||
usb-phy@7d004000 {
|
||||
status = "okay";
|
||||
phy_type = "hsic";
|
||||
vbus-supply = <&vdd_run_cam>;
|
||||
};
|
||||
|
||||
|
||||
@@ -17,8 +17,8 @@
|
||||
i2c3 = "/i2c@7000c500";
|
||||
i2c4 = "/i2c@7000c700";
|
||||
i2c5 = "/i2c@7000d100";
|
||||
sdhci0 = "/sdhci@700b0600";
|
||||
sdhci1 = "/sdhci@700b0400";
|
||||
mmc0 = "/sdhci@700b0600";
|
||||
mmc1 = "/sdhci@700b0400";
|
||||
spi0 = "/spi@7000d400";
|
||||
spi1 = "/spi@7000da00";
|
||||
usb0 = "/usb@7d000000";
|
||||
@@ -81,6 +81,7 @@
|
||||
sdhci@700b0600 {
|
||||
status = "okay";
|
||||
bus-width = <8>;
|
||||
non-removable;
|
||||
};
|
||||
|
||||
usb@7d000000 {
|
||||
|
||||
@@ -196,13 +196,18 @@
|
||||
|
||||
lic: interrupt-controller@60004000 {
|
||||
compatible = "nvidia,tegra124-ictlr", "nvidia,tegra30-ictlr";
|
||||
reg = <0x0 0x60004000 0x0 0x100>,
|
||||
<0x0 0x60004100 0x0 0x100>,
|
||||
<0x0 0x60004200 0x0 0x100>,
|
||||
<0x0 0x60004300 0x0 0x100>,
|
||||
<0x0 0x60004400 0x0 0x100>;
|
||||
interrupt-controller;
|
||||
#interrupt-cells = <3>;
|
||||
interrupt-parent = <&gic>;
|
||||
};
|
||||
|
||||
timer@60005000 {
|
||||
compatible = "nvidia,tegra124-timer", "nvidia,tegra20-timer";
|
||||
compatible = "nvidia,tegra124-timer", "nvidia,tegra30-timer", "nvidia,tegra20-timer";
|
||||
reg = <0x60005000 0x400>;
|
||||
interrupts = <GIC_SPI 0 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 1 IRQ_TYPE_LEVEL_HIGH>,
|
||||
@@ -316,7 +321,7 @@
|
||||
* driver and APB DMA based serial driver for higher baudrate
|
||||
* and performace. To enable the 8250 based driver, the compatible
|
||||
* is "nvidia,tegra124-uart", "nvidia,tegra20-uart" and to enable
|
||||
* the APB DMA based serial driver, the comptible is
|
||||
* the APB DMA based serial driver, the compatible is
|
||||
* "nvidia,tegra124-hsuart", "nvidia,tegra30-hsuart".
|
||||
*/
|
||||
uarta: serial@70006000 {
|
||||
@@ -399,10 +404,15 @@
|
||||
i2c@7000c400 {
|
||||
compatible = "nvidia,tegra124-i2c", "nvidia,tegra114-i2c";
|
||||
reg = <0x7000c400 0x100>;
|
||||
interrupts = <0 84 0x04>;
|
||||
interrupts = <GIC_SPI 84 IRQ_TYPE_LEVEL_HIGH>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
clocks = <&tegra_car 54>;
|
||||
clocks = <&tegra_car TEGRA124_CLK_I2C2>;
|
||||
clock-names = "div-clk";
|
||||
resets = <&tegra_car 54>;
|
||||
reset-names = "i2c";
|
||||
dmas = <&apbdma 22>, <&apbdma 22>;
|
||||
dma-names = "rx", "tx";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
@@ -631,6 +641,41 @@
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
usb@70090000 {
|
||||
compatible = "nvidia,tegra124-xusb";
|
||||
reg = <0x70090000 0x8000>,
|
||||
<0x70098000 0x1000>,
|
||||
<0x70099000 0x1000>;
|
||||
reg-names = "hcd", "fpci", "ipfs";
|
||||
|
||||
interrupts = <GIC_SPI 39 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 40 IRQ_TYPE_LEVEL_HIGH>;
|
||||
|
||||
clocks = <&tegra_car TEGRA124_CLK_XUSB_HOST>,
|
||||
<&tegra_car TEGRA124_CLK_XUSB_HOST_SRC>,
|
||||
<&tegra_car TEGRA124_CLK_XUSB_FALCON_SRC>,
|
||||
<&tegra_car TEGRA124_CLK_XUSB_SS>,
|
||||
<&tegra_car TEGRA124_CLK_XUSB_SS_DIV2>,
|
||||
<&tegra_car TEGRA124_CLK_XUSB_SS_SRC>,
|
||||
<&tegra_car TEGRA124_CLK_XUSB_HS_SRC>,
|
||||
<&tegra_car TEGRA124_CLK_XUSB_FS_SRC>,
|
||||
<&tegra_car TEGRA124_CLK_PLL_U_480M>,
|
||||
<&tegra_car TEGRA124_CLK_CLK_M>,
|
||||
<&tegra_car TEGRA124_CLK_PLL_E>;
|
||||
clock-names = "xusb_host", "xusb_host_src",
|
||||
"xusb_falcon_src", "xusb_ss",
|
||||
"xusb_ss_div2", "xusb_ss_src",
|
||||
"xusb_hs_src", "xusb_fs_src",
|
||||
"pll_u_480m", "clk_m", "pll_e";
|
||||
resets = <&tegra_car 89>, <&tegra_car 156>,
|
||||
<&tegra_car 143>;
|
||||
reset-names = "xusb_host", "xusb_ss", "xusb_src";
|
||||
|
||||
nvidia,xusb-padctl = <&padctl>;
|
||||
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
padctl: padctl@7009f000 {
|
||||
compatible = "nvidia,tegra124-xusb-padctl";
|
||||
reg = <0x7009f000 0x1000>;
|
||||
@@ -820,7 +865,7 @@
|
||||
};
|
||||
|
||||
usb@7d000000 {
|
||||
compatible = "nvidia,tegra124-ehci", "nvidia,tegra30-ehci";
|
||||
compatible = "nvidia,tegra124-ehci", "nvidia,tegra30-ehci", "usb-ehci";
|
||||
reg = <0x7d000000 0x4000>;
|
||||
interrupts = <GIC_SPI 20 IRQ_TYPE_LEVEL_HIGH>;
|
||||
phy_type = "utmi";
|
||||
@@ -857,10 +902,10 @@
|
||||
};
|
||||
|
||||
usb@7d004000 {
|
||||
compatible = "nvidia,tegra124-ehci", "nvidia,tegra30-ehci";
|
||||
compatible = "nvidia,tegra124-ehci", "nvidia,tegra30-ehci", "usb-ehci";
|
||||
reg = <0x7d004000 0x4000>;
|
||||
interrupts = <GIC_SPI 21 IRQ_TYPE_LEVEL_HIGH>;
|
||||
phy_type = "hsic";
|
||||
phy_type = "utmi";
|
||||
clocks = <&tegra_car TEGRA124_CLK_USB2>;
|
||||
resets = <&tegra_car 58>;
|
||||
reset-names = "usb";
|
||||
|
||||
@@ -9,8 +9,8 @@
|
||||
};
|
||||
|
||||
aliases {
|
||||
sdhci0 = "/sdhci@3460000";
|
||||
sdhci1 = "/sdhci@3400000";
|
||||
mmc0 = "/sdhci@3460000";
|
||||
mmc1 = "/sdhci@3400000";
|
||||
i2c0 = "/bpmp/i2c";
|
||||
i2c1 = "/i2c@3160000";
|
||||
i2c2 = "/i2c@c240000";
|
||||
@@ -50,6 +50,7 @@
|
||||
sdhci@3460000 {
|
||||
status = "okay";
|
||||
bus-width = <8>;
|
||||
non-removable;
|
||||
};
|
||||
|
||||
i2c@c240000 {
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
usb0 = "/usb@c5008000";
|
||||
usb1 = "/usb@c5000000";
|
||||
usb2 = "/usb@c5004000";
|
||||
sdhci0 = "/sdhci@c8000600";
|
||||
mmc0 = "/sdhci@c8000600";
|
||||
};
|
||||
|
||||
host1x@50000000 {
|
||||
@@ -39,7 +39,8 @@
|
||||
usb@c5004000 {
|
||||
statuc = "okay";
|
||||
/* VBUS_LAN */
|
||||
nvidia,phy-reset-gpio = <&gpio TEGRA_GPIO(V, 1) GPIO_ACTIVE_HIGH>;
|
||||
nvidia,phy-reset-gpio = <&gpio TEGRA_GPIO(V, 1)
|
||||
GPIO_ACTIVE_LOW>;
|
||||
nvidia,vbus-gpio = <&gpio TEGRA_GPIO(BB, 1) GPIO_ACTIVE_HIGH>;
|
||||
};
|
||||
|
||||
|
||||
@@ -15,10 +15,11 @@
|
||||
rtc0 = "/i2c@7000d000/tps6586x@34";
|
||||
rtc1 = "/rtc@7000e000";
|
||||
serial0 = &uartd;
|
||||
usb0 = "/usb@c5008000";
|
||||
usb0 = "/usb@c5000000";
|
||||
usb1 = "/usb@c5004000";
|
||||
sdhci0 = "/sdhci@c8000600";
|
||||
sdhci1 = "/sdhci@c8000200";
|
||||
usb2 = "/usb@c5008000";
|
||||
mmc0 = "/sdhci@c8000600";
|
||||
mmc1 = "/sdhci@c8000200";
|
||||
};
|
||||
|
||||
memory {
|
||||
@@ -626,7 +627,8 @@
|
||||
|
||||
usb@c5004000 {
|
||||
status = "okay";
|
||||
nvidia,phy-reset-gpio = <&gpio TEGRA_GPIO(V, 1) 0>;
|
||||
nvidia,phy-reset-gpio = <&gpio TEGRA_GPIO(V, 1)
|
||||
GPIO_ACTIVE_LOW>;
|
||||
};
|
||||
|
||||
usb-phy@c5004000 {
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
|
||||
aliases {
|
||||
usb0 = "/usb@c5008000";
|
||||
sdhci0 = "/sdhci@c8000600";
|
||||
mmc0 = "/sdhci@c8000600";
|
||||
};
|
||||
|
||||
memory {
|
||||
|
||||
@@ -12,8 +12,8 @@
|
||||
|
||||
aliases {
|
||||
usb0 = "/usb@c5008000";
|
||||
sdhci0 = "/sdhci@c8000600";
|
||||
sdhci1 = "/sdhci@c8000000";
|
||||
mmc0 = "/sdhci@c8000600";
|
||||
mmc1 = "/sdhci@c8000000";
|
||||
};
|
||||
|
||||
memory {
|
||||
@@ -50,6 +50,7 @@
|
||||
sdhci@c8000600 {
|
||||
status = "okay";
|
||||
bus-width = <8>;
|
||||
non-removable;
|
||||
};
|
||||
|
||||
clocks {
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
|
||||
aliases {
|
||||
usb0 = "/usb@c5008000";
|
||||
sdhci0 = "/sdhci@c8000600";
|
||||
mmc0 = "/sdhci@c8000600";
|
||||
};
|
||||
|
||||
memory {
|
||||
|
||||
@@ -9,8 +9,9 @@
|
||||
|
||||
aliases {
|
||||
/* This defines the order of our ports */
|
||||
usb0 = "/usb@c5008000";
|
||||
usb1 = "/usb@c5000000";
|
||||
usb0 = "/usb@c5000000";
|
||||
usb1 = "/usb@c5004000";
|
||||
usb2 = "/usb@c5008000";
|
||||
i2c0 = "/i2c@7000d000";
|
||||
i2c1 = "/i2c@7000c000";
|
||||
i2c2 = "/i2c@7000c400";
|
||||
@@ -18,8 +19,8 @@
|
||||
rtc0 = "/i2c@7000d000/tps6586x@34";
|
||||
rtc1 = "/rtc@7000e000";
|
||||
serial0 = &uartd;
|
||||
sdhci0 = "/sdhci@c8000600";
|
||||
sdhci1 = "/sdhci@c8000400";
|
||||
mmc0 = "/sdhci@c8000600";
|
||||
mmc1 = "/sdhci@c8000400";
|
||||
};
|
||||
|
||||
chosen {
|
||||
@@ -783,7 +784,7 @@
|
||||
};
|
||||
|
||||
usb@c5004000 {
|
||||
status = "disabled";
|
||||
status = "okay";
|
||||
nvidia,phy-reset-gpio = <&gpio TEGRA_GPIO(V, 1)
|
||||
GPIO_ACTIVE_LOW>;
|
||||
};
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
|
||||
aliases {
|
||||
usb0 = "/usb@c5008000";
|
||||
sdhci0 = "/sdhci@c8000600";
|
||||
mmc0 = "/sdhci@c8000600";
|
||||
};
|
||||
|
||||
memory {
|
||||
|
||||
@@ -11,10 +11,9 @@
|
||||
};
|
||||
|
||||
aliases {
|
||||
usb0 = "/usb@c5008000";
|
||||
usb1 = "/usb@c5000000";
|
||||
sdhci0 = "/sdhci@c8000600";
|
||||
sdhci1 = "/sdhci@c8000000";
|
||||
usb0 = "/usb@c5000000";
|
||||
mmc0 = "/sdhci@c8000600";
|
||||
mmc1 = "/sdhci@c8000000";
|
||||
spi0 = "/spi@7000c380";
|
||||
};
|
||||
|
||||
|
||||
@@ -15,9 +15,11 @@
|
||||
rtc0 = "/i2c@7000d000/tps6586x@34";
|
||||
rtc1 = "/rtc@7000e000";
|
||||
serial0 = &uartd;
|
||||
usb0 = "/usb@c5008000";
|
||||
sdhci0 = "/sdhci@c8000600";
|
||||
sdhci1 = "/sdhci@c8000400";
|
||||
usb0 = "/usb@c5000000";
|
||||
usb1 = "/usb@c5004000";
|
||||
usb2 = "/usb@c5008000";
|
||||
mmc0 = "/sdhci@c8000600";
|
||||
mmc1 = "/sdhci@c8000400";
|
||||
};
|
||||
|
||||
memory {
|
||||
|
||||
@@ -13,8 +13,8 @@
|
||||
aliases {
|
||||
i2c0 = "/i2c@7000d000";
|
||||
usb0 = "/usb@c5008000";
|
||||
sdhci0 = "/sdhci@c8000600";
|
||||
sdhci1 = "/sdhci@c8000400";
|
||||
mmc0 = "/sdhci@c8000600";
|
||||
mmc1 = "/sdhci@c8000400";
|
||||
};
|
||||
|
||||
memory {
|
||||
@@ -58,6 +58,7 @@
|
||||
sdhci@c8000600 {
|
||||
status = "okay";
|
||||
bus-width = <8>;
|
||||
non-removable;
|
||||
};
|
||||
|
||||
clocks {
|
||||
|
||||
@@ -147,7 +147,7 @@
|
||||
interrupt-parent = <&intc>;
|
||||
reg = <0x50040600 0x20>;
|
||||
interrupts = <GIC_PPI 13
|
||||
(GIC_CPU_MASK_SIMPLE(2) | IRQ_TYPE_LEVEL_HIGH)>;
|
||||
(GIC_CPU_MASK_SIMPLE(2) | IRQ_TYPE_EDGE_RISING)>;
|
||||
clocks = <&tegra_car TEGRA20_CLK_TWD>;
|
||||
};
|
||||
|
||||
@@ -311,7 +311,7 @@
|
||||
* driver and APB DMA based serial driver for higher baudrate
|
||||
* and performace. To enable the 8250 based driver, the compatible
|
||||
* is "nvidia,tegra20-uart" and to enable the APB DMA based serial
|
||||
* driver, the comptible is "nvidia,tegra20-hsuart".
|
||||
* driver, the compatible is "nvidia,tegra20-hsuart".
|
||||
*/
|
||||
uarta: serial@70006000 {
|
||||
compatible = "nvidia,tegra20-uart";
|
||||
|
||||
@@ -11,34 +11,35 @@
|
||||
};
|
||||
|
||||
aliases {
|
||||
i2c0 = "/i2c@0,7000d000";
|
||||
sdhci0 = "/sdhci@0,700b0600";
|
||||
sdhci1 = "/sdhci@0,700b0000";
|
||||
usb0 = "/usb@0,7d000000";
|
||||
i2c0 = "/i2c@7000d000";
|
||||
mmc0 = "/sdhci@700b0600";
|
||||
mmc1 = "/sdhci@700b0000";
|
||||
usb0 = "/usb@7d000000";
|
||||
};
|
||||
|
||||
memory {
|
||||
reg = <0x0 0x80000000 0x0 0xc0000000>;
|
||||
};
|
||||
|
||||
sdhci@0,700b0000 {
|
||||
sdhci@700b0000 {
|
||||
status = "okay";
|
||||
cd-gpios = <&gpio TEGRA_GPIO(Z, 1) GPIO_ACTIVE_LOW>;
|
||||
power-gpios = <&gpio TEGRA_GPIO(Z, 4) GPIO_ACTIVE_HIGH>;
|
||||
bus-width = <4>;
|
||||
};
|
||||
|
||||
sdhci@0,700b0600 {
|
||||
sdhci@700b0600 {
|
||||
status = "okay";
|
||||
bus-width = <8>;
|
||||
non-removable;
|
||||
};
|
||||
|
||||
i2c@0,7000d000 {
|
||||
i2c@7000d000 {
|
||||
status = "okay";
|
||||
clock-frequency = <400000>;
|
||||
};
|
||||
|
||||
usb@0,7d000000 {
|
||||
usb@7d000000 {
|
||||
status = "okay";
|
||||
dr_mode = "peripheral";
|
||||
};
|
||||
|
||||
@@ -11,34 +11,35 @@
|
||||
};
|
||||
|
||||
aliases {
|
||||
i2c0 = "/i2c@0,7000d000";
|
||||
sdhci0 = "/sdhci@0,700b0600";
|
||||
sdhci1 = "/sdhci@0,700b0000";
|
||||
usb0 = "/usb@0,7d000000";
|
||||
i2c0 = "/i2c@7000d000";
|
||||
mmc0 = "/sdhci@700b0600";
|
||||
mmc1 = "/sdhci@700b0000";
|
||||
usb0 = "/usb@7d000000";
|
||||
};
|
||||
|
||||
memory {
|
||||
reg = <0x0 0x80000000 0x0 0xc0000000>;
|
||||
};
|
||||
|
||||
sdhci@0,700b0000 {
|
||||
sdhci@700b0000 {
|
||||
status = "okay";
|
||||
cd-gpios = <&gpio TEGRA_GPIO(Z, 1) GPIO_ACTIVE_LOW>;
|
||||
power-gpios = <&gpio TEGRA_GPIO(Z, 4) GPIO_ACTIVE_HIGH>;
|
||||
bus-width = <4>;
|
||||
};
|
||||
|
||||
sdhci@0,700b0600 {
|
||||
sdhci@700b0600 {
|
||||
status = "okay";
|
||||
bus-width = <8>;
|
||||
non-removable;
|
||||
};
|
||||
|
||||
i2c@0,7000d000 {
|
||||
i2c@7000d000 {
|
||||
status = "okay";
|
||||
clock-frequency = <400000>;
|
||||
};
|
||||
|
||||
usb@0,7d000000 {
|
||||
usb@7d000000 {
|
||||
status = "okay";
|
||||
dr_mode = "otg";
|
||||
nvidia,vbus-gpio = <&gpio TEGRA_GPIO(CC, 4) GPIO_ACTIVE_HIGH>;
|
||||
|
||||
@@ -11,17 +11,17 @@
|
||||
};
|
||||
|
||||
aliases {
|
||||
i2c0 = "/i2c@0,7000d000";
|
||||
sdhci0 = "/sdhci@0,700b0600";
|
||||
sdhci1 = "/sdhci@0,700b0000";
|
||||
usb0 = "/usb@0,7d000000";
|
||||
i2c0 = "/i2c@7000d000";
|
||||
mmc0 = "/sdhci@700b0600";
|
||||
mmc1 = "/sdhci@700b0000";
|
||||
usb0 = "/usb@7d000000";
|
||||
};
|
||||
|
||||
memory {
|
||||
reg = <0x0 0x80000000 0x0 0xc0000000>;
|
||||
};
|
||||
|
||||
pcie-controller@0,01003000 {
|
||||
pcie-controller@01003000 {
|
||||
status = "okay";
|
||||
|
||||
pci@1,0 {
|
||||
@@ -33,7 +33,7 @@
|
||||
};
|
||||
};
|
||||
|
||||
padctl@0,7009f000 {
|
||||
padctl@7009f000 {
|
||||
pinctrl-0 = <&padctl_default>;
|
||||
pinctrl-names = "default";
|
||||
|
||||
@@ -71,7 +71,7 @@
|
||||
};
|
||||
};
|
||||
|
||||
sdhci@0,700b0000 {
|
||||
sdhci@700b0000 {
|
||||
status = "okay";
|
||||
cd-gpios = <&gpio TEGRA_GPIO(Z, 1) GPIO_ACTIVE_LOW>;
|
||||
power-gpios = <&gpio TEGRA_GPIO(Z, 3) GPIO_ACTIVE_HIGH>;
|
||||
@@ -79,17 +79,18 @@
|
||||
bus-width = <4>;
|
||||
};
|
||||
|
||||
sdhci@0,700b0600 {
|
||||
sdhci@700b0600 {
|
||||
status = "okay";
|
||||
bus-width = <8>;
|
||||
non-removable;
|
||||
};
|
||||
|
||||
i2c@0,7000d000 {
|
||||
i2c@7000d000 {
|
||||
status = "okay";
|
||||
clock-frequency = <400000>;
|
||||
};
|
||||
|
||||
usb@0,7d000000 {
|
||||
usb@7d000000 {
|
||||
status = "okay";
|
||||
dr_mode = "otg";
|
||||
nvidia,vbus-gpio = <&gpio TEGRA_GPIO(CC, 4) GPIO_ACTIVE_HIGH>;
|
||||
|
||||
@@ -11,82 +11,83 @@
|
||||
};
|
||||
|
||||
aliases {
|
||||
i2c0 = "/i2c@0,7000d000";
|
||||
i2c1 = "/i2c@0,7000c000";
|
||||
i2c2 = "/i2c@0,7000c400";
|
||||
i2c3 = "/i2c@0,7000c500";
|
||||
i2c4 = "/i2c@0,7000c700";
|
||||
i2c5 = "/i2c@0,7000d100";
|
||||
sdhci0 = "/sdhci@0,700b0600";
|
||||
sdhci1 = "/sdhci@0,700b0000";
|
||||
spi0 = "/spi@0,7000d400";
|
||||
spi1 = "/spi@0,7000da00";
|
||||
spi2 = "/spi@0,70410000";
|
||||
usb0 = "/usb@0,7d000000";
|
||||
i2c0 = "/i2c@7000d000";
|
||||
i2c1 = "/i2c@7000c000";
|
||||
i2c2 = "/i2c@7000c400";
|
||||
i2c3 = "/i2c@7000c500";
|
||||
i2c4 = "/i2c@7000c700";
|
||||
i2c5 = "/i2c@7000d100";
|
||||
mmc0 = "/sdhci@700b0600";
|
||||
mmc1 = "/sdhci@700b0000";
|
||||
spi0 = "/spi@7000d400";
|
||||
spi1 = "/spi@7000da00";
|
||||
spi2 = "/spi@70410000";
|
||||
usb0 = "/usb@7d000000";
|
||||
};
|
||||
|
||||
memory {
|
||||
reg = <0x0 0x80000000 0x0 0xc0000000>;
|
||||
};
|
||||
|
||||
i2c@0,7000c000 {
|
||||
i2c@7000c000 {
|
||||
status = "okay";
|
||||
clock-frequency = <100000>;
|
||||
};
|
||||
|
||||
i2c@0,7000c400 {
|
||||
i2c@7000c400 {
|
||||
status = "okay";
|
||||
clock-frequency = <100000>;
|
||||
};
|
||||
|
||||
i2c@0,7000c500 {
|
||||
i2c@7000c500 {
|
||||
status = "okay";
|
||||
clock-frequency = <100000>;
|
||||
};
|
||||
|
||||
i2c@0,7000c700 {
|
||||
i2c@7000c700 {
|
||||
status = "okay";
|
||||
clock-frequency = <100000>;
|
||||
};
|
||||
|
||||
i2c@0,7000d000 {
|
||||
i2c@7000d000 {
|
||||
status = "okay";
|
||||
clock-frequency = <400000>;
|
||||
};
|
||||
|
||||
i2c@0,7000d100 {
|
||||
i2c@7000d100 {
|
||||
status = "okay";
|
||||
clock-frequency = <400000>;
|
||||
};
|
||||
|
||||
spi@0,7000d400 {
|
||||
spi@7000d400 {
|
||||
status = "okay";
|
||||
spi-max-frequency = <25000000>;
|
||||
};
|
||||
|
||||
spi@0,7000da00 {
|
||||
spi@7000da00 {
|
||||
status = "okay";
|
||||
spi-max-frequency = <25000000>;
|
||||
};
|
||||
|
||||
spi@0,70410000 {
|
||||
spi@70410000 {
|
||||
status = "okay";
|
||||
spi-max-frequency = <24000000>;
|
||||
};
|
||||
|
||||
sdhci@0,700b0000 {
|
||||
sdhci@700b0000 {
|
||||
status = "okay";
|
||||
cd-gpios = <&gpio TEGRA_GPIO(Z, 1) GPIO_ACTIVE_LOW>;
|
||||
power-gpios = <&gpio TEGRA_GPIO(Z, 4) GPIO_ACTIVE_HIGH>;
|
||||
bus-width = <4>;
|
||||
};
|
||||
|
||||
sdhci@0,700b0600 {
|
||||
sdhci@700b0600 {
|
||||
status = "okay";
|
||||
bus-width = <8>;
|
||||
non-removable;
|
||||
};
|
||||
|
||||
usb@0,7d000000 {
|
||||
usb@7d000000 {
|
||||
status = "okay";
|
||||
dr_mode = "otg";
|
||||
};
|
||||
|
||||
@@ -1,18 +1,17 @@
|
||||
#include <dt-bindings/clock/tegra210-car.h>
|
||||
#include <dt-bindings/gpio/tegra-gpio.h>
|
||||
#include <dt-bindings/memory/tegra210-mc.h>
|
||||
#include <dt-bindings/pinctrl/pinctrl-tegra.h>
|
||||
#include <dt-bindings/interrupt-controller/arm-gic.h>
|
||||
#include <dt-bindings/pinctrl/pinctrl-tegra-xusb.h>
|
||||
|
||||
#include "skeleton.dtsi"
|
||||
|
||||
/ {
|
||||
compatible = "nvidia,tegra210";
|
||||
interrupt-parent = <&gic>;
|
||||
interrupt-parent = <&lic>;
|
||||
#address-cells = <2>;
|
||||
#size-cells = <2>;
|
||||
|
||||
pcie-controller@0,01003000 {
|
||||
pcie-controller@01003000 {
|
||||
compatible = "nvidia,tegra210-pcie";
|
||||
device_type = "pci";
|
||||
reg = <0x0 0x01003000 0x0 0x00000800 /* PADS registers */
|
||||
@@ -78,7 +77,202 @@
|
||||
};
|
||||
};
|
||||
|
||||
gic: interrupt-controller@0,50041000 {
|
||||
host1x@50000000 {
|
||||
compatible = "nvidia,tegra210-host1x", "simple-bus";
|
||||
reg = <0x0 0x50000000 0x0 0x00034000>;
|
||||
interrupts = <GIC_SPI 65 IRQ_TYPE_LEVEL_HIGH>, /* syncpt */
|
||||
<GIC_SPI 67 IRQ_TYPE_LEVEL_HIGH>; /* general */
|
||||
clocks = <&tegra_car TEGRA210_CLK_HOST1X>;
|
||||
clock-names = "host1x";
|
||||
resets = <&tegra_car 28>;
|
||||
reset-names = "host1x";
|
||||
|
||||
#address-cells = <2>;
|
||||
#size-cells = <2>;
|
||||
|
||||
ranges = <0x0 0x54000000 0x0 0x54000000 0x0 0x01000000>;
|
||||
|
||||
dpaux1: dpaux@54040000 {
|
||||
compatible = "nvidia,tegra210-dpaux";
|
||||
reg = <0x0 0x54040000 0x0 0x00040000>;
|
||||
interrupts = <GIC_SPI 11 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&tegra_car TEGRA210_CLK_DPAUX1>,
|
||||
<&tegra_car TEGRA210_CLK_PLL_DP>;
|
||||
clock-names = "dpaux", "parent";
|
||||
resets = <&tegra_car 207>;
|
||||
reset-names = "dpaux";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
vi@54080000 {
|
||||
compatible = "nvidia,tegra210-vi";
|
||||
reg = <0x0 0x54080000 0x0 0x00040000>;
|
||||
interrupts = <GIC_SPI 69 IRQ_TYPE_LEVEL_HIGH>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
tsec@54100000 {
|
||||
compatible = "nvidia,tegra210-tsec";
|
||||
reg = <0x0 0x54100000 0x0 0x00040000>;
|
||||
};
|
||||
|
||||
dc@54200000 {
|
||||
compatible = "nvidia,tegra210-dc";
|
||||
reg = <0x0 0x54200000 0x0 0x00040000>;
|
||||
interrupts = <GIC_SPI 73 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&tegra_car TEGRA210_CLK_DISP1>,
|
||||
<&tegra_car TEGRA210_CLK_PLL_P>;
|
||||
clock-names = "dc", "parent";
|
||||
resets = <&tegra_car 27>;
|
||||
reset-names = "dc";
|
||||
|
||||
iommus = <&mc TEGRA_SWGROUP_DC>;
|
||||
|
||||
nvidia,head = <0>;
|
||||
};
|
||||
|
||||
dc@54240000 {
|
||||
compatible = "nvidia,tegra210-dc";
|
||||
reg = <0x0 0x54240000 0x0 0x00040000>;
|
||||
interrupts = <GIC_SPI 74 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&tegra_car TEGRA210_CLK_DISP2>,
|
||||
<&tegra_car TEGRA210_CLK_PLL_P>;
|
||||
clock-names = "dc", "parent";
|
||||
resets = <&tegra_car 26>;
|
||||
reset-names = "dc";
|
||||
|
||||
iommus = <&mc TEGRA_SWGROUP_DCB>;
|
||||
|
||||
nvidia,head = <1>;
|
||||
};
|
||||
|
||||
dsi@54300000 {
|
||||
compatible = "nvidia,tegra210-dsi";
|
||||
reg = <0x0 0x54300000 0x0 0x00040000>;
|
||||
clocks = <&tegra_car TEGRA210_CLK_DSIA>,
|
||||
<&tegra_car TEGRA210_CLK_DSIALP>,
|
||||
<&tegra_car TEGRA210_CLK_PLL_D_OUT0>;
|
||||
clock-names = "dsi", "lp", "parent";
|
||||
resets = <&tegra_car 48>;
|
||||
reset-names = "dsi";
|
||||
nvidia,mipi-calibrate = <&mipi 0x0c0>; /* DSIA & DSIB pads */
|
||||
|
||||
status = "disabled";
|
||||
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
};
|
||||
|
||||
vic@54340000 {
|
||||
compatible = "nvidia,tegra210-vic";
|
||||
reg = <0x0 0x54340000 0x0 0x00040000>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
nvjpg@54380000 {
|
||||
compatible = "nvidia,tegra210-nvjpg";
|
||||
reg = <0x0 0x54380000 0x0 0x00040000>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
dsi@54400000 {
|
||||
compatible = "nvidia,tegra210-dsi";
|
||||
reg = <0x0 0x54400000 0x0 0x00040000>;
|
||||
clocks = <&tegra_car TEGRA210_CLK_DSIB>,
|
||||
<&tegra_car TEGRA210_CLK_DSIBLP>,
|
||||
<&tegra_car TEGRA210_CLK_PLL_D_OUT0>;
|
||||
clock-names = "dsi", "lp", "parent";
|
||||
resets = <&tegra_car 82>;
|
||||
reset-names = "dsi";
|
||||
nvidia,mipi-calibrate = <&mipi 0x300>; /* DSIC & DSID pads */
|
||||
|
||||
status = "disabled";
|
||||
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
};
|
||||
|
||||
nvdec@54480000 {
|
||||
compatible = "nvidia,tegra210-nvdec";
|
||||
reg = <0x0 0x54480000 0x0 0x00040000>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
nvenc@544c0000 {
|
||||
compatible = "nvidia,tegra210-nvenc";
|
||||
reg = <0x0 0x544c0000 0x0 0x00040000>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
tsec@54500000 {
|
||||
compatible = "nvidia,tegra210-tsec";
|
||||
reg = <0x0 0x54500000 0x0 0x00040000>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
sor@54540000 {
|
||||
compatible = "nvidia,tegra210-sor";
|
||||
reg = <0x0 0x54540000 0x0 0x00040000>;
|
||||
interrupts = <GIC_SPI 76 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&tegra_car TEGRA210_CLK_SOR0>,
|
||||
<&tegra_car TEGRA210_CLK_PLL_D_OUT0>,
|
||||
<&tegra_car TEGRA210_CLK_PLL_DP>,
|
||||
<&tegra_car TEGRA210_CLK_SOR_SAFE>;
|
||||
clock-names = "sor", "parent", "dp", "safe";
|
||||
resets = <&tegra_car 182>;
|
||||
reset-names = "sor";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
sor@54580000 {
|
||||
compatible = "nvidia,tegra210-sor1";
|
||||
reg = <0x0 0x54580000 0x0 0x00040000>;
|
||||
interrupts = <GIC_SPI 75 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&tegra_car TEGRA210_CLK_SOR1>,
|
||||
<&tegra_car TEGRA210_CLK_PLL_D2_OUT0>,
|
||||
<&tegra_car TEGRA210_CLK_PLL_DP>,
|
||||
<&tegra_car TEGRA210_CLK_SOR_SAFE>;
|
||||
clock-names = "sor", "parent", "dp", "safe";
|
||||
resets = <&tegra_car 183>;
|
||||
reset-names = "sor";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
dpaux: dpaux@545c0000 {
|
||||
compatible = "nvidia,tegra124-dpaux";
|
||||
reg = <0x0 0x545c0000 0x0 0x00040000>;
|
||||
interrupts = <GIC_SPI 159 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&tegra_car TEGRA210_CLK_DPAUX>,
|
||||
<&tegra_car TEGRA210_CLK_PLL_DP>;
|
||||
clock-names = "dpaux", "parent";
|
||||
resets = <&tegra_car 181>;
|
||||
reset-names = "dpaux";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
isp@54600000 {
|
||||
compatible = "nvidia,tegra210-isp";
|
||||
reg = <0x0 0x54600000 0x0 0x00040000>;
|
||||
interrupts = <GIC_SPI 71 IRQ_TYPE_LEVEL_HIGH>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
isp@54680000 {
|
||||
compatible = "nvidia,tegra210-isp";
|
||||
reg = <0x0 0x54680000 0x0 0x00040000>;
|
||||
interrupts = <GIC_SPI 70 IRQ_TYPE_LEVEL_HIGH>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
i2c@546c0000 {
|
||||
compatible = "nvidia,tegra210-i2c-vi";
|
||||
reg = <0x0 0x546c0000 0x0 0x00040000>;
|
||||
interrupts = <GIC_SPI 17 IRQ_TYPE_LEVEL_HIGH>;
|
||||
status = "disabled";
|
||||
};
|
||||
};
|
||||
|
||||
gic: interrupt-controller@50041000 {
|
||||
compatible = "arm,gic-400";
|
||||
#interrupt-cells = <3>;
|
||||
interrupt-controller;
|
||||
@@ -91,14 +285,64 @@
|
||||
interrupt-parent = <&gic>;
|
||||
};
|
||||
|
||||
tegra_car: clock@0,60006000 {
|
||||
gpu@57000000 {
|
||||
compatible = "nvidia,gm20b";
|
||||
reg = <0x0 0x57000000 0x0 0x01000000>,
|
||||
<0x0 0x58000000 0x0 0x01000000>;
|
||||
interrupts = <GIC_SPI 157 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 158 IRQ_TYPE_LEVEL_HIGH>;
|
||||
interrupt-names = "stall", "nonstall";
|
||||
clocks = <&tegra_car TEGRA210_CLK_GPU>,
|
||||
<&tegra_car TEGRA210_CLK_PLL_P_OUT5>,
|
||||
<&tegra_car TEGRA210_CLK_PLL_G_REF>;
|
||||
clock-names = "gpu", "pwr", "ref";
|
||||
resets = <&tegra_car 184>;
|
||||
reset-names = "gpu";
|
||||
|
||||
iommus = <&mc TEGRA_SWGROUP_GPU>;
|
||||
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
lic: interrupt-controller@60004000 {
|
||||
compatible = "nvidia,tegra210-ictlr";
|
||||
reg = <0x0 0x60004000 0x0 0x40>, /* primary controller */
|
||||
<0x0 0x60004100 0x0 0x40>, /* secondary controller */
|
||||
<0x0 0x60004200 0x0 0x40>, /* tertiary controller */
|
||||
<0x0 0x60004300 0x0 0x40>, /* quaternary controller */
|
||||
<0x0 0x60004400 0x0 0x40>, /* quinary controller */
|
||||
<0x0 0x60004500 0x0 0x40>; /* senary controller */
|
||||
interrupt-controller;
|
||||
#interrupt-cells = <3>;
|
||||
interrupt-parent = <&gic>;
|
||||
};
|
||||
|
||||
timer@60005000 {
|
||||
compatible = "nvidia,tegra210-timer", "nvidia,tegra20-timer";
|
||||
reg = <0x0 0x60005000 0x0 0x400>;
|
||||
interrupts = <GIC_SPI 0 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 1 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 41 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 42 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 121 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 122 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&tegra_car TEGRA210_CLK_TIMER>;
|
||||
clock-names = "timer";
|
||||
};
|
||||
|
||||
tegra_car: clock@60006000 {
|
||||
compatible = "nvidia,tegra210-car";
|
||||
reg = <0x0 0x60006000 0x0 0x1000>;
|
||||
#clock-cells = <1>;
|
||||
#reset-cells = <1>;
|
||||
};
|
||||
|
||||
gpio: gpio@0,6000d000 {
|
||||
flow-controller@60007000 {
|
||||
compatible = "nvidia,tegra210-flowctrl";
|
||||
reg = <0x0 0x60007000 0x0 0x1000>;
|
||||
};
|
||||
|
||||
gpio: gpio@6000d000 {
|
||||
compatible = "nvidia,tegra210-gpio", "nvidia,tegra30-gpio";
|
||||
reg = <0x0 0x6000d000 0x0 0x1000>;
|
||||
interrupts = <GIC_SPI 32 IRQ_TYPE_LEVEL_HIGH>,
|
||||
@@ -115,169 +359,336 @@
|
||||
interrupt-controller;
|
||||
};
|
||||
|
||||
i2c@0,7000c000 {
|
||||
compatible = "nvidia,tegra210-i2c", "nvidia,tegra114-i2c";
|
||||
reg = <0x0 0x7000c000 0x0 0x100>;
|
||||
interrupts = <0 38 0x04>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
clocks = <&tegra_car 12>;
|
||||
status = "disabled";
|
||||
apbdma: dma@60020000 {
|
||||
compatible = "nvidia,tegra210-apbdma", "nvidia,tegra148-apbdma";
|
||||
reg = <0x0 0x60020000 0x0 0x1400>;
|
||||
interrupts = <GIC_SPI 104 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 105 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 106 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 107 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 108 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 109 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 110 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 111 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 112 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<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>,
|
||||
<GIC_SPI 117 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 118 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 119 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 128 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 129 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 130 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 131 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 132 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 133 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 134 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 135 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 136 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 137 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 138 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 139 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 140 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 141 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 142 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 143 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&tegra_car TEGRA210_CLK_APBDMA>;
|
||||
clock-names = "dma";
|
||||
resets = <&tegra_car 34>;
|
||||
reset-names = "dma";
|
||||
#dma-cells = <1>;
|
||||
};
|
||||
|
||||
i2c@0,7000c400 {
|
||||
compatible = "nvidia,tegra210-i2c", "nvidia,tegra114-i2c";
|
||||
reg = <0x0 0x7000c400 0x0 0x100>;
|
||||
interrupts = <0 84 0x04>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
clocks = <&tegra_car 54>;
|
||||
status = "disabled";
|
||||
apbmisc@70000800 {
|
||||
compatible = "nvidia,tegra210-apbmisc", "nvidia,tegra20-apbmisc";
|
||||
reg = <0x0 0x70000800 0x0 0x64>, /* Chip revision */
|
||||
<0x0 0x7000e864 0x0 0x04>; /* Strapping options */
|
||||
};
|
||||
|
||||
i2c@0,7000c500 {
|
||||
compatible = "nvidia,tegra210-i2c", "nvidia,tegra114-i2c";
|
||||
reg = <0x0 0x7000c500 0x0 0x100>;
|
||||
interrupts = <0 92 0x04>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
clocks = <&tegra_car 67>;
|
||||
status = "disabled";
|
||||
pinmux: pinmux@700008d4 {
|
||||
compatible = "nvidia,tegra210-pinmux";
|
||||
reg = <0x0 0x700008d4 0x0 0x29c>, /* Pad control registers */
|
||||
<0x0 0x70003000 0x0 0x294>; /* Mux registers */
|
||||
};
|
||||
|
||||
i2c@0,7000c700 {
|
||||
compatible = "nvidia,tegra210-i2c", "nvidia,tegra114-i2c";
|
||||
reg = <0x0 0x7000c700 0x0 0x100>;
|
||||
interrupts = <0 120 0x04>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
clocks = <&tegra_car 103>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
i2c@0,7000d000 {
|
||||
compatible = "nvidia,tegra210-i2c", "nvidia,tegra114-i2c";
|
||||
reg = <0x0 0x7000d000 0x0 0x100>;
|
||||
interrupts = <0 53 0x04>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
clocks = <&tegra_car 47>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
i2c@0,7000d100 {
|
||||
compatible = "nvidia,tegra210-i2c", "nvidia,tegra114-i2c";
|
||||
reg = <0x0 0x7000d100 0x0 0x100>;
|
||||
interrupts = <0 53 0x04>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
clocks = <&tegra_car 47>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
uarta: serial@0,70006000 {
|
||||
/*
|
||||
* There are two serial driver i.e. 8250 based simple serial
|
||||
* driver and APB DMA based serial driver for higher baudrate
|
||||
* and performance. To enable the 8250 based driver, the compatible
|
||||
* is "nvidia,tegra124-uart", "nvidia,tegra20-uart" and to enable
|
||||
* the APB DMA based serial driver, the compatible is
|
||||
* "nvidia,tegra124-hsuart", "nvidia,tegra30-hsuart".
|
||||
*/
|
||||
uarta: serial@70006000 {
|
||||
compatible = "nvidia,tegra210-uart", "nvidia,tegra20-uart";
|
||||
reg = <0x0 0x70006000 0x0 0x40>;
|
||||
reg-shift = <2>;
|
||||
interrupts = <GIC_SPI 36 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&tegra_car TEGRA210_CLK_UARTA>;
|
||||
clock-names = "serial";
|
||||
resets = <&tegra_car 6>;
|
||||
reset-names = "serial";
|
||||
dmas = <&apbdma 8>, <&apbdma 8>;
|
||||
dma-names = "rx", "tx";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
uartb: serial@0,70006040 {
|
||||
uartb: serial@70006040 {
|
||||
compatible = "nvidia,tegra210-uart", "nvidia,tegra20-uart";
|
||||
reg = <0x0 0x70006040 0x0 0x40>;
|
||||
reg-shift = <2>;
|
||||
interrupts = <GIC_SPI 37 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&tegra_car TEGRA210_CLK_UARTB>;
|
||||
clock-names = "serial";
|
||||
resets = <&tegra_car 7>;
|
||||
reset-names = "serial";
|
||||
dmas = <&apbdma 9>, <&apbdma 9>;
|
||||
dma-names = "rx", "tx";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
uartc: serial@0,70006200 {
|
||||
uartc: serial@70006200 {
|
||||
compatible = "nvidia,tegra210-uart", "nvidia,tegra20-uart";
|
||||
reg = <0x0 0x70006200 0x0 0x40>;
|
||||
reg-shift = <2>;
|
||||
interrupts = <GIC_SPI 46 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&tegra_car TEGRA210_CLK_UARTC>;
|
||||
clock-names = "serial";
|
||||
resets = <&tegra_car 55>;
|
||||
reset-names = "serial";
|
||||
dmas = <&apbdma 10>, <&apbdma 10>;
|
||||
dma-names = "rx", "tx";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
uartd: serial@0,70006300 {
|
||||
uartd: serial@70006300 {
|
||||
compatible = "nvidia,tegra210-uart", "nvidia,tegra20-uart";
|
||||
reg = <0x0 0x70006300 0x0 0x40>;
|
||||
reg-shift = <2>;
|
||||
interrupts = <GIC_SPI 90 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&tegra_car TEGRA210_CLK_UARTD>;
|
||||
clock-names = "serial";
|
||||
resets = <&tegra_car 65>;
|
||||
reset-names = "serial";
|
||||
dmas = <&apbdma 19>, <&apbdma 19>;
|
||||
dma-names = "rx", "tx";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
spi@0,7000d400 {
|
||||
pwm: pwm@7000a000 {
|
||||
compatible = "nvidia,tegra210-pwm", "nvidia,tegra20-pwm";
|
||||
reg = <0x0 0x7000a000 0x0 0x100>;
|
||||
#pwm-cells = <2>;
|
||||
clocks = <&tegra_car TEGRA210_CLK_PWM>;
|
||||
clock-names = "pwm";
|
||||
resets = <&tegra_car 17>;
|
||||
reset-names = "pwm";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
i2c@7000c000 {
|
||||
compatible = "nvidia,tegra210-i2c", "nvidia,tegra114-i2c";
|
||||
reg = <0x0 0x7000c000 0x0 0x100>;
|
||||
interrupts = <GIC_SPI 38 IRQ_TYPE_LEVEL_HIGH>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
clocks = <&tegra_car TEGRA210_CLK_I2C1>;
|
||||
clock-names = "div-clk";
|
||||
resets = <&tegra_car 12>;
|
||||
reset-names = "i2c";
|
||||
dmas = <&apbdma 21>, <&apbdma 21>;
|
||||
dma-names = "rx", "tx";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
i2c@7000c400 {
|
||||
compatible = "nvidia,tegra210-i2c", "nvidia,tegra114-i2c";
|
||||
reg = <0x0 0x7000c400 0x0 0x100>;
|
||||
interrupts = <GIC_SPI 84 IRQ_TYPE_LEVEL_HIGH>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
clocks = <&tegra_car TEGRA210_CLK_I2C2>;
|
||||
clock-names = "div-clk";
|
||||
resets = <&tegra_car 54>;
|
||||
reset-names = "i2c";
|
||||
dmas = <&apbdma 22>, <&apbdma 22>;
|
||||
dma-names = "rx", "tx";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
i2c@7000c500 {
|
||||
compatible = "nvidia,tegra210-i2c", "nvidia,tegra114-i2c";
|
||||
reg = <0x0 0x7000c500 0x0 0x100>;
|
||||
interrupts = <GIC_SPI 92 IRQ_TYPE_LEVEL_HIGH>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
clocks = <&tegra_car TEGRA210_CLK_I2C3>;
|
||||
clock-names = "div-clk";
|
||||
resets = <&tegra_car 67>;
|
||||
reset-names = "i2c";
|
||||
dmas = <&apbdma 23>, <&apbdma 23>;
|
||||
dma-names = "rx", "tx";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
i2c@7000c700 {
|
||||
compatible = "nvidia,tegra210-i2c", "nvidia,tegra114-i2c";
|
||||
reg = <0x0 0x7000c700 0x0 0x100>;
|
||||
interrupts = <GIC_SPI 120 IRQ_TYPE_LEVEL_HIGH>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
clocks = <&tegra_car TEGRA210_CLK_I2C4>;
|
||||
clock-names = "div-clk";
|
||||
resets = <&tegra_car 103>;
|
||||
reset-names = "i2c";
|
||||
dmas = <&apbdma 26>, <&apbdma 26>;
|
||||
dma-names = "rx", "tx";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
i2c@7000d000 {
|
||||
compatible = "nvidia,tegra210-i2c", "nvidia,tegra114-i2c";
|
||||
reg = <0x0 0x7000d000 0x0 0x100>;
|
||||
interrupts = <GIC_SPI 53 IRQ_TYPE_LEVEL_HIGH>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
clocks = <&tegra_car TEGRA210_CLK_I2C5>;
|
||||
clock-names = "div-clk";
|
||||
resets = <&tegra_car 47>;
|
||||
reset-names = "i2c";
|
||||
dmas = <&apbdma 24>, <&apbdma 24>;
|
||||
dma-names = "rx", "tx";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
i2c@7000d100 {
|
||||
compatible = "nvidia,tegra210-i2c", "nvidia,tegra114-i2c";
|
||||
reg = <0x0 0x7000d100 0x0 0x100>;
|
||||
interrupts = <GIC_SPI 63 IRQ_TYPE_LEVEL_HIGH>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
clocks = <&tegra_car TEGRA210_CLK_I2C6>;
|
||||
clock-names = "div-clk";
|
||||
resets = <&tegra_car 166>;
|
||||
reset-names = "i2c";
|
||||
dmas = <&apbdma 30>, <&apbdma 30>;
|
||||
dma-names = "rx", "tx";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
spi@7000d400 {
|
||||
compatible = "nvidia,tegra210-spi", "nvidia,tegra114-spi";
|
||||
reg = <0x0 0x7000d400 0x0 0x200>;
|
||||
interrupts = <0 59 0x04>;
|
||||
interrupts = <GIC_SPI 59 IRQ_TYPE_LEVEL_HIGH>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
clocks = <&tegra_car TEGRA210_CLK_SBC1>;
|
||||
clock-names = "spi";
|
||||
resets = <&tegra_car 41>;
|
||||
reset-names = "spi";
|
||||
dmas = <&apbdma 15>, <&apbdma 15>;
|
||||
dma-names = "rx", "tx";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
spi@0,7000d600 {
|
||||
spi@7000d600 {
|
||||
compatible = "nvidia,tegra210-spi", "nvidia,tegra114-spi";
|
||||
reg = <0x0 0x7000d600 0x0 0x200>;
|
||||
interrupts = <0 82 0x04>;
|
||||
interrupts = <GIC_SPI 82 IRQ_TYPE_LEVEL_HIGH>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
clocks = <&tegra_car TEGRA210_CLK_SBC2>;
|
||||
clock-names = "spi";
|
||||
resets = <&tegra_car 44>;
|
||||
reset-names = "spi";
|
||||
dmas = <&apbdma 16>, <&apbdma 16>;
|
||||
dma-names = "rx", "tx";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
spi@0,7000d800 {
|
||||
spi@7000d800 {
|
||||
compatible = "nvidia,tegra210-spi", "nvidia,tegra114-spi";
|
||||
reg = <0x0 0x7000d800 0x0 0x200>;
|
||||
interrupts = <0 83 0x04>;
|
||||
interrupts = <GIC_SPI 83 IRQ_TYPE_LEVEL_HIGH>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
clocks = <&tegra_car TEGRA210_CLK_SBC3>;
|
||||
clock-names = "spi";
|
||||
resets = <&tegra_car 46>;
|
||||
reset-names = "spi";
|
||||
dmas = <&apbdma 17>, <&apbdma 17>;
|
||||
dma-names = "rx", "tx";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
spi@0,7000da00 {
|
||||
spi@7000da00 {
|
||||
compatible = "nvidia,tegra210-spi", "nvidia,tegra114-spi";
|
||||
reg = <0x0 0x7000da00 0x0 0x200>;
|
||||
interrupts = <0 93 0x04>;
|
||||
interrupts = <GIC_SPI 93 IRQ_TYPE_LEVEL_HIGH>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
clocks = <&tegra_car TEGRA210_CLK_SBC4>;
|
||||
clock-names = "spi";
|
||||
resets = <&tegra_car 68>;
|
||||
reset-names = "spi";
|
||||
dmas = <&apbdma 18>, <&apbdma 18>;
|
||||
dma-names = "rx", "tx";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
spi@0,70410000 {
|
||||
compatible = "nvidia,tegra210-qspi";
|
||||
reg = <0x0 0x70410000 0x0 0x1000>;
|
||||
interrupts = <0 10 0x04>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
clocks = <&tegra_car 211>;
|
||||
rtc@7000e000 {
|
||||
compatible = "nvidia,tegra210-rtc", "nvidia,tegra20-rtc";
|
||||
reg = <0x0 0x7000e000 0x0 0x100>;
|
||||
interrupts = <GIC_SPI 2 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&tegra_car TEGRA210_CLK_RTC>;
|
||||
clock-names = "rtc";
|
||||
};
|
||||
|
||||
pmc: pmc@7000e400 {
|
||||
compatible = "nvidia,tegra210-pmc";
|
||||
reg = <0x0 0x7000e400 0x0 0x400>;
|
||||
clocks = <&tegra_car TEGRA210_CLK_PCLK>, <&clk32k_in>;
|
||||
clock-names = "pclk", "clk32k_in";
|
||||
};
|
||||
|
||||
fuse@7000f800 {
|
||||
compatible = "nvidia,tegra210-efuse";
|
||||
reg = <0x0 0x7000f800 0x0 0x400>;
|
||||
clocks = <&tegra_car TEGRA210_CLK_FUSE>;
|
||||
clock-names = "fuse";
|
||||
resets = <&tegra_car 39>;
|
||||
reset-names = "fuse";
|
||||
};
|
||||
|
||||
mc: memory-controller@70019000 {
|
||||
compatible = "nvidia,tegra210-mc";
|
||||
reg = <0x0 0x70019000 0x0 0x1000>;
|
||||
clocks = <&tegra_car TEGRA210_CLK_MC>;
|
||||
clock-names = "mc";
|
||||
|
||||
interrupts = <GIC_SPI 77 IRQ_TYPE_LEVEL_HIGH>;
|
||||
|
||||
#iommu-cells = <1>;
|
||||
};
|
||||
|
||||
hda@70030000 {
|
||||
compatible = "nvidia,tegra210-hda", "nvidia,tegra30-hda";
|
||||
reg = <0x0 0x70030000 0x0 0x10000>;
|
||||
interrupts = <GIC_SPI 81 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&tegra_car TEGRA210_CLK_HDA>,
|
||||
<&tegra_car TEGRA210_CLK_HDA2HDMI>,
|
||||
<&tegra_car TEGRA210_CLK_HDA2CODEC_2X>;
|
||||
clock-names = "hda", "hda2hdmi", "hda2codec_2x";
|
||||
resets = <&tegra_car 125>, /* hda */
|
||||
<&tegra_car 128>, /* hda2hdmi */
|
||||
<&tegra_car 111>; /* hda2codec_2x */
|
||||
reset-names = "hda", "hda2hdmi", "hda2codec_2x";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
padctl: padctl@0,7009f000 {
|
||||
padctl: padctl@7009f000 {
|
||||
compatible = "nvidia,tegra210-xusb-padctl";
|
||||
reg = <0x0 0x7009f000 0x0 0x1000>;
|
||||
resets = <&tegra_car 142>;
|
||||
@@ -285,65 +696,187 @@
|
||||
#phy-cells = <1>;
|
||||
};
|
||||
|
||||
sdhci@0,700b0000 {
|
||||
compatible = "nvidia,tegra210-sdhci";
|
||||
sdhci@700b0000 {
|
||||
compatible = "nvidia,tegra210-sdhci", "nvidia,tegra124-sdhci";
|
||||
reg = <0x0 0x700b0000 0x0 0x200>;
|
||||
interrupts = <0 14 0x04>;
|
||||
interrupts = <GIC_SPI 14 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&tegra_car TEGRA210_CLK_SDMMC1>;
|
||||
clock-names = "sdhci";
|
||||
resets = <&tegra_car 14>;
|
||||
reset-names = "sdhci";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
sdhci@0,700b0200 {
|
||||
compatible = "nvidia,tegra210-sdhci";
|
||||
sdhci@700b0200 {
|
||||
compatible = "nvidia,tegra210-sdhci", "nvidia,tegra124-sdhci";
|
||||
reg = <0x0 0x700b0200 0x0 0x200>;
|
||||
interrupts = <0 15 0x04>;
|
||||
interrupts = <GIC_SPI 15 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&tegra_car TEGRA210_CLK_SDMMC2>;
|
||||
clock-names = "sdhci";
|
||||
resets = <&tegra_car 9>;
|
||||
reset-names = "sdhci";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
sdhci@0,700b0400 {
|
||||
compatible = "nvidia,tegra210-sdhci";
|
||||
sdhci@700b0400 {
|
||||
compatible = "nvidia,tegra210-sdhci", "nvidia,tegra124-sdhci";
|
||||
reg = <0x0 0x700b0400 0x0 0x200>;
|
||||
interrupts = <0 19 0x04>;
|
||||
interrupts = <GIC_SPI 19 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&tegra_car TEGRA210_CLK_SDMMC3>;
|
||||
clock-names = "sdhci";
|
||||
resets = <&tegra_car 69>;
|
||||
reset-names = "sdhci";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
sdhci@0,700b0600 {
|
||||
compatible = "nvidia,tegra210-sdhci";
|
||||
sdhci@700b0600 {
|
||||
compatible = "nvidia,tegra210-sdhci", "nvidia,tegra124-sdhci";
|
||||
reg = <0x0 0x700b0600 0x0 0x200>;
|
||||
interrupts = <0 31 0x04>;
|
||||
interrupts = <GIC_SPI 31 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&tegra_car TEGRA210_CLK_SDMMC4>;
|
||||
clock-names = "sdhci";
|
||||
resets = <&tegra_car 15>;
|
||||
reset-names = "sdhci";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
usb@0,7d000000 {
|
||||
compatible = "nvidia,tegra210-ehci";
|
||||
reg = <0x0 0x7d000000 0x0 0x4000>;
|
||||
interrupts = <0 20 0x04>;
|
||||
phy_type = "utmi";
|
||||
clocks = <&tegra_car TEGRA210_CLK_USBD>;
|
||||
resets = <&tegra_car 22>;
|
||||
reset-names = "usb";
|
||||
mipi: mipi@700e3000 {
|
||||
compatible = "nvidia,tegra210-mipi";
|
||||
reg = <0x0 0x700e3000 0x0 0x100>;
|
||||
clocks = <&tegra_car TEGRA210_CLK_MIPI_CAL>;
|
||||
clock-names = "mipi-cal";
|
||||
#nvidia,mipi-calibrate-cells = <1>;
|
||||
};
|
||||
|
||||
spi@70410000 {
|
||||
compatible = "nvidia,tegra210-qspi";
|
||||
reg = <0x0 0x70410000 0x0 0x1000>;
|
||||
interrupts = <GIC_SPI 10 IRQ_TYPE_LEVEL_HIGH>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
clocks = <&tegra_car TEGRA210_CLK_QSPI>;
|
||||
clock-names = "qspi";
|
||||
resets = <&tegra_car 211>;
|
||||
reset-names = "qspi";
|
||||
dmas = <&apbdma 5>, <&apbdma 5>;
|
||||
dma-names = "rx", "tx";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
usb@0,7d004000 {
|
||||
compatible = "nvidia,tegra210-ehci";
|
||||
reg = <0x0 0x7d004000 0x0 0x4000>;
|
||||
interrupts = < 53 >;
|
||||
usb@7d000000 {
|
||||
compatible = "nvidia,tegra210-ehci", "nvidia,tegra30-ehci", "usb-ehci";
|
||||
reg = <0x0 0x7d000000 0x0 0x4000>;
|
||||
interrupts = <GIC_SPI 20 IRQ_TYPE_LEVEL_HIGH>;
|
||||
phy_type = "utmi";
|
||||
clocks = <&tegra_car TEGRA210_CLK_USB2>;
|
||||
resets = <&tegra_car 58>;
|
||||
clocks = <&tegra_car TEGRA210_CLK_USBD>;
|
||||
clock-names = "usb";
|
||||
resets = <&tegra_car 22>;
|
||||
reset-names = "usb";
|
||||
nvidia,phy = <&phy1>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
phy1: usb-phy@7d000000 {
|
||||
compatible = "nvidia,tegra210-usb-phy", "nvidia,tegra30-usb-phy";
|
||||
reg = <0x0 0x7d000000 0x0 0x4000>,
|
||||
<0x0 0x7d000000 0x0 0x4000>;
|
||||
phy_type = "utmi";
|
||||
clocks = <&tegra_car TEGRA210_CLK_USBD>,
|
||||
<&tegra_car TEGRA210_CLK_PLL_U>,
|
||||
<&tegra_car TEGRA210_CLK_USBD>;
|
||||
clock-names = "reg", "pll_u", "utmi-pads";
|
||||
resets = <&tegra_car 22>, <&tegra_car 22>;
|
||||
reset-names = "usb", "utmi-pads";
|
||||
nvidia,hssync-start-delay = <0>;
|
||||
nvidia,idle-wait-delay = <17>;
|
||||
nvidia,elastic-limit = <16>;
|
||||
nvidia,term-range-adj = <6>;
|
||||
nvidia,xcvr-setup = <9>;
|
||||
nvidia,xcvr-lsfslew = <0>;
|
||||
nvidia,xcvr-lsrslew = <3>;
|
||||
nvidia,hssquelch-level = <2>;
|
||||
nvidia,hsdiscon-level = <5>;
|
||||
nvidia,xcvr-hsslew = <12>;
|
||||
nvidia,has-utmi-pad-registers;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
usb@7d004000 {
|
||||
compatible = "nvidia,tegra210-ehci", "nvidia,tegra30-ehci", "usb-ehci";
|
||||
reg = <0x0 0x7d004000 0x0 0x4000>;
|
||||
interrupts = <GIC_SPI 21 IRQ_TYPE_LEVEL_HIGH>;
|
||||
phy_type = "utmi";
|
||||
clocks = <&tegra_car TEGRA210_CLK_USB2>;
|
||||
clock-names = "usb";
|
||||
resets = <&tegra_car 58>;
|
||||
reset-names = "usb";
|
||||
nvidia,phy = <&phy2>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
phy2: usb-phy@7d004000 {
|
||||
compatible = "nvidia,tegra210-usb-phy", "nvidia,tegra30-usb-phy";
|
||||
reg = <0x0 0x7d004000 0x0 0x4000>,
|
||||
<0x0 0x7d000000 0x0 0x4000>;
|
||||
phy_type = "utmi";
|
||||
clocks = <&tegra_car TEGRA210_CLK_USB2>,
|
||||
<&tegra_car TEGRA210_CLK_PLL_U>,
|
||||
<&tegra_car TEGRA210_CLK_USBD>;
|
||||
clock-names = "reg", "pll_u", "utmi-pads";
|
||||
resets = <&tegra_car 58>, <&tegra_car 22>;
|
||||
reset-names = "usb", "utmi-pads";
|
||||
nvidia,hssync-start-delay = <0>;
|
||||
nvidia,idle-wait-delay = <17>;
|
||||
nvidia,elastic-limit = <16>;
|
||||
nvidia,term-range-adj = <6>;
|
||||
nvidia,xcvr-setup = <9>;
|
||||
nvidia,xcvr-lsfslew = <0>;
|
||||
nvidia,xcvr-lsrslew = <3>;
|
||||
nvidia,hssquelch-level = <2>;
|
||||
nvidia,hsdiscon-level = <5>;
|
||||
nvidia,xcvr-hsslew = <12>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
cpus {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
cpu@0 {
|
||||
device_type = "cpu";
|
||||
compatible = "arm,cortex-a57";
|
||||
reg = <0>;
|
||||
};
|
||||
|
||||
cpu@1 {
|
||||
device_type = "cpu";
|
||||
compatible = "arm,cortex-a57";
|
||||
reg = <1>;
|
||||
};
|
||||
|
||||
cpu@2 {
|
||||
device_type = "cpu";
|
||||
compatible = "arm,cortex-a57";
|
||||
reg = <2>;
|
||||
};
|
||||
|
||||
cpu@3 {
|
||||
device_type = "cpu";
|
||||
compatible = "arm,cortex-a57";
|
||||
reg = <3>;
|
||||
};
|
||||
};
|
||||
|
||||
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)>;
|
||||
interrupt-parent = <&gic>;
|
||||
};
|
||||
};
|
||||
|
||||
@@ -15,9 +15,9 @@
|
||||
i2c1 = "/i2c@7000c000";
|
||||
i2c2 = "/i2c@7000c500";
|
||||
i2c3 = "/i2c@7000c700";
|
||||
sdhci0 = "/sdhci@78000600";
|
||||
sdhci1 = "/sdhci@78000400";
|
||||
sdhci2 = "/sdhci@78000000";
|
||||
mmc0 = "/sdhci@78000600";
|
||||
mmc1 = "/sdhci@78000400";
|
||||
mmc2 = "/sdhci@78000000";
|
||||
spi0 = "/spi@7000d400";
|
||||
spi1 = "/spi@7000dc00";
|
||||
spi2 = "/spi@7000de00";
|
||||
@@ -277,7 +277,6 @@
|
||||
status = "okay";
|
||||
/* USBH_EN */
|
||||
nvidia,vbus-gpio = <&gpio TEGRA_GPIO(DD, 1) GPIO_ACTIVE_HIGH>;
|
||||
phy_type = "utmi";
|
||||
};
|
||||
|
||||
/* EHCI instance 2: USB3_DP/N -> USBH3_DP/N */
|
||||
@@ -287,6 +286,26 @@
|
||||
nvidia,vbus-gpio = <&gpio TEGRA_GPIO(DD, 1) GPIO_ACTIVE_HIGH>;
|
||||
};
|
||||
|
||||
clocks {
|
||||
compatible = "simple-bus";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
clk32k_in: clk@0 {
|
||||
compatible = "fixed-clock";
|
||||
reg=<0>;
|
||||
#clock-cells = <0>;
|
||||
clock-frequency = <32768>;
|
||||
};
|
||||
clk16m: clk@1 {
|
||||
compatible = "fixed-clock";
|
||||
reg=<1>;
|
||||
#clock-cells = <0>;
|
||||
clock-frequency = <16000000>;
|
||||
clock-output-names = "clk16m";
|
||||
};
|
||||
};
|
||||
|
||||
regulators {
|
||||
compatible = "simple-bus";
|
||||
#address-cells = <1>;
|
||||
|
||||
@@ -16,8 +16,8 @@
|
||||
i2c2 = "/i2c@7000c400";
|
||||
i2c3 = "/i2c@7000c500";
|
||||
i2c4 = "/i2c@7000c700";
|
||||
sdhci0 = "/sdhci@78000600";
|
||||
sdhci1 = "/sdhci@78000000";
|
||||
mmc0 = "/sdhci@78000600";
|
||||
mmc1 = "/sdhci@78000000";
|
||||
spi0 = "/spi@7000da00";
|
||||
usb0 = "/usb@7d000000";
|
||||
usb1 = "/usb@7d008000";
|
||||
@@ -205,6 +205,7 @@
|
||||
sdhci@78000600 {
|
||||
status = "okay";
|
||||
bus-width = <8>;
|
||||
non-removable;
|
||||
};
|
||||
|
||||
usb@7d000000 {
|
||||
@@ -218,6 +219,19 @@
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
clocks {
|
||||
compatible = "simple-bus";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
clk32k_in: clock@0 {
|
||||
compatible = "fixed-clock";
|
||||
reg=<0>;
|
||||
#clock-cells = <0>;
|
||||
clock-frequency = <32768>;
|
||||
};
|
||||
};
|
||||
|
||||
regulators {
|
||||
compatible = "simple-bus";
|
||||
#address-cells = <1>;
|
||||
|
||||
@@ -16,8 +16,8 @@
|
||||
i2c2 = "/i2c@7000c400";
|
||||
i2c3 = "/i2c@7000c500";
|
||||
i2c4 = "/i2c@7000c700";
|
||||
sdhci0 = "/sdhci@78000600";
|
||||
sdhci1 = "/sdhci@78000000";
|
||||
mmc0 = "/sdhci@78000600";
|
||||
mmc1 = "/sdhci@78000000";
|
||||
spi0 = "/spi@7000da00";
|
||||
usb0 = "/usb@7d008000";
|
||||
};
|
||||
@@ -194,6 +194,7 @@
|
||||
sdhci@78000600 {
|
||||
status = "okay";
|
||||
bus-width = <8>;
|
||||
non-removable;
|
||||
};
|
||||
|
||||
usb@7d008000 {
|
||||
@@ -201,6 +202,19 @@
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
clocks {
|
||||
compatible = "simple-bus";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
clk32k_in: clock@0 {
|
||||
compatible = "fixed-clock";
|
||||
reg=<0>;
|
||||
#clock-cells = <0>;
|
||||
clock-frequency = <32768>;
|
||||
};
|
||||
};
|
||||
|
||||
regulators {
|
||||
compatible = "simple-bus";
|
||||
#address-cells = <1>;
|
||||
|
||||
@@ -14,8 +14,8 @@
|
||||
i2c0 = "/i2c@7000d000";
|
||||
i2c1 = "/i2c@7000c000";
|
||||
i2c2 = "/i2c@7000c700";
|
||||
sdhci0 = "/sdhci@78000600";
|
||||
sdhci1 = "/sdhci@78000200";
|
||||
mmc0 = "/sdhci@78000600";
|
||||
mmc1 = "/sdhci@78000200";
|
||||
spi0 = "/spi@7000d400";
|
||||
usb0 = "/usb@7d000000";
|
||||
usb1 = "/usb@7d004000"; /* on module only, for ASIX */
|
||||
@@ -84,7 +84,6 @@
|
||||
status = "okay";
|
||||
/* VBUS_LAN */
|
||||
nvidia,vbus-gpio = <&gpio TEGRA_GPIO(DD, 2) GPIO_ACTIVE_HIGH>;
|
||||
phy_type = "utmi";
|
||||
};
|
||||
|
||||
/* EHCI instance 2: USB3_DP/N -> USBH_P/N */
|
||||
@@ -93,4 +92,17 @@
|
||||
/* USBH_PEN */
|
||||
nvidia,vbus-gpio = <&gpio TEGRA_GPIO(W, 2) GPIO_ACTIVE_LOW>;
|
||||
};
|
||||
|
||||
clocks {
|
||||
compatible = "simple-bus";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
clk32k_in: clk@0 {
|
||||
compatible = "fixed-clock";
|
||||
reg=<0>;
|
||||
#clock-cells = <0>;
|
||||
clock-frequency = <32768>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
@@ -18,9 +18,9 @@
|
||||
i2c2 = "/i2c@7000c400";
|
||||
i2c3 = "/i2c@7000c500";
|
||||
i2c4 = "/i2c@7000d000";
|
||||
sdhci0 = "/sdhci@78000600";
|
||||
sdhci1 = "/sdhci@78000400";
|
||||
sdhci2 = "/sdhci@78000000";
|
||||
mmc0 = "/sdhci@78000600";
|
||||
mmc1 = "/sdhci@78000400";
|
||||
mmc2 = "/sdhci@78000000";
|
||||
usb0 = "/usb@7d008000";
|
||||
};
|
||||
|
||||
@@ -64,10 +64,23 @@
|
||||
sdhci@78000600 {
|
||||
status = "okay";
|
||||
bus-width = <8>;
|
||||
non-removable;
|
||||
};
|
||||
|
||||
usb@7d008000 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
clocks {
|
||||
compatible = "simple-bus";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
clk32k_in: clk@0 {
|
||||
compatible = "fixed-clock";
|
||||
reg=<0>;
|
||||
#clock-cells = <0>;
|
||||
clock-frequency = <32768>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
@@ -1,20 +1,14 @@
|
||||
#include <dt-bindings/clock/tegra30-car.h>
|
||||
#include <dt-bindings/gpio/tegra-gpio.h>
|
||||
#include <dt-bindings/memory/tegra30-mc.h>
|
||||
#include <dt-bindings/pinctrl/pinctrl-tegra.h>
|
||||
#include <dt-bindings/interrupt-controller/arm-gic.h>
|
||||
|
||||
#include "skeleton.dtsi"
|
||||
|
||||
/ {
|
||||
compatible = "nvidia,tegra30";
|
||||
interrupt-parent = <&intc>;
|
||||
|
||||
intc: interrupt-controller@50041000 {
|
||||
compatible = "arm,cortex-a9-gic";
|
||||
reg = <0x50041000 0x1000
|
||||
0x50040100 0x0100>;
|
||||
interrupt-controller;
|
||||
#interrupt-cells = <3>;
|
||||
};
|
||||
interrupt-parent = <&lic>;
|
||||
|
||||
pcie-controller@00003000 {
|
||||
compatible = "nvidia,tegra30-pcie";
|
||||
@@ -24,7 +18,7 @@
|
||||
0x10000000 0x10000000>; /* configuration space */
|
||||
reg-names = "pads", "afi", "cs";
|
||||
interrupts = <GIC_SPI 98 IRQ_TYPE_LEVEL_HIGH /* controller interrupt */
|
||||
GIC_SPI 99 IRQ_TYPE_LEVEL_HIGH>; /* MSI interrupt */
|
||||
GIC_SPI 99 IRQ_TYPE_LEVEL_HIGH>; /* MSI interrupt */
|
||||
interrupt-names = "intr", "msi";
|
||||
|
||||
#interrupt-cells = <1>;
|
||||
@@ -39,15 +33,18 @@
|
||||
0x82000000 0 0x00001000 0x00001000 0 0x00001000 /* port 1 configuration space */
|
||||
0x82000000 0 0x00004000 0x00004000 0 0x00001000 /* port 2 configuration space */
|
||||
0x81000000 0 0 0x02000000 0 0x00010000 /* downstream I/O */
|
||||
0x82000000 0 0x20000000 0x20000000 0 0x10000000 /* non-prefetchable memory */
|
||||
0xc2000000 0 0x30000000 0x30000000 0 0x10000000>; /* prefetchable memory */
|
||||
0x82000000 0 0x20000000 0x20000000 0 0x08000000 /* non-prefetchable memory */
|
||||
0xc2000000 0 0x28000000 0x28000000 0 0x18000000>; /* prefetchable memory */
|
||||
|
||||
clocks = <&tegra_car TEGRA30_CLK_PCIE>,
|
||||
<&tegra_car TEGRA30_CLK_AFI>,
|
||||
<&tegra_car TEGRA30_CLK_PCIEX>,
|
||||
<&tegra_car TEGRA30_CLK_PLL_E>,
|
||||
<&tegra_car TEGRA30_CLK_CML0>;
|
||||
clock-names = "pex", "afi", "pcie_xclk", "pll_e", "cml";
|
||||
clock-names = "pex", "afi", "pll_e", "cml";
|
||||
resets = <&tegra_car 70>,
|
||||
<&tegra_car 72>,
|
||||
<&tegra_car 74>;
|
||||
reset-names = "pex", "afi", "pcie_x";
|
||||
status = "disabled";
|
||||
|
||||
pci@1,0 {
|
||||
@@ -90,48 +87,251 @@
|
||||
};
|
||||
};
|
||||
|
||||
tegra_car: clock {
|
||||
host1x@50000000 {
|
||||
compatible = "nvidia,tegra30-host1x", "simple-bus";
|
||||
reg = <0x50000000 0x00024000>;
|
||||
interrupts = <GIC_SPI 65 IRQ_TYPE_LEVEL_HIGH>, /* syncpt */
|
||||
<GIC_SPI 67 IRQ_TYPE_LEVEL_HIGH>; /* general */
|
||||
clocks = <&tegra_car TEGRA30_CLK_HOST1X>;
|
||||
resets = <&tegra_car 28>;
|
||||
reset-names = "host1x";
|
||||
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
|
||||
ranges = <0x54000000 0x54000000 0x04000000>;
|
||||
|
||||
mpe@54040000 {
|
||||
compatible = "nvidia,tegra30-mpe";
|
||||
reg = <0x54040000 0x00040000>;
|
||||
interrupts = <GIC_SPI 68 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&tegra_car TEGRA30_CLK_MPE>;
|
||||
resets = <&tegra_car 60>;
|
||||
reset-names = "mpe";
|
||||
};
|
||||
|
||||
vi@54080000 {
|
||||
compatible = "nvidia,tegra30-vi";
|
||||
reg = <0x54080000 0x00040000>;
|
||||
interrupts = <GIC_SPI 69 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&tegra_car TEGRA30_CLK_VI>;
|
||||
resets = <&tegra_car 20>;
|
||||
reset-names = "vi";
|
||||
};
|
||||
|
||||
epp@540c0000 {
|
||||
compatible = "nvidia,tegra30-epp";
|
||||
reg = <0x540c0000 0x00040000>;
|
||||
interrupts = <GIC_SPI 70 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&tegra_car TEGRA30_CLK_EPP>;
|
||||
resets = <&tegra_car 19>;
|
||||
reset-names = "epp";
|
||||
};
|
||||
|
||||
isp@54100000 {
|
||||
compatible = "nvidia,tegra30-isp";
|
||||
reg = <0x54100000 0x00040000>;
|
||||
interrupts = <GIC_SPI 71 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&tegra_car TEGRA30_CLK_ISP>;
|
||||
resets = <&tegra_car 23>;
|
||||
reset-names = "isp";
|
||||
};
|
||||
|
||||
gr2d@54140000 {
|
||||
compatible = "nvidia,tegra30-gr2d";
|
||||
reg = <0x54140000 0x00040000>;
|
||||
interrupts = <GIC_SPI 72 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&tegra_car TEGRA30_CLK_GR2D>;
|
||||
resets = <&tegra_car 21>;
|
||||
reset-names = "2d";
|
||||
};
|
||||
|
||||
gr3d@54180000 {
|
||||
compatible = "nvidia,tegra30-gr3d";
|
||||
reg = <0x54180000 0x00040000>;
|
||||
clocks = <&tegra_car TEGRA30_CLK_GR3D
|
||||
&tegra_car TEGRA30_CLK_GR3D2>;
|
||||
clock-names = "3d", "3d2";
|
||||
resets = <&tegra_car 24>,
|
||||
<&tegra_car 98>;
|
||||
reset-names = "3d", "3d2";
|
||||
};
|
||||
|
||||
dc@54200000 {
|
||||
compatible = "nvidia,tegra30-dc", "nvidia,tegra20-dc";
|
||||
reg = <0x54200000 0x00040000>;
|
||||
interrupts = <GIC_SPI 73 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&tegra_car TEGRA30_CLK_DISP1>,
|
||||
<&tegra_car TEGRA30_CLK_PLL_P>;
|
||||
clock-names = "dc", "parent";
|
||||
resets = <&tegra_car 27>;
|
||||
reset-names = "dc";
|
||||
|
||||
iommus = <&mc TEGRA_SWGROUP_DC>;
|
||||
|
||||
nvidia,head = <0>;
|
||||
|
||||
rgb {
|
||||
status = "disabled";
|
||||
};
|
||||
};
|
||||
|
||||
dc@54240000 {
|
||||
compatible = "nvidia,tegra30-dc";
|
||||
reg = <0x54240000 0x00040000>;
|
||||
interrupts = <GIC_SPI 74 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&tegra_car TEGRA30_CLK_DISP2>,
|
||||
<&tegra_car TEGRA30_CLK_PLL_P>;
|
||||
clock-names = "dc", "parent";
|
||||
resets = <&tegra_car 26>;
|
||||
reset-names = "dc";
|
||||
|
||||
iommus = <&mc TEGRA_SWGROUP_DCB>;
|
||||
|
||||
nvidia,head = <1>;
|
||||
|
||||
rgb {
|
||||
status = "disabled";
|
||||
};
|
||||
};
|
||||
|
||||
hdmi@54280000 {
|
||||
compatible = "nvidia,tegra30-hdmi";
|
||||
reg = <0x54280000 0x00040000>;
|
||||
interrupts = <GIC_SPI 75 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&tegra_car TEGRA30_CLK_HDMI>,
|
||||
<&tegra_car TEGRA30_CLK_PLL_D2_OUT0>;
|
||||
clock-names = "hdmi", "parent";
|
||||
resets = <&tegra_car 51>;
|
||||
reset-names = "hdmi";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
tvo@542c0000 {
|
||||
compatible = "nvidia,tegra30-tvo";
|
||||
reg = <0x542c0000 0x00040000>;
|
||||
interrupts = <GIC_SPI 76 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&tegra_car TEGRA30_CLK_TVO>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
dsi@54300000 {
|
||||
compatible = "nvidia,tegra30-dsi";
|
||||
reg = <0x54300000 0x00040000>;
|
||||
clocks = <&tegra_car TEGRA30_CLK_DSIA>;
|
||||
resets = <&tegra_car 48>;
|
||||
reset-names = "dsi";
|
||||
status = "disabled";
|
||||
};
|
||||
};
|
||||
|
||||
timer@50040600 {
|
||||
compatible = "arm,cortex-a9-twd-timer";
|
||||
reg = <0x50040600 0x20>;
|
||||
interrupt-parent = <&intc>;
|
||||
interrupts = <GIC_PPI 13
|
||||
(GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_EDGE_RISING)>;
|
||||
clocks = <&tegra_car TEGRA30_CLK_TWD>;
|
||||
};
|
||||
|
||||
intc: interrupt-controller@50041000 {
|
||||
compatible = "arm,cortex-a9-gic";
|
||||
reg = <0x50041000 0x1000
|
||||
0x50040100 0x0100>;
|
||||
interrupt-controller;
|
||||
#interrupt-cells = <3>;
|
||||
interrupt-parent = <&intc>;
|
||||
};
|
||||
|
||||
cache-controller@50043000 {
|
||||
compatible = "arm,pl310-cache";
|
||||
reg = <0x50043000 0x1000>;
|
||||
arm,data-latency = <6 6 2>;
|
||||
arm,tag-latency = <5 5 2>;
|
||||
cache-unified;
|
||||
cache-level = <2>;
|
||||
};
|
||||
|
||||
lic: interrupt-controller@60004000 {
|
||||
compatible = "nvidia,tegra30-ictlr";
|
||||
reg = <0x60004000 0x100>,
|
||||
<0x60004100 0x50>,
|
||||
<0x60004200 0x50>,
|
||||
<0x60004300 0x50>,
|
||||
<0x60004400 0x50>;
|
||||
interrupt-controller;
|
||||
#interrupt-cells = <3>;
|
||||
interrupt-parent = <&intc>;
|
||||
};
|
||||
|
||||
timer@60005000 {
|
||||
compatible = "nvidia,tegra30-timer", "nvidia,tegra20-timer";
|
||||
reg = <0x60005000 0x400>;
|
||||
interrupts = <GIC_SPI 0 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 1 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 41 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 42 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 121 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 122 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&tegra_car TEGRA30_CLK_TIMER>;
|
||||
};
|
||||
|
||||
tegra_car: clock@60006000 {
|
||||
compatible = "nvidia,tegra30-car";
|
||||
reg = <0x60006000 0x1000>;
|
||||
#clock-cells = <1>;
|
||||
#reset-cells = <1>;
|
||||
};
|
||||
|
||||
apbdma: dma {
|
||||
flow-controller@60007000 {
|
||||
compatible = "nvidia,tegra30-flowctrl";
|
||||
reg = <0x60007000 0x1000>;
|
||||
};
|
||||
|
||||
apbdma: dma@6000a000 {
|
||||
compatible = "nvidia,tegra30-apbdma", "nvidia,tegra20-apbdma";
|
||||
reg = <0x6000a000 0x1400>;
|
||||
interrupts = <0 104 0x04
|
||||
0 105 0x04
|
||||
0 106 0x04
|
||||
0 107 0x04
|
||||
0 108 0x04
|
||||
0 109 0x04
|
||||
0 110 0x04
|
||||
0 111 0x04
|
||||
0 112 0x04
|
||||
0 113 0x04
|
||||
0 114 0x04
|
||||
0 115 0x04
|
||||
0 116 0x04
|
||||
0 117 0x04
|
||||
0 118 0x04
|
||||
0 119 0x04
|
||||
0 128 0x04
|
||||
0 129 0x04
|
||||
0 130 0x04
|
||||
0 131 0x04
|
||||
0 132 0x04
|
||||
0 133 0x04
|
||||
0 134 0x04
|
||||
0 135 0x04
|
||||
0 136 0x04
|
||||
0 137 0x04
|
||||
0 138 0x04
|
||||
0 139 0x04
|
||||
0 140 0x04
|
||||
0 141 0x04
|
||||
0 142 0x04
|
||||
0 143 0x04>;
|
||||
clocks = <&tegra_car 34>;
|
||||
interrupts = <GIC_SPI 104 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 105 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 106 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 107 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 108 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 109 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 110 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 111 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 112 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<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>,
|
||||
<GIC_SPI 117 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 118 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 119 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 128 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 129 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 130 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 131 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 132 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 133 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 134 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 135 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 136 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 137 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 138 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 139 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 140 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 141 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 142 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 143 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&tegra_car TEGRA30_CLK_APBDMA>;
|
||||
resets = <&tegra_car 34>;
|
||||
reset-names = "dma";
|
||||
#dma-cells = <1>;
|
||||
};
|
||||
|
||||
ahb: ahb@6000c000 {
|
||||
compatible = "nvidia,tegra30-ahb";
|
||||
reg = <0x6000c000 0x150>; /* AHB Arbitration + Gizmo Controller */
|
||||
};
|
||||
|
||||
gpio: gpio@6000d000 {
|
||||
@@ -149,63 +349,31 @@
|
||||
gpio-controller;
|
||||
#interrupt-cells = <2>;
|
||||
interrupt-controller;
|
||||
/*
|
||||
gpio-ranges = <&pinmux 0 0 248>;
|
||||
*/
|
||||
};
|
||||
|
||||
i2c@7000c000 {
|
||||
compatible = "nvidia,tegra30-i2c", "nvidia,tegra20-i2c";
|
||||
reg = <0x7000c000 0x100>;
|
||||
interrupts = <0 38 0x04>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
clocks = <&tegra_car 12>, <&tegra_car 182>;
|
||||
clock-names = "div-clk", "fast-clk";
|
||||
status = "disabled";
|
||||
apbmisc@70000800 {
|
||||
compatible = "nvidia,tegra30-apbmisc", "nvidia,tegra20-apbmisc";
|
||||
reg = <0x70000800 0x64 /* Chip revision */
|
||||
0x70000008 0x04>; /* Strapping options */
|
||||
};
|
||||
|
||||
i2c@7000c400 {
|
||||
compatible = "nvidia,tegra30-i2c", "nvidia,tegra20-i2c";
|
||||
reg = <0x7000c400 0x100>;
|
||||
interrupts = <0 84 0x04>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
clocks = <&tegra_car 54>, <&tegra_car 182>;
|
||||
clock-names = "div-clk", "fast-clk";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
i2c@7000c500 {
|
||||
compatible = "nvidia,tegra30-i2c", "nvidia,tegra20-i2c";
|
||||
reg = <0x7000c500 0x100>;
|
||||
interrupts = <0 92 0x04>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
clocks = <&tegra_car 67>, <&tegra_car 182>;
|
||||
clock-names = "div-clk", "fast-clk";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
i2c@7000c700 {
|
||||
compatible = "nvidia,tegra30-i2c", "nvidia,tegra20-i2c";
|
||||
reg = <0x7000c700 0x100>;
|
||||
interrupts = <0 120 0x04>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
clocks = <&tegra_car 103>, <&tegra_car 182>;
|
||||
clock-names = "div-clk", "fast-clk";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
i2c@7000d000 {
|
||||
compatible = "nvidia,tegra30-i2c", "nvidia,tegra20-i2c";
|
||||
reg = <0x7000d000 0x100>;
|
||||
interrupts = <0 53 0x04>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
clocks = <&tegra_car 47>, <&tegra_car 182>;
|
||||
clock-names = "div-clk", "fast-clk";
|
||||
status = "disabled";
|
||||
pinmux: pinmux@70000868 {
|
||||
compatible = "nvidia,tegra30-pinmux";
|
||||
reg = <0x70000868 0xd4 /* Pad control registers */
|
||||
0x70003000 0x3e4>; /* Mux registers */
|
||||
};
|
||||
|
||||
/*
|
||||
* There are two serial driver i.e. 8250 based simple serial
|
||||
* driver and APB DMA based serial driver for higher baudrate
|
||||
* and performace. To enable the 8250 based driver, the compatible
|
||||
* is "nvidia,tegra30-uart", "nvidia,tegra20-uart" and to enable
|
||||
* the APB DMA based serial driver, the compatible is
|
||||
* "nvidia,tegra30-hsuart", "nvidia,tegra20-hsuart".
|
||||
*/
|
||||
uarta: serial@70006000 {
|
||||
compatible = "nvidia,tegra30-uart", "nvidia,tegra20-uart";
|
||||
reg = <0x70006000 0x40>;
|
||||
@@ -271,128 +439,506 @@
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
pwm: pwm@7000a000 {
|
||||
compatible = "nvidia,tegra30-pwm", "nvidia,tegra20-pwm";
|
||||
reg = <0x7000a000 0x100>;
|
||||
#pwm-cells = <2>;
|
||||
clocks = <&tegra_car TEGRA30_CLK_PWM>;
|
||||
resets = <&tegra_car 17>;
|
||||
reset-names = "pwm";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
rtc@7000e000 {
|
||||
compatible = "nvidia,tegra30-rtc", "nvidia,tegra20-rtc";
|
||||
reg = <0x7000e000 0x100>;
|
||||
interrupts = <GIC_SPI 2 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&tegra_car TEGRA30_CLK_RTC>;
|
||||
};
|
||||
|
||||
i2c@7000c000 {
|
||||
compatible = "nvidia,tegra30-i2c", "nvidia,tegra20-i2c";
|
||||
reg = <0x7000c000 0x100>;
|
||||
interrupts = <GIC_SPI 38 IRQ_TYPE_LEVEL_HIGH>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
clocks = <&tegra_car TEGRA30_CLK_I2C1>,
|
||||
<&tegra_car TEGRA30_CLK_PLL_P_OUT3>;
|
||||
clock-names = "div-clk", "fast-clk";
|
||||
resets = <&tegra_car 12>;
|
||||
reset-names = "i2c";
|
||||
dmas = <&apbdma 21>, <&apbdma 21>;
|
||||
dma-names = "rx", "tx";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
i2c@7000c400 {
|
||||
compatible = "nvidia,tegra30-i2c", "nvidia,tegra20-i2c";
|
||||
reg = <0x7000c400 0x100>;
|
||||
interrupts = <GIC_SPI 84 IRQ_TYPE_LEVEL_HIGH>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
clocks = <&tegra_car TEGRA30_CLK_I2C2>,
|
||||
<&tegra_car TEGRA30_CLK_PLL_P_OUT3>;
|
||||
clock-names = "div-clk", "fast-clk";
|
||||
resets = <&tegra_car 54>;
|
||||
reset-names = "i2c";
|
||||
dmas = <&apbdma 22>, <&apbdma 22>;
|
||||
dma-names = "rx", "tx";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
i2c@7000c500 {
|
||||
compatible = "nvidia,tegra30-i2c", "nvidia,tegra20-i2c";
|
||||
reg = <0x7000c500 0x100>;
|
||||
interrupts = <GIC_SPI 92 IRQ_TYPE_LEVEL_HIGH>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
clocks = <&tegra_car TEGRA30_CLK_I2C3>,
|
||||
<&tegra_car TEGRA30_CLK_PLL_P_OUT3>;
|
||||
clock-names = "div-clk", "fast-clk";
|
||||
resets = <&tegra_car 67>;
|
||||
reset-names = "i2c";
|
||||
dmas = <&apbdma 23>, <&apbdma 23>;
|
||||
dma-names = "rx", "tx";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
i2c@7000c700 {
|
||||
compatible = "nvidia,tegra30-i2c", "nvidia,tegra20-i2c";
|
||||
reg = <0x7000c700 0x100>;
|
||||
interrupts = <GIC_SPI 120 IRQ_TYPE_LEVEL_HIGH>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
clocks = <&tegra_car TEGRA30_CLK_I2C4>,
|
||||
<&tegra_car TEGRA30_CLK_PLL_P_OUT3>;
|
||||
resets = <&tegra_car 103>;
|
||||
reset-names = "i2c";
|
||||
clock-names = "div-clk", "fast-clk";
|
||||
dmas = <&apbdma 26>, <&apbdma 26>;
|
||||
dma-names = "rx", "tx";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
i2c@7000d000 {
|
||||
compatible = "nvidia,tegra30-i2c", "nvidia,tegra20-i2c";
|
||||
reg = <0x7000d000 0x100>;
|
||||
interrupts = <GIC_SPI 53 IRQ_TYPE_LEVEL_HIGH>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
clocks = <&tegra_car TEGRA30_CLK_I2C5>,
|
||||
<&tegra_car TEGRA30_CLK_PLL_P_OUT3>;
|
||||
clock-names = "div-clk", "fast-clk";
|
||||
resets = <&tegra_car 47>;
|
||||
reset-names = "i2c";
|
||||
dmas = <&apbdma 24>, <&apbdma 24>;
|
||||
dma-names = "rx", "tx";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
spi@7000d400 {
|
||||
compatible = "nvidia,tegra30-slink", "nvidia,tegra20-slink";
|
||||
reg = <0x7000d400 0x200>;
|
||||
interrupts = <0 59 0x04>;
|
||||
nvidia,dma-request-selector = <&apbdma 15>;
|
||||
interrupts = <GIC_SPI 59 IRQ_TYPE_LEVEL_HIGH>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
clocks = <&tegra_car 41>;
|
||||
clocks = <&tegra_car TEGRA30_CLK_SBC1>;
|
||||
resets = <&tegra_car 41>;
|
||||
reset-names = "spi";
|
||||
dmas = <&apbdma 15>, <&apbdma 15>;
|
||||
dma-names = "rx", "tx";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
spi@7000d600 {
|
||||
compatible = "nvidia,tegra30-slink", "nvidia,tegra20-slink";
|
||||
reg = <0x7000d600 0x200>;
|
||||
interrupts = <0 82 0x04>;
|
||||
nvidia,dma-request-selector = <&apbdma 16>;
|
||||
interrupts = <GIC_SPI 82 IRQ_TYPE_LEVEL_HIGH>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
clocks = <&tegra_car 44>;
|
||||
clocks = <&tegra_car TEGRA30_CLK_SBC2>;
|
||||
resets = <&tegra_car 44>;
|
||||
reset-names = "spi";
|
||||
dmas = <&apbdma 16>, <&apbdma 16>;
|
||||
dma-names = "rx", "tx";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
spi@7000d800 {
|
||||
compatible = "nvidia,tegra30-slink", "nvidia,tegra20-slink";
|
||||
reg = <0x7000d480 0x200>;
|
||||
interrupts = <0 83 0x04>;
|
||||
nvidia,dma-request-selector = <&apbdma 17>;
|
||||
reg = <0x7000d800 0x200>;
|
||||
interrupts = <GIC_SPI 83 IRQ_TYPE_LEVEL_HIGH>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
clocks = <&tegra_car 46>;
|
||||
clocks = <&tegra_car TEGRA30_CLK_SBC3>;
|
||||
resets = <&tegra_car 46>;
|
||||
reset-names = "spi";
|
||||
dmas = <&apbdma 17>, <&apbdma 17>;
|
||||
dma-names = "rx", "tx";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
spi@7000da00 {
|
||||
compatible = "nvidia,tegra30-slink", "nvidia,tegra20-slink";
|
||||
reg = <0x7000da00 0x200>;
|
||||
interrupts = <0 93 0x04>;
|
||||
nvidia,dma-request-selector = <&apbdma 18>;
|
||||
interrupts = <GIC_SPI 93 IRQ_TYPE_LEVEL_HIGH>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
clocks = <&tegra_car 68>;
|
||||
clocks = <&tegra_car TEGRA30_CLK_SBC4>;
|
||||
resets = <&tegra_car 68>;
|
||||
reset-names = "spi";
|
||||
dmas = <&apbdma 18>, <&apbdma 18>;
|
||||
dma-names = "rx", "tx";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
spi@7000dc00 {
|
||||
compatible = "nvidia,tegra30-slink", "nvidia,tegra20-slink";
|
||||
reg = <0x7000dc00 0x200>;
|
||||
interrupts = <0 94 0x04>;
|
||||
nvidia,dma-request-selector = <&apbdma 27>;
|
||||
interrupts = <GIC_SPI 94 IRQ_TYPE_LEVEL_HIGH>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
clocks = <&tegra_car 104>;
|
||||
clocks = <&tegra_car TEGRA30_CLK_SBC5>;
|
||||
resets = <&tegra_car 104>;
|
||||
reset-names = "spi";
|
||||
dmas = <&apbdma 27>, <&apbdma 27>;
|
||||
dma-names = "rx", "tx";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
spi@7000de00 {
|
||||
compatible = "nvidia,tegra30-slink", "nvidia,tegra20-slink";
|
||||
reg = <0x7000de00 0x200>;
|
||||
interrupts = <0 79 0x04>;
|
||||
nvidia,dma-request-selector = <&apbdma 28>;
|
||||
interrupts = <GIC_SPI 79 IRQ_TYPE_LEVEL_HIGH>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
clocks = <&tegra_car 105>;
|
||||
clocks = <&tegra_car TEGRA30_CLK_SBC6>;
|
||||
resets = <&tegra_car 106>;
|
||||
reset-names = "spi";
|
||||
dmas = <&apbdma 28>, <&apbdma 28>;
|
||||
dma-names = "rx", "tx";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
kbc@7000e200 {
|
||||
compatible = "nvidia,tegra30-kbc", "nvidia,tegra20-kbc";
|
||||
reg = <0x7000e200 0x100>;
|
||||
interrupts = <GIC_SPI 85 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&tegra_car TEGRA30_CLK_KBC>;
|
||||
resets = <&tegra_car 36>;
|
||||
reset-names = "kbc";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
pmc@7000e400 {
|
||||
compatible = "nvidia,tegra30-pmc";
|
||||
reg = <0x7000e400 0x400>;
|
||||
clocks = <&tegra_car TEGRA30_CLK_PCLK>, <&clk32k_in>;
|
||||
clock-names = "pclk", "clk32k_in";
|
||||
};
|
||||
|
||||
mc: memory-controller@7000f000 {
|
||||
compatible = "nvidia,tegra30-mc";
|
||||
reg = <0x7000f000 0x400>;
|
||||
clocks = <&tegra_car TEGRA30_CLK_MC>;
|
||||
clock-names = "mc";
|
||||
|
||||
interrupts = <GIC_SPI 77 IRQ_TYPE_LEVEL_HIGH>;
|
||||
|
||||
#iommu-cells = <1>;
|
||||
};
|
||||
|
||||
fuse@7000f800 {
|
||||
compatible = "nvidia,tegra30-efuse";
|
||||
reg = <0x7000f800 0x400>;
|
||||
clocks = <&tegra_car TEGRA30_CLK_FUSE>;
|
||||
clock-names = "fuse";
|
||||
resets = <&tegra_car 39>;
|
||||
reset-names = "fuse";
|
||||
};
|
||||
|
||||
hda@70030000 {
|
||||
compatible = "nvidia,tegra30-hda";
|
||||
reg = <0x70030000 0x10000>;
|
||||
interrupts = <GIC_SPI 81 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&tegra_car TEGRA30_CLK_HDA>,
|
||||
<&tegra_car TEGRA30_CLK_HDA2HDMI>,
|
||||
<&tegra_car TEGRA30_CLK_HDA2CODEC_2X>;
|
||||
clock-names = "hda", "hda2hdmi", "hda2codec_2x";
|
||||
resets = <&tegra_car 125>, /* hda */
|
||||
<&tegra_car 128>, /* hda2hdmi */
|
||||
<&tegra_car 111>; /* hda2codec_2x */
|
||||
reset-names = "hda", "hda2hdmi", "hda2codec_2x";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
ahub@70080000 {
|
||||
compatible = "nvidia,tegra30-ahub";
|
||||
reg = <0x70080000 0x200
|
||||
0x70080200 0x100>;
|
||||
interrupts = <GIC_SPI 103 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&tegra_car TEGRA30_CLK_D_AUDIO>,
|
||||
<&tegra_car TEGRA30_CLK_APBIF>;
|
||||
clock-names = "d_audio", "apbif";
|
||||
resets = <&tegra_car 106>, /* d_audio */
|
||||
<&tegra_car 107>, /* apbif */
|
||||
<&tegra_car 30>, /* i2s0 */
|
||||
<&tegra_car 11>, /* i2s1 */
|
||||
<&tegra_car 18>, /* i2s2 */
|
||||
<&tegra_car 101>, /* i2s3 */
|
||||
<&tegra_car 102>, /* i2s4 */
|
||||
<&tegra_car 108>, /* dam0 */
|
||||
<&tegra_car 109>, /* dam1 */
|
||||
<&tegra_car 110>, /* dam2 */
|
||||
<&tegra_car 10>; /* spdif */
|
||||
reset-names = "d_audio", "apbif", "i2s0", "i2s1", "i2s2",
|
||||
"i2s3", "i2s4", "dam0", "dam1", "dam2",
|
||||
"spdif";
|
||||
dmas = <&apbdma 1>, <&apbdma 1>,
|
||||
<&apbdma 2>, <&apbdma 2>,
|
||||
<&apbdma 3>, <&apbdma 3>,
|
||||
<&apbdma 4>, <&apbdma 4>;
|
||||
dma-names = "rx0", "tx0", "rx1", "tx1", "rx2", "tx2",
|
||||
"rx3", "tx3";
|
||||
ranges;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
|
||||
tegra_i2s0: i2s@70080300 {
|
||||
compatible = "nvidia,tegra30-i2s";
|
||||
reg = <0x70080300 0x100>;
|
||||
nvidia,ahub-cif-ids = <4 4>;
|
||||
clocks = <&tegra_car TEGRA30_CLK_I2S0>;
|
||||
resets = <&tegra_car 30>;
|
||||
reset-names = "i2s";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
tegra_i2s1: i2s@70080400 {
|
||||
compatible = "nvidia,tegra30-i2s";
|
||||
reg = <0x70080400 0x100>;
|
||||
nvidia,ahub-cif-ids = <5 5>;
|
||||
clocks = <&tegra_car TEGRA30_CLK_I2S1>;
|
||||
resets = <&tegra_car 11>;
|
||||
reset-names = "i2s";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
tegra_i2s2: i2s@70080500 {
|
||||
compatible = "nvidia,tegra30-i2s";
|
||||
reg = <0x70080500 0x100>;
|
||||
nvidia,ahub-cif-ids = <6 6>;
|
||||
clocks = <&tegra_car TEGRA30_CLK_I2S2>;
|
||||
resets = <&tegra_car 18>;
|
||||
reset-names = "i2s";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
tegra_i2s3: i2s@70080600 {
|
||||
compatible = "nvidia,tegra30-i2s";
|
||||
reg = <0x70080600 0x100>;
|
||||
nvidia,ahub-cif-ids = <7 7>;
|
||||
clocks = <&tegra_car TEGRA30_CLK_I2S3>;
|
||||
resets = <&tegra_car 101>;
|
||||
reset-names = "i2s";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
tegra_i2s4: i2s@70080700 {
|
||||
compatible = "nvidia,tegra30-i2s";
|
||||
reg = <0x70080700 0x100>;
|
||||
nvidia,ahub-cif-ids = <8 8>;
|
||||
clocks = <&tegra_car TEGRA30_CLK_I2S4>;
|
||||
resets = <&tegra_car 102>;
|
||||
reset-names = "i2s";
|
||||
status = "disabled";
|
||||
};
|
||||
};
|
||||
|
||||
sdhci@78000000 {
|
||||
compatible = "nvidia,tegra30-sdhci";
|
||||
compatible = "nvidia,tegra30-sdhci", "nvidia,tegra20-sdhci";
|
||||
reg = <0x78000000 0x200>;
|
||||
interrupts = <0 14 0x04>;
|
||||
clocks = <&tegra_car 14>;
|
||||
interrupts = <GIC_SPI 14 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&tegra_car TEGRA30_CLK_SDMMC1>;
|
||||
resets = <&tegra_car 14>;
|
||||
reset-names = "sdhci";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
sdhci@78000200 {
|
||||
compatible = "nvidia,tegra30-sdhci";
|
||||
compatible = "nvidia,tegra30-sdhci", "nvidia,tegra20-sdhci";
|
||||
reg = <0x78000200 0x200>;
|
||||
interrupts = <0 15 0x04>;
|
||||
clocks = <&tegra_car 9>;
|
||||
interrupts = <GIC_SPI 15 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&tegra_car TEGRA30_CLK_SDMMC2>;
|
||||
resets = <&tegra_car 9>;
|
||||
reset-names = "sdhci";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
sdhci@78000400 {
|
||||
compatible = "nvidia,tegra30-sdhci";
|
||||
compatible = "nvidia,tegra30-sdhci", "nvidia,tegra20-sdhci";
|
||||
reg = <0x78000400 0x200>;
|
||||
interrupts = <0 19 0x04>;
|
||||
clocks = <&tegra_car 69>;
|
||||
interrupts = <GIC_SPI 19 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&tegra_car TEGRA30_CLK_SDMMC3>;
|
||||
resets = <&tegra_car 69>;
|
||||
reset-names = "sdhci";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
sdhci@78000600 {
|
||||
compatible = "nvidia,tegra30-sdhci";
|
||||
compatible = "nvidia,tegra30-sdhci", "nvidia,tegra20-sdhci";
|
||||
reg = <0x78000600 0x200>;
|
||||
interrupts = <0 31 0x04>;
|
||||
clocks = <&tegra_car 15>;
|
||||
interrupts = <GIC_SPI 31 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&tegra_car TEGRA30_CLK_SDMMC4>;
|
||||
resets = <&tegra_car 15>;
|
||||
reset-names = "sdhci";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
usb@7d000000 {
|
||||
compatible = "nvidia,tegra30-ehci";
|
||||
compatible = "nvidia,tegra30-ehci", "usb-ehci";
|
||||
reg = <0x7d000000 0x4000>;
|
||||
interrupts = <52>;
|
||||
interrupts = <GIC_SPI 20 IRQ_TYPE_LEVEL_HIGH>;
|
||||
phy_type = "utmi";
|
||||
clocks = <&tegra_car 22>; /* PERIPH_ID_USBD */
|
||||
clocks = <&tegra_car TEGRA30_CLK_USBD>;
|
||||
resets = <&tegra_car 22>;
|
||||
reset-names = "usb";
|
||||
nvidia,needs-double-reset;
|
||||
nvidia,phy = <&phy1>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
phy1: usb-phy@7d000000 {
|
||||
compatible = "nvidia,tegra30-usb-phy";
|
||||
reg = <0x7d000000 0x4000 0x7d000000 0x4000>;
|
||||
phy_type = "utmi";
|
||||
clocks = <&tegra_car TEGRA30_CLK_USBD>,
|
||||
<&tegra_car TEGRA30_CLK_PLL_U>,
|
||||
<&tegra_car TEGRA30_CLK_USBD>;
|
||||
clock-names = "reg", "pll_u", "utmi-pads";
|
||||
resets = <&tegra_car 22>, <&tegra_car 22>;
|
||||
reset-names = "usb", "utmi-pads";
|
||||
nvidia,hssync-start-delay = <9>;
|
||||
nvidia,idle-wait-delay = <17>;
|
||||
nvidia,elastic-limit = <16>;
|
||||
nvidia,term-range-adj = <6>;
|
||||
nvidia,xcvr-setup = <51>;
|
||||
nvidia.xcvr-setup-use-fuses;
|
||||
nvidia,xcvr-lsfslew = <1>;
|
||||
nvidia,xcvr-lsrslew = <1>;
|
||||
nvidia,xcvr-hsslew = <32>;
|
||||
nvidia,hssquelch-level = <2>;
|
||||
nvidia,hsdiscon-level = <5>;
|
||||
nvidia,has-utmi-pad-registers;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
usb@7d004000 {
|
||||
compatible = "nvidia,tegra30-ehci";
|
||||
compatible = "nvidia,tegra30-ehci", "usb-ehci";
|
||||
reg = <0x7d004000 0x4000>;
|
||||
interrupts = <53>;
|
||||
phy_type = "hsic";
|
||||
clocks = <&tegra_car 58>; /* PERIPH_ID_USB2 */
|
||||
interrupts = <GIC_SPI 21 IRQ_TYPE_LEVEL_HIGH>;
|
||||
phy_type = "utmi";
|
||||
clocks = <&tegra_car TEGRA30_CLK_USB2>;
|
||||
resets = <&tegra_car 58>;
|
||||
reset-names = "usb";
|
||||
nvidia,phy = <&phy2>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
phy2: usb-phy@7d004000 {
|
||||
compatible = "nvidia,tegra30-usb-phy";
|
||||
reg = <0x7d004000 0x4000 0x7d000000 0x4000>;
|
||||
phy_type = "utmi";
|
||||
clocks = <&tegra_car TEGRA30_CLK_USB2>,
|
||||
<&tegra_car TEGRA30_CLK_PLL_U>,
|
||||
<&tegra_car TEGRA30_CLK_USBD>;
|
||||
clock-names = "reg", "pll_u", "utmi-pads";
|
||||
resets = <&tegra_car 58>, <&tegra_car 22>;
|
||||
reset-names = "usb", "utmi-pads";
|
||||
nvidia,hssync-start-delay = <9>;
|
||||
nvidia,idle-wait-delay = <17>;
|
||||
nvidia,elastic-limit = <16>;
|
||||
nvidia,term-range-adj = <6>;
|
||||
nvidia,xcvr-setup = <51>;
|
||||
nvidia.xcvr-setup-use-fuses;
|
||||
nvidia,xcvr-lsfslew = <2>;
|
||||
nvidia,xcvr-lsrslew = <2>;
|
||||
nvidia,xcvr-hsslew = <32>;
|
||||
nvidia,hssquelch-level = <2>;
|
||||
nvidia,hsdiscon-level = <5>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
usb@7d008000 {
|
||||
compatible = "nvidia,tegra30-ehci";
|
||||
compatible = "nvidia,tegra30-ehci", "usb-ehci";
|
||||
reg = <0x7d008000 0x4000>;
|
||||
interrupts = <129>;
|
||||
interrupts = <GIC_SPI 97 IRQ_TYPE_LEVEL_HIGH>;
|
||||
phy_type = "utmi";
|
||||
clocks = <&tegra_car 59>; /* PERIPH_ID_USB3 */
|
||||
clocks = <&tegra_car TEGRA30_CLK_USB3>;
|
||||
resets = <&tegra_car 59>;
|
||||
reset-names = "usb";
|
||||
nvidia,phy = <&phy3>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
phy3: usb-phy@7d008000 {
|
||||
compatible = "nvidia,tegra30-usb-phy";
|
||||
reg = <0x7d008000 0x4000 0x7d000000 0x4000>;
|
||||
phy_type = "utmi";
|
||||
clocks = <&tegra_car TEGRA30_CLK_USB3>,
|
||||
<&tegra_car TEGRA30_CLK_PLL_U>,
|
||||
<&tegra_car TEGRA30_CLK_USBD>;
|
||||
clock-names = "reg", "pll_u", "utmi-pads";
|
||||
resets = <&tegra_car 59>, <&tegra_car 22>;
|
||||
reset-names = "usb", "utmi-pads";
|
||||
nvidia,hssync-start-delay = <0>;
|
||||
nvidia,idle-wait-delay = <17>;
|
||||
nvidia,elastic-limit = <16>;
|
||||
nvidia,term-range-adj = <6>;
|
||||
nvidia,xcvr-setup = <51>;
|
||||
nvidia.xcvr-setup-use-fuses;
|
||||
nvidia,xcvr-lsfslew = <2>;
|
||||
nvidia,xcvr-lsrslew = <2>;
|
||||
nvidia,xcvr-hsslew = <32>;
|
||||
nvidia,hssquelch-level = <2>;
|
||||
nvidia,hsdiscon-level = <5>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
cpus {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
cpu@0 {
|
||||
device_type = "cpu";
|
||||
compatible = "arm,cortex-a9";
|
||||
reg = <0>;
|
||||
};
|
||||
|
||||
cpu@1 {
|
||||
device_type = "cpu";
|
||||
compatible = "arm,cortex-a9";
|
||||
reg = <1>;
|
||||
};
|
||||
|
||||
cpu@2 {
|
||||
device_type = "cpu";
|
||||
compatible = "arm,cortex-a9";
|
||||
reg = <2>;
|
||||
};
|
||||
|
||||
cpu@3 {
|
||||
device_type = "cpu";
|
||||
compatible = "arm,cortex-a9";
|
||||
reg = <3>;
|
||||
};
|
||||
};
|
||||
|
||||
pmu {
|
||||
compatible = "arm,cortex-a9-pmu";
|
||||
interrupts = <GIC_SPI 144 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 145 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 146 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 147 IRQ_TYPE_LEVEL_HIGH>;
|
||||
};
|
||||
};
|
||||
|
||||
@@ -186,6 +186,16 @@ int clock_ll_set_source_bits(enum periph_id periph_id, int mux_bits,
|
||||
void clock_ll_set_source_divisor(enum periph_id periph_id, unsigned source,
|
||||
unsigned divisor);
|
||||
|
||||
/**
|
||||
* Returns the current parent clock ID of a given peripheral. This can be
|
||||
* useful in order to call clock_*_periph_*() from generic code that has no
|
||||
* specific knowledge of system-level clock tree structure.
|
||||
*
|
||||
* @param periph_id peripheral to query
|
||||
* @return clock ID of the peripheral's current parent clock
|
||||
*/
|
||||
enum clock_id clock_get_periph_parent(enum periph_id periph_id);
|
||||
|
||||
/**
|
||||
* Start a peripheral PLL clock at the given rate. This also resets the
|
||||
* peripheral.
|
||||
@@ -284,6 +294,36 @@ u32 *get_periph_source_reg(enum periph_id periph_id);
|
||||
/* Returns a pointer to the given 'simple' PLL */
|
||||
struct clk_pll_simple *clock_get_simple_pll(enum clock_id clkid);
|
||||
|
||||
/*
|
||||
* Given a peripheral ID, determine where the mux bits are in the peripheral
|
||||
* clock's register, the number of divider bits the clock has, and the SoC-
|
||||
* specific clock type.
|
||||
*
|
||||
* This is an internal API between the core Tegra clock code and the SoC-
|
||||
* specific clock code.
|
||||
*
|
||||
* @param periph_id peripheral to query
|
||||
* @param mux_bits Set to number of bits in mux register
|
||||
* @param divider_bits Set to the relevant MASK_BITS_* value
|
||||
* @param type Set to the SoC-specific clock type
|
||||
* @return 0 on success, -1 on error
|
||||
*/
|
||||
int get_periph_clock_info(enum periph_id periph_id, int *mux_bits,
|
||||
int *divider_bits, int *type);
|
||||
|
||||
/*
|
||||
* Given a peripheral ID and clock source mux value, determine the clock_id
|
||||
* of that peripheral's parent.
|
||||
*
|
||||
* This is an internal API between the core Tegra clock code and the SoC-
|
||||
* specific clock code.
|
||||
*
|
||||
* @param periph_id peripheral to query
|
||||
* @param source raw clock source mux value
|
||||
* @return the CLOCK_ID_* value @source represents
|
||||
*/
|
||||
enum clock_id get_periph_clock_id(enum periph_id periph_id, int source);
|
||||
|
||||
/**
|
||||
* Given a peripheral ID and the required source clock, this returns which
|
||||
* value should be programmed into the source mux for that peripheral.
|
||||
@@ -362,6 +402,12 @@ struct clk_pll_info {
|
||||
};
|
||||
extern struct clk_pll_info tegra_pll_info_table[CLOCK_ID_PLL_COUNT];
|
||||
|
||||
struct periph_clk_init {
|
||||
enum periph_id periph_id;
|
||||
enum clock_id parent_clock_id;
|
||||
};
|
||||
extern struct periph_clk_init periph_clk_init_table[];
|
||||
|
||||
/**
|
||||
* Enable output clock for external peripherals
|
||||
*
|
||||
|
||||
@@ -1,11 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2011, Google Inc. All rights reserved.
|
||||
* SPDX-License-Identifier: GPL-2.0+
|
||||
*/
|
||||
|
||||
#ifndef _TEGRA_MMC_H_
|
||||
#define _TEGRA_MMC_H_
|
||||
|
||||
void tegra_mmc_init(void);
|
||||
|
||||
#endif /* _TEGRA_MMC_H_ */
|
||||
@@ -132,26 +132,5 @@ struct tegra_mmc {
|
||||
#define AUTO_CAL_PD_OFFSET (0x70 << 8)
|
||||
#define AUTO_CAL_PU_OFFSET (0x62 << 0)
|
||||
|
||||
struct mmc_host {
|
||||
struct tegra_mmc *reg;
|
||||
int id; /* device id/number, 0-3 */
|
||||
int enabled; /* 1 to enable, 0 to disable */
|
||||
int width; /* Bus Width, 1, 4 or 8 */
|
||||
#ifdef CONFIG_TEGRA186
|
||||
struct reset_ctl reset_ctl;
|
||||
struct clk clk;
|
||||
#else
|
||||
enum periph_id mmc_id; /* Peripheral ID: PERIPH_ID_... */
|
||||
#endif
|
||||
struct gpio_desc cd_gpio; /* Change Detect GPIO */
|
||||
struct gpio_desc pwr_gpio; /* Power GPIO */
|
||||
struct gpio_desc wp_gpio; /* Write Protect GPIO */
|
||||
unsigned int version; /* SDHCI spec. version */
|
||||
unsigned int clock; /* Current clock (MHz) */
|
||||
struct mmc_config cfg; /* mmc configuration */
|
||||
};
|
||||
|
||||
void pad_init_mmc(struct mmc_host *host);
|
||||
|
||||
#endif /* __ASSEMBLY__ */
|
||||
#endif /* __TEGRA_MMC_H_ */
|
||||
|
||||
@@ -22,20 +22,30 @@ config TEGRA_IVC
|
||||
|
||||
config TEGRA_COMMON
|
||||
bool "Tegra common options"
|
||||
select CLK
|
||||
select DM
|
||||
select DM_ETH
|
||||
select DM_GPIO
|
||||
select DM_I2C
|
||||
select DM_KEYBOARD
|
||||
select DM_MMC
|
||||
select DM_PCI
|
||||
select DM_PCI_COMPAT
|
||||
select DM_PWM
|
||||
select DM_RESET
|
||||
select DM_SERIAL
|
||||
select DM_SPI
|
||||
select DM_SPI_FLASH
|
||||
select MISC
|
||||
select OF_CONTROL
|
||||
select VIDCONSOLE_AS_LCD if DM_VIDEO
|
||||
|
||||
config TEGRA_NO_BPMP
|
||||
bool "Tegra common options for SoCs without BPMP"
|
||||
select TEGRA_CAR
|
||||
select TEGRA_CAR_CLOCK
|
||||
select TEGRA_CAR_RESET
|
||||
|
||||
config TEGRA_ARMV7_COMMON
|
||||
bool "Tegra 32-bit common options"
|
||||
select CPU_V7
|
||||
@@ -43,6 +53,7 @@ config TEGRA_ARMV7_COMMON
|
||||
select SUPPORT_SPL
|
||||
select TEGRA_COMMON
|
||||
select TEGRA_GPIO
|
||||
select TEGRA_NO_BPMP
|
||||
|
||||
config TEGRA_ARMV8_COMMON
|
||||
bool "Tegra 64-bit common options"
|
||||
@@ -73,13 +84,11 @@ config TEGRA210
|
||||
bool "Tegra210 family"
|
||||
select TEGRA_GPIO
|
||||
select TEGRA_ARMV8_COMMON
|
||||
select TEGRA_NO_BPMP
|
||||
|
||||
config TEGRA186
|
||||
bool "Tegra186 family"
|
||||
select CLK
|
||||
select DM_MAILBOX
|
||||
select DM_RESET
|
||||
select MISC
|
||||
select TEGRA186_BPMP
|
||||
select TEGRA186_CLOCK
|
||||
select TEGRA186_GPIO
|
||||
|
||||
@@ -6,8 +6,6 @@
|
||||
|
||||
#include <common.h>
|
||||
#include <asm/arch/tegra.h>
|
||||
#include <asm/arch-tegra/mmc.h>
|
||||
#include <asm/arch-tegra/tegra_mmc.h>
|
||||
|
||||
DECLARE_GLOBAL_DATA_PTR;
|
||||
|
||||
@@ -30,14 +28,3 @@ int board_late_init(void)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
void pad_init_mmc(struct mmc_host *host)
|
||||
{
|
||||
}
|
||||
|
||||
int board_mmc_init(bd_t *bd)
|
||||
{
|
||||
tegra_mmc_init();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -32,10 +32,6 @@
|
||||
#ifdef CONFIG_USB_EHCI_TEGRA
|
||||
#include <usb.h>
|
||||
#endif
|
||||
#ifdef CONFIG_TEGRA_MMC
|
||||
#include <asm/arch-tegra/tegra_mmc.h>
|
||||
#include <asm/arch-tegra/mmc.h>
|
||||
#endif
|
||||
#include <asm/arch-tegra/xusb-padctl.h>
|
||||
#include <power/as3722.h>
|
||||
#include <i2c.h>
|
||||
@@ -54,6 +50,7 @@ U_BOOT_DEVICE(tegra_gpios) = {
|
||||
__weak void pinmux_init(void) {}
|
||||
__weak void pin_mux_usb(void) {}
|
||||
__weak void pin_mux_spi(void) {}
|
||||
__weak void pin_mux_mmc(void) {}
|
||||
__weak void gpio_early_init_uart(void) {}
|
||||
__weak void pin_mux_display(void) {}
|
||||
__weak void start_cpu_fan(void) {}
|
||||
@@ -128,6 +125,10 @@ int board_init(void)
|
||||
pin_mux_spi();
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_TEGRA_MMC
|
||||
pin_mux_mmc();
|
||||
#endif
|
||||
|
||||
/* Init is handled automatically in the driver-model case */
|
||||
#if defined(CONFIG_DM_VIDEO)
|
||||
pin_mux_display();
|
||||
@@ -230,54 +231,6 @@ int board_late_init(void)
|
||||
return 0;
|
||||
}
|
||||
|
||||
#if defined(CONFIG_TEGRA_MMC)
|
||||
__weak void pin_mux_mmc(void)
|
||||
{
|
||||
}
|
||||
|
||||
/* this is a weak define that we are overriding */
|
||||
int board_mmc_init(bd_t *bd)
|
||||
{
|
||||
debug("%s called\n", __func__);
|
||||
|
||||
/* Enable muxes, etc. for SDMMC controllers */
|
||||
pin_mux_mmc();
|
||||
|
||||
debug("%s: init MMC\n", __func__);
|
||||
tegra_mmc_init();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void pad_init_mmc(struct mmc_host *host)
|
||||
{
|
||||
#if defined(CONFIG_TEGRA30)
|
||||
enum periph_id id = host->mmc_id;
|
||||
u32 val;
|
||||
|
||||
debug("%s: sdmmc address = %08x, id = %d\n", __func__,
|
||||
(unsigned int)host->reg, id);
|
||||
|
||||
/* Set the pad drive strength for SDMMC1 or 3 only */
|
||||
if (id != PERIPH_ID_SDMMC1 && id != PERIPH_ID_SDMMC3) {
|
||||
debug("%s: settings are only valid for SDMMC1/SDMMC3!\n",
|
||||
__func__);
|
||||
return;
|
||||
}
|
||||
|
||||
val = readl(&host->reg->sdmemcmppadctl);
|
||||
val &= 0xFFFFFFF0;
|
||||
val |= MEMCOMP_PADCTRL_VREF;
|
||||
writel(val, &host->reg->sdmemcmppadctl);
|
||||
|
||||
val = readl(&host->reg->autocalcfg);
|
||||
val &= 0xFFFF0000;
|
||||
val |= AUTO_CAL_PU_OFFSET | AUTO_CAL_PD_OFFSET | AUTO_CAL_ENABLED;
|
||||
writel(val, &host->reg->autocalcfg);
|
||||
#endif /* T30 */
|
||||
}
|
||||
#endif /* MMC */
|
||||
|
||||
/*
|
||||
* In some SW environments, a memory carve-out exists to house a secure
|
||||
* monitor, a trusted OS, and/or various statically allocated media buffers.
|
||||
|
||||
@@ -206,6 +206,29 @@ int clock_ll_set_source_bits(enum periph_id periph_id, int mux_bits,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int clock_ll_get_source_bits(enum periph_id periph_id, int mux_bits)
|
||||
{
|
||||
u32 *reg = get_periph_source_reg(periph_id);
|
||||
u32 val = readl(reg);
|
||||
|
||||
switch (mux_bits) {
|
||||
case MASK_BITS_31_30:
|
||||
val >>= OUT_CLK_SOURCE_31_30_SHIFT;
|
||||
val &= OUT_CLK_SOURCE_31_30_MASK;
|
||||
return val;
|
||||
case MASK_BITS_31_29:
|
||||
val >>= OUT_CLK_SOURCE_31_29_SHIFT;
|
||||
val &= OUT_CLK_SOURCE_31_29_MASK;
|
||||
return val;
|
||||
case MASK_BITS_31_28:
|
||||
val >>= OUT_CLK_SOURCE_31_28_SHIFT;
|
||||
val &= OUT_CLK_SOURCE_31_28_MASK;
|
||||
return val;
|
||||
default:
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
void clock_ll_set_source(enum periph_id periph_id, unsigned source)
|
||||
{
|
||||
clock_ll_set_source_bits(periph_id, MASK_BITS_31_30, source);
|
||||
@@ -288,9 +311,43 @@ unsigned long clock_get_periph_rate(enum periph_id periph_id,
|
||||
enum clock_id parent)
|
||||
{
|
||||
u32 *reg = get_periph_source_reg(periph_id);
|
||||
unsigned parent_rate = pll_rate[parent];
|
||||
int div = (readl(reg) & OUT_CLK_DIVISOR_MASK) >> OUT_CLK_DIVISOR_SHIFT;
|
||||
|
||||
return get_rate_from_divider(pll_rate[parent],
|
||||
(readl(reg) & OUT_CLK_DIVISOR_MASK) >> OUT_CLK_DIVISOR_SHIFT);
|
||||
switch (periph_id) {
|
||||
case PERIPH_ID_UART1:
|
||||
case PERIPH_ID_UART2:
|
||||
case PERIPH_ID_UART3:
|
||||
case PERIPH_ID_UART4:
|
||||
case PERIPH_ID_UART5:
|
||||
#ifdef CONFIG_TEGRA20
|
||||
/* There's no divider for these clocks in this SoC. */
|
||||
return parent_rate;
|
||||
#else
|
||||
/*
|
||||
* This undoes the +2 in get_rate_from_divider() which I
|
||||
* believe is incorrect. Ideally we would fix
|
||||
* get_rate_from_divider(), but... Removing the +2 from
|
||||
* get_rate_from_divider() would probably require remove the -2
|
||||
* from the tail of clk_get_divider() since I believe that's
|
||||
* only there to invert get_rate_from_divider()'s +2. Observe
|
||||
* how find_best_divider() uses those two functions together.
|
||||
* However, doing so breaks other stuff, such as Seaboard's
|
||||
* display, likely due to clock_set_pllout()'s call to
|
||||
* clk_get_divider(). Attempting to fix that by making
|
||||
* clock_set_pllout() subtract 2 from clk_get_divider()'s
|
||||
* return value doesn't help. In summary this clock driver is
|
||||
* quite broken but I'm afraid I have no idea how to fix it
|
||||
* without completely replacing it.
|
||||
*/
|
||||
div -= 2;
|
||||
break;
|
||||
#endif
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return get_rate_from_divider(parent_rate, div);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -363,6 +420,20 @@ static int adjust_periph_pll(enum periph_id periph_id, int source,
|
||||
return 0;
|
||||
}
|
||||
|
||||
enum clock_id clock_get_periph_parent(enum periph_id periph_id)
|
||||
{
|
||||
int err, mux_bits, divider_bits, type;
|
||||
int source;
|
||||
|
||||
err = get_periph_clock_info(periph_id, &mux_bits, ÷r_bits, &type);
|
||||
if (err)
|
||||
return CLOCK_ID_NONE;
|
||||
|
||||
source = clock_ll_get_source_bits(periph_id, mux_bits);
|
||||
|
||||
return get_periph_clock_id(periph_id, source);
|
||||
}
|
||||
|
||||
unsigned clock_adjust_periph_pll_div(enum periph_id periph_id,
|
||||
enum clock_id parent, unsigned rate, int *extra_div)
|
||||
{
|
||||
@@ -612,6 +683,8 @@ int clock_verify(void)
|
||||
|
||||
void clock_init(void)
|
||||
{
|
||||
int i;
|
||||
|
||||
pll_rate[CLOCK_ID_CGENERAL] = clock_get_rate(CLOCK_ID_CGENERAL);
|
||||
pll_rate[CLOCK_ID_MEMORY] = clock_get_rate(CLOCK_ID_MEMORY);
|
||||
pll_rate[CLOCK_ID_PERIPH] = clock_get_rate(CLOCK_ID_PERIPH);
|
||||
@@ -630,6 +703,19 @@ void clock_init(void)
|
||||
debug("PLLU = %d\n", pll_rate[CLOCK_ID_USB]);
|
||||
debug("PLLD = %d\n", pll_rate[CLOCK_ID_DISPLAY]);
|
||||
debug("PLLX = %d\n", pll_rate[CLOCK_ID_XCPU]);
|
||||
|
||||
for (i = 0; periph_clk_init_table[i].periph_id != -1; i++) {
|
||||
enum periph_id periph_id;
|
||||
enum clock_id parent;
|
||||
int source, mux_bits, divider_bits;
|
||||
|
||||
periph_id = periph_clk_init_table[i].periph_id;
|
||||
parent = periph_clk_init_table[i].parent_clock_id;
|
||||
|
||||
source = get_periph_clock_source(periph_id, parent, &mux_bits,
|
||||
÷r_bits);
|
||||
clock_ll_set_source_bits(periph_id, mux_bits, source);
|
||||
}
|
||||
}
|
||||
|
||||
static void set_avp_clock_source(u32 src)
|
||||
|
||||
@@ -496,6 +496,51 @@ u32 *get_periph_source_reg(enum periph_id periph_id)
|
||||
return &clkrst->crc_clk_src[internal_id];
|
||||
}
|
||||
|
||||
int get_periph_clock_info(enum periph_id periph_id, int *mux_bits,
|
||||
int *divider_bits, int *type)
|
||||
{
|
||||
enum periphc_internal_id internal_id;
|
||||
|
||||
if (!clock_periph_id_isvalid(periph_id))
|
||||
return -1;
|
||||
|
||||
internal_id = periph_id_to_internal_id[periph_id];
|
||||
if (!periphc_internal_id_isvalid(internal_id))
|
||||
return -1;
|
||||
|
||||
*type = clock_periph_type[internal_id];
|
||||
if (!clock_type_id_isvalid(*type))
|
||||
return -1;
|
||||
|
||||
*mux_bits = clock_source[*type][CLOCK_MAX_MUX];
|
||||
|
||||
if (*type == CLOCK_TYPE_PCMT16)
|
||||
*divider_bits = 16;
|
||||
else
|
||||
*divider_bits = 8;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
enum clock_id get_periph_clock_id(enum periph_id periph_id, int source)
|
||||
{
|
||||
enum periphc_internal_id internal_id;
|
||||
int type;
|
||||
|
||||
if (!clock_periph_id_isvalid(periph_id))
|
||||
return CLOCK_ID_NONE;
|
||||
|
||||
internal_id = periph_id_to_internal_id[periph_id];
|
||||
if (!periphc_internal_id_isvalid(internal_id))
|
||||
return CLOCK_ID_NONE;
|
||||
|
||||
type = clock_periph_type[internal_id];
|
||||
if (!clock_type_id_isvalid(type))
|
||||
return CLOCK_ID_NONE;
|
||||
|
||||
return clock_source[type][source];
|
||||
}
|
||||
|
||||
/**
|
||||
* Given a peripheral ID and the required source clock, this returns which
|
||||
* value should be programmed into the source mux for that peripheral.
|
||||
@@ -512,23 +557,10 @@ int get_periph_clock_source(enum periph_id periph_id,
|
||||
enum clock_id parent, int *mux_bits, int *divider_bits)
|
||||
{
|
||||
enum clock_type_id type;
|
||||
enum periphc_internal_id internal_id;
|
||||
int mux;
|
||||
int mux, err;
|
||||
|
||||
assert(clock_periph_id_isvalid(periph_id));
|
||||
|
||||
internal_id = periph_id_to_internal_id[periph_id];
|
||||
assert(periphc_internal_id_isvalid(internal_id));
|
||||
|
||||
type = clock_periph_type[internal_id];
|
||||
assert(clock_type_id_isvalid(type));
|
||||
|
||||
*mux_bits = clock_source[type][CLOCK_MAX_MUX];
|
||||
|
||||
if (type == CLOCK_TYPE_PCMT16)
|
||||
*divider_bits = 16;
|
||||
else
|
||||
*divider_bits = 8;
|
||||
err = get_periph_clock_info(periph_id, mux_bits, divider_bits, &type);
|
||||
assert(!err);
|
||||
|
||||
for (mux = 0; mux < CLOCK_MAX_MUX; mux++)
|
||||
if (clock_source[type][mux] == parent)
|
||||
@@ -699,3 +731,26 @@ void arch_timer_init(void)
|
||||
writel(val, &sysctr->cntcr);
|
||||
debug("%s: TSC CNTCR = 0x%08X\n", __func__, val);
|
||||
}
|
||||
|
||||
struct periph_clk_init periph_clk_init_table[] = {
|
||||
{ PERIPH_ID_SBC1, CLOCK_ID_PERIPH },
|
||||
{ PERIPH_ID_SBC2, CLOCK_ID_PERIPH },
|
||||
{ PERIPH_ID_SBC3, CLOCK_ID_PERIPH },
|
||||
{ PERIPH_ID_SBC4, CLOCK_ID_PERIPH },
|
||||
{ PERIPH_ID_SBC5, CLOCK_ID_PERIPH },
|
||||
{ PERIPH_ID_SBC6, CLOCK_ID_PERIPH },
|
||||
{ PERIPH_ID_HOST1X, CLOCK_ID_PERIPH },
|
||||
{ PERIPH_ID_DISP1, CLOCK_ID_CGENERAL },
|
||||
{ PERIPH_ID_NDFLASH, CLOCK_ID_PERIPH },
|
||||
{ PERIPH_ID_SDMMC1, CLOCK_ID_PERIPH },
|
||||
{ PERIPH_ID_SDMMC2, CLOCK_ID_PERIPH },
|
||||
{ PERIPH_ID_SDMMC3, CLOCK_ID_PERIPH },
|
||||
{ PERIPH_ID_SDMMC4, CLOCK_ID_PERIPH },
|
||||
{ PERIPH_ID_PWM, CLOCK_ID_SFROM32KHZ },
|
||||
{ PERIPH_ID_I2C1, CLOCK_ID_PERIPH },
|
||||
{ PERIPH_ID_I2C2, CLOCK_ID_PERIPH },
|
||||
{ PERIPH_ID_I2C3, CLOCK_ID_PERIPH },
|
||||
{ PERIPH_ID_I2C4, CLOCK_ID_PERIPH },
|
||||
{ PERIPH_ID_I2C5, CLOCK_ID_PERIPH },
|
||||
{ -1, },
|
||||
};
|
||||
|
||||
@@ -642,6 +642,51 @@ u32 *get_periph_source_reg(enum periph_id periph_id)
|
||||
}
|
||||
}
|
||||
|
||||
int get_periph_clock_info(enum periph_id periph_id, int *mux_bits,
|
||||
int *divider_bits, int *type)
|
||||
{
|
||||
enum periphc_internal_id internal_id;
|
||||
|
||||
if (!clock_periph_id_isvalid(periph_id))
|
||||
return -1;
|
||||
|
||||
internal_id = periph_id_to_internal_id[periph_id];
|
||||
if (!periphc_internal_id_isvalid(internal_id))
|
||||
return -1;
|
||||
|
||||
*type = clock_periph_type[internal_id];
|
||||
if (!clock_type_id_isvalid(*type))
|
||||
return -1;
|
||||
|
||||
*mux_bits = clock_source[*type][CLOCK_MAX_MUX];
|
||||
|
||||
if (*type == CLOCK_TYPE_PC2CC3M_T16)
|
||||
*divider_bits = 16;
|
||||
else
|
||||
*divider_bits = 8;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
enum clock_id get_periph_clock_id(enum periph_id periph_id, int source)
|
||||
{
|
||||
enum periphc_internal_id internal_id;
|
||||
int type;
|
||||
|
||||
if (!clock_periph_id_isvalid(periph_id))
|
||||
return CLOCK_ID_NONE;
|
||||
|
||||
internal_id = periph_id_to_internal_id[periph_id];
|
||||
if (!periphc_internal_id_isvalid(internal_id))
|
||||
return CLOCK_ID_NONE;
|
||||
|
||||
type = clock_periph_type[internal_id];
|
||||
if (!clock_type_id_isvalid(type))
|
||||
return CLOCK_ID_NONE;
|
||||
|
||||
return clock_source[type][source];
|
||||
}
|
||||
|
||||
/**
|
||||
* Given a peripheral ID and the required source clock, this returns which
|
||||
* value should be programmed into the source mux for that peripheral.
|
||||
@@ -658,23 +703,10 @@ int get_periph_clock_source(enum periph_id periph_id,
|
||||
enum clock_id parent, int *mux_bits, int *divider_bits)
|
||||
{
|
||||
enum clock_type_id type;
|
||||
enum periphc_internal_id internal_id;
|
||||
int mux;
|
||||
int mux, err;
|
||||
|
||||
assert(clock_periph_id_isvalid(periph_id));
|
||||
|
||||
internal_id = periph_id_to_internal_id[periph_id];
|
||||
assert(periphc_internal_id_isvalid(internal_id));
|
||||
|
||||
type = clock_periph_type[internal_id];
|
||||
assert(clock_type_id_isvalid(type));
|
||||
|
||||
*mux_bits = clock_source[type][CLOCK_MAX_MUX];
|
||||
|
||||
if (type == CLOCK_TYPE_PC2CC3M_T16)
|
||||
*divider_bits = 16;
|
||||
else
|
||||
*divider_bits = 8;
|
||||
err = get_periph_clock_info(periph_id, mux_bits, divider_bits, &type);
|
||||
assert(!err);
|
||||
|
||||
for (mux = 0; mux < CLOCK_MAX_MUX; mux++)
|
||||
if (clock_source[type][mux] == parent)
|
||||
@@ -1107,3 +1139,26 @@ struct clk_pll_simple *clock_get_simple_pll(enum clock_id clkid)
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
struct periph_clk_init periph_clk_init_table[] = {
|
||||
{ PERIPH_ID_SBC1, CLOCK_ID_PERIPH },
|
||||
{ PERIPH_ID_SBC2, CLOCK_ID_PERIPH },
|
||||
{ PERIPH_ID_SBC3, CLOCK_ID_PERIPH },
|
||||
{ PERIPH_ID_SBC4, CLOCK_ID_PERIPH },
|
||||
{ PERIPH_ID_SBC5, CLOCK_ID_PERIPH },
|
||||
{ PERIPH_ID_SBC6, CLOCK_ID_PERIPH },
|
||||
{ PERIPH_ID_HOST1X, CLOCK_ID_PERIPH },
|
||||
{ PERIPH_ID_DISP1, CLOCK_ID_CGENERAL },
|
||||
{ PERIPH_ID_SDMMC1, CLOCK_ID_PERIPH },
|
||||
{ PERIPH_ID_SDMMC2, CLOCK_ID_PERIPH },
|
||||
{ PERIPH_ID_SDMMC3, CLOCK_ID_PERIPH },
|
||||
{ PERIPH_ID_SDMMC4, CLOCK_ID_PERIPH },
|
||||
{ PERIPH_ID_PWM, CLOCK_ID_SFROM32KHZ },
|
||||
{ PERIPH_ID_I2C1, CLOCK_ID_PERIPH },
|
||||
{ PERIPH_ID_I2C2, CLOCK_ID_PERIPH },
|
||||
{ PERIPH_ID_I2C3, CLOCK_ID_PERIPH },
|
||||
{ PERIPH_ID_I2C4, CLOCK_ID_PERIPH },
|
||||
{ PERIPH_ID_I2C5, CLOCK_ID_PERIPH },
|
||||
{ PERIPH_ID_I2C6, CLOCK_ID_PERIPH },
|
||||
{ -1, },
|
||||
};
|
||||
|
||||
@@ -3,5 +3,6 @@
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
|
||||
obj-y += ../board186.o
|
||||
obj-y += cache.o
|
||||
obj-y += nvtboot_ll.o
|
||||
obj-y += nvtboot_mem.o
|
||||
|
||||
23
arch/arm/mach-tegra/tegra186/cache.c
Normal file
23
arch/arm/mach-tegra/tegra186/cache.c
Normal file
@@ -0,0 +1,23 @@
|
||||
/*
|
||||
* Copyright (c) 2016, NVIDIA CORPORATION.
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-2.0
|
||||
*/
|
||||
|
||||
#include <common.h>
|
||||
#include <asm/system.h>
|
||||
|
||||
#define SMC_SIP_INVOKE_MCE 0x82FFFF00
|
||||
#define MCE_SMC_ROC_FLUSH_CACHE 11
|
||||
|
||||
int __asm_flush_l3_cache(void)
|
||||
{
|
||||
struct pt_regs regs = {0};
|
||||
|
||||
isb();
|
||||
|
||||
regs.regs[0] = SMC_SIP_INVOKE_MCE | MCE_SMC_ROC_FLUSH_CACHE;
|
||||
smc_call(®s);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -413,6 +413,57 @@ u32 *get_periph_source_reg(enum periph_id periph_id)
|
||||
return &clkrst->crc_clk_src[internal_id];
|
||||
}
|
||||
|
||||
int get_periph_clock_info(enum periph_id periph_id, int *mux_bits,
|
||||
int *divider_bits, int *type)
|
||||
{
|
||||
enum periphc_internal_id internal_id;
|
||||
|
||||
if (!clock_periph_id_isvalid(periph_id))
|
||||
return -1;
|
||||
|
||||
internal_id = periph_id_to_internal_id[periph_id];
|
||||
if (!periphc_internal_id_isvalid(internal_id))
|
||||
return -1;
|
||||
|
||||
*type = clock_periph_type[internal_id];
|
||||
if (!clock_type_id_isvalid(*type))
|
||||
return -1;
|
||||
|
||||
/*
|
||||
* Special cases here for the clock with a 4-bit source mux and I2C
|
||||
* with its 16-bit divisor
|
||||
*/
|
||||
if (*type == CLOCK_TYPE_PCXTS)
|
||||
*mux_bits = MASK_BITS_31_28;
|
||||
else
|
||||
*mux_bits = MASK_BITS_31_30;
|
||||
if (*type == CLOCK_TYPE_PCMT16)
|
||||
*divider_bits = 16;
|
||||
else
|
||||
*divider_bits = 8;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
enum clock_id get_periph_clock_id(enum periph_id periph_id, int source)
|
||||
{
|
||||
enum periphc_internal_id internal_id;
|
||||
int type;
|
||||
|
||||
if (!clock_periph_id_isvalid(periph_id))
|
||||
return CLOCK_ID_NONE;
|
||||
|
||||
internal_id = periph_id_to_internal_id[periph_id];
|
||||
if (!periphc_internal_id_isvalid(internal_id))
|
||||
return CLOCK_ID_NONE;
|
||||
|
||||
type = clock_periph_type[internal_id];
|
||||
if (!clock_type_id_isvalid(type))
|
||||
return CLOCK_ID_NONE;
|
||||
|
||||
return clock_source[type][source];
|
||||
}
|
||||
|
||||
/**
|
||||
* Given a peripheral ID and the required source clock, this returns which
|
||||
* value should be programmed into the source mux for that peripheral.
|
||||
@@ -429,29 +480,10 @@ int get_periph_clock_source(enum periph_id periph_id,
|
||||
enum clock_id parent, int *mux_bits, int *divider_bits)
|
||||
{
|
||||
enum clock_type_id type;
|
||||
enum periphc_internal_id internal_id;
|
||||
int mux;
|
||||
int mux, err;
|
||||
|
||||
assert(clock_periph_id_isvalid(periph_id));
|
||||
|
||||
internal_id = periph_id_to_internal_id[periph_id];
|
||||
assert(periphc_internal_id_isvalid(internal_id));
|
||||
|
||||
type = clock_periph_type[internal_id];
|
||||
assert(clock_type_id_isvalid(type));
|
||||
|
||||
/*
|
||||
* Special cases here for the clock with a 4-bit source mux and I2C
|
||||
* with its 16-bit divisor
|
||||
*/
|
||||
if (type == CLOCK_TYPE_PCXTS)
|
||||
*mux_bits = MASK_BITS_31_28;
|
||||
else
|
||||
*mux_bits = MASK_BITS_31_30;
|
||||
if (type == CLOCK_TYPE_PCMT16)
|
||||
*divider_bits = 16;
|
||||
else
|
||||
*divider_bits = 8;
|
||||
err = get_periph_clock_info(periph_id, mux_bits, divider_bits, &type);
|
||||
assert(!err);
|
||||
|
||||
for (mux = 0; mux < CLOCK_MAX_MUX; mux++)
|
||||
if (clock_source[type][mux] == parent)
|
||||
@@ -717,3 +749,24 @@ int tegra_plle_enable(void)
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
struct periph_clk_init periph_clk_init_table[] = {
|
||||
{ PERIPH_ID_SPI1, CLOCK_ID_PERIPH },
|
||||
{ PERIPH_ID_SBC1, CLOCK_ID_PERIPH },
|
||||
{ PERIPH_ID_SBC2, CLOCK_ID_PERIPH },
|
||||
{ PERIPH_ID_SBC3, CLOCK_ID_PERIPH },
|
||||
{ PERIPH_ID_SBC4, CLOCK_ID_PERIPH },
|
||||
{ PERIPH_ID_HOST1X, CLOCK_ID_PERIPH },
|
||||
{ PERIPH_ID_DISP1, CLOCK_ID_CGENERAL },
|
||||
{ PERIPH_ID_NDFLASH, CLOCK_ID_PERIPH },
|
||||
{ PERIPH_ID_SDMMC1, CLOCK_ID_PERIPH },
|
||||
{ PERIPH_ID_SDMMC2, CLOCK_ID_PERIPH },
|
||||
{ PERIPH_ID_SDMMC3, CLOCK_ID_PERIPH },
|
||||
{ PERIPH_ID_SDMMC4, CLOCK_ID_PERIPH },
|
||||
{ PERIPH_ID_PWM, CLOCK_ID_SFROM32KHZ },
|
||||
{ PERIPH_ID_DVC_I2C, CLOCK_ID_PERIPH },
|
||||
{ PERIPH_ID_I2C1, CLOCK_ID_PERIPH },
|
||||
{ PERIPH_ID_I2C2, CLOCK_ID_PERIPH },
|
||||
{ PERIPH_ID_I2C3, CLOCK_ID_PERIPH },
|
||||
{ -1, },
|
||||
};
|
||||
|
||||
@@ -732,6 +732,51 @@ u32 *get_periph_source_reg(enum periph_id periph_id)
|
||||
return &clkrst->crc_clk_src_y[internal_id];
|
||||
}
|
||||
|
||||
int get_periph_clock_info(enum periph_id periph_id, int *mux_bits,
|
||||
int *divider_bits, int *type)
|
||||
{
|
||||
enum periphc_internal_id internal_id;
|
||||
|
||||
if (!clock_periph_id_isvalid(periph_id))
|
||||
return -1;
|
||||
|
||||
internal_id = periph_id_to_internal_id[periph_id];
|
||||
if (!periphc_internal_id_isvalid(internal_id))
|
||||
return -1;
|
||||
|
||||
*type = clock_periph_type[internal_id];
|
||||
if (!clock_type_id_isvalid(*type))
|
||||
return -1;
|
||||
|
||||
*mux_bits = clock_source[*type][CLOCK_MAX_MUX];
|
||||
|
||||
if (*type == CLOCK_TYPE_PC2CC3M_T16)
|
||||
*divider_bits = 16;
|
||||
else
|
||||
*divider_bits = 8;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
enum clock_id get_periph_clock_id(enum periph_id periph_id, int source)
|
||||
{
|
||||
enum periphc_internal_id internal_id;
|
||||
int type;
|
||||
|
||||
if (!clock_periph_id_isvalid(periph_id))
|
||||
return CLOCK_ID_NONE;
|
||||
|
||||
internal_id = periph_id_to_internal_id[periph_id];
|
||||
if (!periphc_internal_id_isvalid(internal_id))
|
||||
return CLOCK_ID_NONE;
|
||||
|
||||
type = clock_periph_type[internal_id];
|
||||
if (!clock_type_id_isvalid(type))
|
||||
return CLOCK_ID_NONE;
|
||||
|
||||
return clock_source[type][source];
|
||||
}
|
||||
|
||||
/**
|
||||
* Given a peripheral ID and the required source clock, this returns which
|
||||
* value should be programmed into the source mux for that peripheral.
|
||||
@@ -748,23 +793,10 @@ int get_periph_clock_source(enum periph_id periph_id,
|
||||
enum clock_id parent, int *mux_bits, int *divider_bits)
|
||||
{
|
||||
enum clock_type_id type;
|
||||
enum periphc_internal_id internal_id;
|
||||
int mux;
|
||||
int mux, err;
|
||||
|
||||
assert(clock_periph_id_isvalid(periph_id));
|
||||
|
||||
internal_id = INTERNAL_ID(periph_id_to_internal_id[periph_id]);
|
||||
assert(periphc_internal_id_isvalid(internal_id));
|
||||
|
||||
type = clock_periph_type[internal_id];
|
||||
assert(clock_type_id_isvalid(type));
|
||||
|
||||
*mux_bits = clock_source[type][CLOCK_MAX_MUX];
|
||||
|
||||
if (type == CLOCK_TYPE_PC2CC3M_T16)
|
||||
*divider_bits = 16;
|
||||
else
|
||||
*divider_bits = 8;
|
||||
err = get_periph_clock_info(periph_id, mux_bits, divider_bits, &type);
|
||||
assert(!err);
|
||||
|
||||
for (mux = 0; mux < CLOCK_MAX_MUX; mux++)
|
||||
if (clock_source[type][mux] == parent)
|
||||
@@ -1225,3 +1257,26 @@ int tegra_plle_enable(void)
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
struct periph_clk_init periph_clk_init_table[] = {
|
||||
{ PERIPH_ID_SBC1, CLOCK_ID_PERIPH },
|
||||
{ PERIPH_ID_SBC2, CLOCK_ID_PERIPH },
|
||||
{ PERIPH_ID_SBC3, CLOCK_ID_PERIPH },
|
||||
{ PERIPH_ID_SBC4, CLOCK_ID_PERIPH },
|
||||
{ PERIPH_ID_SBC5, CLOCK_ID_PERIPH },
|
||||
{ PERIPH_ID_SBC6, CLOCK_ID_PERIPH },
|
||||
{ PERIPH_ID_HOST1X, CLOCK_ID_PERIPH },
|
||||
{ PERIPH_ID_DISP1, CLOCK_ID_CGENERAL },
|
||||
{ PERIPH_ID_SDMMC1, CLOCK_ID_PERIPH },
|
||||
{ PERIPH_ID_SDMMC2, CLOCK_ID_PERIPH },
|
||||
{ PERIPH_ID_SDMMC3, CLOCK_ID_PERIPH },
|
||||
{ PERIPH_ID_SDMMC4, CLOCK_ID_PERIPH },
|
||||
{ PERIPH_ID_PWM, CLOCK_ID_SFROM32KHZ },
|
||||
{ PERIPH_ID_I2C1, CLOCK_ID_PERIPH },
|
||||
{ PERIPH_ID_I2C2, CLOCK_ID_PERIPH },
|
||||
{ PERIPH_ID_I2C3, CLOCK_ID_PERIPH },
|
||||
{ PERIPH_ID_I2C4, CLOCK_ID_PERIPH },
|
||||
{ PERIPH_ID_I2C5, CLOCK_ID_PERIPH },
|
||||
{ PERIPH_ID_I2C6, CLOCK_ID_PERIPH },
|
||||
{ -1, },
|
||||
};
|
||||
|
||||
@@ -476,6 +476,51 @@ u32 *get_periph_source_reg(enum periph_id periph_id)
|
||||
return &clkrst->crc_clk_src[internal_id];
|
||||
}
|
||||
|
||||
int get_periph_clock_info(enum periph_id periph_id, int *mux_bits,
|
||||
int *divider_bits, int *type)
|
||||
{
|
||||
enum periphc_internal_id internal_id;
|
||||
|
||||
if (!clock_periph_id_isvalid(periph_id))
|
||||
return -1;
|
||||
|
||||
internal_id = periph_id_to_internal_id[periph_id];
|
||||
if (!periphc_internal_id_isvalid(internal_id))
|
||||
return -1;
|
||||
|
||||
*type = clock_periph_type[internal_id];
|
||||
if (!clock_type_id_isvalid(*type))
|
||||
return -1;
|
||||
|
||||
*mux_bits = clock_source[*type][CLOCK_MAX_MUX];
|
||||
|
||||
if (*type == CLOCK_TYPE_PCMT16)
|
||||
*divider_bits = 16;
|
||||
else
|
||||
*divider_bits = 8;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
enum clock_id get_periph_clock_id(enum periph_id periph_id, int source)
|
||||
{
|
||||
enum periphc_internal_id internal_id;
|
||||
int type;
|
||||
|
||||
if (!clock_periph_id_isvalid(periph_id))
|
||||
return CLOCK_ID_NONE;
|
||||
|
||||
internal_id = periph_id_to_internal_id[periph_id];
|
||||
if (!periphc_internal_id_isvalid(internal_id))
|
||||
return CLOCK_ID_NONE;
|
||||
|
||||
type = clock_periph_type[internal_id];
|
||||
if (!clock_type_id_isvalid(type))
|
||||
return CLOCK_ID_NONE;
|
||||
|
||||
return clock_source[type][source];
|
||||
}
|
||||
|
||||
/**
|
||||
* Given a peripheral ID and the required source clock, this returns which
|
||||
* value should be programmed into the source mux for that peripheral.
|
||||
@@ -492,23 +537,10 @@ int get_periph_clock_source(enum periph_id periph_id,
|
||||
enum clock_id parent, int *mux_bits, int *divider_bits)
|
||||
{
|
||||
enum clock_type_id type;
|
||||
enum periphc_internal_id internal_id;
|
||||
int mux;
|
||||
int mux, err;
|
||||
|
||||
assert(clock_periph_id_isvalid(periph_id));
|
||||
|
||||
internal_id = periph_id_to_internal_id[periph_id];
|
||||
assert(periphc_internal_id_isvalid(internal_id));
|
||||
|
||||
type = clock_periph_type[internal_id];
|
||||
assert(clock_type_id_isvalid(type));
|
||||
|
||||
*mux_bits = clock_source[type][CLOCK_MAX_MUX];
|
||||
|
||||
if (type == CLOCK_TYPE_PCMT16)
|
||||
*divider_bits = 16;
|
||||
else
|
||||
*divider_bits = 8;
|
||||
err = get_periph_clock_info(periph_id, mux_bits, divider_bits, &type);
|
||||
assert(!err);
|
||||
|
||||
for (mux = 0; mux < CLOCK_MAX_MUX; mux++)
|
||||
if (clock_source[type][mux] == parent)
|
||||
@@ -763,3 +795,26 @@ int tegra_plle_enable(void)
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
struct periph_clk_init periph_clk_init_table[] = {
|
||||
{ PERIPH_ID_SBC1, CLOCK_ID_PERIPH },
|
||||
{ PERIPH_ID_SBC2, CLOCK_ID_PERIPH },
|
||||
{ PERIPH_ID_SBC3, CLOCK_ID_PERIPH },
|
||||
{ PERIPH_ID_SBC4, CLOCK_ID_PERIPH },
|
||||
{ PERIPH_ID_SBC5, CLOCK_ID_PERIPH },
|
||||
{ PERIPH_ID_SBC6, CLOCK_ID_PERIPH },
|
||||
{ PERIPH_ID_HOST1X, CLOCK_ID_PERIPH },
|
||||
{ PERIPH_ID_DISP1, CLOCK_ID_CGENERAL },
|
||||
{ PERIPH_ID_NDFLASH, CLOCK_ID_PERIPH },
|
||||
{ PERIPH_ID_SDMMC1, CLOCK_ID_PERIPH },
|
||||
{ PERIPH_ID_SDMMC2, CLOCK_ID_PERIPH },
|
||||
{ PERIPH_ID_SDMMC3, CLOCK_ID_PERIPH },
|
||||
{ PERIPH_ID_SDMMC4, CLOCK_ID_PERIPH },
|
||||
{ PERIPH_ID_PWM, CLOCK_ID_SFROM32KHZ },
|
||||
{ PERIPH_ID_DVC_I2C, CLOCK_ID_PERIPH },
|
||||
{ PERIPH_ID_I2C1, CLOCK_ID_PERIPH },
|
||||
{ PERIPH_ID_I2C2, CLOCK_ID_PERIPH },
|
||||
{ PERIPH_ID_I2C3, CLOCK_ID_PERIPH },
|
||||
{ PERIPH_ID_I2C4, CLOCK_ID_PERIPH },
|
||||
{ -1, },
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user