mirror of https://gitee.com/openkylin/linux.git
The i.MX device tree update for 3.20:
- Update i.MX6 operating-points setting in device tree to match the latest i.MX6 data sheet - Add i.MX6SX sabreauto board support - Add imx6dl-udoo board support based off imx6q-udoo - Update sabrelite board to include I2C and HDMI support - Update the VPU compatible strings to also use cnm,coda<model> - Remove the ocram clock from the VPU node, as the clock is already provided inside the ocram node - Add system reset controller and syscon-reboot for VF610 - Update VF610 device tree to use zero based naming for GPIO nodes, so that the number scheme matches hardware manual - A number of random device additions like watchdog for VF610, sahara for i.MX53, QSPI for imx6sx-sdb board, etc. Note: the branch imx/soc was merged into imx/dt because the SNVS device tree node needs to refer to the new clock ID added by the imx/soc patch. -----BEGIN PGP SIGNATURE----- Version: GnuPG v1 iQEcBAABAgAGBQJUwg4gAAoJEFBXWFqHsHzO1NIH/AlXPcZZQM8sYbHrvWXmvVTM JstCR6XjVvOqT9zdFbEzdgpFGvu1oSDer8tOk00hL1NZYzHJRmTr/wgNP6tsvQ0F uoRj62B+WaMMcFanTbSdzh0tJtp7HZyFkJwjWRIL76bmd4VBsHXCPw4tr3oeDLzm x62SP14eSevV8ydlZj4TA2Ej7SxV6esdPLGeylZldXKTvo8AUH9sYN/BAz7WXfYH wfQ8owW/ql7YyCSRVdhSoeGG4H9qJA9M/CdwofsorLONkUx0nrBPRQfku5Uvf8Op fydbEbZ0LAkqIVnHcLi8xgBDhjjS/7glHSx4tp+mxtDcIMzAzfAtjyrawheWqQE= =ni1W -----END PGP SIGNATURE----- Merge tag 'imx-dt-3.20' of git://git.kernel.org/pub/scm/linux/kernel/git/shawnguo/linux into next/dt Merge "ARM: imx: device tree changes for 3.20" from Shawn Guo: The i.MX device tree update for 3.20: - Update i.MX6 operating-points setting in device tree to match the latest i.MX6 data sheet - Add i.MX6SX sabreauto board support - Add imx6dl-udoo board support based off imx6q-udoo - Update sabrelite board to include I2C and HDMI support - Update the VPU compatible strings to also use cnm,coda<model> - Remove the ocram clock from the VPU node, as the clock is already provided inside the ocram node - Add system reset controller and syscon-reboot for VF610 - Update VF610 device tree to use zero based naming for GPIO nodes, so that the number scheme matches hardware manual - A number of random device additions like watchdog for VF610, sahara for i.MX53, QSPI for imx6sx-sdb board, etc. Note: the branch imx/soc was merged into imx/dt because the SNVS device tree node needs to refer to the new clock ID added by the imx/soc patch. * tag 'imx-dt-3.20' of git://git.kernel.org/pub/scm/linux/kernel/git/shawnguo/linux: (28 commits) ARM: dts: imx28-evk: remove duplicate property ARM: vf610: use zero based naming for GPIO nodes ARM: dts: imx6q: enable dma for ecspi5 ARM: dts: vfxxx: Add SNVS node ARM: imx: clk-vf610: Add clock for SNVS ARM: imx: clk-vf610: Add clock for UART4 and UART5 ARM: imx: drop CPUIDLE_FLAG_TIME_VALID from cpuidle-imx6sx ARM: dts: imx6dl-udoo: Add board support based off imx6q-udoo ARM: imx: support arm power off in cpuidle for i.mx6sx ARM: imx: remove unnecessary setting for DSM ARM: dts: imx6sx: add i.mx6sx sabreauto board support ARM: dts: imx6sx-sdb: Add QSPI support ARM: dts: imx6qdl: Remove OCRAM clock from VPU node ARM: imx: apf51dev: add gpio-backlight support ARM: imx: correct the hardware clock gate setting for shared nodes ARM: imx: pllv3: add shift for frequency multiplier ARM vf610: add compatibilty strings of supported Vybrid SoC's ARM: i.MX53: dts: add sahara module ARM: dts: imx6dl: correct cpufreq volt/freq table ARM: dts: imx6q: update cpufreq volt/freq table ... Signed-off-by: Olof Johansson <olof@lixom.net>
This commit is contained in:
commit
fba31105a4
|
@ -75,6 +75,18 @@ i.MX6q generic board
|
|||
Required root node properties:
|
||||
- compatible = "fsl,imx6q";
|
||||
|
||||
Freescale Vybrid Platform Device Tree Bindings
|
||||
----------------------------------------------
|
||||
|
||||
For the Vybrid SoC familiy all variants with DDR controller are supported,
|
||||
which is the VF5xx and VF6xx series. Out of historical reasons, in most
|
||||
places the kernel uses vf610 to refer to the whole familiy.
|
||||
|
||||
Required root node compatible property (one of them):
|
||||
- compatible = "fsl,vf500";
|
||||
- compatible = "fsl,vf510";
|
||||
- compatible = "fsl,vf600";
|
||||
- compatible = "fsl,vf610";
|
||||
|
||||
Freescale LS1021A Platform Device Tree Bindings
|
||||
------------------------------------------------
|
||||
|
|
|
@ -273,6 +273,7 @@ dtb-$(CONFIG_SOC_IMX6Q) += \
|
|||
imx6dl-tx6dl-comtft.dtb \
|
||||
imx6dl-tx6u-801x.dtb \
|
||||
imx6dl-tx6u-811x.dtb \
|
||||
imx6dl-udoo.dtb \
|
||||
imx6dl-wandboard.dtb \
|
||||
imx6dl-wandboard-revb1.dtb \
|
||||
imx6q-arm2.dtb \
|
||||
|
@ -307,6 +308,7 @@ dtb-$(CONFIG_SOC_IMX6Q) += \
|
|||
dtb-$(CONFIG_SOC_IMX6SL) += \
|
||||
imx6sl-evk.dtb
|
||||
dtb-$(CONFIG_SOC_IMX6SX) += \
|
||||
imx6sx-sabreauto.dtb \
|
||||
imx6sx-sdb.dtb
|
||||
dtb-$(CONFIG_SOC_LS1021A) += \
|
||||
ls1021a-qds.dtb \
|
||||
|
|
|
@ -59,6 +59,21 @@ user {
|
|||
linux,default-trigger = "heartbeat";
|
||||
};
|
||||
};
|
||||
|
||||
regulators {
|
||||
compatible = "simple-bus";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
reg_max5821: regulator@0 {
|
||||
compatible = "regulator-fixed";
|
||||
reg = <0>;
|
||||
regulator-name = "max5821-reg";
|
||||
regulator-min-microvolt = <2500000>;
|
||||
regulator-max-microvolt = <2500000>;
|
||||
regulator-always-on;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&cspi1 {
|
||||
|
@ -107,6 +122,12 @@ rtc@68 {
|
|||
compatible = "dallas,ds1374";
|
||||
reg = <0x68>;
|
||||
};
|
||||
|
||||
max5821@38 {
|
||||
compatible = "maxim,max5821";
|
||||
reg = <0x38>;
|
||||
vref-supply = <®_max5821>;
|
||||
};
|
||||
};
|
||||
|
||||
&i2c2 {
|
||||
|
|
|
@ -464,7 +464,7 @@ fb: fb@10021000 {
|
|||
};
|
||||
|
||||
coda: coda@10023000 {
|
||||
compatible = "fsl,imx27-vpu";
|
||||
compatible = "fsl,imx27-vpu", "cnm,codadx6";
|
||||
reg = <0x10023000 0x0200>;
|
||||
interrupts = <53>;
|
||||
clocks = <&clks IMX27_CLK_VPU_BAUD_GATE>,
|
||||
|
|
|
@ -182,7 +182,6 @@ saif1: saif@80046000 {
|
|||
};
|
||||
|
||||
lradc@80050000 {
|
||||
fsl,lradc-touchscreen-wires = <4>;
|
||||
status = "okay";
|
||||
fsl,lradc-touchscreen-wires = <4>;
|
||||
fsl,ave-ctrl = <4>;
|
||||
|
|
|
@ -16,6 +16,14 @@ / {
|
|||
model = "Armadeus Systems APF51Dev docking/development board";
|
||||
compatible = "armadeus,imx51-apf51dev", "armadeus,imx51-apf51", "fsl,imx51";
|
||||
|
||||
backlight@bl1{
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_backlight>;
|
||||
compatible = "gpio-backlight";
|
||||
gpios = <&gpio3 4 GPIO_ACTIVE_HIGH>;
|
||||
default-on;
|
||||
};
|
||||
|
||||
display@di1 {
|
||||
compatible = "fsl,imx-parallel-display";
|
||||
interface-pix-fmt = "bgr666";
|
||||
|
@ -114,6 +122,12 @@ &iomuxc {
|
|||
pinctrl-0 = <&pinctrl_hog>;
|
||||
|
||||
imx51-apf51dev {
|
||||
pinctrl_backlight: bl1grp {
|
||||
fsl,pins = <
|
||||
MX51_PAD_DI1_D1_CS__GPIO3_4 0x1F5
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_hog: hoggrp {
|
||||
fsl,pins = <
|
||||
MX51_PAD_EIM_EB2__GPIO2_22 0x0C5
|
||||
|
|
|
@ -756,7 +756,7 @@ tve_in: endpoint {
|
|||
};
|
||||
|
||||
vpu: vpu@63ff4000 {
|
||||
compatible = "fsl,imx53-vpu";
|
||||
compatible = "fsl,imx53-vpu", "cnm,coda7541";
|
||||
reg = <0x63ff4000 0x1000>;
|
||||
interrupts = <9>;
|
||||
clocks = <&clks IMX5_CLK_VPU_REFERENCE_GATE>,
|
||||
|
@ -765,6 +765,15 @@ vpu: vpu@63ff4000 {
|
|||
resets = <&src 1>;
|
||||
iram = <&ocram>;
|
||||
};
|
||||
|
||||
sahara: crypto@63ff8000 {
|
||||
compatible = "fsl,imx53-sahara";
|
||||
reg = <0x63ff8000 0x4000>;
|
||||
interrupts = <19 20>;
|
||||
clocks = <&clks IMX5_CLK_SAHARA_IPG_GATE>,
|
||||
<&clks IMX5_CLK_SAHARA_IPG_GATE>;
|
||||
clock-names = "ipg", "ahb";
|
||||
};
|
||||
};
|
||||
|
||||
ocram: sram@f8000000 {
|
||||
|
|
|
@ -0,0 +1,18 @@
|
|||
/*
|
||||
* Copyright 2013 Freescale Semiconductor, Inc.
|
||||
*
|
||||
* Author: Fabio Estevam <fabio.estevam@freescale.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
*/
|
||||
/dts-v1/;
|
||||
#include "imx6dl.dtsi"
|
||||
#include "imx6qdl-udoo.dtsi"
|
||||
|
||||
/ {
|
||||
model = "Udoo i.MX6 Dual-lite Board";
|
||||
compatible = "udoo,imx6dl-udoo", "fsl,imx6dl";
|
||||
};
|
|
@ -28,7 +28,7 @@ cpu@0 {
|
|||
next-level-cache = <&L2>;
|
||||
operating-points = <
|
||||
/* kHz uV */
|
||||
996000 1275000
|
||||
996000 1250000
|
||||
792000 1175000
|
||||
396000 1075000
|
||||
>;
|
||||
|
|
|
@ -8,137 +8,15 @@
|
|||
* published by the Free Software Foundation.
|
||||
*
|
||||
*/
|
||||
|
||||
/dts-v1/;
|
||||
#include "imx6q.dtsi"
|
||||
#include "imx6qdl-udoo.dtsi"
|
||||
|
||||
/ {
|
||||
model = "Udoo i.MX6 Quad Board";
|
||||
compatible = "udoo,imx6q-udoo", "fsl,imx6q";
|
||||
|
||||
chosen {
|
||||
stdout-path = &uart2;
|
||||
};
|
||||
|
||||
memory {
|
||||
reg = <0x10000000 0x40000000>;
|
||||
};
|
||||
|
||||
regulators {
|
||||
compatible = "simple-bus";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
reg_usb_h1_vbus: regulator@0 {
|
||||
compatible = "regulator-fixed";
|
||||
reg = <0>;
|
||||
regulator-name = "usb_h1_vbus";
|
||||
regulator-min-microvolt = <5000000>;
|
||||
regulator-max-microvolt = <5000000>;
|
||||
enable-active-high;
|
||||
startup-delay-us = <2>; /* USB2415 requires a POR of 1 us minimum */
|
||||
gpio = <&gpio7 12 0>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&fec {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_enet>;
|
||||
phy-mode = "rgmii";
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&hdmi {
|
||||
ddc-i2c-bus = <&i2c2>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&i2c2 {
|
||||
clock-frequency = <100000>;
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_i2c2>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&iomuxc {
|
||||
imx6q-udoo {
|
||||
pinctrl_enet: enetgrp {
|
||||
fsl,pins = <
|
||||
MX6QDL_PAD_RGMII_RXC__RGMII_RXC 0x1b0b0
|
||||
MX6QDL_PAD_RGMII_RD0__RGMII_RD0 0x1b0b0
|
||||
MX6QDL_PAD_RGMII_RD1__RGMII_RD1 0x1b0b0
|
||||
MX6QDL_PAD_RGMII_RD2__RGMII_RD2 0x1b0b0
|
||||
MX6QDL_PAD_RGMII_RD3__RGMII_RD3 0x1b0b0
|
||||
MX6QDL_PAD_RGMII_RX_CTL__RGMII_RX_CTL 0x1b0b0
|
||||
MX6QDL_PAD_RGMII_TXC__RGMII_TXC 0x1b0b0
|
||||
MX6QDL_PAD_RGMII_TD0__RGMII_TD0 0x1b0b0
|
||||
MX6QDL_PAD_RGMII_TD1__RGMII_TD1 0x1b0b0
|
||||
MX6QDL_PAD_RGMII_TD2__RGMII_TD2 0x1b0b0
|
||||
MX6QDL_PAD_RGMII_TD3__RGMII_TD3 0x1b0b0
|
||||
MX6QDL_PAD_RGMII_TX_CTL__RGMII_TX_CTL 0x1b0b0
|
||||
MX6QDL_PAD_ENET_REF_CLK__ENET_TX_CLK 0x1b0b0
|
||||
MX6QDL_PAD_ENET_MDIO__ENET_MDIO 0x1b0b0
|
||||
MX6QDL_PAD_ENET_MDC__ENET_MDC 0x1b0b0
|
||||
MX6QDL_PAD_GPIO_16__ENET_REF_CLK 0x4001b0a8
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_i2c2: i2c2grp {
|
||||
fsl,pins = <
|
||||
MX6QDL_PAD_KEY_COL3__I2C2_SCL 0x4001b8b1
|
||||
MX6QDL_PAD_KEY_ROW3__I2C2_SDA 0x4001b8b1
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_uart2: uart2grp {
|
||||
fsl,pins = <
|
||||
MX6QDL_PAD_EIM_D26__UART2_TX_DATA 0x1b0b1
|
||||
MX6QDL_PAD_EIM_D27__UART2_RX_DATA 0x1b0b1
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_usbh: usbhgrp {
|
||||
fsl,pins = <
|
||||
MX6QDL_PAD_GPIO_17__GPIO7_IO12 0x80000000
|
||||
MX6QDL_PAD_NANDF_CS2__CCM_CLKO2 0x130b0
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_usdhc3: usdhc3grp {
|
||||
fsl,pins = <
|
||||
MX6QDL_PAD_SD3_CMD__SD3_CMD 0x17059
|
||||
MX6QDL_PAD_SD3_CLK__SD3_CLK 0x10059
|
||||
MX6QDL_PAD_SD3_DAT0__SD3_DATA0 0x17059
|
||||
MX6QDL_PAD_SD3_DAT1__SD3_DATA1 0x17059
|
||||
MX6QDL_PAD_SD3_DAT2__SD3_DATA2 0x17059
|
||||
MX6QDL_PAD_SD3_DAT3__SD3_DATA3 0x17059
|
||||
>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&sata {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&uart2 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_uart2>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&usbh1 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_usbh>;
|
||||
vbus-supply = <®_usb_h1_vbus>;
|
||||
clocks = <&clks 201>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&usdhc3 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_usdhc3>;
|
||||
non-removable;
|
||||
status = "okay";
|
||||
};
|
||||
|
|
|
@ -31,7 +31,7 @@ cpu@0 {
|
|||
1200000 1275000
|
||||
996000 1250000
|
||||
852000 1250000
|
||||
792000 1150000
|
||||
792000 1175000
|
||||
396000 975000
|
||||
>;
|
||||
fsl,soc-operating-points = <
|
||||
|
@ -95,6 +95,8 @@ ecspi5: ecspi@02018000 {
|
|||
clocks = <&clks IMX6Q_CLK_ECSPI5>,
|
||||
<&clks IMX6Q_CLK_ECSPI5>;
|
||||
clock-names = "ipg", "per";
|
||||
dmas = <&sdma 11 7 1>, <&sdma 12 7 2>;
|
||||
dma-names = "rx", "tx";
|
||||
status = "disabled";
|
||||
};
|
||||
};
|
||||
|
|
|
@ -173,6 +173,11 @@ &fec {
|
|||
status = "okay";
|
||||
};
|
||||
|
||||
&hdmi {
|
||||
ddc-i2c-bus = <&i2c2>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&i2c1 {
|
||||
clock-frequency = <100000>;
|
||||
pinctrl-names = "default";
|
||||
|
@ -188,6 +193,20 @@ codec: sgtl5000@0a {
|
|||
};
|
||||
};
|
||||
|
||||
&i2c2 {
|
||||
clock-frequency = <100000>;
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_i2c2>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&i2c3 {
|
||||
clock-frequency = <100000>;
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_i2c3>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&iomuxc {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_hog>;
|
||||
|
@ -265,6 +284,20 @@ MX6QDL_PAD_EIM_D28__I2C1_SDA 0x4001b8b1
|
|||
>;
|
||||
};
|
||||
|
||||
pinctrl_i2c2: i2c2grp {
|
||||
fsl,pins = <
|
||||
MX6QDL_PAD_KEY_COL3__I2C2_SCL 0x4001b8b1
|
||||
MX6QDL_PAD_KEY_ROW3__I2C2_SDA 0x4001b8b1
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_i2c3: i2c3grp {
|
||||
fsl,pins = <
|
||||
MX6QDL_PAD_GPIO_5__I2C3_SCL 0x4001b8b1
|
||||
MX6QDL_PAD_GPIO_16__I2C3_SDA 0x4001b8b1
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_pwm1: pwm1grp {
|
||||
fsl,pins = <
|
||||
MX6QDL_PAD_SD1_DAT3__PWM1_OUT 0x1b0b1
|
||||
|
|
|
@ -0,0 +1,134 @@
|
|||
/*
|
||||
* Copyright 2013 Freescale Semiconductor, Inc.
|
||||
*
|
||||
* Author: Fabio Estevam <fabio.estevam@freescale.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
*/
|
||||
|
||||
/ {
|
||||
chosen {
|
||||
stdout-path = &uart2;
|
||||
};
|
||||
|
||||
memory {
|
||||
reg = <0x10000000 0x40000000>;
|
||||
};
|
||||
|
||||
regulators {
|
||||
compatible = "simple-bus";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
reg_usb_h1_vbus: regulator@0 {
|
||||
compatible = "regulator-fixed";
|
||||
reg = <0>;
|
||||
regulator-name = "usb_h1_vbus";
|
||||
regulator-min-microvolt = <5000000>;
|
||||
regulator-max-microvolt = <5000000>;
|
||||
enable-active-high;
|
||||
startup-delay-us = <2>; /* USB2415 requires a POR of 1 us minimum */
|
||||
gpio = <&gpio7 12 0>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&fec {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_enet>;
|
||||
phy-mode = "rgmii";
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&hdmi {
|
||||
ddc-i2c-bus = <&i2c2>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&i2c2 {
|
||||
clock-frequency = <100000>;
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_i2c2>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&iomuxc {
|
||||
imx6q-udoo {
|
||||
pinctrl_enet: enetgrp {
|
||||
fsl,pins = <
|
||||
MX6QDL_PAD_RGMII_RXC__RGMII_RXC 0x1b0b0
|
||||
MX6QDL_PAD_RGMII_RD0__RGMII_RD0 0x1b0b0
|
||||
MX6QDL_PAD_RGMII_RD1__RGMII_RD1 0x1b0b0
|
||||
MX6QDL_PAD_RGMII_RD2__RGMII_RD2 0x1b0b0
|
||||
MX6QDL_PAD_RGMII_RD3__RGMII_RD3 0x1b0b0
|
||||
MX6QDL_PAD_RGMII_RX_CTL__RGMII_RX_CTL 0x1b0b0
|
||||
MX6QDL_PAD_RGMII_TXC__RGMII_TXC 0x1b0b0
|
||||
MX6QDL_PAD_RGMII_TD0__RGMII_TD0 0x1b0b0
|
||||
MX6QDL_PAD_RGMII_TD1__RGMII_TD1 0x1b0b0
|
||||
MX6QDL_PAD_RGMII_TD2__RGMII_TD2 0x1b0b0
|
||||
MX6QDL_PAD_RGMII_TD3__RGMII_TD3 0x1b0b0
|
||||
MX6QDL_PAD_RGMII_TX_CTL__RGMII_TX_CTL 0x1b0b0
|
||||
MX6QDL_PAD_ENET_REF_CLK__ENET_TX_CLK 0x1b0b0
|
||||
MX6QDL_PAD_ENET_MDIO__ENET_MDIO 0x1b0b0
|
||||
MX6QDL_PAD_ENET_MDC__ENET_MDC 0x1b0b0
|
||||
MX6QDL_PAD_GPIO_16__ENET_REF_CLK 0x4001b0a8
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_i2c2: i2c2grp {
|
||||
fsl,pins = <
|
||||
MX6QDL_PAD_KEY_COL3__I2C2_SCL 0x4001b8b1
|
||||
MX6QDL_PAD_KEY_ROW3__I2C2_SDA 0x4001b8b1
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_uart2: uart2grp {
|
||||
fsl,pins = <
|
||||
MX6QDL_PAD_EIM_D26__UART2_TX_DATA 0x1b0b1
|
||||
MX6QDL_PAD_EIM_D27__UART2_RX_DATA 0x1b0b1
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_usbh: usbhgrp {
|
||||
fsl,pins = <
|
||||
MX6QDL_PAD_GPIO_17__GPIO7_IO12 0x80000000
|
||||
MX6QDL_PAD_NANDF_CS2__CCM_CLKO2 0x130b0
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_usdhc3: usdhc3grp {
|
||||
fsl,pins = <
|
||||
MX6QDL_PAD_SD3_CMD__SD3_CMD 0x17059
|
||||
MX6QDL_PAD_SD3_CLK__SD3_CLK 0x10059
|
||||
MX6QDL_PAD_SD3_DAT0__SD3_DATA0 0x17059
|
||||
MX6QDL_PAD_SD3_DAT1__SD3_DATA1 0x17059
|
||||
MX6QDL_PAD_SD3_DAT2__SD3_DATA2 0x17059
|
||||
MX6QDL_PAD_SD3_DAT3__SD3_DATA3 0x17059
|
||||
>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&uart2 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_uart2>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&usbh1 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_usbh>;
|
||||
vbus-supply = <®_usb_h1_vbus>;
|
||||
clocks = <&clks 201>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&usdhc3 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_usdhc3>;
|
||||
non-removable;
|
||||
status = "okay";
|
||||
};
|
|
@ -339,9 +339,8 @@ vpu: vpu@02040000 {
|
|||
<0 12 IRQ_TYPE_LEVEL_HIGH>;
|
||||
interrupt-names = "bit", "jpeg";
|
||||
clocks = <&clks IMX6QDL_CLK_VPU_AXI>,
|
||||
<&clks IMX6QDL_CLK_MMDC_CH0_AXI>,
|
||||
<&clks IMX6QDL_CLK_OCRAM>;
|
||||
clock-names = "per", "ahb", "ocram";
|
||||
<&clks IMX6QDL_CLK_MMDC_CH0_AXI>;
|
||||
clock-names = "per", "ahb";
|
||||
resets = <&src 1>;
|
||||
iram = <&ocram>;
|
||||
};
|
||||
|
|
|
@ -0,0 +1,146 @@
|
|||
/*
|
||||
* Copyright (C) 2014 Freescale Semiconductor, Inc.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*/
|
||||
|
||||
/dts-v1/;
|
||||
|
||||
#include "imx6sx.dtsi"
|
||||
|
||||
/ {
|
||||
model = "Freescale i.MX6 SoloX Sabre Auto Board";
|
||||
compatible = "fsl,imx6sx-sabreauto", "fsl,imx6sx";
|
||||
|
||||
memory {
|
||||
reg = <0x80000000 0x80000000>;
|
||||
};
|
||||
|
||||
regulators {
|
||||
compatible = "simple-bus";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
vcc_sd3: regulator@0 {
|
||||
compatible = "regulator-fixed";
|
||||
reg = <0>;
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_vcc_sd3>;
|
||||
regulator-name = "VCC_SD3";
|
||||
regulator-min-microvolt = <3000000>;
|
||||
regulator-max-microvolt = <3000000>;
|
||||
gpio = <&gpio2 11 GPIO_ACTIVE_HIGH>;
|
||||
enable-active-high;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&uart1 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_uart1>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&usdhc3 {
|
||||
pinctrl-names = "default", "state_100mhz", "state_200mhz";
|
||||
pinctrl-0 = <&pinctrl_usdhc3>;
|
||||
pinctrl-1 = <&pinctrl_usdhc3_100mhz>;
|
||||
pinctrl-2 = <&pinctrl_usdhc3_200mhz>;
|
||||
bus-width = <8>;
|
||||
cd-gpios = <&gpio7 10 GPIO_ACTIVE_HIGH>;
|
||||
wp-gpios = <&gpio3 19 GPIO_ACTIVE_HIGH>;
|
||||
keep-power-in-suspend;
|
||||
enable-sdio-wakeup;
|
||||
vmmc-supply = <&vcc_sd3>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&usdhc4 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_usdhc4>;
|
||||
bus-width = <8>;
|
||||
cd-gpios = <&gpio7 11 GPIO_ACTIVE_HIGH>;
|
||||
no-1-8-v;
|
||||
keep-power-in-suspend;
|
||||
enable-sdio-wakup;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&iomuxc {
|
||||
imx6x-sabreauto {
|
||||
pinctrl_uart1: uart1grp {
|
||||
fsl,pins = <
|
||||
MX6SX_PAD_GPIO1_IO04__UART1_TX 0x1b0b1
|
||||
MX6SX_PAD_GPIO1_IO05__UART1_RX 0x1b0b1
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_usdhc3: usdhc3grp {
|
||||
fsl,pins = <
|
||||
MX6SX_PAD_SD3_CMD__USDHC3_CMD 0x17059
|
||||
MX6SX_PAD_SD3_CLK__USDHC3_CLK 0x10059
|
||||
MX6SX_PAD_SD3_DATA0__USDHC3_DATA0 0x17059
|
||||
MX6SX_PAD_SD3_DATA1__USDHC3_DATA1 0x17059
|
||||
MX6SX_PAD_SD3_DATA2__USDHC3_DATA2 0x17059
|
||||
MX6SX_PAD_SD3_DATA3__USDHC3_DATA3 0x17059
|
||||
MX6SX_PAD_SD3_DATA4__USDHC3_DATA4 0x17059
|
||||
MX6SX_PAD_SD3_DATA5__USDHC3_DATA5 0x17059
|
||||
MX6SX_PAD_SD3_DATA6__USDHC3_DATA6 0x17059
|
||||
MX6SX_PAD_SD3_DATA7__USDHC3_DATA7 0x17059
|
||||
MX6SX_PAD_KEY_COL0__GPIO2_IO_10 0x17059 /* CD */
|
||||
MX6SX_PAD_KEY_ROW0__GPIO2_IO_15 0x17059 /* WP */
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_usdhc3_100mhz: usdhc3grp-100mhz {
|
||||
fsl,pins = <
|
||||
MX6SX_PAD_SD3_CMD__USDHC3_CMD 0x170b9
|
||||
MX6SX_PAD_SD3_CLK__USDHC3_CLK 0x100b9
|
||||
MX6SX_PAD_SD3_DATA0__USDHC3_DATA0 0x170b9
|
||||
MX6SX_PAD_SD3_DATA1__USDHC3_DATA1 0x170b9
|
||||
MX6SX_PAD_SD3_DATA2__USDHC3_DATA2 0x170b9
|
||||
MX6SX_PAD_SD3_DATA3__USDHC3_DATA3 0x170b9
|
||||
MX6SX_PAD_SD3_DATA4__USDHC3_DATA4 0x170b9
|
||||
MX6SX_PAD_SD3_DATA5__USDHC3_DATA5 0x170b9
|
||||
MX6SX_PAD_SD3_DATA6__USDHC3_DATA6 0x170b9
|
||||
MX6SX_PAD_SD3_DATA7__USDHC3_DATA7 0x170b9
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_usdhc3_200mhz: usdhc3grp-200mhz {
|
||||
fsl,pins = <
|
||||
MX6SX_PAD_SD3_CMD__USDHC3_CMD 0x170f9
|
||||
MX6SX_PAD_SD3_CLK__USDHC3_CLK 0x100f9
|
||||
MX6SX_PAD_SD3_DATA0__USDHC3_DATA0 0x170f9
|
||||
MX6SX_PAD_SD3_DATA1__USDHC3_DATA1 0x170f9
|
||||
MX6SX_PAD_SD3_DATA2__USDHC3_DATA2 0x170f9
|
||||
MX6SX_PAD_SD3_DATA3__USDHC3_DATA3 0x170f9
|
||||
MX6SX_PAD_SD3_DATA4__USDHC3_DATA4 0x170f9
|
||||
MX6SX_PAD_SD3_DATA5__USDHC3_DATA5 0x170f9
|
||||
MX6SX_PAD_SD3_DATA6__USDHC3_DATA6 0x170f9
|
||||
MX6SX_PAD_SD3_DATA7__USDHC3_DATA7 0x170f9
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_usdhc4: usdhc4grp {
|
||||
fsl,pins = <
|
||||
MX6SX_PAD_SD4_CMD__USDHC4_CMD 0x17059
|
||||
MX6SX_PAD_SD4_CLK__USDHC4_CLK 0x10059
|
||||
MX6SX_PAD_SD4_DATA0__USDHC4_DATA0 0x17059
|
||||
MX6SX_PAD_SD4_DATA1__USDHC4_DATA1 0x17059
|
||||
MX6SX_PAD_SD4_DATA2__USDHC4_DATA2 0x17059
|
||||
MX6SX_PAD_SD4_DATA3__USDHC4_DATA3 0x17059
|
||||
MX6SX_PAD_SD4_DATA7__GPIO6_IO_21 0x17059 /* CD */
|
||||
MX6SX_PAD_SD4_DATA6__GPIO6_IO_20 0x17059 /* WP */
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_vcc_sd3: vccsd3grp {
|
||||
fsl,pins = <
|
||||
MX6SX_PAD_KEY_COL1__GPIO2_IO_11 0x17059
|
||||
>;
|
||||
};
|
||||
};
|
||||
};
|
|
@ -340,6 +340,28 @@ &snvs_poweroff {
|
|||
status = "okay";
|
||||
};
|
||||
|
||||
&qspi2 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_qspi2>;
|
||||
status = "okay";
|
||||
|
||||
flash0: s25fl128s@0 {
|
||||
reg = <0>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
compatible = "spansion,s25fl128s";
|
||||
spi-max-frequency = <66000000>;
|
||||
};
|
||||
|
||||
flash1: s25fl128s@1 {
|
||||
reg = <1>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
compatible = "spansion,s25fl128s";
|
||||
spi-max-frequency = <66000000>;
|
||||
};
|
||||
};
|
||||
|
||||
&ssi2 {
|
||||
status = "okay";
|
||||
};
|
||||
|
@ -524,6 +546,23 @@ MX6SX_PAD_SD1_DATA2__PWM3_OUT 0x110b0
|
|||
>;
|
||||
};
|
||||
|
||||
pinctrl_qspi2: qspi2grp {
|
||||
fsl,pins = <
|
||||
MX6SX_PAD_NAND_WP_B__QSPI2_A_DATA_0 0x70f1
|
||||
MX6SX_PAD_NAND_READY_B__QSPI2_A_DATA_1 0x70f1
|
||||
MX6SX_PAD_NAND_CE0_B__QSPI2_A_DATA_2 0x70f1
|
||||
MX6SX_PAD_NAND_CE1_B__QSPI2_A_DATA_3 0x70f1
|
||||
MX6SX_PAD_NAND_CLE__QSPI2_A_SCLK 0x70f1
|
||||
MX6SX_PAD_NAND_ALE__QSPI2_A_SS0_B 0x70f1
|
||||
MX6SX_PAD_NAND_DATA01__QSPI2_B_DATA_0 0x70f1
|
||||
MX6SX_PAD_NAND_DATA00__QSPI2_B_DATA_1 0x70f1
|
||||
MX6SX_PAD_NAND_WE_B__QSPI2_B_DATA_2 0x70f1
|
||||
MX6SX_PAD_NAND_RE_B__QSPI2_B_DATA_3 0x70f1
|
||||
MX6SX_PAD_NAND_DATA02__QSPI2_B_SCLK 0x70f1
|
||||
MX6SX_PAD_NAND_DATA03__QSPI2_B_SS0_B 0x70f1
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_vcc_sd3: vccsd3grp {
|
||||
fsl,pins = <
|
||||
MX6SX_PAD_KEY_COL1__GPIO2_IO_11 0x17059
|
||||
|
|
|
@ -35,7 +35,7 @@ usbh_vbus_reg: regulator@1 {
|
|||
regulator-name = "usbh_vbus";
|
||||
regulator-min-microvolt = <5000000>;
|
||||
regulator-max-microvolt = <5000000>;
|
||||
gpio = <&gpio3 19 GPIO_ACTIVE_LOW>;
|
||||
gpio = <&gpio2 19 GPIO_ACTIVE_LOW>;
|
||||
vin-supply = <&sys_5v0_reg>;
|
||||
};
|
||||
};
|
||||
|
|
|
@ -31,7 +31,7 @@ &esdhc1 {
|
|||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_esdhc1>;
|
||||
bus-width = <4>;
|
||||
cd-gpios = <&gpio2 10 GPIO_ACTIVE_LOW>;
|
||||
cd-gpios = <&gpio1 10 GPIO_ACTIVE_LOW>;
|
||||
};
|
||||
|
||||
&fec1 {
|
||||
|
@ -121,6 +121,7 @@ VF610_PAD_PTB20__GPIO_42 0x219d
|
|||
|
||||
pinctrl_fec1: fec1grp {
|
||||
fsl,pins = <
|
||||
VF610_PAD_PTA6__RMII_CLKOUT 0x30d2
|
||||
VF610_PAD_PTC9__ENET_RMII1_MDC 0x30d2
|
||||
VF610_PAD_PTC10__ENET_RMII1_MDIO 0x30d3
|
||||
VF610_PAD_PTC11__ENET_RMII1_CRS 0x30d1
|
||||
|
|
|
@ -94,23 +94,23 @@ &ftm {
|
|||
interrupts = <GIC_SPI 44 IRQ_TYPE_LEVEL_HIGH>;
|
||||
};
|
||||
|
||||
&gpio1 {
|
||||
&gpio0 {
|
||||
interrupts = <GIC_SPI 107 IRQ_TYPE_LEVEL_HIGH>;
|
||||
};
|
||||
|
||||
&gpio2 {
|
||||
&gpio1 {
|
||||
interrupts = <GIC_SPI 108 IRQ_TYPE_LEVEL_HIGH>;
|
||||
};
|
||||
|
||||
&gpio3 {
|
||||
&gpio2 {
|
||||
interrupts = <GIC_SPI 109 IRQ_TYPE_LEVEL_HIGH>;
|
||||
};
|
||||
|
||||
&gpio4 {
|
||||
&gpio3 {
|
||||
interrupts = <GIC_SPI 110 IRQ_TYPE_LEVEL_HIGH>;
|
||||
};
|
||||
|
||||
&gpio5 {
|
||||
&gpio4 {
|
||||
interrupts = <GIC_SPI 111 IRQ_TYPE_LEVEL_HIGH>;
|
||||
};
|
||||
|
||||
|
@ -130,6 +130,14 @@ &sai2 {
|
|||
interrupts = <GIC_SPI 86 IRQ_TYPE_LEVEL_HIGH>;
|
||||
};
|
||||
|
||||
&snvsrtc {
|
||||
interrupts = <GIC_SPI 100 IRQ_TYPE_LEVEL_HIGH>;
|
||||
};
|
||||
|
||||
&src {
|
||||
interrupts = <GIC_SPI 96 IRQ_TYPE_LEVEL_HIGH>;
|
||||
};
|
||||
|
||||
&uart0 {
|
||||
interrupts = <GIC_SPI 61 IRQ_TYPE_LEVEL_HIGH>;
|
||||
};
|
||||
|
@ -169,3 +177,8 @@ &usbphy0 {
|
|||
&usbphy1 {
|
||||
interrupts = <GIC_SPI 51 IRQ_TYPE_LEVEL_HIGH>;
|
||||
};
|
||||
|
||||
&wdoga5 {
|
||||
interrupts = <GIC_SPI 20 IRQ_TYPE_LEVEL_HIGH>;
|
||||
status = "okay";
|
||||
};
|
||||
|
|
|
@ -123,7 +123,7 @@ &esdhc1 {
|
|||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_esdhc1>;
|
||||
bus-width = <4>;
|
||||
cd-gpios = <&gpio5 6 GPIO_ACTIVE_LOW>;
|
||||
cd-gpios = <&gpio4 6 GPIO_ACTIVE_LOW>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
|
|
|
@ -22,11 +22,11 @@ aliases {
|
|||
serial3 = &uart3;
|
||||
serial4 = &uart4;
|
||||
serial5 = &uart5;
|
||||
gpio0 = &gpio1;
|
||||
gpio1 = &gpio2;
|
||||
gpio2 = &gpio3;
|
||||
gpio3 = &gpio4;
|
||||
gpio4 = &gpio5;
|
||||
gpio0 = &gpio0;
|
||||
gpio1 = &gpio1;
|
||||
gpio2 = &gpio2;
|
||||
gpio3 = &gpio3;
|
||||
gpio4 = &gpio4;
|
||||
usbphy0 = &usbphy0;
|
||||
usbphy1 = &usbphy1;
|
||||
};
|
||||
|
@ -43,6 +43,13 @@ sxosc: sxosc {
|
|||
clock-frequency = <32768>;
|
||||
};
|
||||
|
||||
reboot: syscon-reboot {
|
||||
compatible = "syscon-reboot";
|
||||
regmap = <&src>;
|
||||
offset = <0x0>;
|
||||
mask = <0x1000>;
|
||||
};
|
||||
|
||||
soc {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
|
@ -184,7 +191,7 @@ adc0: adc@4003b000 {
|
|||
status = "disabled";
|
||||
};
|
||||
|
||||
wdog@4003e000 {
|
||||
wdoga5: wdog@4003e000 {
|
||||
compatible = "fsl,vf610-wdt", "fsl,imx21-wdt";
|
||||
reg = <0x4003e000 0x1000>;
|
||||
clocks = <&clks VF610_CLK_WDT>;
|
||||
|
@ -209,7 +216,7 @@ iomuxc: iomuxc@40048000 {
|
|||
#gpio-range-cells = <3>;
|
||||
};
|
||||
|
||||
gpio1: gpio@40049000 {
|
||||
gpio0: gpio@40049000 {
|
||||
compatible = "fsl,vf610-gpio";
|
||||
reg = <0x40049000 0x1000 0x400ff000 0x40>;
|
||||
gpio-controller;
|
||||
|
@ -219,7 +226,7 @@ gpio1: gpio@40049000 {
|
|||
gpio-ranges = <&iomuxc 0 0 32>;
|
||||
};
|
||||
|
||||
gpio2: gpio@4004a000 {
|
||||
gpio1: gpio@4004a000 {
|
||||
compatible = "fsl,vf610-gpio";
|
||||
reg = <0x4004a000 0x1000 0x400ff040 0x40>;
|
||||
gpio-controller;
|
||||
|
@ -229,7 +236,7 @@ gpio2: gpio@4004a000 {
|
|||
gpio-ranges = <&iomuxc 0 32 32>;
|
||||
};
|
||||
|
||||
gpio3: gpio@4004b000 {
|
||||
gpio2: gpio@4004b000 {
|
||||
compatible = "fsl,vf610-gpio";
|
||||
reg = <0x4004b000 0x1000 0x400ff080 0x40>;
|
||||
gpio-controller;
|
||||
|
@ -239,7 +246,7 @@ gpio3: gpio@4004b000 {
|
|||
gpio-ranges = <&iomuxc 0 64 32>;
|
||||
};
|
||||
|
||||
gpio4: gpio@4004c000 {
|
||||
gpio3: gpio@4004c000 {
|
||||
compatible = "fsl,vf610-gpio";
|
||||
reg = <0x4004c000 0x1000 0x400ff0c0 0x40>;
|
||||
gpio-controller;
|
||||
|
@ -249,7 +256,7 @@ gpio4: gpio@4004c000 {
|
|||
gpio-ranges = <&iomuxc 0 96 32>;
|
||||
};
|
||||
|
||||
gpio5: gpio@4004d000 {
|
||||
gpio4: gpio@4004d000 {
|
||||
compatible = "fsl,vf610-gpio";
|
||||
reg = <0x4004d000 0x1000 0x400ff100 0x40>;
|
||||
gpio-controller;
|
||||
|
@ -318,6 +325,11 @@ usbmisc0: usb@40034800 {
|
|||
clocks = <&clks VF610_CLK_USBC0>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
src: src@4006e000 {
|
||||
compatible = "fsl,vf610-src", "syscon";
|
||||
reg = <0x4006e000 0x1000>;
|
||||
};
|
||||
};
|
||||
|
||||
aips1: aips-bus@40080000 {
|
||||
|
@ -339,6 +351,20 @@ edma1: dma-controller@40098000 {
|
|||
status = "disabled";
|
||||
};
|
||||
|
||||
snvs0: snvs@400a7000 {
|
||||
compatible = "fsl,sec-v4.0-mon", "simple-bus";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
ranges = <0 0x400a7000 0x2000>;
|
||||
|
||||
snvsrtc: snvs-rtc-lp@34 {
|
||||
compatible = "fsl,sec-v4.0-mon-rtc-lp";
|
||||
reg = <0x34 0x58>;
|
||||
clocks = <&clks VF610_CLK_SNVS>;
|
||||
clock-names = "snvs-rtc";
|
||||
};
|
||||
};
|
||||
|
||||
uart4: serial@400a9000 {
|
||||
compatible = "fsl,vf610-lpuart";
|
||||
reg = <0x400a9000 0x1000>;
|
||||
|
|
|
@ -32,8 +32,7 @@ ifeq ($(CONFIG_CPU_IDLE),y)
|
|||
obj-$(CONFIG_SOC_IMX5) += cpuidle-imx5.o
|
||||
obj-$(CONFIG_SOC_IMX6Q) += cpuidle-imx6q.o
|
||||
obj-$(CONFIG_SOC_IMX6SL) += cpuidle-imx6sl.o
|
||||
# i.MX6SX reuses i.MX6Q cpuidle driver
|
||||
obj-$(CONFIG_SOC_IMX6SX) += cpuidle-imx6q.o
|
||||
obj-$(CONFIG_SOC_IMX6SX) += cpuidle-imx6sx.o
|
||||
endif
|
||||
|
||||
ifdef CONFIG_SND_IMX_SOC
|
||||
|
|
|
@ -96,15 +96,30 @@ static int clk_gate2_is_enabled(struct clk_hw *hw)
|
|||
{
|
||||
struct clk_gate2 *gate = to_clk_gate2(hw);
|
||||
|
||||
if (gate->share_count)
|
||||
return !!__clk_get_enable_count(hw->clk);
|
||||
else
|
||||
return clk_gate2_reg_is_enabled(gate->reg, gate->bit_idx);
|
||||
return clk_gate2_reg_is_enabled(gate->reg, gate->bit_idx);
|
||||
}
|
||||
|
||||
static void clk_gate2_disable_unused(struct clk_hw *hw)
|
||||
{
|
||||
struct clk_gate2 *gate = to_clk_gate2(hw);
|
||||
unsigned long flags = 0;
|
||||
u32 reg;
|
||||
|
||||
spin_lock_irqsave(gate->lock, flags);
|
||||
|
||||
if (!gate->share_count || *gate->share_count == 0) {
|
||||
reg = readl(gate->reg);
|
||||
reg &= ~(3 << gate->bit_idx);
|
||||
writel(reg, gate->reg);
|
||||
}
|
||||
|
||||
spin_unlock_irqrestore(gate->lock, flags);
|
||||
}
|
||||
|
||||
static struct clk_ops clk_gate2_ops = {
|
||||
.enable = clk_gate2_enable,
|
||||
.disable = clk_gate2_disable,
|
||||
.disable_unused = clk_gate2_disable_unused,
|
||||
.is_enabled = clk_gate2_is_enabled,
|
||||
};
|
||||
|
||||
|
|
|
@ -31,6 +31,7 @@
|
|||
* @base: base address of PLL registers
|
||||
* @powerup_set: set POWER bit to power up the PLL
|
||||
* @div_mask: mask of divider bits
|
||||
* @div_shift: shift of divider bits
|
||||
*
|
||||
* IMX PLL clock version 3, found on i.MX6 series. Divider for pllv3
|
||||
* is actually a multiplier, and always sits at bit 0.
|
||||
|
@ -40,6 +41,7 @@ struct clk_pllv3 {
|
|||
void __iomem *base;
|
||||
bool powerup_set;
|
||||
u32 div_mask;
|
||||
u32 div_shift;
|
||||
};
|
||||
|
||||
#define to_clk_pllv3(_hw) container_of(_hw, struct clk_pllv3, hw)
|
||||
|
@ -97,7 +99,7 @@ static unsigned long clk_pllv3_recalc_rate(struct clk_hw *hw,
|
|||
unsigned long parent_rate)
|
||||
{
|
||||
struct clk_pllv3 *pll = to_clk_pllv3(hw);
|
||||
u32 div = readl_relaxed(pll->base) & pll->div_mask;
|
||||
u32 div = (readl_relaxed(pll->base) >> pll->div_shift) & pll->div_mask;
|
||||
|
||||
return (div == 1) ? parent_rate * 22 : parent_rate * 20;
|
||||
}
|
||||
|
@ -125,8 +127,8 @@ static int clk_pllv3_set_rate(struct clk_hw *hw, unsigned long rate,
|
|||
return -EINVAL;
|
||||
|
||||
val = readl_relaxed(pll->base);
|
||||
val &= ~pll->div_mask;
|
||||
val |= div;
|
||||
val &= ~(pll->div_mask << pll->div_shift);
|
||||
val |= (div << pll->div_shift);
|
||||
writel_relaxed(val, pll->base);
|
||||
|
||||
return clk_pllv3_wait_lock(pll);
|
||||
|
@ -295,6 +297,8 @@ struct clk *imx_clk_pllv3(enum imx_pllv3_type type, const char *name,
|
|||
case IMX_PLLV3_SYS:
|
||||
ops = &clk_pllv3_sys_ops;
|
||||
break;
|
||||
case IMX_PLLV3_USB_VF610:
|
||||
pll->div_shift = 1;
|
||||
case IMX_PLLV3_USB:
|
||||
ops = &clk_pllv3_ops;
|
||||
pll->powerup_set = true;
|
||||
|
|
|
@ -172,11 +172,11 @@ static void __init vf610_clocks_init(struct device_node *ccm_node)
|
|||
|
||||
clk[VF610_CLK_PLL1] = imx_clk_pllv3(IMX_PLLV3_GENERIC, "pll1", "pll1_bypass_src", PLL1_CTRL, 0x1);
|
||||
clk[VF610_CLK_PLL2] = imx_clk_pllv3(IMX_PLLV3_GENERIC, "pll2", "pll2_bypass_src", PLL2_CTRL, 0x1);
|
||||
clk[VF610_CLK_PLL3] = imx_clk_pllv3(IMX_PLLV3_USB, "pll3", "pll3_bypass_src", PLL3_CTRL, 0x1);
|
||||
clk[VF610_CLK_PLL3] = imx_clk_pllv3(IMX_PLLV3_USB_VF610, "pll3", "pll3_bypass_src", PLL3_CTRL, 0x2);
|
||||
clk[VF610_CLK_PLL4] = imx_clk_pllv3(IMX_PLLV3_AV, "pll4", "pll4_bypass_src", PLL4_CTRL, 0x7f);
|
||||
clk[VF610_CLK_PLL5] = imx_clk_pllv3(IMX_PLLV3_ENET, "pll5", "pll5_bypass_src", PLL5_CTRL, 0x3);
|
||||
clk[VF610_CLK_PLL6] = imx_clk_pllv3(IMX_PLLV3_AV, "pll6", "pll6_bypass_src", PLL6_CTRL, 0x7f);
|
||||
clk[VF610_CLK_PLL7] = imx_clk_pllv3(IMX_PLLV3_USB, "pll7", "pll7_bypass_src", PLL7_CTRL, 0x1);
|
||||
clk[VF610_CLK_PLL7] = imx_clk_pllv3(IMX_PLLV3_USB_VF610, "pll7", "pll7_bypass_src", PLL7_CTRL, 0x2);
|
||||
|
||||
clk[VF610_PLL1_BYPASS] = imx_clk_mux_flags("pll1_bypass", PLL1_CTRL, 16, 1, pll1_bypass_sels, ARRAY_SIZE(pll1_bypass_sels), CLK_SET_RATE_PARENT);
|
||||
clk[VF610_PLL2_BYPASS] = imx_clk_mux_flags("pll2_bypass", PLL2_CTRL, 16, 1, pll2_bypass_sels, ARRAY_SIZE(pll2_bypass_sels), CLK_SET_RATE_PARENT);
|
||||
|
@ -267,6 +267,8 @@ static void __init vf610_clocks_init(struct device_node *ccm_node)
|
|||
clk[VF610_CLK_UART1] = imx_clk_gate2("uart1", "ipg_bus", CCM_CCGR0, CCM_CCGRx_CGn(8));
|
||||
clk[VF610_CLK_UART2] = imx_clk_gate2("uart2", "ipg_bus", CCM_CCGR0, CCM_CCGRx_CGn(9));
|
||||
clk[VF610_CLK_UART3] = imx_clk_gate2("uart3", "ipg_bus", CCM_CCGR0, CCM_CCGRx_CGn(10));
|
||||
clk[VF610_CLK_UART4] = imx_clk_gate2("uart4", "ipg_bus", CCM_CCGR6, CCM_CCGRx_CGn(9));
|
||||
clk[VF610_CLK_UART5] = imx_clk_gate2("uart5", "ipg_bus", CCM_CCGR6, CCM_CCGRx_CGn(10));
|
||||
|
||||
clk[VF610_CLK_I2C0] = imx_clk_gate2("i2c0", "ipg_bus", CCM_CCGR4, CCM_CCGRx_CGn(6));
|
||||
clk[VF610_CLK_I2C1] = imx_clk_gate2("i2c1", "ipg_bus", CCM_CCGR4, CCM_CCGRx_CGn(7));
|
||||
|
@ -380,6 +382,8 @@ static void __init vf610_clocks_init(struct device_node *ccm_node)
|
|||
clk[VF610_CLK_DMAMUX2] = imx_clk_gate2("dmamux2", "platform_bus", CCM_CCGR6, CCM_CCGRx_CGn(1));
|
||||
clk[VF610_CLK_DMAMUX3] = imx_clk_gate2("dmamux3", "platform_bus", CCM_CCGR6, CCM_CCGRx_CGn(2));
|
||||
|
||||
clk[VF610_CLK_SNVS] = imx_clk_gate2("snvs-rtc", "ipg_bus", CCM_CCGR6, CCM_CCGRx_CGn(7));
|
||||
|
||||
imx_check_clocks(clk, ARRAY_SIZE(clk));
|
||||
|
||||
clk_set_parent(clk[VF610_CLK_QSPI0_SEL], clk[VF610_CLK_PLL1_PFD4]);
|
||||
|
|
|
@ -20,6 +20,7 @@ enum imx_pllv3_type {
|
|||
IMX_PLLV3_GENERIC,
|
||||
IMX_PLLV3_SYS,
|
||||
IMX_PLLV3_USB,
|
||||
IMX_PLLV3_USB_VF610,
|
||||
IMX_PLLV3_AV,
|
||||
IMX_PLLV3_ENET,
|
||||
};
|
||||
|
|
|
@ -70,6 +70,10 @@ void imx_set_soc_revision(unsigned int rev);
|
|||
unsigned int imx_get_soc_revision(void);
|
||||
void imx_init_revision_from_anatop(void);
|
||||
struct device *imx_soc_device_init(void);
|
||||
void imx6_enable_rbc(bool enable);
|
||||
void imx_gpc_set_arm_power_in_lpm(bool power_off);
|
||||
void imx_gpc_set_arm_power_up_timing(u32 sw2iso, u32 sw);
|
||||
void imx_gpc_set_arm_power_down_timing(u32 sw2iso, u32 sw);
|
||||
|
||||
enum mxc_cpu_pwr_mode {
|
||||
WAIT_CLOCKED, /* wfi only */
|
||||
|
|
|
@ -0,0 +1,105 @@
|
|||
/*
|
||||
* Copyright (C) 2014 Freescale Semiconductor, Inc.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*/
|
||||
|
||||
#include <linux/cpuidle.h>
|
||||
#include <linux/cpu_pm.h>
|
||||
#include <linux/module.h>
|
||||
#include <asm/cpuidle.h>
|
||||
#include <asm/proc-fns.h>
|
||||
#include <asm/suspend.h>
|
||||
|
||||
#include "common.h"
|
||||
#include "cpuidle.h"
|
||||
|
||||
static int imx6sx_idle_finish(unsigned long val)
|
||||
{
|
||||
cpu_do_idle();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int imx6sx_enter_wait(struct cpuidle_device *dev,
|
||||
struct cpuidle_driver *drv, int index)
|
||||
{
|
||||
imx6q_set_lpm(WAIT_UNCLOCKED);
|
||||
|
||||
switch (index) {
|
||||
case 1:
|
||||
cpu_do_idle();
|
||||
break;
|
||||
case 2:
|
||||
imx6_enable_rbc(true);
|
||||
imx_gpc_set_arm_power_in_lpm(true);
|
||||
imx_set_cpu_jump(0, v7_cpu_resume);
|
||||
/* Need to notify there is a cpu pm operation. */
|
||||
cpu_pm_enter();
|
||||
cpu_cluster_pm_enter();
|
||||
|
||||
cpu_suspend(0, imx6sx_idle_finish);
|
||||
|
||||
cpu_cluster_pm_exit();
|
||||
cpu_pm_exit();
|
||||
imx_gpc_set_arm_power_in_lpm(false);
|
||||
imx6_enable_rbc(false);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
imx6q_set_lpm(WAIT_CLOCKED);
|
||||
|
||||
return index;
|
||||
}
|
||||
|
||||
static struct cpuidle_driver imx6sx_cpuidle_driver = {
|
||||
.name = "imx6sx_cpuidle",
|
||||
.owner = THIS_MODULE,
|
||||
.states = {
|
||||
/* WFI */
|
||||
ARM_CPUIDLE_WFI_STATE,
|
||||
/* WAIT */
|
||||
{
|
||||
.exit_latency = 50,
|
||||
.target_residency = 75,
|
||||
.flags = CPUIDLE_FLAG_TIMER_STOP,
|
||||
.enter = imx6sx_enter_wait,
|
||||
.name = "WAIT",
|
||||
.desc = "Clock off",
|
||||
},
|
||||
/* WAIT + ARM power off */
|
||||
{
|
||||
/*
|
||||
* ARM gating 31us * 5 + RBC clear 65us
|
||||
* and some margin for SW execution, here set it
|
||||
* to 300us.
|
||||
*/
|
||||
.exit_latency = 300,
|
||||
.target_residency = 500,
|
||||
.enter = imx6sx_enter_wait,
|
||||
.name = "LOW-POWER-IDLE",
|
||||
.desc = "ARM power off",
|
||||
},
|
||||
},
|
||||
.state_count = 3,
|
||||
.safe_state_index = 0,
|
||||
};
|
||||
|
||||
int __init imx6sx_cpuidle_init(void)
|
||||
{
|
||||
imx6_enable_rbc(false);
|
||||
/*
|
||||
* set ARM power up/down timing to the fastest,
|
||||
* sw2iso and sw can be set to one 32K cycle = 31us
|
||||
* except for power up sw2iso which need to be
|
||||
* larger than LDO ramp up time.
|
||||
*/
|
||||
imx_gpc_set_arm_power_up_timing(2, 1);
|
||||
imx_gpc_set_arm_power_down_timing(1, 1);
|
||||
|
||||
return cpuidle_register(&imx6sx_cpuidle_driver, NULL);
|
||||
}
|
|
@ -14,6 +14,7 @@
|
|||
extern int imx5_cpuidle_init(void);
|
||||
extern int imx6q_cpuidle_init(void);
|
||||
extern int imx6sl_cpuidle_init(void);
|
||||
extern int imx6sx_cpuidle_init(void);
|
||||
#else
|
||||
static inline int imx5_cpuidle_init(void)
|
||||
{
|
||||
|
@ -27,4 +28,8 @@ static inline int imx6sl_cpuidle_init(void)
|
|||
{
|
||||
return 0;
|
||||
}
|
||||
static inline int imx6sx_cpuidle_init(void)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -20,6 +20,10 @@
|
|||
|
||||
#define GPC_IMR1 0x008
|
||||
#define GPC_PGC_CPU_PDN 0x2a0
|
||||
#define GPC_PGC_CPU_PUPSCR 0x2a4
|
||||
#define GPC_PGC_CPU_PDNSCR 0x2a8
|
||||
#define GPC_PGC_SW2ISO_SHIFT 0x8
|
||||
#define GPC_PGC_SW_SHIFT 0x0
|
||||
|
||||
#define IMR_NUM 4
|
||||
|
||||
|
@ -27,6 +31,23 @@ static void __iomem *gpc_base;
|
|||
static u32 gpc_wake_irqs[IMR_NUM];
|
||||
static u32 gpc_saved_imrs[IMR_NUM];
|
||||
|
||||
void imx_gpc_set_arm_power_up_timing(u32 sw2iso, u32 sw)
|
||||
{
|
||||
writel_relaxed((sw2iso << GPC_PGC_SW2ISO_SHIFT) |
|
||||
(sw << GPC_PGC_SW_SHIFT), gpc_base + GPC_PGC_CPU_PUPSCR);
|
||||
}
|
||||
|
||||
void imx_gpc_set_arm_power_down_timing(u32 sw2iso, u32 sw)
|
||||
{
|
||||
writel_relaxed((sw2iso << GPC_PGC_SW2ISO_SHIFT) |
|
||||
(sw << GPC_PGC_SW_SHIFT), gpc_base + GPC_PGC_CPU_PDNSCR);
|
||||
}
|
||||
|
||||
void imx_gpc_set_arm_power_in_lpm(bool power_off)
|
||||
{
|
||||
writel_relaxed(power_off, gpc_base + GPC_PGC_CPU_PDN);
|
||||
}
|
||||
|
||||
void imx_gpc_pre_suspend(bool arm_power_off)
|
||||
{
|
||||
void __iomem *reg_imr1 = gpc_base + GPC_IMR1;
|
||||
|
@ -34,7 +55,7 @@ void imx_gpc_pre_suspend(bool arm_power_off)
|
|||
|
||||
/* Tell GPC to power off ARM core when suspend */
|
||||
if (arm_power_off)
|
||||
writel_relaxed(0x1, gpc_base + GPC_PGC_CPU_PDN);
|
||||
imx_gpc_set_arm_power_in_lpm(arm_power_off);
|
||||
|
||||
for (i = 0; i < IMR_NUM; i++) {
|
||||
gpc_saved_imrs[i] = readl_relaxed(reg_imr1 + i * 4);
|
||||
|
@ -48,7 +69,7 @@ void imx_gpc_post_resume(void)
|
|||
int i;
|
||||
|
||||
/* Keep ARM core powered on for other low-power modes */
|
||||
writel_relaxed(0x0, gpc_base + GPC_PGC_CPU_PDN);
|
||||
imx_gpc_set_arm_power_in_lpm(false);
|
||||
|
||||
for (i = 0; i < IMR_NUM; i++)
|
||||
writel_relaxed(gpc_saved_imrs[i], reg_imr1 + i * 4);
|
||||
|
|
|
@ -90,7 +90,7 @@ static void __init imx6sx_init_irq(void)
|
|||
|
||||
static void __init imx6sx_init_late(void)
|
||||
{
|
||||
imx6q_cpuidle_init();
|
||||
imx6sx_cpuidle_init();
|
||||
|
||||
if (IS_ENABLED(CONFIG_ARM_IMX6Q_CPUFREQ))
|
||||
platform_device_register_simple("imx6q-cpufreq", -1, NULL, 0);
|
||||
|
|
|
@ -13,11 +13,14 @@
|
|||
#include <asm/hardware/cache-l2x0.h>
|
||||
|
||||
static const char * const vf610_dt_compat[] __initconst = {
|
||||
"fsl,vf500",
|
||||
"fsl,vf510",
|
||||
"fsl,vf600",
|
||||
"fsl,vf610",
|
||||
NULL,
|
||||
};
|
||||
|
||||
DT_MACHINE_START(VYBRID_VF610, "Freescale Vybrid VF610 (Device Tree)")
|
||||
DT_MACHINE_START(VYBRID_VF610, "Freescale Vybrid VF5xx/VF6xx (Device Tree)")
|
||||
.l2c_aux_val = 0,
|
||||
.l2c_aux_mask = ~0,
|
||||
.dt_compat = vf610_dt_compat,
|
||||
|
|
|
@ -205,7 +205,7 @@ void imx6q_set_int_mem_clk_lpm(bool enable)
|
|||
writel_relaxed(val, ccm_base + CGPR);
|
||||
}
|
||||
|
||||
static void imx6q_enable_rbc(bool enable)
|
||||
void imx6_enable_rbc(bool enable)
|
||||
{
|
||||
u32 val;
|
||||
|
||||
|
@ -359,17 +359,16 @@ static int imx6q_pm_enter(suspend_state_t state)
|
|||
* RBC setting, so we do NOT need to do that here.
|
||||
*/
|
||||
if (!imx6_suspend_in_ocram_fn)
|
||||
imx6q_enable_rbc(true);
|
||||
imx6_enable_rbc(true);
|
||||
imx_gpc_pre_suspend(true);
|
||||
imx_anatop_pre_suspend();
|
||||
imx_set_cpu_jump(0, v7_cpu_resume);
|
||||
/* Zzz ... */
|
||||
cpu_suspend(0, imx6q_suspend_finish);
|
||||
if (cpu_is_imx6q() || cpu_is_imx6dl())
|
||||
imx_smp_prepare();
|
||||
imx_anatop_post_resume();
|
||||
imx_gpc_post_resume();
|
||||
imx6q_enable_rbc(false);
|
||||
imx6_enable_rbc(false);
|
||||
imx6q_enable_wb(false);
|
||||
imx6q_set_int_mem_clk_lpm(true);
|
||||
imx6q_set_lpm(WAIT_CLOCKED);
|
||||
|
|
|
@ -192,6 +192,7 @@
|
|||
#define VF610_PLL5_BYPASS 179
|
||||
#define VF610_PLL6_BYPASS 180
|
||||
#define VF610_PLL7_BYPASS 181
|
||||
#define VF610_CLK_END 182
|
||||
#define VF610_CLK_SNVS 182
|
||||
#define VF610_CLK_END 183
|
||||
|
||||
#endif /* __DT_BINDINGS_CLOCK_VF610_H */
|
||||
|
|
Loading…
Reference in New Issue