Add Freescale i.mx7d support
Subsystems (9)
v8 cover Add Freescale i.mx7d support
From: Frank Li <[email protected]>
Add basic support for chip imx7d.
- MSL
- Clock support. All clock enabled.
- pinctrl support
- SD Card support
Change from v7 to v8
- exclude patchs already accepted.
- Remove SOC_IMX7
- Remove static map
- Remove #include <linux/phy.h>
- Remove .restart = mxc_restart,
- Remove mx7d.h
- consistent indetation in imx7d.dtsi
- Change document remove "ipp_di0" and "ipp_di1"
- Remove GPC because needn't it now, will added back at SMP enable patch
- Remove imx21-uart compatible string
- use i.mx6sx timer compatible string, so remove time.c change
- correct typo imx6sx
- dt file add cpu1
Change from v6 to v7
- Move clk to driver/clk/imx
- Remove iomux-lpsr part
- Remove parents clocks node in imx7d.dtsi
Change from v5 to v6
- dual license for dts
- fix typo statue
- Remove smp_operations
- Remove GPT check cpu_is_mx7() by use old compatible mode
- Remove dts arch_timer part, which not used in this patch series
- correct GIC reg map
Change from v4 to v5
- Remove imx7d_map_io()
- Remove clk_register_clkdev(clks[IMX7D_GPT1_ROOT_CLK], "ipg", "imx-gpt.0");
- Remove clk_register_clkdev(clks[IMX7D_GPT_3M_CLK], "gpt_3m", "imx-gpt.0");
- Add comment about enable all clock
- Add Type IMX_PLLV3_ENET_IMX7 and remove cpu_is_imx7d()
Change from v3 to v4
- Fixed the problem review by Russel king.
Remove __mxc_arch_type
Remove MXC_ARCH_CA7
use new smp_operation for ca7 platform
- imx7d.dtsi remove unecessary part for bring up
- imx7d-sdb.dsi, just enable uart i2c and sd card
- Add device tree binding document for timer, clock and pinctrl
Change from v2 to v3
- remove unsupport part in imx7d-sdb.dtb
Change from V1 to V2:
- split patch1 to three small one to avoid 100k maillist limitation.
- fix imx7d.dtsi code style problem
Anson Huang (1):
ARM: imx: add msl support for imx7d
Frank Li (5):
Document: dt: binding: imx: update document for imx7d support
ARM: dts: add imx7d soc dtsi file
ARM: imx: add imx7d clk tree support
arm: dts: add imx7d-sdb support
ARM: config: imx_v6_v7_defconfig add imx7d support
.../devicetree/bindings/clock/imx7d-clock.txt | 13 + .../bindings/pinctrl/fsl,imx7d-pinctrl.txt | 27 + arch/arm/boot/dts/Makefile | 2 + arch/arm/boot/dts/imx7d-sdb.dts | 420 ++++++++++ arch/arm/boot/dts/imx7d.dtsi | 486 +++++++++++ arch/arm/configs/imx_v6_v7_defconfig | 1 + arch/arm/mach-imx/Kconfig | 7 + arch/arm/mach-imx/Makefile | 1 + arch/arm/mach-imx/anatop.c | 5 +- arch/arm/mach-imx/cpu.c | 3 + arch/arm/mach-imx/mach-imx7d.c | 43 + arch/arm/mach-imx/mxc.h | 8 +- drivers/clk/imx/Makefile | 1 + drivers/clk/imx/clk-imx7d.c | 886 +++++++++++++++++++++ drivers/clk/imx/clk-pllv3.c | 14 +- drivers/clk/imx/clk.h | 9 + include/dt-bindings/clock/imx7d-clock.h | 450 +++++++++++ 17 files changed, 2373 insertions(+), 3 deletions(-) create mode 100644 Documentation/devicetree/bindings/clock/imx7d-clock.txt create mode 100644 Documentation/devicetree/bindings/pinctrl/fsl,imx7d-pinctrl.txt create mode 100644 arch/arm/boot/dts/imx7d-sdb.dts create mode 100644 arch/arm/boot/dts/imx7d.dtsi create mode 100644 arch/arm/mach-imx/mach-imx7d.c create mode 100644 drivers/clk/imx/clk-imx7d.c create mode 100644 include/dt-bindings/clock/imx7d-clock.h
Signature · 1 line
1.9.1
PATCH v8 1/6 Document: dt: binding: imx: update document for imx7d support
From: Frank Li <[email protected]>
This part just add necessary change to boot imx7d. Update clock, pinctrl and gpt for imx7d
--- .../devicetree/bindings/clock/imx7d-clock.txt | 13 +++++++++++ .../bindings/pinctrl/fsl,imx7d-pinctrl.txt | 27 ++++++++++++++++++++++ 2 files changed, 40 insertions(+) create mode 100644 Documentation/devicetree/bindings/clock/imx7d-clock.txt create mode 100644 Documentation/devicetree/bindings/pinctrl/fsl,imx7d-pinctrl.txt
Documentation/devicetree/bindings/clock/imx7d-clock.txt new file +13 -0
@@ -0,0 +1,13 @@ +* Clock bindings for Freescale i.MX7 Dual + +Required properties: +- compatible: Should be "fsl,imx7d-ccm" +- reg: Address and length of the register set +- #clock-cells: Should be <1> +- clocks: list of clock specifiers, must contain an entry for each required + entry in clock-names +- clock-names: should include entries "ckil", "osc" + +The clock consumer should specify the desired clock by having the clock +ID in its "clocks" phandle cell. See include/dt-bindings/clock/imx7d-clock.h +for the full list of i.MX7 Dual clock IDs.
Documentation/devicetree/bindings/pinctrl/fsl,imx7d-pinctrl.txt new file +27 -0
@@ -0,0 +1,27 @@ +* Freescale i.MX7 Dual IOMUX Controller + +Please refer to fsl,imx-pinctrl.txt in this directory for common binding part +and usage. + +Required properties: +- compatible: "fsl,imx7d-iomuxc" +- fsl,pins: each entry consists of 6 integers and represents the mux and config + setting for one pin. The first 5 integers <mux_reg conf_reg input_reg mux_val + input_val> are specified using a PIN_FUNC_ID macro, which can be found in + imx7d-pinfunc.h under device tree source folder. The last integer CONFIG is + the pad setting value like pull-up on this pin. Please refer to i.MX7 Dual + Reference Manual for detailed CONFIG settings. + +CONFIG bits definition: +PAD_CTL_PUS_100K_DOWN (0 << 5) +PAD_CTL_PUS_5K_UP (1 << 5) +PAD_CTL_PUS_47K_UP (2 << 5) +PAD_CTL_PUS_100K_UP (3 << 5) +PAD_CTL_PUE (1 << 4) +PAD_CTL_HYS (1 << 3) +PAD_CTL_SRE_SLOW (1 << 2) +PAD_CTL_SRE_FAST (0 << 2) +PAD_CTL_DSE_X1 (0 << 0) +PAD_CTL_DSE_X2 (1 << 0) +PAD_CTL_DSE_X3 (2 << 0) +PAD_CTL_DSE_X4 (3 << 0)
Signature · 1 line
1.9.1
PATCH v8 1/6 Document: dt: binding: imx: update document for imx7d support
Quoted 4 lines · Frank.Li at freescale.com
From: Frank Li <[email protected]>
This part just add necessary change to boot imx7d. Update clock, pinctrl and gpt for imx7d
The gpt part is not covered here anymore. I dropped it and applied the patch.
Shawn
Quoted 64 lines
Signed-off-by Frank Li <[email protected]>--- .../devicetree/bindings/clock/imx7d-clock.txt | 13 +++++++++++ .../bindings/pinctrl/fsl,imx7d-pinctrl.txt | 27 ++++++++++++++++++++++ 2 files changed, 40 insertions(+) create mode 100644 Documentation/devicetree/bindings/clock/imx7d-clock.txt create mode 100644 Documentation/devicetree/bindings/pinctrl/fsl,imx7d-pinctrl.txtDocumentation/devicetree/bindings/clock/imx7d-clock.txt new file +13
-0@@ -0,0 +1,13 @@ +* Clock bindings for Freescale i.MX7 Dual + +Required properties: +- compatible: Should be "fsl,imx7d-ccm" +- reg: Address and length of the register set +- #clock-cells: Should be <1> +- clocks: list of clock specifiers, must contain an entry for each required + entry in clock-names +- clock-names: should include entries "ckil", "osc" + +The clock consumer should specify the desired clock by having the clock +ID in its "clocks" phandle cell. See include/dt-bindings/clock/imx7d-clock.h +for the full list of i.MX7 Dual clock IDs.Documentation/devicetree/bindings/pinctrl/fsl,imx7d-pinctrl.txt new file +27
-0@@ -0,0 +1,27 @@ +* Freescale i.MX7 Dual IOMUX Controller + +Please refer to fsl,imx-pinctrl.txt in this directory for common binding part +and usage. + +Required properties: +- compatible: "fsl,imx7d-iomuxc" +- fsl,pins: each entry consists of 6 integers and represents the mux and config + setting for one pin. The first 5 integers <mux_reg conf_reg input_reg mux_val + input_val> are specified using a PIN_FUNC_ID macro, which can be found in + imx7d-pinfunc.h under device tree source folder. The last integer CONFIG is + the pad setting value like pull-up on this pin. Please refer to i.MX7 Dual + Reference Manual for detailed CONFIG settings. + +CONFIG bits definition: +PAD_CTL_PUS_100K_DOWN (0 << 5) +PAD_CTL_PUS_5K_UP (1 << 5) +PAD_CTL_PUS_47K_UP (2 << 5) +PAD_CTL_PUS_100K_UP (3 << 5) +PAD_CTL_PUE (1 << 4) +PAD_CTL_HYS (1 << 3) +PAD_CTL_SRE_SLOW (1 << 2) +PAD_CTL_SRE_FAST (0 << 2) +PAD_CTL_DSE_X1 (0 << 0) +PAD_CTL_DSE_X2 (1 << 0) +PAD_CTL_DSE_X3 (2 << 0) +PAD_CTL_DSE_X4 (3 << 0)Signature · 1 line
1.9.1
PATCH v8 2/6 ARM: dts: add imx7d soc dtsi file
In reply to Frank.Li at freescale.comFrom: Frank Li <[email protected]>
Add i.mx7d support:
imx7d dtsi part
--- arch/arm/boot/dts/imx7d.dtsi | 486 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 486 insertions(+) create mode 100644 arch/arm/boot/dts/imx7d.dtsi
arch/arm/boot/dts/imx7d.dtsi new file +486 -0
@@ -0,0 +1,486 @@ +/* + * Copyright 2015 Freescale Semiconductor, Inc. + * + * This file is dual-licensed: you can use it either under the terms + * of the GPL or the X11 license, at your option. Note that this dual + * licensing only applies to this file, and not this project as a + * whole. + * + * a) This file is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of the + * License, or (at your option) any later version. + * + * This file is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * Or, alternatively, + * + * b) Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + */ + +#include <dt-bindings/clock/imx7d-clock.h> +#include <dt-bindings/gpio/gpio.h> +#include <dt-bindings/interrupt-controller/arm-gic.h> +#include "imx7d-pinfunc.h" +#include "skeleton.dtsi" + +/ { + aliases { + gpio0 = &gpio1; + gpio1 = &gpio2; + gpio2 = &gpio3; + gpio3 = &gpio4; + gpio4 = &gpio5; + gpio5 = &gpio6; + gpio6 = &gpio7; + i2c0 = &i2c1; + i2c1 = &i2c2; + i2c2 = &i2c3; + i2c3 = &i2c4; + mmc0 = &usdhc1; + mmc1 = &usdhc2; + mmc2 = &usdhc3; + serial0 = &uart1; + serial1 = &uart2; + serial2 = &uart3; + serial3 = &uart4; + serial4 = &uart5; + serial5 = &uart6; + serial6 = &uart7; + }; + + cpus { + #address-cells = <1>; + #size-cells = <0>; + + cpu0: cpu at 0 { + compatible = "arm,cortex-a7"; + device_type = "cpu"; + reg = <0>; + operating-points = < + /* KHz uV */ + 996000 1075000 + 792000 975000 + >; + clock-latency = <61036>; /* two CLK32 periods */ + clocks = <&clks IMX7D_ARM_A7_ROOT_CLK>, <&clks IMX7D_ARM_A7_ROOT_SRC>, + <&clks IMX7D_PLL_ARM_MAIN_CLK>, <&clks IMX7D_PLL_SYS_MAIN_CLK>; + clock-names = "arm", "arm_root_src", "pll_arm", "pll_sys_main"; + }; + + cpu1: cpu at 1 { + compatible = "arm,cortex-a7"; + device_type = "cpu"; + reg = <1>; + }; + }; + + intc: interrupt-controller at 31001000 { + compatible = "arm,cortex-a7-gic"; + #interrupt-cells = <3>; + interrupt-controller; + reg = <0x31001000 0x1000>, + <0x31002000 0x1000>, + <0x31004000 0x2000>, + <0x31006000 0x2000>; + }; + + ckil: clock-cki { + compatible = "fixed-clock"; + #clock-cells = <0>; + clock-frequency = <32768>; + clock-output-names = "ckil"; + }; + + osc: clock-osc { + compatible = "fixed-clock"; + #clock-cells = <0>; + clock-frequency = <24000000>; + clock-output-names = "osc"; + }; + + soc { + #address-cells = <1>; + #size-cells = <1>; + compatible = "simple-bus"; + interrupt-parent = <&intc>; + ranges; + + aips1: aips-bus at 30000000 { + compatible = "fsl,aips-bus", "simple-bus"; + #address-cells = <1>; + #size-cells = <1>; + reg = <0x30000000 0x400000>; + ranges; + + gpio1: gpio at 30200000 { + compatible = "fsl,imx7d-gpio", "fsl,imx35-gpio"; + reg = <0x30200000 0x10000>; + interrupts = <GIC_SPI 64 IRQ_TYPE_LEVEL_HIGH>, /* GPIO1_INT15_0 */ + <GIC_SPI 65 IRQ_TYPE_LEVEL_HIGH>; /* GPIO1_INT31_16 */ + gpio-controller; + #gpio-cells = <2>; + interrupt-controller; + #interrupt-cells = <2>; + }; + + gpio2: gpio at 30210000 { + compatible = "fsl,imx7d-gpio", "fsl,imx35-gpio"; + reg = <0x30210000 0x10000>; + interrupts = <GIC_SPI 66 IRQ_TYPE_LEVEL_HIGH>, + <GIC_SPI 67 IRQ_TYPE_LEVEL_HIGH>; + gpio-controller; + #gpio-cells = <2>; + interrupt-controller; + #interrupt-cells = <2>; + }; + + gpio3: gpio at 30220000 { + compatible = "fsl,imx7d-gpio", "fsl,imx35-gpio"; + reg = <0x30220000 0x10000>; + interrupts = <GIC_SPI 68 IRQ_TYPE_LEVEL_HIGH>, + <GIC_SPI 69 IRQ_TYPE_LEVEL_HIGH>; + gpio-controller; + #gpio-cells = <2>; + interrupt-controller; + #interrupt-cells = <2>; + }; + + gpio4: gpio at 30230000 { + compatible = "fsl,imx7d-gpio", "fsl,imx35-gpio"; + reg = <0x30230000 0x10000>; + interrupts = <GIC_SPI 70 IRQ_TYPE_LEVEL_HIGH>, + <GIC_SPI 71 IRQ_TYPE_LEVEL_HIGH>; + gpio-controller; + #gpio-cells = <2>; + interrupt-controller; + #interrupt-cells = <2>; + }; + + gpio5: gpio at 30240000 { + compatible = "fsl,imx7d-gpio", "fsl,imx35-gpio"; + reg = <0x30240000 0x10000>; + interrupts = <GIC_SPI 72 IRQ_TYPE_LEVEL_HIGH>, + <GIC_SPI 73 IRQ_TYPE_LEVEL_HIGH>; + gpio-controller; + #gpio-cells = <2>; + interrupt-controller; + #interrupt-cells = <2>; + }; + + gpio6: gpio at 30250000 { + compatible = "fsl,imx7d-gpio", "fsl,imx35-gpio"; + reg = <0x30250000 0x10000>; + interrupts = <GIC_SPI 74 IRQ_TYPE_LEVEL_HIGH>, + <GIC_SPI 75 IRQ_TYPE_LEVEL_HIGH>; + gpio-controller; + #gpio-cells = <2>; + interrupt-controller; + #interrupt-cells = <2>; + }; + + gpio7: gpio at 30260000 { + compatible = "fsl,imx7d-gpio", "fsl,imx35-gpio"; + reg = <0x30260000 0x10000>; + interrupts = <GIC_SPI 76 IRQ_TYPE_LEVEL_HIGH>, + <GIC_SPI 77 IRQ_TYPE_LEVEL_HIGH>; + gpio-controller; + #gpio-cells = <2>; + interrupt-controller; + #interrupt-cells = <2>; + }; + + gpt1: gpt at 302d0000 { + compatible = "fsl,imx7d-gpt", "fsl,imx6sx-gpt"; + reg = <0x302d0000 0x10000>; + interrupts = <GIC_SPI 55 IRQ_TYPE_LEVEL_HIGH>; + clocks = <&clks IMX7D_CLK_DUMMY>, + <&clks IMX7D_GPT1_ROOT_CLK>; + clock-names = "ipg", "per"; + }; + + gpt2: gpt at 302e0000 { + compatible = "fsl,imx7d-gpt", "fsl,imx6sx-gpt"; + reg = <0x302e0000 0x10000>; + interrupts = <GIC_SPI 54 IRQ_TYPE_LEVEL_HIGH>; + clocks = <&clks IMX7D_CLK_DUMMY>, + <&clks IMX7D_GPT2_ROOT_CLK>; + clock-names = "ipg", "per"; + status = "disabled"; + }; + + gpt3: gpt at 302f0000 { + compatible = "fsl,imx7d-gpt", "fsl,imx6sx-gpt"; + reg = <0x302f0000 0x10000>; + interrupts = <GIC_SPI 53 IRQ_TYPE_LEVEL_HIGH>; + clocks = <&clks IMX7D_CLK_DUMMY>, + <&clks IMX7D_GPT3_ROOT_CLK>; + clock-names = "ipg", "per"; + status = "disabled"; + }; + + gpt4: gpt at 30300000 { + compatible = "fsl,imx7d-gpt", "fsl,imx6sx-gpt"; + reg = <0x30300000 0x10000>; + interrupts = <GIC_SPI 52 IRQ_TYPE_LEVEL_HIGH>; + clocks = <&clks IMX7D_CLK_DUMMY>, + <&clks IMX7D_GPT4_ROOT_CLK>; + clock-names = "ipg", "per"; + status = "disabled"; + }; + + iomuxc: iomuxc at 30330000 { + compatible = "fsl,imx7d-iomuxc"; + reg = <0x30330000 0x10000>; + }; + + gpr: iomuxc-gpr at 30340000 { + compatible = "fsl,imx7d-iomuxc-gpr", "syscon"; + reg = <0x30340000 0x10000>; + }; + + ocotp: ocotp-ctrl at 30350000 { + compatible = "syscon"; + reg = <0x30350000 0x10000>; + clocks = <&clks IMX7D_CLK_DUMMY>; + status = "disabled"; + }; + + anatop: anatop at 30360000 { + compatible = "fsl,imx7d-anatop", "fsl,imx6q-anatop", + "syscon", "simple-bus"; + reg = <0x30360000 0x10000>; + interrupts = <GIC_SPI 49 IRQ_TYPE_LEVEL_HIGH>, + <GIC_SPI 51 IRQ_TYPE_LEVEL_HIGH>; + + reg_1p0d: regulator-vdd1p0d at 210 { + compatible = "fsl,anatop-regulator"; + regulator-name = "vdd1p0d"; + regulator-min-microvolt = <800000>; + regulator-max-microvolt = <1200000>; + anatop-reg-offset = <0x210>; + anatop-vol-bit-shift = <8>; + anatop-vol-bit-width = <5>; + anatop-min-bit-val = <8>; + anatop-min-voltage = <800000>; + anatop-max-voltage = <1200000>; + anatop-enable-bit = <31>; + }; + }; + + snvs: snvs at 30370000 { + compatible = "fsl,sec-v4.0-mon", "simple-bus"; + #address-cells = <1>; + #size-cells = <1>; + ranges = <0 0x30370000 0x10000>; + + snvs-rtc-lp at 34 { + compatible = "fsl,sec-v4.0-mon-rtc-lp"; + reg = <0x34 0x58>; + interrupts = <GIC_SPI 19 IRQ_TYPE_LEVEL_HIGH>, + <GIC_SPI 20 IRQ_TYPE_LEVEL_HIGH>; + }; + }; + + clks: ccm at 30380000 { + compatible = "fsl,imx7d-ccm"; + reg = <0x30380000 0x10000>; + interrupts = <GIC_SPI 85 IRQ_TYPE_LEVEL_HIGH>, + <GIC_SPI 86 IRQ_TYPE_LEVEL_HIGH>; + #clock-cells = <1>; + clocks = <&ckil>, <&osc>; + clock-names = "ckil", "osc"; + }; + + src: src at 30390000 { + compatible = "fsl,imx7d-src", "fsl,imx51-src", "syscon"; + reg = <0x30390000 0x10000>; + interrupts = <GIC_SPI 89 IRQ_TYPE_LEVEL_HIGH>; + #reset-cells = <1>; + }; + }; + + aips3: aips-bus at 30800000 { + compatible = "fsl,aips-bus", "simple-bus"; + #address-cells = <1>; + #size-cells = <1>; + reg = <0x30800000 0x400000>; + ranges; + + uart1: serial at 30860000 { + compatible = "fsl,imx7d-uart", + "fsl,imx6q-uart"; + reg = <0x30860000 0x10000>; + interrupts = <GIC_SPI 26 IRQ_TYPE_LEVEL_HIGH>; + clocks = <&clks IMX7D_UART1_ROOT_CLK>, + <&clks IMX7D_UART1_ROOT_CLK>; + clock-names = "ipg", "per"; + status = "disabled"; + }; + + uart2: serial at 30870000 { + compatible = "fsl,imx7d-uart", + "fsl,imx6q-uart"; + reg = <0x30870000 0x10000>; + interrupts = <GIC_SPI 27 IRQ_TYPE_LEVEL_HIGH>; + clocks = <&clks IMX7D_UART2_ROOT_CLK>, + <&clks IMX7D_UART2_ROOT_CLK>; + clock-names = "ipg", "per"; + status = "disabled"; + }; + + uart3: serial at 30880000 { + compatible = "fsl,imx7d-uart", + "fsl,imx6q-uart"; + reg = <0x30880000 0x10000>; + interrupts = <GIC_SPI 28 IRQ_TYPE_LEVEL_HIGH>; + clocks = <&clks IMX7D_UART3_ROOT_CLK>, + <&clks IMX7D_UART3_ROOT_CLK>; + clock-names = "ipg", "per"; + status = "disabled"; + }; + + i2c1: i2c at 30a20000 { + #address-cells = <1>; + #size-cells = <0>; + compatible = "fsl,imx7d-i2c", "fsl,imx21-i2c"; + reg = <0x30a20000 0x10000>; + interrupts = <GIC_SPI 35 IRQ_TYPE_LEVEL_HIGH>; + clocks = <&clks IMX7D_I2C1_ROOT_CLK>; + status = "disabled"; + }; + + i2c2: i2c at 30a30000 { + #address-cells = <1>; + #size-cells = <0>; + compatible = "fsl,imx7d-i2c", "fsl,imx21-i2c"; + reg = <0x30a30000 0x10000>; + interrupts = <GIC_SPI 36 IRQ_TYPE_LEVEL_HIGH>; + clocks = <&clks IMX7D_I2C2_ROOT_CLK>; + status = "disabled"; + }; + + i2c3: i2c at 30a40000 { + #address-cells = <1>; + #size-cells = <0>; + compatible = "fsl,imx7d-i2c", "fsl,imx21-i2c"; + reg = <0x30a40000 0x10000>; + interrupts = <GIC_SPI 37 IRQ_TYPE_LEVEL_HIGH>; + clocks = <&clks IMX7D_I2C3_ROOT_CLK>; + status = "disabled"; + }; + + i2c4: i2c at 30a50000 { + #address-cells = <1>; + #size-cells = <0>; + compatible = "fsl,imx7d-i2c", "fsl,imx21-i2c"; + reg = <0x30a50000 0x10000>; + interrupts = <GIC_SPI 38 IRQ_TYPE_LEVEL_HIGH>; + clocks = <&clks IMX7D_I2C4_ROOT_CLK>; + status = "disabled"; + }; + + uart4: serial at 30a60000 { + compatible = "fsl,imx7d-uart", + "fsl,imx6q-uart"; + reg = <0x30a60000 0x10000>; + interrupts = <GIC_SPI 29 IRQ_TYPE_LEVEL_HIGH>; + clocks = <&clks IMX7D_UART4_ROOT_CLK>, + <&clks IMX7D_UART4_ROOT_CLK>; + clock-names = "ipg", "per"; + status = "disabled"; + }; + + uart5: serial at 30a70000 { + compatible = "fsl,imx7d-uart", + "fsl,imx6q-uart"; + reg = <0x30a70000 0x10000>; + interrupts = <GIC_SPI 30 IRQ_TYPE_LEVEL_HIGH>; + clocks = <&clks IMX7D_UART5_ROOT_CLK>, + <&clks IMX7D_UART5_ROOT_CLK>; + clock-names = "ipg", "per"; + status = "disabled"; + }; + + uart6: serial at 30a80000 { + compatible = "fsl,imx7d-uart", + "fsl,imx6q-uart"; + reg = <0x30a80000 0x10000>; + interrupts = <GIC_SPI 16 IRQ_TYPE_LEVEL_HIGH>; + clocks = <&clks IMX7D_UART6_ROOT_CLK>, + <&clks IMX7D_UART6_ROOT_CLK>; + clock-names = "ipg", "per"; + status = "disabled"; + }; + + uart7: serial at 30a90000 { + compatible = "fsl,imx7d-uart", + "fsl,imx6q-uart"; + reg = <0x30a90000 0x10000>; + interrupts = <GIC_SPI 126 IRQ_TYPE_LEVEL_HIGH>; + clocks = <&clks IMX7D_UART7_ROOT_CLK>, + <&clks IMX7D_UART7_ROOT_CLK>; + clock-names = "ipg", "per"; + status = "disabled"; + }; + + usdhc1: usdhc at 30b40000 { + compatible = "fsl,imx7d-usdhc", "fsl,imx6sl-usdhc"; + reg = <0x30b40000 0x10000>; + interrupts = <GIC_SPI 22 IRQ_TYPE_LEVEL_HIGH>; + clocks = <&clks IMX7D_CLK_DUMMY>, + <&clks IMX7D_CLK_DUMMY>, + <&clks IMX7D_USDHC1_ROOT_CLK>; + clock-names = "ipg", "ahb", "per"; + bus-width = <4>; + status = "disabled"; + }; + + usdhc2: usdhc at 30b50000 { + compatible = "fsl,imx7d-usdhc", "fsl,imx6sl-usdhc"; + reg = <0x30b50000 0x10000>; + interrupts = <GIC_SPI 23 IRQ_TYPE_LEVEL_HIGH>; + clocks = <&clks IMX7D_CLK_DUMMY>, + <&clks IMX7D_CLK_DUMMY>, + <&clks IMX7D_USDHC2_ROOT_CLK>; + clock-names = "ipg", "ahb", "per"; + bus-width = <4>; + status = "disabled"; + }; + + usdhc3: usdhc at 30b60000 { + compatible = "fsl,imx7d-usdhc", "fsl,imx6sl-usdhc"; + reg = <0x30b60000 0x10000>; + interrupts = <GIC_SPI 24 IRQ_TYPE_LEVEL_HIGH>; + clocks = <&clks IMX7D_CLK_DUMMY>, + <&clks IMX7D_CLK_DUMMY>, + <&clks IMX7D_USDHC3_ROOT_CLK>; + clock-names = "ipg", "ahb", "per"; + bus-width = <4>; + status = "disabled"; + }; + }; + }; +};
Signature · 1 line
1.9.1
PATCH v8 2/6 ARM: dts: add imx7d soc dtsi file
Quoted 4 lines · Frank.Li at freescale.com
From: Frank Li <[email protected]>
Add i.mx7d support:
imx7d dtsi part
The commit log should be really improved a bit to briefly describe this new SoC.
Shawn
Quoted 3 lines
Signed-off-by Anson Huang <[email protected]>Signed-off-by Frank Li <[email protected]>
PATCH v8 3/6 ARM: imx: add msl support for imx7d
In reply to Frank.Li at freescale.comFrom: Anson Huang <[email protected]>
Add i.MX7D MSL support.
--- arch/arm/mach-imx/Kconfig | 7 +++++++ arch/arm/mach-imx/Makefile | 1 + arch/arm/mach-imx/anatop.c | 5 ++++- arch/arm/mach-imx/cpu.c | 3 +++ arch/arm/mach-imx/mach-imx7d.c | 43 ++++++++++++++++++++++++++++++++++++++++++ arch/arm/mach-imx/mxc.h | 8 +++++++- 6 files changed, 65 insertions(+), 2 deletions(-) create mode 100644 arch/arm/mach-imx/mach-imx7d.c
arch/arm/mach-imx/Kconfig +7 -0
@@ -582,6 +582,13 @@ config SOC_IMX6SX help This enables support for Freescale i.MX6 SoloX processor. +config SOC_IMX7D + bool "i.MX7 Dual support" + select PINCTRL_IMX7D + select ARM_GIC + help + This enables support for Freescale i.MX7 Dual processor. + config SOC_VF610 bool "Vybrid Family VF610 support" select IRQ_DOMAIN_HIERARCHY
arch/arm/mach-imx/Makefile +1 -0
@@ -85,6 +85,7 @@ endif obj-$(CONFIG_SOC_IMX6Q) += mach-imx6q.o obj-$(CONFIG_SOC_IMX6SL) += mach-imx6sl.o obj-$(CONFIG_SOC_IMX6SX) += mach-imx6sx.o +obj-$(CONFIG_SOC_IMX7D) += mach-imx7d.o ifeq ($(CONFIG_SUSPEND),y) AFLAGS_suspend-imx6.o :=-Wa,-march=armv7-a
arch/arm/mach-imx/anatop.c +4 -1
@@ -1,5 +1,5 @@/* -* Copyright (C) 2013 Freescale Semiconductor, Inc. +* Copyright (C) 2013-2015 Freescale Semiconductor, Inc. * * The code contained herein is licensed under the GNU General Public * License. You may obtain a copy of the GNU General Public License
@@ -28,6 +28,7 @@#define ANADIG_USB2_CHRG_DETECT 0x210#define ANADIG_DIGPROG 0x260#define ANADIG_DIGPROG_IMX6SL 0x280 +#define ANADIG_DIGPROG_IMX7D 0x800#define BM_ANADIG_REG_2P5_ENABLE_WEAK_LINREG 0x40000#define BM_ANADIG_REG_2P5_ENABLE_PULLDOWN 0x8
@@ -121,6 +122,8 @@ void __init imx_init_revision_from_anatop(void)WARN_ON (!anatop_base);if (of_device_is_compatible (np,"fsl,imx6sl-anatop" )) offset =ANADIG_DIGPROG_IMX6SL ; +if (of_device_is_compatible (np,"fsl,imx7d-anatop" )) + offset =ANADIG_DIGPROG_IMX7D ; digprog =readl_relaxed (anatop_base + offset);iounmap (anatop_base);
arch/arm/mach-imx/cpu.c +3 -0
@@ -130,6 +130,9 @@ struct device * __init imx_soc_device_init(void)case MXC_CPU_IMX6Q : soc_id ="i.MX6Q" ;break ; +case MXC_CPU_IMX7D : + soc_id ="i.MX7D" ; +break ;default : soc_id ="Unknown" ; }
arch/arm/mach-imx/mach-imx7d.c new file +43 -0
43 lines not on this page · raw message
arch/arm/mach-imx/mxc.h +7 -1
@@ -1,5 +1,5 @@/* -* Copyright 2004-2007, 2010 Freescale Semiconductor, Inc. All Rights Reserved. +* Copyright 2004-2007, 2010-2015 Freescale Semiconductor, Inc. * Copyright (C) 2008 Juergen Beisert (kernel at pengutronix.de) * * This program is free software; you can redistribute it and/or
@@ -38,6 +38,7 @@#define MXC_CPU_IMX6DL 0x61#define MXC_CPU_IMX6SX 0x62#define MXC_CPU_IMX6Q 0x63 +#define MXC_CPU_IMX7D 0x72#define IMX_DDR_TYPE_LPDDR2 1
@@ -169,6 +170,11 @@ static inline bool cpu_is_imx6q(void)return __mxc_cpu_type ==MXC_CPU_IMX6Q ; } +static inline bool cpu_is_imx7d (void ) +{ +return __mxc_cpu_type ==MXC_CPU_IMX7D ; +} +struct cpu_op {u32 cpu_rate; };
Signature · 1 line
1.9.1
Shawn Guo
AppliedPATCH v8 3/6 ARM: imx: add msl support for imx7d
Quoted 6 lines · Frank.Li at freescale.com
From: Anson Huang <[email protected]>
Add i.MX7D MSL support.
Signed-off-by Anson Huang <[email protected]>Signed-off-by Frank Li <[email protected]>
Applied, thanks.
PATCH v8 4/6 ARM: imx: add imx7d clk tree support
In reply to Frank.Li at freescale.comFrom: Frank Li <[email protected]>
Add i.MX7D clk tree support.
Enable all clock to bring up imx7.
Clock framework need be modified a little since imx7d change clock design. otherwise system will halt and block the other part upstream.
All clock refine need wait for Dong Aisheng's patch
clk: support clocks which requires parent clock on during operation Or other solution ready.
--- drivers/clk/imx/Makefile | 1 + drivers/clk/imx/clk-imx7d.c | 886 ++++++++++++++++++++++++++++++++ drivers/clk/imx/clk-pllv3.c | 14 +- drivers/clk/imx/clk.h | 9 + include/dt-bindings/clock/imx7d-clock.h | 450 ++++++++++++++++ 5 files changed, 1359 insertions(+), 1 deletion(-) create mode 100644 drivers/clk/imx/clk-imx7d.c create mode 100644 include/dt-bindings/clock/imx7d-clock.h
drivers/clk/imx/Makefile +1 -0
@@ -23,3 +23,4 @@ obj-$(CONFIG_SOC_IMX6Q) += clk-imx6q.o obj-$(CONFIG_SOC_IMX6SL) += clk-imx6sl.o obj-$(CONFIG_SOC_IMX6SX) += clk-imx6sx.o obj-$(CONFIG_SOC_VF610) += clk-vf610.o +obj-$(CONFIG_SOC_IMX7D) += clk-imx7d.o
drivers/clk/imx/clk-imx7d.c new file +886 -0
886 lines not on this page · raw message
drivers/clk/imx/clk-pllv3.c +13 -1
@@ -24,12 +24,16 @@#define BM_PLL_POWER (0x1 << 12)#define BM_PLL_LOCK (0x1 << 31) +#define BM_PLL_ENABLE (0x1 << 13) +#define BM_PLL_BYPASS (0x1 << 16) +#define ENET_PLL_POWER (0x1 << 5)/** * struct clk_pllv3 - IMX PLL clock version 3 * @clk_hw: clock source * @base: base address of PLL registers * @powerup_set: set POWER bit to power up the PLL +* @powerdown: pll powerdown offset bit * @div_mask: mask of divider bits * @div_shift: shift of divider bits *
@@ -40,6 +44,7 @@ struct clk_pllv3 {struct clk_hw hw;void __iomem *base;bool powerup_set; +u32 powerdown;u32 div_mask;u32 div_shift; };
@@ -49,7 +54,7 @@ struct clk_pllv3 {static int clk_pllv3_wait_lock (struct clk_pllv3 *pll) {unsigned long timeout = jiffies +msecs_to_jiffies (10 ); -u32 val =readl_relaxed (pll->base) &BM_PLL_POWER ; +u32 val =readl_relaxed (pll->base) & pll->powerdown;/* No need to wait for lock when pll is not powered up */ if ((pll->powerup_set && !val) || (!pll->powerup_set && val))
@@ -293,6 +298,8 @@ struct clk *imx_clk_pllv3(enum imx_pllv3_type type, const char *name,if (!pll)return ERR_PTR (-ENOMEM ); + pll->powerdown =BM_PLL_POWER ; +switch (type) {case IMX_PLLV3_SYS : ops = &clk_pllv3_sys_ops;
@@ -306,9 +313,14 @@ struct clk *imx_clk_pllv3(enum imx_pllv3_type type, const char *name,case IMX_PLLV3_AV : ops = &clk_pllv3_av_ops;break ; +case IMX_PLLV3_ENET_MX7 : + pll->powerdown =ENET_PLL_POWER ;case IMX_PLLV3_ENET : ops = &clk_pllv3_enet_ops;break ; +case IMX_PLLV3_SYSV2 : + ops = &clk_pllv3_ops; +break ;default : ops = &clk_pllv3_ops; }
drivers/clk/imx/clk.h +9 -0
@@ -39,6 +39,8 @@ enum imx_pllv3_type {IMX_PLLV3_USB_VF610 ,IMX_PLLV3_AV ,IMX_PLLV3_ENET , +IMX_PLLV3_ENET_MX7 , +IMX_PLLV3_SYSV2 }; struct clk *imx_clk_pllv3(enum imx_pllv3_type type, const char *name,
@@ -117,6 +119,13 @@ static inline struct clk *imx_clk_gate(const char *name, const char *parent, shift, 0, &imx_ccm_lock); } +static inline struct clk *imx_clk_gate_flags (const char *name,const char *parent, +void __iomem *reg,u8 shift) +{ +return clk_register_gate (NULL , name, parent,CLK_SET_RATE_PARENT , + reg, shift,CLK_GATE_SET_TO_DISABLE , &imx_ccm_lock); +} +static inline struct clk *imx_clk_gate_dis (const char *name,const char *parent,void __iomem *reg,u8 shift) {
include/dt-bindings/clock/imx7d-clock.h new file +450 -0
450 lines not on this page · raw message
Signature · 1 line
1.9.1
PATCH v8 4/6 ARM: imx: add imx7d clk tree support
Quoted 13 lines · Frank.Li at freescale.com
From: Frank Li <[email protected]>
Add i.MX7D clk tree support.
Enable all clock to bring up imx7.
Clock framework need be modified a little since imx7d change clock design. otherwise system will halt and block the other part upstream.All clock refine need wait for Dong Aisheng's patch
clk: support clocks which requires parent clock on during operation Or other solution ready.
Quoted 7 lines
Signed-off-by Anson Huang <[email protected]>Signed-off-by Adrian Alonso <[email protected]>Signed-off-by Frank Li <[email protected]>--- drivers/clk/imx/Makefile | 1 + drivers/clk/imx/clk-imx7d.c | 886 ++++++++++++++++++++++++++++++++ drivers/clk/imx/clk-pllv3.c | 14 +-
The clk-pllv3.c change should be a separate patch goes before clk-imx7d.c one.
Quoted 36 lines
drivers/clk/imx/clk.h | 9 + include/dt-bindings/clock/imx7d-clock.h | 450 ++++++++++++++++ 5 files changed, 1359 insertions(+), 1 deletion(-) create mode 100644 drivers/clk/imx/clk-imx7d.c create mode 100644 include/dt-bindings/clock/imx7d-clock.hdrivers/clk/imx/Makefile +1
-0@@ -23,3 +23,4 @@ obj-$(CONFIG_SOC_IMX6Q) += clk-imx6q.o obj-$(CONFIG_SOC_IMX6SL) += clk-imx6sl.o obj-$(CONFIG_SOC_IMX6SX) += clk-imx6sx.o obj-$(CONFIG_SOC_VF610) += clk-vf610.o +obj-$(CONFIG_SOC_IMX7D) += clk-imx7d.odrivers/clk/imx/clk-imx7d.c new file +15
-0@@ -0,0 +1,886 @@ +/* +* Copyright (C) 2014-2015 Freescale Semiconductor, Inc. +* +* The code contained herein is licensed under the GNU General Public +* License. You may obtain a copy of the GNU General Public License +* Version 2 or later at the following locations: +* +* http://www.opensource.org/licenses/gpl-license.html +* http://www.gnu.org/copyleft/gpl.html +*/ + +#include <dt-bindings/clock/imx7d-clock.h> +#include <linux/clk.h> +#include <linux/clkdev.h> +#include <linux/err.h>
drivers/clk/imx/clk-imx7d.c line 25
Quoted 10 lines
drivers/clk/imx/clk-imx7d.c new file +10
-0+#include <linux/init.h> +#include <linux/io.h> +#include <linux/of.h> +#include <linux/of_address.h> +#include <linux/of_irq.h> +#include <linux/types.h> + +#include "clk.h" + +static struct clk *clks[IMX7D_END_CLK ];
Could IMX7D_CLK_END be better?
[...]
drivers/clk/imx/clk-pllv3.c line 28
Quoted 10 lines
drivers/clk/imx/clk-pllv3.c +2
-0@@ -24,12 +24,16 @@#define BM_PLL_POWER (0x1 << 12)#define BM_PLL_LOCK (0x1 << 31) +#define BM_PLL_ENABLE (0x1 << 13) +#define BM_PLL_BYPASS (0x1 << 16)
How are these two being used?
Quoted 38 lines
drivers/clk/imx/clk-pllv3.c +6
-1+#define ENET_PLL_POWER (0x1 << 5)/** * struct clk_pllv3 - IMX PLL clock version 3 * @clk_hw: clock source * @base: base address of PLL registers * @powerup_set: set POWER bit to power up the PLL +* @powerdown: pll powerdown offset bit * @div_mask: mask of divider bits * @div_shift: shift of divider bits * @@ -40,6 +44,7 @@ struct clk_pllv3 {struct clk_hw hw;void __iomem *base;bool powerup_set; +u32 powerdown;u32 div_mask;u32 div_shift; };@@ -49,7 +54,7 @@ struct clk_pllv3 {static int clk_pllv3_wait_lock (struct clk_pllv3 *pll) {unsigned long timeout = jiffies +msecs_to_jiffies (10 ); -u32 val =readl_relaxed (pll->base) &BM_PLL_POWER ; +u32 val =readl_relaxed (pll->base) & pll->powerdown;/* No need to wait for lock when pll is not powered up */ if ((pll->powerup_set && !val) || (!pll->powerup_set && val))@@ -293,6 +298,8 @@ struct clk *imx_clk_pllv3(enum imx_pllv3_type type, const char *name,if (!pll)return ERR_PTR (-ENOMEM ); + pll->powerdown =BM_PLL_POWER ; +switch (type) {case IMX_PLLV3_SYS : ops = &clk_pllv3_sys_ops;
drivers/clk/imx/clk-pllv3.c struct clk *imx_clk_pllv3(enum imx_pllv3_type type, const char *name, · line 321
Quoted 9 lines
drivers/clk/imx/clk-pllv3.c +3
-0@@ -306,9 +313,14 @@ struct clk *imx_clk_pllv3(enum imx_pllv3_type type, const char *name,case IMX_PLLV3_AV : ops = &clk_pllv3_av_ops;break ; +case IMX_PLLV3_ENET_MX7 : + pll->powerdown =ENET_PLL_POWER ;case IMX_PLLV3_ENET : ops = &clk_pllv3_enet_ops;break ; +case IMX_PLLV3_SYSV2 :
How does IMX_PLLV3_SYSV2 differ from IMX_PLLV3_GENERIC? I'm asking why we need this IMX_PLLV3_SYSV2 new type at all.
Quoted 19 lines
drivers/clk/imx/clk-pllv3.c +2
-0+ ops = &clk_pllv3_ops; +break ;default : ops = &clk_pllv3_ops; }drivers/clk/imx/clk.h +2
-0@@ -39,6 +39,8 @@ enum imx_pllv3_type {IMX_PLLV3_USB_VF610 ,IMX_PLLV3_AV ,IMX_PLLV3_ENET , +IMX_PLLV3_ENET_MX7 , +IMX_PLLV3_SYSV2 }; struct clk *imx_clk_pllv3(enum imx_pllv3_type type, const char *name,
drivers/clk/imx/clk.h static inline struct clk *imx_clk_gate(const char *name, const char *parent, · line 123
Quoted 5 lines
drivers/clk/imx/clk.h +2
-0@@ -117,6 +119,13 @@ static inline struct clk *imx_clk_gate(const char *name, const char *parent, shift, 0, &imx_ccm_lock); } +static inline struct clk *imx_clk_gate_flags (const char *name,const char *parent, +void __iomem *reg,u8 shift)
When you name the function imx_clk_gate_flags(), we really expect that it takes 'flags' as an argument.
drivers/clk/imx/clk.h static inline struct clk *imx_clk_gate(const char *name, const char *parent, · line 128
Quoted 5 lines
drivers/clk/imx/clk.h +5
-0+{ +return clk_register_gate (NULL , name, parent,CLK_SET_RATE_PARENT , + reg, shift,CLK_GATE_SET_TO_DISABLE , &imx_ccm_lock); +} +
Isn't imx_clk_gate_dis() just doing the same?
Shawn
Quoted 3 lines
drivers/clk/imx/clk.h +0
-0static inline struct clk *imx_clk_gate_dis (const char *name,const char *parent,void __iomem *reg,u8 shift) {
PATCH v8 5/6 arm: dts: add imx7d-sdb support
In reply to Frank.Li at freescale.comFrom: Frank Li <[email protected]>
add imx7d sdb board support
--- arch/arm/boot/dts/Makefile | 2 + arch/arm/boot/dts/imx7d-sdb.dts | 420 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 422 insertions(+) create mode 100644 arch/arm/boot/dts/imx7d-sdb.dts
arch/arm/boot/dts/Makefile +2 -0
@@ -313,6 +313,8 @@ dtb-$(CONFIG_SOC_IMX6SX) += \ imx6sx-sabreauto.dtb \ imx6sx-sdb-reva.dtb \ imx6sx-sdb.dtb +dtb-$(CONFIG_SOC_IMX7D) += \ + imx7d-sdb.dtb dtb-$(CONFIG_SOC_LS1021A) += \ ls1021a-qds.dtb \ ls1021a-twr.dtb
arch/arm/boot/dts/imx7d-sdb.dts new file +420 -0
420 lines not on this page · raw message
Signature · 1 line
1.9.1
PATCH v8 5/6 arm: dts: add imx7d-sdb support
Quoted 5 lines · Frank.Li at freescale.com
From: Frank Li <[email protected]>
add imx7d sdb board support
Signed-off-by Frank Li <[email protected]>
Use "ARM: dts: ..." for sake of consistency.
Quoted 5 lines
--- arch/arm/boot/dts/Makefile | 2 + arch/arm/boot/dts/imx7d-sdb.dts | 420 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 422 insertions(+) create mode 100644 arch/arm/boot/dts/imx7d-sdb.dts
[...]
Quoted 26 lines
arch/arm/boot/dts/imx7d-sdb.dts new file +26
-0+ regulators { + compatible = "simple-bus"; + #address-cells = <1>; + #size-cells = <0>; + + reg_usb_otg1_vbus: regulator at 0 { + compatible = "regulator-fixed"; + reg = <0>; + regulator-name = "usb_otg1_vbus"; + regulator-min-microvolt = <5000000>; + regulator-max-microvolt = <5000000>; + gpio = <&gpio1 5 GPIO_ACTIVE_HIGH>; + enable-active-high; + }; + + reg_usb_otg2_vbus: regulator at 1 { + compatible = "regulator-fixed"; + reg = <1>; + regulator-name = "usb_otg2_vbus"; + regulator-min-microvolt = <5000000>; + regulator-max-microvolt = <5000000>; + gpio = <&gpio4 7 GPIO_ACTIVE_HIGH>; + enable-active-high; + }; + + reg_can2_3v3: regulator at 2 {
arch/arm/boot/dts/imx7d-sdb.dts line 91
Quoted 10 lines
arch/arm/boot/dts/imx7d-sdb.dts new file +10
-0+ compatible = "regulator-fixed"; + reg = <2>; + regulator-name = "can2-3v3"; + regulator-min-microvolt = <3300000>; + regulator-max-microvolt = <3300000>; + gpio = <&gpio1 7 GPIO_ACTIVE_LOW>; + }; + + reg_vref_1v8: regulator at 3 { + compatible = "regulator-fixed";
reg= <3>;
arch/arm/boot/dts/imx7d-sdb.dts line 97
Quoted 6 lines
arch/arm/boot/dts/imx7d-sdb.dts new file +6
-0+ regulator-name = "vref-1v8"; + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <1800000>; + }; + + wlreg_on: fixedregulator at 100 {
fixedregulator? @100?
Quoted 6 lines
arch/arm/boot/dts/imx7d-sdb.dts new file +6
-0+ compatible = "regulator-fixed"; + regulator-min-microvolt = <5000000>; + regulator-max-microvolt = <5000000>; + regulator-name = "wlreg_on"; + gpio = <&gpio4 21 GPIO_ACTIVE_HIGH>; + enable-active-high;
arch/arm/boot/dts/imx7d-sdb.dts line 113
Quoted 10 lines
arch/arm/boot/dts/imx7d-sdb.dts new file +10
-0+ }; + }; +}; + +&cpu0 { + arm-supply = <&sw1a_reg>; +}; + +&i2c1 { + clock-frequency = <100000>;
This is the default case, so it can just be saved.
Quoted 3 lines
arch/arm/boot/dts/imx7d-sdb.dts new file +3
-0+ pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_i2c1>; + status = "okay";
[...]
arch/arm/boot/dts/imx7d-sdb.dts line 210
Quoted 4 lines
arch/arm/boot/dts/imx7d-sdb.dts new file +4
-0+}; + +&i2c2 { + clock-frequency = <100000>;
Ditto
arch/arm/boot/dts/imx7d-sdb.dts line 217
Quoted 7 lines
arch/arm/boot/dts/imx7d-sdb.dts new file +7
-0+ pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_i2c2>; + status = "okay"; +}; + +&i2c3 { + clock-frequency = <100000>;
Ditto
arch/arm/boot/dts/imx7d-sdb.dts line 224
Quoted 7 lines
arch/arm/boot/dts/imx7d-sdb.dts new file +7
-0+ pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_i2c3>; + status = "okay"; +}; + +&i2c4 { + clock-frequency = <100000>;
Ditto
Quoted 6 lines
arch/arm/boot/dts/imx7d-sdb.dts new file +6
-0+ pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_i2c4>; + status = "okay"; + + codec: wm8960 at 1a { + compatible = "wlf,wm8960";
arch/arm/boot/dts/imx7d-sdb.dts line 240
Quoted 10 lines
arch/arm/boot/dts/imx7d-sdb.dts new file +10
-0+ reg = <0x1a>; + clocks = <&clks IMX7D_AUDIO_MCLK_ROOT_CLK>; + clock-names = "mclk"; + wlf,shared-lrclk; + }; +}; + +&iomuxc { + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_hog_1>;
The suffix "_1" makes no sense.
arch/arm/boot/dts/imx7d-sdb.dts line 243
Quoted 3 lines
arch/arm/boot/dts/imx7d-sdb.dts new file +3
-0+ + imx7d-sdb { + pinctrl_hog_1: hoggrp-1 {
pinctrl_hog: hoggrp
Quoted 21 lines
arch/arm/boot/dts/imx7d-sdb.dts new file +21
-0+ fsl,pins = < + MX7D_PAD_UART3_CTS_B__GPIO4_IO7 0x14 + MX7D_PAD_ECSPI2_SS0__GPIO4_IO23 0x34 /* bt reg on */ + >; + }; + + pinctrl_i2c1: i2c1grp { + fsl,pins = < + MX7D_PAD_I2C1_SDA__I2C1_SDA 0x4000007f + MX7D_PAD_I2C1_SCL__I2C1_SCL 0x4000007f + >; + }; + + pinctrl_i2c2: i2c2grp { + fsl,pins = < + MX7D_PAD_I2C2_SDA__I2C2_SDA 0x4000007f + MX7D_PAD_I2C2_SCL__I2C2_SCL 0x4000007f + >; + }; + + pinctrl_i2c3: i2c3grp {
arch/arm/boot/dts/imx7d-sdb.dts line 274
Quoted 10 lines
arch/arm/boot/dts/imx7d-sdb.dts new file +10
-0+ fsl,pins = < + MX7D_PAD_I2C3_SDA__I2C3_SDA 0x4000007f + MX7D_PAD_I2C3_SCL__I2C3_SCL 0x4000007f + >; + }; + + pinctrl_i2c4: i2c4grp { + fsl,pins = < + MX7D_PAD_SAI1_RX_BCLK__I2C4_SDA 0x4000007f + MX7D_PAD_SAI1_RX_SYNC__I2C4_SCL 0x4000007f
Please make the indentation of pad config value better aligned with other nodes.
Quoted 118 lines
arch/arm/boot/dts/imx7d-sdb.dts new file +118
-0+ >; + }; + + + pinctrl_uart1: uart1grp { + fsl,pins = < + MX7D_PAD_UART1_TX_DATA__UART1_DCE_TX 0x79 + MX7D_PAD_UART1_RX_DATA__UART1_DCE_RX 0x79 + >; + }; + + pinctrl_uart5: uart5grp { + fsl,pins = < + MX7D_PAD_SAI1_TX_BCLK__UART5_DCE_TX 0x79 + MX7D_PAD_SAI1_RX_DATA__UART5_DCE_RX 0x79 + MX7D_PAD_SAI1_TX_SYNC__UART5_DCE_CTS 0x79 + MX7D_PAD_SAI1_TX_DATA__UART5_DCE_RTS 0x79 + >; + }; + + pinctrl_uart6: uart6grp { + fsl,pins = < + MX7D_PAD_ECSPI1_MOSI__UART6_DCE_TX 0x79 + MX7D_PAD_ECSPI1_SCLK__UART6_DCE_RX 0x79 + MX7D_PAD_ECSPI1_SS0__UART6_DCE_CTS 0x79 + MX7D_PAD_ECSPI1_MISO__UART6_DCE_RTS 0x79 + >; + }; + + pinctrl_usdhc1: usdhc1grp { + fsl,pins = < + MX7D_PAD_SD1_CMD__SD1_CMD 0x59 + MX7D_PAD_SD1_CLK__SD1_CLK 0x19 + MX7D_PAD_SD1_DATA0__SD1_DATA0 0x59 + MX7D_PAD_SD1_DATA1__SD1_DATA1 0x59 + MX7D_PAD_SD1_DATA2__SD1_DATA2 0x59 + MX7D_PAD_SD1_DATA3__SD1_DATA3 0x59 + MX7D_PAD_SD1_CD_B__GPIO5_IO0 0x59 /* CD */ + MX7D_PAD_SD1_WP__GPIO5_IO1 0x59 /* WP */ + MX7D_PAD_SD1_RESET_B__GPIO5_IO2 0x59 /* vmmc */ + >; + }; + + pinctrl_usdhc2: usdhc2grp { + fsl,pins = < + MX7D_PAD_SD2_CMD__SD2_CMD 0x59 + MX7D_PAD_SD2_CLK__SD2_CLK 0x19 + MX7D_PAD_SD2_DATA0__SD2_DATA0 0x59 + MX7D_PAD_SD2_DATA1__SD2_DATA1 0x59 + MX7D_PAD_SD2_DATA2__SD2_DATA2 0x59 + MX7D_PAD_SD2_DATA3__SD2_DATA3 0x59 + MX7D_PAD_ECSPI2_MOSI__GPIO4_IO21 0x59 /* WL_REG_ON */ + >; + }; + + pinctrl_usdhc2_100mhz: usdhc2grp_100mhz { + fsl,pins = < + MX7D_PAD_SD2_CMD__SD2_CMD 0x5a + MX7D_PAD_SD2_CLK__SD2_CLK 0x1a + MX7D_PAD_SD2_DATA0__SD2_DATA0 0x5a + MX7D_PAD_SD2_DATA1__SD2_DATA1 0x5a + MX7D_PAD_SD2_DATA2__SD2_DATA2 0x5a + MX7D_PAD_SD2_DATA3__SD2_DATA3 0x5a + >; + }; + + pinctrl_usdhc2_200mhz: usdhc2grp_200mhz { + fsl,pins = < + MX7D_PAD_SD2_CMD__SD2_CMD 0x5b + MX7D_PAD_SD2_CLK__SD2_CLK 0x1b + MX7D_PAD_SD2_DATA0__SD2_DATA0 0x5b + MX7D_PAD_SD2_DATA1__SD2_DATA1 0x5b + MX7D_PAD_SD2_DATA2__SD2_DATA2 0x5b + MX7D_PAD_SD2_DATA3__SD2_DATA3 0x5b + >; + }; + + + pinctrl_usdhc3: usdhc3grp { + fsl,pins = < + MX7D_PAD_SD3_CMD__SD3_CMD 0x59 + MX7D_PAD_SD3_CLK__SD3_CLK 0x19 + MX7D_PAD_SD3_DATA0__SD3_DATA0 0x59 + MX7D_PAD_SD3_DATA1__SD3_DATA1 0x59 + MX7D_PAD_SD3_DATA2__SD3_DATA2 0x59 + MX7D_PAD_SD3_DATA3__SD3_DATA3 0x59 + MX7D_PAD_SD3_DATA4__SD3_DATA4 0x59 + MX7D_PAD_SD3_DATA5__SD3_DATA5 0x59 + MX7D_PAD_SD3_DATA6__SD3_DATA6 0x59 + MX7D_PAD_SD3_DATA7__SD3_DATA7 0x59 + MX7D_PAD_SD3_STROBE__SD3_STROBE 0x19 + >; + }; + + pinctrl_usdhc3_100mhz: usdhc3grp_100mhz { + fsl,pins = < + MX7D_PAD_SD3_CMD__SD3_CMD 0x5a + MX7D_PAD_SD3_CLK__SD3_CLK 0x1a + MX7D_PAD_SD3_DATA0__SD3_DATA0 0x5a + MX7D_PAD_SD3_DATA1__SD3_DATA1 0x5a + MX7D_PAD_SD3_DATA2__SD3_DATA2 0x5a + MX7D_PAD_SD3_DATA3__SD3_DATA3 0x5a + MX7D_PAD_SD3_DATA4__SD3_DATA4 0x5a + MX7D_PAD_SD3_DATA5__SD3_DATA5 0x5a + MX7D_PAD_SD3_DATA6__SD3_DATA6 0x5a + MX7D_PAD_SD3_DATA7__SD3_DATA7 0x5a + MX7D_PAD_SD3_STROBE__SD3_STROBE 0x1a + >; + }; + + pinctrl_usdhc3_200mhz: usdhc3grp_200mhz { + fsl,pins = < + MX7D_PAD_SD3_CMD__SD3_CMD 0x5b + MX7D_PAD_SD3_CLK__SD3_CLK 0x1b + MX7D_PAD_SD3_DATA0__SD3_DATA0 0x5b + MX7D_PAD_SD3_DATA1__SD3_DATA1 0x5b + MX7D_PAD_SD3_DATA2__SD3_DATA2 0x5b + MX7D_PAD_SD3_DATA3__SD3_DATA3 0x5b
arch/arm/boot/dts/imx7d-sdb.dts line 402
Quoted 10 lines
arch/arm/boot/dts/imx7d-sdb.dts new file +10
-0+ MX7D_PAD_SD3_DATA4__SD3_DATA4 0x5b + MX7D_PAD_SD3_DATA5__SD3_DATA5 0x5b + MX7D_PAD_SD3_DATA6__SD3_DATA6 0x5b + MX7D_PAD_SD3_DATA7__SD3_DATA7 0x5b + MX7D_PAD_SD3_STROBE__SD3_STROBE 0x1b + >; + }; + + }; +};
I suggest to put iomuxc at the bottom of the file to make it easier to read, as iomuxc node will have quite a lot of pin configuration data, which makes searching of particular device data a bit harder.
Shawn
Quoted 21 lines
arch/arm/boot/dts/imx7d-sdb.dts new file +18
-0+ +&uart1 { + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_uart1>; + assigned-clocks = <&clks IMX7D_UART1_ROOT_SRC>; + assigned-clock-parents = <&clks IMX7D_PLL_SYS_MAIN_240M_CLK>; + status = "okay"; +}; + +&usdhc1 { + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_usdhc1>; + cd-gpios = <&gpio5 0 0>; + wp-gpios = <&gpio5 1 0>; + enable-sdio-wakeup; + keep-power-in-suspend; + status = "okay"; +};Signature · 1 line
1.9.1
PATCH v8 6/6 ARM: config: imx_v6_v7_defconfig add imx7d support
In reply to Frank.Li at freescale.comFrom: Frank Li <[email protected]>
Add imx7d support
--- arch/arm/configs/imx_v6_v7_defconfig | 1 + 1 file changed, 1 insertion(+)
arch/arm/configs/imx_v6_v7_defconfig +1 -0
@@ -38,6 +38,7 @@ CONFIG_SOC_IMX53=y CONFIG_SOC_IMX6Q=y CONFIG_SOC_IMX6SL=y CONFIG_SOC_IMX6SX=y +CONFIG_SOC_IMX7D=y CONFIG_SOC_VF610=y CONFIG_PCI=y CONFIG_PCI_IMX6=y
Signature · 1 line
1.9.1
Shawn Guo
AppliedPATCH v8 6/6 ARM: config: imx_v6_v7_defconfig add imx7d support
Quoted 5 lines · Frank.Li at freescale.com
From: Frank Li <[email protected]>
Add imx7d support
Signed-off-by Frank Li <[email protected]>
Applied, thanks.