Migrate CONFIG_ARCH_USE_MEMSET/MEMCPY with this merge. Signed-off-by: Tom Rini <trini@konsulko.com>master
commit
8ea05705a7
@ -0,0 +1,190 @@ |
||||
/* |
||||
* Copyright 2016 Beckhoff Automation |
||||
* Copyright 2011 Freescale Semiconductor, Inc. |
||||
* Copyright 2011 Linaro Ltd. |
||||
* |
||||
* SPDX-License-Identifier: GPL-2.0+ or X11 |
||||
*/ |
||||
|
||||
/dts-v1/; |
||||
#include "imx53.dtsi" |
||||
|
||||
#define MX53_PAD_EIM_D26__UART2_RXD_MUX 0x144 0x48c 0x880 0x2 0x0 |
||||
#define MX53_PAD_EIM_D27__UART2_TXD_MUX 0x148 0x490 0x000 0x2 0x0 |
||||
#define MX53_PAD_EIM_D28__UART2_RTS 0x14c 0x494 0x87c 0x2 0x0 |
||||
#define MX53_PAD_EIM_D29__UART2_CTS 0x150 0x498 0x000 0x2 0x0 |
||||
|
||||
/ { |
||||
model = "Beckhoff CX9020-0100 i.MX53"; |
||||
compatible = "fsl,imx53-qsb", "fsl,imx53"; |
||||
|
||||
chosen { |
||||
stdout-path = &uart2; |
||||
}; |
||||
}; |
||||
|
||||
&iomuxc { |
||||
pinctrl-names = "default"; |
||||
pinctrl-0 = <&pinctrl_hog>; |
||||
|
||||
imx53-qsb { |
||||
pinctrl_hog: hoggrp { |
||||
fsl,pins = < |
||||
MX53_PAD_GPIO_0__CCM_SSI_EXT1_CLK 0x80000000 |
||||
MX53_PAD_GPIO_8__GPIO1_8 0x80000000 |
||||
MX53_PAD_PATA_DATA14__GPIO2_14 0x80000000 |
||||
MX53_PAD_PATA_DATA15__GPIO2_15 0x80000000 |
||||
MX53_PAD_GPIO_1__GPIO1_1 0x80000000 |
||||
MX53_PAD_GPIO_4__GPIO1_4 0x80000000 |
||||
MX53_PAD_PATA_DA_0__GPIO7_6 0x80000000 |
||||
MX53_PAD_PATA_DA_2__GPIO7_8 0x80000000 |
||||
MX53_PAD_GPIO_16__GPIO7_11 0x80000000 |
||||
|
||||
MX53_PAD_EIM_OE__EMI_WEIM_OE 0x80000000 |
||||
MX53_PAD_EIM_WAIT__EMI_WEIM_WAIT 0x80000000 |
||||
MX53_PAD_EIM_LBA__EMI_WEIM_LBA 0x80000000 |
||||
MX53_PAD_EIM_RW__EMI_WEIM_RW 0x80000000 |
||||
MX53_PAD_EIM_EB0__EMI_WEIM_EB_0 0x80000000 |
||||
MX53_PAD_EIM_EB1__EMI_WEIM_EB_1 0x80000000 |
||||
MX53_PAD_EIM_EB2__EMI_WEIM_EB_2 0x80000000 |
||||
MX53_PAD_EIM_EB3__EMI_WEIM_EB_3 0x80000000 |
||||
MX53_PAD_EIM_CS0__EMI_WEIM_CS_0 0x80000000 |
||||
MX53_PAD_EIM_CS1__EMI_WEIM_CS_1 0x80000000 |
||||
MX53_PAD_EIM_A16__EMI_WEIM_A_16 0x80000000 |
||||
MX53_PAD_EIM_A17__EMI_WEIM_A_17 0x80000000 |
||||
MX53_PAD_EIM_A18__EMI_WEIM_A_18 0x80000000 |
||||
MX53_PAD_EIM_A19__EMI_WEIM_A_19 0x80000000 |
||||
MX53_PAD_EIM_A20__EMI_WEIM_A_20 0x80000000 |
||||
MX53_PAD_EIM_A21__EMI_WEIM_A_21 0x80000000 |
||||
MX53_PAD_EIM_A22__EMI_WEIM_A_22 0x80000000 |
||||
MX53_PAD_EIM_DA0__EMI_NAND_WEIM_DA_0 0xa4 |
||||
MX53_PAD_EIM_DA1__EMI_NAND_WEIM_DA_1 0xa4 |
||||
MX53_PAD_EIM_DA2__EMI_NAND_WEIM_DA_2 0xa4 |
||||
MX53_PAD_EIM_DA3__EMI_NAND_WEIM_DA_3 0xa4 |
||||
MX53_PAD_EIM_DA4__EMI_NAND_WEIM_DA_4 0xa4 |
||||
MX53_PAD_EIM_DA5__EMI_NAND_WEIM_DA_5 0xa4 |
||||
MX53_PAD_EIM_DA6__EMI_NAND_WEIM_DA_6 0xa4 |
||||
MX53_PAD_EIM_DA7__EMI_NAND_WEIM_DA_7 0xa4 |
||||
MX53_PAD_EIM_DA8__EMI_NAND_WEIM_DA_8 0xa4 |
||||
MX53_PAD_EIM_DA9__EMI_NAND_WEIM_DA_9 0xa4 |
||||
MX53_PAD_EIM_DA10__EMI_NAND_WEIM_DA_10 0xa4 |
||||
MX53_PAD_EIM_DA11__EMI_NAND_WEIM_DA_11 0xa4 |
||||
MX53_PAD_EIM_DA12__EMI_NAND_WEIM_DA_12 0xa4 |
||||
MX53_PAD_EIM_DA13__EMI_NAND_WEIM_DA_13 0xa4 |
||||
MX53_PAD_EIM_DA14__EMI_NAND_WEIM_DA_14 0xa4 |
||||
MX53_PAD_EIM_DA15__EMI_NAND_WEIM_DA_15 0xa4 |
||||
MX53_PAD_PATA_DATA0__EMI_NANDF_D_0 0xa4 |
||||
MX53_PAD_PATA_DATA1__EMI_NANDF_D_1 0xa4 |
||||
MX53_PAD_PATA_DATA2__EMI_NANDF_D_2 0xa4 |
||||
MX53_PAD_PATA_DATA3__EMI_NANDF_D_3 0xa4 |
||||
MX53_PAD_PATA_DATA4__EMI_NANDF_D_4 0xa4 |
||||
MX53_PAD_PATA_DATA5__EMI_NANDF_D_5 0xa4 |
||||
MX53_PAD_PATA_DATA6__EMI_NANDF_D_6 0xa4 |
||||
MX53_PAD_PATA_DATA7__EMI_NANDF_D_7 0xa4 |
||||
MX53_PAD_PATA_DATA8__EMI_NANDF_D_8 0xa4 |
||||
MX53_PAD_PATA_DATA9__EMI_NANDF_D_9 0xa4 |
||||
MX53_PAD_PATA_DATA10__EMI_NANDF_D_10 0xa4 |
||||
MX53_PAD_PATA_DATA11__EMI_NANDF_D_11 0xa4 |
||||
MX53_PAD_PATA_DATA12__EMI_NANDF_D_12 0xa4 |
||||
MX53_PAD_PATA_DATA13__EMI_NANDF_D_13 0xa4 |
||||
MX53_PAD_PATA_DATA14__EMI_NANDF_D_14 0xa4 |
||||
MX53_PAD_PATA_DATA15__EMI_NANDF_D_15 0xa4 |
||||
MX53_PAD_NANDF_CLE__GPIO6_7 0x00000001 |
||||
MX53_PAD_NANDF_WP_B__GPIO6_9 0x00000001 |
||||
MX53_PAD_NANDF_ALE__GPIO6_8 0x00000001 |
||||
|
||||
MX53_PAD_EIM_D23__GPIO3_23 0x80000000 |
||||
|
||||
MX53_PAD_KEY_COL0__AUDMUX_AUD5_TXC 0x80000000 |
||||
MX53_PAD_KEY_ROW0__AUDMUX_AUD5_TXD 0x80000000 |
||||
MX53_PAD_KEY_COL1__AUDMUX_AUD5_TXFS 0x80000000 |
||||
MX53_PAD_KEY_ROW1__AUDMUX_AUD5_RXD 0x80000000 |
||||
|
||||
MX53_PAD_SD1_DATA0__ESDHC1_DAT0 0x1d5 |
||||
MX53_PAD_SD1_DATA1__ESDHC1_DAT1 0x1d5 |
||||
MX53_PAD_SD1_DATA2__ESDHC1_DAT2 0x1d5 |
||||
MX53_PAD_SD1_DATA3__ESDHC1_DAT3 0x1d5 |
||||
MX53_PAD_SD1_CMD__ESDHC1_CMD 0x1d5 |
||||
MX53_PAD_SD1_CLK__ESDHC1_CLK 0x1d5 |
||||
|
||||
MX53_PAD_SD2_DATA0__ESDHC2_DAT0 0x1d5 |
||||
MX53_PAD_SD2_DATA1__ESDHC2_DAT1 0x1d5 |
||||
MX53_PAD_SD2_DATA2__ESDHC2_DAT2 0x1d5 |
||||
MX53_PAD_SD2_DATA3__ESDHC2_DAT3 0x1d5 |
||||
MX53_PAD_SD2_CMD__ESDHC2_CMD 0x1d5 |
||||
MX53_PAD_SD2_CLK__ESDHC2_CLK 0x1d5 |
||||
|
||||
MX53_PAD_FEC_MDC__FEC_MDC 0x80000000 |
||||
MX53_PAD_FEC_MDIO__FEC_MDIO 0x80000000 |
||||
MX53_PAD_FEC_REF_CLK__FEC_TX_CLK 0x80000000 |
||||
MX53_PAD_FEC_RX_ER__FEC_RX_ER 0x80000000 |
||||
MX53_PAD_FEC_CRS_DV__FEC_RX_DV 0x80000000 |
||||
MX53_PAD_FEC_RXD1__FEC_RDATA_1 0x80000000 |
||||
MX53_PAD_FEC_RXD0__FEC_RDATA_0 0x80000000 |
||||
MX53_PAD_FEC_TX_EN__FEC_TX_EN 0x80000000 |
||||
MX53_PAD_FEC_TXD1__FEC_TDATA_1 0x80000000 |
||||
MX53_PAD_FEC_TXD0__FEC_TDATA_0 0x80000000 |
||||
|
||||
MX53_PAD_CSI0_DAT8__I2C1_SDA 0x400001ec |
||||
MX53_PAD_CSI0_DAT9__I2C1_SCL 0x400001ec |
||||
|
||||
MX53_PAD_KEY_ROW3__I2C2_SDA 0xc0000000 |
||||
MX53_PAD_KEY_COL3__I2C2_SCL 0xc0000000 |
||||
|
||||
MX53_PAD_DI0_DISP_CLK__IPU_DI0_DISP_CLK 0x5 |
||||
MX53_PAD_DI0_PIN15__IPU_DI0_PIN15 0x5 |
||||
MX53_PAD_DI0_PIN2__IPU_DI0_PIN2 0x5 |
||||
MX53_PAD_DI0_PIN3__IPU_DI0_PIN3 0x5 |
||||
MX53_PAD_DI0_PIN4__IPU_DI0_PIN4 0x5 |
||||
MX53_PAD_DISP0_DAT0__IPU_DISP0_DAT_0 0x5 |
||||
MX53_PAD_DISP0_DAT1__IPU_DISP0_DAT_1 0x5 |
||||
MX53_PAD_DISP0_DAT2__IPU_DISP0_DAT_2 0x5 |
||||
MX53_PAD_DISP0_DAT3__IPU_DISP0_DAT_3 0x5 |
||||
MX53_PAD_DISP0_DAT4__IPU_DISP0_DAT_4 0x5 |
||||
MX53_PAD_DISP0_DAT5__IPU_DISP0_DAT_5 0x5 |
||||
MX53_PAD_DISP0_DAT6__IPU_DISP0_DAT_6 0x5 |
||||
MX53_PAD_DISP0_DAT7__IPU_DISP0_DAT_7 0x5 |
||||
MX53_PAD_DISP0_DAT8__IPU_DISP0_DAT_8 0x5 |
||||
MX53_PAD_DISP0_DAT9__IPU_DISP0_DAT_9 0x5 |
||||
MX53_PAD_DISP0_DAT10__IPU_DISP0_DAT_10 0x5 |
||||
MX53_PAD_DISP0_DAT11__IPU_DISP0_DAT_11 0x5 |
||||
MX53_PAD_DISP0_DAT12__IPU_DISP0_DAT_12 0x5 |
||||
MX53_PAD_DISP0_DAT13__IPU_DISP0_DAT_13 0x5 |
||||
MX53_PAD_DISP0_DAT14__IPU_DISP0_DAT_14 0x5 |
||||
MX53_PAD_DISP0_DAT15__IPU_DISP0_DAT_15 0x5 |
||||
MX53_PAD_DISP0_DAT16__IPU_DISP0_DAT_16 0x5 |
||||
MX53_PAD_DISP0_DAT17__IPU_DISP0_DAT_17 0x5 |
||||
MX53_PAD_DISP0_DAT18__IPU_DISP0_DAT_18 0x5 |
||||
MX53_PAD_DISP0_DAT19__IPU_DISP0_DAT_19 0x5 |
||||
MX53_PAD_DISP0_DAT20__IPU_DISP0_DAT_20 0x5 |
||||
MX53_PAD_DISP0_DAT21__IPU_DISP0_DAT_21 0x5 |
||||
MX53_PAD_DISP0_DAT22__IPU_DISP0_DAT_22 0x5 |
||||
MX53_PAD_DISP0_DAT23__IPU_DISP0_DAT_23 0x5 |
||||
>; |
||||
}; |
||||
|
||||
pinctrl_uart2: uart2grp { |
||||
fsl,pins = < |
||||
MX53_PAD_EIM_D26__UART2_RXD_MUX 0x1e4 |
||||
MX53_PAD_EIM_D27__UART2_TXD_MUX 0x1e4 |
||||
MX53_PAD_EIM_D28__UART2_RTS 0x1e4 |
||||
MX53_PAD_EIM_D29__UART2_CTS 0x1e4 |
||||
>; |
||||
}; |
||||
}; |
||||
}; |
||||
|
||||
&uart2 { |
||||
pinctrl-names = "default"; |
||||
uart-has-rtscts; |
||||
fsl,dte-mode; |
||||
pinctrl-0 = <&pinctrl_uart2>; |
||||
status = "okay"; |
||||
}; |
||||
|
||||
&fec { |
||||
pinctrl-names = "default"; |
||||
phy-mode = "rmii"; |
||||
phy-reset-gpios = <&gpio7 6 0>; |
||||
status = "okay"; |
||||
}; |
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,110 @@ |
||||
/* |
||||
* Copyright 2016 Beckhoff Automation |
||||
* Copyright 2011 Freescale Semiconductor, Inc. |
||||
* Copyright 2011 Linaro Ltd. |
||||
* |
||||
* 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 "skeleton.dtsi" |
||||
#include "imx53-pinfunc.h" |
||||
#include <dt-bindings/clock/imx5-clock.h> |
||||
#include <dt-bindings/gpio/gpio.h> |
||||
#include <dt-bindings/input/input.h> |
||||
#include <dt-bindings/interrupt-controller/irq.h> |
||||
|
||||
/ { |
||||
aliases { |
||||
serial1 = &uart2; |
||||
}; |
||||
|
||||
soc { |
||||
#address-cells = <1>; |
||||
#size-cells = <1>; |
||||
compatible = "simple-bus"; |
||||
ranges; |
||||
|
||||
aips@50000000 { /* AIPS1 */ |
||||
compatible = "fsl,aips-bus", "simple-bus"; |
||||
#address-cells = <1>; |
||||
#size-cells = <1>; |
||||
reg = <0x50000000 0x10000000>; |
||||
ranges; |
||||
|
||||
iomuxc: iomuxc@53fa8000 { |
||||
compatible = "fsl,imx53-iomuxc"; |
||||
reg = <0x53fa8000 0x4000>; |
||||
}; |
||||
|
||||
gpr: iomuxc-gpr@53fa8000 { |
||||
compatible = "fsl,imx53-iomuxc-gpr", "syscon"; |
||||
reg = <0x53fa8000 0xc>; |
||||
}; |
||||
|
||||
uart2: serial@53fc0000 { |
||||
compatible = "fsl,imx7d-uart", "fsl,imx53-uart", "fsl,imx21-uart"; |
||||
reg = <0x53fc0000 0x4000>; |
||||
interrupts = <32>; |
||||
clocks = <&clks IMX5_CLK_UART2_IPG_GATE>, |
||||
<&clks IMX5_CLK_UART2_PER_GATE>; |
||||
clock-names = "ipg", "per"; |
||||
dmas = <&sdma 12 4 0>, <&sdma 13 4 0>; |
||||
dma-names = "rx", "tx"; |
||||
status = "disabled"; |
||||
}; |
||||
|
||||
clks: ccm@53fd4000{ |
||||
compatible = "fsl,imx53-ccm"; |
||||
reg = <0x53fd4000 0x4000>; |
||||
interrupts = <0 71 0x04 0 72 0x04>; |
||||
#clock-cells = <1>; |
||||
}; |
||||
|
||||
gpio7: gpio@53fe4000 { |
||||
compatible = "fsl,imx53-gpio", "fsl,imx35-gpio"; |
||||
reg = <0x53fe4000 0x4000>; |
||||
interrupts = <107 108>; |
||||
gpio-controller; |
||||
#gpio-cells = <2>; |
||||
interrupt-controller; |
||||
#interrupt-cells = <2>; |
||||
}; |
||||
}; |
||||
|
||||
aips@60000000 { /* AIPS2 */ |
||||
compatible = "fsl,aips-bus", "simple-bus"; |
||||
#address-cells = <1>; |
||||
#size-cells = <1>; |
||||
reg = <0x60000000 0x10000000>; |
||||
ranges; |
||||
|
||||
sdma: sdma@63fb0000 { |
||||
compatible = "fsl,imx53-sdma", "fsl,imx35-sdma"; |
||||
reg = <0x63fb0000 0x4000>; |
||||
interrupts = <6>; |
||||
clocks = <&clks IMX5_CLK_SDMA_GATE>, |
||||
<&clks IMX5_CLK_SDMA_GATE>; |
||||
clock-names = "ipg", "ahb"; |
||||
#dma-cells = <3>; |
||||
fsl,sdma-ram-script-name = "imx/sdma/sdma-imx53.bin"; |
||||
}; |
||||
|
||||
|
||||
fec: ethernet@63fec000 { |
||||
compatible = "fsl,imx53-fec", "fsl,imx25-fec"; |
||||
reg = <0x63fec000 0x4000>; |
||||
interrupts = <87>; |
||||
clocks = <&clks IMX5_CLK_FEC_GATE>, |
||||
<&clks IMX5_CLK_FEC_GATE>, |
||||
<&clks IMX5_CLK_FEC_GATE>; |
||||
clock-names = "ipg", "ahb", "ptp"; |
||||
status = "disabled"; |
||||
}; |
||||
}; |
||||
}; |
||||
}; |
@ -0,0 +1,50 @@ |
||||
/* |
||||
* Copyright (C) 2015 Amarula Solutions B.V. |
||||
* |
||||
* 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 |
||||
* version 2 as published by the Free Software Foundation. |
||||
* |
||||
* 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 , 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. |
||||
*/ |
||||
|
||||
/dts-v1/; |
||||
|
||||
#include "imx6q.dtsi" |
||||
#include "imx6qdl-icore-rqs.dtsi" |
||||
|
||||
/ { |
||||
model = "Engicam i.CoreM6 DualLite/Solo RQS Starter Kit"; |
||||
compatible = "engicam,imx6-icore-rqs", "fsl,imx6q"; |
||||
}; |
@ -0,0 +1,50 @@ |
||||
/* |
||||
* Copyright (C) 2015 Amarula Solutions B.V. |
||||
* |
||||
* 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 |
||||
* version 2 as published by the Free Software Foundation. |
||||
* |
||||
* 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 , 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. |
||||
*/ |
||||
|
||||
/dts-v1/; |
||||
|
||||
#include "imx6q.dtsi" |
||||
#include "imx6qdl-icore-rqs.dtsi" |
||||
|
||||
/ { |
||||
model = "Engicam i.CoreM6 Quad/Dual RQS Starter Kit"; |
||||
compatible = "engicam,imx6-icore-rqs", "fsl,imx6q"; |
||||
}; |
@ -0,0 +1,170 @@ |
||||
/* |
||||
* Copyright (C) 2015 Amarula Solutions B.V. |
||||
* |
||||
* 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 |
||||
* version 2 as published by the Free Software Foundation. |
||||
* |
||||
* 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 , 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/gpio/gpio.h> |
||||
#include <dt-bindings/clock/imx6qdl-clock.h> |
||||
|
||||
/ { |
||||
memory { |
||||
reg = <0x10000000 0x80000000>; |
||||
}; |
||||
}; |
||||
|
||||
&fec { |
||||
pinctrl-names = "default"; |
||||
pinctrl-0 = <&pinctrl_enet>; |
||||
phy-handle = <ð_phy>; |
||||
phy-mode = "rgmii"; |
||||
status = "okay"; |
||||
|
||||
mdio { |
||||
eth_phy: ethernet-phy { |
||||
rxc-skew-ps = <1140>; |
||||
txc-skew-ps = <1140>; |
||||
txen-skew-ps = <600>; |
||||
rxdv-skew-ps = <240>; |
||||
rxd0-skew-ps = <420>; |
||||
rxd1-skew-ps = <600>; |
||||
rxd2-skew-ps = <420>; |
||||
rxd3-skew-ps = <240>; |
||||
txd0-skew-ps = <60>; |
||||
txd1-skew-ps = <60>; |
||||
txd2-skew-ps = <60>; |
||||
txd3-skew-ps = <240>; |
||||
}; |
||||
}; |
||||
}; |
||||
|
||||
&i2c1 { |
||||
clock-frequency = <100000>; |
||||
pinctrl-names = "default"; |
||||
pinctrl-0 = <&pinctrl_i2c1>; |
||||
status = "okay"; |
||||
}; |
||||
|
||||
&i2c2 { |
||||
clock-frequency = <100000>; |
||||
pinctrl-names = "default"; |
||||
pinctrl-0 = <&pinctrl_i2c2>; |
||||
status = "okay"; |
||||
}; |
||||
|
||||
&i2c3 { |
||||
pinctrl-names = "default"; |
||||
pinctrl-0 = <&pinctrl_i2c3>; |
||||
status = "okay"; |
||||
}; |
||||
|
||||
&uart4 { |
||||
pinctrl-names = "default"; |
||||
pinctrl-0 = <&pinctrl_uart4>; |
||||
status = "okay"; |
||||
}; |
||||
|
||||
&usdhc3 { |
||||
pinctrl-names = "default"; |
||||
pinctrl-0 = <&pinctrl_usdhc3>; |
||||
cd-gpios = <&gpio1 1 GPIO_ACTIVE_LOW>; |
||||
no-1-8-v; |
||||
status = "okay"; |
||||
}; |
||||
|
||||
&iomuxc { |
||||
pinctrl_enet: enetgrp { |
||||
fsl,pins = < |
||||
MX6QDL_PAD_ENET_MDIO__ENET_MDIO 0x1b0b0 |
||||
MX6QDL_PAD_ENET_MDC__ENET_MDC 0x1b0b0 |
||||
MX6QDL_PAD_RGMII_TXC__RGMII_TXC 0x1b030 |
||||
MX6QDL_PAD_RGMII_TD0__RGMII_TD0 0x1b030 |
||||
MX6QDL_PAD_RGMII_TD1__RGMII_TD1 0x1b030 |
||||
MX6QDL_PAD_RGMII_TD2__RGMII_TD2 0x1b030 |
||||
MX6QDL_PAD_RGMII_TD3__RGMII_TD3 0x1b030 |
||||
MX6QDL_PAD_RGMII_TX_CTL__RGMII_TX_CTL 0x1b030 |
||||
MX6QDL_PAD_ENET_REF_CLK__ENET_TX_CLK 0x1b0b0 |
||||
MX6QDL_PAD_RGMII_RXC__RGMII_RXC 0x1b030 |
||||
MX6QDL_PAD_RGMII_RD0__RGMII_RD0 0x1b030 |
||||
MX6QDL_PAD_RGMII_RD1__RGMII_RD1 0x1b030 |
||||
MX6QDL_PAD_RGMII_RD2__RGMII_RD2 0x1b030 |
||||
MX6QDL_PAD_RGMII_RD3__RGMII_RD3 0x1b030 |
||||
MX6QDL_PAD_RGMII_RX_CTL__RGMII_RX_CTL 0x1b030 |
||||
MX6QDL_PAD_ENET_TX_EN__ENET_TX_EN 0x1b0b0 |
||||
>; |
||||
}; |
||||
|
||||
pinctrl_i2c1: i2c1grp { |
||||
fsl,pins = < |
||||
MX6QDL_PAD_EIM_D21__I2C1_SCL 0x4001b8b1 |
||||
MX6QDL_PAD_EIM_D28__I2C1_SDA 0x4001b8b1 |
||||
>; |
||||
}; |
||||
|
||||
pinctrl_i2c2: i2c2grp { |
||||
fsl,pins = < |
||||
MX6QDL_PAD_KEY_COL3__I2C2_SCL 0x4001b8b1 |
||||
MX6QDL_PAD_KEY_ROW3__I2C2_SDA 0x4001b8b1 |
||||
>; |
||||
}; |
||||
|
||||
pinctrl_i2c3: i2c3grp { |
||||
fsl,pins = < |
||||
MX6QDL_PAD_GPIO_5__I2C3_SCL 0x4001b8b1 |
||||
MX6QDL_PAD_EIM_D18__I2C3_SDA 0x4001b8b1 |
||||
>; |
||||
}; |
||||
|
||||
pinctrl_uart4: uart4grp { |
||||
fsl,pins = < |
||||
MX6QDL_PAD_KEY_COL0__UART4_TX_DATA 0x1b0b1 |
||||
MX6QDL_PAD_KEY_ROW0__UART4_RX_DATA 0x1b0b1 |
||||
>; |
||||
}; |
||||
|
||||
pinctrl_usdhc3: usdhc3grp { |
||||
fsl,pins = < |
||||
MX6QDL_PAD_SD3_CMD__SD3_CMD 0x17070 |
||||
MX6QDL_PAD_SD3_CLK__SD3_CLK 0x10070 |
||||
MX6QDL_PAD_SD3_DAT0__SD3_DATA0 0x17070 |
||||
MX6QDL_PAD_SD3_DAT1__SD3_DATA1 0x17070 |
||||
MX6QDL_PAD_SD3_DAT2__SD3_DATA2 0x17070 |
||||
MX6QDL_PAD_SD3_DAT3__SD3_DATA3 0x17070 |
||||
>; |
||||
}; |
||||
}; |
@ -0,0 +1,801 @@ |
||||
/* |
||||
* Copyright (C) 2016 Freescale Semiconductor, Inc. |
||||
* |
||||
* This program is free software; you can redistribute it and/or modify |
||||
* it under the terms of the GNU General Public License version 2 as |
||||
* published by the Free Software Foundation. |
||||
*/ |
||||
|
||||
/dts-v1/; |
||||
|
||||
#include <dt-bindings/gpio/gpio.h> |
||||
#include <dt-bindings/input/input.h> |
||||
#include "imx6sll.dtsi" |
||||
|
||||
/ { |
||||
model = "Freescale i.MX6SLL EVK Board"; |
||||
compatible = "fsl,imx6sll-evk", "fsl,imx6sll"; |
||||
|
||||
memory { |
||||
reg = <0x80000000 0x80000000>; |
||||
}; |
||||
|
||||
backlight { |
||||
compatible = "pwm-backlight"; |
||||
pwms = <&pwm1 0 5000000>; |
||||
brightness-levels = <0 4 8 16 32 64 128 255>; |
||||
default-brightness-level = <6>; |
||||
status = "okay"; |
||||
}; |
||||
|
||||
battery: max8903@0 { |
||||
compatible = "fsl,max8903-charger"; |
||||
pinctrl-names = "default"; |
||||
dok_input = <&gpio4 13 1>; |
||||
uok_input = <&gpio4 13 1>; |
||||
chg_input = <&gpio4 15 1>; |
||||
flt_input = <&gpio4 14 1>; |
||||
fsl,dcm_always_high; |
||||
fsl,dc_valid; |
||||
fsl,adc_disable; |
||||
status = "okay"; |
||||
}; |
||||
|
||||
pxp_v4l2_out { |
||||
compatible = "fsl,imx6sl-pxp-v4l2"; |
||||
status = "okay"; |
||||
}; |
||||
|
||||
regulators { |
||||
compatible = "simple-bus"; |
||||
#address-cells = <1>; |
||||
#size-cells = <0>; |
||||
|
||||
reg_usb_otg1_vbus: regulator@0 { |
||||
compatible = "regulator-fixed"; |
||||
reg = <0>; |
||||
regulator-name = "usb_otg1_vbus"; |
||||
regulator-min-microvolt = <5000000>; |
||||
regulator-max-microvolt = <5000000>; |
||||
gpio = <&gpio4 0 GPIO_ACTIVE_HIGH>; |
||||
enable-active-high; |
||||
}; |
||||
|
||||
reg_usb_otg2_vbus: regulator@1 { |
||||
compatible = "regulator-fixed"; |
||||
reg = <1>; |
||||
regulator-name = "usb_otg2_vbus"; |
||||
regulator-min-microvolt = <5000000>; |
||||
regulator-max-microvolt = <5000000>; |
||||
gpio = <&gpio4 2 GPIO_ACTIVE_HIGH>; |
||||
enable-active-high; |
||||
}; |
||||
|
||||
reg_aud3v: regulator@2 { |
||||
compatible = "regulator-fixed"; |
||||
reg = <2>; |
||||
regulator-name = "wm8962-supply-3v15"; |
||||
regulator-min-microvolt = <3150000>; |
||||
regulator-max-microvolt = <3150000>; |
||||
regulator-boot-on; |
||||
}; |
||||
|
||||
reg_aud4v: regulator@3 { |
||||
compatible = "regulator-fixed"; |
||||
reg = <3>; |
||||
regulator-name = "wm8962-supply-4v2"; |
||||
regulator-min-microvolt = <4325000>; |
||||
regulator-max-microvolt = <4325000>; |
||||
regulator-boot-on; |
||||
}; |
||||
|
||||
reg_lcd: regulator@4 { |
||||
compatible = "regulator-fixed"; |
||||
reg = <4>; |
||||
regulator-name = "lcd-pwr"; |
||||
gpio = <&gpio4 8 0>; |
||||
enable-active-high; |
||||
}; |
||||
|
||||
reg_sd1_vmmc: sd1_vmmc { |
||||
compatible = "regulator-fixed"; |
||||
regulator-name = "SD1_SPWR"; |
||||
regulator-min-microvolt = <3000000>; |
||||
regulator-max-microvolt = <3000000>; |
||||
gpio = <&gpio3 30 GPIO_ACTIVE_HIGH>; |
||||
enable-active-high; |
||||
}; |
||||
|
||||
reg_sd2_vmmc: sd2_vmmc { |
||||
compatible = "regulator-fixed"; |
||||
regulator-name = "eMMC-VCCQ"; |
||||
regulator-min-microvolt = <1800000>; |
||||
regulator-max-microvolt = <1800000>; |
||||
regulator-boot-on; |
||||
}; |
||||
|
||||
reg_sd3_vmmc: sd3_vmmc { |
||||
compatible = "regulator-fixed"; |
||||
regulator-name = "SD3_WIFI"; |
||||
regulator-min-microvolt = <3000000>; |
||||
regulator-max-microvolt = <3000000>; |
||||
gpio = <&gpio4 4 GPIO_ACTIVE_HIGH>; |
||||
enable-active-high; |
||||
}; |
||||
|
||||
}; |
||||
|
||||
sound { |
||||
compatible = "fsl,imx6sl-evk-wm8962", "fsl,imx-audio-wm8962"; |
||||
model = "wm8962-audio"; |
||||
cpu-dai = <&ssi2>; |
||||
audio-codec = <&codec>; |
||||
audio-routing = |
||||
"Headphone Jack", "HPOUTL", |
||||
"Headphone Jack", "HPOUTR", |
||||
"Ext Spk", "SPKOUTL", |
||||
"Ext Spk", "SPKOUTR", |
||||
"AMIC", "MICBIAS", |
||||
"IN3R", "AMIC"; |
||||
mux-int-port = <2>; |
||||
mux-ext-port = <3>; |
||||
codec-master; |
||||
hp-det-gpios = <&gpio4 24 1>; |
||||
}; |
||||
}; |
||||
|
||||
&audmux { |
||||
pinctrl-names = "default"; |
||||
pinctrl-0 = <&pinctrl_audmux3>; |
||||
status = "okay"; |
||||
}; |
||||
|
||||
&clks { |
||||
assigned-clocks = <&clks IMX6SLL_CLK_PLL4_AUDIO_DIV>; |
||||
assigned-clock-rates = <393216000>; |
||||
}; |
||||
|
||||
&cpu0 { |
||||
arm-supply = <&sw1a_reg>; |
||||
soc-supply = <&sw1c_reg>; |
||||
}; |
||||
|
||||
&i2c1 { |
||||
clock-frequency = <100000>; |
||||
pinctrl-names = "default"; |
||||
pinctrl-0 = <&pinctrl_i2c1>; |
||||
status = "okay"; |
||||
|
||||
pmic: pfuze100@08 { |
||||
compatible = "fsl,pfuze100"; |
||||
reg = <0x08>; |
||||
|
||||
regulators { |
||||
sw1a_reg: sw1ab { |
||||
regulator-min-microvolt = <300000>; |
||||
regulator-max-microvolt = <1875000>; |
||||
regulator-boot-on; |
||||
regulator-always-on; |
||||
regulator-ramp-delay = <6250>; |
||||
}; |
||||
|
||||
sw1c_reg: sw1c { |
||||
regulator-min-microvolt = <300000>; |
||||
regulator-max-microvolt = <1875000>; |
||||
regulator-boot-on; |
||||
regulator-always-on; |
||||
regulator-ramp-delay = <6250>; |
||||
}; |
||||
|
||||
sw2_reg: sw2 { |
||||
regulator-min-microvolt = <800000>; |
||||
regulator-max-microvolt = <3300000>; |
||||
regulator-boot-on; |
||||
regulator-always-on; |
||||
}; |
||||
|
||||
sw3a_reg: sw3a { |
||||
regulator-min-microvolt = <400000>; |
||||
regulator-max-microvolt = <1975000>; |
||||
regulator-boot-on; |
||||
regulator-always-on; |
||||
}; |
||||
|
||||
sw3b_reg: sw3b { |
||||
regulator-min-microvolt = <400000>; |
||||
regulator-max-microvolt = <1975000>; |
||||
regulator-boot-on; |
||||
regulator-always-on; |
||||
}; |
||||
|
||||
sw4_reg: sw4 { |
||||
regulator-min-microvolt = <800000>; |
||||
regulator-max-microvolt = <3300000>; |
||||
}; |
||||
|
||||
swbst_reg: swbst { |
||||
regulator-min-microvolt = <5000000>; |
||||
regulator-max-microvolt = <5150000>; |
||||
}; |
||||
|
||||
snvs_reg: vsnvs { |
||||
regulator-min-microvolt = <1000000>; |
||||
regulator-max-microvolt = <3000000>; |
||||
regulator-boot-on; |
||||
regulator-always-on; |
||||
}; |
||||
|
||||
vref_reg: vrefddr { |
||||
regulator-boot-on; |
||||
regulator-always-on; |
||||
}; |
||||
|
||||
vgen1_reg: vgen1 { |
||||
regulator-min-microvolt = <800000>; |
||||
regulator-max-microvolt = <1550000>; |
||||
regulator-always-on; |
||||
}; |
||||
|
||||
vgen2_reg: vgen2 { |
||||
regulator-min-microvolt = <800000>; |
||||
regulator-max-microvolt = <1550000>; |
||||
}; |
||||
|
||||
vgen3_reg: vgen3 { |
||||
regulator-min-microvolt = <1800000>; |
||||
regulator-max-microvolt = <3300000>; |
||||
}; |
||||
|
||||
vgen4_reg: vgen4 { |
||||
regulator-min-microvolt = <1800000>; |
||||
regulator-max-microvolt = <3300000>; |
||||
regulator-always-on; |
||||
}; |
||||
|
||||
vgen5_reg: vgen5 { |
||||
regulator-min-microvolt = <1800000>; |
||||
regulator-max-microvolt = <3300000>; |
||||
regulator-always-on; |
||||
}; |
||||
|
||||
vgen6_reg: vgen6 { |
||||
regulator-min-microvolt = <1800000>; |
||||
regulator-max-microvolt = <3300000>; |
||||
regulator-always-on; |
||||
}; |
||||
}; |
||||
}; |
||||
|
||||
max17135: max17135@48 { |
||||
pinctrl-names = "default"; |
||||
pinctrl-0 = <&pinctrl_max17135>; |
||||
compatible = "maxim,max17135"; |
||||
reg = <0x48>; |
||||
status = "okay"; |
||||
|
||||
vneg_pwrup = <1>; |
||||
gvee_pwrup = <2>; |
||||
vpos_pwrup = <10>; |
||||
gvdd_pwrup = <12>; |
||||
gvdd_pwrdn = <1>; |
||||
vpos_pwrdn = <2>; |
||||
gvee_pwrdn = <8>; |
||||
vneg_pwrdn = <10>; |
||||
gpio_pmic_pwrgood = <&gpio2 13 0>; |
||||
gpio_pmic_vcom_ctrl = <&gpio2 3 0>; |
||||
gpio_pmic_wakeup = <&gpio2 14 0>; |
||||
gpio_pmic_v3p3 = <&gpio2 7 0>; |
||||
gpio_pmic_intr = <&gpio2 12 0>; |
||||
|
||||
regulators { |
||||
DISPLAY_reg: DISPLAY { |
||||
regulator-name = "DISPLAY"; |
||||
}; |
||||
|
||||
GVDD_reg: GVDD { |
||||
/* 20v */ |
||||
regulator-name = "GVDD"; |
||||
}; |
||||
|
||||
GVEE_reg: GVEE { |
||||
/* -22v */ |
||||
regulator-name = "GVEE"; |
||||
}; |
||||
|
||||
HVINN_reg: HVINN { |
||||
/* -22v */ |
||||
regulator-name = "HVINN"; |
||||
}; |
||||
|
||||
HVINP_reg: HVINP { |
||||
/* 20v */ |
||||
regulator-name = "HVINP"; |
||||
}; |
||||
|
||||
VCOM_reg: VCOM { |
||||
regulator-name = "VCOM"; |
||||
/* 2's-compliment, -4325000 */ |
||||
regulator-min-microvolt = <0xffbe0178>; |
||||
/* 2's-compliment, -500000 */ |
||||
regulator-max-microvolt = <0xfff85ee0>; |
||||
}; |
||||
|
||||
VNEG_reg: VNEG { |
||||
/* -15v */ |
||||
regulator-name = "VNEG"; |
||||
}; |
||||
|
||||
VPOS_reg: VPOS { |
||||
/* 15v */ |
||||
regulator-name = "VPOS"; |
||||
}; |
||||
|
||||
V3P3_reg: V3P3 { |
||||
regulator-name = "V3P3"; |
||||
}; |
||||
}; |
||||
}; |
||||
}; |
||||
|
||||
&i2c3 { |
||||
clock-frequency = <100000>; |
||||
pinctrl-names = "default"; |
||||
pinctrl-0 = <&pinctrl_i2c3>; |
||||
status = "okay"; |
||||
|
||||
codec: wm8962@1a { |
||||
compatible = "wlf,wm8962"; |
||||
reg = <0x1a>; |
||||
clocks = <&clks IMX6SLL_CLK_EXTERN_AUDIO>; |
||||
DCVDD-supply = <&vgen3_reg>; |
||||
DBVDD-supply = <®_aud3v>; |
||||
AVDD-supply = <&vgen3_reg>; |
||||
CPVDD-supply = <&vgen3_reg>; |
||||
MICVDD-supply = <®_aud3v>; |
||||
PLLVDD-supply = <&vgen3_reg>; |
||||
SPKVDD1-supply = <®_aud4v>; |
||||
SPKVDD2-supply = <®_aud4v>; |
||||
amic-mono; |
||||
}; |
||||
}; |
||||
|
||||
&gpc { |
||||
fsl,ldo-bypass = <1>; |
||||
}; |
||||
|
||||
&iomuxc { |
||||
pinctrl-names = "default"; |
||||
pinctrl-0 = <&pinctrl_hog>; |
||||
|
||||
imx6sll-evk { |
||||
pinctrl_hog: hoggrp { |
||||
fsl,pins = < |
||||
MX6SLL_PAD_KEY_ROW7__GPIO4_IO07 0x17059 |
||||
MX6SLL_PAD_GPIO4_IO22__GPIO4_IO22 0x17059 |
||||
MX6SLL_PAD_KEY_COL3__GPIO3_IO30 0x17059 |
||||
/* |
||||
* Must set the LVE of pad SD2_RESET, otherwise current |
||||
* leakage through eMMC chip will pull high the VCCQ to |
||||
* 2.6v, which will impact SD1 and SD3 SD3.0 voltage switch. |
||||
*/ |
||||
MX6SLL_PAD_SD2_RESET__GPIO4_IO27 0x417059 |
||||
MX6SLL_PAD_KEY_COL4__GPIO4_IO00 0x17059 |
||||
MX6SLL_PAD_REF_CLK_32K__GPIO3_IO22 0x17059 /* SD3 CD */ |
||||
MX6SLL_PAD_KEY_COL6__GPIO4_IO04 0x17059 /*SD3 RESET */ |
||||
MX6SLL_PAD_KEY_COL5__GPIO4_IO02 0x17059 |
||||
MX6SLL_PAD_GPIO4_IO24__GPIO4_IO24 0x17059 /* HP DETECT */ |
||||
/* CHG_FLT, CHG_UOK/DOK, CHG_STATUS */ |
||||
MX6SLL_PAD_ECSPI2_MISO__GPIO4_IO14 0x17000 |
||||
MX6SLL_PAD_ECSPI2_MOSI__GPIO4_IO13 0x17000 |
||||
MX6SLL_PAD_ECSPI2_SS0__GPIO4_IO15 0x17000 |
||||
>; |
||||
}; |
||||
|
||||
pinctrl_audmux3: audmux3grp { |
||||
fsl,pins = < |
||||
MX6SLL_PAD_AUD_TXC__AUD3_TXC 0x4130b0 |
||||
MX6SLL_PAD_AUD_TXFS__AUD3_TXFS 0x4130b0 |
||||
MX6SLL_PAD_AUD_TXD__AUD3_TXD 0x4110b0 |
||||
MX6SLL_PAD_AUD_RXD__AUD3_RXD 0x4130b0 |
||||
MX6SLL_PAD_AUD_MCLK__AUDIO_CLK_OUT 0x4130b0 |
||||
>; |
||||
}; |
||||
|
||||
pinctrl_csi1: csi1grp { |
||||
fsl,pins = < |
||||
MX6SLL_PAD_EPDC_GDRL__CSI_MCLK 0x1b088 |
||||
MX6SLL_PAD_EPDC_GDCLK__CSI_PIXCLK 0x1b088 |
||||
MX6SLL_PAD_EPDC_GDSP__CSI_VSYNC 0x1b088 |
||||
MX6SLL_PAD_EPDC_GDOE__CSI_HSYNC 0x1b088 |
||||
MX6SLL_PAD_EPDC_DATA02__CSI_DATA02 0x1b088 |
||||
MX6SLL_PAD_EPDC_DATA03__CSI_DATA03 0x1b088 |
||||
MX6SLL_PAD_EPDC_DATA04__CSI_DATA04 0x1b088 |
||||
MX6SLL_PAD_EPDC_DATA05__CSI_DATA05 0x1b088 |
||||
MX6SLL_PAD_EPDC_DATA06__CSI_DATA06 0x1b088 |
||||
MX6SLL_PAD_EPDC_DATA07__CSI_DATA07 0x1b088 |
||||
MX6SLL_PAD_EPDC_SDCLK__CSI_DATA08 0x1b088 |
||||
MX6SLL_PAD_EPDC_SDLE__CSI_DATA09 0x1b088 |
||||
MX6SLL_PAD_EPDC_SDSHR__GPIO1_IO26 0x80000000 |
||||
MX6SLL_PAD_EPDC_SDOE__GPIO1_IO25 0x80000000 |
||||
>; |
||||
}; |
||||
|
||||
pinctrl_epdc0: epdcgrp0 { |
||||
fsl,pins = < |
||||
MX6SLL_PAD_EPDC_DATA00__EPDC_DATA00 0x100b1 |
||||
MX6SLL_PAD_EPDC_DATA01__EPDC_DATA01 0x100b1 |
||||
MX6SLL_PAD_EPDC_DATA02__EPDC_DATA02 0x100b1 |
||||
MX6SLL_PAD_EPDC_DATA03__EPDC_DATA03 0x100b1 |
||||
MX6SLL_PAD_EPDC_DATA04__EPDC_DATA04 0x100b1 |
||||
MX6SLL_PAD_EPDC_DATA05__EPDC_DATA05 0x100b1 |
||||
MX6SLL_PAD_EPDC_DATA06__EPDC_DATA06 0x100b1 |
||||
MX6SLL_PAD_EPDC_DATA07__EPDC_DATA07 0x100b1 |
||||
MX6SLL_PAD_EPDC_DATA08__EPDC_DATA08 0x100b1 |
||||
MX6SLL_PAD_EPDC_DATA09__EPDC_DATA09 0x100b1 |
||||
MX6SLL_PAD_EPDC_DATA10__EPDC_DATA10 0x100b1 |
||||
MX6SLL_PAD_EPDC_DATA11__EPDC_DATA11 0x100b1 |
||||
MX6SLL_PAD_EPDC_DATA12__EPDC_DATA12 0x100b1 |
||||
MX6SLL_PAD_EPDC_DATA13__EPDC_DATA13 0x100b1 |
||||
MX6SLL_PAD_EPDC_DATA14__EPDC_DATA14 0x100b1 |
||||
MX6SLL_PAD_EPDC_DATA15__EPDC_DATA15 0x100b1 |
||||
MX6SLL_PAD_EPDC_SDCLK__EPDC_SDCLK_P 0x100b1 |
||||
MX6SLL_PAD_EPDC_SDLE__EPDC_SDLE 0x100b1 |
||||
MX6SLL_PAD_EPDC_SDOE__EPDC_SDOE 0x100b1 |
||||
MX6SLL_PAD_EPDC_SDSHR__EPDC_SDSHR 0x100b1 |
||||
MX6SLL_PAD_EPDC_SDCE0__EPDC_SDCE0 0x100b1 |
||||
MX6SLL_PAD_EPDC_GDCLK__EPDC_GDCLK 0x100b1 |
||||
MX6SLL_PAD_EPDC_GDOE__EPDC_GDOE 0x100b1 |
||||
MX6SLL_PAD_EPDC_GDRL__EPDC_GDRL 0x100b1 |
||||
MX6SLL_PAD_EPDC_GDSP__EPDC_GDSP 0x100b1 |
||||
>; |
||||
}; |
||||
|
||||
pinctrl_lcdif_dat: lcdifdatgrp { |
||||
fsl,pins = < |
||||
MX6SLL_PAD_LCD_DATA00__LCD_DATA00 0x79 |
||||
MX6SLL_PAD_LCD_DATA01__LCD_DATA01 0x79 |
||||
MX6SLL_PAD_LCD_DATA02__LCD_DATA02 0x79 |
||||
MX6SLL_PAD_LCD_DATA03__LCD_DATA03 0x79 |
||||
MX6SLL_PAD_LCD_DATA04__LCD_DATA04 0x79 |
||||
MX6SLL_PAD_LCD_DATA05__LCD_DATA05 0x79 |
||||
MX6SLL_PAD_LCD_DATA06__LCD_DATA06 0x79 |
||||
MX6SLL_PAD_LCD_DATA07__LCD_DATA07 0x79 |
||||
MX6SLL_PAD_LCD_DATA08__LCD_DATA08 0x79 |
||||
MX6SLL_PAD_LCD_DATA09__LCD_DATA09 0x79 |
||||
MX6SLL_PAD_LCD_DATA10__LCD_DATA10 0x79 |
||||
MX6SLL_PAD_LCD_DATA11__LCD_DATA11 0x79 |
||||
MX6SLL_PAD_LCD_DATA12__LCD_DATA12 0x79 |
||||
MX6SLL_PAD_LCD_DATA13__LCD_DATA13 0x79 |
||||
MX6SLL_PAD_LCD_DATA14__LCD_DATA14 0x79 |
||||
MX6SLL_PAD_LCD_DATA15__LCD_DATA15 0x79 |
||||
MX6SLL_PAD_LCD_DATA16__LCD_DATA16 0x79 |
||||
MX6SLL_PAD_LCD_DATA17__LCD_DATA17 0x79 |
||||
MX6SLL_PAD_LCD_DATA18__LCD_DATA18 0x79 |
||||
MX6SLL_PAD_LCD_DATA19__LCD_DATA19 0x79 |
||||
MX6SLL_PAD_LCD_DATA20__LCD_DATA20 0x79 |
||||
MX6SLL_PAD_LCD_DATA21__LCD_DATA21 0x79 |
||||
MX6SLL_PAD_LCD_DATA22__LCD_DATA22 0x79 |
||||
MX6SLL_PAD_LCD_DATA23__LCD_DATA23 0x79 |
||||
>; |
||||
}; |
||||
|
||||
pinctrl_lcdif_ctrl: lcdifctrlgrp { |
||||
fsl,pins = < |
||||
MX6SLL_PAD_LCD_CLK__LCD_CLK 0x79 |
||||
MX6SLL_PAD_LCD_ENABLE__LCD_ENABLE 0x79 |
||||
MX6SLL_PAD_LCD_HSYNC__LCD_HSYNC 0x79 |
||||
MX6SLL_PAD_LCD_VSYNC__LCD_VSYNC 0x79 |
||||
MX6SLL_PAD_LCD_RESET__LCD_RESET 0x79 |
||||
MX6SLL_PAD_ECSPI1_SCLK__GPIO4_IO08 0x79 |
||||
>; |
||||
}; |
||||
|
||||
pinctrl_max17135: max17135grp-1 { |
||||
fsl,pins = < |
||||
MX6SLL_PAD_EPDC_PWR_STAT__GPIO2_IO13 0x80000000 /* pwrgood */ |
||||
MX6SLL_PAD_EPDC_VCOM0__GPIO2_IO03 0x80000000 /* vcom_ctrl */ |
||||
MX6SLL_PAD_EPDC_PWR_WAKE__GPIO2_IO14 0x80000000 /* wakeup */ |
||||
MX6SLL_PAD_EPDC_PWR_CTRL0__GPIO2_IO07 0x80000000 /* v3p3 */ |
||||
MX6SLL_PAD_EPDC_PWR_IRQ__GPIO2_IO12 0x80000000 /* pwr int */ |
||||
>; |
||||
}; |
||||
|
||||
pinctrl_spdif: spdifgrp { |
||||
fsl,pins = < |
||||
MX6SLL_PAD_SD2_DATA4__SPDIF_OUT 0x4130b0 |
||||
>; |
||||
}; |
||||
|
||||
pinctrl_uart1: uart1grp { |
||||
fsl,pins = < |
||||
MX6SLL_PAD_UART1_TXD__UART1_DCE_TX 0x1b0b1 |
||||
MX6SLL_PAD_UART1_RXD__UART1_DCE_RX 0x1b0b1 |
||||
>; |
||||
}; |
||||
|
||||
pinctrl_uart5: uart5grp { |
||||
fsl,pins = < |
||||
MX6SLL_PAD_KEY_ROW1__GPIO3_IO27 0x1b0b1 /* bt reg on */ |
||||
MX6SLL_PAD_ECSPI1_MOSI__UART5_DCE_TX 0x1b0b1 |
||||
MX6SLL_PAD_ECSPI1_SCLK__UART5_DCE_RX 0x1b0b1 |
||||
MX6SLL_PAD_ECSPI1_SS0__UART5_DCE_CTS 0x1b0b1 |
||||
MX6SLL_PAD_ECSPI1_MISO__UART5_DCE_RTS 0x1b0b1 |
||||
>; |
||||
}; |
||||
|
||||
pinctrl_uart5dte: uart5dtegrp { |
||||
fsl,pins = < |
||||
MX6SLL_PAD_ECSPI1_MOSI__UART5_DTE_RX 0x1b0b1 |
||||
MX6SLL_PAD_ECSPI1_SCLK__UART5_DTE_TX 0x1b0b1 |
||||
MX6SLL_PAD_ECSPI1_SS0__UART5_DTE_RTS 0x1b0b1 |
||||
MX6SLL_PAD_ECSPI1_MISO__UART5_DTE_CTS 0x1b0b1 |
||||
>; |
||||
}; |
||||
|
||||
pinctrl_usdhc1: usdhc1grp { |
||||
fsl,pins = < |
||||
MX6SLL_PAD_SD1_CMD__SD1_CMD 0x17059 |
||||
MX6SLL_PAD_SD1_CLK__SD1_CLK 0x13059 |
||||
MX6SLL_PAD_SD1_DATA0__SD1_DATA0 0x17059 |
||||
MX6SLL_PAD_SD1_DATA1__SD1_DATA1 0x17059 |
||||
MX6SLL_PAD_SD1_DATA2__SD1_DATA2 0x17059 |
||||
MX6SLL_PAD_SD1_DATA3__SD1_DATA3 0x17059 |
||||
>; |
||||
}; |
||||
|
||||
pinctrl_usdhc1_100mhz: usdhc1grp_100mhz { |
||||
fsl,pins = < |
||||
MX6SLL_PAD_SD1_CMD__SD1_CMD 0x170b9 |
||||
MX6SLL_PAD_SD1_CLK__SD1_CLK 0x130b9 |
||||
MX6SLL_PAD_SD1_DATA0__SD1_DATA0 0x170b9 |
||||
MX6SLL_PAD_SD1_DATA1__SD1_DATA1 0x170b9 |
||||
MX6SLL_PAD_SD1_DATA2__SD1_DATA2 0x170b9 |
||||
MX6SLL_PAD_SD1_DATA3__SD1_DATA3 0x170b9 |
||||
>; |
||||
}; |
||||
|
||||
pinctrl_usdhc1_200mhz: usdhc1grp_200mhz { |
||||
fsl,pins = < |
||||
MX6SLL_PAD_SD1_CMD__SD1_CMD 0x170f9 |
||||
MX6SLL_PAD_SD1_CLK__SD1_CLK 0x130f9 |
||||
MX6SLL_PAD_SD1_DATA0__SD1_DATA0 0x170f9 |
||||
MX6SLL_PAD_SD1_DATA1__SD1_DATA1 0x170f9 |
||||
MX6SLL_PAD_SD1_DATA2__SD1_DATA2 0x170f9 |
||||
MX6SLL_PAD_SD1_DATA3__SD1_DATA3 0x170f9 |
||||
>; |
||||
}; |
||||
|
||||
pinctrl_usdhc2: usdhc2grp { |
||||
fsl,pins = < |
||||
MX6SLL_PAD_SD2_CMD__SD2_CMD 0x17059 |
||||
MX6SLL_PAD_SD2_CLK__SD2_CLK 0x13059 |
||||
MX6SLL_PAD_SD2_DATA0__SD2_DATA0 0x17059 |
||||
MX6SLL_PAD_SD2_DATA1__SD2_DATA1 0x17059 |
||||
MX6SLL_PAD_SD2_DATA2__SD2_DATA2 0x17059 |
||||
MX6SLL_PAD_SD2_DATA3__SD2_DATA3 0x17059 |
||||
MX6SLL_PAD_SD2_DATA4__SD2_DATA4 0x17059 |
||||
MX6SLL_PAD_SD2_DATA5__SD2_DATA5 0x17059 |
||||
MX6SLL_PAD_SD2_DATA6__SD2_DATA6 0x17059 |
||||
MX6SLL_PAD_SD2_DATA7__SD2_DATA7 0x17059 |
||||
MX6SLL_PAD_GPIO4_IO21__SD2_STROBE 0x413059 |
||||
>; |
||||
}; |
||||
|
||||
pinctrl_usdhc2_100mhz: usdhc2grp_100mhz { |
||||
fsl,pins = < |
||||
MX6SLL_PAD_SD2_CMD__SD2_CMD 0x170b9 |
||||
MX6SLL_PAD_SD2_CLK__SD2_CLK 0x130b9 |
||||
MX6SLL_PAD_SD2_DATA0__SD2_DATA0 0x170b9 |
||||
MX6SLL_PAD_SD2_DATA1__SD2_DATA1 0x170b9 |
||||
MX6SLL_PAD_SD2_DATA2__SD2_DATA2 0x170b9 |
||||
MX6SLL_PAD_SD2_DATA3__SD2_DATA3 0x170b9 |
||||
MX6SLL_PAD_SD2_DATA4__SD2_DATA4 0x170b9 |
||||
MX6SLL_PAD_SD2_DATA5__SD2_DATA5 0x170b9 |
||||
MX6SLL_PAD_SD2_DATA6__SD2_DATA6 0x170b9 |
||||
MX6SLL_PAD_SD2_DATA7__SD2_DATA7 0x170b9 |
||||
MX6SLL_PAD_GPIO4_IO21__SD2_STROBE 0x4130b9 |
||||
>; |
||||
}; |
||||
|
||||
pinctrl_usdhc2_200mhz: usdhc2grp_200mhz { |
||||
fsl,pins = < |
||||
MX6SLL_PAD_SD2_CMD__SD2_CMD 0x170f9 |
||||
MX6SLL_PAD_SD2_CLK__SD2_CLK 0x130f9 |
||||
MX6SLL_PAD_SD2_DATA0__SD2_DATA0 0x170f9 |
||||
MX6SLL_PAD_SD2_DATA1__SD2_DATA1 0x170f9 |
||||
MX6SLL_PAD_SD2_DATA2__SD2_DATA2 0x170f9 |
||||
MX6SLL_PAD_SD2_DATA3__SD2_DATA3 0x170f9 |
||||
MX6SLL_PAD_SD2_DATA4__SD2_DATA4 0x170f9 |
||||
MX6SLL_PAD_SD2_DATA5__SD2_DATA5 0x170f9 |
||||
MX6SLL_PAD_SD2_DATA6__SD2_DATA6 0x170f9 |
||||
MX6SLL_PAD_SD2_DATA7__SD2_DATA7 0x170f9 |
||||
MX6SLL_PAD_GPIO4_IO21__SD2_STROBE 0x4130f9 |
||||
>; |
||||
}; |
||||
|
||||
pinctrl_usdhc3: usdhc3grp { |
||||
fsl,pins = < |
||||
MX6SLL_PAD_SD3_CMD__SD3_CMD 0x17059 |
||||
MX6SLL_PAD_SD3_CLK__SD3_CLK 0x13059 |
||||
MX6SLL_PAD_SD3_DATA0__SD3_DATA0 0x17059 |
||||
MX6SLL_PAD_SD3_DATA1__SD3_DATA1 0x17059 |
||||
MX6SLL_PAD_SD3_DATA2__SD3_DATA2 0x17059 |
||||
MX6SLL_PAD_SD3_DATA3__SD3_DATA3 0x17059 |
||||
>; |
||||
}; |
||||
|
||||
pinctrl_usdhc3_100mhz: usdhc3grp_100mhz { |
||||
fsl,pins = < |
||||
MX6SLL_PAD_SD3_CMD__SD3_CMD 0x170b9 |
||||
MX6SLL_PAD_SD3_CLK__SD3_CLK 0x130b9 |
||||
MX6SLL_PAD_SD3_DATA0__SD3_DATA0 0x170b9 |
||||
MX6SLL_PAD_SD3_DATA1__SD3_DATA1 0x170b9 |
||||
MX6SLL_PAD_SD3_DATA2__SD3_DATA2 0x170b9 |
||||
MX6SLL_PAD_SD3_DATA3__SD3_DATA3 0x170b9 |
||||
>; |
||||
}; |
||||
|
||||
pinctrl_usdhc3_200mhz: usdhc3grp_200mhz { |
||||
fsl,pins = < |
||||
MX6SLL_PAD_SD3_CMD__SD3_CMD 0x170f9 |
||||
MX6SLL_PAD_SD3_CLK__SD3_CLK 0x130f9 |
||||
MX6SLL_PAD_SD3_DATA0__SD3_DATA0 0x170f9 |
||||
MX6SLL_PAD_SD3_DATA1__SD3_DATA1 0x170f9 |
||||
MX6SLL_PAD_SD3_DATA2__SD3_DATA2 0x170f9 |
||||
MX6SLL_PAD_SD3_DATA3__SD3_DATA3 0x170f9 |
||||
>; |
||||
}; |
||||
|
||||
pinctrl_usbotg1: usbotg1grp { |
||||
fsl,pins = < |
||||
MX6SLL_PAD_EPDC_PWR_COM__USB_OTG1_ID 0x17059 |
||||
>; |
||||
}; |
||||
|
||||
pinctrl_i2c1: i2c1grp { |
||||
fsl,pins = < |
||||
MX6SLL_PAD_I2C1_SCL__I2C1_SCL 0x4001b8b1 |
||||
MX6SLL_PAD_I2C1_SDA__I2C1_SDA 0x4001b8b1 |
||||
>; |
||||
}; |
||||
|
||||
pinctrl_i2c3: i2c3grp { |
||||
fsl,pins = < |
||||
MX6SLL_PAD_AUD_RXFS__I2C3_SCL 0x4041b8b1 |
||||
MX6SLL_PAD_AUD_RXC__I2C3_SDA 0x4041b8b1 |
||||
>; |
||||
}; |
||||
|
||||
pinctrl_pwm1: pmw1grp { |
||||
fsl,pins = < |
||||
MX6SLL_PAD_PWM1__PWM1_OUT 0x110b0 |
||||
>; |
||||
}; |
||||
}; |
||||
}; |
||||
|
||||
&lcdif { |
||||
pinctrl-names = "default"; |
||||
pinctrl-0 = <&pinctrl_lcdif_dat |
||||
&pinctrl_lcdif_ctrl>; |
||||
lcd-supply = <®_lcd>; |
||||
display = <&display>; |
||||
status = "okay"; |
||||
|
||||
display: display { |
||||
bits-per-pixel = <16>; |
||||
bus-width = <24>; |
||||
|
||||
display-timings { |
||||
native-mode = <&timing0>; |
||||
timing0: timing0 { |
||||
clock-frequency = <33500000>; |
||||
hactive = <800>; |
||||
vactive = <480>; |
||||
hback-porch = <89>; |
||||
hfront-porch = <164>; |
||||
vback-porch = <23>; |
||||
vfront-porch = <10>; |
||||
hsync-len = <10>; |
||||
vsync-len = <10>; |
||||
hsync-active = <0>; |
||||
vsync-active = <0>; |
||||
de-active = <1>; |
||||
pixelclk-active = <0>; |
||||
}; |
||||
}; |
||||
}; |
||||
}; |
||||
|
||||
&pxp { |
||||
status = "okay"; |
||||
}; |
||||
|
||||
&pwm1 { |
||||
pinctrl-names = "default"; |
||||
pinctrl-0 = <&pinctrl_pwm1>; |
||||
status = "okay"; |
||||
}; |
||||
|
||||
&uart1 { |
||||
pinctrl-names = "default"; |
||||
pinctrl-0 = <&pinctrl_uart1>; |
||||
status = "okay"; |
||||
}; |
||||
|
||||
&uart5 { |
||||
pinctrl-names = "default"; |
||||
pinctrl-0 = <&pinctrl_uart5>; |
||||
fsl,uart-has-rtscts; |
||||
/* for DTE mode, add below change */ |
||||
/* fsl,dte-mode; */ |
||||
/* pinctrl-0 = <&pinctrl_uart5dte>; */ |
||||
status = "disabled"; |
||||
}; |
||||
|
||||
&usdhc1 { |
||||
pinctrl-names = "default", "state_100mhz", "state_200mhz"; |
||||
pinctrl-0 = <&pinctrl_usdhc1>; |
||||
pinctrl-1 = <&pinctrl_usdhc1_100mhz>; |
||||
pinctrl-2 = <&pinctrl_usdhc1_200mhz>; |
||||
cd-gpios = <&gpio4 7 GPIO_ACTIVE_LOW>; |
||||
wp-gpios = <&gpio4 22 GPIO_ACTIVE_HIGH>; |
||||
keep-power-in-suspend; |
||||
enable-sdio-wakeup; |
||||
vmmc-supply = <®_sd1_vmmc>; |
||||
status = "okay"; |
||||
}; |
||||
|
||||
&usdhc2 { |
||||
pinctrl-names = "default", "state_100mhz", "state_200mhz"; |
||||
pinctrl-0 = <&pinctrl_usdhc2>; |
||||
pinctrl-1 = <&pinctrl_usdhc2_100mhz>; |
||||
pinctrl-2 = <&pinctrl_usdhc2_200mhz>; |
||||
vqmmc-supply = <®_sd2_vmmc>; |
||||
bus-width = <8>; |
||||
no-removable; |
||||
status = "okay"; |
||||
}; |
||||
|
||||
&usdhc3 { |
||||
pinctrl-names = "default", "state_100mhz", "state_200mhz"; |
||||
pinctrl-0 = <&pinctrl_usdhc3>; |
||||
pinctrl-1 = <&pinctrl_usdhc3_100mhz>; |
||||
pinctrl-2 = <&pinctrl_usdhc3_200mhz>; |
||||
cd-gpios = <&gpio3 22 GPIO_ACTIVE_LOW>; |
||||
keep-power-in-suspend; |
||||
enable-sdio-wakeup; |
||||
vmmc-supply = <®_sd3_vmmc>; |
||||
status = "okay"; |
||||
}; |
||||
|
||||
&usbotg1 { |
||||
vbus-supply = <®_usb_otg1_vbus>; |
||||
pinctrl-names = "default"; |
||||
pinctrl-0 = <&pinctrl_usbotg1>; |
||||
disable-over-current; |
||||
srp-disable; |
||||
hnp-disable; |
||||
adp-disable; |
||||
status = "okay"; |
||||
}; |
||||
|
||||
&usbotg2 { |
||||
vbus-supply = <®_usb_otg2_vbus>; |
||||
dr_mode = "host"; |
||||
disable-over-current; |
||||
status = "okay"; |
||||
}; |
||||
|
||||
&epdc { |
||||
pinctrl-names = "default"; |
||||
pinctrl-0 = <&pinctrl_epdc0>; |
||||
V3P3-supply = <&V3P3_reg>; |
||||
VCOM-supply = <&VCOM_reg>; |
||||
DISPLAY-supply = <&DISPLAY_reg>; |
||||
status = "okay"; |
||||
}; |
||||
|
||||
&ssi2 { |
||||
status = "okay"; |
||||
}; |
@ -0,0 +1,882 @@ |
||||
/*
|
||||
* Copyright 2016 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. |
||||
* |
||||
*/ |
||||
|
||||
#ifndef __DTS_IMX6SLL_PINFUNC_H |
||||
#define __DTS_IMX6SLL_PINFUNC_H |
||||
|
||||
/*
|
||||
* The pin function ID is a tuple of |
||||
* <mux_reg conf_reg input_reg mux_mode input_val> |
||||
*/ |
||||
#define MX6SLL_PAD_WDOG_B__WDOG1_B 0x0014 0x02DC 0x0000 0x0 0x0 |
||||
#define MX6SLL_PAD_WDOG_B__WDOG1_RESET_B_DEB 0x0014 0x02DC 0x0000 0x1 0x0 |
||||
#define MX6SLL_PAD_WDOG_B__UART5_RI_B 0x0014 0x02DC 0x0000 0x2 0x0 |
||||
#define MX6SLL_PAD_WDOG_B__GPIO3_IO18 0x0014 0x02DC 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_REF_CLK_24M__XTALOSC_REF_CLK_24M 0x0018 0x02E0 0x0000 0x0 0x0 |
||||
#define MX6SLL_PAD_REF_CLK_24M__I2C3_SCL 0x0018 0x02E0 0x068C 0x1 0x0 |
||||
#define MX6SLL_PAD_REF_CLK_24M__PWM3_OUT 0x0018 0x02E0 0x0000 0x2 0x0 |
||||
#define MX6SLL_PAD_REF_CLK_24M__USB_OTG2_ID 0x0018 0x02E0 0x0560 0x3 0x0 |
||||
#define MX6SLL_PAD_REF_CLK_24M__CCM_PMIC_READY 0x0018 0x02E0 0x05AC 0x4 0x0 |
||||
#define MX6SLL_PAD_REF_CLK_24M__GPIO3_IO21 0x0018 0x02E0 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_REF_CLK_24M__SD3_WP 0x0018 0x02E0 0x0794 0x6 0x0 |
||||
#define MX6SLL_PAD_REF_CLK_32K__XTALOSC_REF_CLK_32K 0x001C 0x02E4 0x0000 0x0 0x0 |
||||
#define MX6SLL_PAD_REF_CLK_32K__I2C3_SDA 0x001C 0x02E4 0x0690 0x1 0x0 |
||||
#define MX6SLL_PAD_REF_CLK_32K__PWM4_OUT 0x001C 0x02E4 0x0000 0x2 0x0 |
||||
#define MX6SLL_PAD_REF_CLK_32K__USB_OTG1_ID 0x001C 0x02E4 0x055C 0x3 0x0 |
||||
#define MX6SLL_PAD_REF_CLK_32K__SD1_LCTL 0x001C 0x02E4 0x0000 0x4 0x0 |
||||
#define MX6SLL_PAD_REF_CLK_32K__GPIO3_IO22 0x001C 0x02E4 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_REF_CLK_32K__SD3_CD_B 0x001C 0x02E4 0x0780 0x6 0x0 |
||||
#define MX6SLL_PAD_PWM1__PWM1_OUT 0x0020 0x02E8 0x0000 0x0 0x0 |
||||
#define MX6SLL_PAD_PWM1__CCM_CLKO 0x0020 0x02E8 0x0000 0x1 0x0 |
||||
#define MX6SLL_PAD_PWM1__AUDIO_CLK_OUT 0x0020 0x02E8 0x0000 0x2 0x0 |
||||
#define MX6SLL_PAD_PWM1__CSI_MCLK 0x0020 0x02E8 0x0000 0x4 0x0 |
||||
#define MX6SLL_PAD_PWM1__GPIO3_IO23 0x0020 0x02E8 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_PWM1__EPIT1_OUT 0x0020 0x02E8 0x0000 0x6 0x0 |
||||
#define MX6SLL_PAD_KEY_COL0__KEY_COL0 0x0024 0x02EC 0x06A0 0x0 0x0 |
||||
#define MX6SLL_PAD_KEY_COL0__I2C2_SCL 0x0024 0x02EC 0x0684 0x1 0x0 |
||||
#define MX6SLL_PAD_KEY_COL0__LCD_DATA00 0x0024 0x02EC 0x06D8 0x2 0x0 |
||||
#define MX6SLL_PAD_KEY_COL0__SD1_CD_B 0x0024 0x02EC 0x0770 0x4 0x1 |
||||
#define MX6SLL_PAD_KEY_COL0__GPIO3_IO24 0x0024 0x02EC 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_KEY_ROW0__KEY_ROW0 0x0028 0x02F0 0x06C0 0x0 0x0 |
||||
#define MX6SLL_PAD_KEY_ROW0__I2C2_SDA 0x0028 0x02F0 0x0688 0x1 0x0 |
||||
#define MX6SLL_PAD_KEY_ROW0__LCD_DATA01 0x0028 0x02F0 0x06DC 0x2 0x0 |
||||
#define MX6SLL_PAD_KEY_ROW0__SD1_WP 0x0028 0x02F0 0x0774 0x4 0x1 |
||||
#define MX6SLL_PAD_KEY_ROW0__GPIO3_IO25 0x0028 0x02F0 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_KEY_COL1__KEY_COL1 0x002C 0x02F4 0x06A4 0x0 0x0 |
||||
#define MX6SLL_PAD_KEY_COL1__ECSPI4_MOSI 0x002C 0x02F4 0x0658 0x1 0x1 |
||||
#define MX6SLL_PAD_KEY_COL1__LCD_DATA02 0x002C 0x02F4 0x06E0 0x2 0x0 |
||||
#define MX6SLL_PAD_KEY_COL1__SD3_DATA4 0x002C 0x02F4 0x0784 0x4 0x0 |
||||
#define MX6SLL_PAD_KEY_COL1__GPIO3_IO26 0x002C 0x02F4 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_KEY_ROW1__KEY_ROW1 0x0030 0x02F8 0x06C4 0x0 0x0 |
||||
#define MX6SLL_PAD_KEY_ROW1__ECSPI4_MISO 0x0030 0x02F8 0x0654 0x1 0x1 |
||||
#define MX6SLL_PAD_KEY_ROW1__LCD_DATA03 0x0030 0x02F8 0x06E4 0x2 0x0 |
||||
#define MX6SLL_PAD_KEY_ROW1__CSI_FIELD 0x0030 0x02F8 0x0000 0x3 0x0 |
||||
#define MX6SLL_PAD_KEY_ROW1__SD3_DATA5 0x0030 0x02F8 0x0788 0x4 0x0 |
||||
#define MX6SLL_PAD_KEY_ROW1__GPIO3_IO27 0x0030 0x02F8 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_KEY_COL2__KEY_COL2 0x0034 0x02FC 0x06A8 0x0 0x0 |
||||
#define MX6SLL_PAD_KEY_COL2__ECSPI4_SS0 0x0034 0x02FC 0x065C 0x1 0x1 |
||||
#define MX6SLL_PAD_KEY_COL2__LCD_DATA04 0x0034 0x02FC 0x06E8 0x2 0x0 |
||||
#define MX6SLL_PAD_KEY_COL2__CSI_DATA12 0x0034 0x02FC 0x05B8 0x3 0x1 |
||||
#define MX6SLL_PAD_KEY_COL2__SD3_DATA6 0x0034 0x02FC 0x078C 0x4 0x0 |
||||
#define MX6SLL_PAD_KEY_COL2__GPIO3_IO28 0x0034 0x02FC 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_KEY_ROW2__KEY_ROW2 0x0038 0x0300 0x06C8 0x0 0x0 |
||||
#define MX6SLL_PAD_KEY_ROW2__ECSPI4_SCLK 0x0038 0x0300 0x0650 0x1 0x1 |
||||
#define MX6SLL_PAD_KEY_ROW2__LCD_DATA05 0x0038 0x0300 0x06EC 0x2 0x0 |
||||
#define MX6SLL_PAD_KEY_ROW2__CSI_DATA13 0x0038 0x0300 0x05BC 0x3 0x1 |
||||
#define MX6SLL_PAD_KEY_ROW2__SD3_DATA7 0x0038 0x0300 0x0790 0x4 0x0 |
||||
#define MX6SLL_PAD_KEY_ROW2__GPIO3_IO29 0x0038 0x0300 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_KEY_COL3__KEY_COL3 0x003C 0x0304 0x06AC 0x0 0x0 |
||||
#define MX6SLL_PAD_KEY_COL3__AUD6_RXFS 0x003C 0x0304 0x05A0 0x1 0x1 |
||||
#define MX6SLL_PAD_KEY_COL3__LCD_DATA06 0x003C 0x0304 0x06F0 0x2 0x0 |
||||
#define MX6SLL_PAD_KEY_COL3__CSI_DATA14 0x003C 0x0304 0x05C0 0x3 0x1 |
||||
#define MX6SLL_PAD_KEY_COL3__GPIO3_IO30 0x003C 0x0304 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_KEY_COL3__SD1_RESET 0x003C 0x0304 0x0000 0x6 0x0 |
||||
#define MX6SLL_PAD_KEY_ROW3__KEY_ROW3 0x0040 0x0308 0x06CC 0x0 0x1 |
||||
#define MX6SLL_PAD_KEY_ROW3__AUD6_RXC 0x0040 0x0308 0x059C 0x1 0x1 |
||||
#define MX6SLL_PAD_KEY_ROW3__LCD_DATA07 0x0040 0x0308 0x06F4 0x2 0x1 |
||||
#define MX6SLL_PAD_KEY_ROW3__CSI_DATA15 0x0040 0x0308 0x05C4 0x3 0x2 |
||||
#define MX6SLL_PAD_KEY_ROW3__GPIO3_IO31 0x0040 0x0308 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_KEY_ROW3__SD1_VSELECT 0x0040 0x0308 0x0000 0x6 0x0 |
||||
#define MX6SLL_PAD_KEY_COL4__KEY_COL4 0x0044 0x030C 0x06B0 0x0 0x1 |
||||
#define MX6SLL_PAD_KEY_COL4__AUD6_RXD 0x0044 0x030C 0x0594 0x1 0x1 |
||||
#define MX6SLL_PAD_KEY_COL4__LCD_DATA08 0x0044 0x030C 0x06F8 0x2 0x1 |
||||
#define MX6SLL_PAD_KEY_COL4__CSI_DATA16 0x0044 0x030C 0x0000 0x3 0x0 |
||||
#define MX6SLL_PAD_KEY_COL4__GPIO4_IO00 0x0044 0x030C 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_KEY_COL4__USB_OTG1_PWR 0x0044 0x030C 0x0000 0x6 0x0 |
||||
#define MX6SLL_PAD_KEY_ROW4__KEY_ROW4 0x0048 0x0310 0x06D0 0x0 0x1 |
||||
#define MX6SLL_PAD_KEY_ROW4__AUD6_TXC 0x0048 0x0310 0x05A4 0x1 0x1 |
||||
#define MX6SLL_PAD_KEY_ROW4__LCD_DATA09 0x0048 0x0310 0x06FC 0x2 0x1 |
||||
#define MX6SLL_PAD_KEY_ROW4__CSI_DATA17 0x0048 0x0310 0x0000 0x3 0x0 |
||||
#define MX6SLL_PAD_KEY_ROW4__GPIO4_IO01 0x0048 0x0310 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_KEY_ROW4__USB_OTG1_OC 0x0048 0x0310 0x076C 0x6 0x2 |
||||
#define MX6SLL_PAD_KEY_COL5__KEY_COL5 0x004C 0x0314 0x0694 0x0 0x1 |
||||
#define MX6SLL_PAD_KEY_COL5__AUD6_TXFS 0x004C 0x0314 0x05A8 0x1 0x1 |
||||
#define MX6SLL_PAD_KEY_COL5__LCD_DATA10 0x004C 0x0314 0x0700 0x2 0x0 |
||||
#define MX6SLL_PAD_KEY_COL5__CSI_DATA18 0x004C 0x0314 0x0000 0x3 0x0 |
||||
#define MX6SLL_PAD_KEY_COL5__GPIO4_IO02 0x004C 0x0314 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_KEY_COL5__USB_OTG2_PWR 0x004C 0x0314 0x0000 0x6 0x0 |
||||
#define MX6SLL_PAD_KEY_ROW5__KEY_ROW5 0x0050 0x0318 0x06B4 0x0 0x2 |
||||
#define MX6SLL_PAD_KEY_ROW5__AUD6_TXD 0x0050 0x0318 0x0598 0x1 0x1 |
||||
#define MX6SLL_PAD_KEY_ROW5__LCD_DATA11 0x0050 0x0318 0x0704 0x2 0x1 |
||||
#define MX6SLL_PAD_KEY_ROW5__CSI_DATA19 0x0050 0x0318 0x0000 0x3 0x0 |
||||
#define MX6SLL_PAD_KEY_ROW5__GPIO4_IO03 0x0050 0x0318 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_KEY_ROW5__USB_OTG2_OC 0x0050 0x0318 0x0768 0x6 0x3 |
||||
#define MX6SLL_PAD_KEY_COL6__KEY_COL6 0x0054 0x031C 0x0698 0x0 0x2 |
||||
#define MX6SLL_PAD_KEY_COL6__UART4_DCE_RX 0x0054 0x031C 0x075C 0x1 0x2 |
||||
#define MX6SLL_PAD_KEY_COL6__UART4_DTE_TX 0x0054 0x031C 0x0000 0x1 0x0 |
||||
#define MX6SLL_PAD_KEY_COL6__LCD_DATA12 0x0054 0x031C 0x0708 0x2 0x1 |
||||
#define MX6SLL_PAD_KEY_COL6__CSI_DATA20 0x0054 0x031C 0x0000 0x3 0x0 |
||||
#define MX6SLL_PAD_KEY_COL6__GPIO4_IO04 0x0054 0x031C 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_KEY_COL6__SD3_RESET 0x0054 0x031C 0x0000 0x6 0x0 |
||||
#define MX6SLL_PAD_KEY_ROW6__KEY_ROW6 0x0058 0x0320 0x06B8 0x0 0x2 |
||||
#define MX6SLL_PAD_KEY_ROW6__UART4_DCE_TX 0x0058 0x0320 0x0000 0x1 0x0 |
||||
#define MX6SLL_PAD_KEY_ROW6__UART4_DTE_RX 0x0058 0x0320 0x075C 0x1 0x3 |
||||
#define MX6SLL_PAD_KEY_ROW6__LCD_DATA13 0x0058 0x0320 0x070C 0x2 0x1 |
||||
#define MX6SLL_PAD_KEY_ROW6__CSI_DATA21 0x0058 0x0320 0x0000 0x3 0x0 |
||||
#define MX6SLL_PAD_KEY_ROW6__GPIO4_IO05 0x0058 0x0320 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_KEY_ROW6__SD3_VSELECT 0x0058 0x0320 0x0000 0x6 0x0 |
||||
#define MX6SLL_PAD_KEY_COL7__KEY_COL7 0x005C 0x0324 0x069C 0x0 0x2 |
||||
#define MX6SLL_PAD_KEY_COL7__UART4_DCE_RTS 0x005C 0x0324 0x0758 0x1 0x2 |
||||
#define MX6SLL_PAD_KEY_COL7__UART4_DTE_CTS 0x005C 0x0324 0x0000 0x1 0x0 |
||||
#define MX6SLL_PAD_KEY_COL7__LCD_DATA14 0x005C 0x0324 0x0710 0x2 0x1 |
||||
#define MX6SLL_PAD_KEY_COL7__CSI_DATA22 0x005C 0x0324 0x0000 0x3 0x0 |
||||
#define MX6SLL_PAD_KEY_COL7__GPIO4_IO06 0x005C 0x0324 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_KEY_COL7__SD1_WP 0x005C 0x0324 0x0774 0x6 0x3 |
||||
#define MX6SLL_PAD_KEY_ROW7__KEY_ROW7 0x0060 0x0328 0x06BC 0x0 0x2 |
||||
#define MX6SLL_PAD_KEY_ROW7__UART4_DCE_CTS 0x0060 0x0328 0x0000 0x1 0x0 |
||||
#define MX6SLL_PAD_KEY_ROW7__UART4_DTE_RTS 0x0060 0x0328 0x0758 0x1 0x3 |
||||
#define MX6SLL_PAD_KEY_ROW7__LCD_DATA15 0x0060 0x0328 0x0714 0x2 0x1 |
||||
#define MX6SLL_PAD_KEY_ROW7__CSI_DATA23 0x0060 0x0328 0x0000 0x3 0x0 |
||||
#define MX6SLL_PAD_KEY_ROW7__GPIO4_IO07 0x0060 0x0328 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_KEY_ROW7__SD1_CD_B 0x0060 0x0328 0x0770 0x6 0x3 |
||||
#define MX6SLL_PAD_EPDC_DATA00__EPDC_DATA00 0x0064 0x032C 0x0000 0x0 0x0 |
||||
#define MX6SLL_PAD_EPDC_DATA00__ECSPI4_MOSI 0x0064 0x032C 0x0658 0x1 0x2 |
||||
#define MX6SLL_PAD_EPDC_DATA00__LCD_DATA24 0x0064 0x032C 0x0000 0x2 0x0 |
||||
#define MX6SLL_PAD_EPDC_DATA00__CSI_DATA00 0x0064 0x032C 0x05C8 0x3 0x2 |
||||
#define MX6SLL_PAD_EPDC_DATA00__GPIO1_IO07 0x0064 0x032C 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_EPDC_DATA01__EPDC_DATA01 0x0068 0x0330 0x0000 0x0 0x0 |
||||
#define MX6SLL_PAD_EPDC_DATA01__ECSPI4_MISO 0x0068 0x0330 0x0654 0x1 0x2 |
||||
#define MX6SLL_PAD_EPDC_DATA01__LCD_DATA25 0x0068 0x0330 0x0000 0x2 0x0 |
||||
#define MX6SLL_PAD_EPDC_DATA01__CSI_DATA01 0x0068 0x0330 0x05CC 0x3 0x2 |
||||
#define MX6SLL_PAD_EPDC_DATA01__GPIO1_IO08 0x0068 0x0330 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_EPDC_DATA02__EPDC_DATA02 0x006C 0x0334 0x0000 0x0 0x0 |
||||
#define MX6SLL_PAD_EPDC_DATA02__ECSPI4_SS0 0x006C 0x0334 0x065C 0x1 0x2 |
||||
#define MX6SLL_PAD_EPDC_DATA02__LCD_DATA26 0x006C 0x0334 0x0000 0x2 0x0 |
||||
#define MX6SLL_PAD_EPDC_DATA02__CSI_DATA02 0x006C 0x0334 0x05D0 0x3 0x2 |
||||
#define MX6SLL_PAD_EPDC_DATA02__GPIO1_IO09 0x006C 0x0334 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_EPDC_DATA03__EPDC_DATA03 0x0070 0x0338 0x0000 0x0 0x0 |
||||
#define MX6SLL_PAD_EPDC_DATA03__ECSPI4_SCLK 0x0070 0x0338 0x0650 0x1 0x2 |
||||
#define MX6SLL_PAD_EPDC_DATA03__LCD_DATA27 0x0070 0x0338 0x0000 0x2 0x0 |
||||
#define MX6SLL_PAD_EPDC_DATA03__CSI_DATA03 0x0070 0x0338 0x05D4 0x3 0x2 |
||||
#define MX6SLL_PAD_EPDC_DATA03__GPIO1_IO10 0x0070 0x0338 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_EPDC_DATA04__EPDC_DATA04 0x0074 0x033C 0x0000 0x0 0x0 |
||||
#define MX6SLL_PAD_EPDC_DATA04__ECSPI4_SS1 0x0074 0x033C 0x0660 0x1 0x1 |
||||
#define MX6SLL_PAD_EPDC_DATA04__LCD_DATA28 0x0074 0x033C 0x0000 0x2 0x0 |
||||
#define MX6SLL_PAD_EPDC_DATA04__CSI_DATA04 0x0074 0x033C 0x05D8 0x3 0x2 |
||||
#define MX6SLL_PAD_EPDC_DATA04__GPIO1_IO11 0x0074 0x033C 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_EPDC_DATA05__EPDC_DATA05 0x0078 0x0340 0x0000 0x0 0x0 |
||||
#define MX6SLL_PAD_EPDC_DATA05__ECSPI4_SS2 0x0078 0x0340 0x0664 0x1 0x1 |
||||
#define MX6SLL_PAD_EPDC_DATA05__LCD_DATA29 0x0078 0x0340 0x0000 0x2 0x0 |
||||
#define MX6SLL_PAD_EPDC_DATA05__CSI_DATA05 0x0078 0x0340 0x05DC 0x3 0x2 |
||||
#define MX6SLL_PAD_EPDC_DATA05__GPIO1_IO12 0x0078 0x0340 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_EPDC_DATA06__EPDC_DATA06 0x007C 0x0344 0x0000 0x0 0x0 |
||||
#define MX6SLL_PAD_EPDC_DATA06__ECSPI4_SS3 0x007C 0x0344 0x0000 0x1 0x0 |
||||
#define MX6SLL_PAD_EPDC_DATA06__LCD_DATA30 0x007C 0x0344 0x0000 0x2 0x0 |
||||
#define MX6SLL_PAD_EPDC_DATA06__CSI_DATA06 0x007C 0x0344 0x05E0 0x3 0x2 |
||||
#define MX6SLL_PAD_EPDC_DATA06__GPIO1_IO13 0x007C 0x0344 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_EPDC_DATA07__EPDC_DATA07 0x0080 0x0348 0x0000 0x0 0x0 |
||||
#define MX6SLL_PAD_EPDC_DATA07__ECSPI4_RDY 0x0080 0x0348 0x0000 0x1 0x0 |
||||
#define MX6SLL_PAD_EPDC_DATA07__LCD_DATA31 0x0080 0x0348 0x0000 0x2 0x0 |
||||
#define MX6SLL_PAD_EPDC_DATA07__CSI_DATA07 0x0080 0x0348 0x05E4 0x3 0x2 |
||||
#define MX6SLL_PAD_EPDC_DATA07__GPIO1_IO14 0x0080 0x0348 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_EPDC_DATA08__EPDC_DATA08 0x0084 0x034C 0x0000 0x0 0x0 |
||||
#define MX6SLL_PAD_EPDC_DATA08__ECSPI3_MOSI 0x0084 0x034C 0x063C 0x1 0x2 |
||||
#define MX6SLL_PAD_EPDC_DATA08__EPDC_PWR_CTRL0 0x0084 0x034C 0x0000 0x2 0x0 |
||||
#define MX6SLL_PAD_EPDC_DATA08__GPIO1_IO15 0x0084 0x034C 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_EPDC_DATA09__EPDC_DATA09 0x0088 0x0350 0x0000 0x0 0x0 |
||||
#define MX6SLL_PAD_EPDC_DATA09__ECSPI3_MISO 0x0088 0x0350 0x0638 0x1 0x2 |
||||
#define MX6SLL_PAD_EPDC_DATA09__EPDC_PWR_CTRL1 0x0088 0x0350 0x0000 0x2 0x0 |
||||
#define MX6SLL_PAD_EPDC_DATA09__GPIO1_IO16 0x0088 0x0350 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_EPDC_DATA10__EPDC_DATA10 0x008C 0x0354 0x0000 0x0 0x0 |
||||
#define MX6SLL_PAD_EPDC_DATA10__ECSPI3_SS0 0x008C 0x0354 0x0648 0x1 0x2 |
||||
#define MX6SLL_PAD_EPDC_DATA10__EPDC_PWR_CTRL2 0x008C 0x0354 0x0000 0x2 0x0 |
||||
#define MX6SLL_PAD_EPDC_DATA10__GPIO1_IO17 0x008C 0x0354 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_EPDC_DATA11__EPDC_DATA11 0x0090 0x0358 0x0000 0x0 0x0 |
||||
#define MX6SLL_PAD_EPDC_DATA11__ECSPI3_SCLK 0x0090 0x0358 0x0630 0x1 0x2 |
||||
#define MX6SLL_PAD_EPDC_DATA11__EPDC_PWR_CTRL3 0x0090 0x0358 0x0000 0x2 0x0 |
||||
#define MX6SLL_PAD_EPDC_DATA11__GPIO1_IO18 0x0090 0x0358 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_EPDC_DATA12__EPDC_DATA12 0x0094 0x035C 0x0000 0x0 0x0 |
||||
#define MX6SLL_PAD_EPDC_DATA12__UART2_DCE_RX 0x0094 0x035C 0x074C 0x1 0x4 |
||||
#define MX6SLL_PAD_EPDC_DATA12__UART2_DTE_TX 0x0094 0x035C 0x0000 0x1 0x0 |
||||
#define MX6SLL_PAD_EPDC_DATA12__EPDC_PWR_COM 0x0094 0x035C 0x0000 0x2 0x0 |
||||
#define MX6SLL_PAD_EPDC_DATA12__GPIO1_IO19 0x0094 0x035C 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_EPDC_DATA12__ECSPI3_SS1 0x0094 0x035C 0x064C 0x6 0x1 |
||||
#define MX6SLL_PAD_EPDC_DATA13__EPDC_DATA13 0x0098 0x0360 0x0000 0x0 0x0 |
||||
#define MX6SLL_PAD_EPDC_DATA13__UART2_DCE_TX 0x0098 0x0360 0x0000 0x1 0x0 |
||||
#define MX6SLL_PAD_EPDC_DATA13__UART2_DTE_RX 0x0098 0x0360 0x074C 0x1 0x5 |
||||
#define MX6SLL_PAD_EPDC_DATA13__EPDC_PWR_IRQ 0x0098 0x0360 0x0668 0x2 0x0 |
||||
#define MX6SLL_PAD_EPDC_DATA13__GPIO1_IO20 0x0098 0x0360 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_EPDC_DATA13__ECSPI3_SS2 0x0098 0x0360 0x0640 0x6 0x1 |
||||
#define MX6SLL_PAD_EPDC_DATA14__EPDC_DATA14 0x009C 0x0364 0x0000 0x0 0x0 |
||||
#define MX6SLL_PAD_EPDC_DATA14__UART2_DCE_RTS 0x009C 0x0364 0x0748 0x1 0x4 |
||||
#define MX6SLL_PAD_EPDC_DATA14__UART2_DTE_CTS 0x009C 0x0364 0x0000 0x1 0x0 |
||||
#define MX6SLL_PAD_EPDC_DATA14__EPDC_PWR_STAT 0x009C 0x0364 0x066C 0x2 0x0 |
||||
#define MX6SLL_PAD_EPDC_DATA14__GPIO1_IO21 0x009C 0x0364 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_EPDC_DATA14__ECSPI3_SS3 0x009C 0x0364 0x0644 0x6 0x1 |
||||
#define MX6SLL_PAD_EPDC_DATA15__EPDC_DATA15 0x00A0 0x0368 0x0000 0x0 0x0 |
||||
#define MX6SLL_PAD_EPDC_DATA15__UART2_DCE_CTS 0x00A0 0x0368 0x0000 0x1 0x0 |
||||
#define MX6SLL_PAD_EPDC_DATA15__UART2_DTE_RTS 0x00A0 0x0368 0x0748 0x1 0x5 |
||||
#define MX6SLL_PAD_EPDC_DATA15__EPDC_PWR_WAKE 0x00A0 0x0368 0x0000 0x2 0x0 |
||||
#define MX6SLL_PAD_EPDC_DATA15__GPIO1_IO22 0x00A0 0x0368 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_EPDC_DATA15__ECSPI3_RDY 0x00A0 0x0368 0x0634 0x6 0x1 |
||||
#define MX6SLL_PAD_EPDC_SDCLK__EPDC_SDCLK_P 0x00A4 0x036C 0x0000 0x0 0x0 |
||||
#define MX6SLL_PAD_EPDC_SDCLK__ECSPI2_MOSI 0x00A4 0x036C 0x0624 0x1 0x2 |
||||
#define MX6SLL_PAD_EPDC_SDCLK__I2C2_SCL 0x00A4 0x036C 0x0684 0x2 0x2 |
||||
#define MX6SLL_PAD_EPDC_SDCLK__CSI_DATA08 0x00A4 0x036C 0x05E8 0x3 0x2 |
||||
#define MX6SLL_PAD_EPDC_SDCLK__GPIO1_IO23 0x00A4 0x036C 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_EPDC_SDLE__EPDC_SDLE 0x00A8 0x0370 0x0000 0x0 0x0 |
||||
#define MX6SLL_PAD_EPDC_SDLE__ECSPI2_MISO 0x00A8 0x0370 0x0620 0x1 0x2 |
||||
#define MX6SLL_PAD_EPDC_SDLE__I2C2_SDA 0x00A8 0x0370 0x0688 0x2 0x2 |
||||
#define MX6SLL_PAD_EPDC_SDLE__CSI_DATA09 0x00A8 0x0370 0x05EC 0x3 0x2 |
||||
#define MX6SLL_PAD_EPDC_SDLE__GPIO1_IO24 0x00A8 0x0370 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_EPDC_SDOE__EPDC_SDOE 0x00AC 0x0374 0x0000 0x0 0x0 |
||||
#define MX6SLL_PAD_EPDC_SDOE__ECSPI2_SS0 0x00AC 0x0374 0x0628 0x1 0x1 |
||||
#define MX6SLL_PAD_EPDC_SDOE__CSI_DATA10 0x00AC 0x0374 0x05B0 0x3 0x2 |
||||
#define MX6SLL_PAD_EPDC_SDOE__GPIO1_IO25 0x00AC 0x0374 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_EPDC_SDSHR__EPDC_SDSHR 0x00B0 0x0378 0x0000 0x0 0x0 |
||||
#define MX6SLL_PAD_EPDC_SDSHR__ECSPI2_SCLK 0x00B0 0x0378 0x061C 0x1 0x2 |
||||
#define MX6SLL_PAD_EPDC_SDSHR__EPDC_SDCE4 0x00B0 0x0378 0x0000 0x2 0x0 |
||||
#define MX6SLL_PAD_EPDC_SDSHR__CSI_DATA11 0x00B0 0x0378 0x05B4 0x3 0x2 |
||||
#define MX6SLL_PAD_EPDC_SDSHR__GPIO1_IO26 0x00B0 0x0378 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_EPDC_SDCE0__EPDC_SDCE0 0x00B4 0x037C 0x0000 0x0 0x0 |
||||
#define MX6SLL_PAD_EPDC_SDCE0__ECSPI2_SS1 0x00B4 0x037C 0x062C 0x1 0x1 |
||||
#define MX6SLL_PAD_EPDC_SDCE0__PWM3_OUT 0x00B4 0x037C 0x0000 0x2 0x0 |
||||
#define MX6SLL_PAD_EPDC_SDCE0__GPIO1_IO27 0x00B4 0x037C 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_EPDC_SDCE1__EPDC_SDCE1 0x00B8 0x0380 0x0000 0x0 0x0 |
||||
#define MX6SLL_PAD_EPDC_SDCE1__WDOG2_B 0x00B8 0x0380 0x0000 0x1 0x0 |
||||
#define MX6SLL_PAD_EPDC_SDCE1__PWM4_OUT 0x00B8 0x0380 0x0000 0x2 0x0 |
||||
#define MX6SLL_PAD_EPDC_SDCE1__GPIO1_IO28 0x00B8 0x0380 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_EPDC_SDCE2__EPDC_SDCE2 0x00BC 0x0384 0x0000 0x0 0x0 |
||||
#define MX6SLL_PAD_EPDC_SDCE2__I2C3_SCL 0x00BC 0x0384 0x068C 0x1 0x2 |
||||
#define MX6SLL_PAD_EPDC_SDCE2__PWM1_OUT 0x00BC 0x0384 0x0000 0x2 0x0 |
||||
#define MX6SLL_PAD_EPDC_SDCE2__GPIO1_IO29 0x00BC 0x0384 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_EPDC_SDCE3__EPDC_SDCE3 0x00C0 0x0388 0x0000 0x0 0x0 |
||||
#define MX6SLL_PAD_EPDC_SDCE3__I2C3_SDA 0x00C0 0x0388 0x0690 0x1 0x2 |
||||
#define MX6SLL_PAD_EPDC_SDCE3__PWM2_OUT 0x00C0 0x0388 0x0000 0x2 0x0 |
||||
#define MX6SLL_PAD_EPDC_SDCE3__GPIO1_IO30 0x00C0 0x0388 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_EPDC_GDCLK__EPDC_GDCLK 0x00C4 0x038C 0x0000 0x0 0x0 |
||||
#define MX6SLL_PAD_EPDC_GDCLK__ECSPI2_SS2 0x00C4 0x038C 0x0000 0x1 0x0 |
||||
#define MX6SLL_PAD_EPDC_GDCLK__CSI_PIXCLK 0x00C4 0x038C 0x05F4 0x3 0x2 |
||||
#define MX6SLL_PAD_EPDC_GDCLK__GPIO1_IO31 0x00C4 0x038C 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_EPDC_GDCLK__SD2_RESET 0x00C4 0x038C 0x0000 0x6 0x0 |
||||
#define MX6SLL_PAD_EPDC_GDOE__EPDC_GDOE 0x00C8 0x0390 0x0000 0x0 0x0 |
||||
#define MX6SLL_PAD_EPDC_GDOE__ECSPI2_SS3 0x00C8 0x0390 0x0000 0x1 0x0 |
||||
#define MX6SLL_PAD_EPDC_GDOE__CSI_HSYNC 0x00C8 0x0390 0x05F0 0x3 0x2 |
||||
#define MX6SLL_PAD_EPDC_GDOE__GPIO2_IO00 0x00C8 0x0390 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_EPDC_GDOE__SD2_VSELECT 0x00C8 0x0390 0x0000 0x6 0x0 |
||||
#define MX6SLL_PAD_EPDC_GDRL__EPDC_GDRL 0x00CC 0x0394 0x0000 0x0 0x0 |
||||
#define MX6SLL_PAD_EPDC_GDRL__ECSPI2_RDY 0x00CC 0x0394 0x0000 0x1 0x0 |
||||
#define MX6SLL_PAD_EPDC_GDRL__CSI_MCLK 0x00CC 0x0394 0x0000 0x3 0x0 |
||||
#define MX6SLL_PAD_EPDC_GDRL__GPIO2_IO01 0x00CC 0x0394 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_EPDC_GDRL__SD2_WP 0x00CC 0x0394 0x077C 0x6 0x2 |
||||
#define MX6SLL_PAD_EPDC_GDSP__EPDC_GDSP 0x00D0 0x0398 0x0000 0x0 0x0 |
||||
#define MX6SLL_PAD_EPDC_GDSP__PWM4_OUT 0x00D0 0x0398 0x0000 0x1 0x0 |
||||
#define MX6SLL_PAD_EPDC_GDSP__CSI_VSYNC 0x00D0 0x0398 0x05F8 0x3 0x2 |
||||
#define MX6SLL_PAD_EPDC_GDSP__GPIO2_IO02 0x00D0 0x0398 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_EPDC_GDSP__SD2_CD_B 0x00D0 0x0398 0x0778 0x6 0x2 |
||||
#define MX6SLL_PAD_EPDC_VCOM0__EPDC_VCOM0 0x00D4 0x039C 0x0000 0x0 0x0 |
||||
#define MX6SLL_PAD_EPDC_VCOM0__AUD5_RXFS 0x00D4 0x039C 0x0588 0x1 0x1 |
||||
#define MX6SLL_PAD_EPDC_VCOM0__UART3_DCE_RX 0x00D4 0x039C 0x0754 0x2 0x4 |
||||
#define MX6SLL_PAD_EPDC_VCOM0__UART3_DTE_TX 0x00D4 0x039C 0x0000 0x2 0x0 |
||||
#define MX6SLL_PAD_EPDC_VCOM0__GPIO2_IO03 0x00D4 0x039C 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_EPDC_VCOM0__EPDC_SDCE5 0x00D4 0x039C 0x0000 0x6 0x0 |
||||
#define MX6SLL_PAD_EPDC_VCOM1__EPDC_VCOM1 0x00D8 0x03A0 0x0000 0x0 0x0 |
||||
#define MX6SLL_PAD_EPDC_VCOM1__AUD5_RXD 0x00D8 0x03A0 0x057C 0x1 0x1 |
||||
#define MX6SLL_PAD_EPDC_VCOM1__UART3_DCE_TX 0x00D8 0x03A0 0x0000 0x2 0x0 |
||||
#define MX6SLL_PAD_EPDC_VCOM1__UART3_DTE_RX 0x00D8 0x03A0 0x0754 0x2 0x5 |
||||
#define MX6SLL_PAD_EPDC_VCOM1__GPIO2_IO04 0x00D8 0x03A0 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_EPDC_VCOM1__EPDC_SDCE6 0x00D8 0x03A0 0x0000 0x6 0x0 |
||||
#define MX6SLL_PAD_EPDC_BDR0__EPDC_BDR0 0x00DC 0x03A4 0x0000 0x0 0x0 |
||||
#define MX6SLL_PAD_EPDC_BDR0__UART3_DCE_RTS 0x00DC 0x03A4 0x0750 0x2 0x2 |
||||
#define MX6SLL_PAD_EPDC_BDR0__UART3_DTE_CTS 0x00DC 0x03A4 0x0000 0x2 0x0 |
||||
#define MX6SLL_PAD_EPDC_BDR0__GPIO2_IO05 0x00DC 0x03A4 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_EPDC_BDR0__EPDC_SDCE7 0x00DC 0x03A4 0x0000 0x6 0x0 |
||||
#define MX6SLL_PAD_EPDC_BDR1__EPDC_BDR1 0x00E0 0x03A8 0x0000 0x0 0x0 |
||||
#define MX6SLL_PAD_EPDC_BDR1__UART3_DCE_CTS 0x00E0 0x03A8 0x0000 0x2 0x0 |
||||
#define MX6SLL_PAD_EPDC_BDR1__UART3_DTE_RTS 0x00E0 0x03A8 0x0750 0x2 0x3 |
||||
#define MX6SLL_PAD_EPDC_BDR1__GPIO2_IO06 0x00E0 0x03A8 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_EPDC_BDR1__EPDC_SDCE8 0x00E0 0x03A8 0x0000 0x6 0x0 |
||||
#define MX6SLL_PAD_EPDC_PWR_CTRL0__EPDC_PWR_CTRL0 0x00E4 0x03AC 0x0000 0x0 0x0 |
||||
#define MX6SLL_PAD_EPDC_PWR_CTRL0__AUD5_RXC 0x00E4 0x03AC 0x0584 0x1 0x1 |
||||
#define MX6SLL_PAD_EPDC_PWR_CTRL0__LCD_DATA16 0x00E4 0x03AC 0x0718 0x2 0x1 |
||||
#define MX6SLL_PAD_EPDC_PWR_CTRL0__GPIO2_IO07 0x00E4 0x03AC 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_EPDC_PWR_CTRL1__EPDC_PWR_CTRL1 0x00E8 0x03B0 0x0000 0x0 0x0 |
||||
#define MX6SLL_PAD_EPDC_PWR_CTRL1__AUD5_TXFS 0x00E8 0x03B0 0x0590 0x1 0x1 |
||||
#define MX6SLL_PAD_EPDC_PWR_CTRL1__LCD_DATA17 0x00E8 0x03B0 0x071C 0x2 0x1 |
||||
#define MX6SLL_PAD_EPDC_PWR_CTRL1__GPIO2_IO08 0x00E8 0x03B0 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_EPDC_PWR_CTRL2__EPDC_PWR_CTRL2 0x00EC 0x03B4 0x0000 0x0 0x0 |
||||
#define MX6SLL_PAD_EPDC_PWR_CTRL2__AUD5_TXD 0x00EC 0x03B4 0x0580 0x1 0x1 |
||||
#define MX6SLL_PAD_EPDC_PWR_CTRL2__LCD_DATA18 0x00EC 0x03B4 0x0720 0x2 0x1 |
||||
#define MX6SLL_PAD_EPDC_PWR_CTRL2__GPIO2_IO09 0x00EC 0x03B4 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_EPDC_PWR_CTRL3__EPDC_PWR_CTRL3 0x00F0 0x03B8 0x0000 0x0 0x0 |
||||
#define MX6SLL_PAD_EPDC_PWR_CTRL3__AUD5_TXC 0x00F0 0x03B8 0x058C 0x1 0x1 |
||||
#define MX6SLL_PAD_EPDC_PWR_CTRL3__LCD_DATA19 0x00F0 0x03B8 0x0724 0x2 0x1 |
||||
#define MX6SLL_PAD_EPDC_PWR_CTRL3__GPIO2_IO10 0x00F0 0x03B8 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_EPDC_PWR_COM__EPDC_PWR_COM 0x00F4 0x03BC 0x0000 0x0 0x0 |
||||
#define MX6SLL_PAD_EPDC_PWR_COM__LCD_DATA20 0x00F4 0x03BC 0x0728 0x2 0x1 |
||||
#define MX6SLL_PAD_EPDC_PWR_COM__USB_OTG1_ID 0x00F4 0x03BC 0x055C 0x4 0x4 |
||||
#define MX6SLL_PAD_EPDC_PWR_COM__GPIO2_IO11 0x00F4 0x03BC 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_EPDC_PWR_COM__SD3_RESET 0x00F4 0x03BC 0x0000 0x6 0x0 |
||||
#define MX6SLL_PAD_EPDC_PWR_IRQ__EPDC_PWR_IRQ 0x00F8 0x03C0 0x0668 0x0 0x1 |
||||
#define MX6SLL_PAD_EPDC_PWR_IRQ__LCD_DATA21 0x00F8 0x03C0 0x072C 0x2 0x1 |
||||
#define MX6SLL_PAD_EPDC_PWR_IRQ__USB_OTG2_ID 0x00F8 0x03C0 0x0560 0x4 0x3 |
||||
#define MX6SLL_PAD_EPDC_PWR_IRQ__GPIO2_IO12 0x00F8 0x03C0 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_EPDC_PWR_IRQ__SD3_VSELECT 0x00F8 0x03C0 0x0000 0x6 0x0 |
||||
#define MX6SLL_PAD_EPDC_PWR_STAT__EPDC_PWR_STAT 0x00FC 0x03C4 0x066C 0x0 0x1 |
||||
#define MX6SLL_PAD_EPDC_PWR_STAT__LCD_DATA22 0x00FC 0x03C4 0x0730 0x2 0x1 |
||||
#define MX6SLL_PAD_EPDC_PWR_STAT__ARM_EVENTI 0x00FC 0x03C4 0x0000 0x4 0x0 |
||||
#define MX6SLL_PAD_EPDC_PWR_STAT__GPIO2_IO13 0x00FC 0x03C4 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_EPDC_PWR_STAT__SD3_WP 0x00FC 0x03C4 0x0794 0x6 0x2 |
||||
#define MX6SLL_PAD_EPDC_PWR_WAKE__EPDC_PWR_WAKE 0x0100 0x03C8 0x0000 0x0 0x0 |
||||
#define MX6SLL_PAD_EPDC_PWR_WAKE__LCD_DATA23 0x0100 0x03C8 0x0734 0x2 0x1 |
||||
#define MX6SLL_PAD_EPDC_PWR_WAKE__ARM_EVENTO 0x0100 0x03C8 0x0000 0x4 0x0 |
||||
#define MX6SLL_PAD_EPDC_PWR_WAKE__GPIO2_IO14 0x0100 0x03C8 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_EPDC_PWR_WAKE__SD3_CD_B 0x0100 0x03C8 0x0780 0x6 0x2 |
||||
#define MX6SLL_PAD_LCD_CLK__LCD_CLK 0x0104 0x03CC 0x0000 0x0 0x0 |
||||
#define MX6SLL_PAD_LCD_CLK__LCD_WR_RWN 0x0104 0x03CC 0x0000 0x2 0x0 |
||||
#define MX6SLL_PAD_LCD_CLK__PWM4_OUT 0x0104 0x03CC 0x0000 0x4 0x0 |
||||
#define MX6SLL_PAD_LCD_CLK__GPIO2_IO15 0x0104 0x03CC 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_LCD_ENABLE__LCD_ENABLE 0x0108 0x03D0 0x0000 0x0 0x0 |
||||
#define MX6SLL_PAD_LCD_ENABLE__LCD_RD_E 0x0108 0x03D0 0x0000 0x2 0x0 |
||||
#define MX6SLL_PAD_LCD_ENABLE__UART2_DCE_RX 0x0108 0x03D0 0x0000 0x4 0x0 |
||||
#define MX6SLL_PAD_LCD_ENABLE__UART2_DTE_TX 0x0108 0x03D0 0x0000 0x4 0x0 |
||||
#define MX6SLL_PAD_LCD_ENABLE__GPIO2_IO16 0x0108 0x03D0 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_LCD_HSYNC__LCD_HSYNC 0x010C 0x03D4 0x06D4 0x0 0x0 |
||||
#define MX6SLL_PAD_LCD_HSYNC__LCD_CS 0x010C 0x03D4 0x0000 0x2 0x0 |
||||
#define MX6SLL_PAD_LCD_HSYNC__UART2_DCE_TX 0x010C 0x03D4 0x0000 0x4 0x0 |
||||
#define MX6SLL_PAD_LCD_HSYNC__UART2_DTE_RX 0x010C 0x03D4 0x074C 0x4 0x1 |
||||
#define MX6SLL_PAD_LCD_HSYNC__GPIO2_IO17 0x010C 0x03D4 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_LCD_HSYNC__ARM_TRACE_CLK 0x010C 0x03D4 0x0000 0x6 0x0 |
||||
#define MX6SLL_PAD_LCD_VSYNC__LCD_VSYNC 0x0110 0x03D8 0x0000 0x0 0x0 |
||||
#define MX6SLL_PAD_LCD_VSYNC__LCD_RS 0x0110 0x03D8 0x0000 0x2 0x0 |
||||
#define MX6SLL_PAD_LCD_VSYNC__UART2_DCE_RTS 0x0110 0x03D8 0x0748 0x4 0x0 |
||||
#define MX6SLL_PAD_LCD_VSYNC__UART2_DTE_CTS 0x0110 0x03D8 0x0000 0x4 0x0 |
||||
#define MX6SLL_PAD_LCD_VSYNC__GPIO2_IO18 0x0110 0x03D8 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_LCD_VSYNC__ARM_TRACE_CTL 0x0110 0x03D8 0x0000 0x6 0x0 |
||||
#define MX6SLL_PAD_LCD_RESET__LCD_RESET 0x0114 0x03DC 0x0000 0x0 0x0 |
||||
#define MX6SLL_PAD_LCD_RESET__LCD_BUSY 0x0114 0x03DC 0x06D4 0x2 0x1 |
||||
#define MX6SLL_PAD_LCD_RESET__UART2_DCE_CTS 0x0114 0x03DC 0x0000 0x4 0x0 |
||||
#define MX6SLL_PAD_LCD_RESET__UART2_DTE_RTS 0x0114 0x03DC 0x0748 0x4 0x1 |
||||
#define MX6SLL_PAD_LCD_RESET__GPIO2_IO19 0x0114 0x03DC 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_LCD_RESET__CCM_PMIC_READY 0x0114 0x03DC 0x05AC 0x6 0x2 |
||||
#define MX6SLL_PAD_LCD_DATA00__LCD_DATA00 0x0118 0x03E0 0x06D8 0x0 0x1 |
||||
#define MX6SLL_PAD_LCD_DATA00__ECSPI1_MOSI 0x0118 0x03E0 0x0608 0x1 0x0 |
||||
#define MX6SLL_PAD_LCD_DATA00__USB_OTG2_ID 0x0118 0x03E0 0x0560 0x2 0x2 |
||||
#define MX6SLL_PAD_LCD_DATA00__PWM1_OUT 0x0118 0x03E0 0x0000 0x3 0x0 |
||||
#define MX6SLL_PAD_LCD_DATA00__UART5_DTR_B 0x0118 0x03E0 0x0000 0x4 0x0 |
||||
#define MX6SLL_PAD_LCD_DATA00__GPIO2_IO20 0x0118 0x03E0 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_LCD_DATA00__ARM_TRACE00 0x0118 0x03E0 0x0000 0x6 0x0 |
||||
#define MX6SLL_PAD_LCD_DATA00__SRC_BOOT_CFG00 0x0118 0x03E0 0x0000 0x7 0x0 |
||||
#define MX6SLL_PAD_LCD_DATA01__LCD_DATA01 0x011C 0x03E4 0x06DC 0x0 0x1 |
||||
#define MX6SLL_PAD_LCD_DATA01__ECSPI1_MISO 0x011C 0x03E4 0x0604 0x1 0x0 |
||||
#define MX6SLL_PAD_LCD_DATA01__USB_OTG1_ID 0x011C 0x03E4 0x055C 0x2 0x3 |
||||
#define MX6SLL_PAD_LCD_DATA01__PWM2_OUT 0x011C 0x03E4 0x0000 0x3 0x0 |
||||
#define MX6SLL_PAD_LCD_DATA01__AUD4_RXFS 0x011C 0x03E4 0x0570 0x4 0x0 |
||||
#define MX6SLL_PAD_LCD_DATA01__GPIO2_IO21 0x011C 0x03E4 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_LCD_DATA01__ARM_TRACE01 0x011C 0x03E4 0x0000 0x6 0x0 |
||||
#define MX6SLL_PAD_LCD_DATA01__SRC_BOOT_CFG01 0x011C 0x03E4 0x0000 0x7 0x0 |
||||
#define MX6SLL_PAD_LCD_DATA02__LCD_DATA02 0x0120 0x03E8 0x06E0 0x0 0x1 |
||||
#define MX6SLL_PAD_LCD_DATA02__ECSPI1_SS0 0x0120 0x03E8 0x0614 0x1 0x0 |
||||
#define MX6SLL_PAD_LCD_DATA02__EPIT2_OUT 0x0120 0x03E8 0x0000 0x2 0x0 |
||||
#define MX6SLL_PAD_LCD_DATA02__PWM3_OUT 0x0120 0x03E8 0x0000 0x3 0x0 |
||||
#define MX6SLL_PAD_LCD_DATA02__AUD4_RXC 0x0120 0x03E8 0x056C 0x4 0x0 |
||||
#define MX6SLL_PAD_LCD_DATA02__GPIO2_IO22 0x0120 0x03E8 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_LCD_DATA02__ARM_TRACE02 0x0120 0x03E8 0x0000 0x6 0x0 |
||||
#define MX6SLL_PAD_LCD_DATA02__SRC_BOOT_CFG02 0x0120 0x03E8 0x0000 0x7 0x0 |
||||
#define MX6SLL_PAD_LCD_DATA03__LCD_DATA03 0x0124 0x03EC 0x06E4 0x0 0x1 |
||||
#define MX6SLL_PAD_LCD_DATA03__ECSPI1_SCLK 0x0124 0x03EC 0x05FC 0x1 0x0 |
||||
#define MX6SLL_PAD_LCD_DATA03__UART5_DSR_B 0x0124 0x03EC 0x0000 0x2 0x0 |
||||
#define MX6SLL_PAD_LCD_DATA03__PWM4_OUT 0x0124 0x03EC 0x0000 0x3 0x0 |
||||
#define MX6SLL_PAD_LCD_DATA03__AUD4_RXD 0x0124 0x03EC 0x0564 0x4 0x0 |
||||
#define MX6SLL_PAD_LCD_DATA03__GPIO2_IO23 0x0124 0x03EC 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_LCD_DATA03__ARM_TRACE03 0x0124 0x03EC 0x0000 0x6 0x0 |
||||
#define MX6SLL_PAD_LCD_DATA03__SRC_BOOT_CFG03 0x0124 0x03EC 0x0000 0x7 0x0 |
||||
#define MX6SLL_PAD_LCD_DATA04__LCD_DATA04 0x0128 0x03F0 0x06E8 0x0 0x1 |
||||
#define MX6SLL_PAD_LCD_DATA04__ECSPI1_SS1 0x0128 0x03F0 0x060C 0x1 0x1 |
||||
#define MX6SLL_PAD_LCD_DATA04__CSI_VSYNC 0x0128 0x03F0 0x05F8 0x2 0x0 |
||||
#define MX6SLL_PAD_LCD_DATA04__WDOG2_RESET_B_DEB 0x0128 0x03F0 0x0000 0x3 0x0 |
||||
#define MX6SLL_PAD_LCD_DATA04__AUD4_TXC 0x0128 0x03F0 0x0574 0x4 0x0 |
||||
#define MX6SLL_PAD_LCD_DATA04__GPIO2_IO24 0x0128 0x03F0 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_LCD_DATA04__ARM_TRACE04 0x0128 0x03F0 0x0000 0x6 0x0 |
||||
#define MX6SLL_PAD_LCD_DATA04__SRC_BOOT_CFG04 0x0128 0x03F0 0x0000 0x7 0x0 |
||||
#define MX6SLL_PAD_LCD_DATA05__LCD_DATA05 0x012C 0x03F4 0x06EC 0x0 0x1 |
||||
#define MX6SLL_PAD_LCD_DATA05__ECSPI1_SS2 0x012C 0x03F4 0x0610 0x1 0x1 |
||||
#define MX6SLL_PAD_LCD_DATA05__CSI_HSYNC 0x012C 0x03F4 0x05F0 0x2 0x0 |
||||
#define MX6SLL_PAD_LCD_DATA05__AUD4_TXFS 0x012C 0x03F4 0x0578 0x4 0x0 |
||||
#define MX6SLL_PAD_LCD_DATA05__GPIO2_IO25 0x012C 0x03F4 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_LCD_DATA05__ARM_TRACE05 0x012C 0x03F4 0x0000 0x6 0x0 |
||||
#define MX6SLL_PAD_LCD_DATA05__SRC_BOOT_CFG05 0x012C 0x03F4 0x0000 0x7 0x0 |
||||
#define MX6SLL_PAD_LCD_DATA06__LCD_DATA06 0x0130 0x03F8 0x06F0 0x0 0x1 |
||||
#define MX6SLL_PAD_LCD_DATA06__ECSPI1_SS3 0x0130 0x03F8 0x0618 0x1 0x0 |
||||
#define MX6SLL_PAD_LCD_DATA06__CSI_PIXCLK 0x0130 0x03F8 0x05F4 0x2 0x0 |
||||
#define MX6SLL_PAD_LCD_DATA06__AUD4_TXD 0x0130 0x03F8 0x0568 0x4 0x0 |
||||
#define MX6SLL_PAD_LCD_DATA06__GPIO2_IO26 0x0130 0x03F8 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_LCD_DATA06__ARM_TRACE06 0x0130 0x03F8 0x0000 0x6 0x0 |
||||
#define MX6SLL_PAD_LCD_DATA06__SRC_BOOT_CFG06 0x0130 0x03F8 0x0000 0x7 0x0 |
||||
#define MX6SLL_PAD_LCD_DATA07__LCD_DATA07 0x0134 0x03FC 0x06F4 0x0 0x0 |
||||
#define MX6SLL_PAD_LCD_DATA07__ECSPI1_RDY 0x0134 0x03FC 0x0600 0x1 0x0 |
||||
#define MX6SLL_PAD_LCD_DATA07__CSI_MCLK 0x0134 0x03FC 0x0000 0x2 0x0 |
||||
#define MX6SLL_PAD_LCD_DATA07__AUDIO_CLK_OUT 0x0134 0x03FC 0x0000 0x4 0x0 |
||||
#define MX6SLL_PAD_LCD_DATA07__GPIO2_IO27 0x0134 0x03FC 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_LCD_DATA07__ARM_TRACE07 0x0134 0x03FC 0x0000 0x6 0x0 |
||||
#define MX6SLL_PAD_LCD_DATA07__SRC_BOOT_CFG07 0x0134 0x03FC 0x0000 0x7 0x0 |
||||
#define MX6SLL_PAD_LCD_DATA08__LCD_DATA08 0x0138 0x0400 0x06F8 0x0 0x0 |
||||
#define MX6SLL_PAD_LCD_DATA08__KEY_COL0 0x0138 0x0400 0x06A0 0x1 0x1 |
||||
#define MX6SLL_PAD_LCD_DATA08__CSI_DATA09 0x0138 0x0400 0x05EC 0x2 0x0 |
||||
#define MX6SLL_PAD_LCD_DATA08__ECSPI2_SCLK 0x0138 0x0400 0x061C 0x4 0x0 |
||||
#define MX6SLL_PAD_LCD_DATA08__GPIO2_IO28 0x0138 0x0400 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_LCD_DATA08__ARM_TRACE08 0x0138 0x0400 0x0000 0x6 0x0 |
||||
#define MX6SLL_PAD_LCD_DATA08__SRC_BOOT_CFG08 0x0138 0x0400 0x0000 0x7 0x0 |
||||
#define MX6SLL_PAD_LCD_DATA09__LCD_DATA09 0x013C 0x0404 0x06FC 0x0 0x0 |
||||
#define MX6SLL_PAD_LCD_DATA09__KEY_ROW0 0x013C 0x0404 0x06C0 0x1 0x1 |
||||
#define MX6SLL_PAD_LCD_DATA09__CSI_DATA08 0x013C 0x0404 0x05E8 0x2 0x0 |
||||
#define MX6SLL_PAD_LCD_DATA09__ECSPI2_MOSI 0x013C 0x0404 0x0624 0x4 0x0 |
||||
#define MX6SLL_PAD_LCD_DATA09__GPIO2_IO29 0x013C 0x0404 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_LCD_DATA09__ARM_TRACE09 0x013C 0x0404 0x0000 0x6 0x0 |
||||
#define MX6SLL_PAD_LCD_DATA09__SRC_BOOT_CFG09 0x013C 0x0404 0x0000 0x7 0x0 |
||||
#define MX6SLL_PAD_LCD_DATA10__LCD_DATA10 0x0140 0x0408 0x0700 0x0 0x1 |
||||
#define MX6SLL_PAD_LCD_DATA10__KEY_COL1 0x0140 0x0408 0x06A4 0x1 0x1 |
||||
#define MX6SLL_PAD_LCD_DATA10__CSI_DATA07 0x0140 0x0408 0x05E4 0x2 0x0 |
||||
#define MX6SLL_PAD_LCD_DATA10__ECSPI2_MISO 0x0140 0x0408 0x0620 0x4 0x0 |
||||
#define MX6SLL_PAD_LCD_DATA10__GPIO2_IO30 0x0140 0x0408 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_LCD_DATA10__ARM_TRACE10 0x0140 0x0408 0x0000 0x6 0x0 |
||||
#define MX6SLL_PAD_LCD_DATA10__SRC_BOOT_CFG10 0x0140 0x0408 0x0000 0x7 0x0 |
||||
#define MX6SLL_PAD_LCD_DATA11__LCD_DATA11 0x0144 0x040C 0x0704 0x0 0x0 |
||||
#define MX6SLL_PAD_LCD_DATA11__KEY_ROW1 0x0144 0x040C 0x06C4 0x1 0x1 |
||||
#define MX6SLL_PAD_LCD_DATA11__CSI_DATA06 0x0144 0x040C 0x05E0 0x2 0x0 |
||||
#define MX6SLL_PAD_LCD_DATA11__ECSPI2_SS1 0x0144 0x040C 0x062C 0x4 0x0 |
||||
#define MX6SLL_PAD_LCD_DATA11__GPIO2_IO31 0x0144 0x040C 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_LCD_DATA11__ARM_TRACE11 0x0144 0x040C 0x0000 0x6 0x0 |
||||
#define MX6SLL_PAD_LCD_DATA11__SRC_BOOT_CFG11 0x0144 0x040C 0x0000 0x7 0x0 |
||||
#define MX6SLL_PAD_LCD_DATA12__LCD_DATA12 0x0148 0x0410 0x0708 0x0 0x0 |
||||
#define MX6SLL_PAD_LCD_DATA12__KEY_COL2 0x0148 0x0410 0x06A8 0x1 0x1 |
||||
#define MX6SLL_PAD_LCD_DATA12__CSI_DATA05 0x0148 0x0410 0x05DC 0x2 0x0 |
||||
#define MX6SLL_PAD_LCD_DATA12__UART5_DCE_RTS 0x0148 0x0410 0x0760 0x4 0x0 |
||||
#define MX6SLL_PAD_LCD_DATA12__UART5_DTE_CTS 0x0148 0x0410 0x0000 0x4 0x0 |
||||
#define MX6SLL_PAD_LCD_DATA12__GPIO3_IO00 0x0148 0x0410 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_LCD_DATA12__ARM_TRACE12 0x0148 0x0410 0x0000 0x6 0x0 |
||||
#define MX6SLL_PAD_LCD_DATA12__SRC_BOOT_CFG12 0x0148 0x0410 0x0000 0x7 0x0 |
||||
#define MX6SLL_PAD_LCD_DATA13__LCD_DATA13 0x014C 0x0414 0x070C 0x0 0x0 |
||||
#define MX6SLL_PAD_LCD_DATA13__KEY_ROW2 0x014C 0x0414 0x06C8 0x1 0x1 |
||||
#define MX6SLL_PAD_LCD_DATA13__CSI_DATA04 0x014C 0x0414 0x05D8 0x2 0x0 |
||||
#define MX6SLL_PAD_LCD_DATA13__UART5_DCE_CTS 0x014C 0x0414 0x0000 0x4 0x0 |
||||
#define MX6SLL_PAD_LCD_DATA13__UART5_DTE_RTS 0x014C 0x0414 0x0760 0x4 0x1 |
||||
#define MX6SLL_PAD_LCD_DATA13__GPIO3_IO01 0x014C 0x0414 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_LCD_DATA13__ARM_TRACE13 0x014C 0x0414 0x0000 0x6 0x0 |
||||
#define MX6SLL_PAD_LCD_DATA13__SRC_BOOT_CFG13 0x014C 0x0414 0x0000 0x7 0x0 |
||||
#define MX6SLL_PAD_LCD_DATA14__LCD_DATA14 0x0150 0x0418 0x0710 0x0 0x0 |
||||
#define MX6SLL_PAD_LCD_DATA14__KEY_COL3 0x0150 0x0418 0x06AC 0x1 0x1 |
||||
#define MX6SLL_PAD_LCD_DATA14__CSI_DATA03 0x0150 0x0418 0x05D4 0x2 0x0 |
||||
#define MX6SLL_PAD_LCD_DATA14__UART5_DCE_RX 0x0150 0x0418 0x0764 0x4 0x0 |
||||
#define MX6SLL_PAD_LCD_DATA14__UART5_DTE_TX 0x0150 0x0418 0x0000 0x4 0x0 |
||||
#define MX6SLL_PAD_LCD_DATA14__GPIO3_IO02 0x0150 0x0418 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_LCD_DATA14__ARM_TRACE14 0x0150 0x0418 0x0000 0x6 0x0 |
||||
#define MX6SLL_PAD_LCD_DATA14__SRC_BOOT_CFG14 0x0150 0x0418 0x0000 0x7 0x0 |
||||
#define MX6SLL_PAD_LCD_DATA15__LCD_DATA15 0x0154 0x041C 0x0714 0x0 0x0 |
||||
#define MX6SLL_PAD_LCD_DATA15__KEY_ROW3 0x0154 0x041C 0x06CC 0x1 0x0 |
||||
#define MX6SLL_PAD_LCD_DATA15__CSI_DATA02 0x0154 0x041C 0x05D0 0x2 0x0 |
||||
#define MX6SLL_PAD_LCD_DATA15__UART5_DCE_TX 0x0154 0x041C 0x0000 0x4 0x0 |
||||
#define MX6SLL_PAD_LCD_DATA15__UART5_DTE_RX 0x0154 0x041C 0x0764 0x4 0x1 |
||||
#define MX6SLL_PAD_LCD_DATA15__GPIO3_IO03 0x0154 0x041C 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_LCD_DATA15__ARM_TRACE15 0x0154 0x041C 0x0000 0x6 0x0 |
||||
#define MX6SLL_PAD_LCD_DATA15__SRC_BOOT_CFG15 0x0154 0x041C 0x0000 0x7 0x0 |
||||
#define MX6SLL_PAD_LCD_DATA16__LCD_DATA16 0x0158 0x0420 0x0718 0x0 0x0 |
||||
#define MX6SLL_PAD_LCD_DATA16__KEY_COL4 0x0158 0x0420 0x06B0 0x1 0x0 |
||||
#define MX6SLL_PAD_LCD_DATA16__CSI_DATA01 0x0158 0x0420 0x05CC 0x2 0x0 |
||||
#define MX6SLL_PAD_LCD_DATA16__I2C2_SCL 0x0158 0x0420 0x0684 0x4 0x1 |
||||
#define MX6SLL_PAD_LCD_DATA16__GPIO3_IO04 0x0158 0x0420 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_LCD_DATA16__SRC_BOOT_CFG24 0x0158 0x0420 0x0000 0x7 0x0 |
||||
#define MX6SLL_PAD_LCD_DATA17__LCD_DATA17 0x015C 0x0424 0x071C 0x0 0x0 |
||||
#define MX6SLL_PAD_LCD_DATA17__KEY_ROW4 0x015C 0x0424 0x06D0 0x1 0x0 |
||||
#define MX6SLL_PAD_LCD_DATA17__CSI_DATA00 0x015C 0x0424 0x05C8 0x2 0x0 |
||||
#define MX6SLL_PAD_LCD_DATA17__I2C2_SDA 0x015C 0x0424 0x0688 0x4 0x1 |
||||
#define MX6SLL_PAD_LCD_DATA17__GPIO3_IO05 0x015C 0x0424 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_LCD_DATA17__SRC_BOOT_CFG25 0x015C 0x0424 0x0000 0x7 0x0 |
||||
#define MX6SLL_PAD_LCD_DATA18__LCD_DATA18 0x0160 0x0428 0x0720 0x0 0x0 |
||||
#define MX6SLL_PAD_LCD_DATA18__KEY_COL5 0x0160 0x0428 0x0694 0x1 0x2 |
||||
#define MX6SLL_PAD_LCD_DATA18__CSI_DATA15 0x0160 0x0428 0x05C4 0x2 0x1 |
||||
#define MX6SLL_PAD_LCD_DATA18__GPT_CAPTURE1 0x0160 0x0428 0x0670 0x4 0x1 |
||||
#define MX6SLL_PAD_LCD_DATA18__GPIO3_IO06 0x0160 0x0428 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_LCD_DATA18__SRC_BOOT_CFG26 0x0160 0x0428 0x0000 0x7 0x0 |
||||
#define MX6SLL_PAD_LCD_DATA19__LCD_DATA19 0x0164 0x042C 0x0724 0x0 0x0 |
||||
#define MX6SLL_PAD_LCD_DATA19__KEY_ROW5 0x0164 0x042C 0x06B4 0x1 0x1 |
||||
#define MX6SLL_PAD_LCD_DATA19__CSI_DATA14 0x0164 0x042C 0x05C0 0x2 0x2 |
||||
#define MX6SLL_PAD_LCD_DATA19__GPT_CAPTURE2 0x0164 0x042C 0x0674 0x4 0x1 |
||||
#define MX6SLL_PAD_LCD_DATA19__GPIO3_IO07 0x0164 0x042C 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_LCD_DATA19__SRC_BOOT_CFG27 0x0164 0x042C 0x0000 0x7 0x0 |
||||
#define MX6SLL_PAD_LCD_DATA20__LCD_DATA20 0x0168 0x0430 0x0728 0x0 0x0 |
||||
#define MX6SLL_PAD_LCD_DATA20__KEY_COL6 0x0168 0x0430 0x0698 0x1 0x1 |
||||
#define MX6SLL_PAD_LCD_DATA20__CSI_DATA13 0x0168 0x0430 0x05BC 0x2 0x2 |
||||
#define MX6SLL_PAD_LCD_DATA20__GPT_COMPARE1 0x0168 0x0430 0x0000 0x4 0x0 |
||||
#define MX6SLL_PAD_LCD_DATA20__GPIO3_IO08 0x0168 0x0430 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_LCD_DATA20__SRC_BOOT_CFG28 0x0168 0x0430 0x0000 0x7 0x0 |
||||
#define MX6SLL_PAD_LCD_DATA21__LCD_DATA21 0x016C 0x0434 0x072C 0x0 0x0 |
||||
#define MX6SLL_PAD_LCD_DATA21__KEY_ROW6 0x016C 0x0434 0x06B8 0x1 0x1 |
||||
#define MX6SLL_PAD_LCD_DATA21__CSI_DATA12 0x016C 0x0434 0x05B8 0x2 0x2 |
||||
#define MX6SLL_PAD_LCD_DATA21__GPT_COMPARE2 0x016C 0x0434 0x0000 0x4 0x0 |
||||
#define MX6SLL_PAD_LCD_DATA21__GPIO3_IO09 0x016C 0x0434 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_LCD_DATA21__SRC_BOOT_CFG29 0x016C 0x0434 0x0000 0x7 0x0 |
||||
#define MX6SLL_PAD_LCD_DATA22__LCD_DATA22 0x0170 0x0438 0x0730 0x0 0x0 |
||||
#define MX6SLL_PAD_LCD_DATA22__KEY_COL7 0x0170 0x0438 0x069C 0x1 0x1 |
||||
#define MX6SLL_PAD_LCD_DATA22__CSI_DATA11 0x0170 0x0438 0x05B4 0x2 0x1 |
||||
#define MX6SLL_PAD_LCD_DATA22__GPT_COMPARE3 0x0170 0x0438 0x0000 0x4 0x0 |
||||
#define MX6SLL_PAD_LCD_DATA22__GPIO3_IO10 0x0170 0x0438 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_LCD_DATA22__SRC_BOOT_CFG30 0x0170 0x0438 0x0000 0x7 0x0 |
||||
#define MX6SLL_PAD_LCD_DATA23__LCD_DATA23 0x0174 0x043C 0x0734 0x0 0x0 |
||||
#define MX6SLL_PAD_LCD_DATA23__KEY_ROW7 0x0174 0x043C 0x06BC 0x1 0x1 |
||||
#define MX6SLL_PAD_LCD_DATA23__CSI_DATA10 0x0174 0x043C 0x05B0 0x2 0x1 |
||||
#define MX6SLL_PAD_LCD_DATA23__GPT_CLKIN 0x0174 0x043C 0x0678 0x4 0x1 |
||||
#define MX6SLL_PAD_LCD_DATA23__GPIO3_IO11 0x0174 0x043C 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_LCD_DATA23__SRC_BOOT_CFG31 0x0174 0x043C 0x0000 0x7 0x0 |
||||
#define MX6SLL_PAD_AUD_RXFS__AUD3_RXFS 0x0178 0x0440 0x0000 0x0 0x0 |
||||
#define MX6SLL_PAD_AUD_RXFS__I2C1_SCL 0x0178 0x0440 0x067C 0x1 0x1 |
||||
#define MX6SLL_PAD_AUD_RXFS__UART3_DCE_RX 0x0178 0x0440 0x0754 0x2 0x0 |
||||
#define MX6SLL_PAD_AUD_RXFS__UART3_DTE_TX 0x0178 0x0440 0x0000 0x2 0x0 |
||||
#define MX6SLL_PAD_AUD_RXFS__I2C3_SCL 0x0178 0x0440 0x068C 0x4 0x1 |
||||
#define MX6SLL_PAD_AUD_RXFS__GPIO1_IO00 0x0178 0x0440 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_AUD_RXFS__ECSPI3_SS0 0x0178 0x0440 0x0648 0x6 0x0 |
||||
#define MX6SLL_PAD_AUD_RXFS__MBIST_BEND 0x0178 0x0440 0x0000 0x7 0x0 |
||||
#define MX6SLL_PAD_AUD_RXC__AUD3_RXC 0x017C 0x0444 0x0000 0x0 0x0 |
||||
#define MX6SLL_PAD_AUD_RXC__I2C1_SDA 0x017C 0x0444 0x0680 0x1 0x1 |
||||
#define MX6SLL_PAD_AUD_RXC__UART3_DCE_TX 0x017C 0x0444 0x0000 0x2 0x0 |
||||
#define MX6SLL_PAD_AUD_RXC__UART3_DTE_RX 0x017C 0x0444 0x0754 0x2 0x1 |
||||
#define MX6SLL_PAD_AUD_RXC__I2C3_SDA 0x017C 0x0444 0x0690 0x4 0x1 |
||||
#define MX6SLL_PAD_AUD_RXC__GPIO1_IO01 0x017C 0x0444 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_AUD_RXC__ECSPI3_SS1 0x017C 0x0444 0x064C 0x6 0x0 |
||||
#define MX6SLL_PAD_AUD_RXD__AUD3_RXD 0x0180 0x0448 0x0000 0x0 0x0 |
||||
#define MX6SLL_PAD_AUD_RXD__ECSPI3_MOSI 0x0180 0x0448 0x063C 0x1 0x0 |
||||
#define MX6SLL_PAD_AUD_RXD__UART4_DCE_RX 0x0180 0x0448 0x075C 0x2 0x0 |
||||
#define MX6SLL_PAD_AUD_RXD__UART4_DTE_TX 0x0180 0x0448 0x0000 0x2 0x0 |
||||
#define MX6SLL_PAD_AUD_RXD__SD1_LCTL 0x0180 0x0448 0x0000 0x4 0x0 |
||||
#define MX6SLL_PAD_AUD_RXD__GPIO1_IO02 0x0180 0x0448 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_AUD_TXC__AUD3_TXC 0x0184 0x044C 0x0000 0x0 0x0 |
||||
#define MX6SLL_PAD_AUD_TXC__ECSPI3_MISO 0x0184 0x044C 0x0638 0x1 0x0 |
||||
#define MX6SLL_PAD_AUD_TXC__UART4_DCE_TX 0x0184 0x044C 0x0000 0x2 0x0 |
||||
#define MX6SLL_PAD_AUD_TXC__UART4_DTE_RX 0x0184 0x044C 0x075C 0x2 0x1 |
||||
#define MX6SLL_PAD_AUD_TXC__SD2_LCTL 0x0184 0x044C 0x0000 0x4 0x0 |
||||
#define MX6SLL_PAD_AUD_TXC__GPIO1_IO03 0x0184 0x044C 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_AUD_TXFS__AUD3_TXFS 0x0188 0x0450 0x0000 0x0 0x0 |
||||
#define MX6SLL_PAD_AUD_TXFS__PWM3_OUT 0x0188 0x0450 0x0000 0x1 0x0 |
||||
#define MX6SLL_PAD_AUD_TXFS__UART4_DCE_RTS 0x0188 0x0450 0x0758 0x2 0x0 |
||||
#define MX6SLL_PAD_AUD_TXFS__UART4_DTE_CTS 0x0188 0x0450 0x0000 0x2 0x0 |
||||
#define MX6SLL_PAD_AUD_TXFS__SD3_LCTL 0x0188 0x0450 0x0000 0x4 0x0 |
||||
#define MX6SLL_PAD_AUD_TXFS__GPIO1_IO04 0x0188 0x0450 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_AUD_TXD__AUD3_TXD 0x018C 0x0454 0x0000 0x0 0x0 |
||||
#define MX6SLL_PAD_AUD_TXD__ECSPI3_SCLK 0x018C 0x0454 0x0630 0x1 0x0 |
||||
#define MX6SLL_PAD_AUD_TXD__UART4_DCE_CTS 0x018C 0x0454 0x0000 0x2 0x0 |
||||
#define MX6SLL_PAD_AUD_TXD__UART4_DTE_RTS 0x018C 0x0454 0x0758 0x2 0x1 |
||||
#define MX6SLL_PAD_AUD_TXD__GPIO1_IO05 0x018C 0x0454 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_AUD_MCLK__AUDIO_CLK_OUT 0x0190 0x0458 0x0000 0x0 0x0 |
||||
#define MX6SLL_PAD_AUD_MCLK__PWM4_OUT 0x0190 0x0458 0x0000 0x1 0x0 |
||||
#define MX6SLL_PAD_AUD_MCLK__ECSPI3_RDY 0x0190 0x0458 0x0634 0x2 0x0 |
||||
#define MX6SLL_PAD_AUD_MCLK__WDOG2_RESET_B_DEB 0x0190 0x0458 0x0000 0x4 0x0 |
||||
#define MX6SLL_PAD_AUD_MCLK__GPIO1_IO06 0x0190 0x0458 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_AUD_MCLK__SPDIF_EXT_CLK 0x0190 0x0458 0x073C 0x6 0x1 |
||||
#define MX6SLL_PAD_UART1_RXD__UART1_DCE_RX 0x0194 0x045C 0x0744 0x0 0x0 |
||||
#define MX6SLL_PAD_UART1_RXD__UART1_DTE_TX 0x0194 0x045C 0x0000 0x0 0x0 |
||||
#define MX6SLL_PAD_UART1_RXD__PWM1_OUT 0x0194 0x045C 0x0000 0x1 0x0 |
||||
#define MX6SLL_PAD_UART1_RXD__UART4_DCE_RX 0x0194 0x045C 0x075C 0x2 0x4 |
||||
#define MX6SLL_PAD_UART1_RXD__UART4_DTE_TX 0x0194 0x045C 0x0000 0x2 0x0 |
||||
#define MX6SLL_PAD_UART1_RXD__UART5_DCE_RX 0x0194 0x045C 0x0764 0x4 0x6 |
||||
#define MX6SLL_PAD_UART1_RXD__UART5_DTE_TX 0x0194 0x045C 0x0000 0x4 0x0 |
||||
#define MX6SLL_PAD_UART1_RXD__GPIO3_IO16 0x0194 0x045C 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_UART1_TXD__UART1_DCE_TX 0x0198 0x0460 0x0000 0x0 0x0 |
||||
#define MX6SLL_PAD_UART1_TXD__UART1_DTE_RX 0x0198 0x0460 0x0744 0x0 0x1 |
||||
#define MX6SLL_PAD_UART1_TXD__PWM2_OUT 0x0198 0x0460 0x0000 0x1 0x0 |
||||
#define MX6SLL_PAD_UART1_TXD__UART4_DCE_TX 0x0198 0x0460 0x0000 0x2 0x0 |
||||
#define MX6SLL_PAD_UART1_TXD__UART4_DTE_RX 0x0198 0x0460 0x075C 0x2 0x5 |
||||
#define MX6SLL_PAD_UART1_TXD__UART5_DCE_TX 0x0198 0x0460 0x0000 0x4 0x0 |
||||
#define MX6SLL_PAD_UART1_TXD__UART5_DTE_RX 0x0198 0x0460 0x0764 0x4 0x7 |
||||
#define MX6SLL_PAD_UART1_TXD__GPIO3_IO17 0x0198 0x0460 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_UART1_TXD__UART5_DCD_B 0x0198 0x0460 0x0000 0x7 0x0 |
||||
#define MX6SLL_PAD_I2C1_SCL__I2C1_SCL 0x019C 0x0464 0x067C 0x0 0x0 |
||||
#define MX6SLL_PAD_I2C1_SCL__UART1_DCE_RTS 0x019C 0x0464 0x0740 0x1 0x0 |
||||
#define MX6SLL_PAD_I2C1_SCL__UART1_DTE_CTS 0x019C 0x0464 0x0000 0x1 0x0 |
||||
#define MX6SLL_PAD_I2C1_SCL__ECSPI3_SS2 0x019C 0x0464 0x0640 0x2 0x0 |
||||
#define MX6SLL_PAD_I2C1_SCL__SD3_RESET 0x019C 0x0464 0x0000 0x4 0x0 |
||||
#define MX6SLL_PAD_I2C1_SCL__GPIO3_IO12 0x019C 0x0464 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_I2C1_SCL__ECSPI1_SS1 0x019C 0x0464 0x060C 0x6 0x0 |
||||
#define MX6SLL_PAD_I2C1_SDA__I2C1_SDA 0x01A0 0x0468 0x0680 0x0 0x0 |
||||
#define MX6SLL_PAD_I2C1_SDA__UART1_DCE_CTS 0x01A0 0x0468 0x0000 0x1 0x0 |
||||
#define MX6SLL_PAD_I2C1_SDA__UART1_DTE_RTS 0x01A0 0x0468 0x0740 0x1 0x1 |
||||
#define MX6SLL_PAD_I2C1_SDA__ECSPI3_SS3 0x01A0 0x0468 0x0644 0x2 0x0 |
||||
#define MX6SLL_PAD_I2C1_SDA__SD3_VSELECT 0x01A0 0x0468 0x0000 0x4 0x0 |
||||
#define MX6SLL_PAD_I2C1_SDA__GPIO3_IO13 0x01A0 0x0468 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_I2C1_SDA__ECSPI1_SS2 0x01A0 0x0468 0x0610 0x6 0x0 |
||||
#define MX6SLL_PAD_I2C2_SCL__I2C2_SCL 0x01A4 0x046C 0x0684 0x0 0x3 |
||||
#define MX6SLL_PAD_I2C2_SCL__AUD4_RXFS 0x01A4 0x046C 0x0570 0x1 0x2 |
||||
#define MX6SLL_PAD_I2C2_SCL__SPDIF_IN 0x01A4 0x046C 0x0738 0x2 0x2 |
||||
#define MX6SLL_PAD_I2C2_SCL__SD3_WP 0x01A4 0x046C 0x0794 0x4 0x3 |
||||
#define MX6SLL_PAD_I2C2_SCL__GPIO3_IO14 0x01A4 0x046C 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_I2C2_SCL__ECSPI1_RDY 0x01A4 0x046C 0x0600 0x6 0x1 |
||||
#define MX6SLL_PAD_I2C2_SDA__I2C2_SDA 0x01A8 0x0470 0x0688 0x0 0x3 |
||||
#define MX6SLL_PAD_I2C2_SDA__AUD4_RXC 0x01A8 0x0470 0x056C 0x1 0x2 |
||||
#define MX6SLL_PAD_I2C2_SDA__SPDIF_OUT 0x01A8 0x0470 0x0000 0x2 0x0 |
||||
#define MX6SLL_PAD_I2C2_SDA__SD3_CD_B 0x01A8 0x0470 0x0780 0x4 0x3 |
||||
#define MX6SLL_PAD_I2C2_SDA__GPIO3_IO15 0x01A8 0x0470 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_ECSPI1_SCLK__ECSPI1_SCLK 0x01AC 0x0474 0x05FC 0x0 0x1 |
||||
#define MX6SLL_PAD_ECSPI1_SCLK__AUD4_TXD 0x01AC 0x0474 0x0568 0x1 0x1 |
||||
#define MX6SLL_PAD_ECSPI1_SCLK__UART5_DCE_RX 0x01AC 0x0474 0x0764 0x2 0x2 |
||||
#define MX6SLL_PAD_ECSPI1_SCLK__UART5_DTE_TX 0x01AC 0x0474 0x0000 0x2 0x0 |
||||
#define MX6SLL_PAD_ECSPI1_SCLK__EPDC_VCOM0 0x01AC 0x0474 0x0000 0x3 0x0 |
||||
#define MX6SLL_PAD_ECSPI1_SCLK__SD2_RESET 0x01AC 0x0474 0x0000 0x4 0x0 |
||||
#define MX6SLL_PAD_ECSPI1_SCLK__GPIO4_IO08 0x01AC 0x0474 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_ECSPI1_SCLK__USB_OTG2_OC 0x01AC 0x0474 0x0768 0x6 0x1 |
||||
#define MX6SLL_PAD_ECSPI1_MOSI__ECSPI1_MOSI 0x01B0 0x0478 0x0608 0x0 0x1 |
||||
#define MX6SLL_PAD_ECSPI1_MOSI__AUD4_TXC 0x01B0 0x0478 0x0574 0x1 0x1 |
||||
#define MX6SLL_PAD_ECSPI1_MOSI__UART5_DCE_TX 0x01B0 0x0478 0x0000 0x2 0x0 |
||||
#define MX6SLL_PAD_ECSPI1_MOSI__UART5_DTE_RX 0x01B0 0x0478 0x0764 0x2 0x3 |
||||
#define MX6SLL_PAD_ECSPI1_MOSI__EPDC_VCOM1 0x01B0 0x0478 0x0000 0x3 0x0 |
||||
#define MX6SLL_PAD_ECSPI1_MOSI__SD2_VSELECT 0x01B0 0x0478 0x0000 0x4 0x0 |
||||
#define MX6SLL_PAD_ECSPI1_MOSI__GPIO4_IO09 0x01B0 0x0478 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_ECSPI1_MISO__ECSPI1_MISO 0x01B4 0x047C 0x0604 0x0 0x1 |
||||
#define MX6SLL_PAD_ECSPI1_MISO__AUD4_TXFS 0x01B4 0x047C 0x0578 0x1 0x1 |
||||
#define MX6SLL_PAD_ECSPI1_MISO__UART5_DCE_RTS 0x01B4 0x047C 0x0760 0x2 0x2 |
||||
#define MX6SLL_PAD_ECSPI1_MISO__UART5_DTE_CTS 0x01B4 0x047C 0x0000 0x2 0x0 |
||||
#define MX6SLL_PAD_ECSPI1_MISO__EPDC_BDR0 0x01B4 0x047C 0x0000 0x3 0x0 |
||||
#define MX6SLL_PAD_ECSPI1_MISO__SD2_WP 0x01B4 0x047C 0x077C 0x4 0x0 |
||||
#define MX6SLL_PAD_ECSPI1_MISO__GPIO4_IO10 0x01B4 0x047C 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_ECSPI1_SS0__ECSPI1_SS0 0x01B8 0x0480 0x0614 0x0 0x1 |
||||
#define MX6SLL_PAD_ECSPI1_SS0__AUD4_RXD 0x01B8 0x0480 0x0564 0x1 0x1 |
||||
#define MX6SLL_PAD_ECSPI1_SS0__UART5_DCE_CTS 0x01B8 0x0480 0x0000 0x2 0x0 |
||||
#define MX6SLL_PAD_ECSPI1_SS0__UART5_DTE_RTS 0x01B8 0x0480 0x0760 0x2 0x3 |
||||
#define MX6SLL_PAD_ECSPI1_SS0__EPDC_BDR1 0x01B8 0x0480 0x0000 0x3 0x0 |
||||
#define MX6SLL_PAD_ECSPI1_SS0__SD2_CD_B 0x01B8 0x0480 0x0778 0x4 0x0 |
||||
#define MX6SLL_PAD_ECSPI1_SS0__GPIO4_IO11 0x01B8 0x0480 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_ECSPI1_SS0__USB_OTG2_PWR 0x01B8 0x0480 0x0000 0x6 0x0 |
||||
#define MX6SLL_PAD_ECSPI2_SCLK__ECSPI2_SCLK 0x01BC 0x0484 0x061C 0x0 0x1 |
||||
#define MX6SLL_PAD_ECSPI2_SCLK__SPDIF_EXT_CLK 0x01BC 0x0484 0x073C 0x1 0x2 |
||||
#define MX6SLL_PAD_ECSPI2_SCLK__UART3_DCE_RX 0x01BC 0x0484 0x0754 0x2 0x2 |
||||
#define MX6SLL_PAD_ECSPI2_SCLK__UART3_DTE_TX 0x01BC 0x0484 0x0000 0x2 0x0 |
||||
#define MX6SLL_PAD_ECSPI2_SCLK__CSI_PIXCLK 0x01BC 0x0484 0x05F4 0x3 0x1 |
||||
#define MX6SLL_PAD_ECSPI2_SCLK__SD1_RESET 0x01BC 0x0484 0x0000 0x4 0x0 |
||||
#define MX6SLL_PAD_ECSPI2_SCLK__GPIO4_IO12 0x01BC 0x0484 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_ECSPI2_SCLK__USB_OTG2_OC 0x01BC 0x0484 0x0768 0x6 0x2 |
||||
#define MX6SLL_PAD_ECSPI2_MOSI__ECSPI2_MOSI 0x01C0 0x0488 0x0624 0x0 0x1 |
||||
#define MX6SLL_PAD_ECSPI2_MOSI__SDMA_EXT_EVENT1 0x01C0 0x0488 0x0000 0x1 0x0 |
||||
#define MX6SLL_PAD_ECSPI2_MOSI__UART3_DCE_TX 0x01C0 0x0488 0x0000 0x2 0x0 |
||||
#define MX6SLL_PAD_ECSPI2_MOSI__UART3_DTE_RX 0x01C0 0x0488 0x0754 0x2 0x3 |
||||
#define MX6SLL_PAD_ECSPI2_MOSI__CSI_HSYNC 0x01C0 0x0488 0x05F0 0x3 0x1 |
||||
#define MX6SLL_PAD_ECSPI2_MOSI__SD1_VSELECT 0x01C0 0x0488 0x0000 0x4 0x0 |
||||
#define MX6SLL_PAD_ECSPI2_MOSI__GPIO4_IO13 0x01C0 0x0488 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_ECSPI2_MISO__ECSPI2_MISO 0x01C4 0x048C 0x0620 0x0 0x1 |
||||
#define MX6SLL_PAD_ECSPI2_MISO__SDMA_EXT_EVENT0 0x01C4 0x048C 0x0000 0x1 0x0 |
||||
#define MX6SLL_PAD_ECSPI2_MISO__UART3_DCE_RTS 0x01C4 0x048C 0x0750 0x2 0x0 |
||||
#define MX6SLL_PAD_ECSPI2_MISO__UART3_DTE_CTS 0x01C4 0x048C 0x0000 0x2 0x0 |
||||
#define MX6SLL_PAD_ECSPI2_MISO__CSI_MCLK 0x01C4 0x048C 0x0000 0x3 0x0 |
||||
#define MX6SLL_PAD_ECSPI2_MISO__SD1_WP 0x01C4 0x048C 0x0774 0x4 0x2 |
||||
#define MX6SLL_PAD_ECSPI2_MISO__GPIO4_IO14 0x01C4 0x048C 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_ECSPI2_MISO__USB_OTG1_OC 0x01C4 0x048C 0x076C 0x6 0x1 |
||||
#define MX6SLL_PAD_ECSPI2_SS0__ECSPI2_SS0 0x01C8 0x0490 0x0628 0x0 0x0 |
||||
#define MX6SLL_PAD_ECSPI2_SS0__ECSPI1_SS3 0x01C8 0x0490 0x0618 0x1 0x1 |
||||
#define MX6SLL_PAD_ECSPI2_SS0__UART3_DCE_CTS 0x01C8 0x0490 0x0000 0x2 0x0 |
||||
#define MX6SLL_PAD_ECSPI2_SS0__UART3_DTE_RTS 0x01C8 0x0490 0x0750 0x2 0x1 |
||||
#define MX6SLL_PAD_ECSPI2_SS0__CSI_VSYNC 0x01C8 0x0490 0x05F8 0x3 0x1 |
||||
#define MX6SLL_PAD_ECSPI2_SS0__SD1_CD_B 0x01C8 0x0490 0x0770 0x4 0x2 |
||||
#define MX6SLL_PAD_ECSPI2_SS0__GPIO4_IO15 0x01C8 0x0490 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_ECSPI2_SS0__USB_OTG1_PWR 0x01C8 0x0490 0x0000 0x6 0x0 |
||||
#define MX6SLL_PAD_SD1_CLK__SD1_CLK 0x01CC 0x0494 0x0000 0x0 0x0 |
||||
#define MX6SLL_PAD_SD1_CLK__KEY_COL0 0x01CC 0x0494 0x06A0 0x2 0x2 |
||||
#define MX6SLL_PAD_SD1_CLK__EPDC_SDCE4 0x01CC 0x0494 0x0000 0x3 0x0 |
||||
#define MX6SLL_PAD_SD1_CLK__GPIO5_IO15 0x01CC 0x0494 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_SD1_CMD__SD1_CMD 0x01D0 0x0498 0x0000 0x0 0x0 |
||||
#define MX6SLL_PAD_SD1_CMD__KEY_ROW0 0x01D0 0x0498 0x06C0 0x2 0x2 |
||||
#define MX6SLL_PAD_SD1_CMD__EPDC_SDCE5 0x01D0 0x0498 0x0000 0x3 0x0 |
||||
#define MX6SLL_PAD_SD1_CMD__GPIO5_IO14 0x01D0 0x0498 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_SD1_DATA0__SD1_DATA0 0x01D4 0x049C 0x0000 0x0 0x0 |
||||
#define MX6SLL_PAD_SD1_DATA0__KEY_COL1 0x01D4 0x049C 0x06A4 0x2 0x2 |
||||
#define MX6SLL_PAD_SD1_DATA0__EPDC_SDCE6 0x01D4 0x049C 0x0000 0x3 0x0 |
||||
#define MX6SLL_PAD_SD1_DATA0__GPIO5_IO11 0x01D4 0x049C 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_SD1_DATA1__SD1_DATA1 0x01D8 0x04A0 0x0000 0x0 0x0 |
||||
#define MX6SLL_PAD_SD1_DATA1__KEY_ROW1 0x01D8 0x04A0 0x06C4 0x2 0x2 |
||||
#define MX6SLL_PAD_SD1_DATA1__EPDC_SDCE7 0x01D8 0x04A0 0x0000 0x3 0x0 |
||||
#define MX6SLL_PAD_SD1_DATA1__GPIO5_IO08 0x01D8 0x04A0 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_SD1_DATA2__SD1_DATA2 0x01DC 0x04A4 0x0000 0x0 0x0 |
||||
#define MX6SLL_PAD_SD1_DATA2__KEY_COL2 0x01DC 0x04A4 0x06A8 0x2 0x2 |
||||
#define MX6SLL_PAD_SD1_DATA2__EPDC_SDCE8 0x01DC 0x04A4 0x0000 0x3 0x0 |
||||
#define MX6SLL_PAD_SD1_DATA2__GPIO5_IO13 0x01DC 0x04A4 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_SD1_DATA3__SD1_DATA3 0x01E0 0x04A8 0x0000 0x0 0x0 |
||||
#define MX6SLL_PAD_SD1_DATA3__KEY_ROW2 0x01E0 0x04A8 0x06C8 0x2 0x2 |
||||
#define MX6SLL_PAD_SD1_DATA3__EPDC_SDCE9 0x01E0 0x04A8 0x0000 0x3 0x0 |
||||
#define MX6SLL_PAD_SD1_DATA3__GPIO5_IO06 0x01E0 0x04A8 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_SD1_DATA4__SD1_DATA4 0x01E4 0x04AC 0x0000 0x0 0x0 |
||||
#define MX6SLL_PAD_SD1_DATA4__KEY_COL3 0x01E4 0x04AC 0x06AC 0x2 0x2 |
||||
#define MX6SLL_PAD_SD1_DATA4__EPDC_SDCLK_N 0x01E4 0x04AC 0x0000 0x3 0x0 |
||||
#define MX6SLL_PAD_SD1_DATA4__UART4_DCE_RX 0x01E4 0x04AC 0x075C 0x4 0x6 |
||||
#define MX6SLL_PAD_SD1_DATA4__UART4_DTE_TX 0x01E4 0x04AC 0x0000 0x4 0x0 |
||||
#define MX6SLL_PAD_SD1_DATA4__GPIO5_IO12 0x01E4 0x04AC 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_SD1_DATA5__SD1_DATA5 0x01E8 0x04B0 0x0000 0x0 0x0 |
||||
#define MX6SLL_PAD_SD1_DATA5__KEY_ROW3 0x01E8 0x04B0 0x06CC 0x2 0x2 |
||||
#define MX6SLL_PAD_SD1_DATA5__EPDC_SDOED 0x01E8 0x04B0 0x0000 0x3 0x0 |
||||
#define MX6SLL_PAD_SD1_DATA5__UART4_DCE_TX 0x01E8 0x04B0 0x0000 0x4 0x0 |
||||
#define MX6SLL_PAD_SD1_DATA5__UART4_DTE_RX 0x01E8 0x04B0 0x075C 0x4 0x7 |
||||
#define MX6SLL_PAD_SD1_DATA5__GPIO5_IO09 0x01E8 0x04B0 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_SD1_DATA6__SD1_DATA6 0x01EC 0x04B4 0x0000 0x0 0x0 |
||||
#define MX6SLL_PAD_SD1_DATA6__KEY_COL4 0x01EC 0x04B4 0x06B0 0x2 0x2 |
||||
#define MX6SLL_PAD_SD1_DATA6__EPDC_SDOEZ 0x01EC 0x04B4 0x0000 0x3 0x0 |
||||
#define MX6SLL_PAD_SD1_DATA6__UART4_DCE_RTS 0x01EC 0x04B4 0x0758 0x4 0x4 |
||||
#define MX6SLL_PAD_SD1_DATA6__UART4_DTE_CTS 0x01EC 0x04B4 0x0000 0x4 0x0 |
||||
#define MX6SLL_PAD_SD1_DATA6__GPIO5_IO07 0x01EC 0x04B4 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_SD1_DATA7__SD1_DATA7 0x01F0 0x04B8 0x0000 0x0 0x0 |
||||
#define MX6SLL_PAD_SD1_DATA7__KEY_ROW4 0x01F0 0x04B8 0x06D0 0x2 0x2 |
||||
#define MX6SLL_PAD_SD1_DATA7__CCM_PMIC_READY 0x01F0 0x04B8 0x05AC 0x3 0x3 |
||||
#define MX6SLL_PAD_SD1_DATA7__UART4_DCE_CTS 0x01F0 0x04B8 0x0000 0x4 0x0 |
||||
#define MX6SLL_PAD_SD1_DATA7__UART4_DTE_RTS 0x01F0 0x04B8 0x0758 0x4 0x5 |
||||
#define MX6SLL_PAD_SD1_DATA7__GPIO5_IO10 0x01F0 0x04B8 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_SD2_RESET__SD2_RESET 0x01F4 0x04BC 0x0000 0x0 0x0 |
||||
#define MX6SLL_PAD_SD2_RESET__WDOG2_B 0x01F4 0x04BC 0x0000 0x2 0x0 |
||||
#define MX6SLL_PAD_SD2_RESET__SPDIF_OUT 0x01F4 0x04BC 0x0000 0x3 0x0 |
||||
#define MX6SLL_PAD_SD2_RESET__CSI_MCLK 0x01F4 0x04BC 0x0000 0x4 0x0 |
||||
#define MX6SLL_PAD_SD2_RESET__GPIO4_IO27 0x01F4 0x04BC 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_SD2_CLK__SD2_CLK 0x01F8 0x04C0 0x0000 0x0 0x0 |
||||
#define MX6SLL_PAD_SD2_CLK__AUD4_RXFS 0x01F8 0x04C0 0x0570 0x1 0x1 |
||||
#define MX6SLL_PAD_SD2_CLK__ECSPI3_SCLK 0x01F8 0x04C0 0x0630 0x2 0x1 |
||||
#define MX6SLL_PAD_SD2_CLK__CSI_DATA00 0x01F8 0x04C0 0x05C8 0x3 0x1 |
||||
#define MX6SLL_PAD_SD2_CLK__GPIO5_IO05 0x01F8 0x04C0 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_SD2_CMD__SD2_CMD 0x01FC 0x04C4 0x0000 0x0 0x0 |
||||
#define MX6SLL_PAD_SD2_CMD__AUD4_RXC 0x01FC 0x04C4 0x056C 0x1 0x1 |
||||
#define MX6SLL_PAD_SD2_CMD__ECSPI3_SS0 0x01FC 0x04C4 0x0648 0x2 0x1 |
||||
#define MX6SLL_PAD_SD2_CMD__CSI_DATA01 0x01FC 0x04C4 0x05CC 0x3 0x1 |
||||
#define MX6SLL_PAD_SD2_CMD__EPIT1_OUT 0x01FC 0x04C4 0x0000 0x4 0x0 |
||||
#define MX6SLL_PAD_SD2_CMD__GPIO5_IO04 0x01FC 0x04C4 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_SD2_DATA0__SD2_DATA0 0x0200 0x04C8 0x0000 0x0 0x0 |
||||
#define MX6SLL_PAD_SD2_DATA0__AUD4_RXD 0x0200 0x04C8 0x0564 0x1 0x2 |
||||
#define MX6SLL_PAD_SD2_DATA0__ECSPI3_MOSI 0x0200 0x04C8 0x063C 0x2 0x1 |
||||
#define MX6SLL_PAD_SD2_DATA0__CSI_DATA02 0x0200 0x04C8 0x05D0 0x3 0x1 |
||||
#define MX6SLL_PAD_SD2_DATA0__UART5_DCE_RTS 0x0200 0x04C8 0x0760 0x4 0x4 |
||||
#define MX6SLL_PAD_SD2_DATA0__UART5_DTE_CTS 0x0200 0x04C8 0x0000 0x4 0x0 |
||||
#define MX6SLL_PAD_SD2_DATA0__GPIO5_IO01 0x0200 0x04C8 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_SD2_DATA1__SD2_DATA1 0x0204 0x04CC 0x0000 0x0 0x0 |
||||
#define MX6SLL_PAD_SD2_DATA1__AUD4_TXC 0x0204 0x04CC 0x0574 0x1 0x2 |
||||
#define MX6SLL_PAD_SD2_DATA1__ECSPI3_MISO 0x0204 0x04CC 0x0638 0x2 0x1 |
||||
#define MX6SLL_PAD_SD2_DATA1__CSI_DATA03 0x0204 0x04CC 0x05D4 0x3 0x1 |
||||
#define MX6SLL_PAD_SD2_DATA1__UART5_DCE_CTS 0x0204 0x04CC 0x0000 0x4 0x0 |
||||
#define MX6SLL_PAD_SD2_DATA1__UART5_DTE_RTS 0x0204 0x04CC 0x0760 0x4 0x5 |
||||
#define MX6SLL_PAD_SD2_DATA1__GPIO4_IO30 0x0204 0x04CC 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_SD2_DATA2__SD2_DATA2 0x0208 0x04D0 0x0000 0x0 0x0 |
||||
#define MX6SLL_PAD_SD2_DATA2__AUD4_TXFS 0x0208 0x04D0 0x0578 0x1 0x2 |
||||
#define MX6SLL_PAD_SD2_DATA2__CSI_DATA04 0x0208 0x04D0 0x05D8 0x3 0x1 |
||||
#define MX6SLL_PAD_SD2_DATA2__UART5_DCE_RX 0x0208 0x04D0 0x0764 0x4 0x4 |
||||
#define MX6SLL_PAD_SD2_DATA2__UART5_DTE_TX 0x0208 0x04D0 0x0000 0x4 0x0 |
||||
#define MX6SLL_PAD_SD2_DATA2__GPIO5_IO03 0x0208 0x04D0 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_SD2_DATA3__SD2_DATA3 0x020C 0x04D4 0x0000 0x0 0x0 |
||||
#define MX6SLL_PAD_SD2_DATA3__AUD4_TXD 0x020C 0x04D4 0x0568 0x1 0x2 |
||||
#define MX6SLL_PAD_SD2_DATA3__CSI_DATA05 0x020C 0x04D4 0x05DC 0x3 0x1 |
||||
#define MX6SLL_PAD_SD2_DATA3__UART5_DCE_TX 0x020C 0x04D4 0x0000 0x4 0x0 |
||||
#define MX6SLL_PAD_SD2_DATA3__UART5_DTE_RX 0x020C 0x04D4 0x0764 0x4 0x5 |
||||
#define MX6SLL_PAD_SD2_DATA3__GPIO4_IO28 0x020C 0x04D4 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_SD2_DATA4__SD2_DATA4 0x0210 0x04D8 0x0000 0x0 0x0 |
||||
#define MX6SLL_PAD_SD2_DATA4__SD3_DATA4 0x0210 0x04D8 0x0784 0x1 0x1 |
||||
#define MX6SLL_PAD_SD2_DATA4__UART2_DCE_RX 0x0210 0x04D8 0x074C 0x2 0x2 |
||||
#define MX6SLL_PAD_SD2_DATA4__UART2_DTE_TX 0x0210 0x04D8 0x0000 0x2 0x0 |
||||
#define MX6SLL_PAD_SD2_DATA4__CSI_DATA06 0x0210 0x04D8 0x05E0 0x3 0x1 |
||||
#define MX6SLL_PAD_SD2_DATA4__SPDIF_OUT 0x0210 0x04D8 0x0000 0x4 0x0 |
||||
#define MX6SLL_PAD_SD2_DATA4__GPIO5_IO02 0x0210 0x04D8 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_SD2_DATA5__SD2_DATA5 0x0214 0x04DC 0x0000 0x0 0x0 |
||||
#define MX6SLL_PAD_SD2_DATA5__SD3_DATA5 0x0214 0x04DC 0x0788 0x1 0x1 |
||||
#define MX6SLL_PAD_SD2_DATA5__UART2_DCE_TX 0x0214 0x04DC 0x0000 0x2 0x0 |
||||
#define MX6SLL_PAD_SD2_DATA5__UART2_DTE_RX 0x0214 0x04DC 0x074C 0x2 0x3 |
||||
#define MX6SLL_PAD_SD2_DATA5__CSI_DATA07 0x0214 0x04DC 0x05E4 0x3 0x1 |
||||
#define MX6SLL_PAD_SD2_DATA5__SPDIF_IN 0x0214 0x04DC 0x0738 0x4 0x1 |
||||
#define MX6SLL_PAD_SD2_DATA5__GPIO4_IO31 0x0214 0x04DC 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_SD2_DATA6__SD2_DATA6 0x0218 0x04E0 0x0000 0x0 0x0 |
||||
#define MX6SLL_PAD_SD2_DATA6__SD3_DATA6 0x0218 0x04E0 0x078C 0x1 0x1 |
||||
#define MX6SLL_PAD_SD2_DATA6__UART2_DCE_RTS 0x0218 0x04E0 0x0748 0x2 0x2 |
||||
#define MX6SLL_PAD_SD2_DATA6__UART2_DTE_CTS 0x0218 0x04E0 0x0000 0x2 0x0 |
||||
#define MX6SLL_PAD_SD2_DATA6__CSI_DATA08 0x0218 0x04E0 0x05E8 0x3 0x1 |
||||
#define MX6SLL_PAD_SD2_DATA6__SD2_WP 0x0218 0x04E0 0x077C 0x4 0x1 |
||||
#define MX6SLL_PAD_SD2_DATA6__GPIO4_IO29 0x0218 0x04E0 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_SD2_DATA7__SD2_DATA7 0x021C 0x04E4 0x0000 0x0 0x0 |
||||
#define MX6SLL_PAD_SD2_DATA7__SD3_DATA7 0x021C 0x04E4 0x0790 0x1 0x1 |
||||
#define MX6SLL_PAD_SD2_DATA7__UART2_DCE_CTS 0x021C 0x04E4 0x0000 0x2 0x0 |
||||
#define MX6SLL_PAD_SD2_DATA7__UART2_DTE_RTS 0x021C 0x04E4 0x0748 0x2 0x3 |
||||
#define MX6SLL_PAD_SD2_DATA7__CSI_DATA09 0x021C 0x04E4 0x05EC 0x3 0x1 |
||||
#define MX6SLL_PAD_SD2_DATA7__SD2_CD_B 0x021C 0x04E4 0x0778 0x4 0x1 |
||||
#define MX6SLL_PAD_SD2_DATA7__GPIO5_IO00 0x021C 0x04E4 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_SD3_CLK__SD3_CLK 0x0220 0x04E8 0x0000 0x0 0x0 |
||||
#define MX6SLL_PAD_SD3_CLK__AUD5_RXFS 0x0220 0x04E8 0x0588 0x1 0x0 |
||||
#define MX6SLL_PAD_SD3_CLK__KEY_COL5 0x0220 0x04E8 0x0694 0x2 0x0 |
||||
#define MX6SLL_PAD_SD3_CLK__CSI_DATA10 0x0220 0x04E8 0x05B0 0x3 0x0 |
||||
#define MX6SLL_PAD_SD3_CLK__WDOG1_RESET_B_DEB 0x0220 0x04E8 0x0000 0x4 0x0 |
||||
#define MX6SLL_PAD_SD3_CLK__GPIO5_IO18 0x0220 0x04E8 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_SD3_CLK__USB_OTG1_PWR 0x0220 0x04E8 0x0000 0x6 0x0 |
||||
#define MX6SLL_PAD_SD3_CMD__SD3_CMD 0x0224 0x04EC 0x0000 0x0 0x0 |
||||
#define MX6SLL_PAD_SD3_CMD__AUD5_RXC 0x0224 0x04EC 0x0584 0x1 0x0 |
||||
#define MX6SLL_PAD_SD3_CMD__KEY_ROW5 0x0224 0x04EC 0x06B4 0x2 0x0 |
||||
#define MX6SLL_PAD_SD3_CMD__CSI_DATA11 0x0224 0x04EC 0x05B4 0x3 0x0 |
||||
#define MX6SLL_PAD_SD3_CMD__USB_OTG2_ID 0x0224 0x04EC 0x0560 0x4 0x1 |
||||
#define MX6SLL_PAD_SD3_CMD__GPIO5_IO21 0x0224 0x04EC 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_SD3_CMD__USB_OTG2_PWR 0x0224 0x04EC 0x0000 0x6 0x0 |
||||
#define MX6SLL_PAD_SD3_DATA0__SD3_DATA0 0x0228 0x04F0 0x0000 0x0 0x0 |
||||
#define MX6SLL_PAD_SD3_DATA0__AUD5_RXD 0x0228 0x04F0 0x057C 0x1 0x0 |
||||
#define MX6SLL_PAD_SD3_DATA0__KEY_COL6 0x0228 0x04F0 0x0698 0x2 0x0 |
||||
#define MX6SLL_PAD_SD3_DATA0__CSI_DATA12 0x0228 0x04F0 0x05B8 0x3 0x0 |
||||
#define MX6SLL_PAD_SD3_DATA0__USB_OTG1_ID 0x0228 0x04F0 0x055C 0x4 0x1 |
||||
#define MX6SLL_PAD_SD3_DATA0__GPIO5_IO19 0x0228 0x04F0 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_SD3_DATA1__SD3_DATA1 0x022C 0x04F4 0x0000 0x0 0x0 |
||||
#define MX6SLL_PAD_SD3_DATA1__AUD5_TXC 0x022C 0x04F4 0x058C 0x1 0x0 |
||||
#define MX6SLL_PAD_SD3_DATA1__KEY_ROW6 0x022C 0x04F4 0x06B8 0x2 0x0 |
||||
#define MX6SLL_PAD_SD3_DATA1__CSI_DATA13 0x022C 0x04F4 0x05BC 0x3 0x0 |
||||
#define MX6SLL_PAD_SD3_DATA1__SD1_VSELECT 0x022C 0x04F4 0x0000 0x4 0x0 |
||||
#define MX6SLL_PAD_SD3_DATA1__GPIO5_IO20 0x022C 0x04F4 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_SD3_DATA1__JTAG_DE_B 0x022C 0x04F4 0x0000 0x6 0x0 |
||||
#define MX6SLL_PAD_SD3_DATA2__SD3_DATA2 0x0230 0x04F8 0x0000 0x0 0x0 |
||||
#define MX6SLL_PAD_SD3_DATA2__AUD5_TXFS 0x0230 0x04F8 0x0590 0x1 0x0 |
||||
#define MX6SLL_PAD_SD3_DATA2__KEY_COL7 0x0230 0x04F8 0x069C 0x2 0x0 |
||||
#define MX6SLL_PAD_SD3_DATA2__CSI_DATA14 0x0230 0x04F8 0x05C0 0x3 0x0 |
||||
#define MX6SLL_PAD_SD3_DATA2__EPIT1_OUT 0x0230 0x04F8 0x0000 0x4 0x0 |
||||
#define MX6SLL_PAD_SD3_DATA2__GPIO5_IO16 0x0230 0x04F8 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_SD3_DATA2__USB_OTG2_OC 0x0230 0x04F8 0x0768 0x6 0x0 |
||||
#define MX6SLL_PAD_SD3_DATA3__SD3_DATA3 0x0234 0x04FC 0x0000 0x0 0x0 |
||||
#define MX6SLL_PAD_SD3_DATA3__AUD5_TXD 0x0234 0x04FC 0x0580 0x1 0x0 |
||||
#define MX6SLL_PAD_SD3_DATA3__KEY_ROW7 0x0234 0x04FC 0x06BC 0x2 0x0 |
||||
#define MX6SLL_PAD_SD3_DATA3__CSI_DATA15 0x0234 0x04FC 0x05C4 0x3 0x0 |
||||
#define MX6SLL_PAD_SD3_DATA3__EPIT2_OUT 0x0234 0x04FC 0x0000 0x4 0x0 |
||||
#define MX6SLL_PAD_SD3_DATA3__GPIO5_IO17 0x0234 0x04FC 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_SD3_DATA3__USB_OTG1_OC 0x0234 0x04FC 0x076C 0x6 0x0 |
||||
#define MX6SLL_PAD_GPIO4_IO20__SD1_STROBE 0x0238 0x0500 0x0000 0x0 0x0 |
||||
#define MX6SLL_PAD_GPIO4_IO20__AUD6_RXFS 0x0238 0x0500 0x05A0 0x2 0x0 |
||||
#define MX6SLL_PAD_GPIO4_IO20__ECSPI4_SS0 0x0238 0x0500 0x065C 0x3 0x0 |
||||
#define MX6SLL_PAD_GPIO4_IO20__GPT_CAPTURE1 0x0238 0x0500 0x0670 0x4 0x0 |
||||
#define MX6SLL_PAD_GPIO4_IO20__GPIO4_IO20 0x0238 0x0500 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_GPIO4_IO21__SD2_STROBE 0x023C 0x0504 0x0000 0x0 0x0 |
||||
#define MX6SLL_PAD_GPIO4_IO21__AUD6_RXC 0x023C 0x0504 0x059C 0x2 0x0 |
||||
#define MX6SLL_PAD_GPIO4_IO21__ECSPI4_SCLK 0x023C 0x0504 0x0650 0x3 0x0 |
||||
#define MX6SLL_PAD_GPIO4_IO21__GPT_CAPTURE2 0x023C 0x0504 0x0674 0x4 0x0 |
||||
#define MX6SLL_PAD_GPIO4_IO21__GPIO4_IO21 0x023C 0x0504 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_GPIO4_IO19__SD3_STROBE 0x0240 0x0508 0x0000 0x0 0x0 |
||||
#define MX6SLL_PAD_GPIO4_IO19__AUD6_RXD 0x0240 0x0508 0x0594 0x2 0x0 |
||||
#define MX6SLL_PAD_GPIO4_IO19__ECSPI4_MOSI 0x0240 0x0508 0x0658 0x3 0x0 |
||||
#define MX6SLL_PAD_GPIO4_IO19__GPT_COMPARE1 0x0240 0x0508 0x0000 0x4 0x0 |
||||
#define MX6SLL_PAD_GPIO4_IO19__GPIO4_IO19 0x0240 0x0508 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_GPIO4_IO25__AUD6_TXC 0x0244 0x050C 0x05A4 0x2 0x0 |
||||
#define MX6SLL_PAD_GPIO4_IO25__ECSPI4_MISO 0x0244 0x050C 0x0654 0x3 0x0 |
||||
#define MX6SLL_PAD_GPIO4_IO25__GPT_COMPARE2 0x0244 0x050C 0x0000 0x4 0x0 |
||||
#define MX6SLL_PAD_GPIO4_IO25__GPIO4_IO25 0x0244 0x050C 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_GPIO4_IO18__AUD6_TXFS 0x0248 0x0510 0x05A8 0x2 0x0 |
||||
#define MX6SLL_PAD_GPIO4_IO18__ECSPI4_SS1 0x0248 0x0510 0x0660 0x3 0x0 |
||||
#define MX6SLL_PAD_GPIO4_IO18__GPT_COMPARE3 0x0248 0x0510 0x0000 0x4 0x0 |
||||
#define MX6SLL_PAD_GPIO4_IO18__GPIO4_IO18 0x0248 0x0510 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_GPIO4_IO24__AUD6_TXD 0x024C 0x0514 0x0598 0x2 0x0 |
||||
#define MX6SLL_PAD_GPIO4_IO24__ECSPI4_SS2 0x024C 0x0514 0x0664 0x3 0x0 |
||||
#define MX6SLL_PAD_GPIO4_IO24__GPT_CLKIN 0x024C 0x0514 0x0678 0x4 0x0 |
||||
#define MX6SLL_PAD_GPIO4_IO24__GPIO4_IO24 0x024C 0x0514 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_GPIO4_IO23__AUDIO_CLK_OUT 0x0250 0x0518 0x0000 0x2 0x0 |
||||
#define MX6SLL_PAD_GPIO4_IO23__SD1_RESET 0x0250 0x0518 0x0000 0x3 0x0 |
||||
#define MX6SLL_PAD_GPIO4_IO23__SD3_RESET 0x0250 0x0518 0x0000 0x4 0x0 |
||||
#define MX6SLL_PAD_GPIO4_IO23__GPIO4_IO23 0x0250 0x0518 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_GPIO4_IO17__USB_OTG1_ID 0x0254 0x051C 0x055C 0x2 0x2 |
||||
#define MX6SLL_PAD_GPIO4_IO17__SD1_VSELECT 0x0254 0x051C 0x0000 0x3 0x0 |
||||
#define MX6SLL_PAD_GPIO4_IO17__SD3_VSELECT 0x0254 0x051C 0x0000 0x4 0x0 |
||||
#define MX6SLL_PAD_GPIO4_IO17__GPIO4_IO17 0x0254 0x051C 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_GPIO4_IO22__SPDIF_IN 0x0258 0x0520 0x0738 0x2 0x0 |
||||
#define MX6SLL_PAD_GPIO4_IO22__SD1_WP 0x0258 0x0520 0x0774 0x3 0x0 |
||||
#define MX6SLL_PAD_GPIO4_IO22__SD3_WP 0x0258 0x0520 0x0794 0x4 0x1 |
||||
#define MX6SLL_PAD_GPIO4_IO22__GPIO4_IO22 0x0258 0x0520 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_GPIO4_IO16__SPDIF_OUT 0x025C 0x0524 0x0000 0x2 0x0 |
||||
#define MX6SLL_PAD_GPIO4_IO16__SD1_CD_B 0x025C 0x0524 0x0770 0x3 0x0 |
||||
#define MX6SLL_PAD_GPIO4_IO16__SD3_CD_B 0x025C 0x0524 0x0780 0x4 0x1 |
||||
#define MX6SLL_PAD_GPIO4_IO16__GPIO4_IO16 0x025C 0x0524 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_GPIO4_IO26__WDOG1_B 0x0260 0x0528 0x0000 0x2 0x0 |
||||
#define MX6SLL_PAD_GPIO4_IO26__PWM4_OUT 0x0260 0x0528 0x0000 0x3 0x0 |
||||
#define MX6SLL_PAD_GPIO4_IO26__CCM_PMIC_READY 0x0260 0x0528 0x05AC 0x4 0x1 |
||||
#define MX6SLL_PAD_GPIO4_IO26__GPIO4_IO26 0x0260 0x0528 0x0000 0x5 0x0 |
||||
#define MX6SLL_PAD_GPIO4_IO26__SPDIF_EXT_CLK 0x0260 0x0528 0x073C 0x6 0x0 |
||||
|
||||
#endif /* __DTS_IMX6SLL_PINFUNC_H */ |
@ -0,0 +1,859 @@ |
||||
/* |
||||
* Copyright 2016 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 <dt-bindings/clock/imx6sll-clock.h> |
||||
#include <dt-bindings/gpio/gpio.h> |
||||
#include <dt-bindings/interrupt-controller/arm-gic.h> |
||||
#include "imx6sll-pinfunc.h" |
||||
#include "skeleton.dtsi" |
||||
|
||||
/ { |
||||
aliases { |
||||
gpio0 = &gpio1; |
||||
gpio1 = &gpio2; |
||||
gpio2 = &gpio3; |
||||
gpio3 = &gpio4; |
||||
gpio4 = &gpio5; |
||||
gpio5 = &gpio6; |
||||
i2c0 = &i2c1; |
||||
i2c1 = &i2c2; |
||||
i2c2 = &i2c3; |
||||
mmc0 = &usdhc1; |
||||
mmc1 = &usdhc2; |
||||
mmc2 = &usdhc3; |
||||
serial0 = &uart1; |
||||
serial1 = &uart2; |
||||
serial2 = &uart3; |
||||
serial3 = &uart4; |
||||
serial4 = &uart5; |
||||
spi0 = &ecspi1; |
||||
spi1 = &ecspi2; |
||||
spi3 = &ecspi3; |
||||
spi4 = &ecspi4; |
||||
usbphy0 = &usbphy1; |
||||
usbphy1 = &usbphy2; |
||||
}; |
||||
|
||||
cpus { |
||||
#address-cells = <1>; |
||||
#size-cells = <0>; |
||||
|
||||
cpu0: cpu@0 { |
||||
compatible = "arm,cortex-a9"; |
||||
device_type = "cpu"; |
||||
reg = <0>; |
||||
next-level-cache = <&L2>; |
||||
operating-points = < |
||||
/* kHz uV */ |
||||
996000 1225000 |
||||
792000 1175000 |
||||
396000 1075000 |
||||
198000 975000 |
||||
>; |
||||
fsl,soc-operating-points = < |
||||
/* ARM kHz SOC-PU uV */ |
||||
996000 1225000 |
||||
792000 1175000 |
||||
396000 1175000 |
||||
198000 1175000 |
||||
>; |
||||
clock-latency = <61036>; /* two CLK32 periods */ |
||||
fsl,low-power-run; |
||||
clocks = <&clks IMX6SLL_CLK_ARM>, |
||||
<&clks IMX6SLL_CLK_PLL2_PFD2>, |
||||
<&clks IMX6SLL_CLK_STEP>, |
||||
<&clks IMX6SLL_CLK_PLL1_SW>, |
||||
<&clks IMX6SLL_CLK_PLL1_SYS>, |
||||
<&clks IMX6SLL_CLK_PLL1>, |
||||
<&clks IMX6SLL_PLL1_BYPASS>, |
||||
<&clks IMX6SLL_PLL1_BYPASS_SRC>; |
||||
clock-names = "arm", "pll2_pfd2_396m", "step", |
||||
"pll1_sw", "pll1_sys", "pll1", "pll1_bypass", |
||||
"pll1_bypass_src"; |
||||
}; |
||||
}; |
||||
|
||||
intc: interrupt-controller@00a01000 { |
||||
compatible = "arm,cortex-a9-gic"; |
||||
#interrupt-cells = <3>; |
||||
interrupt-controller; |
||||
reg = <0x00a01000 0x1000>, |
||||
<0x00a00100 0x100>; |
||||
interrupt-parent = <&intc>; |
||||
}; |
||||
|
||||
clocks { |
||||
#address-cells = <1>; |
||||
#size-cells = <0>; |
||||
|
||||
ckil: clock@0 { |
||||
compatible = "fixed-clock"; |
||||
reg = <0>; |
||||
#clock-cells = <0>; |
||||
clock-frequency = <32768>; |
||||
clock-output-names = "ckil"; |
||||
}; |
||||
|
||||
osc: clock@1 { |
||||
compatible = "fixed-clock"; |
||||
reg = <1>; |
||||
#clock-cells = <0>; |
||||
clock-frequency = <24000000>; |
||||
clock-output-names = "osc"; |
||||
}; |
||||
|
||||
ipp_di0: clock@2 { |
||||
compatible = "fixed-clock"; |
||||
reg = <2>; |
||||
#clock-cells = <0>; |
||||
clock-frequency = <0>; |
||||
clock-output-names = "ipp_di0"; |
||||
}; |
||||
|
||||
ipp_di1: clock@3 { |
||||
compatible = "fixed-clock"; |
||||
reg = <3>; |
||||
#clock-cells = <0>; |
||||
clock-frequency = <0>; |
||||
clock-output-names = "ipp_di1"; |
||||
}; |
||||
}; |
||||
|
||||
soc { |
||||
#address-cells = <1>; |
||||
#size-cells = <1>; |
||||
compatible = "simple-bus"; |
||||
interrupt-parent = <&gpc>; |
||||
ranges; |
||||
|
||||
busfreq { |
||||
compatible = "fsl,imx_busfreq"; |
||||
clocks = <&clks IMX6SLL_CLK_PLL2_PFD2>, <&clks IMX6SLL_CLK_PLL2_198M>, |
||||
<&clks IMX6SLL_CLK_PLL2_BUS>, <&clks IMX6SLL_CLK_ARM>, |
||||
<&clks IMX6SLL_CLK_PLL3_USB_OTG>, <&clks IMX6SLL_CLK_PERIPH>, |
||||
<&clks IMX6SLL_CLK_PERIPH_PRE>, <&clks IMX6SLL_CLK_PERIPH_CLK2>, |
||||
<&clks IMX6SLL_CLK_PERIPH_CLK2_SEL>, <&clks IMX6SLL_CLK_OSC>, |
||||
<&clks IMX6SLL_CLK_AHB>, <&clks IMX6SLL_CLK_AXI_PODF>, |
||||
<&clks IMX6SLL_CLK_PERIPH2>, <&clks IMX6SLL_CLK_PERIPH2_PRE>, |
||||
<&clks IMX6SLL_CLK_PERIPH2_CLK2>, <&clks IMX6SLL_CLK_PERIPH2_CLK2_SEL>, |
||||
<&clks IMX6SLL_CLK_STEP>, <&clks IMX6SLL_CLK_MMDC_P0_FAST>, <&clks IMX6SLL_PLL1_BYPASS_SRC>, |
||||
<&clks IMX6SLL_PLL1_BYPASS>, <&clks IMX6SLL_CLK_PLL1_SYS>, <&clks IMX6SLL_CLK_PLL1_SW>, |
||||
<&clks IMX6SLL_CLK_PLL1>; |
||||
clock-names = "pll2_pfd2_396m", "pll2_198m", "pll2_bus", "arm", "pll3_usb_otg", |
||||
"periph", "periph_pre", "periph_clk2", "periph_clk2_sel", "osc", |
||||
"ahb", "ocram", "periph2", "periph2_pre", "periph2_clk2", "periph2_clk2_sel", |
||||
"step", "mmdc", "pll1_bypass_src", "pll1_bypass", "pll1_sys", "pll1_sw", "pll1"; |
||||
fsl,max_ddr_freq = <400000000>; |
||||
}; |
||||
|
||||
ocrams: sram@00900000 { |
||||
compatible = "fsl,lpm-sram"; |
||||
reg = <0x00900000 0x4000>; |
||||
}; |
||||
|
||||
ocrams_ddr: sram@00904000 { |
||||
compatible = "fsl,ddr-lpm-sram"; |
||||
reg = <0x00904000 0x1000>; |
||||
}; |
||||
|
||||
ocram: sram@00905000 { |
||||
compatible = "mmio-sram"; |
||||
reg = <0x00905000 0x1B000>; |
||||
}; |
||||
|
||||
L2: l2-cache@00a02000 { |
||||
compatible = "arm,pl310-cache"; |
||||
reg = <0x00a02000 0x1000>; |
||||
interrupts = <GIC_SPI 92 IRQ_TYPE_LEVEL_HIGH>; |
||||
cache-unified; |
||||
cache-level = <2>; |
||||
arm,tag-latency = <4 2 3>; |
||||
arm,data-latency = <4 2 3>; |
||||
}; |
||||
|
||||
aips1: aips-bus@02000000 { |
||||
compatible = "fsl,aips-bus", "simple-bus"; |
||||
#address-cells = <1>; |
||||
#size-cells = <1>; |
||||
reg = <0x02000000 0x100000>; |
||||
ranges; |
||||
|
||||
spba: spba-bus@02000000 { |
||||
compatible = "fsl,spba-bus", "simple-bus"; |
||||
#address-cells = <1>; |
||||
#size-cells = <1>; |
||||
reg = <0x02000000 0x40000>; |
||||
ranges; |
||||
|
||||
spdif: spdif@02004000 { |
||||
compatible = "fsl,imx6sl-spdif", "fsl,imx35-spdif"; |
||||
reg = <0x02004000 0x4000>; |
||||
interrupts = <GIC_SPI 52 IRQ_TYPE_LEVEL_HIGH>; |
||||
dmas = <&sdma 14 18 0>, <&sdma 15 18 0>; |
||||
dma-names = "rx", "tx"; |
||||
clocks = <&clks IMX6SLL_CLK_SPDIF_GCLK>, |
||||
<&clks IMX6SLL_CLK_OSC>, |
||||
<&clks IMX6SLL_CLK_SPDIF>, |
||||
<&clks IMX6SLL_CLK_DUMMY>, |
||||
<&clks IMX6SLL_CLK_DUMMY>, |
||||
<&clks IMX6SLL_CLK_DUMMY>, |
||||
<&clks IMX6SLL_CLK_IPG>, |
||||
<&clks IMX6SLL_CLK_DUMMY>, |
||||
<&clks IMX6SLL_CLK_DUMMY>, |
||||
<&clks IMX6SLL_CLK_SPBA>; |
||||
clock-names = "core", "rxtx0", |
||||
"rxtx1", "rxtx2", |
||||
"rxtx3", "rxtx4", |
||||
"rxtx5", "rxtx6", |
||||
"rxtx7", "dma"; |
||||
status = "disabled"; |
||||
}; |
||||
|
||||
ecspi1: ecspi@02008000 { |
||||
compatible = "fsl,imx6ul-ecspi", "fsl,imx51-ecspi"; |
||||
reg = <0x02008000 0x4000>; |
||||
interrupts = <GIC_SPI 31 IRQ_TYPE_LEVEL_HIGH>; |
||||
dmas = <&sdma 3 7 1>, <&sdma 4 7 2>; |
||||
dma-names = "rx", "tx"; |
||||
clocks = <&clks IMX6SLL_CLK_ECSPI1>, |
||||
<&clks IMX6SLL_CLK_ECSPI1>; |
||||
clock-names = "ipg", "per"; |
||||
status = "disabled"; |
||||
}; |
||||
|
||||
ecspi2: ecspi@0200c000 { |
||||
compatible = "fsl,imx6ul-ecspi", "fsl,imx51-ecspi"; |
||||
reg = <0x0200c000 0x4000>; |
||||
interrupts = <GIC_SPI 32 IRQ_TYPE_LEVEL_HIGH>; |
||||
dmas = <&sdma 5 7 1>, <&sdma 6 7 2>; |
||||
dma-names = "rx", "tx"; |
||||
clocks = <&clks IMX6SLL_CLK_ECSPI2>, |
||||
<&clks IMX6SLL_CLK_ECSPI2>; |
||||
clock-names = "ipg", "per"; |
||||
status = "disabled"; |
||||
}; |
||||
|
||||
ecspi3: ecspi@02010000 { |
||||
compatible = "fsl,imx6ul-ecspi", "fsl,imx51-ecspi"; |
||||
reg = <0x02010000 0x4000>; |
||||
interrupts = <GIC_SPI 33 IRQ_TYPE_LEVEL_HIGH>; |
||||
dmas = <&sdma 7 7 1>, <&sdma 8 7 2>; |
||||
dma-names = "rx", "tx"; |
||||
clocks = <&clks IMX6SLL_CLK_ECSPI3>, |
||||
<&clks IMX6SLL_CLK_ECSPI3>; |
||||
clock-names = "ipg", "per"; |
||||
status = "disabled"; |
||||
}; |
||||
|
||||
ecspi4: ecspi@02014000 { |
||||
compatible = "fsl,imx6ul-ecspi", "fsl,imx51-ecspi"; |
||||
reg = <0x02014000 0x4000>; |
||||
interrupts = <GIC_SPI 34 IRQ_TYPE_LEVEL_HIGH>; |
||||
dmas = <&sdma 9 7 1>, <&sdma 10 7 2>; |
||||
dma-names = "rx", "tx"; |
||||
clocks = <&clks IMX6SLL_CLK_ECSPI4>, |
||||
<&clks IMX6SLL_CLK_ECSPI4>; |
||||
clock-names = "ipg", "per"; |
||||
status = "disabled"; |
||||
}; |
||||
|
||||
uart4: serial@02018000 { |
||||
compatible = "fsl,imx6sll-uart", "fsl,imx6q-uart", "fsl,imx21-uart"; |
||||
reg = <0x02018000 0x4000>; |
||||
interrupts =<GIC_SPI 29 IRQ_TYPE_LEVEL_HIGH>; |
||||
dmas = <&sdma 31 4 0>, <&sdma 32 4 0>; |
||||
dma-names = "rx", "tx"; |
||||
clocks = <&clks IMX6SLL_CLK_UART4_IPG>, |
||||
<&clks IMX6SLL_CLK_UART4_SERIAL>; |
||||
clock-names = "ipg", "per"; |
||||
status = "disabled"; |
||||
}; |
||||
|
||||
uart1: serial@02020000 { |
||||
compatible = "fsl,imx6sll-uart", "fsl,imx6q-uart", "fsl,imx21-uart"; |
||||
reg = <0x02020000 0x4000>; |
||||
interrupts = <GIC_SPI 26 IRQ_TYPE_LEVEL_HIGH>; |
||||
dmas = <&sdma 25 4 0>, <&sdma 26 4 0>; |
||||
dma-names = "rx", "tx"; |
||||
clocks = <&clks IMX6SLL_CLK_UART1_IPG>, |
||||
<&clks IMX6SLL_CLK_UART1_SERIAL>; |
||||
clock-names = "ipg", "per"; |
||||
status = "disabled"; |
||||
}; |
||||
|
||||
uart2: serial@02024000 { |
||||
compatible = "fsl,imx6sll-uart", "fsl,imx6q-uart", "fsl,imx21-uart"; |
||||
reg = <0x02024000 0x4000>; |
||||
interrupts = <GIC_SPI 27 IRQ_TYPE_LEVEL_HIGH>; |
||||
dmas = <&sdma 27 4 0>, <&sdma 28 4 0>; |
||||
dma-names = "rx", "tx"; |
||||
clocks = <&clks IMX6SLL_CLK_UART2_IPG>, |
||||
<&clks IMX6SLL_CLK_UART2_SERIAL>; |
||||
clock-names = "ipg", "per"; |
||||
status = "disabled"; |
||||
}; |
||||
|
||||
ssi1: ssi@02028000 { |
||||
compatible = "fsl,imx6sll-ssi", "fsl,imx51-ssi"; |
||||
reg = <0x02028000 0x4000>; |
||||
interrupts = <GIC_SPI 46 IRQ_TYPE_LEVEL_HIGH>; |
||||
dmas = <&sdma 37 22 0>, <&sdma 38 22 0>; |
||||
dma-names = "rx", "tx"; |
||||
fsl,fifo-depth = <15>; |
||||
clocks = <&clks IMX6SLL_CLK_SSI1_IPG>, |
||||
<&clks IMX6SLL_CLK_SSI1>; |
||||
clock-names = "ipg", "baud"; |
||||
status = "disabled"; |
||||
}; |
||||
|
||||
ssi2: ssi2@0202c000 { |
||||
compatible = "fsl,imx6sll-ssi", "fsl,imx51-ssi"; |
||||
reg = <0x0202c000 0x4000>; |
||||
interrupts = <GIC_SPI 47 IRQ_TYPE_LEVEL_HIGH>; |
||||
dmas = <&sdma 41 22 0>, <&sdma 42 22 0>; |
||||
dma-names = "rx", "tx"; |
||||
fsl,fifo-depth = <15>; |
||||
clocks = <&clks IMX6SLL_CLK_SSI2_IPG>, |
||||
<&clks IMX6SLL_CLK_SSI2>; |
||||
clock-names = "ipg", "baud"; |
||||
status = "disabled"; |
||||
}; |
||||
|
||||
ssi3: ssi@02030000 { |
||||
compatible = "fsl,imx6sll-ssi", "fsl,imx51-ssi"; |
||||
reg = <0x02030000 0x4000>; |
||||
interrupts = <GIC_SPI 48 IRQ_TYPE_LEVEL_HIGH>; |
||||
dmas = <&sdma 45 22 0>, <&sdma 46 22 0>; |
||||
dma-names = "rx", "tx"; |
||||
fsl,fifo-depth = <15>; |
||||
clocks = <&clks IMX6SLL_CLK_SSI3_IPG>, |
||||
<&clks IMX6SLL_CLK_SSI3>; |
||||
clock-names = "ipg", "baud"; |
||||
status = "disabled"; |
||||
}; |
||||
|
||||
uart3: serial@02034000 { |
||||
compatible = "fsl,imx6sll-uart", "fsl,imx6q-uart", "fsl,imx21-uart"; |
||||
reg = <0x02034000 0x4000>; |
||||
interrupts = <GIC_SPI 28 IRQ_TYPE_LEVEL_HIGH>; |
||||
dmas = <&sdma 29 4 0>, <&sdma 30 4 0>; |
||||
dma-name = "rx", "tx"; |
||||
clocks = <&clks IMX6SLL_CLK_UART3_IPG>, |
||||
<&clks IMX6SLL_CLK_UART3_SERIAL>; |
||||
clock-names = "ipg", "per"; |
||||
status = "disabled"; |
||||
}; |
||||
}; |
||||
|
||||
pwm1: pwm@02080000 { |
||||
compatible = "fsl,imx6sll-pwm", "fsl,imx27-pwm"; |
||||
reg = <0x02080000 0x4000>; |
||||
interrupts = <GIC_SPI 83 IRQ_TYPE_LEVEL_HIGH>; |
||||
clocks = <&clks IMX6SLL_CLK_PWM1>, |
||||
<&clks IMX6SLL_CLK_PWM1>; |
||||
clock-names = "ipg", "per"; |
||||
#pwm-cells = <2>; |
||||
}; |
||||
|
||||
pwm2: pwm@02084000 { |
||||
compatible = "fsl,imx6sll-pwm", "fsl,imx27-pwm"; |
||||
reg = <0x02084000 0x4000>; |
||||
interrupts = <GIC_SPI 84 IRQ_TYPE_LEVEL_HIGH>; |
||||
clocks = <&clks IMX6SLL_CLK_PWM2>, |
||||
<&clks IMX6SLL_CLK_PWM2>; |
||||
clock-names = "ipg", "per"; |
||||
#pwm-cells = <2>; |
||||
}; |
||||
|
||||
pwm3: pwm@02088000 { |
||||
compatible = "fsl,imx6sll-pwm", "fsl,imx27-pwm"; |
||||
reg = <0x02088000 0x4000>; |
||||
interrupts = <GIC_SPI 85 IRQ_TYPE_LEVEL_HIGH>; |
||||
clocks = <&clks IMX6SLL_CLK_PWM3>, |
||||
<&clks IMX6SLL_CLK_PWM3>; |
||||
clock-names = "ipg", "per"; |
||||
#pwm-cells = <2>; |
||||
}; |
||||
|
||||
pwm4: pwm@0208c000 { |
||||
compatible = "fsl,imx6sll-pwm", "fsl,imx27-pwm"; |
||||
reg = <0x0208c000 0x4000>; |
||||
interrupts = <GIC_SPI 86 IRQ_TYPE_LEVEL_HIGH>; |
||||
clocks = <&clks IMX6SLL_CLK_PWM4>, |
||||
<&clks IMX6SLL_CLK_PWM4>; |
||||
clock-names = "ipg", "per"; |
||||
#pwm-cells = <2>; |
||||
}; |
||||
|
||||
gpt1: gpt@02098000 { |
||||
compatible = "fsl,imx6sll-gpt"; |
||||
reg = <0x02098000 0x4000>; |
||||
interrupts = <GIC_SPI 55 IRQ_TYPE_LEVEL_HIGH>; |
||||
clocks = <&clks IMX6SLL_CLK_GPT_BUS>, |
||||
<&clks IMX6SLL_CLK_GPT_SERIAL>; |
||||
clock-names = "ipg", "per"; |
||||
}; |
||||
|
||||
gpio1: gpio@0209c000 { |
||||
compatible = "fsl,imx6sll-gpio", "fsl,imx35-gpio"; |
||||
reg = <0x0209c000 0x4000>; |
||||
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>; |
||||
}; |
||||
|
||||
gpio2: gpio@020a0000 { |
||||
compatible = "fsl,imx6sll-gpio", "fsl,imx35-gpio"; |
||||
reg = <0x020a0000 0x4000>; |
||||
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>; |
||||
}; |
||||
|
||||
gpio3: gpio@020a4000 { |
||||
compatible = "fsl,imx6sll-gpio", "fsl,imx35-gpio"; |
||||
reg = <0x020a4000 0x4000>; |
||||
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>; |
||||
}; |
||||
|
||||
gpio4: gpio@020a8000 { |
||||
compatible = "fsl,imx6sll-gpio", "fsl,imx35-gpio"; |
||||
reg = <0x020a8000 0x4000>; |
||||
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>; |
||||
}; |
||||
|
||||
gpio5: gpio@020ac000 { |
||||
compatible = "fsl,imx6sll-gpio", "fsl,imx35-gpio"; |
||||
reg = <0x020ac000 0x4000>; |
||||
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>; |
||||
}; |
||||
|
||||
gpio6: gpio@020b0000 { |
||||
compatible = "fsl,imx6sll-gpio", "fsl,imx35-gpio"; |
||||
reg = <0x020b0000 0x4000>; |
||||
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>; |
||||
}; |
||||
|
||||
kpp: kpp@020b8000 { |
||||
compatible = "fsl,imx6sll-kpp", "fsl,imx21-kpp"; |
||||
reg = <0x020b8000 0x4000>; |
||||
interrupts = <GIC_SPI 82 IRQ_TYPE_LEVEL_HIGH>; |
||||
clocks = <&clks IMX6SLL_CLK_KPP>; |
||||
status = "disabled"; |
||||
}; |
||||
|
||||
wdog1: wdog@020bc000 { |
||||
compatible = "fsl,imx6sll-wdt", "fsl,imx21-wdt"; |
||||
reg = <0x020bc000 0x4000>; |
||||
interrupts = <GIC_SPI 80 IRQ_TYPE_LEVEL_HIGH>; |
||||
clocks = <&clks IMX6SLL_CLK_WDOG1>; |
||||
}; |
||||
|
||||
wdog2: wdog@020c0000 { |
||||
compatible = "fsl,imx6sll-wdt", "fsl,imx21-wdt"; |
||||
reg = <0x020c0000 0x4000>; |
||||
interrupts = <GIC_SPI 81 IRQ_TYPE_LEVEL_HIGH>; |
||||
clocks = <&clks IMX6SLL_CLK_WDOG2>; |
||||
status = "disabled"; |
||||
}; |
||||
|
||||
clks: ccm@020c4000 { |
||||
compatible = "fsl,imx6sll-ccm"; |
||||
reg = <0x020c4000 0x4000>; |
||||
interrupts = <GIC_SPI 87 IRQ_TYPE_LEVEL_HIGH>, |
||||
<GIC_SPI 88 IRQ_TYPE_LEVEL_HIGH>; |
||||
#clock-cells = <1>; |
||||
clocks = <&ckil>, <&osc>, <&ipp_di0>, <&ipp_di1>; |
||||
clock-names = "ckil", "osc", "ipp_di0", "ipp_di1"; |
||||
}; |
||||
|
||||
anatop: anatop@020c8000 { |
||||
compatible = "fsl,imx6sll-anatop", |
||||
"fsl,imx6q-anatop", |
||||
"syscon", "simple-bus"; |
||||
reg = <0x020c8000 0x4000>; |
||||
interrupts = <GIC_SPI 49 IRQ_TYPE_LEVEL_HIGH>, |
||||
<GIC_SPI 54 IRQ_TYPE_LEVEL_HIGH>, |
||||
<GIC_SPI 127 IRQ_TYPE_LEVEL_HIGH>; |
||||
|
||||
reg_3p0: regulator-3p0@120 { |
||||
compatible = "fsl,anatop-regulator"; |
||||
regulator-name = "vdd3p0"; |
||||
regulator-min-microvolt = <2625000>; |
||||
regulator-max-microvolt = <3400000>; |
||||
anatop-reg-offset = <0x120>; |
||||
anatop-vol-bit-shift = <8>; |
||||
anatop-vol-bit-width = <5>; |
||||
anatop-min-bit-val = <0>; |
||||
anatop-min-voltage = <2625000>; |
||||
anatop-max-voltage = <3400000>; |
||||
anatop-enable-bit = <0>; |
||||
}; |
||||
}; |
||||
|
||||
tempmon: tempmon { |
||||
compatible = "fsl,imx6sll-tempmon", "fsl,imx6sx-tempmon"; |
||||
interrupts = <GIC_SPI 49 IRQ_TYPE_LEVEL_HIGH>; |
||||
fsl,tempmon = <&anatop>; |
||||
fsl,tempmon-data = <&ocotp>; |
||||
clocks = <&clks IMX6SLL_CLK_PLL3_USB_OTG>; |
||||
status = "disabled"; |
||||
}; |
||||
|
||||
usbphy1: usbphy@020c9000 { |
||||
compatible = "fsl,imx6sll-usbphy", "fsl,imx6ul-usbphy", |
||||
"fsl,imx23-usbphy"; |
||||
reg = <0x020c9000 0x1000>; |
||||
interrupts = <GIC_SPI 40 IRQ_TYPE_LEVEL_HIGH>; |
||||
clocks = <&clks IMX6SLL_CLK_USBPHY1>; |
||||
phy-3p0-supply = <®_3p0>; |
||||
fsl,anatop = <&anatop>; |
||||
}; |
||||
|
||||
usbphy2: usbphy@020ca000 { |
||||
compatible = "fsl,imx6sll-usbphy", "fsl,imx6ul-usbphy", |
||||
"fsl,imx23-usbphy"; |
||||
reg = <0x020ca000 0x1000>; |
||||
interrupts = <GIC_SPI 41 IRQ_TYPE_LEVEL_HIGH>; |
||||
clocks = <&clks IMX6SLL_CLK_USBPHY2>; |
||||
phy-reg_3p0-supply = <®_3p0>; |
||||
fsl,anatop = <&anatop>; |
||||
}; |
||||
|
||||
snvs: snvs@020cc000 { |
||||
compatible = "fsl,sec-v4.0-mon", "syscon", "simple-mfd"; |
||||
reg = <0x020cc000 0x4000>; |
||||
|
||||
snvs_rtc: snvs-rtc-lp { |
||||
compatible = "fsl,sec-v4.0-mon-rtc-lp"; |
||||
regmap = <&snvs>; |
||||
offset = <0x34>; |
||||
interrupts = <GIC_SPI 19 IRQ_TYPE_LEVEL_HIGH>, <GIC_SPI 20 IRQ_TYPE_LEVEL_HIGH>; |
||||
}; |
||||
|
||||
snvs_poweroff: snvs-poweroff { |
||||
compatible = "syscon-poweroff"; |
||||
regmap = <&snvs>; |
||||
offset = <0x38>; |
||||
mask = <0x61>; |
||||
}; |
||||
|
||||
snvs_pwrkey: snvs-powerkey { |
||||
compatible = "fsl,sec-v4.0-pwrkey"; |
||||
regmap = <&snvs>; |
||||
interrupts = <GIC_SPI 4 IRQ_TYPE_LEVEL_HIGH>; |
||||
linux,keycode = <KEY_POWER>; |
||||
wakeup; |
||||
}; |
||||
}; |
||||
|
||||
epit1: epit@020d0000 { |
||||
reg = <0x020d0000 0x4000>; |
||||
interrupts = <GIC_SPI 56 IRQ_TYPE_LEVEL_HIGH>; |
||||
}; |
||||
|
||||
epit2: epit@020d4000 { |
||||
reg = <0x020d4000 0x4000>; |
||||
interrupts = <GIC_SPI 57 IRQ_TYPE_LEVEL_HIGH>; |
||||
}; |
||||
|
||||
src: src@020d8000 { |
||||
compatible = "fsl,imx6sll-src", "fsl,imx51-src"; |
||||
reg = <0x020d8000 0x4000>; |
||||
interrupts = <GIC_SPI 91 IRQ_TYPE_LEVEL_HIGH>, |
||||
<GIC_SPI 96 IRQ_TYPE_LEVEL_HIGH>; |
||||
#reset-cells = <1>; |
||||
}; |
||||
|
||||
gpc: gpc@020dc000 { |
||||
compatible = "fsl,imx6sll-gpc", "fsl,imx6q-gpc"; |
||||
reg = <0x020dc000 0x4000>; |
||||
interrupt-controller; |
||||
#interrupt-cells = <3>; |
||||
interrupts = <GIC_SPI 89 IRQ_TYPE_LEVEL_HIGH>; |
||||
interrupt-parent = <&intc>; |
||||
fsl,mf-mix-wakeup-irq = <0x7c00000 0x7d00 0x0 0x1400640>; |
||||
}; |
||||
|
||||
iomuxc: iomuxc@020e0000 { |
||||
compatible = "fsl,imx6sll-iomuxc"; |
||||
reg = <0x020e0000 0x4000>; |
||||
}; |
||||
|
||||
gpr: iomuxc-gpr@020e4000 { |
||||
compatible = "fsl,imx6sll-iomuxc-gpr", |
||||
"fsl,imx6q-iomuxc-gpr", "syscon"; |
||||
reg = <0x020e4000 0x4000>; |
||||
}; |
||||
|
||||
csi: csi@020e8000 { |
||||
compatible = "fsl,imx6sll-csi", "fsl,imx6s-csi"; |
||||
reg = <0x020e8000 0x4000>; |
||||
interrupts = <GIC_SPI 7 IRQ_TYPE_LEVEL_HIGH>; |
||||
clocks = <&clks IMX6SLL_CLK_DUMMY>, |
||||
<&clks IMX6SLL_CLK_CSI>, |
||||
<&clks IMX6SLL_CLK_DUMMY>; |
||||
clock-names = "disp-axi", "csi_mclk", "disp_dcic"; |
||||
status = "disabled"; |
||||
}; |
||||
|
||||
sdma: sdma@020ec000 { |
||||
compatible = "fsl,imx6sll-sdma", "fsl,imx35-sdma"; |
||||
reg = <0x020ec000 0x4000>; |
||||
interrupts = <GIC_SPI 2 IRQ_TYPE_LEVEL_HIGH>; |
||||
clocks = <&clks IMX6SLL_CLK_SDMA>, |
||||
<&clks IMX6SLL_CLK_SDMA>; |
||||
clock-names = "ipg", "ahb"; |
||||
#dma-cells = <3>; |
||||
iram = <&ocram>; |
||||
fsl,sdma-ram-script-name = "imx/sdma/sdma-imx6q.bin"; |
||||
}; |
||||
|
||||
pxp: pxp@020f0000 { |
||||
compatible = "fsl,imx6ull-pxp-dma", "fsl,imx7d-pxp-dma"; |
||||
reg = <0x020f0000 0x4000>; |
||||
interrupts = <GIC_SPI 98 IRQ_TYPE_LEVEL_HIGH>, |
||||
<GIC_SPI 102 IRQ_TYPE_LEVEL_HIGH>; |
||||
clocks = <&clks IMX6SLL_CLK_DUMMY>, |
||||
<&clks IMX6SLL_CLK_PXP>; |
||||
clock-names = "pxp_ipg", "pxp_axi"; |
||||
status = "disabled"; |
||||
}; |
||||
|
||||
epdc: epdc@020f4000 { |
||||
compatible = "fsl,imx6sll-epdc", "fsl,imx7d-epdc"; |
||||
reg = <0x020f4000 0x4000>; |
||||
interrupts = <GIC_SPI 97 IRQ_TYPE_LEVEL_HIGH>; |
||||
clocks = <&clks IMX6SLL_CLK_EPDC_AXI>, <&clks IMX6SLL_CLK_EPDC_PIX>; |
||||
clock-names = "epdc_axi", "epdc_pix"; |
||||
status = "disabled"; |
||||
}; |
||||
|
||||
lcdif: lcdif@020f8000 { |
||||
compatible = "fsl,imx6sll-lcdif", "fsl,imx28-lcdif"; |
||||
reg = <0x020f8000 0x4000>; |
||||
interrupts = <GIC_SPI 39 IRQ_TYPE_LEVEL_HIGH>; |
||||
clocks = <&clks IMX6SLL_CLK_LCDIF_PIX>, |
||||
<&clks IMX6SLL_CLK_LCDIF_APB>, |
||||
<&clks IMX6SLL_CLK_DUMMY>; |
||||
clock-names = "pix", "axi", "disp_axi"; |
||||
status = "disabled"; |
||||
}; |
||||
|
||||
dcp: dcp@020fc000 { |
||||
compatible = "fsl,imx6sl-dcp"; |
||||
reg = <0x020fc000 0x4000>; |
||||
interrupts = <GIC_SPI 99 IRQ_TYPE_LEVEL_HIGH>, |
||||
<GIC_SPI 100 IRQ_TYPE_LEVEL_HIGH>, |
||||
<GIC_SPI 101 IRQ_TYPE_LEVEL_HIGH>; |
||||
clocks = <&clks IMX6SLL_CLK_DCP>; |
||||
clock-names = "dcp"; |
||||
}; |
||||
}; |
||||
|
||||
aips2: aips-bus@02100000 { |
||||
compatible = "fsl,aips-bus", "simple-bus"; |
||||
#address-cells = <1>; |
||||
#size-cells = <1>; |
||||
reg = <0x02100000 0x100000>; |
||||
ranges; |
||||
|
||||
usbotg1: usb@02184000 { |
||||
compatible = "fsl,imx6sll-usb", "fsl,imx6ul-usb", |
||||
"fsl,imx27-usb"; |
||||
reg = <0x02184000 0x200>; |
||||
interrupts = <GIC_SPI 43 IRQ_TYPE_LEVEL_HIGH>; |
||||
clocks = <&clks IMX6SLL_CLK_USBOH3>; |
||||
fsl,usbphy = <&usbphy1>; |
||||
fsl,usbmisc = <&usbmisc 0>; |
||||
fsl,anatop = <&anatop>; |
||||
ahb-burst-config = <0x0>; |
||||
tx-burst-size-dword = <0x10>; |
||||
rx-burst-size-dword = <0x10>; |
||||
status = "disabled"; |
||||
}; |
||||
|
||||
usbotg2: usb@02184200 { |
||||
compatible = "fsl,imx6sll-usb", "fsl,imx6ul-usb", |
||||
"fsl,imx27-usb"; |
||||
reg = <0x02184200 0x200>; |
||||
interrupts = <GIC_SPI 42 IRQ_TYPE_LEVEL_HIGH>; |
||||
clocks = <&clks IMX6SLL_CLK_USBOH3>; |
||||
fsl,usbphy = <&usbphy2>; |
||||
fsl,usbmisc = <&usbmisc 1>; |
||||
ahb-burst-config = <0x0>; |
||||
tx-burst-size-dword = <0x10>; |
||||
rx-burst-size-dword = <0x10>; |
||||
status = "disabled"; |
||||
}; |
||||
|
||||
usbmisc: usbmisc@02184800 { |
||||
#index-cells = <1>; |
||||
compatible = "fsl,imx6sll-usbmisc", "fsl,imx6ul-usbmisc", |
||||
"fsl,imx6q-usbmisc"; |
||||
reg = <0x02184800 0x200>; |
||||
}; |
||||
|
||||
usdhc1: usdhc@02190000 { |
||||
compatible = "fsl,imx6sll-usdhc", "fsl,imx6sx-usdhc"; |
||||
reg = <0x02190000 0x4000>; |
||||
interrupts = <GIC_SPI 22 IRQ_TYPE_LEVEL_HIGH>; |
||||
clocks = <&clks IMX6SLL_CLK_USDHC1>, |
||||
<&clks IMX6SLL_CLK_USDHC1>, |
||||
<&clks IMX6SLL_CLK_USDHC1>; |
||||
clock-names = "ipg", "ahb", "per"; |
||||
bus-width = <4>; |
||||
fsl,tuning-step = <2>; |
||||
fsl,tuning-start-tap = <20>; |
||||
status = "disabled"; |
||||
}; |
||||
|
||||
usdhc2: usdhc@02194000 { |
||||
compatible = "fsl,imx6sll-usdhc", "fsl,imx6sx-usdhc"; |
||||
reg = <0x02194000 0x4000>; |
||||
interrupts = <GIC_SPI 23 IRQ_TYPE_LEVEL_HIGH>; |
||||
clocks = <&clks IMX6SLL_CLK_USDHC2>, |
||||
<&clks IMX6SLL_CLK_USDHC2>, |
||||
<&clks IMX6SLL_CLK_USDHC2>; |
||||
clock-names = "ipg", "ahb", "per"; |
||||
bus-width = <4>; |
||||
fsl,tuning-step = <2>; |
||||
fsl,tuning-start-tap = <20>; |
||||
status = "disabled"; |
||||
}; |
||||
|
||||
usdhc3: usdhc@02198000 { |
||||
compatible = "fsl,imx6sll-usdhc", "fsl,imx6sx-usdhc"; |
||||
reg = <0x02198000 0x4000>; |
||||
interrupts = <GIC_SPI 24 IRQ_TYPE_LEVEL_HIGH>; |
||||
clocks = <&clks IMX6SLL_CLK_USDHC3>, |
||||
<&clks IMX6SLL_CLK_USDHC3>, |
||||
<&clks IMX6SLL_CLK_USDHC3>; |
||||
clock-names = "ipg", "ahb", "per"; |
||||
bus-width = <4>; |
||||
fsl,tuning-step = <2>; |
||||
fsl,tuning-start-tap = <20>; |
||||
status = "disabled"; |
||||
}; |
||||
|
||||
i2c1: i2c@021a0000 { |
||||
#address-cells = <1>; |
||||
#size-cells = <0>; |
||||
compatible = "fs,imx6sll-i2c", "fsl,imx21-i2c"; |
||||
reg = <0x021a0000 0x4000>; |
||||
interrupts = <GIC_SPI 36 IRQ_TYPE_LEVEL_HIGH>; |
||||
clocks = <&clks IMX6SLL_CLK_I2C1>; |
||||
status = "disabled"; |
||||
}; |
||||
|
||||
i2c2: i2c@021a4000 { |
||||
#address-cells = <1>; |
||||
#size-cells = <0>; |
||||
compatible = "fsl,imx6sll-i2c", "fsl,imx21-i2c"; |
||||
reg = <0x021a4000 0x4000>; |
||||
interrupts = <GIC_SPI 37 IRQ_TYPE_LEVEL_HIGH>; |
||||
clocks = <&clks IMX6SLL_CLK_I2C2>; |
||||
status = "disabled"; |
||||
}; |
||||
|
||||
i2c3: i2c@021a8000 { |
||||
#address-cells = <1>; |
||||
#size-cells = <0>; |
||||
compatible = "fsl,imx6sll-i2c", "fsl,imx21-i2c"; |
||||
reg = <0x021a8000 0x4000>; |
||||
interrupts = <GIC_SPI 38 IRQ_TYPE_LEVEL_HIGH>; |
||||
clocks = <&clks IMX6SLL_CLK_I2C3>; |
||||
status = "disabled"; |
||||
}; |
||||
|
||||
romcp@021ac000 { |
||||
compatible = "fsl,imx6sll-romcp", "syscon"; |
||||
reg = <0x021ac000 0x4000>; |
||||
}; |
||||
|
||||
mmdc: mmdc@021b0000 { |
||||
compatible = "fsl,imx6sll-mmdc", "fsl,imx6q-mmdc"; |
||||
reg = <0x021b0000 0x4000>; |
||||
}; |
||||
|
||||
rngb: rngb@021b4000 { |
||||
compatible = "fsl,imx6sl-rng", "fsl,imx-rng", "imx-rng"; |
||||
reg = <0x021b4000 0x4000>; |
||||
interrupts = <GIC_SPI 5 IRQ_TYPE_LEVEL_HIGH>; |
||||
clocks = <&clks IMX6SLL_CLK_DUMMY>; |
||||
}; |
||||
|
||||
ocotp: ocotp-ctrl@021bc000 { |
||||
compatible = "fsl,imx6sll-ocotp", "syscon"; |
||||
reg = <0x021bc000 0x4000>; |
||||
clocks = <&clks IMX6SLL_CLK_OCOTP>; |
||||
}; |
||||
|
||||
csu: csu@021c0000 { |
||||
compatible = "fsl,imx6sll-csu"; |
||||
reg = <0x021c0000 0x4000>; |
||||
interrupts = <GIC_SPI 21 IRQ_TYPE_LEVEL_HIGH>; |
||||
status = "disabled"; |
||||
}; |
||||
|
||||
snvs_gpr: snvs-gpr@0x021c4000 { |
||||
compatible = "fsl, imx6sll-snvs-gpr"; |
||||
reg = <0x021c4000 0x10000>; |
||||
}; |
||||
|
||||
iomuxc_snvs: iomuxc-snvs@021c8000 { |
||||
compatible = "fsl,imx6sll-iomuxc-snvs"; |
||||
reg = <0x021c80000 0x10000>; |
||||
}; |
||||
|
||||
audmux: audmux@021d8000 { |
||||
compatible = "fsl,imx6sll-audmux", "fsl,imx31-audmux"; |
||||
reg = <0x021d8000 0x4000>; |
||||
status = "disabled"; |
||||
}; |
||||
|
||||
uart5: serial@021f4000 { |
||||
compatible = "fsl,imx6sll-uart", "fsl,imx6q-uart", "fsl,imx21-uart"; |
||||
reg = <0x021f4000 0x4000>; |
||||
interrupts =<GIC_SPI 30 IRQ_TYPE_LEVEL_HIGH>; |
||||
dmas = <&sdma 33 4 0>, <&sdma 34 4 0>; |
||||
dma-names = "rx", "tx"; |
||||
clocks = <&clks IMX6SLL_CLK_UART5_IPG>, |
||||
<&clks IMX6SLL_CLK_UART5_SERIAL>; |
||||
clock-names = "ipg", "per"; |
||||
status = "disabled"; |
||||
}; |
||||
}; |
||||
}; |
||||
}; |
@ -0,0 +1,168 @@ |
||||
/* |
||||
* Copyright (C) 2016 Amarula Solutions B.V. |
||||
* Copyright (C) 2016 Engicam S.r.l. |
||||
* |
||||
* 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 |
||||
* version 2 as published by the Free Software Foundation. |
||||
* |
||||
* 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 , 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. |
||||
*/ |
||||
|
||||
/dts-v1/; |
||||
|
||||
#include <dt-bindings/gpio/gpio.h> |
||||
#include <dt-bindings/input/input.h> |
||||
#include "imx6ul.dtsi" |
||||
|
||||
/ { |
||||
model = "Engicam GEAM6UL"; |
||||
compatible = "engicam,imx6ul-geam", "fsl,imx6ul"; |
||||
|
||||
memory { |
||||
reg = <0x80000000 0x08000000>; |
||||
}; |
||||
|
||||
chosen { |
||||
stdout-path = &uart1; |
||||
}; |
||||
}; |
||||
|
||||
&fec1 { |
||||
pinctrl-names = "default"; |
||||
pinctrl-0 = <&pinctrl_enet1>; |
||||
phy-mode = "rmii"; |
||||
status = "okay"; |
||||
}; |
||||
|
||||
&i2c1 { |
||||
clock-frequency = <100000>; |
||||
pinctrl-names = "default"; |
||||
pinctrl-0 = <&pinctrl_i2c1>; |
||||
status = "okay"; |
||||
}; |
||||
|
||||
&i2c2 { |
||||
clock_frequency = <100000>; |
||||
pinctrl-names = "default"; |
||||
pinctrl-0 = <&pinctrl_i2c2>; |
||||
status = "okay"; |
||||
}; |
||||
|
||||
&uart1 { |
||||
pinctrl-names = "default"; |
||||
pinctrl-0 = <&pinctrl_uart1>; |
||||
status = "okay"; |
||||
}; |
||||
|
||||
&usdhc1 { |
||||
pinctrl-names = "default", "state_100mhz", "state_200mhz"; |
||||
pinctrl-0 = <&pinctrl_usdhc1>; |
||||
pinctrl-1 = <&pinctrl_usdhc1_100mhz>; |
||||
pinctrl-2 = <&pinctrl_usdhc1_200mhz>; |
||||
bus-width = <4>; |
||||
cd-gpios = <&gpio1 19 GPIO_ACTIVE_LOW>; |
||||
no-1-8-v; |
||||
status = "okay"; |
||||
}; |
||||
|
||||
&iomuxc { |
||||
pinctrl_enet1: enet1grp { |
||||
fsl,pins = < |
||||
MX6UL_PAD_GPIO1_IO07__ENET2_MDC 0x1b0b0 |
||||
MX6UL_PAD_GPIO1_IO06__ENET2_MDIO 0x1b0b0 |
||||
MX6UL_PAD_ENET1_RX_EN__ENET1_RX_EN 0x1b0b0 |
||||
MX6UL_PAD_ENET1_RX_DATA0__ENET1_RDATA00 0x1b0b0 |
||||
MX6UL_PAD_ENET1_RX_DATA1__ENET1_RDATA01 0x1b0b0 |
||||
MX6UL_PAD_ENET1_TX_EN__ENET1_TX_EN 0x1b0b0 |
||||
MX6UL_PAD_ENET1_TX_DATA0__ENET1_TDATA00 0x1b0b0 |
||||
MX6UL_PAD_ENET1_TX_DATA1__ENET1_TDATA01 0x1b0b0 |
||||
MX6UL_PAD_ENET1_TX_CLK__ENET1_REF_CLK1 0x4001b031 |
||||
>; |
||||
}; |
||||
|
||||
pinctrl_i2c1: i2c1grp { |
||||
fsl,pins = < |
||||
MX6UL_PAD_UART4_TX_DATA__I2C1_SCL 0x4001b8b0 |
||||
MX6UL_PAD_UART4_RX_DATA__I2C1_SDA 0x4001b8b0 |
||||
>; |
||||
}; |
||||
|
||||
pinctrl_i2c2: i2c2grp { |
||||
fsl,pins = < |
||||
MX6UL_PAD_UART5_TX_DATA__I2C2_SCL 0x4001b8b0 |
||||
MX6UL_PAD_UART5_RX_DATA__I2C2_SDA 0x4001b8b0 |
||||
>; |
||||
}; |
||||
|
||||
pinctrl_uart1: uart1grp { |
||||
fsl,pins = < |
||||
MX6UL_PAD_UART1_TX_DATA__UART1_DCE_TX 0x1b0b1 |
||||
MX6UL_PAD_UART1_RX_DATA__UART1_DCE_RX 0x1b0b1 |
||||
>; |
||||
}; |
||||
|
||||
pinctrl_usdhc1: usdhc1grp { |
||||
fsl,pins = < |
||||
MX6UL_PAD_SD1_CMD__USDHC1_CMD 0x17059 |
||||
MX6UL_PAD_SD1_CLK__USDHC1_CLK 0x10059 |
||||
MX6UL_PAD_SD1_DATA0__USDHC1_DATA0 0x17059 |
||||
MX6UL_PAD_SD1_DATA1__USDHC1_DATA1 0x17059 |
||||
MX6UL_PAD_SD1_DATA2__USDHC1_DATA2 0x17059 |
||||
MX6UL_PAD_SD1_DATA3__USDHC1_DATA3 0x17059 |
||||
>; |
||||
}; |
||||
|
||||
pinctrl_usdhc1_100mhz: usdhc1grp100mhz { |
||||
fsl,pins = < |
||||
MX6UL_PAD_SD1_CMD__USDHC1_CMD 0x170b9 |
||||
MX6UL_PAD_SD1_CLK__USDHC1_CLK 0x100b9 |
||||
MX6UL_PAD_SD1_DATA0__USDHC1_DATA0 0x170b9 |
||||
MX6UL_PAD_SD1_DATA1__USDHC1_DATA1 0x170b9 |
||||
MX6UL_PAD_SD1_DATA2__USDHC1_DATA2 0x170b9 |
||||
MX6UL_PAD_SD1_DATA3__USDHC1_DATA3 0x170b9 |
||||
>; |
||||
}; |
||||
|
||||
pinctrl_usdhc1_200mhz: usdhc1grp200mhz { |
||||
fsl,pins = < |
||||
MX6UL_PAD_SD1_CMD__USDHC1_CMD 0x170f9 |
||||
MX6UL_PAD_SD1_CLK__USDHC1_CLK 0x100f9 |
||||
MX6UL_PAD_SD1_DATA0__USDHC1_DATA0 0x170f9 |
||||
MX6UL_PAD_SD1_DATA1__USDHC1_DATA1 0x170f9 |
||||
MX6UL_PAD_SD1_DATA2__USDHC1_DATA2 0x170f9 |
||||
MX6UL_PAD_SD1_DATA3__USDHC1_DATA3 0x170f9 |
||||
>; |
||||
}; |
||||
}; |
@ -0,0 +1,942 @@ |
||||
/* |
||||
* 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. |
||||
*/ |
||||
|
||||
#include <dt-bindings/clock/imx6ul-clock.h> |
||||
#include <dt-bindings/gpio/gpio.h> |
||||
#include <dt-bindings/input/input.h> |
||||
#include <dt-bindings/interrupt-controller/arm-gic.h> |
||||
#include "imx6ul-pinfunc.h" |
||||
#include "skeleton.dtsi" |
||||
|
||||
/ { |
||||
aliases { |
||||
ethernet0 = &fec1; |
||||
ethernet1 = &fec2; |
||||
gpio0 = &gpio1; |
||||
gpio1 = &gpio2; |
||||
gpio2 = &gpio3; |
||||
gpio3 = &gpio4; |
||||
gpio4 = &gpio5; |
||||
i2c0 = &i2c1; |
||||
i2c1 = &i2c2; |
||||
i2c2 = &i2c3; |
||||
i2c3 = &i2c4; |
||||
mmc0 = &usdhc1; |
||||
mmc1 = &usdhc2; |
||||
serial0 = &uart1; |
||||
serial1 = &uart2; |
||||
serial2 = &uart3; |
||||
serial3 = &uart4; |
||||
serial4 = &uart5; |
||||
serial5 = &uart6; |
||||
serial6 = &uart7; |
||||
serial7 = &uart8; |
||||
sai1 = &sai1; |
||||
sai2 = &sai2; |
||||
sai3 = &sai3; |
||||
spi0 = &ecspi1; |
||||
spi1 = &ecspi2; |
||||
spi2 = &ecspi3; |
||||
spi3 = &ecspi4; |
||||
usbphy0 = &usbphy1; |
||||
usbphy1 = &usbphy2; |
||||
}; |
||||
|
||||
cpus { |
||||
#address-cells = <1>; |
||||
#size-cells = <0>; |
||||
|
||||
cpu0: cpu@0 { |
||||
compatible = "arm,cortex-a7"; |
||||
device_type = "cpu"; |
||||
reg = <0>; |
||||
clock-latency = <61036>; /* two CLK32 periods */ |
||||
operating-points = < |
||||
/* kHz uV */ |
||||
528000 1175000 |
||||
396000 1025000 |
||||
198000 950000 |
||||
>; |
||||
fsl,soc-operating-points = < |
||||
/* KHz uV */ |
||||
528000 1175000 |
||||
396000 1175000 |
||||
198000 1175000 |
||||
>; |
||||
clocks = <&clks IMX6UL_CLK_ARM>, |
||||
<&clks IMX6UL_CLK_PLL2_BUS>, |
||||
<&clks IMX6UL_CLK_PLL2_PFD2>, |
||||
<&clks IMX6UL_CA7_SECONDARY_SEL>, |
||||
<&clks IMX6UL_CLK_STEP>, |
||||
<&clks IMX6UL_CLK_PLL1_SW>, |
||||
<&clks IMX6UL_CLK_PLL1_SYS>, |
||||
<&clks IMX6UL_PLL1_BYPASS>, |
||||
<&clks IMX6UL_CLK_PLL1>, |
||||
<&clks IMX6UL_PLL1_BYPASS_SRC>, |
||||
<&clks IMX6UL_CLK_OSC>; |
||||
clock-names = "arm", "pll2_bus", "pll2_pfd2_396m", |
||||
"secondary_sel", "step", "pll1_sw", |
||||
"pll1_sys", "pll1_bypass", "pll1", |
||||
"pll1_bypass_src", "osc"; |
||||
arm-supply = <®_arm>; |
||||
soc-supply = <®_soc>; |
||||
}; |
||||
}; |
||||
|
||||
intc: interrupt-controller@00a01000 { |
||||
compatible = "arm,cortex-a7-gic"; |
||||
#interrupt-cells = <3>; |
||||
interrupt-controller; |
||||
reg = <0x00a01000 0x1000>, |
||||
<0x00a02000 0x1000>, |
||||
<0x00a04000 0x2000>, |
||||
<0x00a06000 0x2000>; |
||||
}; |
||||
|
||||
ckil: clock-cli { |
||||
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"; |
||||
}; |
||||
|
||||
ipp_di0: clock-di0 { |
||||
compatible = "fixed-clock"; |
||||
#clock-cells = <0>; |
||||
clock-frequency = <0>; |
||||
clock-output-names = "ipp_di0"; |
||||
}; |
||||
|
||||
ipp_di1: clock-di1 { |
||||
compatible = "fixed-clock"; |
||||
#clock-cells = <0>; |
||||
clock-frequency = <0>; |
||||
clock-output-names = "ipp_di1"; |
||||
}; |
||||
|
||||
soc { |
||||
#address-cells = <1>; |
||||
#size-cells = <1>; |
||||
compatible = "simple-bus"; |
||||
interrupt-parent = <&gpc>; |
||||
ranges; |
||||
|
||||
pmu { |
||||
compatible = "arm,cortex-a7-pmu"; |
||||
interrupts = <GIC_SPI 94 IRQ_TYPE_LEVEL_HIGH>; |
||||
status = "disabled"; |
||||
}; |
||||
|
||||
ocram: sram@00900000 { |
||||
compatible = "mmio-sram"; |
||||
reg = <0x00900000 0x20000>; |
||||
}; |
||||
|
||||
dma_apbh: dma-apbh@01804000 { |
||||
compatible = "fsl,imx6q-dma-apbh", "fsl,imx28-dma-apbh"; |
||||
reg = <0x01804000 0x2000>; |
||||
interrupts = <0 13 IRQ_TYPE_LEVEL_HIGH>, |
||||
<0 13 IRQ_TYPE_LEVEL_HIGH>, |
||||
<0 13 IRQ_TYPE_LEVEL_HIGH>, |
||||
<0 13 IRQ_TYPE_LEVEL_HIGH>; |
||||
interrupt-names = "gpmi0", "gpmi1", "gpmi2", "gpmi3"; |
||||
#dma-cells = <1>; |
||||
dma-channels = <4>; |
||||
clocks = <&clks IMX6UL_CLK_APBHDMA>; |
||||
}; |
||||
|
||||
gpmi: gpmi-nand@01806000 { |
||||
compatible = "fsl,imx6q-gpmi-nand"; |
||||
#address-cells = <1>; |
||||
#size-cells = <1>; |
||||
reg = <0x01806000 0x2000>, <0x01808000 0x2000>; |
||||
reg-names = "gpmi-nand", "bch"; |
||||
interrupts = <0 15 IRQ_TYPE_LEVEL_HIGH>; |
||||
interrupt-names = "bch"; |
||||
clocks = <&clks IMX6UL_CLK_GPMI_IO>, |
||||
<&clks IMX6UL_CLK_GPMI_APB>, |
||||
<&clks IMX6UL_CLK_GPMI_BCH>, |
||||
<&clks IMX6UL_CLK_GPMI_BCH_APB>, |
||||
<&clks IMX6UL_CLK_PER_BCH>; |
||||
clock-names = "gpmi_io", "gpmi_apb", "gpmi_bch", |
||||
"gpmi_bch_apb", "per1_bch"; |
||||
dmas = <&dma_apbh 0>; |
||||
dma-names = "rx-tx"; |
||||
status = "disabled"; |
||||
}; |
||||
|
||||
aips1: aips-bus@02000000 { |
||||
compatible = "fsl,aips-bus", "simple-bus"; |
||||
#address-cells = <1>; |
||||
#size-cells = <1>; |
||||
reg = <0x02000000 0x100000>; |
||||
ranges; |
||||
|
||||
spba-bus@02000000 { |
||||
compatible = "fsl,spba-bus", "simple-bus"; |
||||
#address-cells = <1>; |
||||
#size-cells = <1>; |
||||
reg = <0x02000000 0x40000>; |
||||
ranges; |
||||
|
||||
ecspi1: ecspi@02008000 { |
||||
#address-cells = <1>; |
||||
#size-cells = <0>; |
||||
compatible = "fsl,imx6ul-ecspi", "fsl,imx51-ecspi"; |
||||
reg = <0x02008000 0x4000>; |
||||
interrupts = <GIC_SPI 31 IRQ_TYPE_LEVEL_HIGH>; |
||||
clocks = <&clks IMX6UL_CLK_ECSPI1>, |
||||
<&clks IMX6UL_CLK_ECSPI1>; |
||||
clock-names = "ipg", "per"; |
||||
status = "disabled"; |
||||
}; |
||||
|
||||
ecspi2: ecspi@0200c000 { |
||||
#address-cells = <1>; |
||||
#size-cells = <0>; |
||||
compatible = "fsl,imx6ul-ecspi", "fsl,imx51-ecspi"; |
||||
reg = <0x0200c000 0x4000>; |
||||
interrupts = <GIC_SPI 32 IRQ_TYPE_LEVEL_HIGH>; |
||||
clocks = <&clks IMX6UL_CLK_ECSPI2>, |
||||
<&clks IMX6UL_CLK_ECSPI2>; |
||||
clock-names = "ipg", "per"; |
||||
status = "disabled"; |
||||
}; |
||||
|
||||
ecspi3: ecspi@02010000 { |
||||
#address-cells = <1>; |
||||
#size-cells = <0>; |
||||
compatible = "fsl,imx6ul-ecspi", "fsl,imx51-ecspi"; |
||||
reg = <0x02010000 0x4000>; |
||||
interrupts = <GIC_SPI 33 IRQ_TYPE_LEVEL_HIGH>; |
||||
clocks = <&clks IMX6UL_CLK_ECSPI3>, |
||||
<&clks IMX6UL_CLK_ECSPI3>; |
||||
clock-names = "ipg", "per"; |
||||
status = "disabled"; |
||||
}; |
||||
|
||||
ecspi4: ecspi@02014000 { |
||||
#address-cells = <1>; |
||||
#size-cells = <0>; |
||||
compatible = "fsl,imx6ul-ecspi", "fsl,imx51-ecspi"; |
||||
reg = <0x02014000 0x4000>; |
||||
interrupts = <GIC_SPI 34 IRQ_TYPE_LEVEL_HIGH>; |
||||
clocks = <&clks IMX6UL_CLK_ECSPI4>, |
||||
<&clks IMX6UL_CLK_ECSPI4>; |
||||
clock-names = "ipg", "per"; |
||||
status = "disabled"; |
||||
}; |
||||
|
||||
uart7: serial@02018000 { |
||||
compatible = "fsl,imx6ul-uart", |
||||
"fsl,imx6q-uart"; |
||||
reg = <0x02018000 0x4000>; |
||||
interrupts = <GIC_SPI 39 IRQ_TYPE_LEVEL_HIGH>; |
||||
clocks = <&clks IMX6UL_CLK_UART7_IPG>, |
||||
<&clks IMX6UL_CLK_UART7_SERIAL>; |
||||
clock-names = "ipg", "per"; |
||||
status = "disabled"; |
||||
}; |
||||
|
||||
uart1: serial@02020000 { |
||||
compatible = "fsl,imx6ul-uart", |
||||
"fsl,imx6q-uart"; |
||||
reg = <0x02020000 0x4000>; |
||||
interrupts = <GIC_SPI 26 IRQ_TYPE_LEVEL_HIGH>; |
||||
clocks = <&clks IMX6UL_CLK_UART1_IPG>, |
||||
<&clks IMX6UL_CLK_UART1_SERIAL>; |
||||
clock-names = "ipg", "per"; |
||||
status = "disabled"; |
||||
}; |
||||
|
||||
uart8: serial@02024000 { |
||||
compatible = "fsl,imx6ul-uart", |
||||
"fsl,imx6q-uart"; |
||||
reg = <0x02024000 0x4000>; |
||||
interrupts = <GIC_SPI 40 IRQ_TYPE_LEVEL_HIGH>; |
||||
clocks = <&clks IMX6UL_CLK_UART8_IPG>, |
||||
<&clks IMX6UL_CLK_UART8_SERIAL>; |
||||
clock-names = "ipg", "per"; |
||||
status = "disabled"; |
||||
}; |
||||
|
||||
sai1: sai@02028000 { |
||||
#sound-dai-cells = <0>; |
||||
compatible = "fsl,imx6ul-sai", "fsl,imx6sx-sai"; |
||||
reg = <0x02028000 0x4000>; |
||||
interrupts = <GIC_SPI 97 IRQ_TYPE_LEVEL_HIGH>; |
||||
clocks = <&clks IMX6UL_CLK_SAI1_IPG>, |
||||
<&clks IMX6UL_CLK_SAI1>, |
||||
<&clks IMX6UL_CLK_DUMMY>, <&clks IMX6UL_CLK_DUMMY>; |
||||
clock-names = "bus", "mclk1", "mclk2", "mclk3"; |
||||
dmas = <&sdma 35 24 0>, |
||||
<&sdma 36 24 0>; |
||||
dma-names = "rx", "tx"; |
||||
status = "disabled"; |
||||
}; |
||||
|
||||
sai2: sai@0202c000 { |
||||
#sound-dai-cells = <0>; |
||||
compatible = "fsl,imx6ul-sai", "fsl,imx6sx-sai"; |
||||
reg = <0x0202c000 0x4000>; |
||||
interrupts = <GIC_SPI 98 IRQ_TYPE_LEVEL_HIGH>; |
||||
clocks = <&clks IMX6UL_CLK_SAI2_IPG>, |
||||
<&clks IMX6UL_CLK_SAI2>, |
||||
<&clks IMX6UL_CLK_DUMMY>, <&clks IMX6UL_CLK_DUMMY>; |
||||
clock-names = "bus", "mclk1", "mclk2", "mclk3"; |
||||
dmas = <&sdma 37 24 0>, |
||||
<&sdma 38 24 0>; |
||||
dma-names = "rx", "tx"; |
||||
status = "disabled"; |
||||
}; |
||||
|
||||
sai3: sai@02030000 { |
||||
#sound-dai-cells = <0>; |
||||
compatible = "fsl,imx6ul-sai", "fsl,imx6sx-sai"; |
||||
reg = <0x02030000 0x4000>; |
||||
interrupts = <GIC_SPI 24 IRQ_TYPE_LEVEL_HIGH>; |
||||
clocks = <&clks IMX6UL_CLK_SAI3_IPG>, |
||||
<&clks IMX6UL_CLK_SAI3>, |
||||
<&clks IMX6UL_CLK_DUMMY>, <&clks IMX6UL_CLK_DUMMY>; |
||||
clock-names = "bus", "mclk1", "mclk2", "mclk3"; |
||||
dmas = <&sdma 39 24 0>, |
||||
<&sdma 40 24 0>; |
||||
dma-names = "rx", "tx"; |
||||
status = "disabled"; |
||||
}; |
||||
}; |
||||
|
||||
tsc: tsc@02040000 { |
||||
compatible = "fsl,imx6ul-tsc"; |
||||
reg = <0x02040000 0x4000>, <0x0219c000 0x4000>; |
||||
interrupts = <GIC_SPI 3 IRQ_TYPE_LEVEL_HIGH>, |
||||
<GIC_SPI 101 IRQ_TYPE_LEVEL_HIGH>; |
||||
clocks = <&clks IMX6UL_CLK_IPG>, |
||||
<&clks IMX6UL_CLK_ADC2>; |
||||
clock-names = "tsc", "adc"; |
||||
status = "disabled"; |
||||
}; |
||||
|
||||
pwm1: pwm@02080000 { |
||||
compatible = "fsl,imx6ul-pwm", "fsl,imx27-pwm"; |
||||
reg = <0x02080000 0x4000>; |
||||
interrupts = <GIC_SPI 115 IRQ_TYPE_LEVEL_HIGH>; |
||||
clocks = <&clks IMX6UL_CLK_PWM1>, |
||||
<&clks IMX6UL_CLK_PWM1>; |
||||
clock-names = "ipg", "per"; |
||||
#pwm-cells = <2>; |
||||
status = "disabled"; |
||||
}; |
||||
|
||||
pwm2: pwm@02084000 { |
||||
compatible = "fsl,imx6ul-pwm", "fsl,imx27-pwm"; |
||||
reg = <0x02084000 0x4000>; |
||||
interrupts = <GIC_SPI 116 IRQ_TYPE_LEVEL_HIGH>; |
||||
clocks = <&clks IMX6UL_CLK_PWM2>, |
||||
<&clks IMX6UL_CLK_PWM2>; |
||||
clock-names = "ipg", "per"; |
||||
#pwm-cells = <2>; |
||||
status = "disabled"; |
||||
}; |
||||
|
||||
pwm3: pwm@02088000 { |
||||
compatible = "fsl,imx6ul-pwm", "fsl,imx27-pwm"; |
||||
reg = <0x02088000 0x4000>; |
||||
interrupts = <GIC_SPI 117 IRQ_TYPE_LEVEL_HIGH>; |
||||
clocks = <&clks IMX6UL_CLK_PWM3>, |
||||
<&clks IMX6UL_CLK_PWM3>; |
||||
clock-names = "ipg", "per"; |
||||
#pwm-cells = <2>; |
||||
status = "disabled"; |
||||
}; |
||||
|
||||
pwm4: pwm@0208c000 { |
||||
compatible = "fsl,imx6ul-pwm", "fsl,imx27-pwm"; |
||||
reg = <0x0208c000 0x4000>; |
||||
interrupts = <GIC_SPI 118 IRQ_TYPE_LEVEL_HIGH>; |
||||
clocks = <&clks IMX6UL_CLK_PWM4>, |
||||
<&clks IMX6UL_CLK_PWM4>; |
||||
clock-names = "ipg", "per"; |
||||
#pwm-cells = <2>; |
||||
status = "disabled"; |
||||
}; |
||||
|
||||
can1: flexcan@02090000 { |
||||
compatible = "fsl,imx6ul-flexcan", "fsl,imx6q-flexcan"; |
||||
reg = <0x02090000 0x4000>; |
||||
interrupts = <GIC_SPI 110 IRQ_TYPE_LEVEL_HIGH>; |
||||
clocks = <&clks IMX6UL_CLK_CAN1_IPG>, |
||||
<&clks IMX6UL_CLK_CAN1_SERIAL>; |
||||
clock-names = "ipg", "per"; |
||||
status = "disabled"; |
||||
}; |
||||
|
||||
can2: flexcan@02094000 { |
||||
compatible = "fsl,imx6ul-flexcan", "fsl,imx6q-flexcan"; |
||||
reg = <0x02094000 0x4000>; |
||||
interrupts = <GIC_SPI 111 IRQ_TYPE_LEVEL_HIGH>; |
||||
clocks = <&clks IMX6UL_CLK_CAN2_IPG>, |
||||
<&clks IMX6UL_CLK_CAN2_SERIAL>; |
||||
clock-names = "ipg", "per"; |
||||
status = "disabled"; |
||||
}; |
||||
|
||||
gpt1: gpt@02098000 { |
||||
compatible = "fsl,imx6ul-gpt", "fsl,imx6sx-gpt"; |
||||
reg = <0x02098000 0x4000>; |
||||
interrupts = <GIC_SPI 55 IRQ_TYPE_LEVEL_HIGH>; |
||||
clocks = <&clks IMX6UL_CLK_GPT1_BUS>, |
||||
<&clks IMX6UL_CLK_GPT1_SERIAL>; |
||||
clock-names = "ipg", "per"; |
||||
}; |
||||
|
||||
gpio1: gpio@0209c000 { |
||||
compatible = "fsl,imx6ul-gpio", "fsl,imx35-gpio"; |
||||
reg = <0x0209c000 0x4000>; |
||||
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>; |
||||
gpio-ranges = <&iomuxc 0 23 10>, <&iomuxc 10 17 6>, |
||||
<&iomuxc 16 33 16>; |
||||
}; |
||||
|
||||
gpio2: gpio@020a0000 { |
||||
compatible = "fsl,imx6ul-gpio", "fsl,imx35-gpio"; |
||||
reg = <0x020a0000 0x4000>; |
||||
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>; |
||||
gpio-ranges = <&iomuxc 0 49 16>, <&iomuxc 16 111 6>; |
||||
}; |
||||
|
||||
gpio3: gpio@020a4000 { |
||||
compatible = "fsl,imx6ul-gpio", "fsl,imx35-gpio"; |
||||
reg = <0x020a4000 0x4000>; |
||||
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>; |
||||
gpio-ranges = <&iomuxc 0 65 29>; |
||||
}; |
||||
|
||||
gpio4: gpio@020a8000 { |
||||
compatible = "fsl,imx6ul-gpio", "fsl,imx35-gpio"; |
||||
reg = <0x020a8000 0x4000>; |
||||
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>; |
||||
gpio-ranges = <&iomuxc 0 94 17>, <&iomuxc 17 117 12>; |
||||
}; |
||||
|
||||
gpio5: gpio@020ac000 { |
||||
compatible = "fsl,imx6ul-gpio", "fsl,imx35-gpio"; |
||||
reg = <0x020ac000 0x4000>; |
||||
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>; |
||||
gpio-ranges = <&iomuxc 0 7 10>, <&iomuxc 10 5 2>; |
||||
}; |
||||
|
||||
fec2: ethernet@020b4000 { |
||||
compatible = "fsl,imx6ul-fec", "fsl,imx6q-fec"; |
||||
reg = <0x020b4000 0x4000>; |
||||
interrupts = <GIC_SPI 120 IRQ_TYPE_LEVEL_HIGH>, |
||||
<GIC_SPI 121 IRQ_TYPE_LEVEL_HIGH>; |
||||
clocks = <&clks IMX6UL_CLK_ENET>, |
||||
<&clks IMX6UL_CLK_ENET_AHB>, |
||||
<&clks IMX6UL_CLK_ENET_PTP>, |
||||
<&clks IMX6UL_CLK_ENET2_REF_125M>, |
||||
<&clks IMX6UL_CLK_ENET2_REF_125M>; |
||||
clock-names = "ipg", "ahb", "ptp", |
||||
"enet_clk_ref", "enet_out"; |
||||
fsl,num-tx-queues=<1>; |
||||
fsl,num-rx-queues=<1>; |
||||
status = "disabled"; |
||||
}; |
||||
|
||||
kpp: kpp@020b8000 { |
||||
compatible = "fsl,imx6ul-kpp", "fsl,imx6q-kpp", "fsl,imx21-kpp"; |
||||
reg = <0x020b8000 0x4000>; |
||||
interrupts = <GIC_SPI 82 IRQ_TYPE_LEVEL_HIGH>; |
||||
clocks = <&clks IMX6UL_CLK_KPP>; |
||||
status = "disabled"; |
||||
}; |
||||
|
||||
wdog1: wdog@020bc000 { |
||||
compatible = "fsl,imx6ul-wdt", "fsl,imx21-wdt"; |
||||
reg = <0x020bc000 0x4000>; |
||||
interrupts = <GIC_SPI 80 IRQ_TYPE_LEVEL_HIGH>; |
||||
clocks = <&clks IMX6UL_CLK_WDOG1>; |
||||
}; |
||||
|
||||
wdog2: wdog@020c0000 { |
||||
compatible = "fsl,imx6ul-wdt", "fsl,imx21-wdt"; |
||||
reg = <0x020c0000 0x4000>; |
||||
interrupts = <GIC_SPI 81 IRQ_TYPE_LEVEL_HIGH>; |
||||
clocks = <&clks IMX6UL_CLK_WDOG2>; |
||||
status = "disabled"; |
||||
}; |
||||
|
||||
clks: ccm@020c4000 { |
||||
compatible = "fsl,imx6ul-ccm"; |
||||
reg = <0x020c4000 0x4000>; |
||||
interrupts = <GIC_SPI 87 IRQ_TYPE_LEVEL_HIGH>, |
||||
<GIC_SPI 88 IRQ_TYPE_LEVEL_HIGH>; |
||||
#clock-cells = <1>; |
||||
clocks = <&ckil>, <&osc>, <&ipp_di0>, <&ipp_di1>; |
||||
clock-names = "ckil", "osc", "ipp_di0", "ipp_di1"; |
||||
}; |
||||
|
||||
anatop: anatop@020c8000 { |
||||
compatible = "fsl,imx6ul-anatop", "fsl,imx6q-anatop", |
||||
"syscon", "simple-bus"; |
||||
reg = <0x020c8000 0x1000>; |
||||
interrupts = <GIC_SPI 49 IRQ_TYPE_LEVEL_HIGH>, |
||||
<GIC_SPI 54 IRQ_TYPE_LEVEL_HIGH>, |
||||
<GIC_SPI 127 IRQ_TYPE_LEVEL_HIGH>; |
||||
|
||||
reg_3p0: regulator-3p0 { |
||||
compatible = "fsl,anatop-regulator"; |
||||
regulator-name = "vdd3p0"; |
||||
regulator-min-microvolt = <2625000>; |
||||
regulator-max-microvolt = <3400000>; |
||||
anatop-reg-offset = <0x120>; |
||||
anatop-vol-bit-shift = <8>; |
||||
anatop-vol-bit-width = <5>; |
||||
anatop-min-bit-val = <0>; |
||||
anatop-min-voltage = <2625000>; |
||||
anatop-max-voltage = <3400000>; |
||||
anatop-enable-bit = <0>; |
||||
}; |
||||
|
||||
reg_arm: regulator-vddcore { |
||||
compatible = "fsl,anatop-regulator"; |
||||
regulator-name = "cpu"; |
||||
regulator-min-microvolt = <725000>; |
||||
regulator-max-microvolt = <1450000>; |
||||
regulator-always-on; |
||||
anatop-reg-offset = <0x140>; |
||||
anatop-vol-bit-shift = <0>; |
||||
anatop-vol-bit-width = <5>; |
||||
anatop-delay-reg-offset = <0x170>; |
||||
anatop-delay-bit-shift = <24>; |
||||
anatop-delay-bit-width = <2>; |
||||
anatop-min-bit-val = <1>; |
||||
anatop-min-voltage = <725000>; |
||||
anatop-max-voltage = <1450000>; |
||||
}; |
||||
|
||||
reg_soc: regulator-vddsoc { |
||||
compatible = "fsl,anatop-regulator"; |
||||
regulator-name = "vddsoc"; |
||||
regulator-min-microvolt = <725000>; |
||||
regulator-max-microvolt = <1450000>; |
||||
regulator-always-on; |
||||
anatop-reg-offset = <0x140>; |
||||
anatop-vol-bit-shift = <18>; |
||||
anatop-vol-bit-width = <5>; |
||||
anatop-delay-reg-offset = <0x170>; |
||||
anatop-delay-bit-shift = <28>; |
||||
anatop-delay-bit-width = <2>; |
||||
anatop-min-bit-val = <1>; |
||||
anatop-min-voltage = <725000>; |
||||
anatop-max-voltage = <1450000>; |
||||
}; |
||||
}; |
||||
|
||||
usbphy1: usbphy@020c9000 { |
||||
compatible = "fsl,imx6ul-usbphy", "fsl,imx23-usbphy"; |
||||
reg = <0x020c9000 0x1000>; |
||||
interrupts = <GIC_SPI 44 IRQ_TYPE_LEVEL_HIGH>; |
||||
clocks = <&clks IMX6UL_CLK_USBPHY1>; |
||||
phy-3p0-supply = <®_3p0>; |
||||
fsl,anatop = <&anatop>; |
||||
}; |
||||
|
||||
usbphy2: usbphy@020ca000 { |
||||
compatible = "fsl,imx6ul-usbphy", "fsl,imx23-usbphy"; |
||||
reg = <0x020ca000 0x1000>; |
||||
interrupts = <GIC_SPI 45 IRQ_TYPE_LEVEL_HIGH>; |
||||
clocks = <&clks IMX6UL_CLK_USBPHY2>; |
||||
phy-3p0-supply = <®_3p0>; |
||||
fsl,anatop = <&anatop>; |
||||
}; |
||||
|
||||
snvs: snvs@020cc000 { |
||||
compatible = "fsl,sec-v4.0-mon", "syscon", "simple-mfd"; |
||||
reg = <0x020cc000 0x4000>; |
||||
|
||||
snvs_rtc: snvs-rtc-lp { |
||||
compatible = "fsl,sec-v4.0-mon-rtc-lp"; |
||||
regmap = <&snvs>; |
||||
offset = <0x34>; |
||||
interrupts = <GIC_SPI 19 IRQ_TYPE_LEVEL_HIGH>, |
||||
<GIC_SPI 20 IRQ_TYPE_LEVEL_HIGH>; |
||||
}; |
||||
|
||||
snvs_poweroff: snvs-poweroff { |
||||
compatible = "syscon-poweroff"; |
||||
regmap = <&snvs>; |
||||
offset = <0x38>; |
||||
mask = <0x60>; |
||||
status = "disabled"; |
||||
}; |
||||
|
||||
snvs_pwrkey: snvs-powerkey { |
||||
compatible = "fsl,sec-v4.0-pwrkey"; |
||||
regmap = <&snvs>; |
||||
interrupts = <GIC_SPI 4 IRQ_TYPE_LEVEL_HIGH>; |
||||
linux,keycode = <KEY_POWER>; |
||||
wakeup-source; |
||||
}; |
||||
}; |
||||
|
||||
epit1: epit@020d0000 { |
||||
reg = <0x020d0000 0x4000>; |
||||
interrupts = <GIC_SPI 56 IRQ_TYPE_LEVEL_HIGH>; |
||||
}; |
||||
|
||||
epit2: epit@020d4000 { |
||||
reg = <0x020d4000 0x4000>; |
||||
interrupts = <GIC_SPI 57 IRQ_TYPE_LEVEL_HIGH>; |
||||
}; |
||||
|
||||
src: src@020d8000 { |
||||
compatible = "fsl,imx6ul-src", "fsl,imx51-src"; |
||||
reg = <0x020d8000 0x4000>; |
||||
interrupts = <GIC_SPI 91 IRQ_TYPE_LEVEL_HIGH>, |
||||
<GIC_SPI 96 IRQ_TYPE_LEVEL_HIGH>; |
||||
#reset-cells = <1>; |
||||
}; |
||||
|
||||
gpc: gpc@020dc000 { |
||||
compatible = "fsl,imx6ul-gpc", "fsl,imx6q-gpc"; |
||||
reg = <0x020dc000 0x4000>; |
||||
interrupt-controller; |
||||
#interrupt-cells = <3>; |
||||
interrupts = <GIC_SPI 89 IRQ_TYPE_LEVEL_HIGH>; |
||||
interrupt-parent = <&intc>; |
||||
}; |
||||
|
||||
iomuxc: iomuxc@020e0000 { |
||||
compatible = "fsl,imx6ul-iomuxc"; |
||||
reg = <0x020e0000 0x4000>; |
||||
}; |
||||
|
||||
gpr: iomuxc-gpr@020e4000 { |
||||
compatible = "fsl,imx6ul-iomuxc-gpr", |
||||
"fsl,imx6q-iomuxc-gpr", "syscon"; |
||||
reg = <0x020e4000 0x4000>; |
||||
}; |
||||
|
||||
gpt2: gpt@020e8000 { |
||||
compatible = "fsl,imx6ul-gpt", "fsl,imx6sx-gpt"; |
||||
reg = <0x020e8000 0x4000>; |
||||
interrupts = <GIC_SPI 109 IRQ_TYPE_LEVEL_HIGH>; |
||||
clocks = <&clks IMX6UL_CLK_GPT2_BUS>, |
||||
<&clks IMX6UL_CLK_GPT2_SERIAL>; |
||||
clock-names = "ipg", "per"; |
||||
}; |
||||
|
||||
sdma: sdma@020ec000 { |
||||
compatible = "fsl,imx6ul-sdma", "fsl,imx6q-sdma", |
||||
"fsl,imx35-sdma"; |
||||
reg = <0x020ec000 0x4000>; |
||||
interrupts = <GIC_SPI 2 IRQ_TYPE_LEVEL_HIGH>; |
||||
clocks = <&clks IMX6UL_CLK_SDMA>, |
||||
<&clks IMX6UL_CLK_SDMA>; |
||||
clock-names = "ipg", "ahb"; |
||||
#dma-cells = <3>; |
||||
fsl,sdma-ram-script-name = "imx/sdma/sdma-imx6q.bin"; |
||||
}; |
||||
|
||||
pwm5: pwm@020f0000 { |
||||
compatible = "fsl,imx6ul-pwm", "fsl,imx27-pwm"; |
||||
reg = <0x020f0000 0x4000>; |
||||
interrupts = <GIC_SPI 114 IRQ_TYPE_LEVEL_HIGH>; |
||||
clocks = <&clks IMX6UL_CLK_PWM5>, |
||||
<&clks IMX6UL_CLK_PWM5>; |
||||
clock-names = "ipg", "per"; |
||||
#pwm-cells = <2>; |
||||
status = "disabled"; |
||||
}; |
||||
|
||||
pwm6: pwm@020f4000 { |
||||
compatible = "fsl,imx6ul-pwm", "fsl,imx27-pwm"; |
||||
reg = <0x020f4000 0x4000>; |
||||
interrupts = <GIC_SPI 115 IRQ_TYPE_LEVEL_HIGH>; |
||||
clocks = <&clks IMX6UL_CLK_PWM6>, |
||||
<&clks IMX6UL_CLK_PWM6>; |
||||
clock-names = "ipg", "per"; |
||||
#pwm-cells = <2>; |
||||
status = "disabled"; |
||||
}; |
||||
|
||||
pwm7: pwm@020f8000 { |
||||
compatible = "fsl,imx6ul-pwm", "fsl,imx27-pwm"; |
||||
reg = <0x020f8000 0x4000>; |
||||
interrupts = <GIC_SPI 116 IRQ_TYPE_LEVEL_HIGH>; |
||||
clocks = <&clks IMX6UL_CLK_PWM7>, |
||||
<&clks IMX6UL_CLK_PWM7>; |
||||
clock-names = "ipg", "per"; |
||||
#pwm-cells = <2>; |
||||
status = "disabled"; |
||||
}; |
||||
|
||||
pwm8: pwm@020fc000 { |
||||
compatible = "fsl,imx6ul-pwm", "fsl,imx27-pwm"; |
||||
reg = <0x020fc000 0x4000>; |
||||
interrupts = <GIC_SPI 117 IRQ_TYPE_LEVEL_HIGH>; |
||||
clocks = <&clks IMX6UL_CLK_PWM8>, |
||||
<&clks IMX6UL_CLK_PWM8>; |
||||
clock-names = "ipg", "per"; |
||||
#pwm-cells = <2>; |
||||
status = "disabled"; |
||||
}; |
||||
}; |
||||
|
||||
aips2: aips-bus@02100000 { |
||||
compatible = "fsl,aips-bus", "simple-bus"; |
||||
#address-cells = <1>; |
||||
#size-cells = <1>; |
||||
reg = <0x02100000 0x100000>; |
||||
ranges; |
||||
|
||||
usbotg1: usb@02184000 { |
||||
compatible = "fsl,imx6ul-usb", "fsl,imx27-usb"; |
||||
reg = <0x02184000 0x200>; |
||||
interrupts = <GIC_SPI 43 IRQ_TYPE_LEVEL_HIGH>; |
||||
clocks = <&clks IMX6UL_CLK_USBOH3>; |
||||
fsl,usbphy = <&usbphy1>; |
||||
fsl,usbmisc = <&usbmisc 0>; |
||||
fsl,anatop = <&anatop>; |
||||
ahb-burst-config = <0x0>; |
||||
tx-burst-size-dword = <0x10>; |
||||
rx-burst-size-dword = <0x10>; |
||||
status = "disabled"; |
||||
}; |
||||
|
||||
usbotg2: usb@02184200 { |
||||
compatible = "fsl,imx6ul-usb", "fsl,imx27-usb"; |
||||
reg = <0x02184200 0x200>; |
||||
interrupts = <GIC_SPI 42 IRQ_TYPE_LEVEL_HIGH>; |
||||
clocks = <&clks IMX6UL_CLK_USBOH3>; |
||||
fsl,usbphy = <&usbphy2>; |
||||
fsl,usbmisc = <&usbmisc 1>; |
||||
ahb-burst-config = <0x0>; |
||||
tx-burst-size-dword = <0x10>; |
||||
rx-burst-size-dword = <0x10>; |
||||
status = "disabled"; |
||||
}; |
||||
|
||||
usbmisc: usbmisc@02184800 { |
||||
#index-cells = <1>; |
||||
compatible = "fsl,imx6ul-usbmisc", "fsl,imx6q-usbmisc"; |
||||
reg = <0x02184800 0x200>; |
||||
}; |
||||
|
||||
fec1: ethernet@02188000 { |
||||
compatible = "fsl,imx6ul-fec", "fsl,imx6q-fec"; |
||||
reg = <0x02188000 0x4000>; |
||||
interrupts = <GIC_SPI 118 IRQ_TYPE_LEVEL_HIGH>, |
||||
<GIC_SPI 119 IRQ_TYPE_LEVEL_HIGH>; |
||||
clocks = <&clks IMX6UL_CLK_ENET>, |
||||
<&clks IMX6UL_CLK_ENET_AHB>, |
||||
<&clks IMX6UL_CLK_ENET_PTP>, |
||||
<&clks IMX6UL_CLK_ENET_REF>, |
||||
<&clks IMX6UL_CLK_ENET_REF>; |
||||
clock-names = "ipg", "ahb", "ptp", |
||||
"enet_clk_ref", "enet_out"; |
||||
fsl,num-tx-queues=<1>; |
||||
fsl,num-rx-queues=<1>; |
||||
status = "disabled"; |
||||
}; |
||||
|
||||
usdhc1: usdhc@02190000 { |
||||
compatible = "fsl,imx6ul-usdhc", "fsl,imx6sx-usdhc"; |
||||
reg = <0x02190000 0x4000>; |
||||
interrupts = <GIC_SPI 22 IRQ_TYPE_LEVEL_HIGH>; |
||||
clocks = <&clks IMX6UL_CLK_USDHC1>, |
||||
<&clks IMX6UL_CLK_USDHC1>, |
||||
<&clks IMX6UL_CLK_USDHC1>; |
||||
clock-names = "ipg", "ahb", "per"; |
||||
bus-width = <4>; |
||||
status = "disabled"; |
||||
}; |
||||
|
||||
usdhc2: usdhc@02194000 { |
||||
compatible = "fsl,imx6ul-usdhc", "fsl,imx6sx-usdhc"; |
||||
reg = <0x02194000 0x4000>; |
||||
interrupts = <GIC_SPI 23 IRQ_TYPE_LEVEL_HIGH>; |
||||
clocks = <&clks IMX6UL_CLK_USDHC2>, |
||||
<&clks IMX6UL_CLK_USDHC2>, |
||||
<&clks IMX6UL_CLK_USDHC2>; |
||||
clock-names = "ipg", "ahb", "per"; |
||||
bus-width = <4>; |
||||
status = "disabled"; |
||||
}; |
||||
|
||||
adc1: adc@02198000 { |
||||
compatible = "fsl,imx6ul-adc", "fsl,vf610-adc"; |
||||
reg = <0x02198000 0x4000>; |
||||
interrupts = <GIC_SPI 100 IRQ_TYPE_LEVEL_HIGH>; |
||||
clocks = <&clks IMX6UL_CLK_ADC1>; |
||||
num-channels = <2>; |
||||
clock-names = "adc"; |
||||
fsl,adck-max-frequency = <30000000>, <40000000>, |
||||
<20000000>; |
||||
status = "disabled"; |
||||
}; |
||||
|
||||
i2c1: i2c@021a0000 { |
||||
#address-cells = <1>; |
||||
#size-cells = <0>; |
||||
compatible = "fsl,imx6ul-i2c", "fsl,imx21-i2c"; |
||||
reg = <0x021a0000 0x4000>; |
||||
interrupts = <GIC_SPI 36 IRQ_TYPE_LEVEL_HIGH>; |
||||
clocks = <&clks IMX6UL_CLK_I2C1>; |
||||
status = "disabled"; |
||||
}; |
||||
|
||||
i2c2: i2c@021a4000 { |
||||
#address-cells = <1>; |
||||
#size-cells = <0>; |
||||
compatible = "fsl,imx6ul-i2c", "fsl,imx21-i2c"; |
||||
reg = <0x021a4000 0x4000>; |
||||
interrupts = <GIC_SPI 37 IRQ_TYPE_LEVEL_HIGH>; |
||||
clocks = <&clks IMX6UL_CLK_I2C2>; |
||||
status = "disabled"; |
||||
}; |
||||
|
||||
i2c3: i2c@021a8000 { |
||||
#address-cells = <1>; |
||||
#size-cells = <0>; |
||||
compatible = "fsl,imx6ul-i2c", "fsl,imx21-i2c"; |
||||
reg = <0x021a8000 0x4000>; |
||||
interrupts = <GIC_SPI 38 IRQ_TYPE_LEVEL_HIGH>; |
||||
clocks = <&clks IMX6UL_CLK_I2C3>; |
||||
status = "disabled"; |
||||
}; |
||||
|
||||
mmdc: mmdc@021b0000 { |
||||
compatible = "fsl,imx6ul-mmdc", "fsl,imx6q-mmdc"; |
||||
reg = <0x021b0000 0x4000>; |
||||
}; |
||||
|
||||
lcdif: lcdif@021c8000 { |
||||
compatible = "fsl,imx6ul-lcdif", "fsl,imx28-lcdif"; |
||||
reg = <0x021c8000 0x4000>; |
||||
interrupts = <GIC_SPI 5 IRQ_TYPE_LEVEL_HIGH>; |
||||
clocks = <&clks IMX6UL_CLK_LCDIF_PIX>, |
||||
<&clks IMX6UL_CLK_LCDIF_APB>, |
||||
<&clks IMX6UL_CLK_DUMMY>; |
||||
clock-names = "pix", "axi", "disp_axi"; |
||||
status = "disabled"; |
||||
}; |
||||
|
||||
qspi: qspi@021e0000 { |
||||
#address-cells = <1>; |
||||
#size-cells = <0>; |
||||
compatible = "fsl,imx6ul-qspi", "fsl,imx6sx-qspi"; |
||||
reg = <0x021e0000 0x4000>, <0x60000000 0x10000000>; |
||||
reg-names = "QuadSPI", "QuadSPI-memory"; |
||||
interrupts = <GIC_SPI 107 IRQ_TYPE_LEVEL_HIGH>; |
||||
clocks = <&clks IMX6UL_CLK_QSPI>, |
||||
<&clks IMX6UL_CLK_QSPI>; |
||||
clock-names = "qspi_en", "qspi"; |
||||
status = "disabled"; |
||||
}; |
||||
|
||||
uart2: serial@021e8000 { |
||||
compatible = "fsl,imx6ul-uart", |
||||
"fsl,imx6q-uart"; |
||||
reg = <0x021e8000 0x4000>; |
||||
interrupts = <GIC_SPI 27 IRQ_TYPE_LEVEL_HIGH>; |
||||
clocks = <&clks IMX6UL_CLK_UART2_IPG>, |
||||
<&clks IMX6UL_CLK_UART2_SERIAL>; |
||||
clock-names = "ipg", "per"; |
||||
status = "disabled"; |
||||
}; |
||||
|
||||
uart3: serial@021ec000 { |
||||
compatible = "fsl,imx6ul-uart", |
||||
"fsl,imx6q-uart"; |
||||
reg = <0x021ec000 0x4000>; |
||||
interrupts = <GIC_SPI 28 IRQ_TYPE_LEVEL_HIGH>; |
||||
clocks = <&clks IMX6UL_CLK_UART3_IPG>, |
||||
<&clks IMX6UL_CLK_UART3_SERIAL>; |
||||
clock-names = "ipg", "per"; |
||||
status = "disabled"; |
||||
}; |
||||
|
||||
uart4: serial@021f0000 { |
||||
compatible = "fsl,imx6ul-uart", |
||||
"fsl,imx6q-uart"; |
||||
reg = <0x021f0000 0x4000>; |
||||
interrupts = <GIC_SPI 29 IRQ_TYPE_LEVEL_HIGH>; |
||||
clocks = <&clks IMX6UL_CLK_UART4_IPG>, |
||||
<&clks IMX6UL_CLK_UART4_SERIAL>; |
||||
clock-names = "ipg", "per"; |
||||
status = "disabled"; |
||||
}; |
||||
|
||||
uart5: serial@021f4000 { |
||||
compatible = "fsl,imx6ul-uart", |
||||
"fsl,imx6q-uart"; |
||||
reg = <0x021f4000 0x4000>; |
||||
interrupts = <GIC_SPI 30 IRQ_TYPE_LEVEL_HIGH>; |
||||
clocks = <&clks IMX6UL_CLK_UART5_IPG>, |
||||
<&clks IMX6UL_CLK_UART5_SERIAL>; |
||||
clock-names = "ipg", "per"; |
||||
status = "disabled"; |
||||
}; |
||||
|
||||
i2c4: i2c@021f8000 { |
||||
#address-cells = <1>; |
||||
#size-cells = <0>; |
||||
compatible = "fsl,imx6ul-i2c", "fsl,imx21-i2c"; |
||||
reg = <0x021f8000 0x4000>; |
||||
interrupts = <GIC_SPI 35 IRQ_TYPE_LEVEL_HIGH>; |
||||
clocks = <&clks IMX6UL_CLK_I2C4>; |
||||
status = "disabled"; |
||||
}; |
||||
|
||||
uart6: serial@021fc000 { |
||||
compatible = "fsl,imx6ul-uart", |
||||
"fsl,imx6q-uart"; |
||||
reg = <0x021fc000 0x4000>; |
||||
interrupts = <GIC_SPI 17 IRQ_TYPE_LEVEL_HIGH>; |
||||
clocks = <&clks IMX6UL_CLK_UART6_IPG>, |
||||
<&clks IMX6UL_CLK_UART6_SERIAL>; |
||||
clock-names = "ipg", "per"; |
||||
status = "disabled"; |
||||
}; |
||||
}; |
||||
}; |
||||
}; |
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,6 @@ |
||||
config LITESOM |
||||
bool |
||||
select MX6UL |
||||
select DM |
||||
select DM_THERMAL |
||||
select SUPPORT_SPL |
@ -0,0 +1,6 @@ |
||||
# (C) Copyright 2016 Grinn
|
||||
#
|
||||
# SPDX-License-Identifier: GPL-2.0+
|
||||
#
|
||||
|
||||
obj-y := litesom.o
|
@ -0,0 +1,16 @@ |
||||
/*
|
||||
* Copyright (C) 2016 Grinn |
||||
* |
||||
* SPDX-License-Identifier: GPL-2.0+ |
||||
*/ |
||||
|
||||
#ifndef __ARCH_ARM_MACH_LITESOM_SOM_H__ |
||||
#define __ARCH_ARM_MACH_LITESOM_SOM_H__ |
||||
|
||||
int litesom_mmc_init(bd_t *bis); |
||||
|
||||
#ifdef CONFIG_SPL_BUILD |
||||
void litesom_init_f(void); |
||||
#endif |
||||
|
||||
#endif |
@ -0,0 +1,200 @@ |
||||
/*
|
||||
* Copyright (C) 2015-2016 Freescale Semiconductor, Inc. |
||||
* Copyright (C) 2016 Grinn |
||||
* |
||||
* SPDX-License-Identifier: GPL-2.0+ |
||||
*/ |
||||
|
||||
#include <asm/arch/clock.h> |
||||
#include <asm/arch/iomux.h> |
||||
#include <asm/arch/imx-regs.h> |
||||
#include <asm/arch/crm_regs.h> |
||||
#include <asm/arch/mx6ul_pins.h> |
||||
#include <asm/arch/mx6-pins.h> |
||||
#include <asm/arch/sys_proto.h> |
||||
#include <asm/gpio.h> |
||||
#include <asm/imx-common/iomux-v3.h> |
||||
#include <asm/imx-common/boot_mode.h> |
||||
#include <asm/io.h> |
||||
#include <common.h> |
||||
#include <fsl_esdhc.h> |
||||
#include <linux/sizes.h> |
||||
#include <mmc.h> |
||||
|
||||
DECLARE_GLOBAL_DATA_PTR; |
||||
|
||||
#define USDHC_PAD_CTRL (PAD_CTL_PKE | PAD_CTL_PUE | \ |
||||
PAD_CTL_PUS_22K_UP | PAD_CTL_SPEED_LOW | \
|
||||
PAD_CTL_DSE_80ohm | PAD_CTL_SRE_FAST | PAD_CTL_HYS) |
||||
|
||||
int dram_init(void) |
||||
{ |
||||
gd->ram_size = imx_ddr_size(); |
||||
|
||||
return 0; |
||||
} |
||||
|
||||
static iomux_v3_cfg_t const emmc_pads[] = { |
||||
MX6_PAD_NAND_RE_B__USDHC2_CLK | MUX_PAD_CTRL(USDHC_PAD_CTRL), |
||||
MX6_PAD_NAND_WE_B__USDHC2_CMD | MUX_PAD_CTRL(USDHC_PAD_CTRL), |
||||
MX6_PAD_NAND_DATA00__USDHC2_DATA0 | MUX_PAD_CTRL(USDHC_PAD_CTRL), |
||||
MX6_PAD_NAND_DATA01__USDHC2_DATA1 | MUX_PAD_CTRL(USDHC_PAD_CTRL), |
||||
MX6_PAD_NAND_DATA02__USDHC2_DATA2 | MUX_PAD_CTRL(USDHC_PAD_CTRL), |
||||
MX6_PAD_NAND_DATA03__USDHC2_DATA3 | MUX_PAD_CTRL(USDHC_PAD_CTRL), |
||||
MX6_PAD_NAND_DATA04__USDHC2_DATA4 | MUX_PAD_CTRL(USDHC_PAD_CTRL), |
||||
MX6_PAD_NAND_DATA05__USDHC2_DATA5 | MUX_PAD_CTRL(USDHC_PAD_CTRL), |
||||
MX6_PAD_NAND_DATA06__USDHC2_DATA6 | MUX_PAD_CTRL(USDHC_PAD_CTRL), |
||||
MX6_PAD_NAND_DATA07__USDHC2_DATA7 | MUX_PAD_CTRL(USDHC_PAD_CTRL), |
||||
|
||||
/* RST_B */ |
||||
MX6_PAD_NAND_ALE__GPIO4_IO10 | MUX_PAD_CTRL(NO_PAD_CTRL), |
||||
}; |
||||
|
||||
#ifdef CONFIG_FSL_ESDHC |
||||
static struct fsl_esdhc_cfg emmc_cfg = {USDHC2_BASE_ADDR, 0, 8}; |
||||
|
||||
#define EMMC_PWR_GPIO IMX_GPIO_NR(4, 10) |
||||
|
||||
int litesom_mmc_init(bd_t *bis) |
||||
{ |
||||
int ret; |
||||
|
||||
/* eMMC */ |
||||
imx_iomux_v3_setup_multiple_pads(emmc_pads, ARRAY_SIZE(emmc_pads)); |
||||
gpio_direction_output(EMMC_PWR_GPIO, 0); |
||||
udelay(500); |
||||
gpio_direction_output(EMMC_PWR_GPIO, 1); |
||||
emmc_cfg.sdhc_clk = mxc_get_clock(MXC_ESDHC2_CLK); |
||||
|
||||
ret = fsl_esdhc_initialize(bis, &emmc_cfg); |
||||
if (ret) { |
||||
printf("Warning: failed to initialize mmc dev 1 (eMMC)\n"); |
||||
return ret; |
||||
} |
||||
|
||||
return 0; |
||||
} |
||||
#endif |
||||
|
||||
#ifdef CONFIG_SPL_BUILD |
||||
#include <libfdt.h> |
||||
#include <spl.h> |
||||
#include <asm/arch/mx6-ddr.h> |
||||
|
||||
|
||||
static struct mx6ul_iomux_grp_regs mx6_grp_ioregs = { |
||||
.grp_addds = 0x00000030, |
||||
.grp_ddrmode_ctl = 0x00020000, |
||||
.grp_b0ds = 0x00000030, |
||||
.grp_ctlds = 0x00000030, |
||||
.grp_b1ds = 0x00000030, |
||||
.grp_ddrpke = 0x00000000, |
||||
.grp_ddrmode = 0x00020000, |
||||
.grp_ddr_type = 0x000c0000, |
||||
}; |
||||
|
||||
static struct mx6ul_iomux_ddr_regs mx6_ddr_ioregs = { |
||||
.dram_dqm0 = 0x00000030, |
||||
.dram_dqm1 = 0x00000030, |
||||
.dram_ras = 0x00000030, |
||||
.dram_cas = 0x00000030, |
||||
.dram_odt0 = 0x00000030, |
||||
.dram_odt1 = 0x00000030, |
||||
.dram_sdba2 = 0x00000000, |
||||
.dram_sdclk_0 = 0x00000030, |
||||
.dram_sdqs0 = 0x00000030, |
||||
.dram_sdqs1 = 0x00000030, |
||||
.dram_reset = 0x00000030, |
||||
}; |
||||
|
||||
static struct mx6_mmdc_calibration mx6_mmcd_calib = { |
||||
.p0_mpwldectrl0 = 0x00000000, |
||||
.p0_mpdgctrl0 = 0x41570155, |
||||
.p0_mprddlctl = 0x4040474A, |
||||
.p0_mpwrdlctl = 0x40405550, |
||||
}; |
||||
|
||||
struct mx6_ddr_sysinfo ddr_sysinfo = { |
||||
.dsize = 0, |
||||
.cs_density = 20, |
||||
.ncs = 1, |
||||
.cs1_mirror = 0, |
||||
.rtt_wr = 2, |
||||
.rtt_nom = 1, /* RTT_Nom = RZQ/2 */ |
||||
.walat = 0, /* Write additional latency */ |
||||
.ralat = 5, /* Read additional latency */ |
||||
.mif3_mode = 3, /* Command prediction working mode */ |
||||
.bi_on = 1, /* Bank interleaving enabled */ |
||||
.sde_to_rst = 0x10, /* 14 cycles, 200us (JEDEC default) */ |
||||
.rst_to_cke = 0x23, /* 33 cycles, 500us (JEDEC default) */ |
||||
.ddr_type = DDR_TYPE_DDR3, |
||||
.refsel = 0, /* Refresh cycles at 64KHz */ |
||||
.refr = 1, /* 2 refresh commands per refresh cycle */ |
||||
}; |
||||
|
||||
static struct mx6_ddr3_cfg mem_ddr = { |
||||
.mem_speed = 800, |
||||
.density = 4, |
||||
.width = 16, |
||||
.banks = 8, |
||||
.rowaddr = 15, |
||||
.coladdr = 10, |
||||
.pagesz = 2, |
||||
.trcd = 1375, |
||||
.trcmin = 4875, |
||||
.trasmin = 3500, |
||||
}; |
||||
|
||||
static void ccgr_init(void) |
||||
{ |
||||
struct mxc_ccm_reg *ccm = (struct mxc_ccm_reg *)CCM_BASE_ADDR; |
||||
|
||||
writel(0xFFFFFFFF, &ccm->CCGR0); |
||||
writel(0xFFFFFFFF, &ccm->CCGR1); |
||||
writel(0xFFFFFFFF, &ccm->CCGR2); |
||||
writel(0xFFFFFFFF, &ccm->CCGR3); |
||||
writel(0xFFFFFFFF, &ccm->CCGR4); |
||||
writel(0xFFFFFFFF, &ccm->CCGR5); |
||||
writel(0xFFFFFFFF, &ccm->CCGR6); |
||||
writel(0xFFFFFFFF, &ccm->CCGR7); |
||||
} |
||||
|
||||
static void spl_dram_init(void) |
||||
{ |
||||
unsigned long ram_size; |
||||
|
||||
mx6ul_dram_iocfg(mem_ddr.width, &mx6_ddr_ioregs, &mx6_grp_ioregs); |
||||
mx6_dram_cfg(&ddr_sysinfo, &mx6_mmcd_calib, &mem_ddr); |
||||
|
||||
/*
|
||||
* Get actual RAM size, so we can adjust DDR row size for <512M |
||||
* memories |
||||
*/ |
||||
ram_size = get_ram_size((void *)CONFIG_SYS_SDRAM_BASE, SZ_512M); |
||||
if (ram_size < SZ_512M) { |
||||
mem_ddr.rowaddr = 14; |
||||
mx6_dram_cfg(&ddr_sysinfo, &mx6_mmcd_calib, &mem_ddr); |
||||
} |
||||
} |
||||
|
||||
void litesom_init_f(void) |
||||
{ |
||||
ccgr_init(); |
||||
|
||||
/* setup AIPS and disable watchdog */ |
||||
arch_cpu_init(); |
||||
|
||||
#ifdef CONFIG_BOARD_EARLY_INIT_F |
||||
board_early_init_f(); |
||||
#endif |
||||
|
||||
/* setup GP timer */ |
||||
timer_init(); |
||||
|
||||
/* UART clocks enabled and gd valid - init serial console */ |
||||
preloader_console_init(); |
||||
|
||||
/* DDR initialization */ |
||||
spl_dram_init(); |
||||
} |
||||
#endif |
@ -0,0 +1,12 @@ |
||||
if TARGET_MX53CX9020 |
||||
|
||||
config SYS_BOARD |
||||
default "mx53cx9020" |
||||
|
||||
config SYS_VENDOR |
||||
default "beckhoff" |
||||
|
||||
config SYS_CONFIG_NAME |
||||
default "mx53cx9020" |
||||
|
||||
endif |
@ -0,0 +1,6 @@ |
||||
MX53 CX9020 |
||||
M: Patrick Bruenn <p.bruenn@beckhoff.com> |
||||
S: Maintained |
||||
F: board/beckhoff/mx53cx9020/ |
||||
F: include/configs/mx53cx9020.h |
||||
F: configs/mx53cx9020_defconfig |
@ -0,0 +1,9 @@ |
||||
#
|
||||
# Copyright (C) 2015 Beckhoff Automation GmbH & Co. KG
|
||||
# Patrick Bruenn <p.bruenn@beckhoff.com>
|
||||
#
|
||||
# SPDX-License-Identifier: GPL-2.0+
|
||||
#
|
||||
|
||||
obj-y += mx53cx9020.o
|
||||
obj-$(CONFIG_VIDEO) += mx53cx9020_video.o
|
@ -0,0 +1,82 @@ |
||||
/* |
||||
* Copyright (C) 2015 Beckhoff Automation GmbH |
||||
* Patrick Bruenn <p.bruenn@beckhoff.com> |
||||
* |
||||
* Based on <u-boot>/board/freescale/mx53loco/imximage.cfg |
||||
* Copyright (C) 2011 Freescale Semiconductor, Inc. |
||||
* |
||||
* SPDX-License-Identifier: GPL-2.0+ |
||||
*/ |
||||
|
||||
/* image version */ |
||||
IMAGE_VERSION 2 |
||||
|
||||
/* |
||||
* Boot Device : one of |
||||
* spi, sd (the board has no nand neither onenand) |
||||
*/ |
||||
BOOT_FROM sd |
||||
|
||||
/* |
||||
* Device Configuration Data (DCD) |
||||
* |
||||
* Each entry must have the format: |
||||
* Addr-type Address Value |
||||
* |
||||
* where: |
||||
* Addr-type register length (1,2 or 4 bytes) |
||||
* Address absolute address of the register |
||||
* value value to be stored in the register |
||||
*/ |
||||
DATA 4 0x53fa8554 0x00300000 |
||||
DATA 4 0x53fa8558 0x00300040 |
||||
DATA 4 0x53fa8560 0x00300000 |
||||
DATA 4 0x53fa8564 0x00300040 |
||||
DATA 4 0x53fa8568 0x00300040 |
||||
DATA 4 0x53fa8570 0x00300000 |
||||
DATA 4 0x53fa8574 0x00300000 |
||||
DATA 4 0x53fa8578 0x00300000 |
||||
DATA 4 0x53fa857c 0x00300040 |
||||
DATA 4 0x53fa8580 0x00300040 |
||||
DATA 4 0x53fa8584 0x00300000 |
||||
DATA 4 0x53fa8588 0x00300000 |
||||
DATA 4 0x53fa8590 0x00300040 |
||||
DATA 4 0x53fa8594 0x00300000 |
||||
DATA 4 0x53fa86f0 0x00300000 |
||||
DATA 4 0x53fa86f4 0x00000000 |
||||
DATA 4 0x53fa86fc 0x00000000 |
||||
DATA 4 0x53fa8714 0x00000000 |
||||
DATA 4 0x53fa8718 0x00300000 |
||||
DATA 4 0x53fa871c 0x00300000 |
||||
DATA 4 0x53fa8720 0x00300000 |
||||
DATA 4 0x53fa8724 0x00000000 |
||||
DATA 4 0x53fa8728 0x00300000 |
||||
DATA 4 0x53fa872c 0x00300000 |
||||
DATA 4 0x63fd9088 0x35343535 |
||||
DATA 4 0x63fd9090 0x4d444c44 |
||||
DATA 4 0x63fd907c 0x01370138 |
||||
DATA 4 0x63fd9080 0x013b013c |
||||
DATA 4 0x63fd9018 0x00011740 |
||||
DATA 4 0x63fd9000 0x83190000 |
||||
DATA 4 0x63fd900c 0x40425333 |
||||
DATA 4 0x63fd9010 0xb68e8a63 |
||||
DATA 4 0x63fd9014 0x01ff00db |
||||
DATA 4 0x63fd902c 0x000026d2 |
||||
DATA 4 0x63fd9030 0x009f0e21 |
||||
DATA 4 0x63fd9008 0x12273030 |
||||
DATA 4 0x63fd9004 0x0002002d |
||||
DATA 4 0x63fd901c 0x00008032 |
||||
DATA 4 0x63fd901c 0x00008033 |
||||
DATA 4 0x63fd901c 0x00028031 |
||||
DATA 4 0x63fd901c 0x052080b0 |
||||
DATA 4 0x63fd901c 0x04008040 |
||||
DATA 4 0x63fd9000 0xc3190000 |
||||
DATA 4 0x63fd901c 0x0000803a |
||||
DATA 4 0x63fd901c 0x0000803b |
||||
DATA 4 0x63fd901c 0x00028039 |
||||
DATA 4 0x63fd901c 0x05208138 |
||||
DATA 4 0x63fd901c 0x04008048 |
||||
DATA 4 0x63fd9020 0x00005800 |
||||
DATA 4 0x63fd9040 0x05380003 |
||||
DATA 4 0x63fd9058 0x00022227 |
||||
DATA 4 0x63fd901c 0x00000000 |
@ -0,0 +1,367 @@ |
||||
/*
|
||||
* Copyright (C) 2015 Beckhoff Automation GmbH & Co. KG |
||||
* Patrick Bruenn <p.bruenn@beckhoff.com> |
||||
* |
||||
* Based on <u-boot>/board/freescale/mx53loco/mx53loco.c |
||||
* Copyright (C) 2011 Freescale Semiconductor, Inc. |
||||
* |
||||
* SPDX-License-Identifier: GPL-2.0+ |
||||
*/ |
||||
|
||||
#include <common.h> |
||||
#include <asm/io.h> |
||||
#include <asm/arch/imx-regs.h> |
||||
#include <asm/arch/sys_proto.h> |
||||
#include <asm/arch/crm_regs.h> |
||||
#include <asm/arch/clock.h> |
||||
#include <asm/arch/iomux-mx53.h> |
||||
#include <asm/arch/clock.h> |
||||
#include <asm/imx-common/mx5_video.h> |
||||
#include <ACEX1K.h> |
||||
#include <netdev.h> |
||||
#include <i2c.h> |
||||
#include <mmc.h> |
||||
#include <fsl_esdhc.h> |
||||
#include <asm/gpio.h> |
||||
#include <linux/fb.h> |
||||
#include <ipu_pixfmt.h> |
||||
#include <fs.h> |
||||
#include <dm/platdata.h> |
||||
#include <dm/platform_data/serial_mxc.h> |
||||
|
||||
enum LED_GPIOS { |
||||
GPIO_SD1_CD = IMX_GPIO_NR(1, 1), |
||||
GPIO_SD2_CD = IMX_GPIO_NR(1, 4), |
||||
GPIO_LED_SD2_R = IMX_GPIO_NR(3, 16), |
||||
GPIO_LED_SD2_B = IMX_GPIO_NR(3, 17), |
||||
GPIO_LED_SD2_G = IMX_GPIO_NR(3, 18), |
||||
GPIO_LED_SD1_R = IMX_GPIO_NR(3, 19), |
||||
GPIO_LED_SD1_B = IMX_GPIO_NR(3, 20), |
||||
GPIO_LED_SD1_G = IMX_GPIO_NR(3, 21), |
||||
GPIO_LED_PWR_R = IMX_GPIO_NR(3, 22), |
||||
GPIO_LED_PWR_B = IMX_GPIO_NR(3, 23), |
||||
GPIO_LED_PWR_G = IMX_GPIO_NR(3, 24), |
||||
GPIO_SUPS_INT = IMX_GPIO_NR(3, 31), |
||||
GPIO_C3_CONFIG = IMX_GPIO_NR(6, 8), |
||||
GPIO_C3_STATUS = IMX_GPIO_NR(6, 7), |
||||
GPIO_C3_DONE = IMX_GPIO_NR(6, 9), |
||||
}; |
||||
|
||||
#define CCAT_BASE_ADDR ((void *)0xf0000000) |
||||
#define CCAT_END_ADDR (CCAT_BASE_ADDR + (1024 * 1024 * 32)) |
||||
#define CCAT_SIZE 1191788 |
||||
#define CCAT_SIGN_ADDR (CCAT_BASE_ADDR + 12) |
||||
static const char CCAT_SIGNATURE[] = "CCAT"; |
||||
|
||||
static const u32 CCAT_MODE_CONFIG = 0x0024DC81; |
||||
static const u32 CCAT_MODE_RUN = 0x0033DC8F; |
||||
|
||||
DECLARE_GLOBAL_DATA_PTR; |
||||
|
||||
static uint32_t mx53_dram_size[2]; |
||||
|
||||
phys_size_t get_effective_memsize(void) |
||||
{ |
||||
/*
|
||||
* WARNING: We must override get_effective_memsize() function here |
||||
* to report only the size of the first DRAM bank. This is to make |
||||
* U-Boot relocator place U-Boot into valid memory, that is, at the |
||||
* end of the first DRAM bank. If we did not override this function |
||||
* like so, U-Boot would be placed at the address of the first DRAM |
||||
* bank + total DRAM size - sizeof(uboot), which in the setup where |
||||
* each DRAM bank contains 512MiB of DRAM would result in placing |
||||
* U-Boot into invalid memory area close to the end of the first |
||||
* DRAM bank. |
||||
*/ |
||||
return mx53_dram_size[0]; |
||||
} |
||||
|
||||
int dram_init(void) |
||||
{ |
||||
mx53_dram_size[0] = get_ram_size((void *)PHYS_SDRAM_1, 1 << 30); |
||||
mx53_dram_size[1] = get_ram_size((void *)PHYS_SDRAM_2, 1 << 30); |
||||
|
||||
gd->ram_size = mx53_dram_size[0] + mx53_dram_size[1]; |
||||
|
||||
return 0; |
||||
} |
||||
|
||||
void dram_init_banksize(void) |
||||
{ |
||||
gd->bd->bi_dram[0].start = PHYS_SDRAM_1; |
||||
gd->bd->bi_dram[0].size = mx53_dram_size[0]; |
||||
|
||||
gd->bd->bi_dram[1].start = PHYS_SDRAM_2; |
||||
gd->bd->bi_dram[1].size = mx53_dram_size[1]; |
||||
} |
||||
|
||||
u32 get_board_rev(void) |
||||
{ |
||||
struct iim_regs *iim = (struct iim_regs *)IMX_IIM_BASE; |
||||
struct fuse_bank *bank = &iim->bank[0]; |
||||
struct fuse_bank0_regs *fuse = |
||||
(struct fuse_bank0_regs *)bank->fuse_regs; |
||||
|
||||
int rev = readl(&fuse->gp[6]); |
||||
|
||||
return (get_cpu_rev() & ~(0xF << 8)) | (rev & 0xF) << 8; |
||||
} |
||||
|
||||
/*
|
||||
* Set CCAT mode |
||||
* @mode: use CCAT_MODE_CONFIG or CCAT_MODE_RUN |
||||
*/ |
||||
void weim_cs0_settings(u32 mode) |
||||
{ |
||||
struct weim *weim_regs = (struct weim *)WEIM_BASE_ADDR; |
||||
|
||||
writel(0x0, &weim_regs->cs0gcr1); |
||||
writel(mode, &weim_regs->cs0gcr1); |
||||
writel(0x00001002, &weim_regs->cs0gcr2); |
||||
|
||||
writel(0x04000000, &weim_regs->cs0rcr1); |
||||
writel(0x00000000, &weim_regs->cs0rcr2); |
||||
|
||||
writel(0x04000000, &weim_regs->cs0wcr1); |
||||
writel(0x00000000, &weim_regs->cs0wcr2); |
||||
} |
||||
|
||||
static void setup_gpio_eim(void) |
||||
{ |
||||
gpio_direction_input(GPIO_C3_STATUS); |
||||
gpio_direction_input(GPIO_C3_DONE); |
||||
gpio_direction_output(GPIO_C3_CONFIG, 1); |
||||
|
||||
weim_cs0_settings(CCAT_MODE_RUN); |
||||
} |
||||
|
||||
static void setup_gpio_sups(void) |
||||
{ |
||||
gpio_direction_input(GPIO_SUPS_INT); |
||||
|
||||
static const int BLINK_INTERVALL = 50000; |
||||
int status = 1; |
||||
while (gpio_get_value(GPIO_SUPS_INT)) { |
||||
/* signal "CX SUPS power fail" */ |
||||
gpio_set_value(GPIO_LED_PWR_R, |
||||
(++status / BLINK_INTERVALL) % 2); |
||||
} |
||||
|
||||
/* signal "CX power up" */ |
||||
gpio_set_value(GPIO_LED_PWR_R, 1); |
||||
} |
||||
|
||||
static void setup_gpio_leds(void) |
||||
{ |
||||
gpio_direction_output(GPIO_LED_SD2_R, 0); |
||||
gpio_direction_output(GPIO_LED_SD2_B, 0); |
||||
gpio_direction_output(GPIO_LED_SD2_G, 0); |
||||
gpio_direction_output(GPIO_LED_SD1_R, 0); |
||||
gpio_direction_output(GPIO_LED_SD1_B, 0); |
||||
gpio_direction_output(GPIO_LED_SD1_G, 0); |
||||
gpio_direction_output(GPIO_LED_PWR_R, 0); |
||||
gpio_direction_output(GPIO_LED_PWR_B, 0); |
||||
gpio_direction_output(GPIO_LED_PWR_G, 0); |
||||
} |
||||
|
||||
#ifdef CONFIG_USB_EHCI_MX5 |
||||
int board_ehci_hcd_init(int port) |
||||
{ |
||||
/* request VBUS power enable pin, GPIO7_8 */ |
||||
gpio_direction_output(IMX_GPIO_NR(7, 8), 1); |
||||
return 0; |
||||
} |
||||
#endif |
||||
|
||||
#ifdef CONFIG_FSL_ESDHC |
||||
struct fsl_esdhc_cfg esdhc_cfg[2] = { |
||||
{MMC_SDHC1_BASE_ADDR}, |
||||
{MMC_SDHC2_BASE_ADDR}, |
||||
}; |
||||
|
||||
int board_mmc_getcd(struct mmc *mmc) |
||||
{ |
||||
struct fsl_esdhc_cfg *cfg = (struct fsl_esdhc_cfg *)mmc->priv; |
||||
int ret; |
||||
|
||||
gpio_direction_input(GPIO_SD1_CD); |
||||
gpio_direction_input(GPIO_SD2_CD); |
||||
|
||||
if (cfg->esdhc_base == MMC_SDHC1_BASE_ADDR) |
||||
ret = !gpio_get_value(GPIO_SD1_CD); |
||||
else |
||||
ret = !gpio_get_value(GPIO_SD2_CD); |
||||
|
||||
return ret; |
||||
} |
||||
|
||||
int board_mmc_init(bd_t *bis) |
||||
{ |
||||
u32 index; |
||||
int ret; |
||||
|
||||
esdhc_cfg[0].sdhc_clk = mxc_get_clock(MXC_ESDHC_CLK); |
||||
esdhc_cfg[1].sdhc_clk = mxc_get_clock(MXC_ESDHC2_CLK); |
||||
|
||||
for (index = 0; index < CONFIG_SYS_FSL_ESDHC_NUM; index++) { |
||||
switch (index) { |
||||
case 0: |
||||
break; |
||||
case 1: |
||||
break; |
||||
default: |
||||
printf("Warning: you configured more ESDHC controller(%d) as supported by the board(2)\n", |
||||
CONFIG_SYS_FSL_ESDHC_NUM); |
||||
return -EINVAL; |
||||
} |
||||
ret = fsl_esdhc_initialize(bis, &esdhc_cfg[index]); |
||||
if (ret) |
||||
return ret; |
||||
} |
||||
|
||||
return 0; |
||||
} |
||||
#endif |
||||
|
||||
static int power_init(void) |
||||
{ |
||||
/* nothing to do on CX9020 */ |
||||
return 0; |
||||
} |
||||
|
||||
static void clock_1GHz(void) |
||||
{ |
||||
int ret; |
||||
u32 ref_clk = MXC_HCLK; |
||||
/*
|
||||
* After increasing voltage to 1.25V, we can switch |
||||
* CPU clock to 1GHz and DDR to 400MHz safely |
||||
*/ |
||||
ret = mxc_set_clock(ref_clk, 1000, MXC_ARM_CLK); |
||||
if (ret) |
||||
printf("CPU: Switch CPU clock to 1GHZ failed\n"); |
||||
|
||||
ret = mxc_set_clock(ref_clk, 400, MXC_PERIPH_CLK); |
||||
ret |= mxc_set_clock(ref_clk, 400, MXC_DDR_CLK); |
||||
if (ret) |
||||
printf("CPU: Switch DDR clock to 400MHz failed\n"); |
||||
} |
||||
|
||||
int board_early_init_f(void) |
||||
{ |
||||
setup_gpio_leds(); |
||||
setup_gpio_sups(); |
||||
setup_gpio_eim(); |
||||
setup_iomux_lcd(); |
||||
|
||||
return 0; |
||||
} |
||||
|
||||
/*
|
||||
* Do not overwrite the console |
||||
* Use always serial for U-Boot console |
||||
*/ |
||||
int overwrite_console(void) |
||||
{ |
||||
return 1; |
||||
} |
||||
|
||||
int board_init(void) |
||||
{ |
||||
gd->bd->bi_boot_params = PHYS_SDRAM_1 + 0x100; |
||||
|
||||
mxc_set_sata_internal_clock(); |
||||
|
||||
return 0; |
||||
} |
||||
|
||||
int checkboard(void) |
||||
{ |
||||
puts("Board: Beckhoff CX9020\n"); |
||||
|
||||
return 0; |
||||
} |
||||
|
||||
static int ccat_config_fn(int assert_config, int flush, int cookie) |
||||
{ |
||||
/* prepare FPGA for programming */ |
||||
weim_cs0_settings(CCAT_MODE_CONFIG); |
||||
gpio_set_value(GPIO_C3_CONFIG, 0); |
||||
udelay(1); |
||||
gpio_set_value(GPIO_C3_CONFIG, 1); |
||||
udelay(230); |
||||
|
||||
return FPGA_SUCCESS; |
||||
} |
||||
|
||||
static int ccat_status_fn(int cookie) |
||||
{ |
||||
return FPGA_FAIL; |
||||
} |
||||
|
||||
static int ccat_write_fn(const void *buf, size_t buf_len, int flush, int cookie) |
||||
{ |
||||
const uint8_t *const buffer = buf; |
||||
|
||||
/* program CCAT */ |
||||
int i; |
||||
for (i = 0; i < buf_len; ++i) |
||||
writeb(buffer[i], CCAT_BASE_ADDR); |
||||
|
||||
writeb(0xff, CCAT_BASE_ADDR); |
||||
writeb(0xff, CCAT_BASE_ADDR); |
||||
|
||||
return FPGA_SUCCESS; |
||||
} |
||||
|
||||
static int ccat_done_fn(int cookie) |
||||
{ |
||||
/* programming complete? */ |
||||
return gpio_get_value(GPIO_C3_DONE); |
||||
} |
||||
|
||||
static int ccat_post_fn(int cookie) |
||||
{ |
||||
/* switch to FPGA run mode */ |
||||
weim_cs0_settings(CCAT_MODE_RUN); |
||||
invalidate_dcache_range((ulong) CCAT_BASE_ADDR, (ulong) CCAT_END_ADDR); |
||||
|
||||
if (memcmp(CCAT_SIGN_ADDR, CCAT_SIGNATURE, sizeof(CCAT_SIGNATURE))) { |
||||
printf("Verifing CCAT firmware failed, signature not found\n"); |
||||
return FPGA_FAIL; |
||||
} |
||||
|
||||
/* signal "CX booting OS" */ |
||||
gpio_set_value(GPIO_LED_PWR_R, 1); |
||||
gpio_set_value(GPIO_LED_PWR_G, 1); |
||||
gpio_set_value(GPIO_LED_PWR_B, 0); |
||||
return FPGA_SUCCESS; |
||||
} |
||||
|
||||
static Altera_CYC2_Passive_Serial_fns ccat_fns = { |
||||
.config = ccat_config_fn, |
||||
.status = ccat_status_fn, |
||||
.done = ccat_done_fn, |
||||
.write = ccat_write_fn, |
||||
.abort = ccat_post_fn, |
||||
.post = ccat_post_fn, |
||||
}; |
||||
|
||||
static Altera_desc ccat_fpga = { |
||||
.family = Altera_CYC2, |
||||
.iface = passive_serial, |
||||
.size = CCAT_SIZE, |
||||
.iface_fns = &ccat_fns, |
||||
.base = CCAT_BASE_ADDR, |
||||
}; |
||||
|
||||
int board_late_init(void) |
||||
{ |
||||
if (!power_init()) |
||||
clock_1GHz(); |
||||
|
||||
fpga_init(); |
||||
fpga_add(fpga_altera, &ccat_fpga); |
||||
|
||||
return 0; |
||||
} |
@ -0,0 +1,49 @@ |
||||
/*
|
||||
* Copyright (C) 2015 Beckhoff Automation GmbH & Co. KG |
||||
* Patrick Bruenn <p.bruenn@beckhoff.com> |
||||
* |
||||
* Based on <u-boot>/board/freescale/mx53loco/mx53loco_video.c |
||||
* Copyright (C) 2012 Freescale Semiconductor, Inc. |
||||
* |
||||
* SPDX-License-Identifier: GPL-2.0+ |
||||
*/ |
||||
|
||||
#include <common.h> |
||||
#include <linux/list.h> |
||||
#include <asm/gpio.h> |
||||
#include <asm/arch/iomux-mx53.h> |
||||
#include <linux/fb.h> |
||||
#include <ipu_pixfmt.h> |
||||
|
||||
#define CX9020_DVI_PWD IMX_GPIO_NR(6, 1) |
||||
|
||||
static struct fb_videomode const vga_640x480 = { |
||||
.name = "VESA_VGA_640x480", |
||||
.refresh = 60, |
||||
.xres = 640, |
||||
.yres = 480, |
||||
.pixclock = 39721, /* picosecond (25.175 MHz) */ |
||||
.left_margin = 40, |
||||
.right_margin = 60, |
||||
.upper_margin = 10, |
||||
.lower_margin = 10, |
||||
.hsync_len = 20, |
||||
.vsync_len = 10, |
||||
.sync = 0, |
||||
.vmode = FB_VMODE_NONINTERLACED |
||||
}; |
||||
|
||||
void setup_iomux_lcd(void) |
||||
{ |
||||
/* Turn on DVI_PWD */ |
||||
imx_iomux_v3_setup_pad(MX53_PAD_CSI0_DAT15__GPIO6_1); |
||||
gpio_direction_output(CX9020_DVI_PWD, 1); |
||||
} |
||||
|
||||
int board_video_skip(void) |
||||
{ |
||||
const int ret = ipuv3_fb_init(&vga_640x480, 0, IPU_PIX_FMT_RGB24); |
||||
if (ret) |
||||
printf("VESA VG 640x480 cannot be configured: %d\n", ret); |
||||
return ret; |
||||
} |
@ -0,0 +1,12 @@ |
||||
if TARGET_MX6UL_GEAM |
||||
|
||||
config SYS_BOARD |
||||
default "geam6ul" |
||||
|
||||
config SYS_VENDOR |
||||
default "engicam" |
||||
|
||||
config SYS_CONFIG_NAME |
||||
default "imx6ul_geam" |
||||
|
||||
endif |
@ -0,0 +1,6 @@ |
||||
GEAM6UL BOARD |
||||
M: Jagan Teki <jagan@amarulasolutions.com> |
||||
S: Maintained |
||||
F: board/engicam/geam6ul |
||||
F: include/configs/imx6ul_geam.h |
||||
F: configs/imx6ul_geam_mmc_defconfig |
@ -0,0 +1,6 @@ |
||||
# Copyright (C) 2016 Amarula Solutions B.V.
|
||||
#
|
||||
# SPDX-License-Identifier: GPL-2.0+
|
||||
#
|
||||
|
||||
obj-y := geam6ul.o
|
@ -0,0 +1,28 @@ |
||||
How to use U-Boot on Engicam GEAM6UL Starter Kit: |
||||
------------------------------------------------- |
||||
|
||||
- Configure U-Boot for Engicam GEAM6UL: |
||||
|
||||
$ make mrproper |
||||
$ make imx6ul_geam_mmc_defconfig |
||||
$ make |
||||
|
||||
This will generate the SPL image called SPL and the u-boot-dtb.img. |
||||
|
||||
- Flash the SPL image into the micro SD card: |
||||
|
||||
sudo dd if=SPL of=/dev/mmcblk0 bs=1k seek=1; sync |
||||
|
||||
- Flash the u-boot-dtb.img image into the micro SD card: |
||||
|
||||
sudo dd if=u-boot-dtb.img of=/dev/mmcblk0 bs=1k seek=69; sync |
||||
|
||||
- Jumper settings: |
||||
|
||||
MMC Boot: JM3 Closed |
||||
|
||||
- Connect the Serial cable between the Starter Kit and the PC for the console. |
||||
(J28 is the Linux Serial console connector) |
||||
|
||||
- Insert the micro SD card in the board, power it up and U-Boot messages should |
||||
come up. |
@ -0,0 +1,317 @@ |
||||
/*
|
||||
* Copyright (C) 2016 Amarula Solutions B.V. |
||||
* Copyright (C) 2016 Engicam S.r.l. |
||||
* Author: Jagan Teki <jagan@amarulasolutions.com> |
||||
* |
||||
* SPDX-License-Identifier: GPL-2.0+ |
||||
*/ |
||||
|
||||
#include <common.h> |
||||
|
||||
#include <asm/io.h> |
||||
#include <asm/gpio.h> |
||||
#include <linux/sizes.h> |
||||
|
||||
#include <asm/arch/clock.h> |
||||
#include <asm/arch/crm_regs.h> |
||||
#include <asm/arch/iomux.h> |
||||
#include <asm/arch/mx6-pins.h> |
||||
#include <asm/arch/sys_proto.h> |
||||
#include <asm/imx-common/iomux-v3.h> |
||||
|
||||
DECLARE_GLOBAL_DATA_PTR; |
||||
|
||||
#define UART_PAD_CTRL (PAD_CTL_PKE | PAD_CTL_PUE | \ |
||||
PAD_CTL_PUS_100K_UP | PAD_CTL_SPEED_MED | \
|
||||
PAD_CTL_DSE_40ohm | PAD_CTL_SRE_FAST | PAD_CTL_HYS) |
||||
|
||||
static iomux_v3_cfg_t const uart1_pads[] = { |
||||
MX6_PAD_UART1_TX_DATA__UART1_DCE_TX | MUX_PAD_CTRL(UART_PAD_CTRL), |
||||
MX6_PAD_UART1_RX_DATA__UART1_DCE_RX | MUX_PAD_CTRL(UART_PAD_CTRL), |
||||
}; |
||||
|
||||
int board_early_init_f(void) |
||||
{ |
||||
imx_iomux_v3_setup_multiple_pads(uart1_pads, ARRAY_SIZE(uart1_pads)); |
||||
|
||||
return 0; |
||||
} |
||||
|
||||
#ifdef CONFIG_NAND_MXS |
||||
|
||||
#define GPMI_PAD_CTRL0 (PAD_CTL_PKE | PAD_CTL_PUE | PAD_CTL_PUS_100K_UP) |
||||
#define GPMI_PAD_CTRL1 (PAD_CTL_DSE_40ohm | PAD_CTL_SPEED_MED | \ |
||||
PAD_CTL_SRE_FAST) |
||||
#define GPMI_PAD_CTRL2 (GPMI_PAD_CTRL0 | GPMI_PAD_CTRL1) |
||||
|
||||
static iomux_v3_cfg_t const nand_pads[] = { |
||||
MX6_PAD_NAND_DATA00__RAWNAND_DATA00 | MUX_PAD_CTRL(GPMI_PAD_CTRL2), |
||||
MX6_PAD_NAND_DATA01__RAWNAND_DATA01 | MUX_PAD_CTRL(GPMI_PAD_CTRL2), |
||||
MX6_PAD_NAND_DATA02__RAWNAND_DATA02 | MUX_PAD_CTRL(GPMI_PAD_CTRL2), |
||||
MX6_PAD_NAND_DATA03__RAWNAND_DATA03 | MUX_PAD_CTRL(GPMI_PAD_CTRL2), |
||||
MX6_PAD_NAND_DATA04__RAWNAND_DATA04 | MUX_PAD_CTRL(GPMI_PAD_CTRL2), |
||||
MX6_PAD_NAND_DATA05__RAWNAND_DATA05 | MUX_PAD_CTRL(GPMI_PAD_CTRL2), |
||||
MX6_PAD_NAND_DATA06__RAWNAND_DATA06 | MUX_PAD_CTRL(GPMI_PAD_CTRL2), |
||||
MX6_PAD_NAND_DATA07__RAWNAND_DATA07 | MUX_PAD_CTRL(GPMI_PAD_CTRL2), |
||||
MX6_PAD_NAND_CLE__RAWNAND_CLE | MUX_PAD_CTRL(GPMI_PAD_CTRL2), |
||||
MX6_PAD_NAND_ALE__RAWNAND_ALE | MUX_PAD_CTRL(GPMI_PAD_CTRL2), |
||||
MX6_PAD_NAND_CE0_B__RAWNAND_CE0_B | MUX_PAD_CTRL(GPMI_PAD_CTRL2), |
||||
MX6_PAD_NAND_RE_B__RAWNAND_RE_B | MUX_PAD_CTRL(GPMI_PAD_CTRL2), |
||||
MX6_PAD_NAND_WE_B__RAWNAND_WE_B | MUX_PAD_CTRL(GPMI_PAD_CTRL2), |
||||
MX6_PAD_NAND_WP_B__RAWNAND_WP_B | MUX_PAD_CTRL(GPMI_PAD_CTRL2), |
||||
MX6_PAD_NAND_READY_B__RAWNAND_READY_B | MUX_PAD_CTRL(GPMI_PAD_CTRL2), |
||||
}; |
||||
|
||||
static void setup_gpmi_nand(void) |
||||
{ |
||||
struct mxc_ccm_reg *mxc_ccm = (struct mxc_ccm_reg *)CCM_BASE_ADDR; |
||||
|
||||
/* config gpmi nand iomux */ |
||||
imx_iomux_v3_setup_multiple_pads(nand_pads, ARRAY_SIZE(nand_pads)); |
||||
|
||||
clrbits_le32(&mxc_ccm->CCGR4, |
||||
MXC_CCM_CCGR4_RAWNAND_U_BCH_INPUT_APB_MASK | |
||||
MXC_CCM_CCGR4_RAWNAND_U_GPMI_BCH_INPUT_BCH_MASK | |
||||
MXC_CCM_CCGR4_RAWNAND_U_GPMI_BCH_INPUT_GPMI_IO_MASK | |
||||
MXC_CCM_CCGR4_RAWNAND_U_GPMI_INPUT_APB_MASK | |
||||
MXC_CCM_CCGR4_PL301_MX6QPER1_BCH_MASK); |
||||
|
||||
/*
|
||||
* config gpmi and bch clock to 100 MHz |
||||
* bch/gpmi select PLL2 PFD2 400M |
||||
* 100M = 400M / 4 |
||||
*/ |
||||
clrbits_le32(&mxc_ccm->cscmr1, |
||||
MXC_CCM_CSCMR1_BCH_CLK_SEL | |
||||
MXC_CCM_CSCMR1_GPMI_CLK_SEL); |
||||
clrsetbits_le32(&mxc_ccm->cscdr1, |
||||
MXC_CCM_CSCDR1_BCH_PODF_MASK | |
||||
MXC_CCM_CSCDR1_GPMI_PODF_MASK, |
||||
(3 << MXC_CCM_CSCDR1_BCH_PODF_OFFSET) | |
||||
(3 << MXC_CCM_CSCDR1_GPMI_PODF_OFFSET)); |
||||
|
||||
/* enable gpmi and bch clock gating */ |
||||
setbits_le32(&mxc_ccm->CCGR4, |
||||
MXC_CCM_CCGR4_RAWNAND_U_BCH_INPUT_APB_MASK | |
||||
MXC_CCM_CCGR4_RAWNAND_U_GPMI_BCH_INPUT_BCH_MASK | |
||||
MXC_CCM_CCGR4_RAWNAND_U_GPMI_BCH_INPUT_GPMI_IO_MASK | |
||||
MXC_CCM_CCGR4_RAWNAND_U_GPMI_INPUT_APB_MASK | |
||||
MXC_CCM_CCGR4_PL301_MX6QPER1_BCH_MASK); |
||||
|
||||
/* enable apbh clock gating */ |
||||
setbits_le32(&mxc_ccm->CCGR0, MXC_CCM_CCGR0_APBHDMA_MASK); |
||||
} |
||||
#endif /* CONFIG_NAND_MXS */ |
||||
|
||||
int board_init(void) |
||||
{ |
||||
/* Address of boot parameters */ |
||||
gd->bd->bi_boot_params = PHYS_SDRAM + 0x100; |
||||
|
||||
#ifdef CONFIG_NAND_MXS |
||||
setup_gpmi_nand(); |
||||
#endif |
||||
|
||||
return 0; |
||||
} |
||||
|
||||
int dram_init(void) |
||||
{ |
||||
gd->ram_size = imx_ddr_size(); |
||||
|
||||
return 0; |
||||
} |
||||
|
||||
#ifdef CONFIG_SPL_BUILD |
||||
#include <libfdt.h> |
||||
#include <spl.h> |
||||
|
||||
#include <asm/arch/crm_regs.h> |
||||
#include <asm/arch/mx6-ddr.h> |
||||
|
||||
/* MMC board initialization is needed till adding DM support in SPL */ |
||||
#if defined(CONFIG_FSL_ESDHC) && !defined(CONFIG_DM_MMC) |
||||
#include <mmc.h> |
||||
#include <fsl_esdhc.h> |
||||
|
||||
#define USDHC_PAD_CTRL (PAD_CTL_PKE | PAD_CTL_PUE | \ |
||||
PAD_CTL_PUS_22K_UP | PAD_CTL_SPEED_LOW | \
|
||||
PAD_CTL_DSE_80ohm | PAD_CTL_SRE_FAST | PAD_CTL_HYS) |
||||
|
||||
static iomux_v3_cfg_t const usdhc1_pads[] = { |
||||
MX6_PAD_SD1_CLK__USDHC1_CLK | MUX_PAD_CTRL(USDHC_PAD_CTRL), |
||||
MX6_PAD_SD1_CMD__USDHC1_CMD | MUX_PAD_CTRL(USDHC_PAD_CTRL), |
||||
MX6_PAD_SD1_DATA0__USDHC1_DATA0 | MUX_PAD_CTRL(USDHC_PAD_CTRL), |
||||
MX6_PAD_SD1_DATA1__USDHC1_DATA1 | MUX_PAD_CTRL(USDHC_PAD_CTRL), |
||||
MX6_PAD_SD1_DATA2__USDHC1_DATA2 | MUX_PAD_CTRL(USDHC_PAD_CTRL), |
||||
MX6_PAD_SD1_DATA3__USDHC1_DATA3 | MUX_PAD_CTRL(USDHC_PAD_CTRL), |
||||
|
||||
/* VSELECT */ |
||||
MX6_PAD_GPIO1_IO05__USDHC1_VSELECT | MUX_PAD_CTRL(USDHC_PAD_CTRL), |
||||
/* CD */ |
||||
MX6_PAD_UART1_RTS_B__GPIO1_IO19 | MUX_PAD_CTRL(NO_PAD_CTRL), |
||||
/* RST_B */ |
||||
MX6_PAD_GPIO1_IO09__GPIO1_IO09 | MUX_PAD_CTRL(NO_PAD_CTRL), |
||||
}; |
||||
|
||||
#define USDHC1_CD_GPIO IMX_GPIO_NR(1, 1) |
||||
|
||||
struct fsl_esdhc_cfg usdhc_cfg[1] = { |
||||
{USDHC1_BASE_ADDR, 0, 4}, |
||||
}; |
||||
|
||||
int board_mmc_getcd(struct mmc *mmc) |
||||
{ |
||||
struct fsl_esdhc_cfg *cfg = (struct fsl_esdhc_cfg *)mmc->priv; |
||||
int ret = 0; |
||||
|
||||
switch (cfg->esdhc_base) { |
||||
case USDHC1_BASE_ADDR: |
||||
ret = !gpio_get_value(USDHC1_CD_GPIO); |
||||
break; |
||||
} |
||||
|
||||
return ret; |
||||
} |
||||
|
||||
int board_mmc_init(bd_t *bis) |
||||
{ |
||||
int i, ret; |
||||
|
||||
/*
|
||||
* According to the board_mmc_init() the following map is done: |
||||
* (U-boot device node) (Physical Port) |
||||
* mmc0 USDHC1 |
||||
*/ |
||||
for (i = 0; i < CONFIG_SYS_FSL_USDHC_NUM; i++) { |
||||
switch (i) { |
||||
case 0: |
||||
imx_iomux_v3_setup_multiple_pads( |
||||
usdhc1_pads, ARRAY_SIZE(usdhc1_pads)); |
||||
gpio_direction_input(USDHC1_CD_GPIO); |
||||
usdhc_cfg[0].sdhc_clk = mxc_get_clock(MXC_ESDHC_CLK); |
||||
break; |
||||
default: |
||||
printf("Warning - USDHC%d controller not supporting\n", |
||||
i + 1); |
||||
return 0; |
||||
} |
||||
|
||||
ret = fsl_esdhc_initialize(bis, &usdhc_cfg[i]); |
||||
if (ret) { |
||||
printf("Warning: failed to initialize mmc dev %d\n", i); |
||||
return ret; |
||||
} |
||||
} |
||||
|
||||
return 0; |
||||
} |
||||
#endif /* CONFIG_FSL_ESDHC */ |
||||
|
||||
static struct mx6ul_iomux_grp_regs mx6_grp_ioregs = { |
||||
.grp_addds = 0x00000030, |
||||
.grp_ddrmode_ctl = 0x00020000, |
||||
.grp_b0ds = 0x00000030, |
||||
.grp_ctlds = 0x00000030, |
||||
.grp_b1ds = 0x00000030, |
||||
.grp_ddrpke = 0x00000000, |
||||
.grp_ddrmode = 0x00020000, |
||||
.grp_ddr_type = 0x000c0000, |
||||
}; |
||||
|
||||
static struct mx6ul_iomux_ddr_regs mx6_ddr_ioregs = { |
||||
.dram_dqm0 = 0x00000030, |
||||
.dram_dqm1 = 0x00000030, |
||||
.dram_ras = 0x00000030, |
||||
.dram_cas = 0x00000030, |
||||
.dram_odt0 = 0x00000030, |
||||
.dram_odt1 = 0x00000030, |
||||
.dram_sdba2 = 0x00000000, |
||||
.dram_sdclk_0 = 0x00000008, |
||||
.dram_sdqs0 = 0x00000038, |
||||
.dram_sdqs1 = 0x00000030, |
||||
.dram_reset = 0x00000030, |
||||
}; |
||||
|
||||
static struct mx6_mmdc_calibration mx6_mmcd_calib = { |
||||
.p0_mpwldectrl0 = 0x00070007, |
||||
.p0_mpdgctrl0 = 0x41490145, |
||||
.p0_mprddlctl = 0x40404546, |
||||
.p0_mpwrdlctl = 0x4040524D, |
||||
}; |
||||
|
||||
struct mx6_ddr_sysinfo ddr_sysinfo = { |
||||
.dsize = 0, |
||||
.cs_density = 20, |
||||
.ncs = 1, |
||||
.cs1_mirror = 0, |
||||
.rtt_wr = 2, |
||||
.rtt_nom = 1, /* RTT_Nom = RZQ/2 */ |
||||
.walat = 1, /* Write additional latency */ |
||||
.ralat = 5, /* Read additional latency */ |
||||
.mif3_mode = 3, /* Command prediction working mode */ |
||||
.bi_on = 1, /* Bank interleaving enabled */ |
||||
.sde_to_rst = 0x10, /* 14 cycles, 200us (JEDEC default) */ |
||||
.rst_to_cke = 0x23, /* 33 cycles, 500us (JEDEC default) */ |
||||
.ddr_type = DDR_TYPE_DDR3, |
||||
}; |
||||
|
||||
static struct mx6_ddr3_cfg mem_ddr = { |
||||
.mem_speed = 800, |
||||
.density = 4, |
||||
.width = 16, |
||||
.banks = 8, |
||||
.rowaddr = 13, |
||||
.coladdr = 10, |
||||
.pagesz = 2, |
||||
.trcd = 1375, |
||||
.trcmin = 4875, |
||||
.trasmin = 3500, |
||||
}; |
||||
|
||||
static void ccgr_init(void) |
||||
{ |
||||
struct mxc_ccm_reg *ccm = (struct mxc_ccm_reg *)CCM_BASE_ADDR; |
||||
|
||||
writel(0xFFFFFFFF, &ccm->CCGR0); |
||||
writel(0xFFFFFFFF, &ccm->CCGR1); |
||||
writel(0xFFFFFFFF, &ccm->CCGR2); |
||||
writel(0xFFFFFFFF, &ccm->CCGR3); |
||||
writel(0xFFFFFFFF, &ccm->CCGR4); |
||||
writel(0xFFFFFFFF, &ccm->CCGR5); |
||||
writel(0xFFFFFFFF, &ccm->CCGR6); |
||||
writel(0xFFFFFFFF, &ccm->CCGR7); |
||||
} |
||||
|
||||
static void spl_dram_init(void) |
||||
{ |
||||
mx6ul_dram_iocfg(mem_ddr.width, &mx6_ddr_ioregs, &mx6_grp_ioregs); |
||||
mx6_dram_cfg(&ddr_sysinfo, &mx6_mmcd_calib, &mem_ddr); |
||||
} |
||||
|
||||
void board_init_f(ulong dummy) |
||||
{ |
||||
/* setup AIPS and disable watchdog */ |
||||
arch_cpu_init(); |
||||
|
||||
ccgr_init(); |
||||
|
||||
/* iomux and setup of i2c */ |
||||
board_early_init_f(); |
||||
|
||||
/* setup GP timer */ |
||||
timer_init(); |
||||
|
||||
/* UART clocks enabled and gd valid - init serial console */ |
||||
preloader_console_init(); |
||||
|
||||
/* DDR initialization */ |
||||
spl_dram_init(); |
||||
|
||||
/* Clear the BSS. */ |
||||
memset(__bss_start, 0, __bss_end - __bss_start); |
||||
|
||||
/* load/boot image from boot device */ |
||||
board_init_r(NULL, 0); |
||||
} |
||||
#endif /* CONFIG_SPL_BUILD */ |
@ -0,0 +1,12 @@ |
||||
if TARGET_MX6Q_ICORE_RQS |
||||
|
||||
config SYS_BOARD |
||||
default "icorem6_rqs" |
||||
|
||||
config SYS_VENDOR |
||||
default "engicam" |
||||
|
||||
config SYS_CONFIG_NAME |
||||
default "imx6qdl_icore_rqs" |
||||
|
||||
endif |
@ -0,0 +1,7 @@ |
||||
ICOREM6QDL_RQS BOARD |
||||
M: Jagan Teki <jagan@amarulasolutions.com> |
||||
S: Maintained |
||||
F: board/engicam/icorem6_rqs |
||||
F: include/configs/imx6qdl_icore_rqs.h |
||||
F: configs/imx6q_icore_rqs_mmc_defconfig |
||||
F: configs/imx6dl_icore_rqs_mmc_defconfig |
@ -0,0 +1,6 @@ |
||||
# Copyright (C) 2016 Amarula Solutions B.V.
|
||||
#
|
||||
# SPDX-License-Identifier: GPL-2.0+
|
||||
#
|
||||
|
||||
obj-y := icorem6_rqs.o
|
@ -0,0 +1,33 @@ |
||||
How to use U-Boot on Engicam i.CoreM6 RQS Solo/DualLite and Quad/Dual Starter Kit: |
||||
---------------------------------------------------------------------------------- |
||||
|
||||
$ make mrproper |
||||
|
||||
- Configure U-Boot for Engicam i.CoreM6 RQS Quad/Dual: |
||||
$ make imx6q_icore_rqs_mmc_defconfig |
||||
|
||||
- Configure U-Boot for Engicam i.CoreM6 RQS Solo/DualLite: |
||||
$ make imx6dl_icore_rqs_mmc_defconfig |
||||
|
||||
- Build U-Boot |
||||
$ make |
||||
|
||||
This will generate the SPL image called SPL and the u-boot-dtb.img. |
||||
|
||||
- Flash the SPL image into the micro SD card: |
||||
|
||||
sudo dd if=SPL of=/dev/mmcblk0 bs=1k seek=1; sync |
||||
|
||||
- Flash the u-boot-dtb.img image into the micro SD card: |
||||
|
||||
sudo dd if=u-boot-dtb.img of=/dev/mmcblk0 bs=1k seek=69; sync |
||||
|
||||
- Jumper settings: |
||||
|
||||
MMC Boot: JM3 Closed |
||||
|
||||
- Connect the Serial cable between the Starter Kit and the PC for the console. |
||||
(J28 is the Linux Serial console connector) |
||||
|
||||
- Insert the micro SD card in the board, power it up and U-Boot messages should |
||||
come up. |
@ -0,0 +1,399 @@ |
||||
/*
|
||||
* Copyright (C) 2016 Amarula Solutions B.V. |
||||
* Copyright (C) 2016 Engicam S.r.l. |
||||
* Author: Jagan Teki <jagan@amarulasolutions.com> |
||||
* |
||||
* SPDX-License-Identifier: GPL-2.0+ |
||||
*/ |
||||
|
||||
#include <common.h> |
||||
|
||||
#include <asm/io.h> |
||||
#include <asm/gpio.h> |
||||
#include <linux/sizes.h> |
||||
|
||||
#include <asm/arch/clock.h> |
||||
#include <asm/arch/crm_regs.h> |
||||
#include <asm/arch/iomux.h> |
||||
#include <asm/arch/mx6-pins.h> |
||||
#include <asm/arch/sys_proto.h> |
||||
#include <asm/imx-common/iomux-v3.h> |
||||
|
||||
DECLARE_GLOBAL_DATA_PTR; |
||||
|
||||
#define UART_PAD_CTRL (PAD_CTL_PKE | PAD_CTL_PUE | \ |
||||
PAD_CTL_PUS_100K_UP | PAD_CTL_SPEED_MED | \
|
||||
PAD_CTL_DSE_40ohm | PAD_CTL_SRE_FAST | PAD_CTL_HYS) |
||||
|
||||
static iomux_v3_cfg_t const uart4_pads[] = { |
||||
IOMUX_PADS(PAD_KEY_COL0__UART4_TX_DATA | MUX_PAD_CTRL(UART_PAD_CTRL)), |
||||
IOMUX_PADS(PAD_KEY_ROW0__UART4_RX_DATA | MUX_PAD_CTRL(UART_PAD_CTRL)), |
||||
}; |
||||
|
||||
int board_early_init_f(void) |
||||
{ |
||||
SETUP_IOMUX_PADS(uart4_pads); |
||||
|
||||
return 0; |
||||
} |
||||
|
||||
int board_init(void) |
||||
{ |
||||
/* Address of boot parameters */ |
||||
gd->bd->bi_boot_params = PHYS_SDRAM + 0x100; |
||||
|
||||
return 0; |
||||
} |
||||
|
||||
int dram_init(void) |
||||
{ |
||||
gd->ram_size = imx_ddr_size(); |
||||
|
||||
return 0; |
||||
} |
||||
|
||||
#ifdef CONFIG_SPL_BUILD |
||||
#include <libfdt.h> |
||||
#include <spl.h> |
||||
|
||||
#include <asm/arch/crm_regs.h> |
||||
#include <asm/arch/mx6-ddr.h> |
||||
|
||||
/* MMC board initialization is needed till adding DM support in SPL */ |
||||
#if defined(CONFIG_FSL_ESDHC) && !defined(CONFIG_DM_MMC) |
||||
#include <mmc.h> |
||||
#include <fsl_esdhc.h> |
||||
|
||||
#define USDHC_PAD_CTRL (PAD_CTL_PKE | PAD_CTL_PUE | \ |
||||
PAD_CTL_PUS_47K_UP | PAD_CTL_SPEED_HIGH | \
|
||||
PAD_CTL_DSE_40ohm | PAD_CTL_SRE_FAST | PAD_CTL_HYS) |
||||
|
||||
static iomux_v3_cfg_t const usdhc3_pads[] = { |
||||
IOMUX_PADS(PAD_SD3_CLK__SD3_CLK | MUX_PAD_CTRL(USDHC_PAD_CTRL)), |
||||
IOMUX_PADS(PAD_SD3_CMD__SD3_CMD | MUX_PAD_CTRL(USDHC_PAD_CTRL)), |
||||
IOMUX_PADS(PAD_SD3_DAT0__SD3_DATA0 | MUX_PAD_CTRL(USDHC_PAD_CTRL)), |
||||
IOMUX_PADS(PAD_SD3_DAT1__SD3_DATA1 | MUX_PAD_CTRL(USDHC_PAD_CTRL)), |
||||
IOMUX_PADS(PAD_SD3_DAT2__SD3_DATA2 | MUX_PAD_CTRL(USDHC_PAD_CTRL)), |
||||
IOMUX_PADS(PAD_SD3_DAT3__SD3_DATA3 | MUX_PAD_CTRL(USDHC_PAD_CTRL)), |
||||
}; |
||||
|
||||
struct fsl_esdhc_cfg usdhc_cfg[1] = { |
||||
{USDHC3_BASE_ADDR, 1, 4}, |
||||
}; |
||||
|
||||
int board_mmc_getcd(struct mmc *mmc) |
||||
{ |
||||
struct fsl_esdhc_cfg *cfg = (struct fsl_esdhc_cfg *)mmc->priv; |
||||
int ret = 0; |
||||
|
||||
switch (cfg->esdhc_base) { |
||||
case USDHC3_BASE_ADDR: |
||||
ret = 1; |
||||
break; |
||||
} |
||||
|
||||
return ret; |
||||
} |
||||
|
||||
int board_mmc_init(bd_t *bis) |
||||
{ |
||||
int i, ret; |
||||
|
||||
/*
|
||||
* According to the board_mmc_init() the following map is done: |
||||
* (U-boot device node) (Physical Port) |
||||
* mmc0 USDHC3 |
||||
*/ |
||||
for (i = 0; i < CONFIG_SYS_FSL_USDHC_NUM; i++) { |
||||
switch (i) { |
||||
case 0: |
||||
SETUP_IOMUX_PADS(usdhc3_pads); |
||||
usdhc_cfg[i].sdhc_clk = mxc_get_clock(MXC_ESDHC3_CLK); |
||||
break; |
||||
default: |
||||
printf("Warning - USDHC%d controller not supporting\n", |
||||
i + 1); |
||||
return 0; |
||||
} |
||||
|
||||
ret = fsl_esdhc_initialize(bis, &usdhc_cfg[i]); |
||||
if (ret) { |
||||
printf("Warning: failed to initialize mmc dev %d\n", i); |
||||
return ret; |
||||
} |
||||
} |
||||
|
||||
return 0; |
||||
} |
||||
#endif |
||||
|
||||
/*
|
||||
* Driving strength: |
||||
* 0x30 == 40 Ohm |
||||
* 0x28 == 48 Ohm |
||||
*/ |
||||
|
||||
#define IMX6DQ_DRIVE_STRENGTH 0x30 |
||||
#define IMX6SDL_DRIVE_STRENGTH 0x28 |
||||
|
||||
/* configure MX6Q/DUAL mmdc DDR io registers */ |
||||
static struct mx6dq_iomux_ddr_regs mx6dq_ddr_ioregs = { |
||||
.dram_sdqs0 = 0x28, |
||||
.dram_sdqs1 = 0x28, |
||||
.dram_sdqs2 = 0x28, |
||||
.dram_sdqs3 = 0x28, |
||||
.dram_sdqs4 = 0x28, |
||||
.dram_sdqs5 = 0x28, |
||||
.dram_sdqs6 = 0x28, |
||||
.dram_sdqs7 = 0x28, |
||||
.dram_dqm0 = 0x28, |
||||
.dram_dqm1 = 0x28, |
||||
.dram_dqm2 = 0x28, |
||||
.dram_dqm3 = 0x28, |
||||
.dram_dqm4 = 0x28, |
||||
.dram_dqm5 = 0x28, |
||||
.dram_dqm6 = 0x28, |
||||
.dram_dqm7 = 0x28, |
||||
.dram_cas = 0x30, |
||||
.dram_ras = 0x30, |
||||
.dram_sdclk_0 = 0x30, |
||||
.dram_sdclk_1 = 0x30, |
||||
.dram_reset = 0x30, |
||||
.dram_sdcke0 = 0x3000, |
||||
.dram_sdcke1 = 0x3000, |
||||
.dram_sdba2 = 0x00000000, |
||||
.dram_sdodt0 = 0x30, |
||||
.dram_sdodt1 = 0x30, |
||||
}; |
||||
|
||||
/* configure MX6Q/DUAL mmdc GRP io registers */ |
||||
static struct mx6dq_iomux_grp_regs mx6dq_grp_ioregs = { |
||||
.grp_b0ds = 0x30, |
||||
.grp_b1ds = 0x30, |
||||
.grp_b2ds = 0x30, |
||||
.grp_b3ds = 0x30, |
||||
.grp_b4ds = 0x30, |
||||
.grp_b5ds = 0x30, |
||||
.grp_b6ds = 0x30, |
||||
.grp_b7ds = 0x30, |
||||
.grp_addds = 0x30, |
||||
.grp_ddrmode_ctl = 0x00020000, |
||||
.grp_ddrpke = 0x00000000, |
||||
.grp_ddrmode = 0x00020000, |
||||
.grp_ctlds = 0x30, |
||||
.grp_ddr_type = 0x000c0000, |
||||
}; |
||||
|
||||
/* configure MX6SOLO/DUALLITE mmdc DDR io registers */ |
||||
struct mx6sdl_iomux_ddr_regs mx6sdl_ddr_ioregs = { |
||||
.dram_sdclk_0 = 0x30, |
||||
.dram_sdclk_1 = 0x30, |
||||
.dram_cas = 0x30, |
||||
.dram_ras = 0x30, |
||||
.dram_reset = 0x30, |
||||
.dram_sdcke0 = 0x30, |
||||
.dram_sdcke1 = 0x30, |
||||
.dram_sdba2 = 0x00000000, |
||||
.dram_sdodt0 = 0x30, |
||||
.dram_sdodt1 = 0x30, |
||||
.dram_sdqs0 = 0x28, |
||||
.dram_sdqs1 = 0x28, |
||||
.dram_sdqs2 = 0x28, |
||||
.dram_sdqs3 = 0x28, |
||||
.dram_sdqs4 = 0x28, |
||||
.dram_sdqs5 = 0x28, |
||||
.dram_sdqs6 = 0x28, |
||||
.dram_sdqs7 = 0x28, |
||||
.dram_dqm0 = 0x28, |
||||
.dram_dqm1 = 0x28, |
||||
.dram_dqm2 = 0x28, |
||||
.dram_dqm3 = 0x28, |
||||
.dram_dqm4 = 0x28, |
||||
.dram_dqm5 = 0x28, |
||||
.dram_dqm6 = 0x28, |
||||
.dram_dqm7 = 0x28, |
||||
}; |
||||
|
||||
/* configure MX6SOLO/DUALLITE mmdc GRP io registers */ |
||||
struct mx6sdl_iomux_grp_regs mx6sdl_grp_ioregs = { |
||||
.grp_ddr_type = 0x000c0000, |
||||
.grp_ddrmode_ctl = 0x00020000, |
||||
.grp_ddrpke = 0x00000000, |
||||
.grp_addds = 0x30, |
||||
.grp_ctlds = 0x30, |
||||
.grp_ddrmode = 0x00020000, |
||||
.grp_b0ds = 0x28, |
||||
.grp_b1ds = 0x28, |
||||
.grp_b2ds = 0x28, |
||||
.grp_b3ds = 0x28, |
||||
.grp_b4ds = 0x28, |
||||
.grp_b5ds = 0x28, |
||||
.grp_b6ds = 0x28, |
||||
.grp_b7ds = 0x28, |
||||
}; |
||||
|
||||
/* mt41j256 */ |
||||
static struct mx6_ddr3_cfg mt41j256 = { |
||||
.mem_speed = 1066, |
||||
.density = 2, |
||||
.width = 16, |
||||
.banks = 8, |
||||
.rowaddr = 13, |
||||
.coladdr = 10, |
||||
.pagesz = 2, |
||||
.trcd = 1375, |
||||
.trcmin = 4875, |
||||
.trasmin = 3500, |
||||
.SRT = 0, |
||||
}; |
||||
|
||||
static struct mx6_mmdc_calibration mx6dq_mmdc_calib = { |
||||
.p0_mpwldectrl0 = 0x000E0009, |
||||
.p0_mpwldectrl1 = 0x0018000E, |
||||
.p1_mpwldectrl0 = 0x00000007, |
||||
.p1_mpwldectrl1 = 0x00000000, |
||||
.p0_mpdgctrl0 = 0x43280334, |
||||
.p0_mpdgctrl1 = 0x031C0314, |
||||
.p1_mpdgctrl0 = 0x4318031C, |
||||
.p1_mpdgctrl1 = 0x030C0258, |
||||
.p0_mprddlctl = 0x3E343A40, |
||||
.p1_mprddlctl = 0x383C3844, |
||||
.p0_mpwrdlctl = 0x40404440, |
||||
.p1_mpwrdlctl = 0x4C3E4446, |
||||
}; |
||||
|
||||
/* DDR 64bit */ |
||||
static struct mx6_ddr_sysinfo mem_q = { |
||||
.ddr_type = DDR_TYPE_DDR3, |
||||
.dsize = 2, |
||||
.cs1_mirror = 0, |
||||
/* config for full 4GB range so that get_mem_size() works */ |
||||
.cs_density = 32, |
||||
.ncs = 1, |
||||
.bi_on = 1, |
||||
.rtt_nom = 2, |
||||
.rtt_wr = 2, |
||||
.ralat = 5, |
||||
.walat = 0, |
||||
.mif3_mode = 3, |
||||
.rst_to_cke = 0x23, |
||||
.sde_to_rst = 0x10, |
||||
}; |
||||
|
||||
static struct mx6_mmdc_calibration mx6dl_mmdc_calib = { |
||||
.p0_mpwldectrl0 = 0x001F0024, |
||||
.p0_mpwldectrl1 = 0x00110018, |
||||
.p1_mpwldectrl0 = 0x001F0024, |
||||
.p1_mpwldectrl1 = 0x00110018, |
||||
.p0_mpdgctrl0 = 0x4230022C, |
||||
.p0_mpdgctrl1 = 0x02180220, |
||||
.p1_mpdgctrl0 = 0x42440248, |
||||
.p1_mpdgctrl1 = 0x02300238, |
||||
.p0_mprddlctl = 0x44444A48, |
||||
.p1_mprddlctl = 0x46484A42, |
||||
.p0_mpwrdlctl = 0x38383234, |
||||
.p1_mpwrdlctl = 0x3C34362E, |
||||
}; |
||||
|
||||
/* DDR 64bit 1GB */ |
||||
static struct mx6_ddr_sysinfo mem_dl = { |
||||
.dsize = 2, |
||||
.cs1_mirror = 0, |
||||
/* config for full 4GB range so that get_mem_size() works */ |
||||
.cs_density = 32, |
||||
.ncs = 1, |
||||
.bi_on = 1, |
||||
.rtt_nom = 1, |
||||
.rtt_wr = 1, |
||||
.ralat = 5, |
||||
.walat = 0, |
||||
.mif3_mode = 3, |
||||
.rst_to_cke = 0x23, |
||||
.sde_to_rst = 0x10, |
||||
}; |
||||
|
||||
/* DDR 32bit 512MB */ |
||||
static struct mx6_ddr_sysinfo mem_s = { |
||||
.dsize = 1, |
||||
.cs1_mirror = 0, |
||||
/* config for full 4GB range so that get_mem_size() works */ |
||||
.cs_density = 32, |
||||
.ncs = 1, |
||||
.bi_on = 1, |
||||
.rtt_nom = 1, |
||||
.rtt_wr = 1, |
||||
.ralat = 5, |
||||
.walat = 0, |
||||
.mif3_mode = 3, |
||||
.rst_to_cke = 0x23, |
||||
.sde_to_rst = 0x10, |
||||
}; |
||||
|
||||
static void ccgr_init(void) |
||||
{ |
||||
struct mxc_ccm_reg *ccm = (struct mxc_ccm_reg *)CCM_BASE_ADDR; |
||||
|
||||
writel(0x00003F3F, &ccm->CCGR0); |
||||
writel(0x0030FC00, &ccm->CCGR1); |
||||
writel(0x000FC000, &ccm->CCGR2); |
||||
writel(0x3F300000, &ccm->CCGR3); |
||||
writel(0xFF00F300, &ccm->CCGR4); |
||||
writel(0x0F0000C3, &ccm->CCGR5); |
||||
writel(0x000003CC, &ccm->CCGR6); |
||||
} |
||||
|
||||
static void gpr_init(void) |
||||
{ |
||||
struct iomuxc *iomux = (struct iomuxc *)IOMUXC_BASE_ADDR; |
||||
|
||||
/* enable AXI cache for VDOA/VPU/IPU */ |
||||
writel(0xF00000CF, &iomux->gpr[4]); |
||||
/* set IPU AXI-id0 Qos=0xf(bypass) AXI-id1 Qos=0x7 */ |
||||
writel(0x007F007F, &iomux->gpr[6]); |
||||
writel(0x007F007F, &iomux->gpr[7]); |
||||
} |
||||
|
||||
static void spl_dram_init(void) |
||||
{ |
||||
if (is_mx6solo()) { |
||||
mx6sdl_dram_iocfg(32, &mx6sdl_ddr_ioregs, &mx6sdl_grp_ioregs); |
||||
mx6_dram_cfg(&mem_s, &mx6dl_mmdc_calib, &mt41j256); |
||||
} else if (is_mx6dl()) { |
||||
mx6sdl_dram_iocfg(64, &mx6sdl_ddr_ioregs, &mx6sdl_grp_ioregs); |
||||
mx6_dram_cfg(&mem_dl, &mx6dl_mmdc_calib, &mt41j256); |
||||
} else if (is_mx6dq()) { |
||||
mx6dq_dram_iocfg(64, &mx6dq_ddr_ioregs, &mx6dq_grp_ioregs); |
||||
mx6_dram_cfg(&mem_q, &mx6dq_mmdc_calib, &mt41j256); |
||||
} |
||||
|
||||
udelay(100); |
||||
} |
||||
|
||||
void board_init_f(ulong dummy) |
||||
{ |
||||
ccgr_init(); |
||||
|
||||
/* setup AIPS and disable watchdog */ |
||||
arch_cpu_init(); |
||||
|
||||
gpr_init(); |
||||
|
||||
/* iomux */ |
||||
board_early_init_f(); |
||||
|
||||
/* setup GP timer */ |
||||
timer_init(); |
||||
|
||||
/* UART clocks enabled and gd valid - init serial console */ |
||||
preloader_console_init(); |
||||
|
||||
/* DDR initialization */ |
||||
spl_dram_init(); |
||||
|
||||
/* Clear the BSS. */ |
||||
memset(__bss_start, 0, __bss_end - __bss_start); |
||||
|
||||
/* load/boot image from boot device */ |
||||
board_init_r(NULL, 0); |
||||
} |
||||
#endif |
@ -0,0 +1,12 @@ |
||||
if TARGET_MX6SLLEVK |
||||
|
||||
config SYS_BOARD |
||||
default "mx6sllevk" |
||||
|
||||
config SYS_VENDOR |
||||
default "freescale" |
||||
|
||||
config SYS_CONFIG_NAME |
||||
default "mx6sllevk" |
||||
|
||||
endif |
@ -0,0 +1,6 @@ |
||||
# (C) Copyright 2016 Freescale Semiconductor, Inc.
|
||||
#
|
||||
# SPDX-License-Identifier: GPL-2.0+
|
||||
#
|
||||
|
||||
obj-y := mx6sllevk.o
|
@ -0,0 +1,127 @@ |
||||
/* |
||||
* Copyright (C) 2016 Freescale Semiconductor, Inc. |
||||
* |
||||
* SPDX-License-Identifier: GPL-2.0+ |
||||
* |
||||
* Refer docs/README.imxmage for more details about how-to configure |
||||
* and create imximage boot image |
||||
* |
||||
* The syntax is taken as close as possible with the kwbimage |
||||
*/ |
||||
|
||||
#define __ASSEMBLY__ |
||||
#include <config.h> |
||||
|
||||
/* image version */ |
||||
|
||||
IMAGE_VERSION 2 |
||||
|
||||
/* |
||||
* Boot Device : one of |
||||
* spi, sd (the board has no nand neither onenand) |
||||
*/ |
||||
|
||||
BOOT_FROM sd |
||||
|
||||
#ifdef CONFIG_USE_IMXIMG_PLUGIN |
||||
/*PLUGIN plugin-binary-file IRAM_FREE_START_ADDR*/ |
||||
PLUGIN board/freescale/mx6sllevk/plugin.bin 0x00907000 |
||||
#else |
||||
|
||||
#ifdef CONFIG_SECURE_BOOT |
||||
CSF CONFIG_CSF_SIZE |
||||
#endif |
||||
|
||||
/* |
||||
* Device Configuration Data (DCD) |
||||
* |
||||
* Each entry must have the format: |
||||
* Addr-type Address Value |
||||
* |
||||
* where: |
||||
* Addr-type register length (1,2 or 4 bytes) |
||||
* Address absolute address of the register |
||||
* value value to be stored in the register |
||||
*/ |
||||
|
||||
/* Enable all clocks */ |
||||
DATA 4 0x020c4068 0xffffffff |
||||
DATA 4 0x020c406c 0xffffffff |
||||
DATA 4 0x020c4070 0xffffffff |
||||
DATA 4 0x020c4074 0xffffffff |
||||
DATA 4 0x020c4078 0xffffffff |
||||
DATA 4 0x020c407c 0xffffffff |
||||
DATA 4 0x020c4080 0xffffffff |
||||
|
||||
DATA 4 0x020E0550 0x00080000 |
||||
DATA 4 0x020E0534 0x00000000 |
||||
DATA 4 0x020E02AC 0x00000030 |
||||
DATA 4 0x020E0548 0x00000030 |
||||
DATA 4 0x020E052C 0x00000030 |
||||
DATA 4 0x020E0530 0x00020000 |
||||
DATA 4 0x020E02B0 0x00003030 |
||||
DATA 4 0x020E02B4 0x00003030 |
||||
DATA 4 0x020E02B8 0x00003030 |
||||
DATA 4 0x020E02BC 0x00003030 |
||||
DATA 4 0x020E0540 0x00020000 |
||||
DATA 4 0x020E0544 0x00000030 |
||||
DATA 4 0x020E054C 0x00000030 |
||||
DATA 4 0x020E0554 0x00000030 |
||||
DATA 4 0x020E0558 0x00000030 |
||||
DATA 4 0x020E0294 0x00000030 |
||||
DATA 4 0x020E0298 0x00000030 |
||||
DATA 4 0x020E029C 0x00000030 |
||||
DATA 4 0x020E02A0 0x00000030 |
||||
DATA 4 0x020E02C0 0x00082030 |
||||
|
||||
DATA 4 0x021B001C 0x00008000 |
||||
|
||||
DATA 4 0x021B0800 0xA1390003 |
||||
DATA 4 0x021B085c 0x084700C7 |
||||
DATA 4 0x021B0890 0x00400000 |
||||
DATA 4 0x021B0848 0x3F393B3C |
||||
DATA 4 0x021B0850 0x262C3826 |
||||
DATA 4 0x021B081C 0x33333333 |
||||
DATA 4 0x021B0820 0x33333333 |
||||
DATA 4 0x021B0824 0x33333333 |
||||
DATA 4 0x021B0828 0x33333333 |
||||
|
||||
DATA 4 0x021B082C 0xf3333333 |
||||
DATA 4 0x021B0830 0xf3333333 |
||||
DATA 4 0x021B0834 0xf3333333 |
||||
DATA 4 0x021B0838 0xf3333333 |
||||
DATA 4 0x021B08C0 0x24922492 |
||||
DATA 4 0x021B08b8 0x00000800 |
||||
|
||||
DATA 4 0x021B0004 0x00020052 |
||||
DATA 4 0x021B000C 0x53574333 |
||||
DATA 4 0x021B0010 0x00100B22 |
||||
DATA 4 0x021B0038 0x00170778 |
||||
DATA 4 0x021B0014 0x00C700DB |
||||
DATA 4 0x021B0018 0x00201718 |
||||
DATA 4 0x021B002C 0x0F9F26D2 |
||||
DATA 4 0x021B0030 0x009F0E10 |
||||
DATA 4 0x021B0040 0x0000005F |
||||
DATA 4 0x021B0000 0xC4190000 |
||||
|
||||
DATA 4 0x021B083C 0x20000000 |
||||
|
||||
DATA 4 0x021B001C 0x00008050 |
||||
DATA 4 0x021B001C 0x00008058 |
||||
DATA 4 0x021B001C 0x003F8030 |
||||
DATA 4 0x021B001C 0x003F8038 |
||||
DATA 4 0x021B001C 0xFF0A8030 |
||||
DATA 4 0x021B001C 0xFF0A8038 |
||||
DATA 4 0x021B001C 0x04028030 |
||||
DATA 4 0x021B001C 0x04028038 |
||||
DATA 4 0x021B001C 0x83018030 |
||||
DATA 4 0x021B001C 0x83018038 |
||||
DATA 4 0x021B001C 0x01038030 |
||||
DATA 4 0x021B001C 0x01038038 |
||||
|
||||
DATA 4 0x021B0020 0x00001800 |
||||
DATA 4 0x021B0800 0xA1390003 |
||||
DATA 4 0x021B0004 0x00020052 |
||||
DATA 4 0x021B0404 0x00011006 |
||||
DATA 4 0x021B001C 0x00000000 |
||||
#endif |
@ -0,0 +1,131 @@ |
||||
/*
|
||||
* Copyright (C) 2016 Freescale Semiconductor, Inc. |
||||
* |
||||
* SPDX-License-Identifier: GPL-2.0+ |
||||
*/ |
||||
|
||||
#include <asm/arch/clock.h> |
||||
#include <asm/arch/crm_regs.h> |
||||
#include <asm/arch/iomux.h> |
||||
#include <asm/arch/imx-regs.h> |
||||
#include <asm/arch/mx6-pins.h> |
||||
#include <asm/arch/sys_proto.h> |
||||
#include <asm/gpio.h> |
||||
#include <asm/imx-common/iomux-v3.h> |
||||
#include <asm/imx-common/boot_mode.h> |
||||
#include <asm/io.h> |
||||
#include <common.h> |
||||
#include <linux/sizes.h> |
||||
#include <mmc.h> |
||||
#include <power/pmic.h> |
||||
#include <power/pfuze100_pmic.h> |
||||
#include "../common/pfuze.h" |
||||
|
||||
DECLARE_GLOBAL_DATA_PTR; |
||||
|
||||
#define UART_PAD_CTRL (PAD_CTL_PKE | PAD_CTL_PUE | \ |
||||
PAD_CTL_PUS_100K_UP | PAD_CTL_SPEED_MED | \
|
||||
PAD_CTL_DSE_40ohm | PAD_CTL_SRE_FAST | PAD_CTL_HYS) |
||||
|
||||
int dram_init(void) |
||||
{ |
||||
gd->ram_size = imx_ddr_size(); |
||||
|
||||
return 0; |
||||
} |
||||
|
||||
static iomux_v3_cfg_t const uart1_pads[] = { |
||||
MX6_PAD_UART1_TXD__UART1_DCE_TX | MUX_PAD_CTRL(UART_PAD_CTRL), |
||||
MX6_PAD_UART1_RXD__UART1_DCE_RX | MUX_PAD_CTRL(UART_PAD_CTRL), |
||||
}; |
||||
|
||||
static iomux_v3_cfg_t const wdog_pads[] = { |
||||
MX6_PAD_WDOG_B__WDOG1_B | MUX_PAD_CTRL(NO_PAD_CTRL), |
||||
}; |
||||
|
||||
static void setup_iomux_uart(void) |
||||
{ |
||||
imx_iomux_v3_setup_multiple_pads(uart1_pads, ARRAY_SIZE(uart1_pads)); |
||||
} |
||||
|
||||
#ifdef CONFIG_DM_PMIC_PFUZE100 |
||||
int power_init_board(void) |
||||
{ |
||||
struct udevice *dev; |
||||
int ret; |
||||
u32 dev_id, rev_id, i; |
||||
u32 switch_num = 6; |
||||
u32 offset = PFUZE100_SW1CMODE; |
||||
|
||||
ret = pmic_get("pfuze100", &dev); |
||||
if (ret == -ENODEV) |
||||
return 0; |
||||
|
||||
if (ret != 0) |
||||
return ret; |
||||
|
||||
dev_id = pmic_reg_read(dev, PFUZE100_DEVICEID); |
||||
rev_id = pmic_reg_read(dev, PFUZE100_REVID); |
||||
printf("PMIC: PFUZE100! DEV_ID=0x%x REV_ID=0x%x\n", dev_id, rev_id); |
||||
|
||||
|
||||
/* Init mode to APS_PFM */ |
||||
pmic_reg_write(dev, PFUZE100_SW1ABMODE, APS_PFM); |
||||
|
||||
for (i = 0; i < switch_num - 1; i++) |
||||
pmic_reg_write(dev, offset + i * SWITCH_SIZE, APS_PFM); |
||||
|
||||
/* set SW1AB staby volatage 0.975V */ |
||||
pmic_clrsetbits(dev, PFUZE100_SW1ABSTBY, 0x3f, 0x1b); |
||||
|
||||
/* set SW1AB/VDDARM step ramp up time from 16us to 4us/25mV */ |
||||
pmic_clrsetbits(dev, PFUZE100_SW1ABCONF, 0xc0, 0x40); |
||||
|
||||
/* set SW1C staby volatage 0.975V */ |
||||
pmic_clrsetbits(dev, PFUZE100_SW1CSTBY, 0x3f, 0x1b); |
||||
|
||||
/* set SW1C/VDDSOC step ramp up time to from 16us to 4us/25mV */ |
||||
pmic_clrsetbits(dev, PFUZE100_SW1CCONF, 0xc0, 0x40); |
||||
|
||||
return 0; |
||||
} |
||||
#endif |
||||
|
||||
int board_early_init_f(void) |
||||
{ |
||||
setup_iomux_uart(); |
||||
|
||||
return 0; |
||||
} |
||||
|
||||
int board_init(void) |
||||
{ |
||||
/* Address of boot parameters */ |
||||
gd->bd->bi_boot_params = PHYS_SDRAM + 0x100; |
||||
|
||||
return 0; |
||||
} |
||||
|
||||
int board_late_init(void) |
||||
{ |
||||
imx_iomux_v3_setup_multiple_pads(wdog_pads, ARRAY_SIZE(wdog_pads)); |
||||
|
||||
return 0; |
||||
} |
||||
|
||||
int checkboard(void) |
||||
{ |
||||
puts("Board: MX6SLL EVK\n"); |
||||
|
||||
return 0; |
||||
} |
||||
|
||||
int board_mmc_get_env_dev(int devno) |
||||
{ |
||||
return devno; |
||||
} |
||||
|
||||
int mmc_map_to_kernel_blk(int devno) |
||||
{ |
||||
return devno; |
||||
} |
@ -0,0 +1,155 @@ |
||||
/* |
||||
* Copyright (C) 2016 Freescale Semiconductor, Inc. |
||||
* |
||||
* SPDX-License-Identifier: GPL-2.0+ |
||||
*/ |
||||
|
||||
#include <config.h> |
||||
|
||||
/* DDR script */ |
||||
.macro imx6sll_evk_ddr_setting
|
||||
ldr r0, =IOMUXC_BASE_ADDR |
||||
ldr r1, =0x00080000 |
||||
str r1, [r0, #0x550] |
||||
ldr r1, =0x00000000 |
||||
str r1, [r0, #0x534] |
||||
ldr r1, =0x00000030 |
||||
str r1, [r0, #0x2AC] |
||||
str r1, [r0, #0x548] |
||||
str r1, [r0, #0x52C] |
||||
ldr r1, =0x00020000 |
||||
str r1, [r0, #0x530] |
||||
ldr r1, =0x00003030 |
||||
str r1, [r0, #0x2B0] |
||||
str r1, [r0, #0x2B4] |
||||
str r1, [r0, #0x2B8] |
||||
str r1, [r0, #0x2BC] |
||||
|
||||
ldr r1, =0x00020000 |
||||
str r1, [r0, #0x540] |
||||
ldr r1, =0x00000030 |
||||
str r1, [r0, #0x544] |
||||
str r1, [r0, #0x54C] |
||||
str r1, [r0, #0x554] |
||||
str r1, [r0, #0x558] |
||||
str r1, [r0, #0x294] |
||||
str r1, [r0, #0x298] |
||||
str r1, [r0, #0x29C] |
||||
str r1, [r0, #0x2A0] |
||||
|
||||
ldr r1, =0x00082030 |
||||
str r1, [r0, #0x2C0] |
||||
|
||||
ldr r0, =MMDC_P0_BASE_ADDR |
||||
ldr r1, =0x00008000 |
||||
str r1, [r0, #0x1C] |
||||
ldr r1, =0xA1390003 |
||||
str r1, [r0, #0x800] |
||||
ldr r1, =0x084700C7 |
||||
str r1, [r0, #0x85C] |
||||
ldr r1, =0x00400000 |
||||
str r1, [r0, #0x890] |
||||
|
||||
ldr r1, =0x3F393B3C |
||||
str r1, [r0, #0x848] |
||||
ldr r1, =0x262C3826 |
||||
str r1, [r0, #0x850] |
||||
|
||||
ldr r1, =0x33333333 |
||||
str r1, [r0, #0x81C] |
||||
str r1, [r0, #0x820] |
||||
str r1, [r0, #0x824] |
||||
str r1, [r0, #0x828] |
||||
|
||||
ldr r1, =0xf3333333 |
||||
str r1, [r0, #0x82C] |
||||
str r1, [r0, #0x830] |
||||
str r1, [r0, #0x834] |
||||
str r1, [r0, #0x838] |
||||
|
||||
ldr r1, =0x24922492 |
||||
str r1, [r0, #0x8C0] |
||||
ldr r1, =0x00000800 |
||||
str r1, [r0, #0x8B8] |
||||
|
||||
ldr r1, =0x00020052 |
||||
str r1, [r0, #0x004] |
||||
ldr r1, =0x53574333 |
||||
str r1, [r0, #0x00C] |
||||
ldr r1, =0x00100B22 |
||||
str r1, [r0, #0x010] |
||||
ldr r1, =0x00170778 |
||||
str r1, [r0, #0x038] |
||||
ldr r1, =0x00C700DB |
||||
str r1, [r0, #0x014] |
||||
ldr r1, =0x00201718 |
||||
str r1, [r0, #0x018] |
||||
ldr r1, =0x0F9F26D2 |
||||
str r1, [r0, #0x02C] |
||||
ldr r1, =0x009F0E10 |
||||
str r1, [r0, #0x030] |
||||
ldr r1, =0x0000005F |
||||
str r1, [r0, #0x040] |
||||
ldr r1, =0xC4190000 |
||||
str r1, [r0, #0x000] |
||||
ldr r1, =0x20000000 |
||||
str r1, [r0, #0x83C] |
||||
|
||||
ldr r1, =0x00008050 |
||||
str r1, [r0, #0x01C] |
||||
ldr r1, =0x00008058 |
||||
str r1, [r0, #0x01C] |
||||
ldr r1, =0x003F8030 |
||||
str r1, [r0, #0x01C] |
||||
ldr r1, =0x003F8038 |
||||
str r1, [r0, #0x01C] |
||||
ldr r1, =0xFF0A8030 |
||||
str r1, [r0, #0x01C] |
||||
ldr r1, =0xFF0A8038 |
||||
str r1, [r0, #0x01C] |
||||
ldr r1, =0x04028030 |
||||
str r1, [r0, #0x01C] |
||||
ldr r1, =0x04028038 |
||||
str r1, [r0, #0x01C] |
||||
ldr r1, =0x83018030 |
||||
str r1, [r0, #0x01C] |
||||
ldr r1, =0x83018038 |
||||
str r1, [r0, #0x01C] |
||||
ldr r1, =0x01038030 |
||||
str r1, [r0, #0x01C] |
||||
ldr r1, =0x01038038 |
||||
str r1, [r0, #0x01C] |
||||
|
||||
ldr r1, =0x00001800 |
||||
str r1, [r0, #0x020] |
||||
ldr r1, =0xA1390003 |
||||
str r1, [r0, #0x800] |
||||
ldr r1, =0x00020052 |
||||
str r1, [r0, #0x004] |
||||
ldr r1, =0x00011006 |
||||
str r1, [r0, #0x404] |
||||
ldr r1, =0x00000000 |
||||
str r1, [r0, #0x01C] |
||||
.endm |
||||
|
||||
.macro imx6_clock_gating
|
||||
ldr r0, =CCM_BASE_ADDR |
||||
ldr r1, =0xffffffff |
||||
str r1, [r0, #0x068] |
||||
str r1, [r0, #0x06c] |
||||
str r1, [r0, #0x070] |
||||
str r1, [r0, #0x074] |
||||
str r1, [r0, #0x078] |
||||
str r1, [r0, #0x07c] |
||||
str r1, [r0, #0x080] |
||||
.endm |
||||
|
||||
.macro imx6_qos_setting
|
||||
.endm |
||||
|
||||
.macro imx6_ddr_setting
|
||||
imx6sll_evk_ddr_setting |
||||
.endm |
||||
|
||||
/* include the common plugin code here */ |
||||
#include <asm/arch/mx6_plugin.S> |
@ -0,0 +1,12 @@ |
||||
if TARGET_LITEBOARD |
||||
|
||||
config SYS_BOARD |
||||
default "liteboard" |
||||
|
||||
config SYS_VENDOR |
||||
default "grinn" |
||||
|
||||
config SYS_CONFIG_NAME |
||||
default "liteboard" |
||||
|
||||
endif |
@ -0,0 +1,6 @@ |
||||
LITEBOARD |
||||
M: Marcin Niestroj <m.niestroj@grinn-global.com> |
||||
S: Maintained |
||||
F: board/grinn/liteboard/ |
||||
F: include/configs/liteboard.h |
||||
F: configs/liteboard_defconfig |
@ -0,0 +1,6 @@ |
||||
# (C) Copyright 2016 Grinn
|
||||
#
|
||||
# SPDX-License-Identifier: GPL-2.0+
|
||||
#
|
||||
|
||||
obj-y := board.o
|
@ -0,0 +1,31 @@ |
||||
How to use U-Boot on Grinn's liteBoard |
||||
-------------------------------------- |
||||
|
||||
- Build U-Boot for liteBoard: |
||||
|
||||
$ make mrproper |
||||
$ make liteboard_defconfig |
||||
$ make |
||||
|
||||
This will generate the SPL image called SPL and the u-boot.img. |
||||
|
||||
- Flash the SPL image into the micro SD card: |
||||
|
||||
sudo dd if=SPL of=/dev/mmcblk0 bs=1k seek=1; sync |
||||
|
||||
- Flash the u-boot.img image into the micro SD card: |
||||
|
||||
sudo dd if=u-boot.img of=/dev/mmcblk0 bs=1k seek=69; sync |
||||
|
||||
- Jumper settings: |
||||
|
||||
S1: 0 1 0 1 1 1 |
||||
|
||||
where 0 means bottom position and 1 means top position (from the |
||||
switch label numbers reference). |
||||
|
||||
- Insert the micro SD card in the board. |
||||
|
||||
- Connect USB cable between liteBoard and the PC for the power and console. |
||||
|
||||
- U-Boot messages should come up. |
@ -0,0 +1,287 @@ |
||||
/*
|
||||
* Copyright (C) 2015-2016 Freescale Semiconductor, Inc. |
||||
* Copyright (C) 2016 Grinn |
||||
* |
||||
* SPDX-License-Identifier: GPL-2.0+ |
||||
*/ |
||||
|
||||
#include <asm/arch/clock.h> |
||||
#include <asm/arch/iomux.h> |
||||
#include <asm/arch/imx-regs.h> |
||||
#include <asm/arch/crm_regs.h> |
||||
#include <asm/arch/mx6ul_pins.h> |
||||
#include <asm/arch/mx6-pins.h> |
||||
#include <asm/arch/sys_proto.h> |
||||
#include <asm/gpio.h> |
||||
#include <asm/imx-common/iomux-v3.h> |
||||
#include <asm/imx-common/boot_mode.h> |
||||
#include <asm/io.h> |
||||
#include <common.h> |
||||
#include <fsl_esdhc.h> |
||||
#include <linux/sizes.h> |
||||
#include <linux/fb.h> |
||||
#include <mach/litesom.h> |
||||
#include <miiphy.h> |
||||
#include <mmc.h> |
||||
#include <netdev.h> |
||||
#include <spl.h> |
||||
#include <usb.h> |
||||
#include <usb/ehci-ci.h> |
||||
|
||||
DECLARE_GLOBAL_DATA_PTR; |
||||
|
||||
#define UART_PAD_CTRL (PAD_CTL_PKE | PAD_CTL_PUE | \ |
||||
PAD_CTL_PUS_100K_UP | PAD_CTL_SPEED_MED | \
|
||||
PAD_CTL_DSE_40ohm | PAD_CTL_SRE_FAST | PAD_CTL_HYS) |
||||
|
||||
#define USDHC_PAD_CTRL (PAD_CTL_PKE | PAD_CTL_PUE | \ |
||||
PAD_CTL_PUS_22K_UP | PAD_CTL_SPEED_LOW | \
|
||||
PAD_CTL_DSE_80ohm | PAD_CTL_SRE_FAST | PAD_CTL_HYS) |
||||
|
||||
#define ENET_PAD_CTRL (PAD_CTL_PUS_100K_UP | PAD_CTL_PUE | \ |
||||
PAD_CTL_SPEED_HIGH | \
|
||||
PAD_CTL_DSE_48ohm | PAD_CTL_SRE_FAST) |
||||
|
||||
#define MDIO_PAD_CTRL (PAD_CTL_PUS_100K_UP | PAD_CTL_PUE | \ |
||||
PAD_CTL_DSE_48ohm | PAD_CTL_SRE_FAST | PAD_CTL_ODE) |
||||
|
||||
#define ENET_CLK_PAD_CTRL (PAD_CTL_DSE_40ohm | PAD_CTL_SRE_FAST) |
||||
|
||||
static iomux_v3_cfg_t const uart1_pads[] = { |
||||
MX6_PAD_UART1_TX_DATA__UART1_DCE_TX | MUX_PAD_CTRL(UART_PAD_CTRL), |
||||
MX6_PAD_UART1_RX_DATA__UART1_DCE_RX | MUX_PAD_CTRL(UART_PAD_CTRL), |
||||
}; |
||||
|
||||
static iomux_v3_cfg_t const sd_pads[] = { |
||||
MX6_PAD_SD1_CLK__USDHC1_CLK | MUX_PAD_CTRL(USDHC_PAD_CTRL), |
||||
MX6_PAD_SD1_CMD__USDHC1_CMD | MUX_PAD_CTRL(USDHC_PAD_CTRL), |
||||
MX6_PAD_SD1_DATA0__USDHC1_DATA0 | MUX_PAD_CTRL(USDHC_PAD_CTRL), |
||||
MX6_PAD_SD1_DATA1__USDHC1_DATA1 | MUX_PAD_CTRL(USDHC_PAD_CTRL), |
||||
MX6_PAD_SD1_DATA2__USDHC1_DATA2 | MUX_PAD_CTRL(USDHC_PAD_CTRL), |
||||
MX6_PAD_SD1_DATA3__USDHC1_DATA3 | MUX_PAD_CTRL(USDHC_PAD_CTRL), |
||||
|
||||
/* CD */ |
||||
MX6_PAD_UART1_RTS_B__GPIO1_IO19 | MUX_PAD_CTRL(NO_PAD_CTRL), |
||||
}; |
||||
|
||||
#ifdef CONFIG_FEC_MXC |
||||
static iomux_v3_cfg_t const fec1_pads[] = { |
||||
MX6_PAD_GPIO1_IO06__ENET1_MDIO | MUX_PAD_CTRL(MDIO_PAD_CTRL), |
||||
MX6_PAD_GPIO1_IO07__ENET1_MDC | MUX_PAD_CTRL(ENET_PAD_CTRL), |
||||
MX6_PAD_ENET1_TX_DATA0__ENET1_TDATA00 | MUX_PAD_CTRL(ENET_PAD_CTRL), |
||||
MX6_PAD_ENET1_TX_DATA1__ENET1_TDATA01 | MUX_PAD_CTRL(ENET_PAD_CTRL), |
||||
MX6_PAD_ENET1_TX_EN__ENET1_TX_EN | MUX_PAD_CTRL(ENET_PAD_CTRL), |
||||
MX6_PAD_ENET1_TX_CLK__ENET1_REF_CLK1 | MUX_PAD_CTRL(ENET_CLK_PAD_CTRL), |
||||
MX6_PAD_ENET1_RX_DATA0__ENET1_RDATA00 | MUX_PAD_CTRL(ENET_PAD_CTRL), |
||||
MX6_PAD_ENET1_RX_DATA1__ENET1_RDATA01 | MUX_PAD_CTRL(ENET_PAD_CTRL), |
||||
MX6_PAD_ENET1_RX_ER__ENET1_RX_ER | MUX_PAD_CTRL(ENET_PAD_CTRL), |
||||
MX6_PAD_ENET1_RX_EN__ENET1_RX_EN | MUX_PAD_CTRL(ENET_PAD_CTRL), |
||||
}; |
||||
|
||||
static void setup_iomux_fec(void) |
||||
{ |
||||
imx_iomux_v3_setup_multiple_pads(fec1_pads, ARRAY_SIZE(fec1_pads)); |
||||
} |
||||
#endif |
||||
|
||||
static void setup_iomux_uart(void) |
||||
{ |
||||
imx_iomux_v3_setup_multiple_pads(uart1_pads, ARRAY_SIZE(uart1_pads)); |
||||
} |
||||
|
||||
#ifdef CONFIG_FSL_ESDHC |
||||
static struct fsl_esdhc_cfg sd_cfg = {USDHC1_BASE_ADDR, 0, 4}; |
||||
|
||||
#define SD_CD_GPIO IMX_GPIO_NR(1, 19) |
||||
|
||||
static int mmc_get_env_devno(void) |
||||
{ |
||||
u32 soc_sbmr = readl(SRC_BASE_ADDR + 0x4); |
||||
int dev_no; |
||||
u32 bootsel; |
||||
|
||||
bootsel = (soc_sbmr & 0x000000FF) >> 6; |
||||
|
||||
/* If not boot from sd/mmc, use default value */ |
||||
if (bootsel != 1) |
||||
return CONFIG_SYS_MMC_ENV_DEV; |
||||
|
||||
/* BOOT_CFG2[3] and BOOT_CFG2[4] */ |
||||
dev_no = (soc_sbmr & 0x00001800) >> 11; |
||||
|
||||
return dev_no; |
||||
} |
||||
|
||||
int board_mmc_getcd(struct mmc *mmc) |
||||
{ |
||||
struct fsl_esdhc_cfg *cfg = (struct fsl_esdhc_cfg *)mmc->priv; |
||||
int ret = 0; |
||||
|
||||
switch (cfg->esdhc_base) { |
||||
case USDHC1_BASE_ADDR: |
||||
ret = !gpio_get_value(SD_CD_GPIO); |
||||
break; |
||||
case USDHC2_BASE_ADDR: |
||||
ret = 1; |
||||
break; |
||||
} |
||||
|
||||
return ret; |
||||
} |
||||
|
||||
int board_mmc_init(bd_t *bis) |
||||
{ |
||||
int ret; |
||||
|
||||
/* SD */ |
||||
imx_iomux_v3_setup_multiple_pads(sd_pads, ARRAY_SIZE(sd_pads)); |
||||
gpio_direction_input(SD_CD_GPIO); |
||||
sd_cfg.sdhc_clk = mxc_get_clock(MXC_ESDHC_CLK); |
||||
|
||||
ret = fsl_esdhc_initialize(bis, &sd_cfg); |
||||
if (ret) { |
||||
printf("Warning: failed to initialize mmc dev 0 (SD)\n"); |
||||
return ret; |
||||
} |
||||
|
||||
return litesom_mmc_init(bis); |
||||
} |
||||
|
||||
static int check_mmc_autodetect(void) |
||||
{ |
||||
char *autodetect_str = getenv("mmcautodetect"); |
||||
|
||||
if ((autodetect_str != NULL) && |
||||
(strcmp(autodetect_str, "yes") == 0)) { |
||||
return 1; |
||||
} |
||||
|
||||
return 0; |
||||
} |
||||
|
||||
void board_late_mmc_init(void) |
||||
{ |
||||
char cmd[32]; |
||||
char mmcblk[32]; |
||||
u32 dev_no = mmc_get_env_devno(); |
||||
|
||||
if (!check_mmc_autodetect()) |
||||
return; |
||||
|
||||
setenv_ulong("mmcdev", dev_no); |
||||
|
||||
/* Set mmcblk env */ |
||||
sprintf(mmcblk, "/dev/mmcblk%dp2 rootwait rw", |
||||
dev_no); |
||||
setenv("mmcroot", mmcblk); |
||||
|
||||
sprintf(cmd, "mmc dev %d", dev_no); |
||||
run_command(cmd, 0); |
||||
} |
||||
#endif |
||||
|
||||
#ifdef CONFIG_FEC_MXC |
||||
int board_eth_init(bd_t *bis) |
||||
{ |
||||
setup_iomux_fec(); |
||||
|
||||
return fecmxc_initialize(bis); |
||||
} |
||||
|
||||
static int setup_fec(void) |
||||
{ |
||||
struct iomuxc *const iomuxc_regs = (struct iomuxc *)IOMUXC_BASE_ADDR; |
||||
int ret; |
||||
|
||||
/* Use 50M anatop loopback REF_CLK1 for ENET1, clear gpr1[13],
|
||||
set gpr1[17]*/ |
||||
clrsetbits_le32(&iomuxc_regs->gpr[1], IOMUX_GPR1_FEC1_MASK, |
||||
IOMUX_GPR1_FEC1_CLOCK_MUX1_SEL_MASK); |
||||
|
||||
ret = enable_fec_anatop_clock(0, ENET_50MHZ); |
||||
if (ret) |
||||
return ret; |
||||
|
||||
enable_enet_clk(1); |
||||
|
||||
return 0; |
||||
} |
||||
#endif |
||||
|
||||
#ifdef CONFIG_USB_EHCI_MX6 |
||||
int board_usb_phy_mode(int port) |
||||
{ |
||||
return USB_INIT_HOST; |
||||
} |
||||
#endif |
||||
|
||||
int board_early_init_f(void) |
||||
{ |
||||
setup_iomux_uart(); |
||||
|
||||
return 0; |
||||
} |
||||
|
||||
int board_init(void) |
||||
{ |
||||
/* Address of boot parameters */ |
||||
gd->bd->bi_boot_params = PHYS_SDRAM + 0x100; |
||||
|
||||
#ifdef CONFIG_FEC_MXC |
||||
setup_fec(); |
||||
#endif |
||||
|
||||
return 0; |
||||
} |
||||
|
||||
#ifdef CONFIG_CMD_BMODE |
||||
static const struct boot_mode board_boot_modes[] = { |
||||
/* 4 bit bus width */ |
||||
{"sd", MAKE_CFGVAL(0x40, 0x20, 0x00, 0x00)}, |
||||
{"emmc", MAKE_CFGVAL(0x60, 0x48, 0x00, 0x00)}, |
||||
{NULL, 0}, |
||||
}; |
||||
#endif |
||||
|
||||
int board_late_init(void) |
||||
{ |
||||
#ifdef CONFIG_CMD_BMODE |
||||
add_board_boot_modes(board_boot_modes); |
||||
#endif |
||||
|
||||
#ifdef CONFIG_ENV_IS_IN_MMC |
||||
board_late_mmc_init(); |
||||
#endif |
||||
|
||||
return 0; |
||||
} |
||||
|
||||
int checkboard(void) |
||||
{ |
||||
puts("Board: Grinn liteBoard\n"); |
||||
|
||||
return 0; |
||||
} |
||||
|
||||
#ifdef CONFIG_SPL_BUILD |
||||
void board_boot_order(u32 *spl_boot_list) |
||||
{ |
||||
struct src *psrc = (struct src *)SRC_BASE_ADDR; |
||||
unsigned gpr10_boot = readl(&psrc->gpr10) & (1 << 28); |
||||
unsigned reg = gpr10_boot ? readl(&psrc->gpr9) : readl(&psrc->sbmr1); |
||||
unsigned port = (reg >> 11) & 0x1; |
||||
|
||||
if (port == 0) { |
||||
spl_boot_list[0] = BOOT_DEVICE_MMC1; |
||||
spl_boot_list[1] = BOOT_DEVICE_MMC2; |
||||
} else { |
||||
spl_boot_list[0] = BOOT_DEVICE_MMC2; |
||||
spl_boot_list[1] = BOOT_DEVICE_MMC1; |
||||
} |
||||
} |
||||
|
||||
void board_init_f(ulong dummy) |
||||
{ |
||||
litesom_init_f(); |
||||
} |
||||
#endif |
@ -0,0 +1,48 @@ |
||||
/* |
||||
* Copyright (C) 2013 Boundary Devices |
||||
* Copyright (C) 2014-2016 Toradex AG |
||||
* |
||||
* SPDX-License-Identifier: GPL-2.0+ |
||||
*/ |
||||
|
||||
DATA 4, MX6_MMDC_P0_MDPDC, 0x00020036 |
||||
DATA 4, MX6_MMDC_P0_MDCFG0, 0x555A7954 |
||||
DATA 4, MX6_MMDC_P0_MDCFG1, 0xDB328F64 |
||||
DATA 4, MX6_MMDC_P0_MDCFG2, 0x01FF00DB |
||||
DATA 4, MX6_MMDC_P0_MDRWD, 0x000026D2 |
||||
DATA 4, MX6_MMDC_P0_MDOR, 0x005A1023 |
||||
DATA 4, MX6_MMDC_P0_MDOTC, 0x09555050 |
||||
DATA 4, MX6_MMDC_P0_MDPDC, 0x00025576 |
||||
DATA 4, MX6_MMDC_P0_MDASP, 0x00000027 |
||||
DATA 4, MX6_MMDC_P0_MDCTL, 0x831A0000 |
||||
DATA 4, MX6_MMDC_P0_MDSCR, 0x04088032 |
||||
DATA 4, MX6_MMDC_P0_MDSCR, 0x00008033 |
||||
DATA 4, MX6_MMDC_P0_MDSCR, 0x00428031 |
||||
DATA 4, MX6_MMDC_P0_MDSCR, 0x19308030 |
||||
DATA 4, MX6_MMDC_P0_MDSCR, 0x04008040 |
||||
DATA 4, MX6_MMDC_P0_MPZQHWCTRL, 0xA1390003 |
||||
DATA 4, MX6_MMDC_P1_MPZQHWCTRL, 0xA1390003 |
||||
DATA 4, MX6_MMDC_P0_MDREF, 0x00005800 |
||||
DATA 4, MX6_MMDC_P0_MPODTCTRL, 0x00000000 |
||||
DATA 4, MX6_MMDC_P1_MPODTCTRL, 0x00000000 |
||||
|
||||
DATA 4, MX6_MMDC_P0_MPDGCTRL0, 0x432A0338 |
||||
DATA 4, MX6_MMDC_P0_MPDGCTRL1, 0x03260324 |
||||
DATA 4, MX6_MMDC_P1_MPDGCTRL0, 0x43340344 |
||||
DATA 4, MX6_MMDC_P1_MPDGCTRL1, 0x031E027C |
||||
|
||||
DATA 4, MX6_MMDC_P0_MPRDDLCTL, 0x33272D2E |
||||
DATA 4, MX6_MMDC_P1_MPRDDLCTL, 0x2F312B37 |
||||
|
||||
DATA 4, MX6_MMDC_P0_MPWRDLCTL, 0x3A35433C |
||||
DATA 4, MX6_MMDC_P1_MPWRDLCTL, 0x4336453F |
||||
|
||||
DATA 4, MX6_MMDC_P0_MPWLDECTRL0, 0x0009000E |
||||
DATA 4, MX6_MMDC_P0_MPWLDECTRL1, 0x0018000B |
||||
DATA 4, MX6_MMDC_P1_MPWLDECTRL0, 0x00060015 |
||||
DATA 4, MX6_MMDC_P1_MPWLDECTRL1, 0x0006000E |
||||
|
||||
DATA 4, MX6_MMDC_P0_MPMUR0, 0x00000800 |
||||
DATA 4, MX6_MMDC_P1_MPMUR0, 0x00000800 |
||||
DATA 4, MX6_MMDC_P0_MDSCR, 0x00000000 |
||||
DATA 4, MX6_MMDC_P0_MAPSR, 0x00011006 |
@ -0,0 +1,48 @@ |
||||
/* |
||||
* Copyright (C) 2013 Boundary Devices |
||||
* Copyright (C) 2014-2016 Toradex AG |
||||
* |
||||
* SPDX-License-Identifier: GPL-2.0+ |
||||
*/ |
||||
|
||||
DATA 4, MX6_MMDC_P0_MDPDC, 0x00020036 |
||||
DATA 4, MX6_MMDC_P0_MDCFG0, 0x898E78f5 |
||||
DATA 4, MX6_MMDC_P0_MDCFG1, 0xff328f64 |
||||
DATA 4, MX6_MMDC_P0_MDCFG2, 0x01FF00DB |
||||
DATA 4, MX6_MMDC_P0_MDRWD, 0x000026D2 |
||||
DATA 4, MX6_MMDC_P0_MDOR, 0x008E1023 |
||||
DATA 4, MX6_MMDC_P0_MDOTC, 0x09444040 |
||||
DATA 4, MX6_MMDC_P0_MDPDC, 0x00025576 |
||||
DATA 4, MX6_MMDC_P0_MDASP, 0x00000047 |
||||
DATA 4, MX6_MMDC_P0_MDCTL, 0x841A0000 |
||||
DATA 4, MX6_MMDC_P0_MDSCR, 0x02888032 |
||||
DATA 4, MX6_MMDC_P0_MDSCR, 0x00008033 |
||||
DATA 4, MX6_MMDC_P0_MDSCR, 0x00048031 |
||||
DATA 4, MX6_MMDC_P0_MDSCR, 0x19408030 |
||||
DATA 4, MX6_MMDC_P0_MDSCR, 0x04008040 |
||||
DATA 4, MX6_MMDC_P0_MPZQHWCTRL, 0xA1390003 |
||||
DATA 4, MX6_MMDC_P1_MPZQHWCTRL, 0xA1390003 |
||||
DATA 4, MX6_MMDC_P0_MDREF, 0x00007800 |
||||
DATA 4, MX6_MMDC_P0_MPODTCTRL, 0x00022227 |
||||
DATA 4, MX6_MMDC_P1_MPODTCTRL, 0x00022227 |
||||
|
||||
DATA 4, MX6_MMDC_P0_MPDGCTRL0, 0x03300338 |
||||
DATA 4, MX6_MMDC_P0_MPDGCTRL1, 0x03240324 |
||||
DATA 4, MX6_MMDC_P1_MPDGCTRL0, 0x03440350 |
||||
DATA 4, MX6_MMDC_P1_MPDGCTRL1, 0x032C0308 |
||||
|
||||
DATA 4, MX6_MMDC_P0_MPRDDLCTL, 0x40363C3E |
||||
DATA 4, MX6_MMDC_P1_MPRDDLCTL, 0x3C3E3C46 |
||||
|
||||
DATA 4, MX6_MMDC_P0_MPWRDLCTL, 0x403E463E |
||||
DATA 4, MX6_MMDC_P1_MPWRDLCTL, 0x4A384C46 |
||||
|
||||
DATA 4, MX6_MMDC_P0_MPWLDECTRL0, 0x0009000E |
||||
DATA 4, MX6_MMDC_P0_MPWLDECTRL1, 0x0018000B |
||||
DATA 4, MX6_MMDC_P1_MPWLDECTRL0, 0x00060015 |
||||
DATA 4, MX6_MMDC_P1_MPWLDECTRL1, 0x0006000E |
||||
|
||||
DATA 4, MX6_MMDC_P0_MPMUR0, 0x00000800 |
||||
DATA 4, MX6_MMDC_P1_MPMUR0, 0x00000800 |
||||
DATA 4, MX6_MMDC_P0_MDSCR, 0x00000000 |
||||
DATA 4, MX6_MMDC_P0_MAPSR, 0x00011006 |
@ -0,0 +1,55 @@ |
||||
if TARGET_APALIS_IMX6 |
||||
|
||||
config SYS_BOARD |
||||
default "apalis_imx6" |
||||
|
||||
config SYS_CONFIG_NAME |
||||
default "apalis_imx6" |
||||
|
||||
config SYS_CPU |
||||
default "armv7" |
||||
|
||||
config SYS_SOC |
||||
default "mx6" |
||||
|
||||
config SYS_VENDOR |
||||
default "toradex" |
||||
|
||||
config TDX_CFG_BLOCK |
||||
default y |
||||
|
||||
config TDX_HAVE_MMC |
||||
default y |
||||
|
||||
config TDX_CFG_BLOCK_DEV |
||||
default "0" |
||||
|
||||
config TDX_CFG_BLOCK_PART |
||||
default "1" |
||||
|
||||
# Toradex config block in eMMC, at the end of 1st "boot sector" |
||||
config TDX_CFG_BLOCK_OFFSET |
||||
default "-512" |
||||
|
||||
config TDX_CMD_IMX_MFGR |
||||
bool "Enable factory testing commands for Toradex iMX 6 modules" |
||||
help |
||||
This adds the commands |
||||
pf0100_otp_prog - Program the OTP fuses on the PMIC PF0100 |
||||
If executed on already fused modules it doesn't change any fuse setting. |
||||
default y |
||||
|
||||
config TDX_APALIS_IMX6_V1_0 |
||||
bool "Apalis iMX6 V1.0 HW" |
||||
help |
||||
Apalis iMX6 V1.0 HW has a different pinout for the UART. |
||||
The UARTs must be used in DCE mode, RTS/CTS are swapped and |
||||
thus unusable on standard carrier boards. |
||||
This option configures DCE mode unconditionally. Whithout this |
||||
option the config block stating V1.0 HW selects DCE mode, |
||||
otherwise the UARTs are configuered in DTE mode. |
||||
default n |
||||
|
||||
source "board/toradex/common/Kconfig" |
||||
|
||||
endif |
@ -0,0 +1,9 @@ |
||||
Apalis iMX6 |
||||
M: Max Krummenacher <max.krummenacher@toradex.com> |
||||
W: http://developer.toradex.com/software/linux/linux-software |
||||
S: Maintained |
||||
F: board/toradex/apalis_imx6/ |
||||
F: include/configs/apalis_imx6.h |
||||
F: configs/apalis_imx6_defconfig |
||||
F: configs/apalis_imx6_nospl_com_defconfig |
||||
F: configs/apalis_imx6_nospl_it_defconfig |
@ -0,0 +1,5 @@ |
||||
# Copyright (c) 2012-2014 Toradex, Inc.
|
||||
# SPDX-License-Identifier: GPL-2.0+
|
||||
|
||||
obj-y := apalis_imx6.o do_fuse.o
|
||||
obj-$(CONFIG_TDX_CMD_IMX_MFGR) += pf0100.o
|
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,34 @@ |
||||
/* |
||||
* Copyright (C) 2013 Boundary Devices |
||||
* Copyright (C) 2014-2016, Toradex AG |
||||
* |
||||
* SPDX-License-Identifier: GPL-2.0+ |
||||
* |
||||
* Refer doc/README.imximage for more details about how-to configure |
||||
* and create imximage boot image |
||||
* |
||||
* The syntax is taken as close as possible with the kwbimage |
||||
*/ |
||||
|
||||
/* image version */ |
||||
IMAGE_VERSION 2 |
||||
|
||||
/* |
||||
* Boot Device : one of |
||||
* spi, sd (the board has no nand neither onenand) |
||||
*/ |
||||
BOOT_FROM sd |
||||
|
||||
#define __ASSEMBLY__ |
||||
#include <config.h> |
||||
#include "asm/arch/mx6-ddr.h" |
||||
#include "asm/arch/iomux.h" |
||||
#include "asm/arch/crm_regs.h" |
||||
|
||||
#include "ddr-setup.cfg" |
||||
#if CONFIG_DDR_MB == 2048 |
||||
#include "1066mhz_4x256mx16.cfg" |
||||
#else |
||||
#include "1066mhz_4x128mx16.cfg" |
||||
#endif |
||||
#include "clocks.cfg" |
@ -0,0 +1,42 @@ |
||||
/* |
||||
* Copyright (C) 2013 Boundary Devices |
||||
* Copyright (C) 2014-2016, Toradex AG |
||||
* |
||||
* SPDX-License-Identifier: GPL-2.0+ |
||||
* |
||||
* Device Configuration Data (DCD) |
||||
* |
||||
* Each entry must have the format: |
||||
* Addr-type Address Value |
||||
* |
||||
* where: |
||||
* Addr-type register length (1,2 or 4 bytes) |
||||
* Address absolute address of the register |
||||
* value value to be stored in the register |
||||
*/ |
||||
|
||||
/* set the default clock gate to save power */ |
||||
DATA 4, CCM_CCGR0, 0x00C03F3F |
||||
DATA 4, CCM_CCGR1, 0x0030FC03 |
||||
DATA 4, CCM_CCGR2, 0x0FFFC000 |
||||
DATA 4, CCM_CCGR3, 0x3FF00000 |
||||
DATA 4, CCM_CCGR4, 0x00FFF300 |
||||
DATA 4, CCM_CCGR5, 0x0F0000C3 |
||||
DATA 4, CCM_CCGR6, 0x000003FF |
||||
|
||||
/* enable AXI cache for VDOA/VPU/IPU */ |
||||
DATA 4, MX6_IOMUXC_GPR4, 0xF00000CF |
||||
/* set IPU AXI-id0 Qos=0xf(bypass) AXI-id1 Qos=0x7 */ |
||||
DATA 4, MX6_IOMUXC_GPR6, 0x007F007F |
||||
DATA 4, MX6_IOMUXC_GPR7, 0x007F007F |
||||
|
||||
/* |
||||
* Setup CCM_CCOSR register as follows: |
||||
* |
||||
* cko1_en = 1 --> CKO1 enabled |
||||
* cko1_div = 111 --> divide by 8 |
||||
* cko1_sel = 1011 --> ahb_clk_root |
||||
* |
||||
* This sets CKO1 at ahb_clk_root/8 = 132/8 = 16.5 MHz |
||||
*/ |
||||
DATA 4, CCM_CCOSR, 0x000000fb |
@ -0,0 +1,97 @@ |
||||
/* |
||||
* Copyright (C) 2013 Boundary Devices |
||||
* Copyright (C) 2014-2016, Toradex AG |
||||
* |
||||
* SPDX-License-Identifier: GPL-2.0+ |
||||
* |
||||
* Device Configuration Data (DCD) |
||||
* |
||||
* Each entry must have the format: |
||||
* Addr-type Address Value |
||||
* |
||||
* where: |
||||
* Addr-type register length (1,2 or 4 bytes) |
||||
* Address absolute address of the register |
||||
* value value to be stored in the register |
||||
*/ |
||||
|
||||
/* |
||||
* DDR3 settings |
||||
* MX6Q ddr is limited to 1066 Mhz currently 1056 MHz(528 MHz clock), |
||||
* memory bus width: 64 bits x16/x32/x64 |
||||
* MX6DL ddr is limited to 800 MHz(400 MHz clock) |
||||
* memory bus width: 64 bits x16/x32/x64 |
||||
* MX6SOLO ddr is limited to 800 MHz(400 MHz clock) |
||||
* memory bus width: 32 bits x16/x32 |
||||
*/ |
||||
DATA 4, MX6_IOM_DRAM_SDQS0, 0x00000030 |
||||
DATA 4, MX6_IOM_DRAM_SDQS1, 0x00000030 |
||||
DATA 4, MX6_IOM_DRAM_SDQS2, 0x00000030 |
||||
DATA 4, MX6_IOM_DRAM_SDQS3, 0x00000030 |
||||
DATA 4, MX6_IOM_DRAM_SDQS4, 0x00000030 |
||||
DATA 4, MX6_IOM_DRAM_SDQS5, 0x00000030 |
||||
DATA 4, MX6_IOM_DRAM_SDQS6, 0x00000030 |
||||
DATA 4, MX6_IOM_DRAM_SDQS7, 0x00000030 |
||||
|
||||
DATA 4, MX6_IOM_GRP_B0DS, 0x00000030 |
||||
DATA 4, MX6_IOM_GRP_B1DS, 0x00000030 |
||||
DATA 4, MX6_IOM_GRP_B2DS, 0x00000030 |
||||
DATA 4, MX6_IOM_GRP_B3DS, 0x00000030 |
||||
DATA 4, MX6_IOM_GRP_B4DS, 0x00000030 |
||||
DATA 4, MX6_IOM_GRP_B5DS, 0x00000030 |
||||
DATA 4, MX6_IOM_GRP_B6DS, 0x00000030 |
||||
DATA 4, MX6_IOM_GRP_B7DS, 0x00000030 |
||||
DATA 4, MX6_IOM_GRP_ADDDS, 0x00000030 |
||||
/* 40 Ohm drive strength for cs0/1,sdba2,cke0/1,sdwe */ |
||||
DATA 4, MX6_IOM_GRP_CTLDS, 0x00000030 |
||||
|
||||
DATA 4, MX6_IOM_DRAM_DQM0, 0x00020030 |
||||
DATA 4, MX6_IOM_DRAM_DQM1, 0x00020030 |
||||
DATA 4, MX6_IOM_DRAM_DQM2, 0x00020030 |
||||
DATA 4, MX6_IOM_DRAM_DQM3, 0x00020030 |
||||
DATA 4, MX6_IOM_DRAM_DQM4, 0x00020030 |
||||
DATA 4, MX6_IOM_DRAM_DQM5, 0x00020030 |
||||
DATA 4, MX6_IOM_DRAM_DQM6, 0x00020030 |
||||
DATA 4, MX6_IOM_DRAM_DQM7, 0x00020030 |
||||
|
||||
DATA 4, MX6_IOM_DRAM_CAS, 0x00020030 |
||||
DATA 4, MX6_IOM_DRAM_RAS, 0x00020030 |
||||
DATA 4, MX6_IOM_DRAM_SDCLK_0, 0x00020030 |
||||
DATA 4, MX6_IOM_DRAM_SDCLK_1, 0x00020030 |
||||
|
||||
DATA 4, MX6_IOM_DRAM_RESET, 0x00020030 |
||||
DATA 4, MX6_IOM_DRAM_SDCKE0, 0x00003000 |
||||
DATA 4, MX6_IOM_DRAM_SDCKE1, 0x00003000 |
||||
|
||||
DATA 4, MX6_IOM_DRAM_SDODT0, 0x00003030 |
||||
DATA 4, MX6_IOM_DRAM_SDODT1, 0x00003030 |
||||
|
||||
/* (differential input) */ |
||||
DATA 4, MX6_IOM_DDRMODE_CTL, 0x00020000 |
||||
/* (differential input) */ |
||||
DATA 4, MX6_IOM_GRP_DDRMODE, 0x00020000 |
||||
/* disable ddr pullups */ |
||||
DATA 4, MX6_IOM_GRP_DDRPKE, 0x00000000 |
||||
DATA 4, MX6_IOM_DRAM_SDBA2, 0x00000000 |
||||
/* 40 Ohm drive strength for cs0/1,sdba2,cke0/1,sdwe */ |
||||
DATA 4, MX6_IOM_GRP_DDR_TYPE, 0x000C0000 |
||||
|
||||
/* Read data DQ Byte0-3 delay */ |
||||
DATA 4, MX6_MMDC_P0_MPRDDQBY0DL, 0x33333333 |
||||
DATA 4, MX6_MMDC_P0_MPRDDQBY1DL, 0x33333333 |
||||
DATA 4, MX6_MMDC_P0_MPRDDQBY2DL, 0x33333333 |
||||
DATA 4, MX6_MMDC_P0_MPRDDQBY3DL, 0x33333333 |
||||
DATA 4, MX6_MMDC_P1_MPRDDQBY0DL, 0x33333333 |
||||
DATA 4, MX6_MMDC_P1_MPRDDQBY1DL, 0x33333333 |
||||
DATA 4, MX6_MMDC_P1_MPRDDQBY2DL, 0x33333333 |
||||
DATA 4, MX6_MMDC_P1_MPRDDQBY3DL, 0x33333333 |
||||
|
||||
/* |
||||
* MDMISC mirroring interleaved (row/bank/col) |
||||
*/ |
||||
DATA 4, MX6_MMDC_P0_MDMISC, 0x00081740 |
||||
|
||||
/* |
||||
* MDSCR con_req |
||||
*/ |
||||
DATA 4, MX6_MMDC_P0_MDSCR, 0x00008000 |
@ -0,0 +1,98 @@ |
||||
/*
|
||||
* Copyright (C) 2014-2016, Toradex AG |
||||
* |
||||
* SPDX-License-Identifier: GPL-2.0+ |
||||
*/ |
||||
|
||||
/*
|
||||
* Helpers for i.MX OTP fusing during module production |
||||
*/ |
||||
|
||||
#include <common.h> |
||||
#ifndef CONFIG_SPL_BUILD |
||||
#include <console.h> |
||||
#include <fuse.h> |
||||
|
||||
static int mfgr_fuse(void) |
||||
{ |
||||
unsigned val, val6; |
||||
|
||||
fuse_sense(0, 5, &val); |
||||
printf("Fuse 0, 5: %8x\n", val); |
||||
fuse_sense(0, 6, &val6); |
||||
printf("Fuse 0, 6: %8x\n", val6); |
||||
fuse_sense(4, 3, &val); |
||||
printf("Fuse 4, 3: %8x\n", val); |
||||
fuse_sense(4, 2, &val); |
||||
printf("Fuse 4, 2: %8x\n", val); |
||||
if (val6 & 0x10) { |
||||
puts("BT_FUSE_SEL already fused, will do nothing\n"); |
||||
return CMD_RET_FAILURE; |
||||
} |
||||
/* boot cfg */ |
||||
fuse_prog(0, 5, 0x00005072); |
||||
/* BT_FUSE_SEL */ |
||||
fuse_prog(0, 6, 0x00000010); |
||||
return CMD_RET_SUCCESS; |
||||
} |
||||
|
||||
int do_mfgr_fuse(cmd_tbl_t *cmdtp, int flag, int argc, |
||||
char * const argv[]) |
||||
{ |
||||
int ret; |
||||
puts("Fusing...\n"); |
||||
ret = mfgr_fuse(); |
||||
if (ret == CMD_RET_SUCCESS) |
||||
puts("done.\n"); |
||||
else |
||||
puts("failed.\n"); |
||||
return ret; |
||||
} |
||||
|
||||
int do_updt_fuse(cmd_tbl_t *cmdtp, int flag, int argc, |
||||
char * const argv[]) |
||||
{ |
||||
unsigned val; |
||||
int ret; |
||||
int confirmed = argc >= 1 && !strcmp(argv[1], "-y"); |
||||
|
||||
/* can be used in scripts for command availability check */ |
||||
if (argc >= 1 && !strcmp(argv[1], "-n")) |
||||
return CMD_RET_SUCCESS; |
||||
|
||||
/* boot cfg */ |
||||
fuse_sense(0, 5, &val); |
||||
printf("Fuse 0, 5: %8x\n", val); |
||||
if (val & 0x10) { |
||||
puts("Fast boot mode already fused, no need to fuse\n"); |
||||
return CMD_RET_SUCCESS; |
||||
} |
||||
if (!confirmed) { |
||||
puts("Warning: Programming fuses is an irreversible operation!\n" |
||||
" Updating to fast boot mode prevents easy\n" |
||||
" downgrading to previous BSP versions.\n" |
||||
"\nReally perform this fuse programming? <y/N>\n"); |
||||
if (!confirm_yesno()) |
||||
return CMD_RET_FAILURE; |
||||
} |
||||
puts("Fusing fast boot mode...\n"); |
||||
ret = fuse_prog(0, 5, 0x00005072); |
||||
if (ret == CMD_RET_SUCCESS) |
||||
puts("done.\n"); |
||||
else |
||||
puts("failed.\n"); |
||||
return ret; |
||||
} |
||||
|
||||
U_BOOT_CMD( |
||||
mfgr_fuse, 1, 0, do_mfgr_fuse, |
||||
"OTP fusing during module production", |
||||
"" |
||||
); |
||||
|
||||
U_BOOT_CMD( |
||||
updt_fuse, 2, 0, do_updt_fuse, |
||||
"OTP fusing during module update", |
||||
"updt_fuse [-n] [-y] - boot cfg fast boot mode fusing" |
||||
); |
||||
#endif /* CONFIG_SPL_BUILD */ |
@ -0,0 +1,228 @@ |
||||
/*
|
||||
* Copyright (C) 2014-2016, Toradex AG |
||||
* |
||||
* SPDX-License-Identifier: GPL-2.0+ |
||||
*/ |
||||
|
||||
/*
|
||||
* Helpers for Freescale PMIC PF0100 |
||||
*/ |
||||
|
||||
#include <common.h> |
||||
#include <i2c.h> |
||||
#include <asm/arch/imx-regs.h> |
||||
#include <asm/arch/iomux.h> |
||||
#include <asm/arch/mx6-pins.h> |
||||
#include <asm/gpio.h> |
||||
#include <asm/imx-common/iomux-v3.h> |
||||
|
||||
#include "pf0100_otp.inc" |
||||
#include "pf0100.h" |
||||
|
||||
/* define for PMIC register dump */ |
||||
/*#define DEBUG */ |
||||
|
||||
/* use Apalis GPIO1 to switch on VPGM, ON: 1 */ |
||||
static iomux_v3_cfg_t const pmic_prog_pads[] = { |
||||
MX6_PAD_NANDF_D4__GPIO2_IO04 | MUX_PAD_CTRL(NO_PAD_CTRL), |
||||
# define PMIC_PROG_VOLTAGE IMX_GPIO_NR(2, 4) |
||||
}; |
||||
|
||||
unsigned pmic_init(void) |
||||
{ |
||||
unsigned programmed = 0; |
||||
uchar bus = 1; |
||||
uchar devid, revid, val; |
||||
|
||||
puts("PMIC: "); |
||||
if (!((0 == i2c_set_bus_num(bus)) && |
||||
(0 == i2c_probe(PFUZE100_I2C_ADDR)))) { |
||||
puts("i2c bus failed\n"); |
||||
return 0; |
||||
} |
||||
/* get device ident */ |
||||
if (i2c_read(PFUZE100_I2C_ADDR, PFUZE100_DEVICEID, 1, &devid, 1) < 0) { |
||||
puts("i2c pmic devid read failed\n"); |
||||
return 0; |
||||
} |
||||
if (i2c_read(PFUZE100_I2C_ADDR, PFUZE100_REVID, 1, &revid, 1) < 0) { |
||||
puts("i2c pmic revid read failed\n"); |
||||
return 0; |
||||
} |
||||
printf("device id: 0x%.2x, revision id: 0x%.2x\n", devid, revid); |
||||
|
||||
#ifdef DEBUG |
||||
{ |
||||
unsigned i, j; |
||||
|
||||
for (i = 0; i < 16; i++) |
||||
printf("\t%x", i); |
||||
for (j = 0; j < 0x80; ) { |
||||
printf("\n%2x", j); |
||||
for (i = 0; i < 16; i++) { |
||||
i2c_read(PFUZE100_I2C_ADDR, j+i, 1, &val, 1); |
||||
printf("\t%2x", val); |
||||
} |
||||
j += 0x10; |
||||
} |
||||
printf("\nEXT Page 1"); |
||||
|
||||
val = PFUZE100_PAGE_REGISTER_PAGE1; |
||||
if (i2c_write(PFUZE100_I2C_ADDR, PFUZE100_PAGE_REGISTER, 1, |
||||
&val, 1)) { |
||||
puts("i2c write failed\n"); |
||||
return 0; |
||||
} |
||||
|
||||
for (j = 0x80; j < 0x100; ) { |
||||
printf("\n%2x", j); |
||||
for (i = 0; i < 16; i++) { |
||||
i2c_read(PFUZE100_I2C_ADDR, j+i, 1, &val, 1); |
||||
printf("\t%2x", val); |
||||
} |
||||
j += 0x10; |
||||
} |
||||
printf("\nEXT Page 2"); |
||||
|
||||
val = PFUZE100_PAGE_REGISTER_PAGE2; |
||||
if (i2c_write(PFUZE100_I2C_ADDR, PFUZE100_PAGE_REGISTER, 1, |
||||
&val, 1)) { |
||||
puts("i2c write failed\n"); |
||||
return 0; |
||||
} |
||||
|
||||
for (j = 0x80; j < 0x100; ) { |
||||
printf("\n%2x", j); |
||||
for (i = 0; i < 16; i++) { |
||||
i2c_read(PFUZE100_I2C_ADDR, j+i, 1, &val, 1); |
||||
printf("\t%2x", val); |
||||
} |
||||
j += 0x10; |
||||
} |
||||
printf("\n"); |
||||
} |
||||
#endif |
||||
/* get device programmed state */ |
||||
val = PFUZE100_PAGE_REGISTER_PAGE1; |
||||
if (i2c_write(PFUZE100_I2C_ADDR, PFUZE100_PAGE_REGISTER, 1, &val, 1)) { |
||||
puts("i2c write failed\n"); |
||||
return 0; |
||||
} |
||||
if (i2c_read(PFUZE100_I2C_ADDR, PFUZE100_FUSE_POR1, 1, &val, 1) < 0) { |
||||
puts("i2c fuse_por read failed\n"); |
||||
return 0; |
||||
} |
||||
if (val & PFUZE100_FUSE_POR_M) |
||||
programmed++; |
||||
|
||||
if (i2c_read(PFUZE100_I2C_ADDR, PFUZE100_FUSE_POR2, 1, &val, 1) < 0) { |
||||
puts("i2c fuse_por read failed\n"); |
||||
return programmed; |
||||
} |
||||
if (val & PFUZE100_FUSE_POR_M) |
||||
programmed++; |
||||
|
||||
if (i2c_read(PFUZE100_I2C_ADDR, PFUZE100_FUSE_POR3, 1, &val, 1) < 0) { |
||||
puts("i2c fuse_por read failed\n"); |
||||
return programmed; |
||||
} |
||||
if (val & PFUZE100_FUSE_POR_M) |
||||
programmed++; |
||||
|
||||
switch (programmed) { |
||||
case 0: |
||||
printf("PMIC: not programmed\n"); |
||||
break; |
||||
case 3: |
||||
printf("PMIC: programmed\n"); |
||||
break; |
||||
default: |
||||
printf("PMIC: undefined programming state\n"); |
||||
break; |
||||
} |
||||
|
||||
/* The following is needed during production */ |
||||
if (programmed != 3) { |
||||
/* set VGEN1 to 1.2V */ |
||||
val = PFUZE100_VGEN1_VAL; |
||||
if (i2c_write(PFUZE100_I2C_ADDR, PFUZE100_VGEN1CTL, 1, |
||||
&val, 1)) { |
||||
puts("i2c write failed\n"); |
||||
return programmed; |
||||
} |
||||
|
||||
/* set SWBST to 5.0V */ |
||||
val = PFUZE100_SWBST_VAL; |
||||
if (i2c_write(PFUZE100_I2C_ADDR, PFUZE100_SWBSTCTL, 1, |
||||
&val, 1)) { |
||||
puts("i2c write failed\n"); |
||||
} |
||||
} |
||||
return programmed; |
||||
} |
||||
|
||||
int pf0100_prog(void) |
||||
{ |
||||
unsigned char bus = 1; |
||||
unsigned char val; |
||||
unsigned int i; |
||||
|
||||
if (pmic_init() == 3) { |
||||
puts("PMIC already programmed, exiting\n"); |
||||
return CMD_RET_FAILURE; |
||||
} |
||||
/* set up gpio to manipulate vprog, initially off */ |
||||
imx_iomux_v3_setup_multiple_pads(pmic_prog_pads, |
||||
ARRAY_SIZE(pmic_prog_pads)); |
||||
gpio_direction_output(PMIC_PROG_VOLTAGE, 0); |
||||
|
||||
if (!((0 == i2c_set_bus_num(bus)) && |
||||
(0 == i2c_probe(PFUZE100_I2C_ADDR)))) { |
||||
puts("i2c bus failed\n"); |
||||
return CMD_RET_FAILURE; |
||||
} |
||||
|
||||
for (i = 0; i < ARRAY_SIZE(pmic_otp_prog); i++) { |
||||
switch (pmic_otp_prog[i].cmd) { |
||||
case pmic_i2c: |
||||
val = (unsigned char) (pmic_otp_prog[i].value & 0xff); |
||||
if (i2c_write(PFUZE100_I2C_ADDR, pmic_otp_prog[i].reg, |
||||
1, &val, 1)) { |
||||
printf("i2c write failed, reg 0x%2x, value 0x%2x\n", |
||||
pmic_otp_prog[i].reg, val); |
||||
return CMD_RET_FAILURE; |
||||
} |
||||
break; |
||||
case pmic_delay: |
||||
udelay(pmic_otp_prog[i].value * 1000); |
||||
break; |
||||
case pmic_vpgm: |
||||
gpio_direction_output(PMIC_PROG_VOLTAGE, |
||||
pmic_otp_prog[i].value); |
||||
break; |
||||
case pmic_pwr: |
||||
/* TODO */ |
||||
break; |
||||
} |
||||
} |
||||
return CMD_RET_SUCCESS; |
||||
} |
||||
|
||||
int do_pf0100_prog(cmd_tbl_t *cmdtp, int flag, int argc, |
||||
char * const argv[]) |
||||
{ |
||||
int ret; |
||||
puts("Programming PMIC OTP..."); |
||||
ret = pf0100_prog(); |
||||
if (ret == CMD_RET_SUCCESS) |
||||
puts("done.\n"); |
||||
else |
||||
puts("failed.\n"); |
||||
return ret; |
||||
} |
||||
|
||||
U_BOOT_CMD( |
||||
pf0100_otp_prog, 1, 0, do_pf0100_prog, |
||||
"Program the OTP fuses on the PMIC PF0100", |
||||
"" |
||||
); |
@ -0,0 +1,56 @@ |
||||
/*
|
||||
* Copyright (C) 2014-2016, Toradex AG |
||||
* |
||||
* SPDX-License-Identifier: GPL-2.0+ |
||||
*/ |
||||
|
||||
/*
|
||||
* Helpers for Freescale PMIC PF0100 |
||||
*/ |
||||
|
||||
#ifndef PF0100_H_ |
||||
#define PF0100_H_ |
||||
|
||||
/* 7-bit I2C bus slave address */ |
||||
#define PFUZE100_I2C_ADDR (0x08) |
||||
/* Register Addresses */ |
||||
#define PFUZE100_DEVICEID (0x0) |
||||
#define PFUZE100_REVID (0x3) |
||||
#define PFUZE100_SW1AMODE (0x23) |
||||
#define PFUZE100_SW1ACON 36 |
||||
#define PFUZE100_SW1ACON_SPEED_VAL (0x1<<6) /*default */ |
||||
#define PFUZE100_SW1ACON_SPEED_M (0x3<<6) |
||||
#define PFUZE100_SW1CCON 49 |
||||
#define PFUZE100_SW1CCON_SPEED_VAL (0x1<<6) /*default */ |
||||
#define PFUZE100_SW1CCON_SPEED_M (0x3<<6) |
||||
#define PFUZE100_SW1AVOL 32 |
||||
#define PFUZE100_SW1AVOL_VSEL_M (0x3f<<0) |
||||
#define PFUZE100_SW1CVOL 46 |
||||
#define PFUZE100_SW1CVOL_VSEL_M (0x3f<<0) |
||||
#define PFUZE100_VGEN1CTL (0x6c) |
||||
#define PFUZE100_VGEN1_VAL (0x30 + 0x08) /* Always ON, 1.2V */ |
||||
#define PFUZE100_SWBSTCTL (0x66) |
||||
/* Always ON, Auto Switching Mode, 5.0V */ |
||||
#define PFUZE100_SWBST_VAL (0x40 + 0x08 + 0x00) |
||||
|
||||
/* chooses the extended page (registers 0x80..0xff) */ |
||||
#define PFUZE100_PAGE_REGISTER 0x7f |
||||
#define PFUZE100_PAGE_REGISTER_PAGE_M (0x1f << 0) |
||||
#define PFUZE100_PAGE_REGISTER_PAGE1 (0x01 & PFUZE100_PAGE_REGISTER_PAGE_M) |
||||
#define PFUZE100_PAGE_REGISTER_PAGE2 (0x02 & PFUZE100_PAGE_REGISTER_PAGE_M) |
||||
|
||||
/* extended page 1 */ |
||||
#define PFUZE100_FUSE_POR1 0xe4 |
||||
#define PFUZE100_FUSE_POR2 0xe5 |
||||
#define PFUZE100_FUSE_POR3 0xe6 |
||||
#define PFUZE100_FUSE_POR_M (0x1 << 1) |
||||
|
||||
|
||||
/* output some informational messages, return the number FUSE_POR=1 */ |
||||
/* i.e. 0: unprogrammed, 3: programmed, other: undefined prog. state */ |
||||
unsigned pmic_init(void); |
||||
|
||||
/* programmes OTP fuses to values required on a Toradex Apalis iMX6 */ |
||||
int pf0100_prog(void); |
||||
|
||||
#endif /* PF0100_H_ */ |
@ -0,0 +1,191 @@ |
||||
/* |
||||
* Copyright (C) 2014-2016, Toradex AG |
||||
* |
||||
* SPDX-License-Identifier: GPL-2.0+ |
||||
*/ |
||||
|
||||
// Register Output for PF0100 programmer |
||||
// Customer: Toradex AG |
||||
// Program: Apalis iMX6 |
||||
// Sample marking: |
||||
// Date: 12.02.2014 |
||||
// Time: 17:16:41 |
||||
// Generated from Spreadsheet Revision: P1.8 |
||||
|
||||
/* sed commands to get from programmer script to struct */ |
||||
/* sed -e 's/^WRITE_I2C:\(..\):\(..\)/\{pmic_i2c, 0x\1, 0x\2\},/g' -e 's/^DELAY:\([0-9]*\)/\{pmic_delay, 0, \1\},/g' pf0100_otp.txt > pf0100_otp.inc |
||||
sed -i -e 's/^VPGM:ON/\{pmic_vpgm, 0, 1},/g' -e 's/^VPGM:OFF/\{pmic_vpgm, 0, 0},/g' pf0100_otp.inc |
||||
sed -i -e 's/^PWRON: HIGH/\{pmic_pwr, 0, 1},/g' -e 's/^PWRON:LOW/\{pmic_pwr, 0, 0},/g' pf0100_otp.inc */ |
||||
|
||||
enum { pmic_i2c, pmic_delay, pmic_vpgm, pmic_pwr }; |
||||
struct pmic_otp_prog_t{ |
||||
unsigned char cmd; |
||||
unsigned char reg; |
||||
unsigned short value; |
||||
}; |
||||
|
||||
struct pmic_otp_prog_t pmic_otp_prog[] = { |
||||
{pmic_i2c, 0x7F, 0x01}, // Access FSL EXT Page 1 |
||||
{pmic_i2c, 0xA0, 0x2B}, // Auto gen from Row94 |
||||
{pmic_i2c, 0xA1, 0x01}, // Auto gen from Row95 |
||||
{pmic_i2c, 0xA2, 0x05}, // Auto gen from Row96 |
||||
{pmic_i2c, 0xA8, 0x2B}, // Auto gen from Row102 |
||||
{pmic_i2c, 0xA9, 0x02}, // Auto gen from Row103 |
||||
{pmic_i2c, 0xAA, 0x01}, // Auto gen from Row104 |
||||
{pmic_i2c, 0xAC, 0x18}, // Auto gen from Row106 |
||||
{pmic_i2c, 0xAE, 0x01}, // Auto gen from Row108 |
||||
{pmic_i2c, 0xB0, 0x2C}, // Auto gen from Row110 |
||||
{pmic_i2c, 0xB1, 0x04}, // Auto gen from Row111 |
||||
{pmic_i2c, 0xB2, 0x01}, // Auto gen from Row112 |
||||
{pmic_i2c, 0xB4, 0x2C}, // Auto gen from Row114 |
||||
{pmic_i2c, 0xB5, 0x04}, // Auto gen from Row115 |
||||
{pmic_i2c, 0xB6, 0x01}, // Auto gen from Row116 |
||||
{pmic_i2c, 0xB8, 0x18}, // Auto gen from Row118 |
||||
{pmic_i2c, 0xBA, 0x01}, // Auto gen from Row120 |
||||
{pmic_i2c, 0xBD, 0x1F}, // Auto gen from Row123 |
||||
{pmic_i2c, 0xC0, 0x06}, // Auto gen from Row126 |
||||
{pmic_i2c, 0xC4, 0x04}, // Auto gen from Row130 |
||||
{pmic_i2c, 0xC8, 0x0E}, // Auto gen from Row134 |
||||
{pmic_i2c, 0xC9, 0x08}, // Auto gen from Row135 |
||||
{pmic_i2c, 0xCC, 0x0E}, // Auto gen from Row138 |
||||
{pmic_i2c, 0xCD, 0x05}, // Auto gen from Row139 |
||||
{pmic_i2c, 0xD0, 0x0C}, // Auto gen from Row142 |
||||
{pmic_i2c, 0xD1, 0x05}, // Auto gen from Row143 |
||||
{pmic_i2c, 0xD5, 0x07}, // Auto gen from Row147 |
||||
{pmic_i2c, 0xD8, 0x07}, // Auto gen from Row150 |
||||
{pmic_i2c, 0xD9, 0x06}, // Auto gen from Row151 |
||||
{pmic_i2c, 0xDC, 0x0A}, // Auto gen from Row154 |
||||
{pmic_i2c, 0xDD, 0x03}, // Auto gen from Row155 |
||||
{pmic_i2c, 0xE0, 0x07}, // Auto gen from Row158 |
||||
|
||||
#if 0 /* TBB mode */ |
||||
{pmic_i2c, 0xE4, 0x80}, // TBB_POR = 1 |
||||
{pmic_delay, 0, 10}, |
||||
#else |
||||
// Write OTP |
||||
{pmic_i2c, 0xE4, 0x02}, // FUSE POR1=1 |
||||
{pmic_i2c, 0xE5, 0x02}, // FUSE POR2=1 |
||||
{pmic_i2c, 0xE6, 0x02}, // FUSE POR3=1 |
||||
{pmic_i2c, 0xF0, 0x1F}, // Enable ECC for fuse banks 1 to 5 by writing to OTP EN ECC0 register |
||||
{pmic_i2c, 0xF1, 0x1F}, // Enable ECC for fuse banks 6 to 10 by writing to OTP EN ECC1 register |
||||
{pmic_i2c, 0x7F, 0x02}, // Access PF0100 EXT Page2 |
||||
{pmic_i2c, 0xD0, 0x1F}, // Set Auto ECC for fuse banks 1 to 5 by writing to OTP AUTO ECC0 register |
||||
{pmic_i2c, 0xD1, 0x1F}, // Set Auto ECC for fuse banks 6 to 10 by writing to OTP AUTO ECC1 register |
||||
//----------------------------------------------------------------------------------- |
||||
{pmic_i2c, 0xF1, 0x00}, // Reset Bank 1 ANTIFUSE_RW and ANTIFUSE_BYPASS bits |
||||
{pmic_i2c, 0xF2, 0x00}, // Reset Bank 2 ANTIFUSE_RW and ANTIFUSE_BYPASS bits |
||||
{pmic_i2c, 0xF3, 0x00}, // Reset Bank 3 ANTIFUSE_RW and ANTIFUSE_BYPASS bits |
||||
{pmic_i2c, 0xF4, 0x00}, // Reset Bank 4 ANTIFUSE_RW and ANTIFUSE_BYPASS bits |
||||
{pmic_i2c, 0xF5, 0x00}, // Reset Bank 5 ANTIFUSE_RW and ANTIFUSE_BYPASS bits |
||||
{pmic_i2c, 0xF6, 0x00}, // Reset Bank 6 ANTIFUSE_RW and ANTIFUSE_BYPASS bits |
||||
{pmic_i2c, 0xF7, 0x00}, // Reset Bank 7 ANTIFUSE_RW and ANTIFUSE_BYPASS bits |
||||
{pmic_i2c, 0xF8, 0x00}, // Reset Bank 8 ANTIFUSE_RW and ANTIFUSE_BYPASS bits |
||||
{pmic_i2c, 0xF9, 0x00}, // Reset Bank 9 ANTIFUSE_RW and ANTIFUSE_BYPASS bits |
||||
{pmic_i2c, 0xFA, 0x00}, // Reset Bank 10 ANTIFUSE_RW and ANTIFUSE_BYPASS bits |
||||
//----------------------------------------------------------------------------------- |
||||
{pmic_vpgm, 0, 1}, // Turn ON 8V SWBST |
||||
//VPGM:DOWN:n |
||||
//VPGM:UP:n |
||||
{pmic_delay, 0, 500}, // Adds 500msec delay to allow VPGM time to ramp up |
||||
//----------------------------------------------------------------------------------- |
||||
// PF0100 OTP MANUAL-PROGRAMMING (BANK 1 thru 10) |
||||
//----------------------------------------------------------------------------------- |
||||
// BANK 1 |
||||
//----------------------------------------------------------------------------------- |
||||
{pmic_i2c, 0xF1, 0x00}, // Reset Bank 1 ANTIFUSE_RW and ANTIFUSE_BYPASS bits |
||||
{pmic_i2c, 0xF1, 0x03}, // Set Bank 1 ANTIFUSE_RW and ANTIFUSE_BYPASS bits |
||||
{pmic_i2c, 0xF1, 0x0B}, // Set Bank 1 ANTIFUSE_EN |
||||
{pmic_delay, 0, 10}, // Allow time for bank programming to complete |
||||
{pmic_i2c, 0xF1, 0x03}, // Reset Bank 1 ANTIFUSE_EN |
||||
{pmic_i2c, 0xF1, 0x00}, // Reset Bank 1 ANTIFUSE_RW and ANTIFUSE_BYPASS bits |
||||
//----------------------------------------------------------------------------------- |
||||
// BANK 2 |
||||
//----------------------------------------------------------------------------------- |
||||
{pmic_i2c, 0xF2, 0x00}, // Reset Bank 2 ANTIFUSE_RW and ANTIFUSE_BYPASS bits |
||||
{pmic_i2c, 0xF2, 0x03}, // Set Bank 2 ANTIFUSE_RW and ANTIFUSE_BYPASS bits |
||||
{pmic_i2c, 0xF2, 0x0B}, // Set Bank 2 ANTIFUSE_EN |
||||
{pmic_delay, 0, 10}, // Allow time for bank programming to complete |
||||
{pmic_i2c, 0xF2, 0x03}, // Reset Bank 2 ANTIFUSE_EN |
||||
{pmic_i2c, 0xF2, 0x00}, // Reset Bank 2 ANTIFUSE_RW and ANTIFUSE_BYPASS bits |
||||
//----------------------------------------------------------------------------------- |
||||
// BANK 3 |
||||
//----------------------------------------------------------------------------------- |
||||
{pmic_i2c, 0xF3, 0x00}, // Reset Bank 3 ANTIFUSE_RW and ANTIFUSE_BYPASS bits |
||||
{pmic_i2c, 0xF3, 0x03}, // Set Bank 3 ANTIFUSE_RW and ANTIFUSE_BYPASS bits |
||||
{pmic_i2c, 0xF3, 0x0B}, // Set Bank 3 ANTIFUSE_EN |
||||
{pmic_delay, 0, 10}, // Allow time for bank programming to complete |
||||
{pmic_i2c, 0xF3, 0x03}, // Reset Bank 3 ANTIFUSE_EN |
||||
{pmic_i2c, 0xF3, 0x00}, // Reset Bank 3 ANTIFUSE_RW and ANTIFUSE_BYPASS bits |
||||
//----------------------------------------------------------------------------------- |
||||
// BANK 4 |
||||
//----------------------------------------------------------------------------------- |
||||
{pmic_i2c, 0xF4, 0x00}, // Reset Bank 4 ANTIFUSE_RW and ANTIFUSE_BYPASS bits |
||||
{pmic_i2c, 0xF4, 0x03}, // Set Bank 4 ANTIFUSE_RW and ANTIFUSE_BYPASS bits |
||||
{pmic_i2c, 0xF4, 0x0B}, // Set Bank 4 ANTIFUSE_EN |
||||
{pmic_delay, 0, 10}, // Allow time for bank programming to complete |
||||
{pmic_i2c, 0xF4, 0x03}, // Reset Bank 4 ANTIFUSE_EN |
||||
{pmic_i2c, 0xF4, 0x00}, // Reset Bank 4 ANTIFUSE_RW and ANTIFUSE_BYPASS bits |
||||
//----------------------------------------------------------------------------------- |
||||
// BANK 5 |
||||
//----------------------------------------------------------------------------------- |
||||
{pmic_i2c, 0xF5, 0x00}, // Reset Bank 5 ANTIFUSE_RW and ANTIFUSE_BYPASS bits |
||||
{pmic_i2c, 0xF5, 0x03}, // Set Bank 5 ANTIFUSE_RW and ANTIFUSE_BYPASS bits |
||||
{pmic_i2c, 0xF5, 0x0B}, // Set Bank 5 ANTIFUSE_EN |
||||
{pmic_delay, 0, 10}, // Allow time for bank programming to complete |
||||
{pmic_i2c, 0xF5, 0x03}, // Reset Bank 5 ANTIFUSE_EN |
||||
{pmic_i2c, 0xF5, 0x00}, // Reset Bank 5 ANTIFUSE_RW and ANTIFUSE_BYPASS bits |
||||
//----------------------------------------------------------------------------------- |
||||
// BANK 6 |
||||
//----------------------------------------------------------------------------------- |
||||
{pmic_i2c, 0xF6, 0x00}, // Reset Bank 6 ANTIFUSE_RW and ANTIFUSE_BYPASS bits |
||||
{pmic_i2c, 0xF6, 0x03}, // Set Bank 6 ANTIFUSE_RW and ANTIFUSE_BYPASS bits |
||||
{pmic_i2c, 0xF6, 0x0B}, // Set Bank 6 ANTIFUSE_EN |
||||
{pmic_delay, 0, 10}, // Allow time for bank programming to complete |
||||
{pmic_i2c, 0xF6, 0x03}, // Reset Bank 6 ANTIFUSE_EN |
||||
{pmic_i2c, 0xF6, 0x00}, // Reset Bank 6 ANTIFUSE_RW and ANTIFUSE_BYPASS bits |
||||
//----------------------------------------------------------------------------------- |
||||
// BANK 7 |
||||
//----------------------------------------------------------------------------------- |
||||
{pmic_i2c, 0xF7, 0x00}, // Reset Bank 7 ANTIFUSE_RW and ANTIFUSE_BYPASS bits |
||||
{pmic_i2c, 0xF7, 0x03}, // Set Bank 7 ANTIFUSE_RW and ANTIFUSE_BYPASS bits |
||||
{pmic_i2c, 0xF7, 0x0B}, // Set Bank 7 ANTIFUSE_EN |
||||
{pmic_delay, 0, 10}, // Allow time for bank programming to complete |
||||
{pmic_i2c, 0xF7, 0x03}, // Reset Bank 7 ANTIFUSE_EN |
||||
{pmic_i2c, 0xF7, 0x00}, // Reset Bank 7 ANTIFUSE_RW and ANTIFUSE_BYPASS bits |
||||
//----------------------------------------------------------------------------------- |
||||
// BANK 8 |
||||
//----------------------------------------------------------------------------------- |
||||
{pmic_i2c, 0xF8, 0x00}, // Reset Bank 8 ANTIFUSE_RW and ANTIFUSE_BYPASS bits |
||||
{pmic_i2c, 0xF8, 0x03}, // Set Bank 8 ANTIFUSE_RW and ANTIFUSE_BYPASS bits |
||||
{pmic_i2c, 0xF8, 0x0B}, // Set Bank 8 ANTIFUSE_EN |
||||
{pmic_delay, 0, 10}, // Allow time for bank programming to complete |
||||
{pmic_i2c, 0xF8, 0x03}, // Reset Bank 8 ANTIFUSE_EN |
||||
{pmic_i2c, 0xF8, 0x00}, // Reset Bank 8 ANTIFUSE_RW and ANTIFUSE_BYPASS bits |
||||
//----------------------------------------------------------------------------------- |
||||
// BANK 9 |
||||
//----------------------------------------------------------------------------------- |
||||
{pmic_i2c, 0xF9, 0x00}, // Reset Bank 9 ANTIFUSE_RW and ANTIFUSE_BYPASS bits |
||||
{pmic_i2c, 0xF9, 0x03}, // Set Bank 9 ANTIFUSE_RW and ANTIFUSE_BYPASS bits |
||||
{pmic_i2c, 0xF9, 0x0B}, // Set Bank 9 ANTIFUSE_EN |
||||
{pmic_delay, 0, 10}, // Allow time for bank programming to complete |
||||
{pmic_i2c, 0xF9, 0x03}, // Reset Bank 9 ANTIFUSE_EN |
||||
{pmic_i2c, 0xF9, 0x00}, // Reset Bank 9 ANTIFUSE_RW and ANTIFUSE_BYPASS bits |
||||
//----------------------------------------------------------------------------------- |
||||
// BANK 10 |
||||
//----------------------------------------------------------------------------------- |
||||
{pmic_i2c, 0xFA, 0x00}, // Reset Bank 10 ANTIFUSE_RW and ANTIFUSE_BYPASS bits |
||||
{pmic_i2c, 0xFA, 0x03}, // Set Bank 10 ANTIFUSE_RW and ANTIFUSE_BYPASS bits |
||||
{pmic_i2c, 0xFA, 0x0B}, // Set Bank 10 ANTIFUSE_EN |
||||
{pmic_delay, 0, 10}, // Allow time for bank programming to complete |
||||
{pmic_i2c, 0xFA, 0x03}, // Reset Bank 10 ANTIFUSE_EN |
||||
{pmic_i2c, 0xFA, 0x00}, // Reset Bank 10 ANTIFUSE_RW and ANTIFUSE_BYPASS bits |
||||
//----------------------------------------------------------------------------------- |
||||
{pmic_vpgm, 0, 0}, // Turn off 8V SWBST |
||||
{pmic_delay, 0, 500}, // Adds delay to allow VPGM to bleed off |
||||
{pmic_i2c, 0xD0, 0x00}, // Clear |
||||
{pmic_i2c, 0xD1, 0x00}, // Clear |
||||
{pmic_pwr, 0, 0}, // PWRON LOW to reload new OTP data |
||||
{pmic_delay, 0, 500}, |
||||
{pmic_pwr, 0, 1}, |
||||
#endif |
||||
}; |
@ -0,0 +1,59 @@ |
||||
/* |
||||
* Copyright (C) 2013 Boundary Devices |
||||
* Copyright (C) 2014-2016, Toradex AG |
||||
* |
||||
* SPDX-License-Identifier: GPL-2.0+ |
||||
*/ |
||||
|
||||
DATA 4, MX6_MMDC_P0_MDPDC, 0x0002002D |
||||
DATA 4, MX6_MMDC_P0_MDCFG0, 0x2C305503 |
||||
DATA 4, MX6_MMDC_P0_MDCFG1, 0xB66D8D63 |
||||
DATA 4, MX6_MMDC_P0_MDCFG2, 0x01FF00DB |
||||
DATA 4, MX6_MMDC_P0_MDRWD, 0x000026D2 |
||||
DATA 4, MX6_MMDC_P0_MDOR, 0x00301023 |
||||
DATA 4, MX6_MMDC_P0_MDOTC, 0x00333030 |
||||
DATA 4, MX6_MMDC_P0_MDPDC, 0x0002556D |
||||
/* CS0 End: 7MSB of ((0x10000000 + 512M) -1) >> 25 */ |
||||
DATA 4, MX6_MMDC_P0_MDASP, 0x00000017 |
||||
/* DDR3 DATA BUS SIZE: 64BIT */ |
||||
/* DATA 4, MX6_MMDC_P0_MDCTL, 0x821A0000 */ |
||||
/* DDR3 DATA BUS SIZE: 32BIT */ |
||||
DATA 4, MX6_MMDC_P0_MDCTL, 0x82190000 |
||||
|
||||
/* Write commands to DDR */ |
||||
/* Load Mode Registers */ |
||||
/* TODO Use Auto Self-Refresh mode (Extended Temperature)*/ |
||||
/* DATA 4, MX6_MMDC_P0_MDSCR, 0x04408032 */ |
||||
DATA 4, MX6_MMDC_P0_MDSCR, 0x04008032 |
||||
DATA 4, MX6_MMDC_P0_MDSCR, 0x00008033 |
||||
DATA 4, MX6_MMDC_P0_MDSCR, 0x00048031 |
||||
DATA 4, MX6_MMDC_P0_MDSCR, 0x13208030 |
||||
/* ZQ calibration */ |
||||
DATA 4, MX6_MMDC_P0_MDSCR, 0x04008040 |
||||
|
||||
DATA 4, MX6_MMDC_P0_MPZQHWCTRL, 0xA1390003 |
||||
DATA 4, MX6_MMDC_P1_MPZQHWCTRL, 0xA1390003 |
||||
DATA 4, MX6_MMDC_P0_MDREF, 0x00005800 |
||||
|
||||
DATA 4, MX6_MMDC_P0_MPODTCTRL, 0x00000000 |
||||
DATA 4, MX6_MMDC_P1_MPODTCTRL, 0x00000000 |
||||
|
||||
DATA 4, MX6_MMDC_P0_MPDGCTRL0, 0x42360232 |
||||
DATA 4, MX6_MMDC_P0_MPDGCTRL1, 0x021F022A |
||||
DATA 4, MX6_MMDC_P1_MPDGCTRL0, 0x421E0224 |
||||
DATA 4, MX6_MMDC_P1_MPDGCTRL1, 0x02110218 |
||||
|
||||
DATA 4, MX6_MMDC_P0_MPRDDLCTL, 0x41434344 |
||||
DATA 4, MX6_MMDC_P1_MPRDDLCTL, 0x4345423E |
||||
DATA 4, MX6_MMDC_P0_MPWRDLCTL, 0x39383339 |
||||
DATA 4, MX6_MMDC_P1_MPWRDLCTL, 0x3E363930 |
||||
|
||||
DATA 4, MX6_MMDC_P0_MPWLDECTRL0, 0x00340039 |
||||
DATA 4, MX6_MMDC_P0_MPWLDECTRL1, 0x002C002D |
||||
DATA 4, MX6_MMDC_P1_MPWLDECTRL0, 0x00120019 |
||||
DATA 4, MX6_MMDC_P1_MPWLDECTRL1, 0x0012002D |
||||
|
||||
DATA 4, MX6_MMDC_P0_MPMUR0, 0x00000800 |
||||
DATA 4, MX6_MMDC_P1_MPMUR0, 0x00000800 |
||||
DATA 4, MX6_MMDC_P0_MDSCR, 0x00000000 |
||||
DATA 4, MX6_MMDC_P0_MAPSR, 0x00011006 |
@ -0,0 +1,59 @@ |
||||
/* |
||||
* Copyright (C) 2013 Boundary Devices |
||||
* Copyright (C) 2014-2016, Toradex AG |
||||
* |
||||
* SPDX-License-Identifier: GPL-2.0+ |
||||
*/ |
||||
|
||||
DATA 4, MX6_MMDC_P0_MDPDC, 0x0002002D |
||||
DATA 4, MX6_MMDC_P0_MDCFG0, 0x2C305503 |
||||
DATA 4, MX6_MMDC_P0_MDCFG1, 0xB66D8D63 |
||||
DATA 4, MX6_MMDC_P0_MDCFG2, 0x01FF00DB |
||||
DATA 4, MX6_MMDC_P0_MDRWD, 0x000026D2 |
||||
DATA 4, MX6_MMDC_P0_MDOR, 0x00301023 |
||||
DATA 4, MX6_MMDC_P0_MDOTC, 0x00333030 |
||||
DATA 4, MX6_MMDC_P0_MDPDC, 0x0002556D |
||||
/* CS0 End: 7MSB of ((0x10000000 + 512M) -1) >> 25 */ |
||||
DATA 4, MX6_MMDC_P0_MDASP, 0x00000017 |
||||
/* DDR3 DATA BUS SIZE: 64BIT */ |
||||
DATA 4, MX6_MMDC_P0_MDCTL, 0x821A0000 |
||||
/* DDR3 DATA BUS SIZE: 32BIT */ |
||||
/* DATA 4, MX6_MMDC_P0_MDCTL, 0x82190000 */ |
||||
|
||||
/* Write commands to DDR */ |
||||
/* Load Mode Registers */ |
||||
/* TODO Use Auto Self-Refresh mode (Extended Temperature)*/ |
||||
/* DATA 4, MX6_MMDC_P0_MDSCR, 0x04408032 */ |
||||
DATA 4, MX6_MMDC_P0_MDSCR, 0x04008032 |
||||
DATA 4, MX6_MMDC_P0_MDSCR, 0x00008033 |
||||
DATA 4, MX6_MMDC_P0_MDSCR, 0x00048031 |
||||
DATA 4, MX6_MMDC_P0_MDSCR, 0x13208030 |
||||
/* ZQ calibration */ |
||||
DATA 4, MX6_MMDC_P0_MDSCR, 0x04008040 |
||||
|
||||
DATA 4, MX6_MMDC_P0_MPZQHWCTRL, 0xA1390003 |
||||
DATA 4, MX6_MMDC_P1_MPZQHWCTRL, 0xA1390003 |
||||
DATA 4, MX6_MMDC_P0_MDREF, 0x00005800 |
||||
|
||||
DATA 4, MX6_MMDC_P0_MPODTCTRL, 0x00000000 |
||||
DATA 4, MX6_MMDC_P1_MPODTCTRL, 0x00000000 |
||||
|
||||
DATA 4, MX6_MMDC_P0_MPDGCTRL0, 0x42360232 |
||||
DATA 4, MX6_MMDC_P0_MPDGCTRL1, 0x021F022A |
||||
DATA 4, MX6_MMDC_P1_MPDGCTRL0, 0x421E0224 |
||||
DATA 4, MX6_MMDC_P1_MPDGCTRL1, 0x02110218 |
||||
|
||||
DATA 4, MX6_MMDC_P0_MPRDDLCTL, 0x41434344 |
||||
DATA 4, MX6_MMDC_P1_MPRDDLCTL, 0x4345423E |
||||
DATA 4, MX6_MMDC_P0_MPWRDLCTL, 0x39383339 |
||||
DATA 4, MX6_MMDC_P1_MPWRDLCTL, 0x3E363930 |
||||
|
||||
DATA 4, MX6_MMDC_P0_MPWLDECTRL0, 0x00340039 |
||||
DATA 4, MX6_MMDC_P0_MPWLDECTRL1, 0x002C002D |
||||
DATA 4, MX6_MMDC_P1_MPWLDECTRL0, 0x00120019 |
||||
DATA 4, MX6_MMDC_P1_MPWLDECTRL1, 0x0012002D |
||||
|
||||
DATA 4, MX6_MMDC_P0_MPMUR0, 0x00000800 |
||||
DATA 4, MX6_MMDC_P1_MPMUR0, 0x00000800 |
||||
DATA 4, MX6_MMDC_P0_MDSCR, 0x00000000 |
||||
DATA 4, MX6_MMDC_P0_MAPSR, 0x00011006 |
@ -0,0 +1,44 @@ |
||||
if TARGET_COLIBRI_IMX6 |
||||
|
||||
config SYS_BOARD |
||||
default "colibri_imx6" |
||||
|
||||
config SYS_CONFIG_NAME |
||||
default "colibri_imx6" |
||||
|
||||
config SYS_CPU |
||||
default "armv7" |
||||
|
||||
config SYS_SOC |
||||
default "mx6" |
||||
|
||||
config SYS_VENDOR |
||||
default "toradex" |
||||
|
||||
config TDX_CFG_BLOCK |
||||
default y |
||||
|
||||
config TDX_HAVE_MMC |
||||
default y |
||||
|
||||
config TDX_CFG_BLOCK_DEV |
||||
default "0" |
||||
|
||||
config TDX_CFG_BLOCK_PART |
||||
default "1" |
||||
|
||||
# Toradex config block in eMMC, at the end of 1st "boot sector" |
||||
config TDX_CFG_BLOCK_OFFSET |
||||
default "-512" |
||||
|
||||
config TDX_CMD_IMX_MFGR |
||||
bool "Enable factory testing commands for Toradex iMX 6 modules" |
||||
help |
||||
This adds the commands |
||||
pf0100_otp_prog - Program the OTP fuses on the PMIC PF0100 |
||||
If executed on already fused modules it doesn't change any fuse setting. |
||||
default y |
||||
|
||||
source "board/toradex/common/Kconfig" |
||||
|
||||
endif |
@ -0,0 +1,8 @@ |
||||
Colibri iMX6 |
||||
M: Max Krummenacher <max.krummenacher@toradex.com> |
||||
W: http://developer.toradex.com/software/linux/linux-software |
||||
S: Maintained |
||||
F: board/toradex/colibri_imx6/ |
||||
F: include/configs/colibri_imx6.h |
||||
F: configs/colibri_imx6_defconfig |
||||
F: configs/colibri_imx6_nospl_defconfig |
@ -0,0 +1,5 @@ |
||||
# Copyright (c) 2012-2014 Toradex, Inc.
|
||||
# SPDX-License-Identifier: GPL-2.0+
|
||||
|
||||
obj-y := colibri_imx6.o do_fuse.o
|
||||
obj-$(CONFIG_TDX_CMD_IMX_MFGR) += pf0100.o
|
@ -0,0 +1,42 @@ |
||||
/* |
||||
* Copyright (C) 2013 Boundary Devices |
||||
* Copyright (C) 2014-2016, Toradex AG |
||||
* |
||||
* SPDX-License-Identifier: GPL-2.0+ |
||||
* |
||||
* Device Configuration Data (DCD) |
||||
* |
||||
* Each entry must have the format: |
||||
* Addr-type Address Value |
||||
* |
||||
* where: |
||||
* Addr-type register length (1,2 or 4 bytes) |
||||
* Address absolute address of the register |
||||
* value value to be stored in the register |
||||
*/ |
||||
|
||||
/* set the default clock gate to save power */ |
||||
DATA 4, CCM_CCGR0, 0x00C03F3F |
||||
DATA 4, CCM_CCGR1, 0x0030FC03 |
||||
DATA 4, CCM_CCGR2, 0x0FFFC000 |
||||
DATA 4, CCM_CCGR3, 0x3FF00000 |
||||
DATA 4, CCM_CCGR4, 0x00FFF300 |
||||
DATA 4, CCM_CCGR5, 0x0F0000C3 |
||||
DATA 4, CCM_CCGR6, 0x000003FF |
||||
|
||||
/* enable AXI cache for VDOA/VPU/IPU */ |
||||
DATA 4, MX6_IOMUXC_GPR4, 0xF00000CF |
||||
/* set IPU AXI-id0 Qos=0xf(bypass) AXI-id1 Qos=0x7 */ |
||||
DATA 4, MX6_IOMUXC_GPR6, 0x007F007F |
||||
DATA 4, MX6_IOMUXC_GPR7, 0x007F007F |
||||
|
||||
/* |
||||
* Setup CCM_CCOSR register as follows: |
||||
* |
||||
* cko1_en = 1 --> CKO1 enabled |
||||
* cko1_div = 111 --> divide by 8 |
||||
* cko1_sel = 1011 --> ahb_clk_root |
||||
* |
||||
* This sets CKO1 at ahb_clk_root/8 = 132/8 = 16.5 MHz |
||||
*/ |
||||
DATA 4, CCM_CCOSR, 0x000000fb |
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,38 @@ |
||||
/* |
||||
* Copyright (C) 2013 Boundary Devices |
||||
* Copyright (C) 2014 Toradex AG |
||||
* |
||||
* SPDX-License-Identifier: GPL-2.0+ |
||||
* |
||||
* Refer doc/README.imximage for more details about how-to configure |
||||
* and create imximage boot image |
||||
* |
||||
* The syntax is taken as close as possible with the kwbimage |
||||
*/ |
||||
|
||||
/* image version */ |
||||
IMAGE_VERSION 2 |
||||
|
||||
/* |
||||
* Boot Device : one of |
||||
* spi, sd (the board has no nand neither onenand) |
||||
*/ |
||||
BOOT_FROM sd |
||||
|
||||
#define __ASSEMBLY__ |
||||
#include <config.h> |
||||
#include "asm/arch/mx6-ddr.h" |
||||
#include "asm/arch/iomux.h" |
||||
#include "asm/arch/crm_regs.h" |
||||
|
||||
#include "ddr-setup.cfg" |
||||
|
||||
#if CONFIG_DDR_MB == 256 |
||||
#include "800mhz_2x64mx16.cfg" |
||||
#elif CONFIG_DDR_MB == 512 |
||||
#include "800mhz_4x64mx16.cfg" |
||||
#else |
||||
#error "unknown DDR size" |
||||
#endif |
||||
|
||||
#include "clocks.cfg" |
@ -0,0 +1,98 @@ |
||||
/* |
||||
* Copyright (C) 2013 Boundary Devices |
||||
* Copyright (C) 2014-2016, Toradex AG |
||||
* |
||||
* SPDX-License-Identifier: GPL-2.0+ |
||||
* |
||||
* Device Configuration Data (DCD) |
||||
* |
||||
* Each entry must have the format: |
||||
* Addr-type Address Value |
||||
* |
||||
* where: |
||||
* Addr-type register length (1,2 or 4 bytes) |
||||
* Address absolute address of the register |
||||
* value value to be stored in the register |
||||
*/ |
||||
|
||||
/* |
||||
* DDR3 settings |
||||
* MX6Q ddr is limited to 1066 Mhz currently 1056 MHz(528 MHz clock), |
||||
* memory bus width: 64 bits x16/x32/x64 |
||||
* MX6DL ddr is limited to 800 MHz(400 MHz clock) |
||||
* memory bus width: 64 bits x16/x32/x64 |
||||
* MX6SOLO ddr is limited to 800 MHz(400 MHz clock) |
||||
* memory bus width: 32 bits x16/x32 |
||||
*/ |
||||
DATA 4, MX6_IOM_DRAM_SDQS0, 0x00000030 |
||||
DATA 4, MX6_IOM_DRAM_SDQS1, 0x00000030 |
||||
DATA 4, MX6_IOM_DRAM_SDQS2, 0x00000030 |
||||
DATA 4, MX6_IOM_DRAM_SDQS3, 0x00000030 |
||||
DATA 4, MX6_IOM_DRAM_SDQS4, 0x00000030 |
||||
DATA 4, MX6_IOM_DRAM_SDQS5, 0x00000030 |
||||
DATA 4, MX6_IOM_DRAM_SDQS6, 0x00000030 |
||||
DATA 4, MX6_IOM_DRAM_SDQS7, 0x00000030 |
||||
|
||||
DATA 4, MX6_IOM_GRP_B0DS, 0x00000030 |
||||
DATA 4, MX6_IOM_GRP_B1DS, 0x00000030 |
||||
DATA 4, MX6_IOM_GRP_B2DS, 0x00000030 |
||||
DATA 4, MX6_IOM_GRP_B3DS, 0x00000030 |
||||
DATA 4, MX6_IOM_GRP_B4DS, 0x00000030 |
||||
DATA 4, MX6_IOM_GRP_B5DS, 0x00000030 |
||||
DATA 4, MX6_IOM_GRP_B6DS, 0x00000030 |
||||
DATA 4, MX6_IOM_GRP_B7DS, 0x00000030 |
||||
DATA 4, MX6_IOM_GRP_ADDDS, 0x00000030 |
||||
/* 40 Ohm drive strength for cs0/1,sdba2,cke0/1,sdwe */ |
||||
DATA 4, MX6_IOM_GRP_CTLDS, 0x00000030 |
||||
|
||||
DATA 4, MX6_IOM_DRAM_DQM0, 0x00020030 |
||||
DATA 4, MX6_IOM_DRAM_DQM1, 0x00020030 |
||||
DATA 4, MX6_IOM_DRAM_DQM2, 0x00020030 |
||||
DATA 4, MX6_IOM_DRAM_DQM3, 0x00020030 |
||||
DATA 4, MX6_IOM_DRAM_DQM4, 0x00020030 |
||||
DATA 4, MX6_IOM_DRAM_DQM5, 0x00020030 |
||||
DATA 4, MX6_IOM_DRAM_DQM6, 0x00020030 |
||||
DATA 4, MX6_IOM_DRAM_DQM7, 0x00020030 |
||||
|
||||
DATA 4, MX6_IOM_DRAM_CAS, 0x00020030 |
||||
DATA 4, MX6_IOM_DRAM_RAS, 0x00020030 |
||||
DATA 4, MX6_IOM_DRAM_SDCLK_0, 0x00020030 |
||||
DATA 4, MX6_IOM_DRAM_SDCLK_1, 0x00020030 |
||||
|
||||
DATA 4, MX6_IOM_DRAM_RESET, 0x00020030 |
||||
DATA 4, MX6_IOM_DRAM_SDCKE0, 0x00003000 |
||||
DATA 4, MX6_IOM_DRAM_SDCKE1, 0x00003000 |
||||
|
||||
DATA 4, MX6_IOM_DRAM_SDODT0, 0x00003030 |
||||
DATA 4, MX6_IOM_DRAM_SDODT1, 0x00003030 |
||||
|
||||
/* (differential input) */ |
||||
DATA 4, MX6_IOM_DDRMODE_CTL, 0x00020000 |
||||
/* (differential input) */ |
||||
DATA 4, MX6_IOM_GRP_DDRMODE, 0x00020000 |
||||
/* disable ddr pullups */ |
||||
DATA 4, MX6_IOM_GRP_DDRPKE, 0x00000000 |
||||
DATA 4, MX6_IOM_DRAM_SDBA2, 0x00000000 |
||||
/* 40 Ohm drive strength for cs0/1,sdba2,cke0/1,sdwe */ |
||||
DATA 4, MX6_IOM_GRP_DDR_TYPE, 0x000C0000 |
||||
|
||||
/* Read data DQ Byte0-3 delay */ |
||||
DATA 4, MX6_MMDC_P0_MPRDDQBY0DL, 0x33333333 |
||||
DATA 4, MX6_MMDC_P0_MPRDDQBY1DL, 0x33333333 |
||||
DATA 4, MX6_MMDC_P0_MPRDDQBY2DL, 0x33333333 |
||||
DATA 4, MX6_MMDC_P0_MPRDDQBY3DL, 0x33333333 |
||||
DATA 4, MX6_MMDC_P1_MPRDDQBY0DL, 0x33333333 |
||||
DATA 4, MX6_MMDC_P1_MPRDDQBY1DL, 0x33333333 |
||||
DATA 4, MX6_MMDC_P1_MPRDDQBY2DL, 0x33333333 |
||||
DATA 4, MX6_MMDC_P1_MPRDDQBY3DL, 0x33333333 |
||||
|
||||
/* |
||||
* MDMISC mirroring interleaved (row/bank/col) |
||||
*/ |
||||
/* TODO: check what the RALAT field does */ |
||||
DATA 4, MX6_MMDC_P0_MDMISC, 0x00081740 |
||||
|
||||
/* |
||||
* MDSCR con_req |
||||
*/ |
||||
DATA 4, MX6_MMDC_P0_MDSCR, 0x00008000 |
@ -0,0 +1,98 @@ |
||||
/*
|
||||
* Copyright (C) 2014-2016, Toradex AG |
||||
* |
||||
* SPDX-License-Identifier: GPL-2.0+ |
||||
*/ |
||||
|
||||
/*
|
||||
* Helpers for i.MX OTP fusing during module production |
||||
*/ |
||||
|
||||
#include <common.h> |
||||
#ifndef CONFIG_SPL_BUILD |
||||
#include <console.h> |
||||
#include <fuse.h> |
||||
|
||||
static int mfgr_fuse(void) |
||||
{ |
||||
unsigned val, val6; |
||||
|
||||
fuse_sense(0, 5, &val); |
||||
printf("Fuse 0, 5: %8x\n", val); |
||||
fuse_sense(0, 6, &val6); |
||||
printf("Fuse 0, 6: %8x\n", val6); |
||||
fuse_sense(4, 3, &val); |
||||
printf("Fuse 4, 3: %8x\n", val); |
||||
fuse_sense(4, 2, &val); |
||||
printf("Fuse 4, 2: %8x\n", val); |
||||
if (val6 & 0x10) { |
||||
puts("BT_FUSE_SEL already fused, will do nothing\n"); |
||||
return CMD_RET_FAILURE; |
||||
} |
||||
/* boot cfg */ |
||||
fuse_prog(0, 5, 0x00005072); |
||||
/* BT_FUSE_SEL */ |
||||
fuse_prog(0, 6, 0x00000010); |
||||
return CMD_RET_SUCCESS; |
||||
} |
||||
|
||||
int do_mfgr_fuse(cmd_tbl_t *cmdtp, int flag, int argc, |
||||
char * const argv[]) |
||||
{ |
||||
int ret; |
||||
puts("Fusing...\n"); |
||||
ret = mfgr_fuse(); |
||||
if (ret == CMD_RET_SUCCESS) |
||||
puts("done.\n"); |
||||
else |
||||
puts("failed.\n"); |
||||
return ret; |
||||
} |
||||
|
||||
int do_updt_fuse(cmd_tbl_t *cmdtp, int flag, int argc, |
||||
char * const argv[]) |
||||
{ |
||||
unsigned val; |
||||
int ret; |
||||
int confirmed = argc >= 1 && !strcmp(argv[1], "-y"); |
||||
|
||||
/* can be used in scripts for command availability check */ |
||||
if (argc >= 1 && !strcmp(argv[1], "-n")) |
||||
return CMD_RET_SUCCESS; |
||||
|
||||
/* boot cfg */ |
||||
fuse_sense(0, 5, &val); |
||||
printf("Fuse 0, 5: %8x\n", val); |
||||
if (val & 0x10) { |
||||
puts("Fast boot mode already fused, no need to fuse\n"); |
||||
return CMD_RET_SUCCESS; |
||||
} |
||||
if (!confirmed) { |
||||
puts("Warning: Programming fuses is an irreversible operation!\n" |
||||
" Updating to fast boot mode prevents easy\n" |
||||
" downgrading to previous BSP versions.\n" |
||||
"\nReally perform this fuse programming? <y/N>\n"); |
||||
if (!confirm_yesno()) |
||||
return CMD_RET_FAILURE; |
||||
} |
||||
puts("Fusing fast boot mode...\n"); |
||||
ret = fuse_prog(0, 5, 0x00005072); |
||||
if (ret == CMD_RET_SUCCESS) |
||||
puts("done.\n"); |
||||
else |
||||
puts("failed.\n"); |
||||
return ret; |
||||
} |
||||
|
||||
U_BOOT_CMD( |
||||
mfgr_fuse, 1, 0, do_mfgr_fuse, |
||||
"OTP fusing during module production", |
||||
"" |
||||
); |
||||
|
||||
U_BOOT_CMD( |
||||
updt_fuse, 2, 0, do_updt_fuse, |
||||
"OTP fusing during module update", |
||||
"updt_fuse [-n] [-y] - boot cfg fast boot mode fusing" |
||||
); |
||||
#endif /* CONFIG_SPL_BUILD */ |
@ -0,0 +1,211 @@ |
||||
/*
|
||||
* Copyright (C) 2014-2016, Toradex AG |
||||
* |
||||
* SPDX-License-Identifier: GPL-2.0+ |
||||
*/ |
||||
|
||||
/*
|
||||
* Helpers for Freescale PMIC PF0100 |
||||
*/ |
||||
|
||||
#include <common.h> |
||||
#include <i2c.h> |
||||
#include <asm/arch/imx-regs.h> |
||||
#include <asm/arch/iomux.h> |
||||
#include <asm/arch/mx6-pins.h> |
||||
#include <asm/gpio.h> |
||||
#include <asm/imx-common/iomux-v3.h> |
||||
|
||||
#include "pf0100_otp.inc" |
||||
#include "pf0100.h" |
||||
|
||||
/* define for PMIC register dump */ |
||||
/*#define DEBUG */ |
||||
|
||||
/* use GPIO: EXT_IO1 to switch on VPGM, ON: 1 */ |
||||
static iomux_v3_cfg_t const pmic_prog_pads[] = { |
||||
MX6_PAD_NANDF_D3__GPIO2_IO03 | MUX_PAD_CTRL(NO_PAD_CTRL), |
||||
# define PMIC_PROG_VOLTAGE IMX_GPIO_NR(2, 3) |
||||
}; |
||||
|
||||
unsigned pmic_init(void) |
||||
{ |
||||
unsigned programmed = 0; |
||||
uchar bus = 1; |
||||
uchar devid, revid, val; |
||||
|
||||
puts("PMIC: "); |
||||
if (!((0 == i2c_set_bus_num(bus)) && |
||||
(0 == i2c_probe(PFUZE100_I2C_ADDR)))) { |
||||
puts("i2c bus failed\n"); |
||||
return 0; |
||||
} |
||||
/* get device ident */ |
||||
if (i2c_read(PFUZE100_I2C_ADDR, PFUZE100_DEVICEID, 1, &devid, 1) < 0) { |
||||
puts("i2c pmic devid read failed\n"); |
||||
return 0; |
||||
} |
||||
if (i2c_read(PFUZE100_I2C_ADDR, PFUZE100_REVID, 1, &revid, 1) < 0) { |
||||
puts("i2c pmic revid read failed\n"); |
||||
return 0; |
||||
} |
||||
printf("device id: 0x%.2x, revision id: 0x%.2x\n", devid, revid); |
||||
|
||||
#ifdef DEBUG |
||||
{ |
||||
unsigned i, j; |
||||
|
||||
for (i = 0; i < 16; i++) |
||||
printf("\t%x", i); |
||||
for (j = 0; j < 0x80; ) { |
||||
printf("\n%2x", j); |
||||
for (i = 0; i < 16; i++) { |
||||
i2c_read(PFUZE100_I2C_ADDR, j+i, 1, &val, 1); |
||||
printf("\t%2x", val); |
||||
} |
||||
j += 0x10; |
||||
} |
||||
printf("\nEXT Page 1"); |
||||
|
||||
val = PFUZE100_PAGE_REGISTER_PAGE1; |
||||
if (i2c_write(PFUZE100_I2C_ADDR, PFUZE100_PAGE_REGISTER, 1, |
||||
&val, 1)) { |
||||
puts("i2c write failed\n"); |
||||
return 0; |
||||
} |
||||
|
||||
for (j = 0x80; j < 0x100; ) { |
||||
printf("\n%2x", j); |
||||
for (i = 0; i < 16; i++) { |
||||
i2c_read(PFUZE100_I2C_ADDR, j+i, 1, &val, 1); |
||||
printf("\t%2x", val); |
||||
} |
||||
j += 0x10; |
||||
} |
||||
printf("\nEXT Page 2"); |
||||
|
||||
val = PFUZE100_PAGE_REGISTER_PAGE2; |
||||
if (i2c_write(PFUZE100_I2C_ADDR, PFUZE100_PAGE_REGISTER, 1, |
||||
&val, 1)) { |
||||
puts("i2c write failed\n"); |
||||
return 0; |
||||
} |
||||
|
||||
for (j = 0x80; j < 0x100; ) { |
||||
printf("\n%2x", j); |
||||
for (i = 0; i < 16; i++) { |
||||
i2c_read(PFUZE100_I2C_ADDR, j+i, 1, &val, 1); |
||||
printf("\t%2x", val); |
||||
} |
||||
j += 0x10; |
||||
} |
||||
printf("\n"); |
||||
} |
||||
#endif |
||||
/* get device programmed state */ |
||||
val = PFUZE100_PAGE_REGISTER_PAGE1; |
||||
if (i2c_write(PFUZE100_I2C_ADDR, PFUZE100_PAGE_REGISTER, 1, &val, 1)) { |
||||
puts("i2c write failed\n"); |
||||
return 0; |
||||
} |
||||
if (i2c_read(PFUZE100_I2C_ADDR, PFUZE100_FUSE_POR1, 1, &val, 1) < 0) { |
||||
puts("i2c fuse_por read failed\n"); |
||||
return 0; |
||||
} |
||||
if (val & PFUZE100_FUSE_POR_M) |
||||
programmed++; |
||||
|
||||
if (i2c_read(PFUZE100_I2C_ADDR, PFUZE100_FUSE_POR2, 1, &val, 1) < 0) { |
||||
puts("i2c fuse_por read failed\n"); |
||||
return programmed; |
||||
} |
||||
if (val & PFUZE100_FUSE_POR_M) |
||||
programmed++; |
||||
|
||||
if (i2c_read(PFUZE100_I2C_ADDR, PFUZE100_FUSE_POR3, 1, &val, 1) < 0) { |
||||
puts("i2c fuse_por read failed\n"); |
||||
return programmed; |
||||
} |
||||
if (val & PFUZE100_FUSE_POR_M) |
||||
programmed++; |
||||
|
||||
switch (programmed) { |
||||
case 0: |
||||
printf("PMIC: not programmed\n"); |
||||
break; |
||||
case 3: |
||||
printf("PMIC: programmed\n"); |
||||
break; |
||||
default: |
||||
printf("PMIC: undefined programming state\n"); |
||||
break; |
||||
} |
||||
|
||||
return programmed; |
||||
} |
||||
|
||||
int pf0100_prog(void) |
||||
{ |
||||
unsigned char bus = 1; |
||||
unsigned char val; |
||||
unsigned int i; |
||||
|
||||
if (pmic_init() == 3) { |
||||
puts("PMIC already programmed, exiting\n"); |
||||
return CMD_RET_FAILURE; |
||||
} |
||||
/* set up gpio to manipulate vprog, initially off */ |
||||
imx_iomux_v3_setup_multiple_pads(pmic_prog_pads, |
||||
ARRAY_SIZE(pmic_prog_pads)); |
||||
gpio_direction_output(PMIC_PROG_VOLTAGE, 0); |
||||
|
||||
if (!((0 == i2c_set_bus_num(bus)) && |
||||
(0 == i2c_probe(PFUZE100_I2C_ADDR)))) { |
||||
puts("i2c bus failed\n"); |
||||
return CMD_RET_FAILURE; |
||||
} |
||||
|
||||
for (i = 0; i < ARRAY_SIZE(pmic_otp_prog); i++) { |
||||
switch (pmic_otp_prog[i].cmd) { |
||||
case pmic_i2c: |
||||
val = (unsigned char) (pmic_otp_prog[i].value & 0xff); |
||||
if (i2c_write(PFUZE100_I2C_ADDR, pmic_otp_prog[i].reg, |
||||
1, &val, 1)) { |
||||
printf("i2c write failed, reg 0x%2x, value 0x%2x\n", |
||||
pmic_otp_prog[i].reg, val); |
||||
return CMD_RET_FAILURE; |
||||
} |
||||
break; |
||||
case pmic_delay: |
||||
udelay(pmic_otp_prog[i].value * 1000); |
||||
break; |
||||
case pmic_vpgm: |
||||
gpio_direction_output(PMIC_PROG_VOLTAGE, |
||||
pmic_otp_prog[i].value); |
||||
break; |
||||
case pmic_pwr: |
||||
/* TODO */ |
||||
break; |
||||
} |
||||
} |
||||
return CMD_RET_SUCCESS; |
||||
} |
||||
|
||||
int do_pf0100_prog(cmd_tbl_t *cmdtp, int flag, int argc, |
||||
char * const argv[]) |
||||
{ |
||||
int ret; |
||||
puts("Programming PMIC OTP..."); |
||||
ret = pf0100_prog(); |
||||
if (ret == CMD_RET_SUCCESS) |
||||
puts("done.\n"); |
||||
else |
||||
puts("failed.\n"); |
||||
return ret; |
||||
} |
||||
|
||||
U_BOOT_CMD( |
||||
pf0100_otp_prog, 1, 0, do_pf0100_prog, |
||||
"Program the OTP fuses on the PMIC PF0100", |
||||
"" |
||||
); |
@ -0,0 +1,56 @@ |
||||
/*
|
||||
* Copyright (C) 2014-2016, Toradex AG |
||||
* |
||||
* SPDX-License-Identifier: GPL-2.0+ |
||||
*/ |
||||
|
||||
/*
|
||||
* Helpers for Freescale PMIC PF0100 |
||||
*/ |
||||
|
||||
#ifndef PF0100_H_ |
||||
#define PF0100_H_ |
||||
|
||||
/* 7-bit I2C bus slave address */ |
||||
#define PFUZE100_I2C_ADDR (0x08) |
||||
/* Register Addresses */ |
||||
#define PFUZE100_DEVICEID (0x0) |
||||
#define PFUZE100_REVID (0x3) |
||||
#define PFUZE100_SW1AMODE (0x23) |
||||
#define PFUZE100_SW1ACON 36 |
||||
#define PFUZE100_SW1ACON_SPEED_VAL (0x1<<6) /*default */ |
||||
#define PFUZE100_SW1ACON_SPEED_M (0x3<<6) |
||||
#define PFUZE100_SW1CCON 49 |
||||
#define PFUZE100_SW1CCON_SPEED_VAL (0x1<<6) /*default */ |
||||
#define PFUZE100_SW1CCON_SPEED_M (0x3<<6) |
||||
#define PFUZE100_SW1AVOL 32 |
||||
#define PFUZE100_SW1AVOL_VSEL_M (0x3f<<0) |
||||
#define PFUZE100_SW1CVOL 46 |
||||
#define PFUZE100_SW1CVOL_VSEL_M (0x3f<<0) |
||||
#define PFUZE100_VGEN1CTL (0x6c) |
||||
#define PFUZE100_VGEN1_VAL (0x30 + 0x08) /* Always ON, 1.2V */ |
||||
#define PFUZE100_SWBSTCTL (0x66) |
||||
/* Always ON, Auto Switching Mode, 5.0V */ |
||||
#define PFUZE100_SWBST_VAL (0x40 + 0x08 + 0x00) |
||||
|
||||
/* chooses the extended page (registers 0x80..0xff) */ |
||||
#define PFUZE100_PAGE_REGISTER 0x7f |
||||
#define PFUZE100_PAGE_REGISTER_PAGE_M (0x1f << 0) |
||||
#define PFUZE100_PAGE_REGISTER_PAGE1 (0x01 & PFUZE100_PAGE_REGISTER_PAGE_M) |
||||
#define PFUZE100_PAGE_REGISTER_PAGE2 (0x02 & PFUZE100_PAGE_REGISTER_PAGE_M) |
||||
|
||||
/* extended page 1 */ |
||||
#define PFUZE100_FUSE_POR1 0xe4 |
||||
#define PFUZE100_FUSE_POR2 0xe5 |
||||
#define PFUZE100_FUSE_POR3 0xe6 |
||||
#define PFUZE100_FUSE_POR_M (0x1 << 1) |
||||
|
||||
|
||||
/* output some informational messages, return the number FUSE_POR=1 */ |
||||
/* i.e. 0: unprogrammed, 3: programmed, other: undefined prog. state */ |
||||
unsigned pmic_init(void); |
||||
|
||||
/* programmes OTP fuses to values required on a Toradex Apalis iMX6 */ |
||||
int pf0100_prog(void); |
||||
|
||||
#endif /* PF0100_H_ */ |
@ -0,0 +1,189 @@ |
||||
/* |
||||
* Copyright (C) 2014-2016, Toradex AG |
||||
* |
||||
* SPDX-License-Identifier: GPL-2.0+ |
||||
*/ |
||||
|
||||
// Register Output for PF0100 programmer |
||||
// Customer: Toradex AG |
||||
// Program: Colibri iMX6 |
||||
// Sample marking: |
||||
// Date: 24.07.2015 |
||||
// Time: 10:52:58 |
||||
// Generated from Spreadsheet Revision: P1.8 |
||||
|
||||
/* sed commands to get from programmer script to struct */ |
||||
/* sed -e 's/^WRITE_I2C:\(..\):\(..\)/\{pmic_i2c, 0x\1, 0x\2\},/g' -e 's/^DELAY:\([0-9]*\)/\{pmic_delay, 0, \1\},/g' pf0100_otp_Colibri_iMX6.txt > pf0100_otp.inc |
||||
sed -i -e 's/^VPGM:ON/\{pmic_vpgm, 0, 1},/g' -e 's/^VPGM:OFF/\{pmic_vpgm, 0, 0},/g' pf0100_otp.inc |
||||
sed -i -e 's/^PWRON: HIGH/\{pmic_pwr, 0, 1},/g' -e 's/^PWRON:LOW/\{pmic_pwr, 0, 0},/g' pf0100_otp.inc */ |
||||
|
||||
enum { pmic_i2c, pmic_delay, pmic_vpgm, pmic_pwr }; |
||||
struct pmic_otp_prog_t{ |
||||
unsigned char cmd; |
||||
unsigned char reg; |
||||
unsigned short value; |
||||
}; |
||||
|
||||
struct pmic_otp_prog_t pmic_otp_prog[] = { |
||||
{pmic_i2c, 0x7F, 0x01}, // Access FSL EXT Page 1 |
||||
{pmic_i2c, 0xA0, 0x2B}, // Auto gen from Row94 |
||||
{pmic_i2c, 0xA1, 0x01}, // Auto gen from Row95 |
||||
{pmic_i2c, 0xA2, 0x05}, // Auto gen from Row96 |
||||
{pmic_i2c, 0xA8, 0x2B}, // Auto gen from Row102 |
||||
{pmic_i2c, 0xA9, 0x02}, // Auto gen from Row103 |
||||
{pmic_i2c, 0xAA, 0x01}, // Auto gen from Row104 |
||||
{pmic_i2c, 0xAC, 0x18}, // Auto gen from Row106 |
||||
{pmic_i2c, 0xAE, 0x01}, // Auto gen from Row108 |
||||
{pmic_i2c, 0xB0, 0x2C}, // Auto gen from Row110 |
||||
{pmic_i2c, 0xB1, 0x04}, // Auto gen from Row111 |
||||
{pmic_i2c, 0xB2, 0x01}, // Auto gen from Row112 |
||||
{pmic_i2c, 0xB4, 0x2C}, // Auto gen from Row114 |
||||
{pmic_i2c, 0xB5, 0x04}, // Auto gen from Row115 |
||||
{pmic_i2c, 0xB6, 0x01}, // Auto gen from Row116 |
||||
{pmic_i2c, 0xB8, 0x18}, // Auto gen from Row118 |
||||
{pmic_i2c, 0xBA, 0x01}, // Auto gen from Row120 |
||||
{pmic_i2c, 0xBD, 0x0E}, // Auto gen from Row123 |
||||
{pmic_i2c, 0xC0, 0x06}, // Auto gen from Row126 |
||||
{pmic_i2c, 0xC4, 0x04}, // Auto gen from Row130 |
||||
{pmic_i2c, 0xC8, 0x0E}, // Auto gen from Row134 |
||||
{pmic_i2c, 0xCC, 0x0E}, // Auto gen from Row138 |
||||
{pmic_i2c, 0xCD, 0x05}, // Auto gen from Row139 |
||||
{pmic_i2c, 0xD0, 0x0C}, // Auto gen from Row142 |
||||
{pmic_i2c, 0xD5, 0x07}, // Auto gen from Row147 |
||||
{pmic_i2c, 0xD8, 0x07}, // Auto gen from Row150 |
||||
{pmic_i2c, 0xD9, 0x06}, // Auto gen from Row151 |
||||
{pmic_i2c, 0xDC, 0x0A}, // Auto gen from Row154 |
||||
{pmic_i2c, 0xDD, 0x03}, // Auto gen from Row155 |
||||
{pmic_i2c, 0xE0, 0x05}, // Auto gen from Row158 |
||||
|
||||
#if 0 /* TBB mode */ |
||||
{pmic_i2c, 0xE4, 0x80}, // TBB_POR = 1 |
||||
{pmic_delay, 0, 10}, |
||||
#else |
||||
// Write OTP |
||||
{pmic_i2c, 0xE4, 0x02}, // FUSE POR1=1 |
||||
{pmic_i2c, 0xE5, 0x02}, // FUSE POR2=1 |
||||
{pmic_i2c, 0xE6, 0x02}, // FUSE POR3=1 |
||||
{pmic_i2c, 0xF0, 0x1F}, // Enable ECC for fuse banks 1 to 5 by writing to OTP EN ECC0 register |
||||
{pmic_i2c, 0xF1, 0x1F}, // Enable ECC for fuse banks 6 to 10 by writing to OTP EN ECC1 register |
||||
{pmic_i2c, 0x7F, 0x02}, // Access PF0100 EXT Page2 |
||||
{pmic_i2c, 0xD0, 0x1F}, // Set Auto ECC for fuse banks 1 to 5 by writing to OTP AUTO ECC0 register |
||||
{pmic_i2c, 0xD1, 0x1F}, // Set Auto ECC for fuse banks 6 to 10 by writing to OTP AUTO ECC1 register |
||||
//----------------------------------------------------------------------------------- |
||||
{pmic_i2c, 0xF1, 0x00}, // Reset Bank 1 ANTIFUSE_RW and ANTIFUSE_BYPASS bits |
||||
{pmic_i2c, 0xF2, 0x00}, // Reset Bank 2 ANTIFUSE_RW and ANTIFUSE_BYPASS bits |
||||
{pmic_i2c, 0xF3, 0x00}, // Reset Bank 3 ANTIFUSE_RW and ANTIFUSE_BYPASS bits |
||||
{pmic_i2c, 0xF4, 0x00}, // Reset Bank 4 ANTIFUSE_RW and ANTIFUSE_BYPASS bits |
||||
{pmic_i2c, 0xF5, 0x00}, // Reset Bank 5 ANTIFUSE_RW and ANTIFUSE_BYPASS bits |
||||
{pmic_i2c, 0xF6, 0x00}, // Reset Bank 6 ANTIFUSE_RW and ANTIFUSE_BYPASS bits |
||||
{pmic_i2c, 0xF7, 0x00}, // Reset Bank 7 ANTIFUSE_RW and ANTIFUSE_BYPASS bits |
||||
{pmic_i2c, 0xF8, 0x00}, // Reset Bank 8 ANTIFUSE_RW and ANTIFUSE_BYPASS bits |
||||
{pmic_i2c, 0xF9, 0x00}, // Reset Bank 9 ANTIFUSE_RW and ANTIFUSE_BYPASS bits |
||||
{pmic_i2c, 0xFA, 0x00}, // Reset Bank 10 ANTIFUSE_RW and ANTIFUSE_BYPASS bits |
||||
//----------------------------------------------------------------------------------- |
||||
{pmic_vpgm, 0, 1}, // Turn ON 8V SWBST |
||||
//VPGM:DOWN:n |
||||
//VPGM:UP:n |
||||
{pmic_delay, 0, 500}, // Adds 500msec delay to allow VPGM time to ramp up |
||||
//----------------------------------------------------------------------------------- |
||||
// PF0100 OTP MANUAL-PROGRAMMING (BANK 1 thru 10) |
||||
//----------------------------------------------------------------------------------- |
||||
// BANK 1 |
||||
//----------------------------------------------------------------------------------- |
||||
{pmic_i2c, 0xF1, 0x00}, // Reset Bank 1 ANTIFUSE_RW and ANTIFUSE_BYPASS bits |
||||
{pmic_i2c, 0xF1, 0x03}, // Set Bank 1 ANTIFUSE_RW and ANTIFUSE_BYPASS bits |
||||
{pmic_i2c, 0xF1, 0x0B}, // Set Bank 1 ANTIFUSE_EN |
||||
{pmic_delay, 0, 10}, // Allow time for bank programming to complete |
||||
{pmic_i2c, 0xF1, 0x03}, // Reset Bank 1 ANTIFUSE_EN |
||||
{pmic_i2c, 0xF1, 0x00}, // Reset Bank 1 ANTIFUSE_RW and ANTIFUSE_BYPASS bits |
||||
//----------------------------------------------------------------------------------- |
||||
// BANK 2 |
||||
//----------------------------------------------------------------------------------- |
||||
{pmic_i2c, 0xF2, 0x00}, // Reset Bank 2 ANTIFUSE_RW and ANTIFUSE_BYPASS bits |
||||
{pmic_i2c, 0xF2, 0x03}, // Set Bank 2 ANTIFUSE_RW and ANTIFUSE_BYPASS bits |
||||
{pmic_i2c, 0xF2, 0x0B}, // Set Bank 2 ANTIFUSE_EN |
||||
{pmic_delay, 0, 10}, // Allow time for bank programming to complete |
||||
{pmic_i2c, 0xF2, 0x03}, // Reset Bank 2 ANTIFUSE_EN |
||||
{pmic_i2c, 0xF2, 0x00}, // Reset Bank 2 ANTIFUSE_RW and ANTIFUSE_BYPASS bits |
||||
//----------------------------------------------------------------------------------- |
||||
// BANK 3 |
||||
//----------------------------------------------------------------------------------- |
||||
{pmic_i2c, 0xF3, 0x00}, // Reset Bank 3 ANTIFUSE_RW and ANTIFUSE_BYPASS bits |
||||
{pmic_i2c, 0xF3, 0x03}, // Set Bank 3 ANTIFUSE_RW and ANTIFUSE_BYPASS bits |
||||
{pmic_i2c, 0xF3, 0x0B}, // Set Bank 3 ANTIFUSE_EN |
||||
{pmic_delay, 0, 10}, // Allow time for bank programming to complete |
||||
{pmic_i2c, 0xF3, 0x03}, // Reset Bank 3 ANTIFUSE_EN |
||||
{pmic_i2c, 0xF3, 0x00}, // Reset Bank 3 ANTIFUSE_RW and ANTIFUSE_BYPASS bits |
||||
//----------------------------------------------------------------------------------- |
||||
// BANK 4 |
||||
//----------------------------------------------------------------------------------- |
||||
{pmic_i2c, 0xF4, 0x00}, // Reset Bank 4 ANTIFUSE_RW and ANTIFUSE_BYPASS bits |
||||
{pmic_i2c, 0xF4, 0x03}, // Set Bank 4 ANTIFUSE_RW and ANTIFUSE_BYPASS bits |
||||
{pmic_i2c, 0xF4, 0x0B}, // Set Bank 4 ANTIFUSE_EN |
||||
{pmic_delay, 0, 10}, // Allow time for bank programming to complete |
||||
{pmic_i2c, 0xF4, 0x03}, // Reset Bank 4 ANTIFUSE_EN |
||||
{pmic_i2c, 0xF4, 0x00}, // Reset Bank 4 ANTIFUSE_RW and ANTIFUSE_BYPASS bits |
||||
//----------------------------------------------------------------------------------- |
||||
// BANK 5 |
||||
//----------------------------------------------------------------------------------- |
||||
{pmic_i2c, 0xF5, 0x00}, // Reset Bank 5 ANTIFUSE_RW and ANTIFUSE_BYPASS bits |
||||
{pmic_i2c, 0xF5, 0x03}, // Set Bank 5 ANTIFUSE_RW and ANTIFUSE_BYPASS bits |
||||
{pmic_i2c, 0xF5, 0x0B}, // Set Bank 5 ANTIFUSE_EN |
||||
{pmic_delay, 0, 10}, // Allow time for bank programming to complete |
||||
{pmic_i2c, 0xF5, 0x03}, // Reset Bank 5 ANTIFUSE_EN |
||||
{pmic_i2c, 0xF5, 0x00}, // Reset Bank 5 ANTIFUSE_RW and ANTIFUSE_BYPASS bits |
||||
//----------------------------------------------------------------------------------- |
||||
// BANK 6 |
||||
//----------------------------------------------------------------------------------- |
||||
{pmic_i2c, 0xF6, 0x00}, // Reset Bank 6 ANTIFUSE_RW and ANTIFUSE_BYPASS bits |
||||
{pmic_i2c, 0xF6, 0x03}, // Set Bank 6 ANTIFUSE_RW and ANTIFUSE_BYPASS bits |
||||
{pmic_i2c, 0xF6, 0x0B}, // Set Bank 6 ANTIFUSE_EN |
||||
{pmic_delay, 0, 10}, // Allow time for bank programming to complete |
||||
{pmic_i2c, 0xF6, 0x03}, // Reset Bank 6 ANTIFUSE_EN |
||||
{pmic_i2c, 0xF6, 0x00}, // Reset Bank 6 ANTIFUSE_RW and ANTIFUSE_BYPASS bits |
||||
//----------------------------------------------------------------------------------- |
||||
// BANK 7 |
||||
//----------------------------------------------------------------------------------- |
||||
{pmic_i2c, 0xF7, 0x00}, // Reset Bank 7 ANTIFUSE_RW and ANTIFUSE_BYPASS bits |
||||
{pmic_i2c, 0xF7, 0x03}, // Set Bank 7 ANTIFUSE_RW and ANTIFUSE_BYPASS bits |
||||
{pmic_i2c, 0xF7, 0x0B}, // Set Bank 7 ANTIFUSE_EN |
||||
{pmic_delay, 0, 10}, // Allow time for bank programming to complete |
||||
{pmic_i2c, 0xF7, 0x03}, // Reset Bank 7 ANTIFUSE_EN |
||||
{pmic_i2c, 0xF7, 0x00}, // Reset Bank 7 ANTIFUSE_RW and ANTIFUSE_BYPASS bits |
||||
//----------------------------------------------------------------------------------- |
||||
// BANK 8 |
||||
//----------------------------------------------------------------------------------- |
||||
{pmic_i2c, 0xF8, 0x00}, // Reset Bank 8 ANTIFUSE_RW and ANTIFUSE_BYPASS bits |
||||
{pmic_i2c, 0xF8, 0x03}, // Set Bank 8 ANTIFUSE_RW and ANTIFUSE_BYPASS bits |
||||
{pmic_i2c, 0xF8, 0x0B}, // Set Bank 8 ANTIFUSE_EN |
||||
{pmic_delay, 0, 10}, // Allow time for bank programming to complete |
||||
{pmic_i2c, 0xF8, 0x03}, // Reset Bank 8 ANTIFUSE_EN |
||||
{pmic_i2c, 0xF8, 0x00}, // Reset Bank 8 ANTIFUSE_RW and ANTIFUSE_BYPASS bits |
||||
//----------------------------------------------------------------------------------- |
||||
// BANK 9 |
||||
//----------------------------------------------------------------------------------- |
||||
{pmic_i2c, 0xF9, 0x00}, // Reset Bank 9 ANTIFUSE_RW and ANTIFUSE_BYPASS bits |
||||
{pmic_i2c, 0xF9, 0x03}, // Set Bank 9 ANTIFUSE_RW and ANTIFUSE_BYPASS bits |
||||
{pmic_i2c, 0xF9, 0x0B}, // Set Bank 9 ANTIFUSE_EN |
||||
{pmic_delay, 0, 10}, // Allow time for bank programming to complete |
||||
{pmic_i2c, 0xF9, 0x03}, // Reset Bank 9 ANTIFUSE_EN |
||||
{pmic_i2c, 0xF9, 0x00}, // Reset Bank 9 ANTIFUSE_RW and ANTIFUSE_BYPASS bits |
||||
//----------------------------------------------------------------------------------- |
||||
// BANK 10 |
||||
//----------------------------------------------------------------------------------- |
||||
{pmic_i2c, 0xFA, 0x00}, // Reset Bank 10 ANTIFUSE_RW and ANTIFUSE_BYPASS bits |
||||
{pmic_i2c, 0xFA, 0x03}, // Set Bank 10 ANTIFUSE_RW and ANTIFUSE_BYPASS bits |
||||
{pmic_i2c, 0xFA, 0x0B}, // Set Bank 10 ANTIFUSE_EN |
||||
{pmic_delay, 0, 10}, // Allow time for bank programming to complete |
||||
{pmic_i2c, 0xFA, 0x03}, // Reset Bank 10 ANTIFUSE_EN |
||||
{pmic_i2c, 0xFA, 0x00}, // Reset Bank 10 ANTIFUSE_RW and ANTIFUSE_BYPASS bits |
||||
//----------------------------------------------------------------------------------- |
||||
{pmic_vpgm, 0, 0}, // Turn off 8V SWBST |
||||
{pmic_delay, 0, 500}, // Adds delay to allow VPGM to bleed off |
||||
{pmic_i2c, 0xD0, 0x00}, // Clear |
||||
{pmic_i2c, 0xD1, 0x00}, // Clear |
||||
{pmic_pwr, 0, 0}, // PWRON LOW to reload new OTP data |
||||
{pmic_delay, 0, 500}, |
||||
{pmic_pwr, 0, 1}, |
||||
#endif |
||||
}; |
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in new issue