ARM: tegra: device tree changes

A wide variety of device tree additions are made across many Tegra
 boards:
 
 * WiFi is supported on Seaboard, Ventana, and Cardhu.
 * An I2C mux is added for Ventana, and Tamonten.
 * SPI flash is added to Cardhu, and TrimSlice.
 * Temperature sensors are added to Harmony, Tamonten, and Ventana.
 * host1x (graphics/display controller) is added to the SoC include files.
 * HDMI displays are enabled on Harmony, TrimSlice, Tamonten, Plutux, Tec,
   and Whistler.
 
 This pull request is based on tegra-for-3.8-soc.
 -----BEGIN PGP SIGNATURE-----
 Version: GnuPG v1.4.11 (GNU/Linux)
 
 iQIcBAABAgAGBQJQppFoAAoJEMzrak5tbycx1WsQALzqZBCebkEIo0CfuYlVtZrX
 co2HBLsTis8KOI1lB5hZZdLvOD2sevwkw+YDtoG1k2ymZvR/Lpl3zdYdPCinA7gb
 Qzs+OlwnAla7J5BkgV0v69lZHBYd8jvxsFt9MZo1XkHjw2IRPyrzLhdmBHGLVj3J
 Tk7kk4OH64sDhDb+vZJXCtBJV0fvn10WNSskUHoQYZveGOCFGZXogrAht25tcoQO
 TM89tasMdRq3IhOxuzHHo/7AegyuTZdDzV4blNr1xOMzyz1b3P3sBh2ZiK+aBztX
 CCfpJ2ZUlRqTKSOU4qlM48dWffr/ZyP1u0VVi9Bu4Df/qBpS37NjagiVxMhiEasz
 0f3SZTAkZGh7yxi/BTmqu6vvQ0FWYgtOJPezK19RMXistdQkA/uiQDKqeBMTLTeA
 UXCnJdC05uBWhymy8DhJyryPQCJ1k3PJ+4pSmzemWIaAoQqpaH/q5yp4IAccr8wO
 pxZPtddD030iVdT5oYqBoAhn2W/mKtG1fShhp7wpj/qRYecUQICocTavuFG3DK0N
 k1OJ9rTxBZfnyeCBF/wdS/nNuI9xDk2WULVIya2cNu8I/te6QKp1fd4Jr3aPnZ/9
 4hiw5+L2dw2z7447EwlryC4sHttjVYEDHqsedR39YNPIn55D3mfsNX2iCczk1ZDU
 +OoRMiATrjILb1sOjJAs
 =ytxh
 -----END PGP SIGNATURE-----

Merge tag 'tegra-for-3.8-dt' of git://git.kernel.org/pub/scm/linux/kernel/git/swarren/linux-tegra into next/dt

From Stephen Warren:
ARM: tegra: device tree changes

A wide variety of device tree additions are made across many Tegra
boards:

* WiFi is supported on Seaboard, Ventana, and Cardhu.
* An I2C mux is added for Ventana, and Tamonten.
* SPI flash is added to Cardhu, and TrimSlice.
* Temperature sensors are added to Harmony, Tamonten, and Ventana.
* host1x (graphics/display controller) is added to the SoC include files.
* HDMI displays are enabled on Harmony, TrimSlice, Tamonten, Plutux, Tec,
  and Whistler.

This pull request is based on tegra-for-3.8-soc.

* tag 'tegra-for-3.8-dt' of git://git.kernel.org/pub/scm/linux/kernel/git/swarren/linux-tegra: (47 commits)
  ARM: tegra: whistler: enable HDMI port
  ARM: tegra: tec: Enable HDMI output
  ARM: tegra: plutux: Enable HDMI output
  ARM: tegra: tamonten: Add host1x support
  ARM: tegra: trimslice: enable HDMI port
  ARM: tegra: harmony: enable HDMI port
  ARM: tegra: Add Tegra30 host1x support
  ARM: tegra: Add Tegra20 host1x support
  ARM: tegra: trimslice: enable SPI flash
  ARM: tegra: dts: add sflash controller dt entry
  ARM: tegra: ventana: Add NCT1008 temperature sensor
  ARM: tegra: tamonten: Add NCT1008 temperature sensor
  ARM: tegra: harmony: Add ADT7641 temperature sensor
  ARM: tegra: tec: Remove redundant DT properties
  ARM: tegra: tamonten: Add DDC/PTA pinmux
  ARM: tegra: dts: cardhu: enable SLINK4
  ARM: tegra: dts: add slink controller dt entry
  ARM: dt: tegra: ventana: define pinmux for ddc
  ARM: dt: t30 cardhu: set pinmux and power for wlan
  ARM: dt: t20 ventana: set pinmux and power for wlan
  ...
This commit is contained in:
Olof Johansson 2012-11-21 00:29:21 -08:00
commit 90919bf214
62 changed files with 1447 additions and 524 deletions

View file

@ -51,4 +51,5 @@ ti Texas Instruments
via VIA Technologies, Inc. via VIA Technologies, Inc.
wlf Wolfson Microelectronics wlf Wolfson Microelectronics
wm Wondermedia Technologies, Inc. wm Wondermedia Technologies, Inc.
winbond Winbond Electronics corp.
xlnx Xilinx xlnx Xilinx

View file

@ -10,6 +10,18 @@
reg = <0x00000000 0x40000000>; reg = <0x00000000 0x40000000>;
}; };
host1x {
hdmi {
status = "okay";
vdd-supply = <&hdmi_vdd_reg>;
pll-supply = <&hdmi_pll_reg>;
nvidia,ddc-i2c-bus = <&hdmi_ddc>;
nvidia,hpd-gpio = <&gpio 111 0>; /* PN7 */
};
};
pinmux { pinmux {
pinctrl-names = "default"; pinctrl-names = "default";
pinctrl-0 = <&state_default>; pinctrl-0 = <&state_default>;
@ -262,9 +274,9 @@
}; };
}; };
i2c@7000c400 { hdmi_ddc: i2c@7000c400 {
status = "okay"; status = "okay";
clock-frequency = <400000>; clock-frequency = <100000>;
}; };
i2c@7000c500 { i2c@7000c500 {
@ -297,131 +309,98 @@
vinldo9-supply = <&sm2_reg>; vinldo9-supply = <&sm2_reg>;
regulators { regulators {
#address-cells = <1>; sys_reg: sys {
#size-cells = <0>;
sys_reg: regulator@0 {
reg = <0>;
regulator-compatible = "sys";
regulator-name = "vdd_sys"; regulator-name = "vdd_sys";
regulator-always-on; regulator-always-on;
}; };
regulator@1 { sm0 {
reg = <1>;
regulator-compatible = "sm0";
regulator-name = "vdd_sm0,vdd_core"; regulator-name = "vdd_sm0,vdd_core";
regulator-min-microvolt = <1200000>; regulator-min-microvolt = <1200000>;
regulator-max-microvolt = <1200000>; regulator-max-microvolt = <1200000>;
regulator-always-on; regulator-always-on;
}; };
regulator@2 { sm1 {
reg = <2>;
regulator-compatible = "sm1";
regulator-name = "vdd_sm1,vdd_cpu"; regulator-name = "vdd_sm1,vdd_cpu";
regulator-min-microvolt = <1000000>; regulator-min-microvolt = <1000000>;
regulator-max-microvolt = <1000000>; regulator-max-microvolt = <1000000>;
regulator-always-on; regulator-always-on;
}; };
sm2_reg: regulator@3 { sm2_reg: sm2 {
reg = <3>;
regulator-compatible = "sm2";
regulator-name = "vdd_sm2,vin_ldo*"; regulator-name = "vdd_sm2,vin_ldo*";
regulator-min-microvolt = <3700000>; regulator-min-microvolt = <3700000>;
regulator-max-microvolt = <3700000>; regulator-max-microvolt = <3700000>;
regulator-always-on; regulator-always-on;
}; };
regulator@4 { ldo0 {
reg = <4>;
regulator-compatible = "ldo0";
regulator-name = "vdd_ldo0,vddio_pex_clk"; regulator-name = "vdd_ldo0,vddio_pex_clk";
regulator-min-microvolt = <3300000>; regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>; regulator-max-microvolt = <3300000>;
}; };
regulator@5 { ldo1 {
reg = <5>;
regulator-compatible = "ldo1";
regulator-name = "vdd_ldo1,avdd_pll*"; regulator-name = "vdd_ldo1,avdd_pll*";
regulator-min-microvolt = <1100000>; regulator-min-microvolt = <1100000>;
regulator-max-microvolt = <1100000>; regulator-max-microvolt = <1100000>;
regulator-always-on; regulator-always-on;
}; };
regulator@6 { ldo2 {
reg = <6>;
regulator-compatible = "ldo2";
regulator-name = "vdd_ldo2,vdd_rtc"; regulator-name = "vdd_ldo2,vdd_rtc";
regulator-min-microvolt = <1200000>; regulator-min-microvolt = <1200000>;
regulator-max-microvolt = <1200000>; regulator-max-microvolt = <1200000>;
}; };
regulator@7 { ldo3 {
reg = <7>;
regulator-compatible = "ldo3";
regulator-name = "vdd_ldo3,avdd_usb*"; regulator-name = "vdd_ldo3,avdd_usb*";
regulator-min-microvolt = <3300000>; regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>; regulator-max-microvolt = <3300000>;
regulator-always-on; regulator-always-on;
}; };
regulator@8 { ldo4 {
reg = <8>;
regulator-compatible = "ldo4";
regulator-name = "vdd_ldo4,avdd_osc,vddio_sys"; regulator-name = "vdd_ldo4,avdd_osc,vddio_sys";
regulator-min-microvolt = <1800000>; regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>; regulator-max-microvolt = <1800000>;
regulator-always-on; regulator-always-on;
}; };
regulator@9 { ldo5 {
reg = <9>;
regulator-compatible = "ldo5";
regulator-name = "vdd_ldo5,vcore_mmc"; regulator-name = "vdd_ldo5,vcore_mmc";
regulator-min-microvolt = <2850000>; regulator-min-microvolt = <2850000>;
regulator-max-microvolt = <2850000>; regulator-max-microvolt = <2850000>;
regulator-always-on; regulator-always-on;
}; };
regulator@10 { ldo6 {
reg = <10>;
regulator-compatible = "ldo6";
regulator-name = "vdd_ldo6,avdd_vdac"; regulator-name = "vdd_ldo6,avdd_vdac";
regulator-min-microvolt = <1800000>; regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>; regulator-max-microvolt = <1800000>;
}; };
regulator@11 { hdmi_vdd_reg: ldo7 {
reg = <11>;
regulator-compatible = "ldo7";
regulator-name = "vdd_ldo7,avdd_hdmi"; regulator-name = "vdd_ldo7,avdd_hdmi";
regulator-min-microvolt = <3300000>; regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>; regulator-max-microvolt = <3300000>;
}; };
regulator@12 { hdmi_pll_reg: ldo8 {
reg = <12>;
regulator-compatible = "ldo8";
regulator-name = "vdd_ldo8,avdd_hdmi_pll"; regulator-name = "vdd_ldo8,avdd_hdmi_pll";
regulator-min-microvolt = <1800000>; regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>; regulator-max-microvolt = <1800000>;
}; };
regulator@13 { ldo9 {
reg = <13>;
regulator-compatible = "ldo9";
regulator-name = "vdd_ldo9,avdd_2v85,vdd_ddr_rx"; regulator-name = "vdd_ldo9,avdd_2v85,vdd_ddr_rx";
regulator-min-microvolt = <2850000>; regulator-min-microvolt = <2850000>;
regulator-max-microvolt = <2850000>; regulator-max-microvolt = <2850000>;
regulator-always-on; regulator-always-on;
}; };
regulator@14 { ldo_rtc {
reg = <14>;
regulator-compatible = "ldo_rtc";
regulator-name = "vdd_rtc_out,vdd_cell"; regulator-name = "vdd_rtc_out,vdd_cell";
regulator-min-microvolt = <3300000>; regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>; regulator-max-microvolt = <3300000>;
@ -429,6 +408,11 @@
}; };
}; };
}; };
temperature-sensor@4c {
compatible = "adi,adt7461";
reg = <0x4c>;
};
}; };
pmc { pmc {

View file

@ -291,37 +291,26 @@
vinldo9-supply = <&sm2_reg>; vinldo9-supply = <&sm2_reg>;
regulators { regulators {
#address-cells = <1>; sys_reg: sys {
#size-cells = <0>;
sys_reg: regulator@0 {
reg = <0>;
regulator-compatible = "sys";
regulator-name = "vdd_sys"; regulator-name = "vdd_sys";
regulator-always-on; regulator-always-on;
}; };
regulator@1 { sm0 {
reg = <1>;
regulator-compatible = "sm0";
regulator-name = "+1.2vs_sm0,vdd_core"; regulator-name = "+1.2vs_sm0,vdd_core";
regulator-min-microvolt = <1200000>; regulator-min-microvolt = <1200000>;
regulator-max-microvolt = <1200000>; regulator-max-microvolt = <1200000>;
regulator-always-on; regulator-always-on;
}; };
regulator@2 { sm1 {
reg = <2>;
regulator-compatible = "sm1";
regulator-name = "+1.0vs_sm1,vdd_cpu"; regulator-name = "+1.0vs_sm1,vdd_cpu";
regulator-min-microvolt = <1000000>; regulator-min-microvolt = <1000000>;
regulator-max-microvolt = <1000000>; regulator-max-microvolt = <1000000>;
regulator-always-on; regulator-always-on;
}; };
sm2_reg: regulator@3 { sm2_reg: sm2 {
reg = <3>;
regulator-compatible = "sm2";
regulator-name = "+3.7vs_sm2,vin_ldo*"; regulator-name = "+3.7vs_sm2,vin_ldo*";
regulator-min-microvolt = <3700000>; regulator-min-microvolt = <3700000>;
regulator-max-microvolt = <3700000>; regulator-max-microvolt = <3700000>;
@ -330,53 +319,41 @@
/* LDO0 is not connected to anything */ /* LDO0 is not connected to anything */
regulator@5 { ldo1 {
reg = <5>;
regulator-compatible = "ldo1";
regulator-name = "+1.1vs_ldo1,avdd_pll*"; regulator-name = "+1.1vs_ldo1,avdd_pll*";
regulator-min-microvolt = <1100000>; regulator-min-microvolt = <1100000>;
regulator-max-microvolt = <1100000>; regulator-max-microvolt = <1100000>;
regulator-always-on; regulator-always-on;
}; };
regulator@6 { ldo2 {
reg = <6>;
regulator-compatible = "ldo2";
regulator-name = "+1.2vs_ldo2,vdd_rtc"; regulator-name = "+1.2vs_ldo2,vdd_rtc";
regulator-min-microvolt = <1200000>; regulator-min-microvolt = <1200000>;
regulator-max-microvolt = <1200000>; regulator-max-microvolt = <1200000>;
}; };
regulator@7 { ldo3 {
reg = <7>;
regulator-compatible = "ldo3";
regulator-name = "+3.3vs_ldo3,avdd_usb*"; regulator-name = "+3.3vs_ldo3,avdd_usb*";
regulator-min-microvolt = <3300000>; regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>; regulator-max-microvolt = <3300000>;
regulator-always-on; regulator-always-on;
}; };
regulator@8 { ldo4 {
reg = <8>;
regulator-compatible = "ldo4";
regulator-name = "+1.8vs_ldo4,avdd_osc,vddio_sys"; regulator-name = "+1.8vs_ldo4,avdd_osc,vddio_sys";
regulator-min-microvolt = <1800000>; regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>; regulator-max-microvolt = <1800000>;
regulator-always-on; regulator-always-on;
}; };
regulator@9 { ldo5 {
reg = <9>;
regulator-compatible = "ldo5";
regulator-name = "+2.85vs_ldo5,vcore_mmc"; regulator-name = "+2.85vs_ldo5,vcore_mmc";
regulator-min-microvolt = <2850000>; regulator-min-microvolt = <2850000>;
regulator-max-microvolt = <2850000>; regulator-max-microvolt = <2850000>;
regulator-always-on; regulator-always-on;
}; };
regulator@10 { ldo6 {
reg = <10>;
regulator-compatible = "ldo6";
/* /*
* Research indicates this should be * Research indicates this should be
* 1.8v; other boards that use this * 1.8v; other boards that use this
@ -390,34 +367,26 @@
regulator-max-microvolt = <1800000>; regulator-max-microvolt = <1800000>;
}; };
regulator@11 { ldo7 {
reg = <11>;
regulator-compatible = "ldo7";
regulator-name = "+3.3vs_ldo7,avdd_hdmi"; regulator-name = "+3.3vs_ldo7,avdd_hdmi";
regulator-min-microvolt = <3300000>; regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>; regulator-max-microvolt = <3300000>;
}; };
regulator@12 { ldo8 {
reg = <12>;
regulator-compatible = "ldo8";
regulator-name = "+1.8vs_ldo8,avdd_hdmi_pll"; regulator-name = "+1.8vs_ldo8,avdd_hdmi_pll";
regulator-min-microvolt = <1800000>; regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>; regulator-max-microvolt = <1800000>;
}; };
regulator@13 { ldo9 {
reg = <13>;
regulator-compatible = "ldo9";
regulator-name = "+2.85vs_ldo9,vdd_ddr_rx"; regulator-name = "+2.85vs_ldo9,vdd_ddr_rx";
regulator-min-microvolt = <2850000>; regulator-min-microvolt = <2850000>;
regulator-max-microvolt = <2850000>; regulator-max-microvolt = <2850000>;
regulator-always-on; regulator-always-on;
}; };
regulator@14 { ldo_rtc {
reg = <14>;
regulator-compatible = "ldo_rtc";
regulator-name = "+3.3vs_rtc"; regulator-name = "+3.3vs_rtc";
regulator-min-microvolt = <3300000>; regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>; regulator-max-microvolt = <3300000>;

View file

@ -6,6 +6,12 @@
model = "Avionic Design Plutux board"; model = "Avionic Design Plutux board";
compatible = "ad,plutux", "ad,tamonten", "nvidia,tegra20"; compatible = "ad,plutux", "ad,tamonten", "nvidia,tegra20";
host1x {
hdmi {
status = "okay";
};
};
i2c@7000c000 { i2c@7000c000 {
wm8903: wm8903@1a { wm8903: wm8903@1a {
compatible = "wlf,wm8903"; compatible = "wlf,wm8903";

View file

@ -395,37 +395,26 @@
vinldo9-supply = <&sm2_reg>; vinldo9-supply = <&sm2_reg>;
regulators { regulators {
#address-cells = <1>; sys_reg: sys {
#size-cells = <0>;
sys_reg: regulator@0 {
reg = <0>;
regulator-compatible = "sys";
regulator-name = "vdd_sys"; regulator-name = "vdd_sys";
regulator-always-on; regulator-always-on;
}; };
regulator@1 { sm0 {
reg = <1>;
regulator-compatible = "sm0";
regulator-name = "vdd_sm0,vdd_core"; regulator-name = "vdd_sm0,vdd_core";
regulator-min-microvolt = <1300000>; regulator-min-microvolt = <1300000>;
regulator-max-microvolt = <1300000>; regulator-max-microvolt = <1300000>;
regulator-always-on; regulator-always-on;
}; };
regulator@2 { sm1 {
reg = <2>;
regulator-compatible = "sm1";
regulator-name = "vdd_sm1,vdd_cpu"; regulator-name = "vdd_sm1,vdd_cpu";
regulator-min-microvolt = <1125000>; regulator-min-microvolt = <1125000>;
regulator-max-microvolt = <1125000>; regulator-max-microvolt = <1125000>;
regulator-always-on; regulator-always-on;
}; };
sm2_reg: regulator@3 { sm2_reg: sm2 {
reg = <3>;
regulator-compatible = "sm2";
regulator-name = "vdd_sm2,vin_ldo*"; regulator-name = "vdd_sm2,vin_ldo*";
regulator-min-microvolt = <3700000>; regulator-min-microvolt = <3700000>;
regulator-max-microvolt = <3700000>; regulator-max-microvolt = <3700000>;
@ -434,86 +423,66 @@
/* LDO0 is not connected to anything */ /* LDO0 is not connected to anything */
regulator@5 { ldo1 {
reg = <5>;
regulator-compatible = "ldo1";
regulator-name = "vdd_ldo1,avdd_pll*"; regulator-name = "vdd_ldo1,avdd_pll*";
regulator-min-microvolt = <1100000>; regulator-min-microvolt = <1100000>;
regulator-max-microvolt = <1100000>; regulator-max-microvolt = <1100000>;
regulator-always-on; regulator-always-on;
}; };
regulator@6 { ldo2 {
reg = <6>;
regulator-compatible = "ldo2";
regulator-name = "vdd_ldo2,vdd_rtc"; regulator-name = "vdd_ldo2,vdd_rtc";
regulator-min-microvolt = <1200000>; regulator-min-microvolt = <1200000>;
regulator-max-microvolt = <1200000>; regulator-max-microvolt = <1200000>;
}; };
regulator@7 { ldo3 {
reg = <7>;
regulator-compatible = "ldo3";
regulator-name = "vdd_ldo3,avdd_usb*"; regulator-name = "vdd_ldo3,avdd_usb*";
regulator-min-microvolt = <3300000>; regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>; regulator-max-microvolt = <3300000>;
regulator-always-on; regulator-always-on;
}; };
regulator@8 { ldo4 {
reg = <8>;
regulator-compatible = "ldo4";
regulator-name = "vdd_ldo4,avdd_osc,vddio_sys"; regulator-name = "vdd_ldo4,avdd_osc,vddio_sys";
regulator-min-microvolt = <1800000>; regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>; regulator-max-microvolt = <1800000>;
regulator-always-on; regulator-always-on;
}; };
regulator@9 { ldo5 {
reg = <9>;
regulator-compatible = "ldo5";
regulator-name = "vdd_ldo5,vcore_mmc"; regulator-name = "vdd_ldo5,vcore_mmc";
regulator-min-microvolt = <2850000>; regulator-min-microvolt = <2850000>;
regulator-max-microvolt = <2850000>; regulator-max-microvolt = <2850000>;
regulator-always-on; regulator-always-on;
}; };
regulator@10 { ldo6 {
reg = <10>;
regulator-compatible = "ldo6";
regulator-name = "vdd_ldo6,avdd_vdac,vddio_vi,vddio_cam"; regulator-name = "vdd_ldo6,avdd_vdac,vddio_vi,vddio_cam";
regulator-min-microvolt = <1800000>; regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>; regulator-max-microvolt = <1800000>;
}; };
regulator@11 { ldo7 {
reg = <11>;
regulator-compatible = "ldo7";
regulator-name = "vdd_ldo7,avdd_hdmi,vdd_fuse"; regulator-name = "vdd_ldo7,avdd_hdmi,vdd_fuse";
regulator-min-microvolt = <3300000>; regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>; regulator-max-microvolt = <3300000>;
}; };
regulator@12 { ldo8 {
reg = <12>;
regulator-compatible = "ldo8";
regulator-name = "vdd_ldo8,avdd_hdmi_pll"; regulator-name = "vdd_ldo8,avdd_hdmi_pll";
regulator-min-microvolt = <1800000>; regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>; regulator-max-microvolt = <1800000>;
}; };
regulator@13 { ldo9 {
reg = <13>;
regulator-compatible = "ldo9";
regulator-name = "vdd_ldo9,avdd_2v85,vdd_ddr_rx"; regulator-name = "vdd_ldo9,avdd_2v85,vdd_ddr_rx";
regulator-min-microvolt = <2850000>; regulator-min-microvolt = <2850000>;
regulator-max-microvolt = <2850000>; regulator-max-microvolt = <2850000>;
regulator-always-on; regulator-always-on;
}; };
regulator@14 { ldo_rtc {
reg = <14>;
regulator-compatible = "ldo_rtc";
regulator-name = "vdd_rtc_out,vdd_cell"; regulator-name = "vdd_rtc_out,vdd_cell";
regulator-min-microvolt = <3300000>; regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>; regulator-max-microvolt = <3300000>;
@ -592,6 +561,12 @@
status = "okay"; status = "okay";
}; };
sdhci@c8000000 {
status = "okay";
power-gpios = <&gpio 86 0>; /* gpio PK6 */
bus-width = <4>;
};
sdhci@c8000400 { sdhci@c8000400 {
status = "okay"; status = "okay";
cd-gpios = <&gpio 69 0>; /* gpio PI5 */ cd-gpios = <&gpio 69 0>; /* gpio PI5 */

View file

@ -8,6 +8,16 @@
reg = <0x00000000 0x20000000>; reg = <0x00000000 0x20000000>;
}; };
host1x {
hdmi {
vdd-supply = <&hdmi_vdd_reg>;
pll-supply = <&hdmi_pll_reg>;
nvidia,ddc-i2c-bus = <&hdmi_ddc>;
nvidia,hpd-gpio = <&gpio 111 0>; /* PN7 */
};
};
pinmux { pinmux {
pinctrl-names = "default"; pinctrl-names = "default";
pinctrl-0 = <&state_default>; pinctrl-0 = <&state_default>;
@ -62,10 +72,6 @@
nvidia,pins = "dap4"; nvidia,pins = "dap4";
nvidia,function = "dap4"; nvidia,function = "dap4";
}; };
ddc {
nvidia,pins = "ddc";
nvidia,function = "i2c2";
};
dta { dta {
nvidia,pins = "dta", "dtd"; nvidia,pins = "dta", "dtd";
nvidia,function = "sdio2"; nvidia,function = "sdio2";
@ -91,7 +97,7 @@
nvidia,function = "pcie"; nvidia,function = "pcie";
}; };
hdint { hdint {
nvidia,pins = "hdint", "pta"; nvidia,pins = "hdint";
nvidia,function = "hdmi"; nvidia,function = "hdmi";
}; };
i2cp { i2cp {
@ -230,6 +236,39 @@
nvidia,pull = <1>; nvidia,pull = <1>;
}; };
}; };
state_i2cmux_ddc: pinmux_i2cmux_ddc {
ddc {
nvidia,pins = "ddc";
nvidia,function = "i2c2";
};
pta {
nvidia,pins = "pta";
nvidia,function = "rsvd4";
};
};
state_i2cmux_pta: pinmux_i2cmux_pta {
ddc {
nvidia,pins = "ddc";
nvidia,function = "rsvd4";
};
pta {
nvidia,pins = "pta";
nvidia,function = "i2c2";
};
};
state_i2cmux_idle: pinmux_i2cmux_idle {
ddc {
nvidia,pins = "ddc";
nvidia,function = "rsvd4";
};
pta {
nvidia,pins = "pta";
nvidia,function = "rsvd4";
};
};
}; };
i2s@70002800 { i2s@70002800 {
@ -246,6 +285,36 @@
status = "okay"; status = "okay";
}; };
i2c@7000c400 {
clock-frequency = <100000>;
status = "okay";
};
i2cmux {
compatible = "i2c-mux-pinctrl";
#address-cells = <1>;
#size-cells = <0>;
i2c-parent = <&{/i2c@7000c400}>;
pinctrl-names = "ddc", "pta", "idle";
pinctrl-0 = <&state_i2cmux_ddc>;
pinctrl-1 = <&state_i2cmux_pta>;
pinctrl-2 = <&state_i2cmux_idle>;
hdmi_ddc: i2c@0 {
reg = <0>;
#address-cells = <1>;
#size-cells = <0>;
};
i2c@1 {
reg = <1>;
#address-cells = <1>;
#size-cells = <0>;
};
};
i2c@7000d000 { i2c@7000d000 {
clock-frequency = <400000>; clock-frequency = <400000>;
status = "okay"; status = "okay";
@ -271,97 +340,72 @@
vinldo9-supply = <&sm2_reg>; vinldo9-supply = <&sm2_reg>;
regulators { regulators {
#address-cells = <1>; sys_reg: sys {
#size-cells = <0>;
sys_reg: regulator@0 {
reg = <0>;
regulator-compatible = "sys";
regulator-name = "vdd_sys"; regulator-name = "vdd_sys";
regulator-always-on; regulator-always-on;
}; };
regulator@1 { sm0 {
reg = <1>;
regulator-compatible = "sm0";
regulator-name = "vdd_sys_sm0,vdd_core"; regulator-name = "vdd_sys_sm0,vdd_core";
regulator-min-microvolt = <1200000>; regulator-min-microvolt = <1200000>;
regulator-max-microvolt = <1200000>; regulator-max-microvolt = <1200000>;
regulator-always-on; regulator-always-on;
}; };
regulator@2 { sm1 {
reg = <2>;
regulator-compatible = "sm1";
regulator-name = "vdd_sys_sm1,vdd_cpu"; regulator-name = "vdd_sys_sm1,vdd_cpu";
regulator-min-microvolt = <1000000>; regulator-min-microvolt = <1000000>;
regulator-max-microvolt = <1000000>; regulator-max-microvolt = <1000000>;
regulator-always-on; regulator-always-on;
}; };
sm2_reg: regulator@3 { sm2_reg: sm2 {
reg = <3>;
regulator-compatible = "sm2";
regulator-name = "vdd_sys_sm2,vin_ldo*"; regulator-name = "vdd_sys_sm2,vin_ldo*";
regulator-min-microvolt = <3700000>; regulator-min-microvolt = <3700000>;
regulator-max-microvolt = <3700000>; regulator-max-microvolt = <3700000>;
regulator-always-on; regulator-always-on;
}; };
regulator@4 { ldo0 {
reg = <4>;
regulator-compatible = "ldo0";
regulator-name = "vdd_ldo0,vddio_pex_clk"; regulator-name = "vdd_ldo0,vddio_pex_clk";
regulator-min-microvolt = <3300000>; regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>; regulator-max-microvolt = <3300000>;
}; };
regulator@5 { ldo1 {
reg = <5>;
regulator-compatible = "ldo1";
regulator-name = "vdd_ldo1,avdd_pll*"; regulator-name = "vdd_ldo1,avdd_pll*";
regulator-min-microvolt = <1100000>; regulator-min-microvolt = <1100000>;
regulator-max-microvolt = <1100000>; regulator-max-microvolt = <1100000>;
regulator-always-on; regulator-always-on;
}; };
regulator@6 { ldo2 {
reg = <6>;
regulator-compatible = "ldo2";
regulator-name = "vdd_ldo2,vdd_rtc"; regulator-name = "vdd_ldo2,vdd_rtc";
regulator-min-microvolt = <1200000>; regulator-min-microvolt = <1200000>;
regulator-max-microvolt = <1200000>; regulator-max-microvolt = <1200000>;
}; };
regulator@7 { ldo3 {
reg = <7>;
regulator-compatible = "ldo3";
regulator-name = "vdd_ldo3,avdd_usb*"; regulator-name = "vdd_ldo3,avdd_usb*";
regulator-min-microvolt = <3300000>; regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>; regulator-max-microvolt = <3300000>;
regulator-always-on; regulator-always-on;
}; };
regulator@8 { ldo4 {
reg = <8>;
regulator-compatible = "ldo4";
regulator-name = "vdd_ldo4,avdd_osc,vddio_sys"; regulator-name = "vdd_ldo4,avdd_osc,vddio_sys";
regulator-min-microvolt = <1800000>; regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>; regulator-max-microvolt = <1800000>;
regulator-always-on; regulator-always-on;
}; };
regulator@9 { ldo5 {
reg = <9>;
regulator-compatible = "ldo5";
regulator-name = "vdd_ldo5,vcore_mmc"; regulator-name = "vdd_ldo5,vcore_mmc";
regulator-min-microvolt = <2850000>; regulator-min-microvolt = <2850000>;
regulator-max-microvolt = <2850000>; regulator-max-microvolt = <2850000>;
}; };
regulator@10 { ldo6 {
reg = <10>;
regulator-compatible = "ldo6";
regulator-name = "vdd_ldo6,avdd_vdac"; regulator-name = "vdd_ldo6,avdd_vdac";
/* /*
* According to the Tegra 2 Automotive * According to the Tegra 2 Automotive
@ -373,25 +417,19 @@
regulator-max-microvolt = <2850000>; regulator-max-microvolt = <2850000>;
}; };
regulator@11 { hdmi_vdd_reg: ldo7 {
reg = <11>;
regulator-compatible = "ldo7";
regulator-name = "vdd_ldo7,avdd_hdmi"; regulator-name = "vdd_ldo7,avdd_hdmi";
regulator-min-microvolt = <3300000>; regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>; regulator-max-microvolt = <3300000>;
}; };
regulator@12 { hdmi_pll_reg: ldo8 {
reg = <12>;
regulator-compatible = "ldo8";
regulator-name = "vdd_ldo8,avdd_hdmi_pll"; regulator-name = "vdd_ldo8,avdd_hdmi_pll";
regulator-min-microvolt = <1800000>; regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>; regulator-max-microvolt = <1800000>;
}; };
regulator@13 { ldo9 {
reg = <13>;
regulator-compatible = "ldo9";
regulator-name = "vdd_ldo9,vdd_ddr_rx,avdd_cam"; regulator-name = "vdd_ldo9,vdd_ddr_rx,avdd_cam";
/* /*
* According to the Tegra 2 Automotive * According to the Tegra 2 Automotive
@ -404,9 +442,7 @@
regulator-always-on; regulator-always-on;
}; };
regulator@14 { ldo_rtc {
reg = <14>;
regulator-compatible = "ldo_rtc";
regulator-name = "vdd_rtc_out"; regulator-name = "vdd_rtc_out";
regulator-min-microvolt = <3300000>; regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>; regulator-max-microvolt = <3300000>;
@ -414,6 +450,11 @@
}; };
}; };
}; };
temperature-sensor@4c {
compatible = "onnn,nct1008";
reg = <0x4c>;
};
}; };
pmc { pmc {

View file

@ -6,10 +6,13 @@
model = "Avionic Design Tamonten Evaluation Carrier"; model = "Avionic Design Tamonten Evaluation Carrier";
compatible = "ad,tec", "ad,tamonten", "nvidia,tegra20"; compatible = "ad,tec", "ad,tamonten", "nvidia,tegra20";
i2c@7000c000 { host1x {
clock-frequency = <400000>; hdmi {
status = "okay"; status = "okay";
};
};
i2c@7000c000 {
wm8903: wm8903@1a { wm8903: wm8903@1a {
compatible = "wlf,wm8903"; compatible = "wlf,wm8903";
reg = <0x1a>; reg = <0x1a>;

View file

@ -10,6 +10,18 @@
reg = <0x00000000 0x40000000>; reg = <0x00000000 0x40000000>;
}; };
host1x {
hdmi {
status = "okay";
vdd-supply = <&hdmi_vdd_reg>;
pll-supply = <&hdmi_pll_reg>;
nvidia,ddc-i2c-bus = <&hdmi_ddc>;
nvidia,hpd-gpio = <&gpio 111 0>; /* PN7 */
};
};
pinmux { pinmux {
pinctrl-names = "default"; pinctrl-names = "default";
pinctrl-0 = <&state_default>; pinctrl-0 = <&state_default>;
@ -249,14 +261,24 @@
clock-frequency = <216000000>; clock-frequency = <216000000>;
}; };
i2c@7000c000 { dvi_ddc: i2c@7000c000 {
status = "okay"; status = "okay";
clock-frequency = <400000>; clock-frequency = <100000>;
}; };
i2c@7000c400 { spi@7000c380 {
status = "okay"; status = "okay";
clock-frequency = <400000>; spi-max-frequency = <48000000>;
spi-flash@0 {
compatible = "winbond,w25q80bl";
reg = <0>;
spi-max-frequency = <48000000>;
};
};
hdmi_ddc: i2c@7000c400 {
status = "okay";
clock-frequency = <100000>;
}; };
i2c@7000c500 { i2c@7000c500 {
@ -300,6 +322,30 @@
bus-width = <4>; bus-width = <4>;
}; };
regulators {
compatible = "simple-bus";
#address-cells = <1>;
#size-cells = <0>;
hdmi_vdd_reg: regulator@0 {
compatible = "regulator-fixed";
reg = <0>;
regulator-name = "avdd_hdmi";
regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>;
regulator-always-on;
};
hdmi_pll_reg: regulator@1 {
compatible = "regulator-fixed";
reg = <1>;
regulator-name = "avdd_hdmi_pll";
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>;
regulator-always-on;
};
};
sound { sound {
compatible = "nvidia,tegra-audio-trimslice"; compatible = "nvidia,tegra-audio-trimslice";
nvidia,i2s-controller = <&tegra_i2s1>; nvidia,i2s-controller = <&tegra_i2s1>;

View file

@ -64,11 +64,6 @@
nvidia,pins = "dap4"; nvidia,pins = "dap4";
nvidia,function = "dap4"; nvidia,function = "dap4";
}; };
ddc {
nvidia,pins = "ddc", "owc", "spdi", "spdo",
"uac";
nvidia,function = "rsvd2";
};
dta { dta {
nvidia,pins = "dta", "dtb", "dtc", "dtd", "dte"; nvidia,pins = "dta", "dtb", "dtc", "dtd", "dte";
nvidia,function = "vi"; nvidia,function = "vi";
@ -98,7 +93,7 @@
nvidia,function = "pcie"; nvidia,function = "pcie";
}; };
hdint { hdint {
nvidia,pins = "hdint", "pta"; nvidia,pins = "hdint";
nvidia,function = "hdmi"; nvidia,function = "hdmi";
}; };
i2cp { i2cp {
@ -129,6 +124,10 @@
"lspi", "lvp1", "lvs"; "lspi", "lvp1", "lvs";
nvidia,function = "displaya"; nvidia,function = "displaya";
}; };
owc {
nvidia,pins = "owc", "spdi", "spdo", "uac";
nvidia,function = "rsvd2";
};
pmc { pmc {
nvidia,pins = "pmc"; nvidia,pins = "pmc";
nvidia,function = "pwr_on"; nvidia,function = "pwr_on";
@ -237,6 +236,49 @@
"ld23_22"; "ld23_22";
nvidia,pull = <1>; nvidia,pull = <1>;
}; };
drive_sdio1 {
nvidia,pins = "drive_sdio1";
nvidia,high-speed-mode = <0>;
nvidia,schmitt = <1>;
nvidia,low-power-mode = <3>;
nvidia,pull-down-strength = <31>;
nvidia,pull-up-strength = <31>;
nvidia,slew-rate-rising = <3>;
nvidia,slew-rate-falling = <3>;
};
};
state_i2cmux_ddc: pinmux_i2cmux_ddc {
ddc {
nvidia,pins = "ddc";
nvidia,function = "i2c2";
};
pta {
nvidia,pins = "pta";
nvidia,function = "rsvd4";
};
};
state_i2cmux_pta: pinmux_i2cmux_pta {
ddc {
nvidia,pins = "ddc";
nvidia,function = "rsvd4";
};
pta {
nvidia,pins = "pta";
nvidia,function = "i2c2";
};
};
state_i2cmux_idle: pinmux_i2cmux_idle {
ddc {
nvidia,pins = "ddc";
nvidia,function = "rsvd4";
};
pta {
nvidia,pins = "pta";
nvidia,function = "rsvd4";
};
}; };
}; };
@ -281,6 +323,31 @@
clock-frequency = <400000>; clock-frequency = <400000>;
}; };
i2cmux {
compatible = "i2c-mux-pinctrl";
#address-cells = <1>;
#size-cells = <0>;
i2c-parent = <&{/i2c@7000c400}>;
pinctrl-names = "ddc", "pta", "idle";
pinctrl-0 = <&state_i2cmux_ddc>;
pinctrl-1 = <&state_i2cmux_pta>;
pinctrl-2 = <&state_i2cmux_idle>;
i2c@0 {
reg = <0>;
#address-cells = <1>;
#size-cells = <0>;
};
i2c@1 {
reg = <1>;
#address-cells = <1>;
#size-cells = <0>;
};
};
i2c@7000c500 { i2c@7000c500 {
status = "okay"; status = "okay";
clock-frequency = <400000>; clock-frequency = <400000>;
@ -311,37 +378,26 @@
vinldo9-supply = <&sm2_reg>; vinldo9-supply = <&sm2_reg>;
regulators { regulators {
#address-cells = <1>; sys_reg: sys {
#size-cells = <0>;
sys_reg: regulator@0 {
reg = <0>;
regulator-compatible = "sys";
regulator-name = "vdd_sys"; regulator-name = "vdd_sys";
regulator-always-on; regulator-always-on;
}; };
regulator@1 { sm0 {
reg = <1>;
regulator-compatible = "sm0";
regulator-name = "vdd_sm0,vdd_core"; regulator-name = "vdd_sm0,vdd_core";
regulator-min-microvolt = <1200000>; regulator-min-microvolt = <1200000>;
regulator-max-microvolt = <1200000>; regulator-max-microvolt = <1200000>;
regulator-always-on; regulator-always-on;
}; };
regulator@2 { sm1 {
reg = <2>;
regulator-compatible = "sm1";
regulator-name = "vdd_sm1,vdd_cpu"; regulator-name = "vdd_sm1,vdd_cpu";
regulator-min-microvolt = <1000000>; regulator-min-microvolt = <1000000>;
regulator-max-microvolt = <1000000>; regulator-max-microvolt = <1000000>;
regulator-always-on; regulator-always-on;
}; };
sm2_reg: regulator@3 { sm2_reg: sm2 {
reg = <3>;
regulator-compatible = "sm2";
regulator-name = "vdd_sm2,vin_ldo*"; regulator-name = "vdd_sm2,vin_ldo*";
regulator-min-microvolt = <3700000>; regulator-min-microvolt = <3700000>;
regulator-max-microvolt = <3700000>; regulator-max-microvolt = <3700000>;
@ -350,86 +406,66 @@
/* LDO0 is not connected to anything */ /* LDO0 is not connected to anything */
regulator@5 { ldo1 {
reg = <5>;
regulator-compatible = "ldo1";
regulator-name = "vdd_ldo1,avdd_pll*"; regulator-name = "vdd_ldo1,avdd_pll*";
regulator-min-microvolt = <1100000>; regulator-min-microvolt = <1100000>;
regulator-max-microvolt = <1100000>; regulator-max-microvolt = <1100000>;
regulator-always-on; regulator-always-on;
}; };
regulator@6 { ldo2 {
reg = <6>;
regulator-compatible = "ldo2";
regulator-name = "vdd_ldo2,vdd_rtc"; regulator-name = "vdd_ldo2,vdd_rtc";
regulator-min-microvolt = <1200000>; regulator-min-microvolt = <1200000>;
regulator-max-microvolt = <1200000>; regulator-max-microvolt = <1200000>;
}; };
regulator@7 { ldo3 {
reg = <7>;
regulator-compatible = "ldo3";
regulator-name = "vdd_ldo3,avdd_usb*"; regulator-name = "vdd_ldo3,avdd_usb*";
regulator-min-microvolt = <3300000>; regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>; regulator-max-microvolt = <3300000>;
regulator-always-on; regulator-always-on;
}; };
regulator@8 { ldo4 {
reg = <8>;
regulator-compatible = "ldo4";
regulator-name = "vdd_ldo4,avdd_osc,vddio_sys"; regulator-name = "vdd_ldo4,avdd_osc,vddio_sys";
regulator-min-microvolt = <1800000>; regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>; regulator-max-microvolt = <1800000>;
regulator-always-on; regulator-always-on;
}; };
regulator@9 { ldo5 {
reg = <9>;
regulator-compatible = "ldo5";
regulator-name = "vdd_ldo5,vcore_mmc"; regulator-name = "vdd_ldo5,vcore_mmc";
regulator-min-microvolt = <2850000>; regulator-min-microvolt = <2850000>;
regulator-max-microvolt = <2850000>; regulator-max-microvolt = <2850000>;
regulator-always-on; regulator-always-on;
}; };
regulator@10 { ldo6 {
reg = <10>;
regulator-compatible = "ldo6";
regulator-name = "vdd_ldo6,avdd_vdac"; regulator-name = "vdd_ldo6,avdd_vdac";
regulator-min-microvolt = <1800000>; regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>; regulator-max-microvolt = <1800000>;
}; };
regulator@11 { ldo7 {
reg = <11>;
regulator-compatible = "ldo7";
regulator-name = "vdd_ldo7,avdd_hdmi,vdd_fuse"; regulator-name = "vdd_ldo7,avdd_hdmi,vdd_fuse";
regulator-min-microvolt = <3300000>; regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>; regulator-max-microvolt = <3300000>;
}; };
regulator@12 { ldo8 {
reg = <12>;
regulator-compatible = "ldo8";
regulator-name = "vdd_ldo8,avdd_hdmi_pll"; regulator-name = "vdd_ldo8,avdd_hdmi_pll";
regulator-min-microvolt = <1800000>; regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>; regulator-max-microvolt = <1800000>;
}; };
regulator@13 { ldo9 {
reg = <13>;
regulator-compatible = "ldo9";
regulator-name = "vdd_ldo9,avdd_2v85,vdd_ddr_rx"; regulator-name = "vdd_ldo9,avdd_2v85,vdd_ddr_rx";
regulator-min-microvolt = <2850000>; regulator-min-microvolt = <2850000>;
regulator-max-microvolt = <2850000>; regulator-max-microvolt = <2850000>;
regulator-always-on; regulator-always-on;
}; };
regulator@14 { ldo_rtc {
reg = <14>;
regulator-compatible = "ldo_rtc";
regulator-name = "vdd_rtc_out,vdd_cell"; regulator-name = "vdd_rtc_out,vdd_cell";
regulator-min-microvolt = <3300000>; regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>; regulator-max-microvolt = <3300000>;
@ -437,6 +473,11 @@
}; };
}; };
}; };
temperature-sensor@4c {
compatible = "onnn,nct1008";
reg = <0x4c>;
};
}; };
pmc { pmc {
@ -456,6 +497,12 @@
status = "okay"; status = "okay";
}; };
sdhci@c8000000 {
status = "okay";
power-gpios = <&gpio 86 0>; /* gpio PK6 */
bus-width = <4>;
};
sdhci@c8000400 { sdhci@c8000400 {
status = "okay"; status = "okay";
cd-gpios = <&gpio 69 0>; /* gpio PI5 */ cd-gpios = <&gpio 69 0>; /* gpio PI5 */

View file

@ -10,6 +10,18 @@
reg = <0x00000000 0x20000000>; reg = <0x00000000 0x20000000>;
}; };
host1x {
hdmi {
status = "okay";
vdd-supply = <&hdmi_vdd_reg>;
pll-supply = <&hdmi_pll_reg>;
nvidia,ddc-i2c-bus = <&hdmi_ddc>;
nvidia,hpd-gpio = <&gpio 111 0>; /* PN7 */
};
};
pinmux { pinmux {
pinctrl-names = "default"; pinctrl-names = "default";
pinctrl-0 = <&state_default>; pinctrl-0 = <&state_default>;
@ -246,6 +258,11 @@
clock-frequency = <216000000>; clock-frequency = <216000000>;
}; };
hdmi_ddc: i2c@7000c400 {
status = "okay";
clock-frequency = <100000>;
};
i2c@7000d000 { i2c@7000d000 {
status = "okay"; status = "okay";
clock-frequency = <100000>; clock-frequency = <100000>;
@ -295,243 +312,182 @@
in20-supply = <&mbatt_reg>; in20-supply = <&mbatt_reg>;
regulators { regulators {
#address-cells = <1>; mbatt_reg: mbatt {
#size-cells = <0>;
mbatt_reg: regulator@0 {
reg = <0>;
regulator-compatible = "mbatt";
regulator-name = "vbat_pmu"; regulator-name = "vbat_pmu";
regulator-always-on; regulator-always-on;
}; };
regulator@1 { sd1 {
reg = <1>;
regulator-compatible = "sd1";
regulator-name = "nvvdd_sv1,vdd_cpu_pmu"; regulator-name = "nvvdd_sv1,vdd_cpu_pmu";
regulator-min-microvolt = <1000000>; regulator-min-microvolt = <1000000>;
regulator-max-microvolt = <1000000>; regulator-max-microvolt = <1000000>;
regulator-always-on; regulator-always-on;
}; };
regulator@2 { sd2 {
reg = <2>;
regulator-compatible = "sd2";
regulator-name = "nvvdd_sv2,vdd_core"; regulator-name = "nvvdd_sv2,vdd_core";
regulator-min-microvolt = <1200000>; regulator-min-microvolt = <1200000>;
regulator-max-microvolt = <1200000>; regulator-max-microvolt = <1200000>;
regulator-always-on; regulator-always-on;
}; };
nvvdd_sv3_reg: regulator@3 { nvvdd_sv3_reg: sd3 {
reg = <3>;
regulator-compatible = "sd3";
regulator-name = "nvvdd_sv3"; regulator-name = "nvvdd_sv3";
regulator-min-microvolt = <1800000>; regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>; regulator-max-microvolt = <1800000>;
regulator-always-on; regulator-always-on;
}; };
regulator@4 { ldo1 {
reg = <4>;
regulator-compatible = "ldo1";
regulator-name = "nvvdd_ldo1,vddio_rx_ddr,vcore_acc"; regulator-name = "nvvdd_ldo1,vddio_rx_ddr,vcore_acc";
regulator-min-microvolt = <3300000>; regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>; regulator-max-microvolt = <3300000>;
regulator-always-on; regulator-always-on;
}; };
regulator@5 { ldo2 {
reg = <5>;
regulator-compatible = "ldo2";
regulator-name = "nvvdd_ldo2,avdd_pll*"; regulator-name = "nvvdd_ldo2,avdd_pll*";
regulator-min-microvolt = <1100000>; regulator-min-microvolt = <1100000>;
regulator-max-microvolt = <1100000>; regulator-max-microvolt = <1100000>;
regulator-always-on; regulator-always-on;
}; };
regulator@6 { ldo3 {
reg = <6>;
regulator-compatible = "ldo3";
regulator-name = "nvvdd_ldo3,vcom_1v8b"; regulator-name = "nvvdd_ldo3,vcom_1v8b";
regulator-min-microvolt = <1800000>; regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>; regulator-max-microvolt = <1800000>;
regulator-always-on; regulator-always-on;
}; };
regulator@7 { ldo4 {
reg = <7>;
regulator-compatible = "ldo4";
regulator-name = "nvvdd_ldo4,avdd_usb*"; regulator-name = "nvvdd_ldo4,avdd_usb*";
regulator-min-microvolt = <3300000>; regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>; regulator-max-microvolt = <3300000>;
regulator-always-on; regulator-always-on;
}; };
regulator@8 { ldo5 {
reg = <8>;
regulator-compatible = "ldo5";
regulator-name = "nvvdd_ldo5,vcore_mmc,avdd_lcd1,vddio_1wire"; regulator-name = "nvvdd_ldo5,vcore_mmc,avdd_lcd1,vddio_1wire";
regulator-min-microvolt = <2800000>; regulator-min-microvolt = <2800000>;
regulator-max-microvolt = <2800000>; regulator-max-microvolt = <2800000>;
regulator-always-on; regulator-always-on;
}; };
regulator@9 { hdmi_pll_reg: ldo6 {
reg = <9>;
regulator-compatible = "ldo6";
regulator-name = "nvvdd_ldo6,avdd_hdmi_pll"; regulator-name = "nvvdd_ldo6,avdd_hdmi_pll";
regulator-min-microvolt = <1800000>; regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>; regulator-max-microvolt = <1800000>;
}; };
regulator@10 { ldo7 {
reg = <10>;
regulator-compatible = "ldo7";
regulator-name = "nvvdd_ldo7,avddio_audio"; regulator-name = "nvvdd_ldo7,avddio_audio";
regulator-min-microvolt = <2800000>; regulator-min-microvolt = <2800000>;
regulator-max-microvolt = <2800000>; regulator-max-microvolt = <2800000>;
regulator-always-on; regulator-always-on;
}; };
regulator@11 { ldo8 {
reg = <11>;
regulator-compatible = "ldo8";
regulator-name = "nvvdd_ldo8,vcom_3v0,vcore_cmps"; regulator-name = "nvvdd_ldo8,vcom_3v0,vcore_cmps";
regulator-min-microvolt = <3000000>; regulator-min-microvolt = <3000000>;
regulator-max-microvolt = <3000000>; regulator-max-microvolt = <3000000>;
}; };
regulator@12 { ldo9 {
reg = <12>;
regulator-compatible = "ldo9";
regulator-name = "nvvdd_ldo9,avdd_cam*"; regulator-name = "nvvdd_ldo9,avdd_cam*";
regulator-min-microvolt = <2800000>; regulator-min-microvolt = <2800000>;
regulator-max-microvolt = <2800000>; regulator-max-microvolt = <2800000>;
}; };
regulator@13 { ldo10 {
reg = <13>;
regulator-compatible = "ldo10";
regulator-name = "nvvdd_ldo10,avdd_usb_ic_3v0"; regulator-name = "nvvdd_ldo10,avdd_usb_ic_3v0";
regulator-min-microvolt = <3000000>; regulator-min-microvolt = <3000000>;
regulator-max-microvolt = <3000000>; regulator-max-microvolt = <3000000>;
regulator-always-on; regulator-always-on;
}; };
regulator@14 { hdmi_vdd_reg: ldo11 {
reg = <14>;
regulator-compatible = "ldo11";
regulator-name = "nvvdd_ldo11,vddio_pex_clk,vcom_33,avdd_hdmi"; regulator-name = "nvvdd_ldo11,vddio_pex_clk,vcom_33,avdd_hdmi";
regulator-min-microvolt = <3300000>; regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>; regulator-max-microvolt = <3300000>;
}; };
regulator@15 { ldo12 {
reg = <15>;
regulator-compatible = "ldo12";
regulator-name = "nvvdd_ldo12,vddio_sdio"; regulator-name = "nvvdd_ldo12,vddio_sdio";
regulator-min-microvolt = <2800000>; regulator-min-microvolt = <2800000>;
regulator-max-microvolt = <2800000>; regulator-max-microvolt = <2800000>;
regulator-always-on; regulator-always-on;
}; };
regulator@16 { ldo13 {
reg = <16>;
regulator-compatible = "ldo13";
regulator-name = "nvvdd_ldo13,vcore_phtn,vdd_af"; regulator-name = "nvvdd_ldo13,vcore_phtn,vdd_af";
regulator-min-microvolt = <2800000>; regulator-min-microvolt = <2800000>;
regulator-max-microvolt = <2800000>; regulator-max-microvolt = <2800000>;
}; };
regulator@17 { ldo14 {
reg = <17>;
regulator-compatible = "ldo14";
regulator-name = "nvvdd_ldo14,avdd_vdac"; regulator-name = "nvvdd_ldo14,avdd_vdac";
regulator-min-microvolt = <2800000>; regulator-min-microvolt = <2800000>;
regulator-max-microvolt = <2800000>; regulator-max-microvolt = <2800000>;
}; };
regulator@18 { ldo15 {
reg = <18>;
regulator-compatible = "ldo15";
regulator-name = "nvvdd_ldo15,vcore_temp,vddio_hdcp"; regulator-name = "nvvdd_ldo15,vcore_temp,vddio_hdcp";
regulator-min-microvolt = <3300000>; regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>; regulator-max-microvolt = <3300000>;
}; };
regulator@19 { ldo16 {
reg = <19>;
regulator-compatible = "ldo16";
regulator-name = "nvvdd_ldo16,vdd_dbrtr"; regulator-name = "nvvdd_ldo16,vdd_dbrtr";
regulator-min-microvolt = <1300000>; regulator-min-microvolt = <1300000>;
regulator-max-microvolt = <1300000>; regulator-max-microvolt = <1300000>;
}; };
regulator@20 { ldo17 {
reg = <20>;
regulator-compatible = "ldo17";
regulator-name = "nvvdd_ldo17,vddio_mipi"; regulator-name = "nvvdd_ldo17,vddio_mipi";
regulator-min-microvolt = <1200000>; regulator-min-microvolt = <1200000>;
regulator-max-microvolt = <1200000>; regulator-max-microvolt = <1200000>;
}; };
regulator@21 { ldo18 {
reg = <21>;
regulator-compatible = "ldo18";
regulator-name = "nvvdd_ldo18,vddio_vi,vcore_cam*"; regulator-name = "nvvdd_ldo18,vddio_vi,vcore_cam*";
regulator-min-microvolt = <1800000>; regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>; regulator-max-microvolt = <1800000>;
}; };
regulator@22 { ldo19 {
reg = <22>;
regulator-compatible = "ldo19";
regulator-name = "nvvdd_ldo19,avdd_lcd2,vddio_lx"; regulator-name = "nvvdd_ldo19,avdd_lcd2,vddio_lx";
regulator-min-microvolt = <2800000>; regulator-min-microvolt = <2800000>;
regulator-max-microvolt = <2800000>; regulator-max-microvolt = <2800000>;
}; };
regulator@23 { ldo20 {
reg = <23>;
regulator-compatible = "ldo20";
regulator-name = "nvvdd_ldo20,vddio_ddr_1v2,vddio_hsic,vcom_1v2"; regulator-name = "nvvdd_ldo20,vddio_ddr_1v2,vddio_hsic,vcom_1v2";
regulator-min-microvolt = <1200000>; regulator-min-microvolt = <1200000>;
regulator-max-microvolt = <1200000>; regulator-max-microvolt = <1200000>;
regulator-always-on; regulator-always-on;
}; };
regulator@24 { out5v {
reg = <24>;
regulator-compatible = "out5v";
regulator-name = "usb0_vbus_reg"; regulator-name = "usb0_vbus_reg";
}; };
regulator@25 { out33v {
reg = <25>;
regulator-compatible = "out33v";
regulator-name = "pmu_out3v3"; regulator-name = "pmu_out3v3";
}; };
regulator@26 { bbat {
reg = <26>;
regulator-compatible = "bbat";
regulator-name = "pmu_bbat"; regulator-name = "pmu_bbat";
regulator-min-microvolt = <2400000>; regulator-min-microvolt = <2400000>;
regulator-max-microvolt = <2400000>; regulator-max-microvolt = <2400000>;
regulator-always-on; regulator-always-on;
}; };
regulator@27 { sdby {
reg = <27>;
regulator-compatible = "sdby";
regulator-name = "vdd_aon"; regulator-name = "vdd_aon";
regulator-always-on; regulator-always-on;
}; };
regulator@28 { vrtc {
reg = <28>;
regulator-compatible = "vrtc";
regulator-name = "vrtc,pmu_vccadc"; regulator-name = "vrtc,pmu_vccadc";
regulator-always-on; regulator-always-on;
}; };

View file

@ -4,6 +4,102 @@
compatible = "nvidia,tegra20"; compatible = "nvidia,tegra20";
interrupt-parent = <&intc>; interrupt-parent = <&intc>;
host1x {
compatible = "nvidia,tegra20-host1x", "simple-bus";
reg = <0x50000000 0x00024000>;
interrupts = <0 65 0x04 /* mpcore syncpt */
0 67 0x04>; /* mpcore general */
#address-cells = <1>;
#size-cells = <1>;
ranges = <0x54000000 0x54000000 0x04000000>;
mpe {
compatible = "nvidia,tegra20-mpe";
reg = <0x54040000 0x00040000>;
interrupts = <0 68 0x04>;
};
vi {
compatible = "nvidia,tegra20-vi";
reg = <0x54080000 0x00040000>;
interrupts = <0 69 0x04>;
};
epp {
compatible = "nvidia,tegra20-epp";
reg = <0x540c0000 0x00040000>;
interrupts = <0 70 0x04>;
};
isp {
compatible = "nvidia,tegra20-isp";
reg = <0x54100000 0x00040000>;
interrupts = <0 71 0x04>;
};
gr2d {
compatible = "nvidia,tegra20-gr2d";
reg = <0x54140000 0x00040000>;
interrupts = <0 72 0x04>;
};
gr3d {
compatible = "nvidia,tegra20-gr3d";
reg = <0x54180000 0x00040000>;
};
dc@54200000 {
compatible = "nvidia,tegra20-dc";
reg = <0x54200000 0x00040000>;
interrupts = <0 73 0x04>;
rgb {
status = "disabled";
};
};
dc@54240000 {
compatible = "nvidia,tegra20-dc";
reg = <0x54240000 0x00040000>;
interrupts = <0 74 0x04>;
rgb {
status = "disabled";
};
};
hdmi {
compatible = "nvidia,tegra20-hdmi";
reg = <0x54280000 0x00040000>;
interrupts = <0 75 0x04>;
status = "disabled";
};
tvo {
compatible = "nvidia,tegra20-tvo";
reg = <0x542c0000 0x00040000>;
interrupts = <0 76 0x04>;
status = "disabled";
};
dsi {
compatible = "nvidia,tegra20-dsi";
reg = <0x54300000 0x00040000>;
status = "disabled";
};
};
cache-controller@50043000 {
compatible = "arm,pl310-cache";
reg = <0x50043000 0x1000>;
arm,data-latency = <5 5 2>;
arm,tag-latency = <4 4 2>;
cache-unified;
cache-level = <2>;
};
intc: interrupt-controller { intc: interrupt-controller {
compatible = "arm,cortex-a9-gic"; compatible = "arm,cortex-a9-gic";
reg = <0x50041000 0x1000 reg = <0x50041000 0x1000
@ -138,6 +234,16 @@
status = "disabled"; status = "disabled";
}; };
spi@7000c380 {
compatible = "nvidia,tegra20-sflash";
reg = <0x7000c380 0x80>;
interrupts = <0 39 0x04>;
nvidia,dma-request-selector = <&apbdma 11>;
#address-cells = <1>;
#size-cells = <0>;
status = "disabled";
};
i2c@7000c400 { i2c@7000c400 {
compatible = "nvidia,tegra20-i2c"; compatible = "nvidia,tegra20-i2c";
reg = <0x7000c400 0x100>; reg = <0x7000c400 0x100>;
@ -165,6 +271,46 @@
status = "disabled"; status = "disabled";
}; };
spi@7000d400 {
compatible = "nvidia,tegra20-slink";
reg = <0x7000d400 0x200>;
interrupts = <0 59 0x04>;
nvidia,dma-request-selector = <&apbdma 15>;
#address-cells = <1>;
#size-cells = <0>;
status = "disabled";
};
spi@7000d600 {
compatible = "nvidia,tegra20-slink";
reg = <0x7000d600 0x200>;
interrupts = <0 82 0x04>;
nvidia,dma-request-selector = <&apbdma 16>;
#address-cells = <1>;
#size-cells = <0>;
status = "disabled";
};
spi@7000d800 {
compatible = "nvidia,tegra20-slink";
reg = <0x7000d480 0x200>;
interrupts = <0 83 0x04>;
nvidia,dma-request-selector = <&apbdma 17>;
#address-cells = <1>;
#size-cells = <0>;
status = "disabled";
};
spi@7000da00 {
compatible = "nvidia,tegra20-slink";
reg = <0x7000da00 0x200>;
interrupts = <0 93 0x04>;
nvidia,dma-request-selector = <&apbdma 18>;
#address-cells = <1>;
#size-cells = <0>;
status = "disabled";
};
pmc { pmc {
compatible = "nvidia,tegra20-pmc"; compatible = "nvidia,tegra20-pmc";
reg = <0x7000e400 0x400>; reg = <0x7000e400 0x400>;

View file

@ -83,5 +83,11 @@
gpio = <&gpio 83 0>; /* GPIO PK3 */ gpio = <&gpio 83 0>; /* GPIO PK3 */
}; };
}; };
sdhci@78000400 {
status = "okay";
power-gpios = <&gpio 28 0>; /* gpio PD4 */
bus-width = <4>;
};
}; };

View file

@ -95,4 +95,10 @@
gpio = <&gpio 232 0>; /* GPIO PDD0 */ gpio = <&gpio 232 0>; /* GPIO PDD0 */
}; };
}; };
sdhci@78000400 {
status = "okay";
power-gpios = <&gpio 27 0>; /* gpio PD3 */
bus-width = <4>;
};
}; };

View file

@ -52,6 +52,22 @@
nvidia,pull = <2>; nvidia,pull = <2>;
nvidia,tristate = <0>; nvidia,tristate = <0>;
}; };
sdmmc3_clk_pa6 {
nvidia,pins = "sdmmc3_clk_pa6";
nvidia,function = "sdmmc3";
nvidia,pull = <0>;
nvidia,tristate = <0>;
};
sdmmc3_cmd_pa7 {
nvidia,pins = "sdmmc3_cmd_pa7",
"sdmmc3_dat0_pb7",
"sdmmc3_dat1_pb6",
"sdmmc3_dat2_pb5",
"sdmmc3_dat3_pb4";
nvidia,function = "sdmmc3";
nvidia,pull = <2>;
nvidia,tristate = <0>;
};
sdmmc4_clk_pcc4 { sdmmc4_clk_pcc4 {
nvidia,pins = "sdmmc4_clk_pcc4", nvidia,pins = "sdmmc4_clk_pcc4",
"sdmmc4_rst_n_pcc3"; "sdmmc4_rst_n_pcc3";
@ -81,6 +97,15 @@
nvidia,pull = <0>; nvidia,pull = <0>;
nvidia,tristate = <0>; nvidia,tristate = <0>;
}; };
sdio3 {
nvidia,pins = "drive_sdio3";
nvidia,high-speed-mode = <0>;
nvidia,schmitt = <0>;
nvidia,pull-down-strength = <46>;
nvidia,pull-up-strength = <42>;
nvidia,slew-rate-rising = <1>;
nvidia,slew-rate-falling = <1>;
};
}; };
}; };
@ -171,56 +196,41 @@
vccio-supply = <&vdd_ac_bat_reg>; vccio-supply = <&vdd_ac_bat_reg>;
regulators { regulators {
#address-cells = <1>; vdd1_reg: vdd1 {
#size-cells = <0>;
vdd1_reg: regulator@0 {
reg = <0>;
regulator-compatible = "vdd1";
regulator-name = "vddio_ddr_1v2"; regulator-name = "vddio_ddr_1v2";
regulator-min-microvolt = <1200000>; regulator-min-microvolt = <1200000>;
regulator-max-microvolt = <1200000>; regulator-max-microvolt = <1200000>;
regulator-always-on; regulator-always-on;
}; };
vdd2_reg: regulator@1 { vdd2_reg: vdd2 {
reg = <1>;
regulator-compatible = "vdd2";
regulator-name = "vdd_1v5_gen"; regulator-name = "vdd_1v5_gen";
regulator-min-microvolt = <1500000>; regulator-min-microvolt = <1500000>;
regulator-max-microvolt = <1500000>; regulator-max-microvolt = <1500000>;
regulator-always-on; regulator-always-on;
}; };
vddctrl_reg: regulator@2 { vddctrl_reg: vddctrl {
reg = <2>;
regulator-compatible = "vddctrl";
regulator-name = "vdd_cpu,vdd_sys"; regulator-name = "vdd_cpu,vdd_sys";
regulator-min-microvolt = <1000000>; regulator-min-microvolt = <1000000>;
regulator-max-microvolt = <1000000>; regulator-max-microvolt = <1000000>;
regulator-always-on; regulator-always-on;
}; };
vio_reg: regulator@3 { vio_reg: vio {
reg = <3>;
regulator-compatible = "vio";
regulator-name = "vdd_1v8_gen"; regulator-name = "vdd_1v8_gen";
regulator-min-microvolt = <1800000>; regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>; regulator-max-microvolt = <1800000>;
regulator-always-on; regulator-always-on;
}; };
ldo1_reg: regulator@4 { ldo1_reg: ldo1 {
reg = <4>;
regulator-compatible = "ldo1";
regulator-name = "vdd_pexa,vdd_pexb"; regulator-name = "vdd_pexa,vdd_pexb";
regulator-min-microvolt = <1050000>; regulator-min-microvolt = <1050000>;
regulator-max-microvolt = <1050000>; regulator-max-microvolt = <1050000>;
}; };
ldo2_reg: regulator@5 { ldo2_reg: ldo2 {
reg = <5>;
regulator-compatible = "ldo2";
regulator-name = "vdd_sata,avdd_plle"; regulator-name = "vdd_sata,avdd_plle";
regulator-min-microvolt = <1050000>; regulator-min-microvolt = <1050000>;
regulator-max-microvolt = <1050000>; regulator-max-microvolt = <1050000>;
@ -228,44 +238,34 @@
/* LDO3 is not connected to anything */ /* LDO3 is not connected to anything */
ldo4_reg: regulator@7 { ldo4_reg: ldo4 {
reg = <7>;
regulator-compatible = "ldo4";
regulator-name = "vdd_rtc"; regulator-name = "vdd_rtc";
regulator-min-microvolt = <1200000>; regulator-min-microvolt = <1200000>;
regulator-max-microvolt = <1200000>; regulator-max-microvolt = <1200000>;
regulator-always-on; regulator-always-on;
}; };
ldo5_reg: regulator@8 { ldo5_reg: ldo5 {
reg = <8>;
regulator-compatible = "ldo5";
regulator-name = "vddio_sdmmc,avdd_vdac"; regulator-name = "vddio_sdmmc,avdd_vdac";
regulator-min-microvolt = <3300000>; regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>; regulator-max-microvolt = <3300000>;
regulator-always-on; regulator-always-on;
}; };
ldo6_reg: regulator@9 { ldo6_reg: ldo6 {
reg = <9>;
regulator-compatible = "ldo6";
regulator-name = "avdd_dsi_csi,pwrdet_mipi"; regulator-name = "avdd_dsi_csi,pwrdet_mipi";
regulator-min-microvolt = <1200000>; regulator-min-microvolt = <1200000>;
regulator-max-microvolt = <1200000>; regulator-max-microvolt = <1200000>;
}; };
ldo7_reg: regulator@10 { ldo7_reg: ldo7 {
reg = <10>;
regulator-compatible = "ldo7";
regulator-name = "vdd_pllm,x,u,a_p_c_s"; regulator-name = "vdd_pllm,x,u,a_p_c_s";
regulator-min-microvolt = <1200000>; regulator-min-microvolt = <1200000>;
regulator-max-microvolt = <1200000>; regulator-max-microvolt = <1200000>;
regulator-always-on; regulator-always-on;
}; };
ldo8_reg: regulator@11 { ldo8_reg: ldo8 {
reg = <11>;
regulator-compatible = "ldo8";
regulator-name = "vdd_ddr_hs"; regulator-name = "vdd_ddr_hs";
regulator-min-microvolt = <1000000>; regulator-min-microvolt = <1000000>;
regulator-max-microvolt = <1000000>; regulator-max-microvolt = <1000000>;
@ -275,6 +275,16 @@
}; };
}; };
spi@7000da00 {
status = "okay";
spi-max-frequency = <25000000>;
spi-flash@1 {
compatible = "winbond,w25q32";
reg = <1>;
spi-max-frequency = <20000000>;
};
};
ahub { ahub {
i2s@70080400 { i2s@70080400 {
status = "okay"; status = "okay";
@ -409,6 +419,8 @@
regulator-name = "vdd_com"; regulator-name = "vdd_com";
regulator-min-microvolt = <3300000>; regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>; regulator-max-microvolt = <3300000>;
regulator-always-on;
regulator-boot-on;
enable-active-high; enable-active-high;
gpio = <&gpio 24 0>; /* gpio PD0 */ gpio = <&gpio 24 0>; /* gpio PD0 */
vin-supply = <&sys_3v3_reg>; vin-supply = <&sys_3v3_reg>;

View file

@ -4,6 +4,102 @@
compatible = "nvidia,tegra30"; compatible = "nvidia,tegra30";
interrupt-parent = <&intc>; interrupt-parent = <&intc>;
host1x {
compatible = "nvidia,tegra30-host1x", "simple-bus";
reg = <0x50000000 0x00024000>;
interrupts = <0 65 0x04 /* mpcore syncpt */
0 67 0x04>; /* mpcore general */
#address-cells = <1>;
#size-cells = <1>;
ranges = <0x54000000 0x54000000 0x04000000>;
mpe {
compatible = "nvidia,tegra30-mpe";
reg = <0x54040000 0x00040000>;
interrupts = <0 68 0x04>;
};
vi {
compatible = "nvidia,tegra30-vi";
reg = <0x54080000 0x00040000>;
interrupts = <0 69 0x04>;
};
epp {
compatible = "nvidia,tegra30-epp";
reg = <0x540c0000 0x00040000>;
interrupts = <0 70 0x04>;
};
isp {
compatible = "nvidia,tegra30-isp";
reg = <0x54100000 0x00040000>;
interrupts = <0 71 0x04>;
};
gr2d {
compatible = "nvidia,tegra30-gr2d";
reg = <0x54140000 0x00040000>;
interrupts = <0 72 0x04>;
};
gr3d {
compatible = "nvidia,tegra30-gr3d";
reg = <0x54180000 0x00040000>;
};
dc@54200000 {
compatible = "nvidia,tegra30-dc";
reg = <0x54200000 0x00040000>;
interrupts = <0 73 0x04>;
rgb {
status = "disabled";
};
};
dc@54240000 {
compatible = "nvidia,tegra30-dc";
reg = <0x54240000 0x00040000>;
interrupts = <0 74 0x04>;
rgb {
status = "disabled";
};
};
hdmi {
compatible = "nvidia,tegra30-hdmi";
reg = <0x54280000 0x00040000>;
interrupts = <0 75 0x04>;
status = "disabled";
};
tvo {
compatible = "nvidia,tegra30-tvo";
reg = <0x542c0000 0x00040000>;
interrupts = <0 76 0x04>;
status = "disabled";
};
dsi {
compatible = "nvidia,tegra30-dsi";
reg = <0x54300000 0x00040000>;
status = "disabled";
};
};
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>;
};
intc: interrupt-controller { intc: interrupt-controller {
compatible = "arm,cortex-a9-gic"; compatible = "arm,cortex-a9-gic";
reg = <0x50041000 0x1000 reg = <0x50041000 0x1000
@ -168,6 +264,66 @@
status = "disabled"; status = "disabled";
}; };
spi@7000d400 {
compatible = "nvidia,tegra30-slink", "nvidia,tegra20-slink";
reg = <0x7000d400 0x200>;
interrupts = <0 59 0x04>;
nvidia,dma-request-selector = <&apbdma 15>;
#address-cells = <1>;
#size-cells = <0>;
status = "disabled";
};
spi@7000d600 {
compatible = "nvidia,tegra30-slink", "nvidia,tegra20-slink";
reg = <0x7000d600 0x200>;
interrupts = <0 82 0x04>;
nvidia,dma-request-selector = <&apbdma 16>;
#address-cells = <1>;
#size-cells = <0>;
status = "disabled";
};
spi@7000d800 {
compatible = "nvidia,tegra30-slink", "nvidia,tegra20-slink";
reg = <0x7000d480 0x200>;
interrupts = <0 83 0x04>;
nvidia,dma-request-selector = <&apbdma 17>;
#address-cells = <1>;
#size-cells = <0>;
status = "disabled";
};
spi@7000da00 {
compatible = "nvidia,tegra30-slink", "nvidia,tegra20-slink";
reg = <0x7000da00 0x200>;
interrupts = <0 93 0x04>;
nvidia,dma-request-selector = <&apbdma 18>;
#address-cells = <1>;
#size-cells = <0>;
status = "disabled";
};
spi@7000dc00 {
compatible = "nvidia,tegra30-slink", "nvidia,tegra20-slink";
reg = <0x7000dc00 0x200>;
interrupts = <0 94 0x04>;
nvidia,dma-request-selector = <&apbdma 27>;
#address-cells = <1>;
#size-cells = <0>;
status = "disabled";
};
spi@7000de00 {
compatible = "nvidia,tegra30-slink", "nvidia,tegra20-slink";
reg = <0x7000de00 0x200>;
interrupts = <0 79 0x04>;
nvidia,dma-request-selector = <&apbdma 28>;
#address-cells = <1>;
#size-cells = <0>;
status = "disabled";
};
pmc { pmc {
compatible = "nvidia,tegra20-pmc", "nvidia,tegra30-pmc"; compatible = "nvidia,tegra20-pmc", "nvidia,tegra30-pmc";
reg = <0x7000e400 0x400>; reg = <0x7000e400 0x400>;

View file

@ -12,10 +12,12 @@ obj-$(CONFIG_CPU_IDLE) += cpuidle.o
obj-$(CONFIG_CPU_IDLE) += sleep.o obj-$(CONFIG_CPU_IDLE) += sleep.o
obj-$(CONFIG_ARCH_TEGRA_2x_SOC) += tegra20_clocks.o obj-$(CONFIG_ARCH_TEGRA_2x_SOC) += tegra20_clocks.o
obj-$(CONFIG_ARCH_TEGRA_2x_SOC) += tegra20_clocks_data.o obj-$(CONFIG_ARCH_TEGRA_2x_SOC) += tegra20_clocks_data.o
obj-$(CONFIG_ARCH_TEGRA_2x_SOC) += tegra20_speedo.o
obj-$(CONFIG_ARCH_TEGRA_2x_SOC) += tegra2_emc.o obj-$(CONFIG_ARCH_TEGRA_2x_SOC) += tegra2_emc.o
obj-$(CONFIG_ARCH_TEGRA_2x_SOC) += sleep-t20.o obj-$(CONFIG_ARCH_TEGRA_2x_SOC) += sleep-t20.o
obj-$(CONFIG_ARCH_TEGRA_3x_SOC) += tegra30_clocks.o obj-$(CONFIG_ARCH_TEGRA_3x_SOC) += tegra30_clocks.o
obj-$(CONFIG_ARCH_TEGRA_3x_SOC) += tegra30_clocks_data.o obj-$(CONFIG_ARCH_TEGRA_3x_SOC) += tegra30_clocks_data.o
obj-$(CONFIG_ARCH_TEGRA_3x_SOC) += tegra30_speedo.o
obj-$(CONFIG_ARCH_TEGRA_3x_SOC) += sleep-t30.o obj-$(CONFIG_ARCH_TEGRA_3x_SOC) += sleep-t30.o
obj-$(CONFIG_SMP) += platsmp.o headsmp.o obj-$(CONFIG_SMP) += platsmp.o headsmp.o
obj-$(CONFIG_SMP) += reset.o obj-$(CONFIG_SMP) += reset.o

View file

@ -15,7 +15,6 @@
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/io.h> #include <linux/io.h>
#include <mach/iomap.h>
#include <linux/of.h> #include <linux/of.h>
#include <linux/dmaengine.h> #include <linux/dmaengine.h>
#include <linux/dma-mapping.h> #include <linux/dma-mapping.h>
@ -24,9 +23,8 @@
#include <linux/sched.h> #include <linux/sched.h>
#include <linux/mutex.h> #include <linux/mutex.h>
#include <mach/dma.h>
#include "apbio.h" #include "apbio.h"
#include "iomap.h"
#if defined(CONFIG_TEGRA20_APB_DMA) #if defined(CONFIG_TEGRA20_APB_DMA)
static DEFINE_MUTEX(tegra_apb_dma_lock); static DEFINE_MUTEX(tegra_apb_dma_lock);
@ -71,7 +69,6 @@ bool tegra_apb_dma_init(void)
dma_sconfig.src_addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES; dma_sconfig.src_addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES;
dma_sconfig.dst_addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES; dma_sconfig.dst_addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES;
dma_sconfig.slave_id = TEGRA_DMA_REQ_SEL_CNTR;
dma_sconfig.src_maxburst = 1; dma_sconfig.src_maxburst = 1;
dma_sconfig.dst_maxburst = 1; dma_sconfig.dst_maxburst = 1;

View file

@ -40,12 +40,10 @@
#include <asm/mach/time.h> #include <asm/mach/time.h>
#include <asm/setup.h> #include <asm/setup.h>
#include <mach/iomap.h>
#include <mach/irqs.h>
#include "board.h" #include "board.h"
#include "clock.h" #include "clock.h"
#include "common.h" #include "common.h"
#include "iomap.h"
struct tegra_ehci_platform_data tegra_ehci1_pdata = { struct tegra_ehci_platform_data tegra_ehci1_pdata = {
.operating_mode = TEGRA_USB_OTG, .operating_mode = TEGRA_USB_OTG,
@ -91,6 +89,17 @@ struct of_dev_auxdata tegra20_auxdata_lookup[] __initdata = {
&tegra_ehci3_pdata), &tegra_ehci3_pdata),
OF_DEV_AUXDATA("nvidia,tegra20-apbdma", TEGRA_APB_DMA_BASE, "tegra-apbdma", NULL), OF_DEV_AUXDATA("nvidia,tegra20-apbdma", TEGRA_APB_DMA_BASE, "tegra-apbdma", NULL),
OF_DEV_AUXDATA("nvidia,tegra20-pwm", TEGRA_PWFM_BASE, "tegra-pwm", NULL), OF_DEV_AUXDATA("nvidia,tegra20-pwm", TEGRA_PWFM_BASE, "tegra-pwm", NULL),
OF_DEV_AUXDATA("nvidia,tegra20-sflash", 0x7000c380, "spi", NULL),
OF_DEV_AUXDATA("nvidia,tegra20-slink", 0x7000D400, "spi_tegra.0", NULL),
OF_DEV_AUXDATA("nvidia,tegra20-slink", 0x7000D600, "spi_tegra.1", NULL),
OF_DEV_AUXDATA("nvidia,tegra20-slink", 0x7000D800, "spi_tegra.2", NULL),
OF_DEV_AUXDATA("nvidia,tegra20-slink", 0x7000DA00, "spi_tegra.3", NULL),
OF_DEV_AUXDATA("nvidia,tegra20-host1x", 0x50000000, "host1x", NULL),
OF_DEV_AUXDATA("nvidia,tegra20-dc", 0x54200000, "tegradc.0", NULL),
OF_DEV_AUXDATA("nvidia,tegra20-dc", 0x54240000, "tegradc.1", NULL),
OF_DEV_AUXDATA("nvidia,tegra20-hdmi", 0x54280000, "hdmi", NULL),
OF_DEV_AUXDATA("nvidia,tegra20-dsi", 0x54300000, "dsi", NULL),
OF_DEV_AUXDATA("nvidia,tegra20-tvo", 0x542c0000, "tvo", NULL),
{} {}
}; };
@ -104,8 +113,20 @@ static __initdata struct tegra_clk_init_table tegra_dt_clk_init_table[] = {
{ "pll_a", "pll_p_out1", 56448000, true }, { "pll_a", "pll_p_out1", 56448000, true },
{ "pll_a_out0", "pll_a", 11289600, true }, { "pll_a_out0", "pll_a", 11289600, true },
{ "cdev1", NULL, 0, true }, { "cdev1", NULL, 0, true },
{ "blink", "clk_32k", 32768, true },
{ "i2s1", "pll_a_out0", 11289600, false}, { "i2s1", "pll_a_out0", 11289600, false},
{ "i2s2", "pll_a_out0", 11289600, false}, { "i2s2", "pll_a_out0", 11289600, false},
{ "sdmmc1", "pll_p", 48000000, false},
{ "sdmmc3", "pll_p", 48000000, false},
{ "sdmmc4", "pll_p", 48000000, false},
{ "spi", "pll_p", 20000000, false },
{ "sbc1", "pll_p", 100000000, false },
{ "sbc2", "pll_p", 100000000, false },
{ "sbc3", "pll_p", 100000000, false },
{ "sbc4", "pll_p", 100000000, false },
{ "host1x", "pll_c", 150000000, false },
{ "disp1", "pll_p", 600000000, false },
{ "disp2", "pll_p", 600000000, false },
{ NULL, NULL, 0, 0}, { NULL, NULL, 0, 0},
}; };

View file

@ -33,11 +33,10 @@
#include <asm/mach/arch.h> #include <asm/mach/arch.h>
#include <asm/hardware/gic.h> #include <asm/hardware/gic.h>
#include <mach/iomap.h>
#include "board.h" #include "board.h"
#include "clock.h" #include "clock.h"
#include "common.h" #include "common.h"
#include "iomap.h"
struct of_dev_auxdata tegra30_auxdata_lookup[] __initdata = { struct of_dev_auxdata tegra30_auxdata_lookup[] __initdata = {
OF_DEV_AUXDATA("nvidia,tegra20-sdhci", 0x78000000, "sdhci-tegra.0", NULL), OF_DEV_AUXDATA("nvidia,tegra20-sdhci", 0x78000000, "sdhci-tegra.0", NULL),
@ -52,6 +51,18 @@ struct of_dev_auxdata tegra30_auxdata_lookup[] __initdata = {
OF_DEV_AUXDATA("nvidia,tegra30-ahub", 0x70080000, "tegra30-ahub", NULL), OF_DEV_AUXDATA("nvidia,tegra30-ahub", 0x70080000, "tegra30-ahub", NULL),
OF_DEV_AUXDATA("nvidia,tegra30-apbdma", 0x6000a000, "tegra-apbdma", NULL), OF_DEV_AUXDATA("nvidia,tegra30-apbdma", 0x6000a000, "tegra-apbdma", NULL),
OF_DEV_AUXDATA("nvidia,tegra30-pwm", TEGRA_PWFM_BASE, "tegra-pwm", NULL), OF_DEV_AUXDATA("nvidia,tegra30-pwm", TEGRA_PWFM_BASE, "tegra-pwm", NULL),
OF_DEV_AUXDATA("nvidia,tegra30-slink", 0x7000D400, "spi_tegra.0", NULL),
OF_DEV_AUXDATA("nvidia,tegra30-slink", 0x7000D600, "spi_tegra.1", NULL),
OF_DEV_AUXDATA("nvidia,tegra30-slink", 0x7000D800, "spi_tegra.2", NULL),
OF_DEV_AUXDATA("nvidia,tegra30-slink", 0x7000DA00, "spi_tegra.3", NULL),
OF_DEV_AUXDATA("nvidia,tegra30-slink", 0x7000DC00, "spi_tegra.4", NULL),
OF_DEV_AUXDATA("nvidia,tegra30-slink", 0x7000DE00, "spi_tegra.5", NULL),
OF_DEV_AUXDATA("nvidia,tegra30-host1x", 0x50000000, "host1x", NULL),
OF_DEV_AUXDATA("nvidia,tegra30-dc", 0x54200000, "tegradc.0", NULL),
OF_DEV_AUXDATA("nvidia,tegra30-dc", 0x54240000, "tegradc.1", NULL),
OF_DEV_AUXDATA("nvidia,tegra30-hdmi", 0x54280000, "hdmi", NULL),
OF_DEV_AUXDATA("nvidia,tegra30-dsi", 0x54300000, "dsi", NULL),
OF_DEV_AUXDATA("nvidia,tegra30-tvo", 0x542c0000, "tvo", NULL),
{} {}
}; };
@ -62,11 +73,24 @@ static __initdata struct tegra_clk_init_table tegra_dt_clk_init_table[] = {
{ "pll_a_out0", "pll_a", 11289600, true }, { "pll_a_out0", "pll_a", 11289600, true },
{ "extern1", "pll_a_out0", 0, true }, { "extern1", "pll_a_out0", 0, true },
{ "clk_out_1", "extern1", 0, true }, { "clk_out_1", "extern1", 0, true },
{ "blink", "clk_32k", 32768, true },
{ "i2s0", "pll_a_out0", 11289600, false}, { "i2s0", "pll_a_out0", 11289600, false},
{ "i2s1", "pll_a_out0", 11289600, false}, { "i2s1", "pll_a_out0", 11289600, false},
{ "i2s2", "pll_a_out0", 11289600, false}, { "i2s2", "pll_a_out0", 11289600, false},
{ "i2s3", "pll_a_out0", 11289600, false}, { "i2s3", "pll_a_out0", 11289600, false},
{ "i2s4", "pll_a_out0", 11289600, false}, { "i2s4", "pll_a_out0", 11289600, false},
{ "sdmmc1", "pll_p", 48000000, false},
{ "sdmmc3", "pll_p", 48000000, false},
{ "sdmmc4", "pll_p", 48000000, false},
{ "sbc1", "pll_p", 100000000, false},
{ "sbc2", "pll_p", 100000000, false},
{ "sbc3", "pll_p", 100000000, false},
{ "sbc4", "pll_p", 100000000, false},
{ "sbc5", "pll_p", 100000000, false},
{ "sbc6", "pll_p", 100000000, false},
{ "host1x", "pll_c", 150000000, false},
{ "disp1", "pll_p", 600000000, false},
{ "disp2", "pll_p", 600000000, false},
{ NULL, NULL, 0, 0}, { NULL, NULL, 0, 0},
}; };

View file

@ -27,8 +27,6 @@
#include <linux/seq_file.h> #include <linux/seq_file.h>
#include <linux/slab.h> #include <linux/slab.h>
#include <mach/clk.h>
#include "board.h" #include "board.h"
#include "clock.h" #include "clock.h"
#include "tegra_cpu_car.h" #include "tegra_cpu_car.h"

View file

@ -26,13 +26,13 @@
#include <asm/hardware/cache-l2x0.h> #include <asm/hardware/cache-l2x0.h>
#include <asm/hardware/gic.h> #include <asm/hardware/gic.h>
#include <mach/iomap.h>
#include <mach/powergate.h> #include <mach/powergate.h>
#include "board.h" #include "board.h"
#include "clock.h" #include "clock.h"
#include "common.h" #include "common.h"
#include "fuse.h" #include "fuse.h"
#include "iomap.h"
#include "pmc.h" #include "pmc.h"
#include "apbio.h" #include "apbio.h"
#include "sleep.h" #include "sleep.h"
@ -104,25 +104,26 @@ static __initdata struct tegra_clk_init_table tegra30_clk_init_table[] = {
{ "clk_m", NULL, 0, true }, { "clk_m", NULL, 0, true },
{ "pll_p", "clk_m", 408000000, true }, { "pll_p", "clk_m", 408000000, true },
{ "pll_p_out1", "pll_p", 9600000, true }, { "pll_p_out1", "pll_p", 9600000, true },
{ "pll_p_out4", "pll_p", 102000000, true },
{ "sclk", "pll_p_out4", 102000000, true },
{ "hclk", "sclk", 102000000, true },
{ "pclk", "hclk", 51000000, true },
{ NULL, NULL, 0, 0}, { NULL, NULL, 0, 0},
}; };
#endif #endif
static void __init tegra_init_cache(u32 tag_latency, u32 data_latency) static void __init tegra_init_cache(void)
{ {
#ifdef CONFIG_CACHE_L2X0 #ifdef CONFIG_CACHE_L2X0
void __iomem *p = IO_ADDRESS(TEGRA_ARM_PERIF_BASE) + 0x3000; void __iomem *p = IO_ADDRESS(TEGRA_ARM_PERIF_BASE) + 0x3000;
u32 aux_ctrl, cache_type; u32 aux_ctrl, cache_type;
writel_relaxed(tag_latency, p + L2X0_TAG_LATENCY_CTRL);
writel_relaxed(data_latency, p + L2X0_DATA_LATENCY_CTRL);
cache_type = readl(p + L2X0_CACHE_TYPE); cache_type = readl(p + L2X0_CACHE_TYPE);
aux_ctrl = (cache_type & 0x700) << (17-8); aux_ctrl = (cache_type & 0x700) << (17-8);
aux_ctrl |= 0x6C000001; aux_ctrl |= 0x7C400001;
l2x0_init(p, aux_ctrl, 0x8200c3fe); l2x0_of_init(aux_ctrl, 0x8200c3fe);
#endif #endif
} }
@ -134,7 +135,7 @@ void __init tegra20_init_early(void)
tegra_init_fuse(); tegra_init_fuse();
tegra2_init_clocks(); tegra2_init_clocks();
tegra_clk_init_from_table(tegra20_clk_init_table); tegra_clk_init_from_table(tegra20_clk_init_table);
tegra_init_cache(0x331, 0x441); tegra_init_cache();
tegra_pmc_init(); tegra_pmc_init();
tegra_powergate_init(); tegra_powergate_init();
tegra20_hotplug_init(); tegra20_hotplug_init();
@ -147,7 +148,7 @@ void __init tegra30_init_early(void)
tegra_init_fuse(); tegra_init_fuse();
tegra30_init_clocks(); tegra30_init_clocks();
tegra_clk_init_from_table(tegra30_clk_init_table); tegra_clk_init_from_table(tegra30_clk_init_table);
tegra_init_cache(0x441, 0x551); tegra_init_cache();
tegra_pmc_init(); tegra_pmc_init();
tegra_powergate_init(); tegra_powergate_init();
tegra30_hotplug_init(); tegra30_hotplug_init();

View file

@ -30,9 +30,6 @@
#include <linux/io.h> #include <linux/io.h>
#include <linux/suspend.h> #include <linux/suspend.h>
#include <mach/clk.h>
/* Frequency table index must be sequential starting at 0 */ /* Frequency table index must be sequential starting at 0 */
static struct cpufreq_frequency_table freq_table[] = { static struct cpufreq_frequency_table freq_table[] = {
{ 0, 216000 }, { 0, 216000 },

View file

@ -29,8 +29,6 @@
#include <asm/proc-fns.h> #include <asm/proc-fns.h>
#include <mach/iomap.h>
static int tegra_idle_enter_lp3(struct cpuidle_device *dev, static int tegra_idle_enter_lp3(struct cpuidle_device *dev,
struct cpuidle_driver *drv, int index); struct cpuidle_driver *drv, int index);

View file

@ -22,9 +22,8 @@
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/io.h> #include <linux/io.h>
#include <mach/iomap.h>
#include "flowctrl.h" #include "flowctrl.h"
#include "iomap.h"
u8 flowctrl_offset_halt_cpu[] = { u8 flowctrl_offset_halt_cpu[] = {
FLOW_CTRL_HALT_CPU0_EVENTS, FLOW_CTRL_HALT_CPU0_EVENTS,

View file

@ -21,22 +21,28 @@
#include <linux/io.h> #include <linux/io.h>
#include <linux/export.h> #include <linux/export.h>
#include <mach/iomap.h>
#include "fuse.h" #include "fuse.h"
#include "iomap.h"
#include "apbio.h" #include "apbio.h"
#define FUSE_UID_LOW 0x108 #define FUSE_UID_LOW 0x108
#define FUSE_UID_HIGH 0x10c #define FUSE_UID_HIGH 0x10c
#define FUSE_SKU_INFO 0x110 #define FUSE_SKU_INFO 0x110
#define FUSE_SPARE_BIT 0x200
#define TEGRA20_FUSE_SPARE_BIT 0x200
#define TEGRA30_FUSE_SPARE_BIT 0x244
int tegra_sku_id; int tegra_sku_id;
int tegra_cpu_process_id; int tegra_cpu_process_id;
int tegra_core_process_id; int tegra_core_process_id;
int tegra_chip_id; int tegra_chip_id;
int tegra_cpu_speedo_id; /* only exist in Tegra30 and later */
int tegra_soc_speedo_id;
enum tegra_revision tegra_revision; enum tegra_revision tegra_revision;
static int tegra_fuse_spare_bit;
static void (*tegra_init_speedo_data)(void);
/* The BCT to use at boot is specified by board straps that can be read /* The BCT to use at boot is specified by board straps that can be read
* through a APB misc register and decoded. 2 bits, i.e. 4 possible BCTs. * through a APB misc register and decoded. 2 bits, i.e. 4 possible BCTs.
*/ */
@ -57,14 +63,14 @@ static const char *tegra_revision_name[TEGRA_REVISION_MAX] = {
[TEGRA_REVISION_A04] = "A04", [TEGRA_REVISION_A04] = "A04",
}; };
static inline u32 tegra_fuse_readl(unsigned long offset) u32 tegra_fuse_readl(unsigned long offset)
{ {
return tegra_apb_readl(TEGRA_FUSE_BASE + offset); return tegra_apb_readl(TEGRA_FUSE_BASE + offset);
} }
static inline bool get_spare_fuse(int bit) bool tegra_spare_fuse(int bit)
{ {
return tegra_fuse_readl(FUSE_SPARE_BIT + bit * 4); return tegra_fuse_readl(tegra_fuse_spare_bit + bit * 4);
} }
static enum tegra_revision tegra_get_revision(u32 id) static enum tegra_revision tegra_get_revision(u32 id)
@ -78,7 +84,7 @@ static enum tegra_revision tegra_get_revision(u32 id)
return TEGRA_REVISION_A02; return TEGRA_REVISION_A02;
case 3: case 3:
if (tegra_chip_id == TEGRA20 && if (tegra_chip_id == TEGRA20 &&
(get_spare_fuse(18) || get_spare_fuse(19))) (tegra_spare_fuse(18) || tegra_spare_fuse(19)))
return TEGRA_REVISION_A03p; return TEGRA_REVISION_A03p;
else else
return TEGRA_REVISION_A03; return TEGRA_REVISION_A03;
@ -89,6 +95,16 @@ static enum tegra_revision tegra_get_revision(u32 id)
} }
} }
static void tegra_get_process_id(void)
{
u32 reg;
reg = tegra_fuse_readl(tegra_fuse_spare_bit);
tegra_cpu_process_id = (reg >> 6) & 3;
reg = tegra_fuse_readl(tegra_fuse_spare_bit);
tegra_core_process_id = (reg >> 12) & 3;
}
void tegra_init_fuse(void) void tegra_init_fuse(void)
{ {
u32 id; u32 id;
@ -100,19 +116,29 @@ void tegra_init_fuse(void)
reg = tegra_fuse_readl(FUSE_SKU_INFO); reg = tegra_fuse_readl(FUSE_SKU_INFO);
tegra_sku_id = reg & 0xFF; tegra_sku_id = reg & 0xFF;
reg = tegra_fuse_readl(FUSE_SPARE_BIT);
tegra_cpu_process_id = (reg >> 6) & 3;
reg = tegra_fuse_readl(FUSE_SPARE_BIT);
tegra_core_process_id = (reg >> 12) & 3;
reg = tegra_apb_readl(TEGRA_APB_MISC_BASE + STRAP_OPT); reg = tegra_apb_readl(TEGRA_APB_MISC_BASE + STRAP_OPT);
tegra_bct_strapping = (reg & RAM_ID_MASK) >> RAM_CODE_SHIFT; tegra_bct_strapping = (reg & RAM_ID_MASK) >> RAM_CODE_SHIFT;
id = readl_relaxed(IO_ADDRESS(TEGRA_APB_MISC_BASE) + 0x804); id = readl_relaxed(IO_ADDRESS(TEGRA_APB_MISC_BASE) + 0x804);
tegra_chip_id = (id >> 8) & 0xff; tegra_chip_id = (id >> 8) & 0xff;
switch (tegra_chip_id) {
case TEGRA20:
tegra_fuse_spare_bit = TEGRA20_FUSE_SPARE_BIT;
tegra_init_speedo_data = &tegra20_init_speedo_data;
break;
case TEGRA30:
tegra_fuse_spare_bit = TEGRA30_FUSE_SPARE_BIT;
tegra_init_speedo_data = &tegra30_init_speedo_data;
break;
default:
pr_warn("Tegra: unknown chip id %d\n", tegra_chip_id);
tegra_fuse_spare_bit = TEGRA20_FUSE_SPARE_BIT;
tegra_init_speedo_data = &tegra_get_process_id;
}
tegra_revision = tegra_get_revision(id); tegra_revision = tegra_get_revision(id);
tegra_init_speedo_data();
pr_info("Tegra Revision: %s SKU: %d CPU Process: %d Core Process: %d\n", pr_info("Tegra Revision: %s SKU: %d CPU Process: %d Core Process: %d\n",
tegra_revision_name[tegra_revision], tegra_revision_name[tegra_revision],

View file

@ -42,11 +42,27 @@ extern int tegra_sku_id;
extern int tegra_cpu_process_id; extern int tegra_cpu_process_id;
extern int tegra_core_process_id; extern int tegra_core_process_id;
extern int tegra_chip_id; extern int tegra_chip_id;
extern int tegra_cpu_speedo_id; /* only exist in Tegra30 and later */
extern int tegra_soc_speedo_id;
extern enum tegra_revision tegra_revision; extern enum tegra_revision tegra_revision;
extern int tegra_bct_strapping; extern int tegra_bct_strapping;
unsigned long long tegra_chip_uid(void); unsigned long long tegra_chip_uid(void);
void tegra_init_fuse(void); void tegra_init_fuse(void);
bool tegra_spare_fuse(int bit);
u32 tegra_fuse_readl(unsigned long offset);
#ifdef CONFIG_ARCH_TEGRA_2x_SOC
void tegra20_init_speedo_data(void);
#else
static inline void tegra20_init_speedo_data(void) {}
#endif
#ifdef CONFIG_ARCH_TEGRA_3x_SOC
void tegra30_init_speedo_data(void);
#else
static inline void tegra30_init_speedo_data(void) {}
#endif
#endif #endif

View file

@ -3,9 +3,8 @@
#include <asm/cache.h> #include <asm/cache.h>
#include <mach/iomap.h>
#include "flowctrl.h" #include "flowctrl.h"
#include "iomap.h"
#include "reset.h" #include "reset.h"
#include "sleep.h" #include "sleep.h"

View file

@ -26,8 +26,8 @@
#include <linux/serial_reg.h> #include <linux/serial_reg.h>
#include <mach/iomap.h> #include "../../iomap.h"
#include <mach/irammap.h> #include "../../irammap.h"
.macro addruart, rp, rv, tmp .macro addruart, rp, rv, tmp
adr \rp, 99f @ actual addr of 99f adr \rp, 99f @ actual addr of 99f

View file

@ -1,54 +0,0 @@
/*
* arch/arm/mach-tegra/include/mach/dma.h
*
* Copyright (c) 2008-2009, NVIDIA Corporation.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
#ifndef __MACH_TEGRA_DMA_H
#define __MACH_TEGRA_DMA_H
#include <linux/list.h>
#define TEGRA_DMA_REQ_SEL_CNTR 0
#define TEGRA_DMA_REQ_SEL_I2S_2 1
#define TEGRA_DMA_REQ_SEL_I2S_1 2
#define TEGRA_DMA_REQ_SEL_SPD_I 3
#define TEGRA_DMA_REQ_SEL_UI_I 4
#define TEGRA_DMA_REQ_SEL_MIPI 5
#define TEGRA_DMA_REQ_SEL_I2S2_2 6
#define TEGRA_DMA_REQ_SEL_I2S2_1 7
#define TEGRA_DMA_REQ_SEL_UARTA 8
#define TEGRA_DMA_REQ_SEL_UARTB 9
#define TEGRA_DMA_REQ_SEL_UARTC 10
#define TEGRA_DMA_REQ_SEL_SPI 11
#define TEGRA_DMA_REQ_SEL_AC97 12
#define TEGRA_DMA_REQ_SEL_ACMODEM 13
#define TEGRA_DMA_REQ_SEL_SL4B 14
#define TEGRA_DMA_REQ_SEL_SL2B1 15
#define TEGRA_DMA_REQ_SEL_SL2B2 16
#define TEGRA_DMA_REQ_SEL_SL2B3 17
#define TEGRA_DMA_REQ_SEL_SL2B4 18
#define TEGRA_DMA_REQ_SEL_UARTD 19
#define TEGRA_DMA_REQ_SEL_UARTE 20
#define TEGRA_DMA_REQ_SEL_I2C 21
#define TEGRA_DMA_REQ_SEL_I2C2 22
#define TEGRA_DMA_REQ_SEL_I2C3 23
#define TEGRA_DMA_REQ_SEL_DVC_I2C 24
#define TEGRA_DMA_REQ_SEL_OWR 25
#define TEGRA_DMA_REQ_SEL_INVALID 31
#endif

View file

@ -20,6 +20,8 @@
#ifndef _MACH_TEGRA_POWERGATE_H_ #ifndef _MACH_TEGRA_POWERGATE_H_
#define _MACH_TEGRA_POWERGATE_H_ #define _MACH_TEGRA_POWERGATE_H_
struct clk;
#define TEGRA_POWERGATE_CPU 0 #define TEGRA_POWERGATE_CPU 0
#define TEGRA_POWERGATE_3D 1 #define TEGRA_POWERGATE_3D 1
#define TEGRA_POWERGATE_VENC 2 #define TEGRA_POWERGATE_VENC 2

View file

@ -28,8 +28,8 @@
#include <linux/types.h> #include <linux/types.h>
#include <linux/serial_reg.h> #include <linux/serial_reg.h>
#include <mach/iomap.h> #include "../../iomap.h"
#include <mach/irammap.h> #include "../../irammap.h"
#define BIT(x) (1 << (x)) #define BIT(x) (1 << (x))
#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0])) #define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]))

View file

@ -26,9 +26,9 @@
#include <asm/page.h> #include <asm/page.h>
#include <asm/mach/map.h> #include <asm/mach/map.h>
#include <mach/iomap.h>
#include "board.h" #include "board.h"
#include "iomap.h"
static struct map_desc tegra_io_desc[] __initdata = { static struct map_desc tegra_io_desc[] __initdata = {
{ {

View file

@ -1,6 +1,4 @@
/* /*
* arch/arm/mach-tegra/include/mach/iomap.h
*
* Copyright (C) 2010 Google, Inc. * Copyright (C) 2010 Google, Inc.
* *
* Author: * Author:

View file

@ -25,9 +25,8 @@
#include <asm/hardware/gic.h> #include <asm/hardware/gic.h>
#include <mach/iomap.h>
#include "board.h" #include "board.h"
#include "iomap.h"
#define ICTLR_CPU_IEP_VFIQ 0x08 #define ICTLR_CPU_IEP_VFIQ 0x08
#define ICTLR_CPU_IEP_FIR 0x14 #define ICTLR_CPU_IEP_FIR 0x14

View file

@ -37,11 +37,11 @@
#include <asm/sizes.h> #include <asm/sizes.h>
#include <asm/mach/pci.h> #include <asm/mach/pci.h>
#include <mach/iomap.h>
#include <mach/clk.h> #include <mach/clk.h>
#include <mach/powergate.h> #include <mach/powergate.h>
#include "board.h" #include "board.h"
#include "iomap.h"
/* register definitions */ /* register definitions */
#define AFI_OFFSET 0x3800 #define AFI_OFFSET 0x3800

View file

@ -24,8 +24,6 @@
#include <asm/mach-types.h> #include <asm/mach-types.h>
#include <asm/smp_scu.h> #include <asm/smp_scu.h>
#include <mach/clk.h>
#include <mach/iomap.h>
#include <mach/powergate.h> #include <mach/powergate.h>
#include "fuse.h" #include "fuse.h"
@ -34,6 +32,7 @@
#include "tegra_cpu_car.h" #include "tegra_cpu_car.h"
#include "common.h" #include "common.h"
#include "iomap.h"
extern void tegra_secondary_startup(void); extern void tegra_secondary_startup(void);

View file

@ -19,7 +19,7 @@
#include <linux/io.h> #include <linux/io.h>
#include <linux/of.h> #include <linux/of.h>
#include <mach/iomap.h> #include "iomap.h"
#define PMC_CTRL 0x0 #define PMC_CTRL 0x0
#define PMC_CTRL_INTR_LOW (1 << 17) #define PMC_CTRL_INTR_LOW (1 << 17)

View file

@ -28,10 +28,10 @@
#include <linux/spinlock.h> #include <linux/spinlock.h>
#include <mach/clk.h> #include <mach/clk.h>
#include <mach/iomap.h>
#include <mach/powergate.h> #include <mach/powergate.h>
#include "fuse.h" #include "fuse.h"
#include "iomap.h"
#define PWRGATE_TOGGLE 0x30 #define PWRGATE_TOGGLE 0x30
#define PWRGATE_TOGGLE_START (1 << 8) #define PWRGATE_TOGGLE_START (1 << 8)

View file

@ -22,9 +22,8 @@
#include <asm/cacheflush.h> #include <asm/cacheflush.h>
#include <asm/hardware/cache-l2x0.h> #include <asm/hardware/cache-l2x0.h>
#include <mach/iomap.h> #include "iomap.h"
#include <mach/irammap.h> #include "irammap.h"
#include "reset.h" #include "reset.h"
#include "fuse.h" #include "fuse.h"

View file

@ -22,8 +22,6 @@
#include <asm/assembler.h> #include <asm/assembler.h>
#include <mach/iomap.h>
#include "sleep.h" #include "sleep.h"
#include "flowctrl.h" #include "flowctrl.h"

View file

@ -18,8 +18,6 @@
#include <asm/assembler.h> #include <asm/assembler.h>
#include <mach/iomap.h>
#include "sleep.h" #include "sleep.h"
#include "flowctrl.h" #include "flowctrl.h"

View file

@ -26,7 +26,7 @@
#include <asm/assembler.h> #include <asm/assembler.h>
#include <mach/iomap.h> #include "iomap.h"
#include "flowctrl.h" #include "flowctrl.h"
#include "sleep.h" #include "sleep.h"

View file

@ -17,7 +17,7 @@
#ifndef __MACH_TEGRA_SLEEP_H #ifndef __MACH_TEGRA_SLEEP_H
#define __MACH_TEGRA_SLEEP_H #define __MACH_TEGRA_SLEEP_H
#include <mach/iomap.h> #include "iomap.h"
#define TEGRA_ARM_PERIF_VIRT (TEGRA_ARM_PERIF_BASE - IO_CPU_PHYS \ #define TEGRA_ARM_PERIF_VIRT (TEGRA_ARM_PERIF_BASE - IO_CPU_PHYS \
+ IO_CPU_VIRT) + IO_CPU_VIRT)

View file

@ -27,10 +27,9 @@
#include <linux/clkdev.h> #include <linux/clkdev.h>
#include <linux/clk.h> #include <linux/clk.h>
#include <mach/iomap.h>
#include "clock.h" #include "clock.h"
#include "fuse.h" #include "fuse.h"
#include "iomap.h"
#include "tegra2_emc.h" #include "tegra2_emc.h"
#include "tegra_cpu_car.h" #include "tegra_cpu_car.h"

View file

@ -27,8 +27,6 @@
#include <linux/io.h> #include <linux/io.h>
#include <linux/clk.h> #include <linux/clk.h>
#include <mach/iomap.h>
#include "clock.h" #include "clock.h"
#include "fuse.h" #include "fuse.h"
#include "tegra2_emc.h" #include "tegra2_emc.h"
@ -248,11 +246,16 @@ static struct clk_pll_freq_table tegra_pll_d_freq_table[] = {
{ 19200000, 216000000, 135, 12, 1, 3}, { 19200000, 216000000, 135, 12, 1, 3},
{ 26000000, 216000000, 216, 26, 1, 4}, { 26000000, 216000000, 216, 26, 1, 4},
{ 12000000, 297000000, 99, 4, 1, 4 },
{ 12000000, 339000000, 113, 4, 1, 4 },
{ 12000000, 594000000, 594, 12, 1, 8}, { 12000000, 594000000, 594, 12, 1, 8},
{ 13000000, 594000000, 594, 13, 1, 8}, { 13000000, 594000000, 594, 13, 1, 8},
{ 19200000, 594000000, 495, 16, 1, 8}, { 19200000, 594000000, 495, 16, 1, 8},
{ 26000000, 594000000, 594, 26, 1, 8}, { 26000000, 594000000, 594, 26, 1, 8},
{ 12000000, 616000000, 616, 12, 1, 8},
{ 12000000, 1000000000, 1000, 12, 1, 12}, { 12000000, 1000000000, 1000, 12, 1, 12},
{ 13000000, 1000000000, 1000, 13, 1, 12}, { 13000000, 1000000000, 1000, 13, 1, 12},
{ 19200000, 1000000000, 625, 12, 1, 8}, { 19200000, 1000000000, 625, 12, 1, 8},
@ -1038,9 +1041,6 @@ static struct clk_duplicate tegra_clk_duplicates[] = {
CLK_DUPLICATE("usbd", "utmip-pad", NULL), CLK_DUPLICATE("usbd", "utmip-pad", NULL),
CLK_DUPLICATE("usbd", "tegra-ehci.0", NULL), CLK_DUPLICATE("usbd", "tegra-ehci.0", NULL),
CLK_DUPLICATE("usbd", "tegra-otg", NULL), CLK_DUPLICATE("usbd", "tegra-otg", NULL),
CLK_DUPLICATE("hdmi", "tegradc.0", "hdmi"),
CLK_DUPLICATE("hdmi", "tegradc.1", "hdmi"),
CLK_DUPLICATE("host1x", "tegra_grhost", "host1x"),
CLK_DUPLICATE("2d", "tegra_grhost", "gr2d"), CLK_DUPLICATE("2d", "tegra_grhost", "gr2d"),
CLK_DUPLICATE("3d", "tegra_grhost", "gr3d"), CLK_DUPLICATE("3d", "tegra_grhost", "gr3d"),
CLK_DUPLICATE("epp", "tegra_grhost", "epp"), CLK_DUPLICATE("epp", "tegra_grhost", "epp"),
@ -1053,6 +1053,9 @@ static struct clk_duplicate tegra_clk_duplicates[] = {
CLK_DUPLICATE("pll_p_out3", "tegra-i2c.1", "fast-clk"), CLK_DUPLICATE("pll_p_out3", "tegra-i2c.1", "fast-clk"),
CLK_DUPLICATE("pll_p_out3", "tegra-i2c.2", "fast-clk"), CLK_DUPLICATE("pll_p_out3", "tegra-i2c.2", "fast-clk"),
CLK_DUPLICATE("pll_p_out3", "tegra-i2c.3", "fast-clk"), CLK_DUPLICATE("pll_p_out3", "tegra-i2c.3", "fast-clk"),
CLK_DUPLICATE("pll_p", "tegradc.0", "parent"),
CLK_DUPLICATE("pll_p", "tegradc.1", "parent"),
CLK_DUPLICATE("pll_d_out0", "hdmi", "parent"),
}; };
#define CLK(dev, con, ck) \ #define CLK(dev, con, ck) \

View file

@ -0,0 +1,109 @@
/*
* Copyright (c) 2012, NVIDIA CORPORATION. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify it
* under the terms and conditions of the GNU General Public License,
* version 2, as published by the Free Software Foundation.
*
* This program is distributed in the hope it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include <linux/kernel.h>
#include <linux/bug.h>
#include "fuse.h"
#define CPU_SPEEDO_LSBIT 20
#define CPU_SPEEDO_MSBIT 29
#define CPU_SPEEDO_REDUND_LSBIT 30
#define CPU_SPEEDO_REDUND_MSBIT 39
#define CPU_SPEEDO_REDUND_OFFS (CPU_SPEEDO_REDUND_MSBIT - CPU_SPEEDO_MSBIT)
#define CORE_SPEEDO_LSBIT 40
#define CORE_SPEEDO_MSBIT 47
#define CORE_SPEEDO_REDUND_LSBIT 48
#define CORE_SPEEDO_REDUND_MSBIT 55
#define CORE_SPEEDO_REDUND_OFFS (CORE_SPEEDO_REDUND_MSBIT - CORE_SPEEDO_MSBIT)
#define SPEEDO_MULT 4
#define PROCESS_CORNERS_NUM 4
#define SPEEDO_ID_SELECT_0(rev) ((rev) <= 2)
#define SPEEDO_ID_SELECT_1(sku) \
(((sku) != 20) && ((sku) != 23) && ((sku) != 24) && \
((sku) != 27) && ((sku) != 28))
enum {
SPEEDO_ID_0,
SPEEDO_ID_1,
SPEEDO_ID_2,
SPEEDO_ID_COUNT,
};
static const u32 cpu_process_speedos[][PROCESS_CORNERS_NUM] = {
{315, 366, 420, UINT_MAX},
{303, 368, 419, UINT_MAX},
{316, 331, 383, UINT_MAX},
};
static const u32 core_process_speedos[][PROCESS_CORNERS_NUM] = {
{165, 195, 224, UINT_MAX},
{165, 195, 224, UINT_MAX},
{165, 195, 224, UINT_MAX},
};
void tegra20_init_speedo_data(void)
{
u32 reg;
u32 val;
int i;
BUILD_BUG_ON(ARRAY_SIZE(cpu_process_speedos) != SPEEDO_ID_COUNT);
BUILD_BUG_ON(ARRAY_SIZE(core_process_speedos) != SPEEDO_ID_COUNT);
if (SPEEDO_ID_SELECT_0(tegra_revision))
tegra_soc_speedo_id = SPEEDO_ID_0;
else if (SPEEDO_ID_SELECT_1(tegra_sku_id))
tegra_soc_speedo_id = SPEEDO_ID_1;
else
tegra_soc_speedo_id = SPEEDO_ID_2;
val = 0;
for (i = CPU_SPEEDO_MSBIT; i >= CPU_SPEEDO_LSBIT; i--) {
reg = tegra_spare_fuse(i) |
tegra_spare_fuse(i + CPU_SPEEDO_REDUND_OFFS);
val = (val << 1) | (reg & 0x1);
}
val = val * SPEEDO_MULT;
pr_debug("%s CPU speedo value %u\n", __func__, val);
for (i = 0; i < (PROCESS_CORNERS_NUM - 1); i++) {
if (val <= cpu_process_speedos[tegra_soc_speedo_id][i])
break;
}
tegra_cpu_process_id = i;
val = 0;
for (i = CORE_SPEEDO_MSBIT; i >= CORE_SPEEDO_LSBIT; i--) {
reg = tegra_spare_fuse(i) |
tegra_spare_fuse(i + CORE_SPEEDO_REDUND_OFFS);
val = (val << 1) | (reg & 0x1);
}
val = val * SPEEDO_MULT;
pr_debug("%s Core speedo value %u\n", __func__, val);
for (i = 0; i < (PROCESS_CORNERS_NUM - 1); i++) {
if (val <= core_process_speedos[tegra_soc_speedo_id][i])
break;
}
tegra_core_process_id = i;
pr_info("Tegra20 Soc Speedo ID %d", tegra_soc_speedo_id);
}

View file

@ -25,8 +25,6 @@
#include <linux/platform_device.h> #include <linux/platform_device.h>
#include <linux/platform_data/tegra_emc.h> #include <linux/platform_data/tegra_emc.h>
#include <mach/iomap.h>
#include "tegra2_emc.h" #include "tegra2_emc.h"
#include "fuse.h" #include "fuse.h"

View file

@ -31,10 +31,9 @@
#include <asm/clkdev.h> #include <asm/clkdev.h>
#include <mach/iomap.h>
#include "clock.h" #include "clock.h"
#include "fuse.h" #include "fuse.h"
#include "iomap.h"
#include "tegra_cpu_car.h" #include "tegra_cpu_car.h"
#define USE_PLL_LOCK_BITS 0 #define USE_PLL_LOCK_BITS 0
@ -792,6 +791,112 @@ struct clk_ops tegra30_twd_ops = {
.recalc_rate = tegra30_twd_clk_recalc_rate, .recalc_rate = tegra30_twd_clk_recalc_rate,
}; };
/* bus clock functions */
static int tegra30_bus_clk_is_enabled(struct clk_hw *hw)
{
struct clk_tegra *c = to_clk_tegra(hw);
u32 val = clk_readl(c->reg);
c->state = ((val >> c->reg_shift) & BUS_CLK_DISABLE) ? OFF : ON;
return c->state;
}
static int tegra30_bus_clk_enable(struct clk_hw *hw)
{
struct clk_tegra *c = to_clk_tegra(hw);
u32 val;
val = clk_readl(c->reg);
val &= ~(BUS_CLK_DISABLE << c->reg_shift);
clk_writel(val, c->reg);
return 0;
}
static void tegra30_bus_clk_disable(struct clk_hw *hw)
{
struct clk_tegra *c = to_clk_tegra(hw);
u32 val;
val = clk_readl(c->reg);
val |= BUS_CLK_DISABLE << c->reg_shift;
clk_writel(val, c->reg);
}
static unsigned long tegra30_bus_clk_recalc_rate(struct clk_hw *hw,
unsigned long prate)
{
struct clk_tegra *c = to_clk_tegra(hw);
u32 val = clk_readl(c->reg);
u64 rate = prate;
c->div = ((val >> c->reg_shift) & BUS_CLK_DIV_MASK) + 1;
c->mul = 1;
if (c->mul != 0 && c->div != 0) {
rate *= c->mul;
rate += c->div - 1; /* round up */
do_div(rate, c->div);
}
return rate;
}
static int tegra30_bus_clk_set_rate(struct clk_hw *hw, unsigned long rate,
unsigned long parent_rate)
{
struct clk_tegra *c = to_clk_tegra(hw);
int ret = -EINVAL;
u32 val;
int i;
val = clk_readl(c->reg);
for (i = 1; i <= 4; i++) {
if (rate == parent_rate / i) {
val &= ~(BUS_CLK_DIV_MASK << c->reg_shift);
val |= (i - 1) << c->reg_shift;
clk_writel(val, c->reg);
c->div = i;
c->mul = 1;
ret = 0;
break;
}
}
return ret;
}
static long tegra30_bus_clk_round_rate(struct clk_hw *hw, unsigned long rate,
unsigned long *prate)
{
unsigned long parent_rate = *prate;
s64 divider;
if (rate >= parent_rate)
return parent_rate;
divider = parent_rate;
divider += rate - 1;
do_div(divider, rate);
if (divider < 0)
return divider;
if (divider > 4)
divider = 4;
do_div(parent_rate, divider);
return parent_rate;
}
struct clk_ops tegra30_bus_ops = {
.is_enabled = tegra30_bus_clk_is_enabled,
.enable = tegra30_bus_clk_enable,
.disable = tegra30_bus_clk_disable,
.set_rate = tegra30_bus_clk_set_rate,
.round_rate = tegra30_bus_clk_round_rate,
.recalc_rate = tegra30_bus_clk_recalc_rate,
};
/* Blink output functions */ /* Blink output functions */
static int tegra30_blink_clk_is_enabled(struct clk_hw *hw) static int tegra30_blink_clk_is_enabled(struct clk_hw *hw)
{ {

View file

@ -34,6 +34,7 @@ extern struct clk_ops tegra_clk_out_ops;
extern struct clk_ops tegra30_super_ops; extern struct clk_ops tegra30_super_ops;
extern struct clk_ops tegra30_blink_clk_ops; extern struct clk_ops tegra30_blink_clk_ops;
extern struct clk_ops tegra30_twd_ops; extern struct clk_ops tegra30_twd_ops;
extern struct clk_ops tegra30_bus_ops;
extern struct clk_ops tegra30_periph_clk_ops; extern struct clk_ops tegra30_periph_clk_ops;
extern struct clk_ops tegra30_dsib_clk_ops; extern struct clk_ops tegra30_dsib_clk_ops;
extern struct clk_ops tegra_nand_clk_ops; extern struct clk_ops tegra_nand_clk_ops;

View file

@ -711,6 +711,50 @@ static struct clk tegra_clk_sclk = {
.num_parents = ARRAY_SIZE(mux_sclk), .num_parents = ARRAY_SIZE(mux_sclk),
}; };
static const char *tegra_hclk_parent_names[] = {
"tegra_sclk",
};
static struct clk *tegra_hclk_parents[] = {
&tegra_clk_sclk,
};
static struct clk tegra_hclk;
static struct clk_tegra tegra_hclk_hw = {
.hw = {
.clk = &tegra_hclk,
},
.flags = DIV_BUS,
.reg = 0x30,
.reg_shift = 4,
.max_rate = 378000000,
.min_rate = 12000000,
};
DEFINE_CLK_TEGRA(hclk, 0, &tegra30_bus_ops, 0, tegra_hclk_parent_names,
tegra_hclk_parents, &tegra_clk_sclk);
static const char *tegra_pclk_parent_names[] = {
"tegra_hclk",
};
static struct clk *tegra_pclk_parents[] = {
&tegra_hclk,
};
static struct clk tegra_pclk;
static struct clk_tegra tegra_pclk_hw = {
.hw = {
.clk = &tegra_pclk,
},
.flags = DIV_BUS,
.reg = 0x30,
.reg_shift = 0,
.max_rate = 167000000,
.min_rate = 12000000,
};
DEFINE_CLK_TEGRA(pclk, 0, &tegra30_bus_ops, 0, tegra_pclk_parent_names,
tegra_pclk_parents, &tegra_hclk);
static const char *mux_blink[] = { static const char *mux_blink[] = {
"clk_32k", "clk_32k",
}; };
@ -1254,8 +1298,6 @@ struct clk_duplicate tegra_clk_duplicates[] = {
CLK_DUPLICATE("usbd", "utmip-pad", NULL), CLK_DUPLICATE("usbd", "utmip-pad", NULL),
CLK_DUPLICATE("usbd", "tegra-ehci.0", NULL), CLK_DUPLICATE("usbd", "tegra-ehci.0", NULL),
CLK_DUPLICATE("usbd", "tegra-otg", NULL), CLK_DUPLICATE("usbd", "tegra-otg", NULL),
CLK_DUPLICATE("hdmi", "tegradc.0", "hdmi"),
CLK_DUPLICATE("hdmi", "tegradc.1", "hdmi"),
CLK_DUPLICATE("dsib", "tegradc.0", "dsib"), CLK_DUPLICATE("dsib", "tegradc.0", "dsib"),
CLK_DUPLICATE("dsia", "tegradc.1", "dsia"), CLK_DUPLICATE("dsia", "tegradc.1", "dsia"),
CLK_DUPLICATE("bsev", "tegra-avp", "bsev"), CLK_DUPLICATE("bsev", "tegra-avp", "bsev"),
@ -1293,6 +1335,9 @@ struct clk_duplicate tegra_clk_duplicates[] = {
CLK_DUPLICATE("pll_p_out3", "tegra-i2c.2", "fast-clk"), CLK_DUPLICATE("pll_p_out3", "tegra-i2c.2", "fast-clk"),
CLK_DUPLICATE("pll_p_out3", "tegra-i2c.3", "fast-clk"), CLK_DUPLICATE("pll_p_out3", "tegra-i2c.3", "fast-clk"),
CLK_DUPLICATE("pll_p_out3", "tegra-i2c.4", "fast-clk"), CLK_DUPLICATE("pll_p_out3", "tegra-i2c.4", "fast-clk"),
CLK_DUPLICATE("pll_p", "tegradc.0", "parent"),
CLK_DUPLICATE("pll_p", "tegradc.1", "parent"),
CLK_DUPLICATE("pll_d2_out0", "hdmi", "parent"),
}; };
struct clk *tegra_ptr_clks[] = { struct clk *tegra_ptr_clks[] = {
@ -1325,6 +1370,8 @@ struct clk *tegra_ptr_clks[] = {
&tegra_cml1, &tegra_cml1,
&tegra_pciex, &tegra_pciex,
&tegra_clk_sclk, &tegra_clk_sclk,
&tegra_hclk,
&tegra_pclk,
&tegra_clk_blink, &tegra_clk_blink,
&tegra30_clk_twd, &tegra30_clk_twd,
}; };

View file

@ -0,0 +1,292 @@
/*
* Copyright (c) 2012, NVIDIA CORPORATION. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify it
* under the terms and conditions of the GNU General Public License,
* version 2, as published by the Free Software Foundation.
*
* This program is distributed in the hope it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include <linux/kernel.h>
#include <linux/bug.h>
#include "fuse.h"
#define CORE_PROCESS_CORNERS_NUM 1
#define CPU_PROCESS_CORNERS_NUM 6
#define FUSE_SPEEDO_CALIB_0 0x114
#define FUSE_PACKAGE_INFO 0X1FC
#define FUSE_TEST_PROG_VER 0X128
#define G_SPEEDO_BIT_MINUS1 58
#define G_SPEEDO_BIT_MINUS1_R 59
#define G_SPEEDO_BIT_MINUS2 60
#define G_SPEEDO_BIT_MINUS2_R 61
#define LP_SPEEDO_BIT_MINUS1 62
#define LP_SPEEDO_BIT_MINUS1_R 63
#define LP_SPEEDO_BIT_MINUS2 64
#define LP_SPEEDO_BIT_MINUS2_R 65
enum {
THRESHOLD_INDEX_0,
THRESHOLD_INDEX_1,
THRESHOLD_INDEX_2,
THRESHOLD_INDEX_3,
THRESHOLD_INDEX_4,
THRESHOLD_INDEX_5,
THRESHOLD_INDEX_6,
THRESHOLD_INDEX_7,
THRESHOLD_INDEX_8,
THRESHOLD_INDEX_9,
THRESHOLD_INDEX_10,
THRESHOLD_INDEX_11,
THRESHOLD_INDEX_COUNT,
};
static const u32 core_process_speedos[][CORE_PROCESS_CORNERS_NUM] = {
{180},
{170},
{195},
{180},
{168},
{192},
{180},
{170},
{195},
{180},
{180},
{180},
};
static const u32 cpu_process_speedos[][CPU_PROCESS_CORNERS_NUM] = {
{306, 338, 360, 376, UINT_MAX},
{295, 336, 358, 375, UINT_MAX},
{325, 325, 358, 375, UINT_MAX},
{325, 325, 358, 375, UINT_MAX},
{292, 324, 348, 364, UINT_MAX},
{324, 324, 348, 364, UINT_MAX},
{324, 324, 348, 364, UINT_MAX},
{295, 336, 358, 375, UINT_MAX},
{358, 358, 358, 358, 397, UINT_MAX},
{364, 364, 364, 364, 397, UINT_MAX},
{295, 336, 358, 375, 391, UINT_MAX},
{295, 336, 358, 375, 391, UINT_MAX},
};
static int threshold_index;
static int package_id;
static void fuse_speedo_calib(u32 *speedo_g, u32 *speedo_lp)
{
u32 reg;
int ate_ver;
int bit_minus1;
int bit_minus2;
reg = tegra_fuse_readl(FUSE_SPEEDO_CALIB_0);
*speedo_lp = (reg & 0xFFFF) * 4;
*speedo_g = ((reg >> 16) & 0xFFFF) * 4;
ate_ver = tegra_fuse_readl(FUSE_TEST_PROG_VER);
pr_info("%s: ATE prog ver %d.%d\n", __func__, ate_ver/10, ate_ver%10);
if (ate_ver >= 26) {
bit_minus1 = tegra_spare_fuse(LP_SPEEDO_BIT_MINUS1);
bit_minus1 |= tegra_spare_fuse(LP_SPEEDO_BIT_MINUS1_R);
bit_minus2 = tegra_spare_fuse(LP_SPEEDO_BIT_MINUS2);
bit_minus2 |= tegra_spare_fuse(LP_SPEEDO_BIT_MINUS2_R);
*speedo_lp |= (bit_minus1 << 1) | bit_minus2;
bit_minus1 = tegra_spare_fuse(G_SPEEDO_BIT_MINUS1);
bit_minus1 |= tegra_spare_fuse(G_SPEEDO_BIT_MINUS1_R);
bit_minus2 = tegra_spare_fuse(G_SPEEDO_BIT_MINUS2);
bit_minus2 |= tegra_spare_fuse(G_SPEEDO_BIT_MINUS2_R);
*speedo_g |= (bit_minus1 << 1) | bit_minus2;
} else {
*speedo_lp |= 0x3;
*speedo_g |= 0x3;
}
}
static void rev_sku_to_speedo_ids(int rev, int sku)
{
switch (rev) {
case TEGRA_REVISION_A01:
tegra_cpu_speedo_id = 0;
tegra_soc_speedo_id = 0;
threshold_index = THRESHOLD_INDEX_0;
break;
case TEGRA_REVISION_A02:
case TEGRA_REVISION_A03:
switch (sku) {
case 0x87:
case 0x82:
tegra_cpu_speedo_id = 1;
tegra_soc_speedo_id = 1;
threshold_index = THRESHOLD_INDEX_1;
break;
case 0x81:
switch (package_id) {
case 1:
tegra_cpu_speedo_id = 2;
tegra_soc_speedo_id = 2;
threshold_index = THRESHOLD_INDEX_2;
break;
case 2:
tegra_cpu_speedo_id = 4;
tegra_soc_speedo_id = 1;
threshold_index = THRESHOLD_INDEX_7;
break;
default:
pr_err("Tegra30: Unknown pkg %d\n", package_id);
BUG();
break;
}
break;
case 0x80:
switch (package_id) {
case 1:
tegra_cpu_speedo_id = 5;
tegra_soc_speedo_id = 2;
threshold_index = THRESHOLD_INDEX_8;
break;
case 2:
tegra_cpu_speedo_id = 6;
tegra_soc_speedo_id = 2;
threshold_index = THRESHOLD_INDEX_9;
break;
default:
pr_err("Tegra30: Unknown pkg %d\n", package_id);
BUG();
break;
}
break;
case 0x83:
switch (package_id) {
case 1:
tegra_cpu_speedo_id = 7;
tegra_soc_speedo_id = 1;
threshold_index = THRESHOLD_INDEX_10;
break;
case 2:
tegra_cpu_speedo_id = 3;
tegra_soc_speedo_id = 2;
threshold_index = THRESHOLD_INDEX_3;
break;
default:
pr_err("Tegra30: Unknown pkg %d\n", package_id);
BUG();
break;
}
break;
case 0x8F:
tegra_cpu_speedo_id = 8;
tegra_soc_speedo_id = 1;
threshold_index = THRESHOLD_INDEX_11;
break;
case 0x08:
tegra_cpu_speedo_id = 1;
tegra_soc_speedo_id = 1;
threshold_index = THRESHOLD_INDEX_4;
break;
case 0x02:
tegra_cpu_speedo_id = 2;
tegra_soc_speedo_id = 2;
threshold_index = THRESHOLD_INDEX_5;
break;
case 0x04:
tegra_cpu_speedo_id = 3;
tegra_soc_speedo_id = 2;
threshold_index = THRESHOLD_INDEX_6;
break;
case 0:
switch (package_id) {
case 1:
tegra_cpu_speedo_id = 2;
tegra_soc_speedo_id = 2;
threshold_index = THRESHOLD_INDEX_2;
break;
case 2:
tegra_cpu_speedo_id = 3;
tegra_soc_speedo_id = 2;
threshold_index = THRESHOLD_INDEX_3;
break;
default:
pr_err("Tegra30: Unknown pkg %d\n", package_id);
BUG();
break;
}
break;
default:
pr_warn("Tegra30: Unknown SKU %d\n", sku);
tegra_cpu_speedo_id = 0;
tegra_soc_speedo_id = 0;
threshold_index = THRESHOLD_INDEX_0;
break;
}
break;
default:
pr_warn("Tegra30: Unknown chip rev %d\n", rev);
tegra_cpu_speedo_id = 0;
tegra_soc_speedo_id = 0;
threshold_index = THRESHOLD_INDEX_0;
break;
}
}
void tegra30_init_speedo_data(void)
{
u32 cpu_speedo_val;
u32 core_speedo_val;
int i;
BUILD_BUG_ON(ARRAY_SIZE(cpu_process_speedos) !=
THRESHOLD_INDEX_COUNT);
BUILD_BUG_ON(ARRAY_SIZE(core_process_speedos) !=
THRESHOLD_INDEX_COUNT);
package_id = tegra_fuse_readl(FUSE_PACKAGE_INFO) & 0x0F;
rev_sku_to_speedo_ids(tegra_revision, tegra_sku_id);
fuse_speedo_calib(&cpu_speedo_val, &core_speedo_val);
pr_debug("%s CPU speedo value %u\n", __func__, cpu_speedo_val);
pr_debug("%s Core speedo value %u\n", __func__, core_speedo_val);
for (i = 0; i < CPU_PROCESS_CORNERS_NUM; i++) {
if (cpu_speedo_val < cpu_process_speedos[threshold_index][i])
break;
}
tegra_cpu_process_id = i - 1;
if (tegra_cpu_process_id == -1) {
pr_warn("Tegra30: CPU speedo value %3d out of range",
cpu_speedo_val);
tegra_cpu_process_id = 0;
tegra_cpu_speedo_id = 1;
}
for (i = 0; i < CORE_PROCESS_CORNERS_NUM; i++) {
if (core_speedo_val < core_process_speedos[threshold_index][i])
break;
}
tegra_core_process_id = i - 1;
if (tegra_core_process_id == -1) {
pr_warn("Tegra30: CORE speedo value %3d out of range",
core_speedo_val);
tegra_core_process_id = 0;
tegra_soc_speedo_id = 1;
}
pr_info("Tegra30: CPU Speedo ID %d, Soc Speedo ID %d",
tegra_cpu_speedo_id, tegra_soc_speedo_id);
}

View file

@ -31,11 +31,11 @@
#include <asm/smp_twd.h> #include <asm/smp_twd.h>
#include <asm/sched_clock.h> #include <asm/sched_clock.h>
#include <mach/iomap.h>
#include <mach/irqs.h> #include <mach/irqs.h>
#include "board.h" #include "board.h"
#include "clock.h" #include "clock.h"
#include "iomap.h"
#define RTC_SECONDS 0x08 #define RTC_SECONDS 0x08
#define RTC_SHADOW_SECONDS 0x0c #define RTC_SHADOW_SECONDS 0x0c

View file

@ -24,6 +24,7 @@
#include <linux/module.h> #include <linux/module.h>
#include <linux/platform_device.h> #include <linux/platform_device.h>
#include <linux/io.h> #include <linux/io.h>
#include <linux/tegra-ahb.h>
#define DRV_NAME "tegra-ahb" #define DRV_NAME "tegra-ahb"

View file

@ -41,8 +41,6 @@
#include <linux/completion.h> #include <linux/completion.h>
#include <linux/workqueue.h> #include <linux/workqueue.h>
#include <mach/clk.h>
#include <crypto/scatterwalk.h> #include <crypto/scatterwalk.h>
#include <crypto/aes.h> #include <crypto/aes.h>
#include <crypto/internal/rng.h> #include <crypto/internal/rng.h>

View file

@ -34,13 +34,11 @@
#include <linux/of_iommu.h> #include <linux/of_iommu.h>
#include <linux/debugfs.h> #include <linux/debugfs.h>
#include <linux/seq_file.h> #include <linux/seq_file.h>
#include <linux/tegra-ahb.h>
#include <asm/page.h> #include <asm/page.h>
#include <asm/cacheflush.h> #include <asm/cacheflush.h>
#include <mach/iomap.h>
#include <mach/tegra-ahb.h>
enum smmu_hwgrp { enum smmu_hwgrp {
HWGRP_AFI, HWGRP_AFI,
HWGRP_AVPC, HWGRP_AVPC,

View file

@ -39,7 +39,6 @@
#include <linux/workqueue.h> #include <linux/workqueue.h>
#include <mach/clk.h> #include <mach/clk.h>
#include <mach/iomap.h>
#include "nvec.h" #include "nvec.h"

View file

@ -28,7 +28,10 @@
#include <linux/pm_runtime.h> #include <linux/pm_runtime.h>
#include <linux/usb/tegra_usb_phy.h> #include <linux/usb/tegra_usb_phy.h>
#include <mach/iomap.h>
#define TEGRA_USB_BASE 0xC5000000
#define TEGRA_USB2_BASE 0xC5004000
#define TEGRA_USB3_BASE 0xC5008000
#define TEGRA_USB_DMA_ALIGN 32 #define TEGRA_USB_DMA_ALIGN 32

View file

@ -29,7 +29,9 @@
#include <linux/usb/ulpi.h> #include <linux/usb/ulpi.h>
#include <asm/mach-types.h> #include <asm/mach-types.h>
#include <linux/usb/tegra_usb_phy.h> #include <linux/usb/tegra_usb_phy.h>
#include <mach/iomap.h>
#define TEGRA_USB_BASE 0xC5000000
#define TEGRA_USB_SIZE SZ_16K
#define ULPI_VIEWPORT 0x170 #define ULPI_VIEWPORT 0x170

View file

@ -11,9 +11,9 @@
* more details. * more details.
*/ */
#ifndef __MACH_TEGRA_AHB_H__ #ifndef __LINUX_AHB_H__
#define __MACH_TEGRA_AHB_H__ #define __LINUX_AHB_H__
extern int tegra_ahb_enable_smmu(struct device_node *ahb); extern int tegra_ahb_enable_smmu(struct device_node *ahb);
#endif /* __MACH_TEGRA_AHB_H__ */ #endif /* __LINUX_AHB_H__ */

View file

@ -26,7 +26,6 @@
#include <linux/regmap.h> #include <linux/regmap.h>
#include <linux/slab.h> #include <linux/slab.h>
#include <mach/clk.h> #include <mach/clk.h>
#include <mach/dma.h>
#include <sound/soc.h> #include <sound/soc.h>
#include "tegra30_ahub.h" #include "tegra30_ahub.h"

View file

@ -31,8 +31,6 @@
#ifndef __TEGRA_PCM_H__ #ifndef __TEGRA_PCM_H__
#define __TEGRA_PCM_H__ #define __TEGRA_PCM_H__
#include <mach/dma.h>
struct tegra_pcm_dma_params { struct tegra_pcm_dma_params {
unsigned long addr; unsigned long addr;
unsigned long wrap; unsigned long wrap;