* [PATCH v2 0/5] Add support for imx6qp
@ 2015-12-15 6:07 Bai Ping
2015-12-15 6:07 ` [PATCH v2 1/5] ARM: dts: imx: Add basic dts support for imx6qp SOC Bai Ping
` (4 more replies)
0 siblings, 5 replies; 13+ messages in thread
From: Bai Ping @ 2015-12-15 6:07 UTC (permalink / raw)
To: shawnguo, kernel
Cc: pawel.moll, robh+dt, mturquette, sboyd, linux-arm-kernel,
linux-clk, devicetree
This patchset add basic support for i.MX6Quad Plus SOC.
change for v2:
-- address commnet from Fabio Estevam, split the dts
into three patch:
dts for imx6qp soc; dts for imx6qp-sabresd
and dts for imx6qp-sabreauto
-- fix a typo in commit, the chip name should be i.MX6Quad Plus
Bai Ping (5):
ARM: dts: imx: Add basic dts support for imx6qp SOC
ARM: dts: imx: Add basic dts support for imx6qp-sabresd
ARM: dts: imx: Add basic dts support for imx6qp-sabreauto
clk: imx: Add clock support for imx6qp
ARM: imx: Add msl code support for imx6qp
arch/arm/boot/dts/Makefile | 2 +
arch/arm/boot/dts/imx6q.dtsi | 2 +-
arch/arm/boot/dts/imx6qdl-sabresd.dtsi | 1 +
arch/arm/boot/dts/imx6qp-sabreauto.dts | 67 +++++++++++++
arch/arm/boot/dts/imx6qp-sabresd.dts | 59 +++++++++++
arch/arm/boot/dts/imx6qp.dtsi | 157 ++++++++++++++++++++++++++++++
arch/arm/mach-imx/anatop.c | 5 +-
arch/arm/mach-imx/mach-imx6q.c | 8 +-
drivers/clk/imx/clk-imx6q.c | 132 ++++++++++++++++++++-----
include/dt-bindings/clock/imx6qdl-clock.h | 16 ++-
10 files changed, 417 insertions(+), 32 deletions(-)
create mode 100644 arch/arm/boot/dts/imx6qp-sabreauto.dts
create mode 100644 arch/arm/boot/dts/imx6qp-sabresd.dts
create mode 100644 arch/arm/boot/dts/imx6qp.dtsi
--
1.9.1
^ permalink raw reply [flat|nested] 13+ messages in thread* [PATCH v2 1/5] ARM: dts: imx: Add basic dts support for imx6qp SOC 2015-12-15 6:07 [PATCH v2 0/5] Add support for imx6qp Bai Ping @ 2015-12-15 6:07 ` Bai Ping 2016-01-28 7:42 ` Shawn Guo 2015-12-15 6:07 ` [PATCH v2 2/5] ARM: dts: imx: Add basic dts support for imx6qp-sabresd Bai Ping ` (3 subsequent siblings) 4 siblings, 1 reply; 13+ messages in thread From: Bai Ping @ 2015-12-15 6:07 UTC (permalink / raw) To: shawnguo, kernel Cc: pawel.moll, robh+dt, mturquette, sboyd, linux-arm-kernel, linux-clk, devicetree The i.MX6Quad Plus processor is an high performance SOC of i.MX6 family. It has enhanced graphics performance and increased overall memory bandwidth compared to i.MX6Q. Most of the design are same as i.MX6Quad/Dual, so code for i.MX6Quad can be resued by this chip. The revision number is identied as i.MX6Q Rev2.0, but actually it is a new chip, as we did many change to the overall architecture. This patch adds basic dtsi file support for the new i.MX6Quad Plus processor. Signed-off-by: Bai Ping <b51503@freescale.com> --- arch/arm/boot/dts/imx6q.dtsi | 2 +- arch/arm/boot/dts/imx6qp.dtsi | 157 ++++++++++++++++++++++++++++++ include/dt-bindings/clock/imx6qdl-clock.h | 16 ++- 3 files changed, 173 insertions(+), 2 deletions(-) create mode 100644 arch/arm/boot/dts/imx6qp.dtsi diff --git a/arch/arm/boot/dts/imx6q.dtsi b/arch/arm/boot/dts/imx6q.dtsi index a266a56..e26d0fd 100644 --- a/arch/arm/boot/dts/imx6q.dtsi +++ b/arch/arm/boot/dts/imx6q.dtsi @@ -22,7 +22,7 @@ #address-cells = <1>; #size-cells = <0>; - cpu@0 { + cpu0: cpu@0 { compatible = "arm,cortex-a9"; device_type = "cpu"; reg = <0>; diff --git a/arch/arm/boot/dts/imx6qp.dtsi b/arch/arm/boot/dts/imx6qp.dtsi new file mode 100644 index 0000000..e43751f --- /dev/null +++ b/arch/arm/boot/dts/imx6qp.dtsi @@ -0,0 +1,157 @@ +/* + * Copyright 2015 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. + * + */ + +/ { + aliases { + pre0 = &pre1; + pre1 = &pre2; + pre2 = &pre3; + pre3 = &pre4; + prg0 = &prg1; + prg1 = &prg2; + }; + + soc { + ocram_2: sram@00940000 { + compatible = "mmio-sram"; + reg = <0x00940000 0x20000>; + clocks = <&clks IMX6QDL_CLK_OCRAM>; + }; + + ocram_3: sram@00960000 { + compatible = "mmio-sram"; + reg = <0x00960000 0x20000>; + clocks = <&clks IMX6QDL_CLK_OCRAM>; + }; + + pcie: pcie@0x01000000 { + compatible = "fsl,imx6qp-pcie", "snps,dw-pcie"; + reg = <0x01ffc000 0x4000>, <0x01f00000 0x80000>; + reg-names = "dbi", "config"; + #address-cells = <3>; + #size-cells = <2>; + device_type = "pci"; + ranges = <0x81000000 0 0 0x01f80000 0 0x00010000 /* downstream I/O */ + 0x82000000 0 0x01000000 0x01000000 0 0x00f00000>; /* non-prefetchable memory */ + num-lanes = <1>; + interrupts = <0 120 IRQ_TYPE_LEVEL_HIGH>; + interrupt-names = "msi"; + #interrupt-cells = <1>; + interrupt-map-mask = <0 0 0 0x7>; + interrupt-map = <0 0 0 1 &intc 0 123 IRQ_TYPE_LEVEL_HIGH>, + <0 0 0 2 &intc 0 122 IRQ_TYPE_LEVEL_HIGH>, + <0 0 0 3 &intc 0 121 IRQ_TYPE_LEVEL_HIGH>, + <0 0 0 4 &intc 0 120 IRQ_TYPE_LEVEL_HIGH>; + clocks = <&clks IMX6QDL_CLK_PCIE_REF_125M>, + <&clks IMX6QDL_CLK_SATA_REF_100M>, + <&clks IMX6QDL_CLK_LVDS1_GATE>, <&clks IMX6QDL_CLK_PCIE_AXI>; + clock-names = "pcie_phy", "ref_100m", "pcie_bus", "pcie"; + status = "disabled"; + }; + + aips-bus@02100000 { /* AIPS2 */ + pre1: pre@021c8000 { + compatible = "fsl,imx6q-pre"; + reg = <0x021c8000 0x1000>; + clocks = <&clks IMX6QDL_CLK_PRE0>; + interrupts = <0 90 IRQ_TYPE_EDGE_RISING>; + ocram = <&ocram_2>; + status = "disabled"; + }; + + pre2: pre@021c9000 { + compatible = "fsl,imx6q-pre"; + reg = <0x021c9000 0x1000>; + clocks = <&clks IMX6QDL_CLK_PRE1>; + interrupts = <0 97 IRQ_TYPE_EDGE_RISING>; + ocram = <&ocram_2>; + status = "disabled"; + }; + + pre3: pre@021ca000 { + compatible = "fsl,imx6q-pre"; + reg = <0x021ca000 0x1000>; + clocks = <&clks IMX6QDL_CLK_PRE2>; + interrupts = <0 98 IRQ_TYPE_EDGE_RISING>; + ocram = <&ocram_3>; + status = "disabled"; + }; + + pre4: pre@021cb000 { + compatible = "fsl,imx6q-pre"; + reg = <0x021cb000 0x1000>; + clocks = <&clks IMX6QDL_CLK_PRE3>; + interrupts = <0 99 IRQ_TYPE_EDGE_RISING>; + ocram = <&ocram_3>; + status = "disabled"; + }; + + prg1: prg@021cc000 { + compatible = "fsl,imx6q-prg"; + reg = <0x021cc000 0x1000>; + clocks = <&clks IMX6QDL_CLK_PRG0_AXI>, + <&clks IMX6QDL_CLK_PRG0_APB>; + clock-names = "axi", "apb"; + gpr = <&gpr>; + status = "disabled"; + }; + + prg2: prg@021cd000 { + compatible = "fsl,imx6q-prg"; + reg = <0x021cd000 0x1000>; + clocks = <&clks IMX6QDL_CLK_PRG1_AXI>, + <&clks IMX6QDL_CLK_PRG1_APB>; + clock-names = "axi", "apb"; + gpr = <&gpr>; + status = "disabled"; + }; + }; + + ipu1: ipu@02400000 { + compatible = "fsl,imx6qp-ipu", "fsl,imx6q-ipu"; + clocks = <&clks IMX6QDL_CLK_IPU1>, + <&clks IMX6QDL_CLK_IPU1_DI0>, <&clks IMX6QDL_CLK_IPU1_DI1>, + <&clks IMX6QDL_CLK_IPU1_DI0_SEL>, <&clks IMX6QDL_CLK_IPU1_DI1_SEL>, + <&clks IMX6QDL_CLK_LDB_DI0_PODF>, <&clks IMX6QDL_CLK_LDB_DI1_PODF>, + <&clks IMX6QDL_CLK_PRG0_APB>; + clock-names = "bus", + "di0", "di1", + "di0_sel", "di1_sel", + "ldb_di0", "ldb_di1", "prg"; + }; + + ipu2: ipu@02800000 { + compatible = "fsl,imx6qp-ipu", "fsl,imx6q-ipu"; + clocks = <&clks IMX6QDL_CLK_IPU2>, + <&clks IMX6QDL_CLK_IPU2_DI0>, <&clks IMX6QDL_CLK_IPU2_DI1>, + <&clks IMX6QDL_CLK_IPU2_DI0_SEL>, <&clks IMX6QDL_CLK_IPU2_DI1_SEL>, + <&clks IMX6QDL_CLK_LDB_DI0_PODF>, <&clks IMX6QDL_CLK_LDB_DI1_PODF>, + <&clks IMX6QDL_CLK_PRG1_APB>; + clock-names = "bus", + "di0", "di1", + "di0_sel", "di1_sel", + "ldb_di0", "ldb_di1", "prg"; + }; + + sata: sata@02200000 { + compatible = "fsl,imx6qp-ahci"; + reg = <0x02200000 0x4000>; + interrupts = <0 39 IRQ_TYPE_LEVEL_HIGH>; + clocks = <&clks IMX6QDL_CLK_SATA>, + <&clks IMX6QDL_CLK_SATA_REF_100M>, + <&clks IMX6QDL_CLK_AHB>; + clock-names = "sata", "sata_ref", "ahb"; + status = "disabled"; + }; + }; +}; + +&ldb { + compatible = "fsl,imx6qp-ldb", "fsl,imx6q-ldb", "fsl,imx53-ldb"; +}; diff --git a/include/dt-bindings/clock/imx6qdl-clock.h b/include/dt-bindings/clock/imx6qdl-clock.h index 77985cc..2905033 100644 --- a/include/dt-bindings/clock/imx6qdl-clock.h +++ b/include/dt-bindings/clock/imx6qdl-clock.h @@ -255,6 +255,20 @@ #define IMX6QDL_CLK_CAAM_ACLK 242 #define IMX6QDL_CLK_CAAM_IPG 243 #define IMX6QDL_CLK_SPDIF_GCLK 244 -#define IMX6QDL_CLK_END 245 +#define IMX6QDL_CLK_UART_SEL 245 +#define IMX6QDL_CLK_IPG_PER_SEL 246 +#define IMX6QDL_CLK_ECSPI_SEL 247 +#define IMX6QDL_CLK_CAN_SEL 248 +#define IMX6QDL_CLK_MMDC_CH1_AXI_CG 249 +#define IMX6QDL_CLK_PRE0 250 +#define IMX6QDL_CLK_PRE1 251 +#define IMX6QDL_CLK_PRE2 252 +#define IMX6QDL_CLK_PRE3 253 +#define IMX6QDL_CLK_PRG0_AXI 254 +#define IMX6QDL_CLK_PRG1_AXI 255 +#define IMX6QDL_CLK_PRG0_APB 256 +#define IMX6QDL_CLK_PRG1_APB 257 +#define IMX6QDL_CLK_PRE_AXI 258 +#define IMX6QDL_CLK_END 259 #endif /* __DT_BINDINGS_CLOCK_IMX6QDL_H */ -- 1.9.1 ^ permalink raw reply related [flat|nested] 13+ messages in thread
* Re: [PATCH v2 1/5] ARM: dts: imx: Add basic dts support for imx6qp SOC 2015-12-15 6:07 ` [PATCH v2 1/5] ARM: dts: imx: Add basic dts support for imx6qp SOC Bai Ping @ 2016-01-28 7:42 ` Shawn Guo 2016-01-28 10:38 ` Ping Bai 0 siblings, 1 reply; 13+ messages in thread From: Shawn Guo @ 2016-01-28 7:42 UTC (permalink / raw) To: Bai Ping Cc: kernel, pawel.moll, robh+dt, mturquette, sboyd, linux-arm-kernel, linux-clk, devicetree On Tue, Dec 15, 2015 at 02:07:49PM +0800, Bai Ping wrote: > The i.MX6Quad Plus processor is an high performance SOC of i.MX6 family. > It has enhanced graphics performance and increased overall memory bandwidth > compared to i.MX6Q. Most of the design are same as i.MX6Quad/Dual, so code > for i.MX6Quad can be resued by this chip. The revision number is identied as > i.MX6Q Rev2.0, but actually it is a new chip, as we did many change to the > overall architecture. > > This patch adds basic dtsi file support for the new i.MX6Quad Plus processor. > > Signed-off-by: Bai Ping <b51503@freescale.com> > --- > arch/arm/boot/dts/imx6q.dtsi | 2 +- > arch/arm/boot/dts/imx6qp.dtsi | 157 ++++++++++++++++++++++++++++++ > include/dt-bindings/clock/imx6qdl-clock.h | 16 ++- > 3 files changed, 173 insertions(+), 2 deletions(-) > create mode 100644 arch/arm/boot/dts/imx6qp.dtsi > > diff --git a/arch/arm/boot/dts/imx6q.dtsi b/arch/arm/boot/dts/imx6q.dtsi > index a266a56..e26d0fd 100644 > --- a/arch/arm/boot/dts/imx6q.dtsi > +++ b/arch/arm/boot/dts/imx6q.dtsi > @@ -22,7 +22,7 @@ > #address-cells = <1>; > #size-cells = <0>; > > - cpu@0 { > + cpu0: cpu@0 { > compatible = "arm,cortex-a9"; > device_type = "cpu"; > reg = <0>; > diff --git a/arch/arm/boot/dts/imx6qp.dtsi b/arch/arm/boot/dts/imx6qp.dtsi > new file mode 100644 > index 0000000..e43751f > --- /dev/null > +++ b/arch/arm/boot/dts/imx6qp.dtsi > @@ -0,0 +1,157 @@ > +/* > + * Copyright 2015 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. For new dts files, we suggest to use GPL/X11 dual license to consider non-Linux users. You can grep "dual-licensed" in arch/arm/boot/dts to find a plenty of examples. > + * > + */ > + Do you not need to include "imx6qdl.dtsi" here? > +/ { > + aliases { > + pre0 = &pre1; > + pre1 = &pre2; > + pre2 = &pre3; > + pre3 = &pre4; > + prg0 = &prg1; > + prg1 = &prg2; > + }; > + > + soc { > + ocram_2: sram@00940000 { The label can just be ocram2. > + compatible = "mmio-sram"; > + reg = <0x00940000 0x20000>; > + clocks = <&clks IMX6QDL_CLK_OCRAM>; > + }; > + > + ocram_3: sram@00960000 { ocram3 > + compatible = "mmio-sram"; > + reg = <0x00960000 0x20000>; > + clocks = <&clks IMX6QDL_CLK_OCRAM>; > + }; > + > + pcie: pcie@0x01000000 { > + compatible = "fsl,imx6qp-pcie", "snps,dw-pcie"; > + reg = <0x01ffc000 0x4000>, <0x01f00000 0x80000>; > + reg-names = "dbi", "config"; > + #address-cells = <3>; > + #size-cells = <2>; > + device_type = "pci"; > + ranges = <0x81000000 0 0 0x01f80000 0 0x00010000 /* downstream I/O */ > + 0x82000000 0 0x01000000 0x01000000 0 0x00f00000>; /* non-prefetchable memory */ > + num-lanes = <1>; > + interrupts = <0 120 IRQ_TYPE_LEVEL_HIGH>; > + interrupt-names = "msi"; > + #interrupt-cells = <1>; > + interrupt-map-mask = <0 0 0 0x7>; > + interrupt-map = <0 0 0 1 &intc 0 123 IRQ_TYPE_LEVEL_HIGH>, > + <0 0 0 2 &intc 0 122 IRQ_TYPE_LEVEL_HIGH>, > + <0 0 0 3 &intc 0 121 IRQ_TYPE_LEVEL_HIGH>, > + <0 0 0 4 &intc 0 120 IRQ_TYPE_LEVEL_HIGH>; > + clocks = <&clks IMX6QDL_CLK_PCIE_REF_125M>, > + <&clks IMX6QDL_CLK_SATA_REF_100M>, > + <&clks IMX6QDL_CLK_LVDS1_GATE>, <&clks IMX6QDL_CLK_PCIE_AXI>; > + clock-names = "pcie_phy", "ref_100m", "pcie_bus", "pcie"; > + status = "disabled"; > + }; > + > + aips-bus@02100000 { /* AIPS2 */ > + pre1: pre@021c8000 { > + compatible = "fsl,imx6q-pre"; Is there already a device tree binding and driver for this block in upstream kernel? I do not accepted any unestablished device. > + reg = <0x021c8000 0x1000>; > + clocks = <&clks IMX6QDL_CLK_PRE0>; > + interrupts = <0 90 IRQ_TYPE_EDGE_RISING>; > + ocram = <&ocram_2>; > + status = "disabled"; > + }; > + > + pre2: pre@021c9000 { > + compatible = "fsl,imx6q-pre"; > + reg = <0x021c9000 0x1000>; > + clocks = <&clks IMX6QDL_CLK_PRE1>; > + interrupts = <0 97 IRQ_TYPE_EDGE_RISING>; > + ocram = <&ocram_2>; > + status = "disabled"; > + }; > + > + pre3: pre@021ca000 { > + compatible = "fsl,imx6q-pre"; > + reg = <0x021ca000 0x1000>; > + clocks = <&clks IMX6QDL_CLK_PRE2>; > + interrupts = <0 98 IRQ_TYPE_EDGE_RISING>; > + ocram = <&ocram_3>; > + status = "disabled"; > + }; > + > + pre4: pre@021cb000 { > + compatible = "fsl,imx6q-pre"; > + reg = <0x021cb000 0x1000>; > + clocks = <&clks IMX6QDL_CLK_PRE3>; > + interrupts = <0 99 IRQ_TYPE_EDGE_RISING>; > + ocram = <&ocram_3>; > + status = "disabled"; > + }; > + > + prg1: prg@021cc000 { > + compatible = "fsl,imx6q-prg"; Ditto > + reg = <0x021cc000 0x1000>; > + clocks = <&clks IMX6QDL_CLK_PRG0_AXI>, > + <&clks IMX6QDL_CLK_PRG0_APB>; > + clock-names = "axi", "apb"; > + gpr = <&gpr>; > + status = "disabled"; > + }; > + > + prg2: prg@021cd000 { > + compatible = "fsl,imx6q-prg"; > + reg = <0x021cd000 0x1000>; > + clocks = <&clks IMX6QDL_CLK_PRG1_AXI>, > + <&clks IMX6QDL_CLK_PRG1_APB>; > + clock-names = "axi", "apb"; > + gpr = <&gpr>; > + status = "disabled"; > + }; > + }; > + > + ipu1: ipu@02400000 { > + compatible = "fsl,imx6qp-ipu", "fsl,imx6q-ipu"; > + clocks = <&clks IMX6QDL_CLK_IPU1>, > + <&clks IMX6QDL_CLK_IPU1_DI0>, <&clks IMX6QDL_CLK_IPU1_DI1>, > + <&clks IMX6QDL_CLK_IPU1_DI0_SEL>, <&clks IMX6QDL_CLK_IPU1_DI1_SEL>, > + <&clks IMX6QDL_CLK_LDB_DI0_PODF>, <&clks IMX6QDL_CLK_LDB_DI1_PODF>, > + <&clks IMX6QDL_CLK_PRG0_APB>; > + clock-names = "bus", > + "di0", "di1", > + "di0_sel", "di1_sel", > + "ldb_di0", "ldb_di1", "prg"; > + }; > + > + ipu2: ipu@02800000 { > + compatible = "fsl,imx6qp-ipu", "fsl,imx6q-ipu"; > + clocks = <&clks IMX6QDL_CLK_IPU2>, > + <&clks IMX6QDL_CLK_IPU2_DI0>, <&clks IMX6QDL_CLK_IPU2_DI1>, > + <&clks IMX6QDL_CLK_IPU2_DI0_SEL>, <&clks IMX6QDL_CLK_IPU2_DI1_SEL>, > + <&clks IMX6QDL_CLK_LDB_DI0_PODF>, <&clks IMX6QDL_CLK_LDB_DI1_PODF>, > + <&clks IMX6QDL_CLK_PRG1_APB>; > + clock-names = "bus", > + "di0", "di1", > + "di0_sel", "di1_sel", > + "ldb_di0", "ldb_di1", "prg"; > + }; > + > + sata: sata@02200000 { > + compatible = "fsl,imx6qp-ahci"; > + reg = <0x02200000 0x4000>; > + interrupts = <0 39 IRQ_TYPE_LEVEL_HIGH>; > + clocks = <&clks IMX6QDL_CLK_SATA>, > + <&clks IMX6QDL_CLK_SATA_REF_100M>, > + <&clks IMX6QDL_CLK_AHB>; > + clock-names = "sata", "sata_ref", "ahb"; > + status = "disabled"; > + }; > + }; > +}; > + > +&ldb { > + compatible = "fsl,imx6qp-ldb", "fsl,imx6q-ldb", "fsl,imx53-ldb"; > +}; > diff --git a/include/dt-bindings/clock/imx6qdl-clock.h b/include/dt-bindings/clock/imx6qdl-clock.h > index 77985cc..2905033 100644 > --- a/include/dt-bindings/clock/imx6qdl-clock.h > +++ b/include/dt-bindings/clock/imx6qdl-clock.h This file should be updated in the patch that updates clock driver. Only after these new clocks get supported by clock driver, you can use them in device tree. Shawn > @@ -255,6 +255,20 @@ > #define IMX6QDL_CLK_CAAM_ACLK 242 > #define IMX6QDL_CLK_CAAM_IPG 243 > #define IMX6QDL_CLK_SPDIF_GCLK 244 > -#define IMX6QDL_CLK_END 245 > +#define IMX6QDL_CLK_UART_SEL 245 > +#define IMX6QDL_CLK_IPG_PER_SEL 246 > +#define IMX6QDL_CLK_ECSPI_SEL 247 > +#define IMX6QDL_CLK_CAN_SEL 248 > +#define IMX6QDL_CLK_MMDC_CH1_AXI_CG 249 > +#define IMX6QDL_CLK_PRE0 250 > +#define IMX6QDL_CLK_PRE1 251 > +#define IMX6QDL_CLK_PRE2 252 > +#define IMX6QDL_CLK_PRE3 253 > +#define IMX6QDL_CLK_PRG0_AXI 254 > +#define IMX6QDL_CLK_PRG1_AXI 255 > +#define IMX6QDL_CLK_PRG0_APB 256 > +#define IMX6QDL_CLK_PRG1_APB 257 > +#define IMX6QDL_CLK_PRE_AXI 258 > +#define IMX6QDL_CLK_END 259 > > #endif /* __DT_BINDINGS_CLOCK_IMX6QDL_H */ > -- > 1.9.1 > > ^ permalink raw reply [flat|nested] 13+ messages in thread
* RE: [PATCH v2 1/5] ARM: dts: imx: Add basic dts support for imx6qp SOC 2016-01-28 7:42 ` Shawn Guo @ 2016-01-28 10:38 ` Ping Bai 0 siblings, 0 replies; 13+ messages in thread From: Ping Bai @ 2016-01-28 10:38 UTC (permalink / raw) To: Shawn Guo Cc: kernel@pengutronix.de, pawel.moll@arm.com, robh+dt@kernel.org, mturquette@baylibre.com, sboyd@codeaurora.org, linux-arm-kernel@lists.infradead.org, linux-clk@vger.kernel.org, devicetree@vger.kernel.org, jacky.baip@gmail.com DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogU2hhd24gR3VvIFttYWls dG86c2hhd25ndW9Aa2VybmVsLm9yZ10NCj4gU2VudDogMjAxNsTqMdTCMjjI1SAxNTo0Mw0KPiBU bzogYjUxNTAzQGZyZWVzY2FsZS5jb20NCj4gQ2M6IGtlcm5lbEBwZW5ndXRyb25peC5kZTsgcGF3 ZWwubW9sbEBhcm0uY29tOyByb2JoK2R0QGtlcm5lbC5vcmc7DQo+IG10dXJxdWV0dGVAYmF5bGli cmUuY29tOyBzYm95ZEBjb2RlYXVyb3JhLm9yZzsgbGludXgtYXJtLQ0KPiBrZXJuZWxAbGlzdHMu aW5mcmFkZWFkLm9yZzsgbGludXgtY2xrQHZnZXIua2VybmVsLm9yZzsNCj4gZGV2aWNldHJlZUB2 Z2VyLmtlcm5lbC5vcmcNCj4gU3ViamVjdDogUmU6IFtQQVRDSCB2MiAxLzVdIEFSTTogZHRzOiBp bXg6IEFkZCBiYXNpYyBkdHMgc3VwcG9ydCBmb3IgaW14NnFwDQo+IFNPQw0KPiANCj4gT24gVHVl LCBEZWMgMTUsIDIwMTUgYXQgMDI6MDc6NDlQTSArMDgwMCwgQmFpIFBpbmcgd3JvdGU6DQo+ID4g VGhlIGkuTVg2UXVhZCBQbHVzIHByb2Nlc3NvciBpcyBhbiBoaWdoIHBlcmZvcm1hbmNlIFNPQyBv ZiBpLk1YNiBmYW1pbHkuDQo+ID4gSXQgaGFzIGVuaGFuY2VkIGdyYXBoaWNzIHBlcmZvcm1hbmNl IGFuZCBpbmNyZWFzZWQgb3ZlcmFsbCBtZW1vcnkNCj4gPiBiYW5kd2lkdGggY29tcGFyZWQgdG8g aS5NWDZRLiBNb3N0IG9mIHRoZSBkZXNpZ24gYXJlIHNhbWUgYXMNCj4gPiBpLk1YNlF1YWQvRHVh bCwgc28gY29kZSBmb3IgaS5NWDZRdWFkIGNhbiBiZSByZXN1ZWQgYnkgdGhpcyBjaGlwLiBUaGUN Cj4gPiByZXZpc2lvbiBudW1iZXIgaXMgaWRlbnRpZWQgYXMgaS5NWDZRIFJldjIuMCwgYnV0IGFj dHVhbGx5IGl0IGlzIGEgbmV3DQo+ID4gY2hpcCwgYXMgd2UgZGlkIG1hbnkgY2hhbmdlIHRvIHRo ZSBvdmVyYWxsIGFyY2hpdGVjdHVyZS4NCj4gPg0KPiA+IFRoaXMgcGF0Y2ggYWRkcyBiYXNpYyBk dHNpIGZpbGUgc3VwcG9ydCBmb3IgdGhlIG5ldyBpLk1YNlF1YWQgUGx1cyBwcm9jZXNzb3IuDQo+ ID4NCj4gPiBTaWduZWQtb2ZmLWJ5OiBCYWkgUGluZyA8YjUxNTAzQGZyZWVzY2FsZS5jb20+DQo+ ID4gLS0tDQo+ID4gIGFyY2gvYXJtL2Jvb3QvZHRzL2lteDZxLmR0c2kgICAgICAgICAgICAgIHwg ICAyICstDQo+ID4gIGFyY2gvYXJtL2Jvb3QvZHRzL2lteDZxcC5kdHNpICAgICAgICAgICAgIHwg MTU3DQo+ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKw0KPiA+ICBpbmNsdWRlL2R0LWJp bmRpbmdzL2Nsb2NrL2lteDZxZGwtY2xvY2suaCB8ICAxNiArKy0NCj4gPiAgMyBmaWxlcyBjaGFu Z2VkLCAxNzMgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkgIGNyZWF0ZSBtb2RlDQo+ID4g MTAwNjQ0IGFyY2gvYXJtL2Jvb3QvZHRzL2lteDZxcC5kdHNpDQo+ID4NCj4gPiBkaWZmIC0tZ2l0 IGEvYXJjaC9hcm0vYm9vdC9kdHMvaW14NnEuZHRzaQ0KPiA+IGIvYXJjaC9hcm0vYm9vdC9kdHMv aW14NnEuZHRzaSBpbmRleCBhMjY2YTU2Li5lMjZkMGZkIDEwMDY0NA0KPiA+IC0tLSBhL2FyY2gv YXJtL2Jvb3QvZHRzL2lteDZxLmR0c2kNCj4gPiArKysgYi9hcmNoL2FybS9ib290L2R0cy9pbXg2 cS5kdHNpDQo+ID4gQEAgLTIyLDcgKzIyLDcgQEANCj4gPiAgCQkjYWRkcmVzcy1jZWxscyA9IDwx PjsNCj4gPiAgCQkjc2l6ZS1jZWxscyA9IDwwPjsNCj4gPg0KPiA+IC0JCWNwdUAwIHsNCj4gPiAr CQljcHUwOiBjcHVAMCB7DQo+ID4gIAkJCWNvbXBhdGlibGUgPSAiYXJtLGNvcnRleC1hOSI7DQo+ ID4gIAkJCWRldmljZV90eXBlID0gImNwdSI7DQo+ID4gIAkJCXJlZyA9IDwwPjsNCj4gPiBkaWZm IC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvaW14NnFwLmR0c2kNCj4gPiBiL2FyY2gvYXJtL2Jv b3QvZHRzL2lteDZxcC5kdHNpIG5ldyBmaWxlIG1vZGUgMTAwNjQ0IGluZGV4DQo+ID4gMDAwMDAw MC4uZTQzNzUxZg0KPiA+IC0tLSAvZGV2L251bGwNCj4gPiArKysgYi9hcmNoL2FybS9ib290L2R0 cy9pbXg2cXAuZHRzaQ0KPiA+IEBAIC0wLDAgKzEsMTU3IEBADQo+ID4gKy8qDQo+ID4gKyAqIENv cHlyaWdodCAyMDE1IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuDQo+ID4gKyAqDQo+ID4g KyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp dCBhbmQvb3INCj4gPiArbW9kaWZ5DQo+ID4gKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzDQo+ID4gKyAqIHB1Ymxpc2hl ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLg0KPiANCj4gRm9yIG5ldyBkdHMgZmls ZXMsIHdlIHN1Z2dlc3QgdG8gdXNlIEdQTC9YMTEgZHVhbCBsaWNlbnNlIHRvIGNvbnNpZGVyIG5v bi1MaW51eA0KPiB1c2Vycy4gIFlvdSBjYW4gZ3JlcCAiZHVhbC1saWNlbnNlZCIgaW4gYXJjaC9h cm0vYm9vdC9kdHMgdG8gZmluZCBhIHBsZW50eSBvZg0KPiBleGFtcGxlcy4NCj4gDQoNCm9rLCBJ IHdpbGwgZml4IHRoaXMgaW4gcGF0Y2ggVjMuDQoNCj4gPiArICoNCj4gPiArICovDQo+ID4gKw0K PiANCj4gRG8geW91IG5vdCBuZWVkIHRvIGluY2x1ZGUgImlteDZxZGwuZHRzaSIgaGVyZT8NCj4g DQo+ID4gKy8gew0KPiA+ICsJYWxpYXNlcyB7DQo+ID4gKwkJcHJlMCA9ICZwcmUxOw0KPiA+ICsJ CXByZTEgPSAmcHJlMjsNCj4gPiArCQlwcmUyID0gJnByZTM7DQo+ID4gKwkJcHJlMyA9ICZwcmU0 Ow0KPiA+ICsJCXByZzAgPSAmcHJnMTsNCj4gPiArCQlwcmcxID0gJnByZzI7DQo+ID4gKwl9Ow0K PiA+ICsNCj4gPiArCXNvYyB7DQo+ID4gKwkJb2NyYW1fMjogc3JhbUAwMDk0MDAwMCB7DQo+IA0K PiBUaGUgbGFiZWwgY2FuIGp1c3QgYmUgb2NyYW0yLg0KPiANCg0Kb2ssIHRoYW5rcyBmb3IgeW91 IHN1Z2dlc3QuDQoNCj4gPiArCQkJY29tcGF0aWJsZSA9ICJtbWlvLXNyYW0iOw0KPiA+ICsJCQly ZWcgPSA8MHgwMDk0MDAwMCAweDIwMDAwPjsNCj4gPiArCQkJY2xvY2tzID0gPCZjbGtzIElNWDZR RExfQ0xLX09DUkFNPjsNCj4gPiArCQl9Ow0KPiA+ICsNCj4gPiArCQlvY3JhbV8zOiBzcmFtQDAw OTYwMDAwIHsNCj4gDQo+IG9jcmFtMw0KPiANCj4gPiArCQkJY29tcGF0aWJsZSA9ICJtbWlvLXNy YW0iOw0KPiA+ICsJCQlyZWcgPSA8MHgwMDk2MDAwMCAweDIwMDAwPjsNCj4gPiArCQkJY2xvY2tz ID0gPCZjbGtzIElNWDZRRExfQ0xLX09DUkFNPjsNCj4gPiArCQl9Ow0KPiA+ICsNCj4gPiArCQlw Y2llOiBwY2llQDB4MDEwMDAwMDAgew0KPiA+ICsJCQljb21wYXRpYmxlID0gImZzbCxpbXg2cXAt cGNpZSIsICJzbnBzLGR3LXBjaWUiOw0KPiA+ICsJCQlyZWcgPSA8MHgwMWZmYzAwMCAweDQwMDA+ LCA8MHgwMWYwMDAwMCAweDgwMDAwPjsNCj4gPiArCQkJcmVnLW5hbWVzID0gImRiaSIsICJjb25m aWciOw0KPiA+ICsJCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsNCj4gPiArCQkJI3NpemUtY2VsbHMg PSA8Mj47DQo+ID4gKwkJCWRldmljZV90eXBlID0gInBjaSI7DQo+ID4gKwkJCXJhbmdlcyA9IDww eDgxMDAwMDAwIDAgMCAgICAgICAgICAweDAxZjgwMDAwIDAgMHgwMDAxMDAwMA0KPiAvKiBkb3du c3RyZWFtIEkvTyAqLw0KPiA+ICsJCQkJICAweDgyMDAwMDAwIDAgMHgwMTAwMDAwMCAweDAxMDAw MDAwIDANCj4gMHgwMGYwMDAwMD47IC8qIG5vbi1wcmVmZXRjaGFibGUgbWVtb3J5ICovDQo+ID4g KwkJCW51bS1sYW5lcyA9IDwxPjsNCj4gPiArCQkJaW50ZXJydXB0cyA9IDwwIDEyMCBJUlFfVFlQ RV9MRVZFTF9ISUdIPjsNCj4gPiArCQkJaW50ZXJydXB0LW5hbWVzID0gIm1zaSI7DQo+ID4gKwkJ CSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47DQo+ID4gKwkJCWludGVycnVwdC1tYXAtbWFzayA9IDww IDAgMCAweDc+Ow0KPiA+ICsJCQlpbnRlcnJ1cHQtbWFwID0gPDAgMCAwIDEgJmludGMgMCAxMjMN Cj4gSVJRX1RZUEVfTEVWRUxfSElHSD4sDQo+ID4gKwkJCQkJPDAgMCAwIDIgJmludGMgMCAxMjIN Cj4gSVJRX1RZUEVfTEVWRUxfSElHSD4sDQo+ID4gKwkJCQkJPDAgMCAwIDMgJmludGMgMCAxMjEN Cj4gSVJRX1RZUEVfTEVWRUxfSElHSD4sDQo+ID4gKwkJCQkJPDAgMCAwIDQgJmludGMgMCAxMjAN Cj4gSVJRX1RZUEVfTEVWRUxfSElHSD47DQo+ID4gKwkJCWNsb2NrcyA9IDwmY2xrcyBJTVg2UURM X0NMS19QQ0lFX1JFRl8xMjVNPiwNCj4gPiArCQkJCSA8JmNsa3MgSU1YNlFETF9DTEtfU0FUQV9S RUZfMTAwTT4sDQo+ID4gKwkJCQkgPCZjbGtzIElNWDZRRExfQ0xLX0xWRFMxX0dBVEU+LCA8JmNs a3MNCj4gSU1YNlFETF9DTEtfUENJRV9BWEk+Ow0KPiA+ICsJCQljbG9jay1uYW1lcyA9ICJwY2ll X3BoeSIsICJyZWZfMTAwbSIsICJwY2llX2J1cyIsDQo+ICJwY2llIjsNCj4gPiArCQkJc3RhdHVz ID0gImRpc2FibGVkIjsNCj4gPiArCQl9Ow0KPiA+ICsNCj4gPiArCQlhaXBzLWJ1c0AwMjEwMDAw MCB7IC8qIEFJUFMyICovDQo+ID4gKwkJCXByZTE6IHByZUAwMjFjODAwMCB7DQo+ID4gKwkJCQlj b21wYXRpYmxlID0gImZzbCxpbXg2cS1wcmUiOw0KPiANCj4gSXMgdGhlcmUgYWxyZWFkeSBhIGRl dmljZSB0cmVlIGJpbmRpbmcgYW5kIGRyaXZlciBmb3IgdGhpcyBibG9jayBpbiB1cHN0cmVhbQ0K PiBrZXJuZWw/ICBJIGRvIG5vdCBhY2NlcHRlZCBhbnkgdW5lc3RhYmxpc2hlZCBkZXZpY2UuDQo+ DQoNCk5vIGRyaXZlciBhdmFpbGFibGUgaW4gdXBzdHJlYW0ga2VybmVsLCBJIHdpbGwgcmVtb3Zl IHRoZXNlIG5vZGUgaW4gcGF0Y2ggVjMuIA0KDQo+ID4gKwkJCQlyZWcgPSA8MHgwMjFjODAwMCAw eDEwMDA+Ow0KPiA+ICsJCQkJY2xvY2tzID0gPCZjbGtzIElNWDZRRExfQ0xLX1BSRTA+Ow0KPiA+ ICsJCQkJaW50ZXJydXB0cyA9IDwwIDkwIElSUV9UWVBFX0VER0VfUklTSU5HPjsNCj4gPiArCQkJ CW9jcmFtID0gPCZvY3JhbV8yPjsNCj4gPiArCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7DQo+ID4g KwkJCX07DQo+ID4gKw0KPiA+ICsJCQlwcmUyOiBwcmVAMDIxYzkwMDAgew0KPiA+ICsJCQkJY29t cGF0aWJsZSA9ICJmc2wsaW14NnEtcHJlIjsNCj4gPiArCQkJCXJlZyA9IDwweDAyMWM5MDAwIDB4 MTAwMD47DQo+ID4gKwkJCQljbG9ja3MgPSA8JmNsa3MgSU1YNlFETF9DTEtfUFJFMT47DQo+ID4g KwkJCQlpbnRlcnJ1cHRzID0gPDAgOTcgSVJRX1RZUEVfRURHRV9SSVNJTkc+Ow0KPiA+ICsJCQkJ b2NyYW0gPSA8Jm9jcmFtXzI+Ow0KPiA+ICsJCQkJc3RhdHVzID0gImRpc2FibGVkIjsNCj4gPiAr CQkJfTsNCj4gPiArDQo+ID4gKwkJCXByZTM6IHByZUAwMjFjYTAwMCB7DQo+ID4gKwkJCQljb21w YXRpYmxlID0gImZzbCxpbXg2cS1wcmUiOw0KPiA+ICsJCQkJcmVnID0gPDB4MDIxY2EwMDAgMHgx MDAwPjsNCj4gPiArCQkJCWNsb2NrcyA9IDwmY2xrcyBJTVg2UURMX0NMS19QUkUyPjsNCj4gPiAr CQkJCWludGVycnVwdHMgPSA8MCA5OCBJUlFfVFlQRV9FREdFX1JJU0lORz47DQo+ID4gKwkJCQlv Y3JhbSA9IDwmb2NyYW1fMz47DQo+ID4gKwkJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOw0KPiA+ICsJ CQl9Ow0KPiA+ICsNCj4gPiArCQkJcHJlNDogcHJlQDAyMWNiMDAwIHsNCj4gPiArCQkJCWNvbXBh dGlibGUgPSAiZnNsLGlteDZxLXByZSI7DQo+ID4gKwkJCQlyZWcgPSA8MHgwMjFjYjAwMCAweDEw MDA+Ow0KPiA+ICsJCQkJY2xvY2tzID0gPCZjbGtzIElNWDZRRExfQ0xLX1BSRTM+Ow0KPiA+ICsJ CQkJaW50ZXJydXB0cyA9IDwwIDk5IElSUV9UWVBFX0VER0VfUklTSU5HPjsNCj4gPiArCQkJCW9j cmFtID0gPCZvY3JhbV8zPjsNCj4gPiArCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7DQo+ID4gKwkJ CX07DQo+ID4gKw0KPiA+ICsJCQlwcmcxOiBwcmdAMDIxY2MwMDAgew0KPiA+ICsJCQkJY29tcGF0 aWJsZSA9ICJmc2wsaW14NnEtcHJnIjsNCj4gDQo+IERpdHRvDQo+IA0KPiA+ICsJCQkJcmVnID0g PDB4MDIxY2MwMDAgMHgxMDAwPjsNCj4gPiArCQkJCWNsb2NrcyA9IDwmY2xrcyBJTVg2UURMX0NM S19QUkcwX0FYST4sDQo+ID4gKwkJCQkJIDwmY2xrcyBJTVg2UURMX0NMS19QUkcwX0FQQj47DQo+ ID4gKwkJCQljbG9jay1uYW1lcyA9ICJheGkiLCAiYXBiIjsNCj4gPiArCQkJCWdwciA9IDwmZ3By PjsNCj4gPiArCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7DQo+ID4gKwkJCX07DQo+ID4gKw0KPiA+ ICsJCQlwcmcyOiBwcmdAMDIxY2QwMDAgew0KPiA+ICsJCQkJY29tcGF0aWJsZSA9ICJmc2wsaW14 NnEtcHJnIjsNCj4gPiArCQkJCXJlZyA9IDwweDAyMWNkMDAwIDB4MTAwMD47DQo+ID4gKwkJCQlj bG9ja3MgPSA8JmNsa3MgSU1YNlFETF9DTEtfUFJHMV9BWEk+LA0KPiA+ICsJCQkJCSA8JmNsa3Mg SU1YNlFETF9DTEtfUFJHMV9BUEI+Ow0KPiA+ICsJCQkJY2xvY2stbmFtZXMgPSAiYXhpIiwgImFw YiI7DQo+ID4gKwkJCQlncHIgPSA8Jmdwcj47DQo+ID4gKwkJCQlzdGF0dXMgPSAiZGlzYWJsZWQi Ow0KPiA+ICsJCQl9Ow0KPiA+ICsJCX07DQo+ID4gKw0KPiA+ICsJCWlwdTE6IGlwdUAwMjQwMDAw MCB7DQo+ID4gKwkJCWNvbXBhdGlibGUgPSAiZnNsLGlteDZxcC1pcHUiLCAiZnNsLGlteDZxLWlw dSI7DQo+ID4gKwkJCWNsb2NrcyA9IDwmY2xrcyBJTVg2UURMX0NMS19JUFUxPiwNCj4gPiArCQkJ CSA8JmNsa3MgSU1YNlFETF9DTEtfSVBVMV9ESTA+LCA8JmNsa3MNCj4gSU1YNlFETF9DTEtfSVBV MV9ESTE+LA0KPiA+ICsJCQkJIDwmY2xrcyBJTVg2UURMX0NMS19JUFUxX0RJMF9TRUw+LCA8JmNs a3MNCj4gSU1YNlFETF9DTEtfSVBVMV9ESTFfU0VMPiwNCj4gPiArCQkJCSA8JmNsa3MgSU1YNlFE TF9DTEtfTERCX0RJMF9QT0RGPiwgPCZjbGtzDQo+IElNWDZRRExfQ0xLX0xEQl9ESTFfUE9ERj4s DQo+ID4gKwkJCQkgPCZjbGtzIElNWDZRRExfQ0xLX1BSRzBfQVBCPjsNCj4gPiArCQkJY2xvY2st bmFtZXMgPSAiYnVzIiwNCj4gPiArCQkJCSAgICAgICJkaTAiLCAiZGkxIiwNCj4gPiArCQkJCSAg ICAgICJkaTBfc2VsIiwgImRpMV9zZWwiLA0KPiA+ICsJCQkJICAgICAgImxkYl9kaTAiLCAibGRi X2RpMSIsICJwcmciOw0KPiA+ICsJCX07DQo+ID4gKw0KPiA+ICsJCWlwdTI6IGlwdUAwMjgwMDAw MCB7DQo+ID4gKwkJCWNvbXBhdGlibGUgPSAiZnNsLGlteDZxcC1pcHUiLCAiZnNsLGlteDZxLWlw dSI7DQo+ID4gKwkJCWNsb2NrcyA9IDwmY2xrcyBJTVg2UURMX0NMS19JUFUyPiwNCj4gPiArCQkJ CSA8JmNsa3MgSU1YNlFETF9DTEtfSVBVMl9ESTA+LCA8JmNsa3MNCj4gSU1YNlFETF9DTEtfSVBV Ml9ESTE+LA0KPiA+ICsJCQkJIDwmY2xrcyBJTVg2UURMX0NMS19JUFUyX0RJMF9TRUw+LCA8JmNs a3MNCj4gSU1YNlFETF9DTEtfSVBVMl9ESTFfU0VMPiwNCj4gPiArCQkJCSA8JmNsa3MgSU1YNlFE TF9DTEtfTERCX0RJMF9QT0RGPiwgPCZjbGtzDQo+IElNWDZRRExfQ0xLX0xEQl9ESTFfUE9ERj4s DQo+ID4gKwkJCQkgPCZjbGtzIElNWDZRRExfQ0xLX1BSRzFfQVBCPjsNCj4gPiArCQkJY2xvY2st bmFtZXMgPSAiYnVzIiwNCj4gPiArCQkJCSAgICAgICJkaTAiLCAiZGkxIiwNCj4gPiArCQkJCSAg ICAgICJkaTBfc2VsIiwgImRpMV9zZWwiLA0KPiA+ICsJCQkJICAgICAgImxkYl9kaTAiLCAibGRi X2RpMSIsICJwcmciOw0KPiA+ICsJCX07DQo+ID4gKw0KPiA+ICsJCXNhdGE6IHNhdGFAMDIyMDAw MDAgew0KPiA+ICsJCQljb21wYXRpYmxlID0gImZzbCxpbXg2cXAtYWhjaSI7DQo+ID4gKwkJCXJl ZyA9IDwweDAyMjAwMDAwIDB4NDAwMD47DQo+ID4gKwkJCWludGVycnVwdHMgPSA8MCAzOSBJUlFf VFlQRV9MRVZFTF9ISUdIPjsNCj4gPiArCQkJY2xvY2tzID0gPCZjbGtzIElNWDZRRExfQ0xLX1NB VEE+LA0KPiA+ICsJCQkJIDwmY2xrcyBJTVg2UURMX0NMS19TQVRBX1JFRl8xMDBNPiwNCj4gPiAr CQkJCSA8JmNsa3MgSU1YNlFETF9DTEtfQUhCPjsNCj4gPiArCQkJY2xvY2stbmFtZXMgPSAic2F0 YSIsICJzYXRhX3JlZiIsICJhaGIiOw0KPiA+ICsJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOw0KPiA+ ICsJCX07DQo+ID4gKwl9Ow0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArJmxkYiB7DQo+ID4gKwljb21w YXRpYmxlID0gImZzbCxpbXg2cXAtbGRiIiwgImZzbCxpbXg2cS1sZGIiLCAiZnNsLGlteDUzLWxk YiI7IH07DQo+ID4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHQtYmluZGluZ3MvY2xvY2svaW14NnFk bC1jbG9jay5oDQo+ID4gYi9pbmNsdWRlL2R0LWJpbmRpbmdzL2Nsb2NrL2lteDZxZGwtY2xvY2su aA0KPiA+IGluZGV4IDc3OTg1Y2MuLjI5MDUwMzMgMTAwNjQ0DQo+ID4gLS0tIGEvaW5jbHVkZS9k dC1iaW5kaW5ncy9jbG9jay9pbXg2cWRsLWNsb2NrLmgNCj4gPiArKysgYi9pbmNsdWRlL2R0LWJp bmRpbmdzL2Nsb2NrL2lteDZxZGwtY2xvY2suaA0KPiANCj4gVGhpcyBmaWxlIHNob3VsZCBiZSB1 cGRhdGVkIGluIHRoZSBwYXRjaCB0aGF0IHVwZGF0ZXMgY2xvY2sgZHJpdmVyLg0KPiBPbmx5IGFm dGVyIHRoZXNlIG5ldyBjbG9ja3MgZ2V0IHN1cHBvcnRlZCBieSBjbG9jayBkcml2ZXIsIHlvdSBj YW4gdXNlIHRoZW0gaW4NCj4gZGV2aWNlIHRyZWUuDQo+IA0KDQpvaywgdGhhbmtzIGZvciB5b3Ug cmV2aWV3Lg0KDQo+IFNoYXduDQo+IA0KPiA+IEBAIC0yNTUsNiArMjU1LDIwIEBADQo+ID4gICNk ZWZpbmUgSU1YNlFETF9DTEtfQ0FBTV9BQ0xLCQkJMjQyDQo+ID4gICNkZWZpbmUgSU1YNlFETF9D TEtfQ0FBTV9JUEcJCQkyNDMNCj4gPiAgI2RlZmluZSBJTVg2UURMX0NMS19TUERJRl9HQ0xLCQkJ MjQ0DQo+ID4gLSNkZWZpbmUgSU1YNlFETF9DTEtfRU5ECQkJCTI0NQ0KPiA+ICsjZGVmaW5lIElN WDZRRExfQ0xLX1VBUlRfU0VMCQkJMjQ1DQo+ID4gKyNkZWZpbmUgSU1YNlFETF9DTEtfSVBHX1BF Ul9TRUwJCQkyNDYNCj4gPiArI2RlZmluZSBJTVg2UURMX0NMS19FQ1NQSV9TRUwJCQkyNDcNCj4g PiArI2RlZmluZSBJTVg2UURMX0NMS19DQU5fU0VMCQkJMjQ4DQo+ID4gKyNkZWZpbmUgSU1YNlFE TF9DTEtfTU1EQ19DSDFfQVhJX0NHCQkyNDkNCj4gPiArI2RlZmluZSBJTVg2UURMX0NMS19QUkUw CQkJMjUwDQo+ID4gKyNkZWZpbmUgSU1YNlFETF9DTEtfUFJFMQkJCTI1MQ0KPiA+ICsjZGVmaW5l IElNWDZRRExfQ0xLX1BSRTIJCQkyNTINCj4gPiArI2RlZmluZSBJTVg2UURMX0NMS19QUkUzCQkJ MjUzDQo+ID4gKyNkZWZpbmUgSU1YNlFETF9DTEtfUFJHMF9BWEkJCQkyNTQNCj4gPiArI2RlZmlu ZSBJTVg2UURMX0NMS19QUkcxX0FYSQkJCTI1NQ0KPiA+ICsjZGVmaW5lIElNWDZRRExfQ0xLX1BS RzBfQVBCCQkJMjU2DQo+ID4gKyNkZWZpbmUgSU1YNlFETF9DTEtfUFJHMV9BUEIJCQkyNTcNCj4g PiArI2RlZmluZSBJTVg2UURMX0NMS19QUkVfQVhJCQkJMjU4DQo+ID4gKyNkZWZpbmUgSU1YNlFE TF9DTEtfRU5ECQkJCTI1OQ0KPiA+DQo+ID4gICNlbmRpZiAvKiBfX0RUX0JJTkRJTkdTX0NMT0NL X0lNWDZRRExfSCAqLw0KPiA+IC0tDQo+ID4gMS45LjENCj4gPg0KPiA+DQo= ^ permalink raw reply [flat|nested] 13+ messages in thread
* [PATCH v2 2/5] ARM: dts: imx: Add basic dts support for imx6qp-sabresd 2015-12-15 6:07 [PATCH v2 0/5] Add support for imx6qp Bai Ping 2015-12-15 6:07 ` [PATCH v2 1/5] ARM: dts: imx: Add basic dts support for imx6qp SOC Bai Ping @ 2015-12-15 6:07 ` Bai Ping 2016-01-28 7:54 ` Shawn Guo 2015-12-15 6:07 ` [PATCH v2 3/5] ARM: dts: imx: Add basic dts support for imx6qp-sabreauto Bai Ping ` (2 subsequent siblings) 4 siblings, 1 reply; 13+ messages in thread From: Bai Ping @ 2015-12-15 6:07 UTC (permalink / raw) To: shawnguo, kernel Cc: pawel.moll, robh+dt, mturquette, sboyd, linux-arm-kernel, linux-clk, devicetree The patch adds dts file for imx6qp-sabresd board. Signed-off-by: Bai Ping <b51503@freescale.com> --- arch/arm/boot/dts/Makefile | 1 + arch/arm/boot/dts/imx6qdl-sabresd.dtsi | 1 + arch/arm/boot/dts/imx6qp-sabresd.dts | 59 ++++++++++++++++++++++++++++++++++ 3 files changed, 61 insertions(+) create mode 100644 arch/arm/boot/dts/imx6qp-sabresd.dts diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile index 36d8133..dfba765 100644 --- a/arch/arm/boot/dts/Makefile +++ b/arch/arm/boot/dts/Makefile @@ -302,6 +302,7 @@ dtb-$(CONFIG_SOC_IMX6Q) += \ imx6dl-sabreauto.dtb \ imx6dl-sabrelite.dtb \ imx6dl-sabresd.dtb \ + imx6qp-sabresd.dtb \ imx6dl-tx6dl-comtft.dtb \ imx6dl-tx6u-801x.dtb \ imx6dl-tx6u-811x.dtb \ diff --git a/arch/arm/boot/dts/imx6qdl-sabresd.dtsi b/arch/arm/boot/dts/imx6qdl-sabresd.dtsi index a6d445c..f65f57b 100644 --- a/arch/arm/boot/dts/imx6qdl-sabresd.dtsi +++ b/arch/arm/boot/dts/imx6qdl-sabresd.dtsi @@ -238,6 +238,7 @@ regulator-max-microvolt = <3300000>; regulator-boot-on; regulator-always-on; + regulator-ramp-delay = <6250>; }; sw3a_reg: sw3a { diff --git a/arch/arm/boot/dts/imx6qp-sabresd.dts b/arch/arm/boot/dts/imx6qp-sabresd.dts new file mode 100644 index 0000000..c3ab2b6 --- /dev/null +++ b/arch/arm/boot/dts/imx6qp-sabresd.dts @@ -0,0 +1,59 @@ +/* + * Copyright (C) 2015 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 "imx6q-sabresd.dts" +#include "imx6qp.dtsi" + +/ { + model = "Freescale i.MX6 Quad Plus SABRE Smart Device Board"; + compatible = "fsl,imx6qp-sabresd", "fsl,imx6qp"; +}; + +&cpu0 { + arm-supply = <&sw2_reg>; +}; + +&iomuxc { + imx6qdl-sabresd { + pinctrl_usdhc2: usdhc2grp { + fsl,pins = < + MX6QDL_PAD_SD2_CMD__SD2_CMD 0x17059 + MX6QDL_PAD_SD2_CLK__SD2_CLK 0x10071 + MX6QDL_PAD_SD2_DAT0__SD2_DATA0 0x17059 + MX6QDL_PAD_SD2_DAT1__SD2_DATA1 0x17059 + MX6QDL_PAD_SD2_DAT2__SD2_DATA2 0x17059 + MX6QDL_PAD_SD2_DAT3__SD2_DATA3 0x17059 + MX6QDL_PAD_NANDF_D4__SD2_DATA4 0x17059 + MX6QDL_PAD_NANDF_D5__SD2_DATA5 0x17059 + MX6QDL_PAD_NANDF_D6__SD2_DATA6 0x17059 + MX6QDL_PAD_NANDF_D7__SD2_DATA7 0x17059 + >; + }; + + pinctrl_usdhc3: usdhc3grp { + fsl,pins = < + MX6QDL_PAD_SD3_CMD__SD3_CMD 0x17059 + MX6QDL_PAD_SD3_CLK__SD3_CLK 0x10071 + 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 + MX6QDL_PAD_SD3_DAT4__SD3_DATA4 0x17059 + MX6QDL_PAD_SD3_DAT5__SD3_DATA5 0x17059 + MX6QDL_PAD_SD3_DAT6__SD3_DATA6 0x17059 + MX6QDL_PAD_SD3_DAT7__SD3_DATA7 0x17059 + >; + }; + }; +}; + +&pcie { + power-on-gpio = <&gpio3 19 0>; + reset-gpio = <&gpio7 12 0>; + status = "okay"; +}; -- 1.9.1 ^ permalink raw reply related [flat|nested] 13+ messages in thread
* Re: [PATCH v2 2/5] ARM: dts: imx: Add basic dts support for imx6qp-sabresd 2015-12-15 6:07 ` [PATCH v2 2/5] ARM: dts: imx: Add basic dts support for imx6qp-sabresd Bai Ping @ 2016-01-28 7:54 ` Shawn Guo 2016-01-28 10:43 ` Ping Bai 0 siblings, 1 reply; 13+ messages in thread From: Shawn Guo @ 2016-01-28 7:54 UTC (permalink / raw) To: Bai Ping Cc: kernel, devicetree, pawel.moll, mturquette, sboyd, robh+dt, linux-clk, linux-arm-kernel On Tue, Dec 15, 2015 at 02:07:50PM +0800, Bai Ping wrote: > The patch adds dts file for imx6qp-sabresd board. > > Signed-off-by: Bai Ping <b51503@freescale.com> > --- > arch/arm/boot/dts/Makefile | 1 + > arch/arm/boot/dts/imx6qdl-sabresd.dtsi | 1 + > arch/arm/boot/dts/imx6qp-sabresd.dts | 59 ++++++++++++++++++++++++++++++++++ > 3 files changed, 61 insertions(+) > create mode 100644 arch/arm/boot/dts/imx6qp-sabresd.dts > > diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile > index 36d8133..dfba765 100644 > --- a/arch/arm/boot/dts/Makefile > +++ b/arch/arm/boot/dts/Makefile > @@ -302,6 +302,7 @@ dtb-$(CONFIG_SOC_IMX6Q) += \ > imx6dl-sabreauto.dtb \ > imx6dl-sabrelite.dtb \ > imx6dl-sabresd.dtb \ > + imx6qp-sabresd.dtb \ Please keep the list sort alphabetically. That said, imx6qp-sabresd.dtb should be added after imx6q-* ones. > imx6dl-tx6dl-comtft.dtb \ > imx6dl-tx6u-801x.dtb \ > imx6dl-tx6u-811x.dtb \ > diff --git a/arch/arm/boot/dts/imx6qdl-sabresd.dtsi b/arch/arm/boot/dts/imx6qdl-sabresd.dtsi > index a6d445c..f65f57b 100644 > --- a/arch/arm/boot/dts/imx6qdl-sabresd.dtsi > +++ b/arch/arm/boot/dts/imx6qdl-sabresd.dtsi > @@ -238,6 +238,7 @@ > regulator-max-microvolt = <3300000>; > regulator-boot-on; > regulator-always-on; > + regulator-ramp-delay = <6250>; So this change applies to imx6q and imx6dl sabresd as well? > }; > > sw3a_reg: sw3a { > diff --git a/arch/arm/boot/dts/imx6qp-sabresd.dts b/arch/arm/boot/dts/imx6qp-sabresd.dts > new file mode 100644 > index 0000000..c3ab2b6 > --- /dev/null > +++ b/arch/arm/boot/dts/imx6qp-sabresd.dts > @@ -0,0 +1,59 @@ > +/* > + * Copyright (C) 2015 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 "imx6q-sabresd.dts" > +#include "imx6qp.dtsi" Ah, that's why you do not include "imx6qdl.dtsi" in imx6qp.dtsi. I have a question with this approach. How people should write his imx6qp board dts file, if his board never has an imx6q version? > + > +/ { > + model = "Freescale i.MX6 Quad Plus SABRE Smart Device Board"; > + compatible = "fsl,imx6qp-sabresd", "fsl,imx6qp"; > +}; > + > +&cpu0 { > + arm-supply = <&sw2_reg>; > +}; > + > +&iomuxc { > + imx6qdl-sabresd { Since commit 5fcdf6a7ed95 (pinctrl: imx: Allow parsing DT without function nodes), this additional container node can just be saved. Shawn > + pinctrl_usdhc2: usdhc2grp { > + fsl,pins = < > + MX6QDL_PAD_SD2_CMD__SD2_CMD 0x17059 > + MX6QDL_PAD_SD2_CLK__SD2_CLK 0x10071 > + MX6QDL_PAD_SD2_DAT0__SD2_DATA0 0x17059 > + MX6QDL_PAD_SD2_DAT1__SD2_DATA1 0x17059 > + MX6QDL_PAD_SD2_DAT2__SD2_DATA2 0x17059 > + MX6QDL_PAD_SD2_DAT3__SD2_DATA3 0x17059 > + MX6QDL_PAD_NANDF_D4__SD2_DATA4 0x17059 > + MX6QDL_PAD_NANDF_D5__SD2_DATA5 0x17059 > + MX6QDL_PAD_NANDF_D6__SD2_DATA6 0x17059 > + MX6QDL_PAD_NANDF_D7__SD2_DATA7 0x17059 > + >; > + }; > + > + pinctrl_usdhc3: usdhc3grp { > + fsl,pins = < > + MX6QDL_PAD_SD3_CMD__SD3_CMD 0x17059 > + MX6QDL_PAD_SD3_CLK__SD3_CLK 0x10071 > + 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 > + MX6QDL_PAD_SD3_DAT4__SD3_DATA4 0x17059 > + MX6QDL_PAD_SD3_DAT5__SD3_DATA5 0x17059 > + MX6QDL_PAD_SD3_DAT6__SD3_DATA6 0x17059 > + MX6QDL_PAD_SD3_DAT7__SD3_DATA7 0x17059 > + >; > + }; > + }; > +}; > + > +&pcie { > + power-on-gpio = <&gpio3 19 0>; > + reset-gpio = <&gpio7 12 0>; > + status = "okay"; > +}; > -- > 1.9.1 > > > _______________________________________________ > linux-arm-kernel mailing list > linux-arm-kernel@lists.infradead.org > http://lists.infradead.org/mailman/listinfo/linux-arm-kernel > ^ permalink raw reply [flat|nested] 13+ messages in thread
* RE: [PATCH v2 2/5] ARM: dts: imx: Add basic dts support for imx6qp-sabresd 2016-01-28 7:54 ` Shawn Guo @ 2016-01-28 10:43 ` Ping Bai 0 siblings, 0 replies; 13+ messages in thread From: Ping Bai @ 2016-01-28 10:43 UTC (permalink / raw) To: Shawn Guo Cc: kernel@pengutronix.de, devicetree@vger.kernel.org, pawel.moll@arm.com, mturquette@baylibre.com, sboyd@codeaurora.org, robh+dt@kernel.org, linux-clk@vger.kernel.org, linux-arm-kernel@lists.infradead.org, jacky.baip@gmail.com DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogU2hhd24gR3VvIFttYWls dG86c2hhd25ndW9Aa2VybmVsLm9yZ10NCj4gU2VudDogMjAxNsTqMdTCMjjI1SAxNTo1NA0KPiBU bzogYjUxNTAzQGZyZWVzY2FsZS5jb20NCj4gQ2M6IGtlcm5lbEBwZW5ndXRyb25peC5kZTsgZGV2 aWNldHJlZUB2Z2VyLmtlcm5lbC5vcmc7DQo+IHBhd2VsLm1vbGxAYXJtLmNvbTsgbXR1cnF1ZXR0 ZUBiYXlsaWJyZS5jb207IHNib3lkQGNvZGVhdXJvcmEub3JnOw0KPiByb2JoK2R0QGtlcm5lbC5v cmc7IGxpbnV4LWNsa0B2Z2VyLmtlcm5lbC5vcmc7IGxpbnV4LWFybS0NCj4ga2VybmVsQGxpc3Rz LmluZnJhZGVhZC5vcmcNCj4gU3ViamVjdDogUmU6IFtQQVRDSCB2MiAyLzVdIEFSTTogZHRzOiBp bXg6IEFkZCBiYXNpYyBkdHMgc3VwcG9ydCBmb3IgaW14NnFwLQ0KPiBzYWJyZXNkDQo+IA0KPiBP biBUdWUsIERlYyAxNSwgMjAxNSBhdCAwMjowNzo1MFBNICswODAwLCBCYWkgUGluZyB3cm90ZToN Cj4gPiBUaGUgcGF0Y2ggYWRkcyBkdHMgZmlsZSBmb3IgaW14NnFwLXNhYnJlc2QgYm9hcmQuDQo+ ID4NCj4gPiBTaWduZWQtb2ZmLWJ5OiBCYWkgUGluZyA8YjUxNTAzQGZyZWVzY2FsZS5jb20+DQo+ ID4gLS0tDQo+ID4gIGFyY2gvYXJtL2Jvb3QvZHRzL01ha2VmaWxlICAgICAgICAgICAgIHwgIDEg Kw0KPiA+ICBhcmNoL2FybS9ib290L2R0cy9pbXg2cWRsLXNhYnJlc2QuZHRzaSB8ICAxICsNCj4g PiAgYXJjaC9hcm0vYm9vdC9kdHMvaW14NnFwLXNhYnJlc2QuZHRzICAgfCA1OQ0KPiArKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrDQo+ID4gIDMgZmlsZXMgY2hhbmdlZCwgNjEgaW5z ZXJ0aW9ucygrKQ0KPiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQgYXJjaC9hcm0vYm9vdC9kdHMvaW14 NnFwLXNhYnJlc2QuZHRzDQo+ID4NCj4gPiBkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMv TWFrZWZpbGUgYi9hcmNoL2FybS9ib290L2R0cy9NYWtlZmlsZQ0KPiA+IGluZGV4IDM2ZDgxMzMu LmRmYmE3NjUgMTAwNjQ0DQo+ID4gLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvTWFrZWZpbGUNCj4g PiArKysgYi9hcmNoL2FybS9ib290L2R0cy9NYWtlZmlsZQ0KPiA+IEBAIC0zMDIsNiArMzAyLDcg QEAgZHRiLSQoQ09ORklHX1NPQ19JTVg2USkgKz0gXA0KPiA+ICAJaW14NmRsLXNhYnJlYXV0by5k dGIgXA0KPiA+ICAJaW14NmRsLXNhYnJlbGl0ZS5kdGIgXA0KPiA+ICAJaW14NmRsLXNhYnJlc2Qu ZHRiIFwNCj4gPiArCWlteDZxcC1zYWJyZXNkLmR0YiBcDQo+IA0KPiBQbGVhc2Uga2VlcCB0aGUg bGlzdCBzb3J0IGFscGhhYmV0aWNhbGx5LiAgVGhhdCBzYWlkLCBpbXg2cXAtc2FicmVzZC5kdGIg c2hvdWxkDQo+IGJlIGFkZGVkIGFmdGVyIGlteDZxLSogb25lcy4NCj4gDQo+ID4gIAlpbXg2ZGwt dHg2ZGwtY29tdGZ0LmR0YiBcDQo+ID4gIAlpbXg2ZGwtdHg2dS04MDF4LmR0YiBcDQo+ID4gIAlp bXg2ZGwtdHg2dS04MTF4LmR0YiBcDQo+ID4gZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRz L2lteDZxZGwtc2FicmVzZC5kdHNpDQo+ID4gYi9hcmNoL2FybS9ib290L2R0cy9pbXg2cWRsLXNh YnJlc2QuZHRzaQ0KPiA+IGluZGV4IGE2ZDQ0NWMuLmY2NWY1N2IgMTAwNjQ0DQo+ID4gLS0tIGEv YXJjaC9hcm0vYm9vdC9kdHMvaW14NnFkbC1zYWJyZXNkLmR0c2kNCj4gPiArKysgYi9hcmNoL2Fy bS9ib290L2R0cy9pbXg2cWRsLXNhYnJlc2QuZHRzaQ0KPiA+IEBAIC0yMzgsNiArMjM4LDcgQEAN Cj4gPiAgCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDMzMDAwMDA+Ow0KPiA+ICAJCQkJ cmVndWxhdG9yLWJvb3Qtb247DQo+ID4gIAkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOw0KPiA+ICsJ CQkJcmVndWxhdG9yLXJhbXAtZGVsYXkgPSA8NjI1MD47DQo+IA0KPiBTbyB0aGlzIGNoYW5nZSBh cHBsaWVzIHRvIGlteDZxIGFuZCBpbXg2ZGwgc2FicmVzZCBhcyB3ZWxsPw0KPiANCg0KWWVzLCB0 aGlzIGNoYW5nZSBhcHBsaWVzIHRvIGlteDZxIGFuZCBpbXg2ZGwgc2FicmVzZC4NCg0KPiA+ICAJ CQl9Ow0KPiA+DQo+ID4gIAkJCXN3M2FfcmVnOiBzdzNhIHsNCj4gPiBkaWZmIC0tZ2l0IGEvYXJj aC9hcm0vYm9vdC9kdHMvaW14NnFwLXNhYnJlc2QuZHRzDQo+ID4gYi9hcmNoL2FybS9ib290L2R0 cy9pbXg2cXAtc2FicmVzZC5kdHMNCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiA+IGluZGV4 IDAwMDAwMDAuLmMzYWIyYjYNCj4gPiAtLS0gL2Rldi9udWxsDQo+ID4gKysrIGIvYXJjaC9hcm0v Ym9vdC9kdHMvaW14NnFwLXNhYnJlc2QuZHRzDQo+ID4gQEAgLTAsMCArMSw1OSBAQA0KPiA+ICsv Kg0KPiA+ICsgKiBDb3B5cmlnaHQgKEMpIDIwMTUgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIElu Yy4NCj4gPiArICoNCj4gPiArICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcg0KPiA+ICttb2RpZnkNCj4gPiArICogaXQgdW5kZXIg dGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMN Cj4gPiArICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uDQo+ID4g KyAqLw0KPiA+ICsNCj4gPiArI2luY2x1ZGUgImlteDZxLXNhYnJlc2QuZHRzIg0KPiA+ICsjaW5j bHVkZSAiaW14NnFwLmR0c2kiDQo+IA0KPiBBaCwgdGhhdCdzIHdoeSB5b3UgZG8gbm90IGluY2x1 ZGUgImlteDZxZGwuZHRzaSIgaW4gaW14NnFwLmR0c2kuICBJIGhhdmUgYQ0KPiBxdWVzdGlvbiB3 aXRoIHRoaXMgYXBwcm9hY2guICBIb3cgcGVvcGxlIHNob3VsZCB3cml0ZSBoaXMgaW14NnFwIGJv YXJkIGR0cyBmaWxlLA0KPiBpZiBoaXMgYm9hcmQgbmV2ZXIgaGFzIGFuIGlteDZxIHZlcnNpb24/ DQo+IA0KIA0KU3VyZSwgaXQgaXMgYSBwcm9ibGVtLCBpbmNsdWRlIHRoZSBpbXg2cWRsLmR0c2kg aW4gaW14NnFwLmR0c2kgaXMgbW9yZSByZWFzb25hYmxlLg0KDQo+ID4gKw0KPiA+ICsvIHsNCj4g PiArCW1vZGVsID0gIkZyZWVzY2FsZSBpLk1YNiBRdWFkIFBsdXMgU0FCUkUgU21hcnQgRGV2aWNl IEJvYXJkIjsNCj4gPiArCWNvbXBhdGlibGUgPSAiZnNsLGlteDZxcC1zYWJyZXNkIiwgImZzbCxp bXg2cXAiOyB9Ow0KPiA+ICsNCj4gPiArJmNwdTAgew0KPiA+ICsJYXJtLXN1cHBseSA9IDwmc3cy X3JlZz47DQo+ID4gK307DQo+ID4gKw0KPiA+ICsmaW9tdXhjIHsNCj4gPiArCWlteDZxZGwtc2Fi cmVzZCB7DQo+IA0KPiBTaW5jZSBjb21taXQgNWZjZGY2YTdlZDk1IChwaW5jdHJsOiBpbXg6IEFs bG93IHBhcnNpbmcgRFQgd2l0aG91dCBmdW5jdGlvbg0KPiBub2RlcyksIHRoaXMgYWRkaXRpb25h bCBjb250YWluZXIgbm9kZSBjYW4ganVzdCBiZSBzYXZlZC4NCj4gDQo+IFNoYXduDQo+IA0KPiA+ ICsJCXBpbmN0cmxfdXNkaGMyOiB1c2RoYzJncnAgew0KPiA+ICsJCQlmc2wscGlucyA9IDwNCj4g PiArCQkJCU1YNlFETF9QQURfU0QyX0NNRF9fU0QyX0NNRA0KPiAJMHgxNzA1OQ0KPiA+ICsJCQkJ TVg2UURMX1BBRF9TRDJfQ0xLX19TRDJfQ0xLDQo+IAkweDEwMDcxDQo+ID4gKwkJCQlNWDZRRExf UEFEX1NEMl9EQVQwX19TRDJfREFUQTANCj4gCTB4MTcwNTkNCj4gPiArCQkJCU1YNlFETF9QQURf U0QyX0RBVDFfX1NEMl9EQVRBMQ0KPiAJMHgxNzA1OQ0KPiA+ICsJCQkJTVg2UURMX1BBRF9TRDJf REFUMl9fU0QyX0RBVEEyDQo+IAkweDE3MDU5DQo+ID4gKwkJCQlNWDZRRExfUEFEX1NEMl9EQVQz X19TRDJfREFUQTMNCj4gCTB4MTcwNTkNCj4gPiArCQkJCU1YNlFETF9QQURfTkFOREZfRDRfX1NE Ml9EQVRBNA0KPiAJMHgxNzA1OQ0KPiA+ICsJCQkJTVg2UURMX1BBRF9OQU5ERl9ENV9fU0QyX0RB VEE1DQo+IAkweDE3MDU5DQo+ID4gKwkJCQlNWDZRRExfUEFEX05BTkRGX0Q2X19TRDJfREFUQTYN Cj4gCTB4MTcwNTkNCj4gPiArCQkJCU1YNlFETF9QQURfTkFOREZfRDdfX1NEMl9EQVRBNw0KPiAJ MHgxNzA1OQ0KPiA+ICsJCQk+Ow0KPiA+ICsJCX07DQo+ID4gKw0KPiA+ICsJCXBpbmN0cmxfdXNk aGMzOiB1c2RoYzNncnAgew0KPiA+ICsJCQlmc2wscGlucyA9IDwNCj4gPiArCQkJCU1YNlFETF9Q QURfU0QzX0NNRF9fU0QzX0NNRA0KPiAJMHgxNzA1OQ0KPiA+ICsJCQkJTVg2UURMX1BBRF9TRDNf Q0xLX19TRDNfQ0xLDQo+IAkweDEwMDcxDQo+ID4gKwkJCQlNWDZRRExfUEFEX1NEM19EQVQwX19T RDNfREFUQTANCj4gCTB4MTcwNTkNCj4gPiArCQkJCU1YNlFETF9QQURfU0QzX0RBVDFfX1NEM19E QVRBMQ0KPiAJMHgxNzA1OQ0KPiA+ICsJCQkJTVg2UURMX1BBRF9TRDNfREFUMl9fU0QzX0RBVEEy DQo+IAkweDE3MDU5DQo+ID4gKwkJCQlNWDZRRExfUEFEX1NEM19EQVQzX19TRDNfREFUQTMNCj4g CTB4MTcwNTkNCj4gPiArCQkJCU1YNlFETF9QQURfU0QzX0RBVDRfX1NEM19EQVRBNA0KPiAJMHgx NzA1OQ0KPiA+ICsJCQkJTVg2UURMX1BBRF9TRDNfREFUNV9fU0QzX0RBVEE1DQo+IAkweDE3MDU5 DQo+ID4gKwkJCQlNWDZRRExfUEFEX1NEM19EQVQ2X19TRDNfREFUQTYNCj4gCTB4MTcwNTkNCj4g PiArCQkJCU1YNlFETF9QQURfU0QzX0RBVDdfX1NEM19EQVRBNw0KPiAJMHgxNzA1OQ0KPiA+ICsJ CQk+Ow0KPiA+ICsJCX07DQo+ID4gKwl9Ow0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArJnBjaWUgew0K PiA+ICsJcG93ZXItb24tZ3BpbyA9IDwmZ3BpbzMgMTkgMD47DQo+ID4gKwlyZXNldC1ncGlvID0g PCZncGlvNyAxMiAwPjsNCj4gPiArCXN0YXR1cyA9ICJva2F5IjsNCj4gPiArfTsNCj4gPiAtLQ0K PiA+IDEuOS4xDQo+ID4NCj4gPg0KPiA+IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fDQo+ID4gbGludXgtYXJtLWtlcm5lbCBtYWlsaW5nIGxpc3QNCj4gPiBs aW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcNCj4gPiBodHRwOi8vbGlzdHMuaW5m cmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFybS1rZXJuZWwNCj4gPg0K ^ permalink raw reply [flat|nested] 13+ messages in thread
* [PATCH v2 3/5] ARM: dts: imx: Add basic dts support for imx6qp-sabreauto 2015-12-15 6:07 [PATCH v2 0/5] Add support for imx6qp Bai Ping 2015-12-15 6:07 ` [PATCH v2 1/5] ARM: dts: imx: Add basic dts support for imx6qp SOC Bai Ping 2015-12-15 6:07 ` [PATCH v2 2/5] ARM: dts: imx: Add basic dts support for imx6qp-sabresd Bai Ping @ 2015-12-15 6:07 ` Bai Ping 2016-01-28 7:57 ` Shawn Guo 2015-12-15 6:07 ` [PATCH v2 4/5] clk: imx: Add clock support for imx6qp Bai Ping 2015-12-15 6:07 ` [PATCH v2 5/5] ARM: imx: Add msl code " Bai Ping 4 siblings, 1 reply; 13+ messages in thread From: Bai Ping @ 2015-12-15 6:07 UTC (permalink / raw) To: shawnguo, kernel Cc: pawel.moll, robh+dt, mturquette, sboyd, linux-arm-kernel, linux-clk, devicetree This patch adds basic dts file for imx6qp-sabreauto board. Signed-off-by: Bai Ping <b51503@freescale.com> --- arch/arm/boot/dts/Makefile | 1 + arch/arm/boot/dts/imx6qp-sabreauto.dts | 67 ++++++++++++++++++++++++++++++++++ 2 files changed, 68 insertions(+) create mode 100644 arch/arm/boot/dts/imx6qp-sabreauto.dts diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile index dfba765..7996a51 100644 --- a/arch/arm/boot/dts/Makefile +++ b/arch/arm/boot/dts/Makefile @@ -329,6 +329,7 @@ dtb-$(CONFIG_SOC_IMX6Q) += \ imx6q-phytec-pbab01.dtb \ imx6q-rex-pro.dtb \ imx6q-sabreauto.dtb \ + imx6qp-sabreauto.dtb \ imx6q-sabrelite.dtb \ imx6q-sabresd.dtb \ imx6q-sbc6x.dtb \ diff --git a/arch/arm/boot/dts/imx6qp-sabreauto.dts b/arch/arm/boot/dts/imx6qp-sabreauto.dts new file mode 100644 index 0000000..b24aae6 --- /dev/null +++ b/arch/arm/boot/dts/imx6qp-sabreauto.dts @@ -0,0 +1,67 @@ +/* + * Copyright (C) 2015 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 "imx6q-sabreauto.dts" +#include "imx6qp.dtsi" + +/ { + model = "Freescale i.MX6 Quad Plus SABRE Automotive Board"; + compatible = "fsl,imx6qp-sabreauto", "fsl,imx6qp"; +}; + + +&fec { + pinctrl-assert-gpios = <&max7322 0 GPIO_ACTIVE_HIGH>; +}; + +&i2c2 { + max7322: gpio@68 { + compatible = "maxim,max7322"; + reg = <0x68>; + gpio-controller; + #gpio-cells = <2>; + }; +}; + +&iomuxc { + imx6qdl-sabreauto { + pinctrl_enet: enetgrp { + fsl,pins = < + MX6QDL_PAD_KEY_COL1__ENET_MDIO 0x1b0b0 + MX6QDL_PAD_KEY_COL2__ENET_MDC 0x1b0b0 + MX6QDL_PAD_RGMII_TXC__RGMII_TXC 0x1b018 + MX6QDL_PAD_RGMII_TD0__RGMII_TD0 0x1b018 + MX6QDL_PAD_RGMII_TD1__RGMII_TD1 0x1b018 + MX6QDL_PAD_RGMII_TD2__RGMII_TD2 0x1b018 + MX6QDL_PAD_RGMII_TD3__RGMII_TD3 0x1b018 + MX6QDL_PAD_RGMII_TX_CTL__RGMII_TX_CTL 0x1b018 + MX6QDL_PAD_RGMII_RXC__RGMII_RXC 0x1b018 + MX6QDL_PAD_RGMII_RD0__RGMII_RD0 0x1b018 + MX6QDL_PAD_RGMII_RD1__RGMII_RD1 0x1b018 + MX6QDL_PAD_RGMII_RD2__RGMII_RD2 0x1b018 + MX6QDL_PAD_RGMII_RD3__RGMII_RD3 0x1b018 + MX6QDL_PAD_RGMII_RX_CTL__RGMII_RX_CTL 0x1b018 + MX6QDL_PAD_GPIO_16__ENET_REF_CLK 0x4001b0a8 + MX6QDL_PAD_GPIO_6__ENET_IRQ 0x000b1 + >; + }; + }; +}; + +&pcie { + reset-gpio = <&max7310_c 5 GPIO_ACTIVE_LOW>; + status = "okay"; +}; + +&sata { + status = "okay"; +}; + +&vgen3_reg { + regulator-always-on; +}; -- 1.9.1 ^ permalink raw reply related [flat|nested] 13+ messages in thread
* Re: [PATCH v2 3/5] ARM: dts: imx: Add basic dts support for imx6qp-sabreauto 2015-12-15 6:07 ` [PATCH v2 3/5] ARM: dts: imx: Add basic dts support for imx6qp-sabreauto Bai Ping @ 2016-01-28 7:57 ` Shawn Guo 0 siblings, 0 replies; 13+ messages in thread From: Shawn Guo @ 2016-01-28 7:57 UTC (permalink / raw) To: Bai Ping Cc: kernel, pawel.moll, robh+dt, mturquette, sboyd, linux-arm-kernel, linux-clk, devicetree On Tue, Dec 15, 2015 at 02:07:51PM +0800, Bai Ping wrote: > This patch adds basic dts file for imx6qp-sabreauto board. > > Signed-off-by: Bai Ping <b51503@freescale.com> > --- > arch/arm/boot/dts/Makefile | 1 + > arch/arm/boot/dts/imx6qp-sabreauto.dts | 67 ++++++++++++++++++++++++++++++++++ > 2 files changed, 68 insertions(+) > create mode 100644 arch/arm/boot/dts/imx6qp-sabreauto.dts > > diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile > index dfba765..7996a51 100644 > --- a/arch/arm/boot/dts/Makefile > +++ b/arch/arm/boot/dts/Makefile > @@ -329,6 +329,7 @@ dtb-$(CONFIG_SOC_IMX6Q) += \ > imx6q-phytec-pbab01.dtb \ > imx6q-rex-pro.dtb \ > imx6q-sabreauto.dtb \ > + imx6qp-sabreauto.dtb \ This order is incorrect either. > imx6q-sabrelite.dtb \ > imx6q-sabresd.dtb \ > imx6q-sbc6x.dtb \ > diff --git a/arch/arm/boot/dts/imx6qp-sabreauto.dts b/arch/arm/boot/dts/imx6qp-sabreauto.dts > new file mode 100644 > index 0000000..b24aae6 > --- /dev/null > +++ b/arch/arm/boot/dts/imx6qp-sabreauto.dts > @@ -0,0 +1,67 @@ > +/* > + * Copyright (C) 2015 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. GPL/X11 dual license please. > + */ > + > +#include "imx6q-sabreauto.dts" > +#include "imx6qp.dtsi" > + > +/ { > + model = "Freescale i.MX6 Quad Plus SABRE Automotive Board"; > + compatible = "fsl,imx6qp-sabreauto", "fsl,imx6qp"; > +}; > + > + > +&fec { > + pinctrl-assert-gpios = <&max7322 0 GPIO_ACTIVE_HIGH>; Upstream kernel doesn't have this property. Shawn > +}; > + > +&i2c2 { > + max7322: gpio@68 { > + compatible = "maxim,max7322"; > + reg = <0x68>; > + gpio-controller; > + #gpio-cells = <2>; > + }; > +}; > + > +&iomuxc { > + imx6qdl-sabreauto { > + pinctrl_enet: enetgrp { > + fsl,pins = < > + MX6QDL_PAD_KEY_COL1__ENET_MDIO 0x1b0b0 > + MX6QDL_PAD_KEY_COL2__ENET_MDC 0x1b0b0 > + MX6QDL_PAD_RGMII_TXC__RGMII_TXC 0x1b018 > + MX6QDL_PAD_RGMII_TD0__RGMII_TD0 0x1b018 > + MX6QDL_PAD_RGMII_TD1__RGMII_TD1 0x1b018 > + MX6QDL_PAD_RGMII_TD2__RGMII_TD2 0x1b018 > + MX6QDL_PAD_RGMII_TD3__RGMII_TD3 0x1b018 > + MX6QDL_PAD_RGMII_TX_CTL__RGMII_TX_CTL 0x1b018 > + MX6QDL_PAD_RGMII_RXC__RGMII_RXC 0x1b018 > + MX6QDL_PAD_RGMII_RD0__RGMII_RD0 0x1b018 > + MX6QDL_PAD_RGMII_RD1__RGMII_RD1 0x1b018 > + MX6QDL_PAD_RGMII_RD2__RGMII_RD2 0x1b018 > + MX6QDL_PAD_RGMII_RD3__RGMII_RD3 0x1b018 > + MX6QDL_PAD_RGMII_RX_CTL__RGMII_RX_CTL 0x1b018 > + MX6QDL_PAD_GPIO_16__ENET_REF_CLK 0x4001b0a8 > + MX6QDL_PAD_GPIO_6__ENET_IRQ 0x000b1 > + >; > + }; > + }; > +}; > + > +&pcie { > + reset-gpio = <&max7310_c 5 GPIO_ACTIVE_LOW>; > + status = "okay"; > +}; > + > +&sata { > + status = "okay"; > +}; > + > +&vgen3_reg { > + regulator-always-on; > +}; > -- > 1.9.1 > > ^ permalink raw reply [flat|nested] 13+ messages in thread
* [PATCH v2 4/5] clk: imx: Add clock support for imx6qp 2015-12-15 6:07 [PATCH v2 0/5] Add support for imx6qp Bai Ping ` (2 preceding siblings ...) 2015-12-15 6:07 ` [PATCH v2 3/5] ARM: dts: imx: Add basic dts support for imx6qp-sabreauto Bai Ping @ 2015-12-15 6:07 ` Bai Ping 2015-12-15 6:07 ` [PATCH v2 5/5] ARM: imx: Add msl code " Bai Ping 4 siblings, 0 replies; 13+ messages in thread From: Bai Ping @ 2015-12-15 6:07 UTC (permalink / raw) To: shawnguo, kernel Cc: pawel.moll, robh+dt, mturquette, sboyd, linux-arm-kernel, linux-clk, devicetree most of the clock tree structures on i.MX6QP are same as on i.MX6Q. there still some difference between these two SOCs. Compared to the i.MX6Q, the differences of clocks on i.MX6QP is mainly on: 1. UART clk root 2. IPG_PER clk, 3. ENFC 4. ECSPI 5. CAN_SEL 6. CSCMR1 register fixup issue 7. LDB clock 8. GPU2D clock 9 MMDC_CH1_AXI gate ... Signed-off-by: Bai Ping <b51503@freescale.com> --- drivers/clk/imx/clk-imx6q.c | 132 +++++++++++++++++++++++++++++++++++--------- 1 file changed, 105 insertions(+), 27 deletions(-) diff --git a/drivers/clk/imx/clk-imx6q.c b/drivers/clk/imx/clk-imx6q.c index f0efc6f..02e1818 100644 --- a/drivers/clk/imx/clk-imx6q.c +++ b/drivers/clk/imx/clk-imx6q.c @@ -34,7 +34,9 @@ static const char *periph2_sels[] = { "periph2_pre", "periph2_clk2", }; static const char *axi_sels[] = { "periph", "pll2_pfd2_396m", "periph", "pll3_pfd1_540m", }; static const char *audio_sels[] = { "pll4_audio_div", "pll3_pfd2_508m", "pll3_pfd3_454m", "pll3_usb_otg", }; static const char *gpu_axi_sels[] = { "axi", "ahb", }; +static const char *pre_axi_sels[] = { "axi", "ahb", }; static const char *gpu2d_core_sels[] = { "axi", "pll3_usb_otg", "pll2_pfd0_352m", "pll2_pfd2_396m", }; +static const char *gpu2d_core_sels_2[] = { "mmdc_ch0_axi", "pll3_usb_otg", "pll2_pfd1_594m", "pll3_pfd0_720m",}; static const char *gpu3d_core_sels[] = { "mmdc_ch0_axi", "pll3_usb_otg", "pll2_pfd1_594m", "pll2_pfd2_396m", }; static const char *gpu3d_shader_sels[] = { "mmdc_ch0_axi", "pll3_usb_otg", "pll2_pfd1_594m", "pll3_pfd0_720m", }; static const char *ipu_sels[] = { "mmdc_ch0_axi", "pll2_pfd2_396m", "pll3_120m", "pll3_pfd1_540m", }; @@ -44,15 +46,24 @@ static const char *ipu1_di0_sels[] = { "ipu1_di0_pre", "dummy", "dummy", "ldb_di static const char *ipu1_di1_sels[] = { "ipu1_di1_pre", "dummy", "dummy", "ldb_di0", "ldb_di1", }; static const char *ipu2_di0_sels[] = { "ipu2_di0_pre", "dummy", "dummy", "ldb_di0", "ldb_di1", }; static const char *ipu2_di1_sels[] = { "ipu2_di1_pre", "dummy", "dummy", "ldb_di0", "ldb_di1", }; +static const char *ipu1_di0_sels_2[] = { "ipu1_di0_pre", "dummy", "dummy", "ldb_di0_podf", "ldb_di1_podf", }; +static const char *ipu1_di1_sels_2[] = { "ipu1_di1_pre", "dummy", "dummy", "ldb_di0_podf", "ldb_di1_podf", }; +static const char *ipu2_di0_sels_2[] = { "ipu2_di0_pre", "dummy", "dummy", "ldb_di0_podf", "ldb_di1_podf", }; +static const char *ipu2_di1_sels_2[] = { "ipu2_di1_pre", "dummy", "dummy", "ldb_di0_podf", "ldb_di1_podf", }; static const char *hsi_tx_sels[] = { "pll3_120m", "pll2_pfd2_396m", }; static const char *pcie_axi_sels[] = { "axi", "ahb", }; static const char *ssi_sels[] = { "pll3_pfd2_508m", "pll3_pfd3_454m", "pll4_audio_div", }; static const char *usdhc_sels[] = { "pll2_pfd2_396m", "pll2_pfd0_352m", }; static const char *enfc_sels[] = { "pll2_pfd0_352m", "pll2_bus", "pll3_usb_otg", "pll2_pfd2_396m", }; +static const char *enfc_sels_2[] = {"pll2_pfd0_352m", "pll2_bus", "pll3_usb_otg", "pll2_pfd2_396m", "pll3_pfd3_454m", "dummy", }; static const char *eim_sels[] = { "pll2_pfd2_396m", "pll3_usb_otg", "axi", "pll2_pfd0_352m", }; static const char *eim_slow_sels[] = { "axi", "pll3_usb_otg", "pll2_pfd2_396m", "pll2_pfd0_352m", }; static const char *vdo_axi_sels[] = { "axi", "ahb", }; static const char *vpu_axi_sels[] = { "axi", "pll2_pfd2_396m", "pll2_pfd0_352m", }; +static const char *uart_sels[] = { "pll3_80m", "osc", }; +static const char *ipg_per_sels[] = { "ipg", "osc", }; +static const char *ecspi_sels[] = { "pll3_60m", "osc", }; +static const char *can_sels[] = { "pll3_60m", "osc", "pll3_80m", }; static const char *cko1_sels[] = { "pll3_usb_otg", "pll2_bus", "pll1_sys", "pll5_video_div", "dummy", "axi", "enfc", "ipu1_di0", "ipu1_di1", "ipu2_di0", "ipu2_di1", "ahb", "ipg", "ipg_per", "ckil", "pll4_audio_div", }; @@ -121,12 +132,19 @@ static unsigned int share_count_ssi2; static unsigned int share_count_ssi3; static unsigned int share_count_mipi_core_cfg; static unsigned int share_count_spdif; +static unsigned int share_count_prg0; +static unsigned int share_count_prg1; static inline int clk_on_imx6q(void) { return of_machine_is_compatible("fsl,imx6q"); } +static inline int clk_on_imx6qp(void) +{ + return of_machine_is_compatible("fsl,imx6qp"); +} + static inline int clk_on_imx6dl(void) { return of_machine_is_compatible("fsl,imx6dl"); @@ -265,7 +283,7 @@ static void __init imx6q_clocks_init(struct device_node *ccm_node) clk[IMX6QDL_CLK_TWD] = imx_clk_fixed_factor("twd", "arm", 1, 2); clk[IMX6QDL_CLK_GPT_3M] = imx_clk_fixed_factor("gpt_3m", "osc", 1, 8); clk[IMX6QDL_CLK_VIDEO_27M] = imx_clk_fixed_factor("video_27m", "pll3_pfd1_540m", 1, 20); - if (clk_on_imx6dl()) { + if (clk_on_imx6dl() || clk_on_imx6qp()) { clk[IMX6QDL_CLK_GPU2D_AXI] = imx_clk_fixed_factor("gpu2d_axi", "mmdc_ch0_axi_podf", 1, 1); clk[IMX6QDL_CLK_GPU3D_AXI] = imx_clk_fixed_factor("gpu3d_axi", "mmdc_ch0_axi_podf", 1, 1); } @@ -294,7 +312,15 @@ static void __init imx6q_clocks_init(struct device_node *ccm_node) clk[IMX6QDL_CLK_GPU2D_AXI] = imx_clk_mux("gpu2d_axi", base + 0x18, 0, 1, gpu_axi_sels, ARRAY_SIZE(gpu_axi_sels)); clk[IMX6QDL_CLK_GPU3D_AXI] = imx_clk_mux("gpu3d_axi", base + 0x18, 1, 1, gpu_axi_sels, ARRAY_SIZE(gpu_axi_sels)); } - clk[IMX6QDL_CLK_GPU2D_CORE_SEL] = imx_clk_mux("gpu2d_core_sel", base + 0x18, 16, 2, gpu2d_core_sels, ARRAY_SIZE(gpu2d_core_sels)); + if (clk_on_imx6qp()) { + clk[IMX6QDL_CLK_CAN_SEL] = imx_clk_mux("can_sel", base + 0x20, 8, 2, can_sels, ARRAY_SIZE(can_sels)); + clk[IMX6QDL_CLK_ECSPI_SEL] = imx_clk_mux("ecspi_sel", base + 0x38, 18, 1, ecspi_sels, ARRAY_SIZE(ecspi_sels)); + clk[IMX6QDL_CLK_IPG_PER_SEL] = imx_clk_mux("ipg_per_sel", base + 0x1c, 6, 1, ipg_per_sels, ARRAY_SIZE(ipg_per_sels)); + clk[IMX6QDL_CLK_UART_SEL] = imx_clk_mux("uart_sel", base + 0x24, 6, 1, uart_sels, ARRAY_SIZE(uart_sels)); + clk[IMX6QDL_CLK_GPU2D_CORE_SEL] = imx_clk_mux("gpu2d_core_sel", base + 0x18, 16, 2, gpu2d_core_sels_2, ARRAY_SIZE(gpu2d_core_sels_2)); + } else { + clk[IMX6QDL_CLK_GPU2D_CORE_SEL] = imx_clk_mux("gpu2d_core_sel", base + 0x18, 16, 2, gpu2d_core_sels, ARRAY_SIZE(gpu2d_core_sels)); + } clk[IMX6QDL_CLK_GPU3D_CORE_SEL] = imx_clk_mux("gpu3d_core_sel", base + 0x18, 4, 2, gpu3d_core_sels, ARRAY_SIZE(gpu3d_core_sels)); clk[IMX6QDL_CLK_GPU3D_SHADER_SEL] = imx_clk_mux("gpu3d_shader_sel", base + 0x18, 8, 2, gpu3d_shader_sels, ARRAY_SIZE(gpu3d_shader_sels)); clk[IMX6QDL_CLK_IPU1_SEL] = imx_clk_mux("ipu1_sel", base + 0x3c, 9, 2, ipu_sels, ARRAY_SIZE(ipu_sels)); @@ -305,22 +331,40 @@ static void __init imx6q_clocks_init(struct device_node *ccm_node) clk[IMX6QDL_CLK_IPU1_DI1_PRE_SEL] = imx_clk_mux_flags("ipu1_di1_pre_sel", base + 0x34, 15, 3, ipu_di_pre_sels, ARRAY_SIZE(ipu_di_pre_sels), CLK_SET_RATE_PARENT); clk[IMX6QDL_CLK_IPU2_DI0_PRE_SEL] = imx_clk_mux_flags("ipu2_di0_pre_sel", base + 0x38, 6, 3, ipu_di_pre_sels, ARRAY_SIZE(ipu_di_pre_sels), CLK_SET_RATE_PARENT); clk[IMX6QDL_CLK_IPU2_DI1_PRE_SEL] = imx_clk_mux_flags("ipu2_di1_pre_sel", base + 0x38, 15, 3, ipu_di_pre_sels, ARRAY_SIZE(ipu_di_pre_sels), CLK_SET_RATE_PARENT); - clk[IMX6QDL_CLK_IPU1_DI0_SEL] = imx_clk_mux_flags("ipu1_di0_sel", base + 0x34, 0, 3, ipu1_di0_sels, ARRAY_SIZE(ipu1_di0_sels), CLK_SET_RATE_PARENT); - clk[IMX6QDL_CLK_IPU1_DI1_SEL] = imx_clk_mux_flags("ipu1_di1_sel", base + 0x34, 9, 3, ipu1_di1_sels, ARRAY_SIZE(ipu1_di1_sels), CLK_SET_RATE_PARENT); - clk[IMX6QDL_CLK_IPU2_DI0_SEL] = imx_clk_mux_flags("ipu2_di0_sel", base + 0x38, 0, 3, ipu2_di0_sels, ARRAY_SIZE(ipu2_di0_sels), CLK_SET_RATE_PARENT); - clk[IMX6QDL_CLK_IPU2_DI1_SEL] = imx_clk_mux_flags("ipu2_di1_sel", base + 0x38, 9, 3, ipu2_di1_sels, ARRAY_SIZE(ipu2_di1_sels), CLK_SET_RATE_PARENT); clk[IMX6QDL_CLK_HSI_TX_SEL] = imx_clk_mux("hsi_tx_sel", base + 0x30, 28, 1, hsi_tx_sels, ARRAY_SIZE(hsi_tx_sels)); clk[IMX6QDL_CLK_PCIE_AXI_SEL] = imx_clk_mux("pcie_axi_sel", base + 0x18, 10, 1, pcie_axi_sels, ARRAY_SIZE(pcie_axi_sels)); - clk[IMX6QDL_CLK_SSI1_SEL] = imx_clk_fixup_mux("ssi1_sel", base + 0x1c, 10, 2, ssi_sels, ARRAY_SIZE(ssi_sels), imx_cscmr1_fixup); - clk[IMX6QDL_CLK_SSI2_SEL] = imx_clk_fixup_mux("ssi2_sel", base + 0x1c, 12, 2, ssi_sels, ARRAY_SIZE(ssi_sels), imx_cscmr1_fixup); - clk[IMX6QDL_CLK_SSI3_SEL] = imx_clk_fixup_mux("ssi3_sel", base + 0x1c, 14, 2, ssi_sels, ARRAY_SIZE(ssi_sels), imx_cscmr1_fixup); - clk[IMX6QDL_CLK_USDHC1_SEL] = imx_clk_fixup_mux("usdhc1_sel", base + 0x1c, 16, 1, usdhc_sels, ARRAY_SIZE(usdhc_sels), imx_cscmr1_fixup); - clk[IMX6QDL_CLK_USDHC2_SEL] = imx_clk_fixup_mux("usdhc2_sel", base + 0x1c, 17, 1, usdhc_sels, ARRAY_SIZE(usdhc_sels), imx_cscmr1_fixup); - clk[IMX6QDL_CLK_USDHC3_SEL] = imx_clk_fixup_mux("usdhc3_sel", base + 0x1c, 18, 1, usdhc_sels, ARRAY_SIZE(usdhc_sels), imx_cscmr1_fixup); - clk[IMX6QDL_CLK_USDHC4_SEL] = imx_clk_fixup_mux("usdhc4_sel", base + 0x1c, 19, 1, usdhc_sels, ARRAY_SIZE(usdhc_sels), imx_cscmr1_fixup); - clk[IMX6QDL_CLK_ENFC_SEL] = imx_clk_mux("enfc_sel", base + 0x2c, 16, 2, enfc_sels, ARRAY_SIZE(enfc_sels)); - clk[IMX6QDL_CLK_EIM_SEL] = imx_clk_fixup_mux("eim_sel", base + 0x1c, 27, 2, eim_sels, ARRAY_SIZE(eim_sels), imx_cscmr1_fixup); - clk[IMX6QDL_CLK_EIM_SLOW_SEL] = imx_clk_fixup_mux("eim_slow_sel", base + 0x1c, 29, 2, eim_slow_sels, ARRAY_SIZE(eim_slow_sels), imx_cscmr1_fixup); + if (clk_on_imx6qp()) { + clk[IMX6QDL_CLK_IPU1_DI0_SEL] = imx_clk_mux_flags("ipu1_di0_sel", base + 0x34, 0, 3, ipu1_di0_sels_2, ARRAY_SIZE(ipu1_di0_sels_2), CLK_SET_RATE_PARENT); + clk[IMX6QDL_CLK_IPU1_DI1_SEL] = imx_clk_mux_flags("ipu1_di1_sel", base + 0x34, 9, 3, ipu1_di1_sels_2, ARRAY_SIZE(ipu1_di1_sels_2), CLK_SET_RATE_PARENT); + clk[IMX6QDL_CLK_IPU2_DI0_SEL] = imx_clk_mux_flags("ipu2_di0_sel", base + 0x38, 0, 3, ipu2_di0_sels_2, ARRAY_SIZE(ipu2_di0_sels_2), CLK_SET_RATE_PARENT); + clk[IMX6QDL_CLK_IPU2_DI1_SEL] = imx_clk_mux_flags("ipu2_di1_sel", base + 0x38, 9, 3, ipu2_di1_sels_2, ARRAY_SIZE(ipu2_di1_sels_2), CLK_SET_RATE_PARENT); + clk[IMX6QDL_CLK_SSI1_SEL] = imx_clk_mux("ssi1_sel", base + 0x1c, 10, 2, ssi_sels, ARRAY_SIZE(ssi_sels)); + clk[IMX6QDL_CLK_SSI2_SEL] = imx_clk_mux("ssi2_sel", base + 0x1c, 12, 2, ssi_sels, ARRAY_SIZE(ssi_sels)); + clk[IMX6QDL_CLK_SSI3_SEL] = imx_clk_mux("ssi3_sel", base + 0x1c, 14, 2, ssi_sels, ARRAY_SIZE(ssi_sels)); + clk[IMX6QDL_CLK_USDHC1_SEL] = imx_clk_mux("usdhc1_sel", base + 0x1c, 16, 1, usdhc_sels, ARRAY_SIZE(usdhc_sels)); + clk[IMX6QDL_CLK_USDHC2_SEL] = imx_clk_mux("usdhc2_sel", base + 0x1c, 17, 1, usdhc_sels, ARRAY_SIZE(usdhc_sels)); + clk[IMX6QDL_CLK_USDHC3_SEL] = imx_clk_mux("usdhc3_sel", base + 0x1c, 18, 1, usdhc_sels, ARRAY_SIZE(usdhc_sels)); + clk[IMX6QDL_CLK_USDHC4_SEL] = imx_clk_mux("usdhc4_sel", base + 0x1c, 19, 1, usdhc_sels, ARRAY_SIZE(usdhc_sels)); + clk[IMX6QDL_CLK_ENFC_SEL] = imx_clk_mux("enfc_sel", base + 0x2c, 15, 3, enfc_sels_2, ARRAY_SIZE(enfc_sels_2)); + clk[IMX6QDL_CLK_EIM_SEL] = imx_clk_mux("eim_sel", base + 0x1c, 27, 2, eim_sels, ARRAY_SIZE(eim_sels)); + clk[IMX6QDL_CLK_EIM_SLOW_SEL] = imx_clk_mux("eim_slow_sel", base + 0x1c, 29, 2, eim_slow_sels, ARRAY_SIZE(eim_slow_sels)); + clk[IMX6QDL_CLK_PRE_AXI] = imx_clk_mux("pre_axi", base + 0x18, 1, 1, pre_axi_sels, ARRAY_SIZE(pre_axi_sels)); + } else { + clk[IMX6QDL_CLK_IPU1_DI0_SEL] = imx_clk_mux_flags("ipu1_di0_sel", base + 0x34, 0, 3, ipu1_di0_sels, ARRAY_SIZE(ipu1_di0_sels), CLK_SET_RATE_PARENT); + clk[IMX6QDL_CLK_IPU1_DI1_SEL] = imx_clk_mux_flags("ipu1_di1_sel", base + 0x34, 9, 3, ipu1_di1_sels, ARRAY_SIZE(ipu1_di1_sels), CLK_SET_RATE_PARENT); + clk[IMX6QDL_CLK_IPU2_DI0_SEL] = imx_clk_mux_flags("ipu2_di0_sel", base + 0x38, 0, 3, ipu2_di0_sels, ARRAY_SIZE(ipu2_di0_sels), CLK_SET_RATE_PARENT); + clk[IMX6QDL_CLK_IPU2_DI1_SEL] = imx_clk_mux_flags("ipu2_di1_sel", base + 0x38, 9, 3, ipu2_di1_sels, ARRAY_SIZE(ipu2_di1_sels), CLK_SET_RATE_PARENT); + clk[IMX6QDL_CLK_SSI1_SEL] = imx_clk_fixup_mux("ssi1_sel", base + 0x1c, 10, 2, ssi_sels, ARRAY_SIZE(ssi_sels), imx_cscmr1_fixup); + clk[IMX6QDL_CLK_SSI2_SEL] = imx_clk_fixup_mux("ssi2_sel", base + 0x1c, 12, 2, ssi_sels, ARRAY_SIZE(ssi_sels), imx_cscmr1_fixup); + clk[IMX6QDL_CLK_SSI3_SEL] = imx_clk_fixup_mux("ssi3_sel", base + 0x1c, 14, 2, ssi_sels, ARRAY_SIZE(ssi_sels), imx_cscmr1_fixup); + clk[IMX6QDL_CLK_USDHC1_SEL] = imx_clk_fixup_mux("usdhc1_sel", base + 0x1c, 16, 1, usdhc_sels, ARRAY_SIZE(usdhc_sels), imx_cscmr1_fixup); + clk[IMX6QDL_CLK_USDHC2_SEL] = imx_clk_fixup_mux("usdhc2_sel", base + 0x1c, 17, 1, usdhc_sels, ARRAY_SIZE(usdhc_sels), imx_cscmr1_fixup); + clk[IMX6QDL_CLK_USDHC3_SEL] = imx_clk_fixup_mux("usdhc3_sel", base + 0x1c, 18, 1, usdhc_sels, ARRAY_SIZE(usdhc_sels), imx_cscmr1_fixup); + clk[IMX6QDL_CLK_USDHC4_SEL] = imx_clk_fixup_mux("usdhc4_sel", base + 0x1c, 19, 1, usdhc_sels, ARRAY_SIZE(usdhc_sels), imx_cscmr1_fixup); + clk[IMX6QDL_CLK_ENFC_SEL] = imx_clk_mux("enfc_sel", base + 0x2c, 16, 2, enfc_sels, ARRAY_SIZE(enfc_sels)); + clk[IMX6QDL_CLK_EIM_SEL] = imx_clk_fixup_mux("eim_sel", base + 0x1c, 27, 2, eim_sels, ARRAY_SIZE(eim_sels), imx_cscmr1_fixup); + clk[IMX6QDL_CLK_EIM_SLOW_SEL] = imx_clk_fixup_mux("eim_slow_sel", base + 0x1c, 29, 2, eim_slow_sels, ARRAY_SIZE(eim_slow_sels), imx_cscmr1_fixup); + } clk[IMX6QDL_CLK_VDO_AXI_SEL] = imx_clk_mux("vdo_axi_sel", base + 0x18, 11, 1, vdo_axi_sels, ARRAY_SIZE(vdo_axi_sels)); clk[IMX6QDL_CLK_VPU_AXI_SEL] = imx_clk_mux("vpu_axi_sel", base + 0x18, 14, 2, vpu_axi_sels, ARRAY_SIZE(vpu_axi_sels)); clk[IMX6QDL_CLK_CKO1_SEL] = imx_clk_mux("cko1_sel", base + 0x60, 0, 4, cko1_sels, ARRAY_SIZE(cko1_sels)); @@ -335,23 +379,33 @@ static void __init imx6q_clocks_init(struct device_node *ccm_node) clk[IMX6QDL_CLK_PERIPH_CLK2] = imx_clk_divider("periph_clk2", "periph_clk2_sel", base + 0x14, 27, 3); clk[IMX6QDL_CLK_PERIPH2_CLK2] = imx_clk_divider("periph2_clk2", "periph2_clk2_sel", base + 0x14, 0, 3); clk[IMX6QDL_CLK_IPG] = imx_clk_divider("ipg", "ahb", base + 0x14, 8, 2); - clk[IMX6QDL_CLK_IPG_PER] = imx_clk_fixup_divider("ipg_per", "ipg", base + 0x1c, 0, 6, imx_cscmr1_fixup); clk[IMX6QDL_CLK_ESAI_PRED] = imx_clk_divider("esai_pred", "esai_sel", base + 0x28, 9, 3); clk[IMX6QDL_CLK_ESAI_PODF] = imx_clk_divider("esai_podf", "esai_pred", base + 0x28, 25, 3); clk[IMX6QDL_CLK_ASRC_PRED] = imx_clk_divider("asrc_pred", "asrc_sel", base + 0x30, 12, 3); clk[IMX6QDL_CLK_ASRC_PODF] = imx_clk_divider("asrc_podf", "asrc_pred", base + 0x30, 9, 3); clk[IMX6QDL_CLK_SPDIF_PRED] = imx_clk_divider("spdif_pred", "spdif_sel", base + 0x30, 25, 3); clk[IMX6QDL_CLK_SPDIF_PODF] = imx_clk_divider("spdif_podf", "spdif_pred", base + 0x30, 22, 3); - clk[IMX6QDL_CLK_CAN_ROOT] = imx_clk_divider("can_root", "pll3_60m", base + 0x20, 2, 6); - clk[IMX6QDL_CLK_ECSPI_ROOT] = imx_clk_divider("ecspi_root", "pll3_60m", base + 0x38, 19, 6); + if (clk_on_imx6qp()) { + clk[IMX6QDL_CLK_IPG_PER] = imx_clk_divider("ipg_per", "ipg_per_sel", base + 0x1c, 0, 6); + clk[IMX6QDL_CLK_ECSPI_ROOT] = imx_clk_divider("ecspi_root", "ecspi_sel", base + 0x38, 19, 6); + clk[IMX6QDL_CLK_CAN_ROOT] = imx_clk_divider("can_root", "can_sel", base + 0x20, 2, 6); + clk[IMX6QDL_CLK_UART_SERIAL_PODF] = imx_clk_divider("uart_serial_podf", "uart_sel", base + 0x24, 0, 6); + clk[IMX6QDL_CLK_LDB_DI0_DIV_3_5] = imx_clk_fixed_factor("ldb_di0_div_3_5", "ldb_di0", 2, 7); + clk[IMX6QDL_CLK_LDB_DI1_DIV_3_5] = imx_clk_fixed_factor("ldb_di1_div_3_5", "ldb_di1", 2, 7); + } else { + clk[IMX6QDL_CLK_ECSPI_ROOT] = imx_clk_divider("ecspi_root", "pll3_60m", base + 0x38, 19, 6); + clk[IMX6QDL_CLK_CAN_ROOT] = imx_clk_divider("can_root", "pll3_60", base + 0x20, 2, 6); + clk[IMX6QDL_CLK_IPG_PER] = imx_clk_fixup_divider("ipg_per", "ipg", base + 0x1c, 0, 6, imx_cscmr1_fixup); + clk[IMX6QDL_CLK_UART_SERIAL_PODF] = imx_clk_divider("uart_serial_podf", "pll3_80m", base + 0x24, 0, 6); + clk[IMX6QDL_CLK_LDB_DI0_DIV_3_5] = imx_clk_fixed_factor("ldb_di0_div_3_5", "ldb_di0_sel", 2, 7); + clk[IMX6QDL_CLK_LDB_DI1_DIV_3_5] = imx_clk_fixed_factor("ldb_di1_div_3_5", "ldb_di1_sel", 2, 7); + } clk[IMX6QDL_CLK_GPU2D_CORE_PODF] = imx_clk_divider("gpu2d_core_podf", "gpu2d_core_sel", base + 0x18, 23, 3); clk[IMX6QDL_CLK_GPU3D_CORE_PODF] = imx_clk_divider("gpu3d_core_podf", "gpu3d_core_sel", base + 0x18, 26, 3); clk[IMX6QDL_CLK_GPU3D_SHADER] = imx_clk_divider("gpu3d_shader", "gpu3d_shader_sel", base + 0x18, 29, 3); clk[IMX6QDL_CLK_IPU1_PODF] = imx_clk_divider("ipu1_podf", "ipu1_sel", base + 0x3c, 11, 3); clk[IMX6QDL_CLK_IPU2_PODF] = imx_clk_divider("ipu2_podf", "ipu2_sel", base + 0x3c, 16, 3); - clk[IMX6QDL_CLK_LDB_DI0_DIV_3_5] = imx_clk_fixed_factor("ldb_di0_div_3_5", "ldb_di0_sel", 2, 7); clk[IMX6QDL_CLK_LDB_DI0_PODF] = imx_clk_divider_flags("ldb_di0_podf", "ldb_di0_div_3_5", base + 0x20, 10, 1, 0); - clk[IMX6QDL_CLK_LDB_DI1_DIV_3_5] = imx_clk_fixed_factor("ldb_di1_div_3_5", "ldb_di1_sel", 2, 7); clk[IMX6QDL_CLK_LDB_DI1_PODF] = imx_clk_divider_flags("ldb_di1_podf", "ldb_di1_div_3_5", base + 0x20, 11, 1, 0); clk[IMX6QDL_CLK_IPU1_DI0_PRE] = imx_clk_divider("ipu1_di0_pre", "ipu1_di0_pre_sel", base + 0x34, 3, 3); clk[IMX6QDL_CLK_IPU1_DI1_PRE] = imx_clk_divider("ipu1_di1_pre", "ipu1_di1_pre_sel", base + 0x34, 12, 3); @@ -364,15 +418,19 @@ static void __init imx6q_clocks_init(struct device_node *ccm_node) clk[IMX6QDL_CLK_SSI2_PODF] = imx_clk_divider("ssi2_podf", "ssi2_pred", base + 0x2c, 0, 6); clk[IMX6QDL_CLK_SSI3_PRED] = imx_clk_divider("ssi3_pred", "ssi3_sel", base + 0x28, 22, 3); clk[IMX6QDL_CLK_SSI3_PODF] = imx_clk_divider("ssi3_podf", "ssi3_pred", base + 0x28, 16, 6); - clk[IMX6QDL_CLK_UART_SERIAL_PODF] = imx_clk_divider("uart_serial_podf", "pll3_80m", base + 0x24, 0, 6); clk[IMX6QDL_CLK_USDHC1_PODF] = imx_clk_divider("usdhc1_podf", "usdhc1_sel", base + 0x24, 11, 3); clk[IMX6QDL_CLK_USDHC2_PODF] = imx_clk_divider("usdhc2_podf", "usdhc2_sel", base + 0x24, 16, 3); clk[IMX6QDL_CLK_USDHC3_PODF] = imx_clk_divider("usdhc3_podf", "usdhc3_sel", base + 0x24, 19, 3); clk[IMX6QDL_CLK_USDHC4_PODF] = imx_clk_divider("usdhc4_podf", "usdhc4_sel", base + 0x24, 22, 3); clk[IMX6QDL_CLK_ENFC_PRED] = imx_clk_divider("enfc_pred", "enfc_sel", base + 0x2c, 18, 3); clk[IMX6QDL_CLK_ENFC_PODF] = imx_clk_divider("enfc_podf", "enfc_pred", base + 0x2c, 21, 6); - clk[IMX6QDL_CLK_EIM_PODF] = imx_clk_fixup_divider("eim_podf", "eim_sel", base + 0x1c, 20, 3, imx_cscmr1_fixup); - clk[IMX6QDL_CLK_EIM_SLOW_PODF] = imx_clk_fixup_divider("eim_slow_podf", "eim_slow_sel", base + 0x1c, 23, 3, imx_cscmr1_fixup); + if (clk_on_imx6qp()) { + clk[IMX6QDL_CLK_EIM_PODF] = imx_clk_divider("eim_podf", "eim_sel", base + 0x1c, 20, 3); + clk[IMX6QDL_CLK_EIM_SLOW_PODF] = imx_clk_divider("eim_slow_podf", "eim_slow_sel", base + 0x1c, 23, 3); + } else { + clk[IMX6QDL_CLK_EIM_PODF] = imx_clk_fixup_divider("eim_podf", "eim_sel", base + 0x1c, 20, 3, imx_cscmr1_fixup); + clk[IMX6QDL_CLK_EIM_SLOW_PODF] = imx_clk_fixup_divider("eim_slow_podf", "eim_slow_sel", base + 0x1c, 23, 3, imx_cscmr1_fixup); + } clk[IMX6QDL_CLK_VPU_AXI_PODF] = imx_clk_divider("vpu_axi_podf", "vpu_axi_sel", base + 0x24, 25, 3); clk[IMX6QDL_CLK_CKO1_PODF] = imx_clk_divider("cko1_podf", "cko1_sel", base + 0x60, 4, 3); clk[IMX6QDL_CLK_CKO2_PODF] = imx_clk_divider("cko2_podf", "cko2_sel", base + 0x60, 21, 3); @@ -380,7 +438,12 @@ static void __init imx6q_clocks_init(struct device_node *ccm_node) /* name parent_name reg shift width busy: reg, shift */ clk[IMX6QDL_CLK_AXI] = imx_clk_busy_divider("axi", "axi_sel", base + 0x14, 16, 3, base + 0x48, 0); clk[IMX6QDL_CLK_MMDC_CH0_AXI_PODF] = imx_clk_busy_divider("mmdc_ch0_axi_podf", "periph", base + 0x14, 19, 3, base + 0x48, 4); - clk[IMX6QDL_CLK_MMDC_CH1_AXI_PODF] = imx_clk_busy_divider("mmdc_ch1_axi_podf", "periph2", base + 0x14, 3, 3, base + 0x48, 2); + if (clk_on_imx6qp()) { + clk[IMX6QDL_CLK_MMDC_CH1_AXI_CG] = imx_clk_gate("mmdc_ch1_axi_cg", "periph2", base + 0x4, 18); + clk[IMX6QDL_CLK_MMDC_CH1_AXI_PODF] = imx_clk_busy_divider("mmdc_ch1_axi_podf", "mmdc_ch1_axi_cg", base + 0x14, 3, 3, base + 0x48, 2); + } else { + clk[IMX6QDL_CLK_MMDC_CH1_AXI_PODF] = imx_clk_busy_divider("mmdc_ch1_axi_podf", "periph2", base + 0x14, 3, 3, base + 0x48, 2); + } clk[IMX6QDL_CLK_ARM] = imx_clk_busy_divider("arm", "pll1_sw", base + 0x10, 0, 3, base + 0x48, 16); clk[IMX6QDL_CLK_AHB] = imx_clk_busy_divider("ahb", "periph", base + 0x14, 10, 3, base + 0x48, 1); @@ -432,8 +495,13 @@ static void __init imx6q_clocks_init(struct device_node *ccm_node) clk[IMX6QDL_CLK_IPU1_DI1] = imx_clk_gate2("ipu1_di1", "ipu1_di1_sel", base + 0x74, 4); clk[IMX6QDL_CLK_IPU2] = imx_clk_gate2("ipu2", "ipu2_podf", base + 0x74, 6); clk[IMX6QDL_CLK_IPU2_DI0] = imx_clk_gate2("ipu2_di0", "ipu2_di0_sel", base + 0x74, 8); - clk[IMX6QDL_CLK_LDB_DI0] = imx_clk_gate2("ldb_di0", "ldb_di0_podf", base + 0x74, 12); - clk[IMX6QDL_CLK_LDB_DI1] = imx_clk_gate2("ldb_di1", "ldb_di1_podf", base + 0x74, 14); + if (clk_on_imx6qp()) { + clk[IMX6QDL_CLK_LDB_DI0] = imx_clk_gate2("ldb_di0", "ldb_di0_sel", base + 0x74, 12); + clk[IMX6QDL_CLK_LDB_DI1] = imx_clk_gate2("ldb_di1", "ldb_di1_sel", base + 0x74, 14); + } else { + clk[IMX6QDL_CLK_LDB_DI0] = imx_clk_gate2("ldb_di0", "ldb_di0_podf", base + 0x74, 12); + clk[IMX6QDL_CLK_LDB_DI1] = imx_clk_gate2("ldb_di1", "ldb_di1_podf", base + 0x74, 14); + } clk[IMX6QDL_CLK_IPU2_DI1] = imx_clk_gate2("ipu2_di1", "ipu2_di1_sel", base + 0x74, 10); clk[IMX6QDL_CLK_HSI_TX] = imx_clk_gate2_shared("hsi_tx", "hsi_tx_podf", base + 0x74, 16, &share_count_mipi_core_cfg); clk[IMX6QDL_CLK_MIPI_CORE_CFG] = imx_clk_gate2_shared("mipi_core_cfg", "video_27m", base + 0x74, 16, &share_count_mipi_core_cfg); @@ -482,6 +550,16 @@ static void __init imx6q_clocks_init(struct device_node *ccm_node) clk[IMX6QDL_CLK_EIM_SLOW] = imx_clk_gate2("eim_slow", "eim_slow_podf", base + 0x80, 10); clk[IMX6QDL_CLK_VDO_AXI] = imx_clk_gate2("vdo_axi", "vdo_axi_sel", base + 0x80, 12); clk[IMX6QDL_CLK_VPU_AXI] = imx_clk_gate2("vpu_axi", "vpu_axi_podf", base + 0x80, 14); + if (clk_on_imx6qp()) { + clk[IMX6QDL_CLK_PRE0] = imx_clk_gate2("pre0", "pre_axi", base + 0x80, 16); + clk[IMX6QDL_CLK_PRE1] = imx_clk_gate2("pre1", "pre_axi", base + 0x80, 18); + clk[IMX6QDL_CLK_PRE2] = imx_clk_gate2("pre2", "pre_axi", base + 0x80, 20); + clk[IMX6QDL_CLK_PRE3] = imx_clk_gate2("pre3", "pre_axi", base + 0x80, 22); + clk[IMX6QDL_CLK_PRG0_AXI] = imx_clk_gate2_shared("prg0_axi", "ipu1_podf", base + 0x80, 24, &share_count_prg0); + clk[IMX6QDL_CLK_PRG1_AXI] = imx_clk_gate2_shared("prg1_axi", "ipu2_podf", base + 0x80, 26, &share_count_prg1); + clk[IMX6QDL_CLK_PRG0_APB] = imx_clk_gate2_shared("prg0_apb", "ipg", base + 0x80, 24, &share_count_prg0); + clk[IMX6QDL_CLK_PRG1_APB] = imx_clk_gate2_shared("prg1_apb", "ipg", base + 0x80, 26, &share_count_prg1); + } clk[IMX6QDL_CLK_CKO1] = imx_clk_gate("cko1", "cko1_podf", base + 0x60, 7); clk[IMX6QDL_CLK_CKO2] = imx_clk_gate("cko2", "cko2_podf", base + 0x60, 24); -- 1.9.1 ^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH v2 5/5] ARM: imx: Add msl code support for imx6qp 2015-12-15 6:07 [PATCH v2 0/5] Add support for imx6qp Bai Ping ` (3 preceding siblings ...) 2015-12-15 6:07 ` [PATCH v2 4/5] clk: imx: Add clock support for imx6qp Bai Ping @ 2015-12-15 6:07 ` Bai Ping 2016-01-28 8:10 ` Shawn Guo 4 siblings, 1 reply; 13+ messages in thread From: Bai Ping @ 2015-12-15 6:07 UTC (permalink / raw) To: shawnguo, kernel Cc: pawel.moll, robh+dt, mturquette, sboyd, linux-arm-kernel, linux-clk, devicetree The i.MX6QP is a different SOC, but internally we treate it as i.MX6Q Rev_2.0 to maximum the code reusability. The chip silicon number we read from the ANADIG_DIGPROG is 0x630100. This patch add code to identify it as i.MX6QP Rev_1.0 when print out the silicon version. Signed-off-by: Bai Ping <b51503@freescale.com> --- arch/arm/mach-imx/anatop.c | 5 ++++- arch/arm/mach-imx/mach-imx6q.c | 8 ++++++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/arch/arm/mach-imx/anatop.c b/arch/arm/mach-imx/anatop.c index 231bb25..9622763 100644 --- a/arch/arm/mach-imx/anatop.c +++ b/arch/arm/mach-imx/anatop.c @@ -129,7 +129,10 @@ void __init imx_init_revision_from_anatop(void) switch (digprog & 0xff) { case 0: - revision = IMX_CHIP_REVISION_1_0; + if (digprog >> 8 & 0x01) + revision = IMX_CHIP_REVISION_2_0; + else + revision = IMX_CHIP_REVISION_1_0; break; case 1: revision = IMX_CHIP_REVISION_1_1; diff --git a/arch/arm/mach-imx/mach-imx6q.c b/arch/arm/mach-imx/mach-imx6q.c index 3878494b..cb27d56 100644 --- a/arch/arm/mach-imx/mach-imx6q.c +++ b/arch/arm/mach-imx/mach-imx6q.c @@ -266,8 +266,11 @@ static void __init imx6q_init_machine(void) { struct device *parent; - imx_print_silicon_rev(cpu_is_imx6dl() ? "i.MX6DL" : "i.MX6Q", - imx_get_soc_revision()); + if (cpu_is_imx6q() && imx_get_soc_revision() == IMX_CHIP_REVISION_2_0) + imx_print_silicon_rev("i.MX6QP", IMX_CHIP_REVISION_1_0); + else + imx_print_silicon_rev(cpu_is_imx6dl() ? "i.MX6DL" : "i.MX6Q", + imx_get_soc_revision()); parent = imx_soc_device_init(); if (parent == NULL) @@ -399,6 +402,7 @@ static void __init imx6q_init_irq(void) static const char * const imx6q_dt_compat[] __initconst = { "fsl,imx6dl", "fsl,imx6q", + "fsl,imx6qp", NULL, }; -- 1.9.1 ^ permalink raw reply related [flat|nested] 13+ messages in thread
* Re: [PATCH v2 5/5] ARM: imx: Add msl code support for imx6qp 2015-12-15 6:07 ` [PATCH v2 5/5] ARM: imx: Add msl code " Bai Ping @ 2016-01-28 8:10 ` Shawn Guo 2016-01-28 10:45 ` Ping Bai 0 siblings, 1 reply; 13+ messages in thread From: Shawn Guo @ 2016-01-28 8:10 UTC (permalink / raw) To: Bai Ping Cc: kernel, pawel.moll, robh+dt, mturquette, sboyd, linux-arm-kernel, linux-clk, devicetree On Tue, Dec 15, 2015 at 02:07:53PM +0800, Bai Ping wrote: > The i.MX6QP is a different SOC, but internally we treate > it as i.MX6Q Rev_2.0 to maximum the code reusability. The chip > silicon number we read from the ANADIG_DIGPROG is 0x630100. This > patch add code to identify it as i.MX6QP Rev_1.0 when print out the > silicon version. > > Signed-off-by: Bai Ping <b51503@freescale.com> > --- > arch/arm/mach-imx/anatop.c | 5 ++++- > arch/arm/mach-imx/mach-imx6q.c | 8 ++++++-- > 2 files changed, 10 insertions(+), 3 deletions(-) > > diff --git a/arch/arm/mach-imx/anatop.c b/arch/arm/mach-imx/anatop.c > index 231bb25..9622763 100644 > --- a/arch/arm/mach-imx/anatop.c > +++ b/arch/arm/mach-imx/anatop.c > @@ -129,7 +129,10 @@ void __init imx_init_revision_from_anatop(void) > > switch (digprog & 0xff) { > case 0: > - revision = IMX_CHIP_REVISION_1_0; > + if (digprog >> 8 & 0x01) > + revision = IMX_CHIP_REVISION_2_0; > + else > + revision = IMX_CHIP_REVISION_1_0; Please at least add some comment here to help us remember that this is a trick we play for i.MX6QP. Shawn > break; > case 1: > revision = IMX_CHIP_REVISION_1_1; > diff --git a/arch/arm/mach-imx/mach-imx6q.c b/arch/arm/mach-imx/mach-imx6q.c > index 3878494b..cb27d56 100644 > --- a/arch/arm/mach-imx/mach-imx6q.c > +++ b/arch/arm/mach-imx/mach-imx6q.c > @@ -266,8 +266,11 @@ static void __init imx6q_init_machine(void) > { > struct device *parent; > > - imx_print_silicon_rev(cpu_is_imx6dl() ? "i.MX6DL" : "i.MX6Q", > - imx_get_soc_revision()); > + if (cpu_is_imx6q() && imx_get_soc_revision() == IMX_CHIP_REVISION_2_0) > + imx_print_silicon_rev("i.MX6QP", IMX_CHIP_REVISION_1_0); > + else > + imx_print_silicon_rev(cpu_is_imx6dl() ? "i.MX6DL" : "i.MX6Q", > + imx_get_soc_revision()); > > parent = imx_soc_device_init(); > if (parent == NULL) > @@ -399,6 +402,7 @@ static void __init imx6q_init_irq(void) > static const char * const imx6q_dt_compat[] __initconst = { > "fsl,imx6dl", > "fsl,imx6q", > + "fsl,imx6qp", > NULL, > }; > > -- > 1.9.1 > > ^ permalink raw reply [flat|nested] 13+ messages in thread
* RE: [PATCH v2 5/5] ARM: imx: Add msl code support for imx6qp 2016-01-28 8:10 ` Shawn Guo @ 2016-01-28 10:45 ` Ping Bai 0 siblings, 0 replies; 13+ messages in thread From: Ping Bai @ 2016-01-28 10:45 UTC (permalink / raw) To: Shawn Guo Cc: kernel@pengutronix.de, pawel.moll@arm.com, robh+dt@kernel.org, mturquette@baylibre.com, sboyd@codeaurora.org, linux-arm-kernel@lists.infradead.org, linux-clk@vger.kernel.org, devicetree@vger.kernel.org, jacky.baip@gmail.com DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogU2hhd24gR3VvIFttYWls dG86c2hhd25ndW9Aa2VybmVsLm9yZ10NCj4gU2VudDogMjAxNsTqMdTCMjjI1SAxNjoxMQ0KPiBU bzogYjUxNTAzQGZyZWVzY2FsZS5jb20NCj4gQ2M6IGtlcm5lbEBwZW5ndXRyb25peC5kZTsgcGF3 ZWwubW9sbEBhcm0uY29tOyByb2JoK2R0QGtlcm5lbC5vcmc7DQo+IG10dXJxdWV0dGVAYmF5bGli cmUuY29tOyBzYm95ZEBjb2RlYXVyb3JhLm9yZzsgbGludXgtYXJtLQ0KPiBrZXJuZWxAbGlzdHMu aW5mcmFkZWFkLm9yZzsgbGludXgtY2xrQHZnZXIua2VybmVsLm9yZzsNCj4gZGV2aWNldHJlZUB2 Z2VyLmtlcm5lbC5vcmcNCj4gU3ViamVjdDogUmU6IFtQQVRDSCB2MiA1LzVdIEFSTTogaW14OiBB ZGQgbXNsIGNvZGUgc3VwcG9ydCBmb3IgaW14NnFwDQo+IA0KPiBPbiBUdWUsIERlYyAxNSwgMjAx NSBhdCAwMjowNzo1M1BNICswODAwLCBCYWkgUGluZyB3cm90ZToNCj4gPiBUaGUgaS5NWDZRUCBp cyBhIGRpZmZlcmVudCBTT0MsIGJ1dCBpbnRlcm5hbGx5IHdlIHRyZWF0ZSBpdCBhcyBpLk1YNlEN Cj4gPiBSZXZfMi4wIHRvIG1heGltdW0gdGhlIGNvZGUgcmV1c2FiaWxpdHkuIFRoZSBjaGlwIHNp bGljb24gbnVtYmVyIHdlDQo+ID4gcmVhZCBmcm9tIHRoZSBBTkFESUdfRElHUFJPRyBpcyAweDYz MDEwMC4gVGhpcyBwYXRjaCBhZGQgY29kZSB0bw0KPiA+IGlkZW50aWZ5IGl0IGFzIGkuTVg2UVAg UmV2XzEuMCB3aGVuIHByaW50IG91dCB0aGUgc2lsaWNvbiB2ZXJzaW9uLg0KPiA+DQo+ID4gU2ln bmVkLW9mZi1ieTogQmFpIFBpbmcgPGI1MTUwM0BmcmVlc2NhbGUuY29tPg0KPiA+IC0tLQ0KPiA+ ICBhcmNoL2FybS9tYWNoLWlteC9hbmF0b3AuYyAgICAgfCA1ICsrKystDQo+ID4gIGFyY2gvYXJt L21hY2gtaW14L21hY2gtaW14NnEuYyB8IDggKysrKysrLS0NCj4gPiAgMiBmaWxlcyBjaGFuZ2Vk LCAxMCBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQ0KPiA+DQo+ID4gZGlmZiAtLWdpdCBh L2FyY2gvYXJtL21hY2gtaW14L2FuYXRvcC5jIGIvYXJjaC9hcm0vbWFjaC1pbXgvYW5hdG9wLmMN Cj4gPiBpbmRleCAyMzFiYjI1Li45NjIyNzYzIDEwMDY0NA0KPiA+IC0tLSBhL2FyY2gvYXJtL21h Y2gtaW14L2FuYXRvcC5jDQo+ID4gKysrIGIvYXJjaC9hcm0vbWFjaC1pbXgvYW5hdG9wLmMNCj4g PiBAQCAtMTI5LDcgKzEyOSwxMCBAQCB2b2lkIF9faW5pdCBpbXhfaW5pdF9yZXZpc2lvbl9mcm9t X2FuYXRvcCh2b2lkKQ0KPiA+DQo+ID4gIAlzd2l0Y2ggKGRpZ3Byb2cgJiAweGZmKSB7DQo+ID4g IAljYXNlIDA6DQo+ID4gLQkJcmV2aXNpb24gPSBJTVhfQ0hJUF9SRVZJU0lPTl8xXzA7DQo+ID4g KwkJaWYgKGRpZ3Byb2cgPj4gOCAmIDB4MDEpDQo+ID4gKwkJCXJldmlzaW9uID0gSU1YX0NISVBf UkVWSVNJT05fMl8wOw0KPiA+ICsJCWVsc2UNCj4gPiArCQkJcmV2aXNpb24gPSBJTVhfQ0hJUF9S RVZJU0lPTl8xXzA7DQo+IA0KPiBQbGVhc2UgYXQgbGVhc3QgYWRkIHNvbWUgY29tbWVudCBoZXJl IHRvIGhlbHAgdXMgcmVtZW1iZXIgdGhhdCB0aGlzIGlzIGEgdHJpY2sNCj4gd2UgcGxheSBmb3Ig aS5NWDZRUC4NCj4gDQogDQpXaWxsIGFkZHJlc3MgdGhpcyBpbiBwYXRjaCBWMy4gVGhhbmtzIGZv ciB5b3VyIHJldmlldy4NCg0KPiBTaGF3bg0KPiANCj4gPiAgCQlicmVhazsNCj4gPiAgCWNhc2Ug MToNCj4gPiAgCQlyZXZpc2lvbiA9IElNWF9DSElQX1JFVklTSU9OXzFfMTsNCj4gPiBkaWZmIC0t Z2l0IGEvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1pbXg2cS5jDQo+ID4gYi9hcmNoL2FybS9tYWNo LWlteC9tYWNoLWlteDZxLmMgaW5kZXggMzg3ODQ5NGIuLmNiMjdkNTYgMTAwNjQ0DQo+ID4gLS0t IGEvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1pbXg2cS5jDQo+ID4gKysrIGIvYXJjaC9hcm0vbWFj aC1pbXgvbWFjaC1pbXg2cS5jDQo+ID4gQEAgLTI2Niw4ICsyNjYsMTEgQEAgc3RhdGljIHZvaWQg X19pbml0IGlteDZxX2luaXRfbWFjaGluZSh2b2lkKSAgew0KPiA+ICAJc3RydWN0IGRldmljZSAq cGFyZW50Ow0KPiA+DQo+ID4gLQlpbXhfcHJpbnRfc2lsaWNvbl9yZXYoY3B1X2lzX2lteDZkbCgp ID8gImkuTVg2REwiIDogImkuTVg2USIsDQo+ID4gLQkJCSAgICAgIGlteF9nZXRfc29jX3Jldmlz aW9uKCkpOw0KPiA+ICsJaWYgKGNwdV9pc19pbXg2cSgpICYmIGlteF9nZXRfc29jX3JldmlzaW9u KCkgPT0NCj4gSU1YX0NISVBfUkVWSVNJT05fMl8wKQ0KPiA+ICsJCWlteF9wcmludF9zaWxpY29u X3JldigiaS5NWDZRUCIsIElNWF9DSElQX1JFVklTSU9OXzFfMCk7DQo+ID4gKwllbHNlDQo+ID4g KwkJaW14X3ByaW50X3NpbGljb25fcmV2KGNwdV9pc19pbXg2ZGwoKSA/ICJpLk1YNkRMIiA6ICJp Lk1YNlEiLA0KPiA+ICsJCQkJaW14X2dldF9zb2NfcmV2aXNpb24oKSk7DQo+ID4NCj4gPiAgCXBh cmVudCA9IGlteF9zb2NfZGV2aWNlX2luaXQoKTsNCj4gPiAgCWlmIChwYXJlbnQgPT0gTlVMTCkN Cj4gPiBAQCAtMzk5LDYgKzQwMiw3IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBpbXg2cV9pbml0X2ly cSh2b2lkKSAgc3RhdGljDQo+ID4gY29uc3QgY2hhciAqIGNvbnN0IGlteDZxX2R0X2NvbXBhdFtd IF9faW5pdGNvbnN0ID0gew0KPiA+ICAJImZzbCxpbXg2ZGwiLA0KPiA+ICAJImZzbCxpbXg2cSIs DQo+ID4gKwkiZnNsLGlteDZxcCIsDQo+ID4gIAlOVUxMLA0KPiA+ICB9Ow0KPiA+DQo+ID4gLS0N Cj4gPiAxLjkuMQ0KPiA+DQo+ID4NCg== ^ permalink raw reply [flat|nested] 13+ messages in thread
end of thread, other threads:[~2016-01-28 10:45 UTC | newest] Thread overview: 13+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2015-12-15 6:07 [PATCH v2 0/5] Add support for imx6qp Bai Ping 2015-12-15 6:07 ` [PATCH v2 1/5] ARM: dts: imx: Add basic dts support for imx6qp SOC Bai Ping 2016-01-28 7:42 ` Shawn Guo 2016-01-28 10:38 ` Ping Bai 2015-12-15 6:07 ` [PATCH v2 2/5] ARM: dts: imx: Add basic dts support for imx6qp-sabresd Bai Ping 2016-01-28 7:54 ` Shawn Guo 2016-01-28 10:43 ` Ping Bai 2015-12-15 6:07 ` [PATCH v2 3/5] ARM: dts: imx: Add basic dts support for imx6qp-sabreauto Bai Ping 2016-01-28 7:57 ` Shawn Guo 2015-12-15 6:07 ` [PATCH v2 4/5] clk: imx: Add clock support for imx6qp Bai Ping 2015-12-15 6:07 ` [PATCH v2 5/5] ARM: imx: Add msl code " Bai Ping 2016-01-28 8:10 ` Shawn Guo 2016-01-28 10:45 ` Ping Bai
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).