mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-24 21:54:01 +00:00
Merge branch 'master' of git://www.denx.de/git/u-boot-imx
Migrate CONFIG_ARCH_USE_MEMSET/MEMCPY with this merge. Signed-off-by: Tom Rini <trini@konsulko.com>
This commit is contained in:
commit
8ea05705a7
150 changed files with 16818 additions and 473 deletions
|
@ -918,6 +918,8 @@ source "arch/arm/mach-keystone/Kconfig"
|
||||||
|
|
||||||
source "arch/arm/mach-kirkwood/Kconfig"
|
source "arch/arm/mach-kirkwood/Kconfig"
|
||||||
|
|
||||||
|
source "arch/arm/mach-litesom/Kconfig"
|
||||||
|
|
||||||
source "arch/arm/mach-mvebu/Kconfig"
|
source "arch/arm/mach-mvebu/Kconfig"
|
||||||
|
|
||||||
source "arch/arm/cpu/armv7/ls102xa/Kconfig"
|
source "arch/arm/cpu/armv7/ls102xa/Kconfig"
|
||||||
|
|
|
@ -58,6 +58,7 @@ machine-$(CONFIG_ARCH_HIGHBANK) += highbank
|
||||||
machine-$(CONFIG_ARCH_KEYSTONE) += keystone
|
machine-$(CONFIG_ARCH_KEYSTONE) += keystone
|
||||||
# TODO: rename CONFIG_KIRKWOOD -> CONFIG_ARCH_KIRKWOOD
|
# TODO: rename CONFIG_KIRKWOOD -> CONFIG_ARCH_KIRKWOOD
|
||||||
machine-$(CONFIG_KIRKWOOD) += kirkwood
|
machine-$(CONFIG_KIRKWOOD) += kirkwood
|
||||||
|
machine-$(CONFIG_LITESOM) += litesom
|
||||||
machine-$(CONFIG_ARCH_MESON) += meson
|
machine-$(CONFIG_ARCH_MESON) += meson
|
||||||
machine-$(CONFIG_ARCH_MVEBU) += mvebu
|
machine-$(CONFIG_ARCH_MVEBU) += mvebu
|
||||||
# TODO: rename CONFIG_TEGRA -> CONFIG_ARCH_TEGRA
|
# TODO: rename CONFIG_TEGRA -> CONFIG_ARCH_TEGRA
|
||||||
|
|
|
@ -18,11 +18,19 @@ config TARGET_USBARMORY
|
||||||
bool "Support USB armory"
|
bool "Support USB armory"
|
||||||
select CPU_V7
|
select CPU_V7
|
||||||
|
|
||||||
|
config TARGET_MX53CX9020
|
||||||
|
bool "Support CX9020"
|
||||||
|
select CPU_V7
|
||||||
|
select MX53
|
||||||
|
select DM
|
||||||
|
select DM_SERIAL
|
||||||
|
|
||||||
endchoice
|
endchoice
|
||||||
|
|
||||||
config SYS_SOC
|
config SYS_SOC
|
||||||
default "mx5"
|
default "mx5"
|
||||||
|
|
||||||
|
source "board/beckhoff/mx53cx9020/Kconfig"
|
||||||
source "board/inversepath/usbarmory/Kconfig"
|
source "board/inversepath/usbarmory/Kconfig"
|
||||||
|
|
||||||
endif
|
endif
|
||||||
|
|
|
@ -26,6 +26,10 @@ config MX6SX
|
||||||
select ROM_UNIFIED_SECTIONS
|
select ROM_UNIFIED_SECTIONS
|
||||||
bool
|
bool
|
||||||
|
|
||||||
|
config MX6SLL
|
||||||
|
select ROM_UNIFIED_SECTIONS
|
||||||
|
bool
|
||||||
|
|
||||||
config MX6UL
|
config MX6UL
|
||||||
select SYS_L2CACHE_OFF
|
select SYS_L2CACHE_OFF
|
||||||
select ROM_UNIFIED_SECTIONS
|
select ROM_UNIFIED_SECTIONS
|
||||||
|
@ -51,6 +55,13 @@ config TARGET_ADVANTECH_DMS_BA16
|
||||||
bool "Advantech dms-ba16"
|
bool "Advantech dms-ba16"
|
||||||
select MX6Q
|
select MX6Q
|
||||||
|
|
||||||
|
config TARGET_APALIS_IMX6
|
||||||
|
bool "Toradex Apalis iMX6 board"
|
||||||
|
select SUPPORT_SPL
|
||||||
|
select DM
|
||||||
|
select DM_SERIAL
|
||||||
|
select DM_THERMAL
|
||||||
|
|
||||||
config TARGET_ARISTAINETOS
|
config TARGET_ARISTAINETOS
|
||||||
bool "aristainetos"
|
bool "aristainetos"
|
||||||
|
|
||||||
|
@ -73,6 +84,13 @@ config TARGET_CM_FX6
|
||||||
select DM_SERIAL
|
select DM_SERIAL
|
||||||
select DM_GPIO
|
select DM_GPIO
|
||||||
|
|
||||||
|
config TARGET_COLIBRI_IMX6
|
||||||
|
bool "Toradex Colibri iMX6 board"
|
||||||
|
select SUPPORT_SPL
|
||||||
|
select DM
|
||||||
|
select DM_SERIAL
|
||||||
|
select DM_THERMAL
|
||||||
|
|
||||||
config TARGET_EMBESTMX6BOARDS
|
config TARGET_EMBESTMX6BOARDS
|
||||||
bool "embestmx6boards"
|
bool "embestmx6boards"
|
||||||
|
|
||||||
|
@ -108,7 +126,21 @@ config TARGET_MX6Q_ICORE
|
||||||
select MX6QDL
|
select MX6QDL
|
||||||
select OF_CONTROL
|
select OF_CONTROL
|
||||||
select DM
|
select DM
|
||||||
|
select DM_ETH
|
||||||
select DM_GPIO
|
select DM_GPIO
|
||||||
|
select DM_I2C
|
||||||
|
select DM_MMC
|
||||||
|
select DM_THERMAL
|
||||||
|
select SUPPORT_SPL
|
||||||
|
|
||||||
|
config TARGET_MX6Q_ICORE_RQS
|
||||||
|
bool "Support Engicam i.Core RQS"
|
||||||
|
select MX6QDL
|
||||||
|
select OF_CONTROL
|
||||||
|
select DM
|
||||||
|
select DM_ETH
|
||||||
|
select DM_GPIO
|
||||||
|
select DM_I2C
|
||||||
select DM_MMC
|
select DM_MMC
|
||||||
select DM_THERMAL
|
select DM_THERMAL
|
||||||
select SUPPORT_SPL
|
select SUPPORT_SPL
|
||||||
|
@ -128,6 +160,12 @@ config TARGET_MX6SLEVK
|
||||||
bool "mx6slevk"
|
bool "mx6slevk"
|
||||||
select SUPPORT_SPL
|
select SUPPORT_SPL
|
||||||
|
|
||||||
|
config TARGET_MX6SLLEVK
|
||||||
|
bool "mx6sll evk"
|
||||||
|
select MX6SLL
|
||||||
|
select DM
|
||||||
|
select DM_THERMAL
|
||||||
|
|
||||||
config TARGET_MX6SXSABRESD
|
config TARGET_MX6SXSABRESD
|
||||||
bool "mx6sxsabresd"
|
bool "mx6sxsabresd"
|
||||||
select MX6SX
|
select MX6SX
|
||||||
|
@ -155,6 +193,18 @@ config TARGET_MX6UL_14X14_EVK
|
||||||
select DM_THERMAL
|
select DM_THERMAL
|
||||||
select SUPPORT_SPL
|
select SUPPORT_SPL
|
||||||
|
|
||||||
|
config TARGET_MX6UL_GEAM
|
||||||
|
bool "Support Engicam GEAM6UL"
|
||||||
|
select MX6UL
|
||||||
|
select OF_CONTROL
|
||||||
|
select DM
|
||||||
|
select DM_ETH
|
||||||
|
select DM_GPIO
|
||||||
|
select DM_I2C
|
||||||
|
select DM_MMC
|
||||||
|
select DM_THERMAL
|
||||||
|
select SUPPORT_SPL
|
||||||
|
|
||||||
config TARGET_MX6ULL_14X14_EVK
|
config TARGET_MX6ULL_14X14_EVK
|
||||||
bool "Support mx6ull_14x14_evk"
|
bool "Support mx6ull_14x14_evk"
|
||||||
select MX6ULL
|
select MX6ULL
|
||||||
|
@ -172,6 +222,10 @@ config TARGET_PICO_IMX6UL
|
||||||
bool "PICO-IMX6UL-EMMC"
|
bool "PICO-IMX6UL-EMMC"
|
||||||
select MX6UL
|
select MX6UL
|
||||||
|
|
||||||
|
config TARGET_LITEBOARD
|
||||||
|
bool "Grinn liteBoard (i.MX6UL)"
|
||||||
|
select LITESOM
|
||||||
|
|
||||||
config TARGET_PLATINUM_PICON
|
config TARGET_PLATINUM_PICON
|
||||||
bool "platinum-picon"
|
bool "platinum-picon"
|
||||||
select SUPPORT_SPL
|
select SUPPORT_SPL
|
||||||
|
@ -203,6 +257,9 @@ config TARGET_UDOO
|
||||||
config TARGET_UDOO_NEO
|
config TARGET_UDOO_NEO
|
||||||
bool "UDOO Neo"
|
bool "UDOO Neo"
|
||||||
select SUPPORT_SPL
|
select SUPPORT_SPL
|
||||||
|
select MX6SX
|
||||||
|
select DM
|
||||||
|
select DM_THERMAL
|
||||||
|
|
||||||
config TARGET_SAMTEC_VINING_2000
|
config TARGET_SAMTEC_VINING_2000
|
||||||
bool "samtec VIN|ING 2000"
|
bool "samtec VIN|ING 2000"
|
||||||
|
@ -253,15 +310,19 @@ source "board/compulab/cm_fx6/Kconfig"
|
||||||
source "board/congatec/cgtqmx6eval/Kconfig"
|
source "board/congatec/cgtqmx6eval/Kconfig"
|
||||||
source "board/el/el6x/Kconfig"
|
source "board/el/el6x/Kconfig"
|
||||||
source "board/embest/mx6boards/Kconfig"
|
source "board/embest/mx6boards/Kconfig"
|
||||||
|
source "board/engicam/geam6ul/Kconfig"
|
||||||
source "board/engicam/icorem6/Kconfig"
|
source "board/engicam/icorem6/Kconfig"
|
||||||
|
source "board/engicam/icorem6_rqs/Kconfig"
|
||||||
source "board/freescale/mx6qarm2/Kconfig"
|
source "board/freescale/mx6qarm2/Kconfig"
|
||||||
source "board/freescale/mx6qsabreauto/Kconfig"
|
source "board/freescale/mx6qsabreauto/Kconfig"
|
||||||
source "board/freescale/mx6sabresd/Kconfig"
|
source "board/freescale/mx6sabresd/Kconfig"
|
||||||
source "board/freescale/mx6slevk/Kconfig"
|
source "board/freescale/mx6slevk/Kconfig"
|
||||||
|
source "board/freescale/mx6sllevk/Kconfig"
|
||||||
source "board/freescale/mx6sxsabresd/Kconfig"
|
source "board/freescale/mx6sxsabresd/Kconfig"
|
||||||
source "board/freescale/mx6sxsabreauto/Kconfig"
|
source "board/freescale/mx6sxsabreauto/Kconfig"
|
||||||
source "board/freescale/mx6ul_14x14_evk/Kconfig"
|
source "board/freescale/mx6ul_14x14_evk/Kconfig"
|
||||||
source "board/freescale/mx6ullevk/Kconfig"
|
source "board/freescale/mx6ullevk/Kconfig"
|
||||||
|
source "board/grinn/liteboard/Kconfig"
|
||||||
source "board/phytec/pcm058/Kconfig"
|
source "board/phytec/pcm058/Kconfig"
|
||||||
source "board/gateworks/gw_ventana/Kconfig"
|
source "board/gateworks/gw_ventana/Kconfig"
|
||||||
source "board/kosagi/novena/Kconfig"
|
source "board/kosagi/novena/Kconfig"
|
||||||
|
@ -271,6 +332,8 @@ source "board/solidrun/mx6cuboxi/Kconfig"
|
||||||
source "board/technexion/pico-imx6ul/Kconfig"
|
source "board/technexion/pico-imx6ul/Kconfig"
|
||||||
source "board/tbs/tbs2910/Kconfig"
|
source "board/tbs/tbs2910/Kconfig"
|
||||||
source "board/tqc/tqma6/Kconfig"
|
source "board/tqc/tqma6/Kconfig"
|
||||||
|
source "board/toradex/apalis_imx6/Kconfig"
|
||||||
|
source "board/toradex/colibri_imx6/Kconfig"
|
||||||
source "board/udoo/Kconfig"
|
source "board/udoo/Kconfig"
|
||||||
source "board/udoo/neo/Kconfig"
|
source "board/udoo/neo/Kconfig"
|
||||||
source "board/wandboard/Kconfig"
|
source "board/wandboard/Kconfig"
|
||||||
|
|
|
@ -171,6 +171,8 @@ int enable_i2c_clk(unsigned char enable, unsigned i2c_num)
|
||||||
reg &= ~mask;
|
reg &= ~mask;
|
||||||
__raw_writel(reg, &imx_ccm->CCGR2);
|
__raw_writel(reg, &imx_ccm->CCGR2);
|
||||||
} else {
|
} else {
|
||||||
|
if (is_mx6sll())
|
||||||
|
return -EINVAL;
|
||||||
if (is_mx6sx() || is_mx6ul() || is_mx6ull()) {
|
if (is_mx6sx() || is_mx6ul() || is_mx6ull()) {
|
||||||
mask = MXC_CCM_CCGR6_I2C4_MASK;
|
mask = MXC_CCM_CCGR6_I2C4_MASK;
|
||||||
addr = &imx_ccm->CCGR6;
|
addr = &imx_ccm->CCGR6;
|
||||||
|
@ -382,7 +384,7 @@ static u32 get_ipg_per_clk(void)
|
||||||
u32 reg, perclk_podf;
|
u32 reg, perclk_podf;
|
||||||
|
|
||||||
reg = __raw_readl(&imx_ccm->cscmr1);
|
reg = __raw_readl(&imx_ccm->cscmr1);
|
||||||
if (is_mx6sl() || is_mx6sx() ||
|
if (is_mx6sll() || is_mx6sl() || is_mx6sx() ||
|
||||||
is_mx6dqp() || is_mx6ul() || is_mx6ull()) {
|
is_mx6dqp() || is_mx6ul() || is_mx6ull()) {
|
||||||
if (reg & MXC_CCM_CSCMR1_PER_CLK_SEL_MASK)
|
if (reg & MXC_CCM_CSCMR1_PER_CLK_SEL_MASK)
|
||||||
return MXC_HCLK; /* OSC 24Mhz */
|
return MXC_HCLK; /* OSC 24Mhz */
|
||||||
|
@ -400,7 +402,7 @@ static u32 get_uart_clk(void)
|
||||||
reg = __raw_readl(&imx_ccm->cscdr1);
|
reg = __raw_readl(&imx_ccm->cscdr1);
|
||||||
|
|
||||||
if (is_mx6sl() || is_mx6sx() || is_mx6dqp() || is_mx6ul() ||
|
if (is_mx6sl() || is_mx6sx() || is_mx6dqp() || is_mx6ul() ||
|
||||||
is_mx6ull()) {
|
is_mx6sll() || is_mx6ull()) {
|
||||||
if (reg & MXC_CCM_CSCDR1_UART_CLK_SEL)
|
if (reg & MXC_CCM_CSCDR1_UART_CLK_SEL)
|
||||||
freq = MXC_HCLK;
|
freq = MXC_HCLK;
|
||||||
}
|
}
|
||||||
|
@ -420,7 +422,7 @@ static u32 get_cspi_clk(void)
|
||||||
MXC_CCM_CSCDR2_ECSPI_CLK_PODF_OFFSET;
|
MXC_CCM_CSCDR2_ECSPI_CLK_PODF_OFFSET;
|
||||||
|
|
||||||
if (is_mx6dqp() || is_mx6sl() || is_mx6sx() || is_mx6ul() ||
|
if (is_mx6dqp() || is_mx6sl() || is_mx6sx() || is_mx6ul() ||
|
||||||
is_mx6ull()) {
|
is_mx6sll() || is_mx6ull()) {
|
||||||
if (reg & MXC_CCM_CSCDR2_ECSPI_CLK_SEL_MASK)
|
if (reg & MXC_CCM_CSCDR2_ECSPI_CLK_SEL_MASK)
|
||||||
return MXC_HCLK / (cspi_podf + 1);
|
return MXC_HCLK / (cspi_podf + 1);
|
||||||
}
|
}
|
||||||
|
@ -482,7 +484,8 @@ static u32 get_mmdc_ch0_clk(void)
|
||||||
|
|
||||||
u32 freq, podf, per2_clk2_podf, pmu_misc2_audio_div;
|
u32 freq, podf, per2_clk2_podf, pmu_misc2_audio_div;
|
||||||
|
|
||||||
if (is_mx6sx() || is_mx6ul() || is_mx6ull() || is_mx6sl()) {
|
if (is_mx6sx() || is_mx6ul() || is_mx6ull() || is_mx6sl() ||
|
||||||
|
is_mx6sll()) {
|
||||||
podf = (cbcdr & MXC_CCM_CBCDR_MMDC_CH1_PODF_MASK) >>
|
podf = (cbcdr & MXC_CCM_CBCDR_MMDC_CH1_PODF_MASK) >>
|
||||||
MXC_CCM_CBCDR_MMDC_CH1_PODF_OFFSET;
|
MXC_CCM_CBCDR_MMDC_CH1_PODF_OFFSET;
|
||||||
if (cbcdr & MXC_CCM_CBCDR_PERIPH2_CLK_SEL) {
|
if (cbcdr & MXC_CCM_CBCDR_PERIPH2_CLK_SEL) {
|
||||||
|
@ -514,6 +517,11 @@ static u32 get_mmdc_ch0_clk(void)
|
||||||
freq = mxc_get_pll_pfd(PLL_BUS, 0);
|
freq = mxc_get_pll_pfd(PLL_BUS, 0);
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
|
if (is_mx6sl()) {
|
||||||
|
freq = mxc_get_pll_pfd(PLL_BUS, 2) >> 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
pmu_misc2_audio_div = PMU_MISC2_AUDIO_DIV(__raw_readl(&imx_ccm->pmu_misc2));
|
pmu_misc2_audio_div = PMU_MISC2_AUDIO_DIV(__raw_readl(&imx_ccm->pmu_misc2));
|
||||||
switch (pmu_misc2_audio_div) {
|
switch (pmu_misc2_audio_div) {
|
||||||
case 0:
|
case 0:
|
||||||
|
@ -620,16 +628,19 @@ void mxs_set_lcdclk(u32 base_addr, u32 freq)
|
||||||
|
|
||||||
debug("mxs_set_lcdclk, freq = %dKHz\n", freq);
|
debug("mxs_set_lcdclk, freq = %dKHz\n", freq);
|
||||||
|
|
||||||
if (!is_mx6sx() && !is_mx6ul() && !is_mx6ull()) {
|
if (!is_mx6sx() && !is_mx6ul() && !is_mx6ull() && !is_mx6sl() &&
|
||||||
|
!is_mx6sll()) {
|
||||||
debug("This chip not support lcd!\n");
|
debug("This chip not support lcd!\n");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (base_addr == LCDIF1_BASE_ADDR) {
|
if (!is_mx6sl()) {
|
||||||
reg = readl(&imx_ccm->cscdr2);
|
if (base_addr == LCDIF1_BASE_ADDR) {
|
||||||
/* Can't change clocks when clock not from pre-mux */
|
reg = readl(&imx_ccm->cscdr2);
|
||||||
if ((reg & MXC_CCM_CSCDR2_LCDIF1_CLK_SEL_MASK) != 0)
|
/* Can't change clocks when clock not from pre-mux */
|
||||||
return;
|
if ((reg & MXC_CCM_CSCDR2_LCDIF1_CLK_SEL_MASK) != 0)
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (is_mx6sx()) {
|
if (is_mx6sx()) {
|
||||||
|
@ -700,24 +711,44 @@ void mxs_set_lcdclk(u32 base_addr, u32 freq)
|
||||||
if (enable_pll_video(pll_div, pll_num, pll_denom, post_div))
|
if (enable_pll_video(pll_div, pll_num, pll_denom, post_div))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
/* Select pre-lcd clock to PLL5 and set pre divider */
|
enable_lcdif_clock(base_addr, 0);
|
||||||
clrsetbits_le32(&imx_ccm->cscdr2,
|
if (!is_mx6sl()) {
|
||||||
MXC_CCM_CSCDR2_LCDIF1_PRED_SEL_MASK |
|
/* Select pre-lcd clock to PLL5 and set pre divider */
|
||||||
MXC_CCM_CSCDR2_LCDIF1_PRE_DIV_MASK,
|
clrsetbits_le32(&imx_ccm->cscdr2,
|
||||||
(0x2 << MXC_CCM_CSCDR2_LCDIF1_PRED_SEL_OFFSET) |
|
MXC_CCM_CSCDR2_LCDIF1_PRED_SEL_MASK |
|
||||||
((pred - 1) <<
|
MXC_CCM_CSCDR2_LCDIF1_PRE_DIV_MASK,
|
||||||
MXC_CCM_CSCDR2_LCDIF1_PRE_DIV_OFFSET));
|
(0x2 << MXC_CCM_CSCDR2_LCDIF1_PRED_SEL_OFFSET) |
|
||||||
|
((pred - 1) <<
|
||||||
|
MXC_CCM_CSCDR2_LCDIF1_PRE_DIV_OFFSET));
|
||||||
|
|
||||||
/* Set the post divider */
|
/* Set the post divider */
|
||||||
clrsetbits_le32(&imx_ccm->cbcmr,
|
clrsetbits_le32(&imx_ccm->cbcmr,
|
||||||
MXC_CCM_CBCMR_LCDIF1_PODF_MASK,
|
MXC_CCM_CBCMR_LCDIF1_PODF_MASK,
|
||||||
((postd - 1) <<
|
((postd - 1) <<
|
||||||
MXC_CCM_CBCMR_LCDIF1_PODF_OFFSET));
|
MXC_CCM_CBCMR_LCDIF1_PODF_OFFSET));
|
||||||
|
} else {
|
||||||
|
/* Select pre-lcd clock to PLL5 and set pre divider */
|
||||||
|
clrsetbits_le32(&imx_ccm->cscdr2,
|
||||||
|
MXC_CCM_CSCDR2_LCDIF_PIX_CLK_SEL_MASK |
|
||||||
|
MXC_CCM_CSCDR2_LCDIF_PIX_PRE_DIV_MASK,
|
||||||
|
(0x2 << MXC_CCM_CSCDR2_LCDIF_PIX_CLK_SEL_OFFSET) |
|
||||||
|
((pred - 1) <<
|
||||||
|
MXC_CCM_CSCDR2_LCDIF_PIX_PRE_DIV_OFFSET));
|
||||||
|
|
||||||
|
/* Set the post divider */
|
||||||
|
clrsetbits_le32(&imx_ccm->cscmr1,
|
||||||
|
MXC_CCM_CSCMR1_LCDIF_PIX_PODF_MASK,
|
||||||
|
(((postd - 1)^0x6) <<
|
||||||
|
MXC_CCM_CSCMR1_LCDIF_PIX_PODF_OFFSET));
|
||||||
|
}
|
||||||
|
|
||||||
|
enable_lcdif_clock(base_addr, 1);
|
||||||
} else if (is_mx6sx()) {
|
} else if (is_mx6sx()) {
|
||||||
/* Setting LCDIF2 for i.MX6SX */
|
/* Setting LCDIF2 for i.MX6SX */
|
||||||
if (enable_pll_video(pll_div, pll_num, pll_denom, post_div))
|
if (enable_pll_video(pll_div, pll_num, pll_denom, post_div))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
enable_lcdif_clock(base_addr, 0);
|
||||||
/* Select pre-lcd clock to PLL5 and set pre divider */
|
/* Select pre-lcd clock to PLL5 and set pre divider */
|
||||||
clrsetbits_le32(&imx_ccm->cscdr2,
|
clrsetbits_le32(&imx_ccm->cscdr2,
|
||||||
MXC_CCM_CSCDR2_LCDIF2_PRED_SEL_MASK |
|
MXC_CCM_CSCDR2_LCDIF2_PRED_SEL_MASK |
|
||||||
|
@ -731,10 +762,12 @@ void mxs_set_lcdclk(u32 base_addr, u32 freq)
|
||||||
MXC_CCM_CSCMR1_LCDIF2_PODF_MASK,
|
MXC_CCM_CSCMR1_LCDIF2_PODF_MASK,
|
||||||
((postd - 1) <<
|
((postd - 1) <<
|
||||||
MXC_CCM_CSCMR1_LCDIF2_PODF_OFFSET));
|
MXC_CCM_CSCMR1_LCDIF2_PODF_OFFSET));
|
||||||
|
|
||||||
|
enable_lcdif_clock(base_addr, 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int enable_lcdif_clock(u32 base_addr)
|
int enable_lcdif_clock(u32 base_addr, bool enable)
|
||||||
{
|
{
|
||||||
u32 reg = 0;
|
u32 reg = 0;
|
||||||
u32 lcdif_clk_sel_mask, lcdif_ccgr3_mask;
|
u32 lcdif_clk_sel_mask, lcdif_ccgr3_mask;
|
||||||
|
@ -754,7 +787,7 @@ int enable_lcdif_clock(u32 base_addr)
|
||||||
MXC_CCM_CCGR3_DISP_AXI_MASK) :
|
MXC_CCM_CCGR3_DISP_AXI_MASK) :
|
||||||
(MXC_CCM_CCGR3_LCDIF1_PIX_MASK |
|
(MXC_CCM_CCGR3_LCDIF1_PIX_MASK |
|
||||||
MXC_CCM_CCGR3_DISP_AXI_MASK);
|
MXC_CCM_CCGR3_DISP_AXI_MASK);
|
||||||
} else if (is_mx6ul() || is_mx6ull()) {
|
} else if (is_mx6ul() || is_mx6ull() || is_mx6sll()) {
|
||||||
if (base_addr != LCDIF1_BASE_ADDR) {
|
if (base_addr != LCDIF1_BASE_ADDR) {
|
||||||
puts("Wrong LCD interface!\n");
|
puts("Wrong LCD interface!\n");
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
@ -762,23 +795,59 @@ int enable_lcdif_clock(u32 base_addr)
|
||||||
/* Set to pre-mux clock at default */
|
/* Set to pre-mux clock at default */
|
||||||
lcdif_clk_sel_mask = MXC_CCM_CSCDR2_LCDIF1_CLK_SEL_MASK;
|
lcdif_clk_sel_mask = MXC_CCM_CSCDR2_LCDIF1_CLK_SEL_MASK;
|
||||||
lcdif_ccgr3_mask = MXC_CCM_CCGR3_LCDIF1_PIX_MASK;
|
lcdif_ccgr3_mask = MXC_CCM_CCGR3_LCDIF1_PIX_MASK;
|
||||||
|
} else if (is_mx6sl()) {
|
||||||
|
if (base_addr != LCDIF1_BASE_ADDR) {
|
||||||
|
puts("Wrong LCD interface!\n");
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
|
||||||
|
reg = readl(&imx_ccm->CCGR3);
|
||||||
|
reg &= ~(MXC_CCM_CCGR3_LCDIF_AXI_MASK |
|
||||||
|
MXC_CCM_CCGR3_LCDIF_PIX_MASK);
|
||||||
|
writel(reg, &imx_ccm->CCGR3);
|
||||||
|
|
||||||
|
if (enable) {
|
||||||
|
reg = readl(&imx_ccm->cscdr3);
|
||||||
|
reg &= ~MXC_CCM_CSCDR3_LCDIF_AXI_CLK_SEL_MASK;
|
||||||
|
reg |= 1 << MXC_CCM_CSCDR3_LCDIF_AXI_CLK_SEL_OFFSET;
|
||||||
|
writel(reg, &imx_ccm->cscdr3);
|
||||||
|
|
||||||
|
reg = readl(&imx_ccm->CCGR3);
|
||||||
|
reg |= MXC_CCM_CCGR3_LCDIF_AXI_MASK |
|
||||||
|
MXC_CCM_CCGR3_LCDIF_PIX_MASK;
|
||||||
|
writel(reg, &imx_ccm->CCGR3);
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
} else {
|
} else {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
reg = readl(&imx_ccm->cscdr2);
|
/* Gate LCDIF clock first */
|
||||||
reg &= ~lcdif_clk_sel_mask;
|
|
||||||
writel(reg, &imx_ccm->cscdr2);
|
|
||||||
|
|
||||||
/* Enable the LCDIF pix clock */
|
|
||||||
reg = readl(&imx_ccm->CCGR3);
|
reg = readl(&imx_ccm->CCGR3);
|
||||||
reg |= lcdif_ccgr3_mask;
|
reg &= ~lcdif_ccgr3_mask;
|
||||||
writel(reg, &imx_ccm->CCGR3);
|
writel(reg, &imx_ccm->CCGR3);
|
||||||
|
|
||||||
reg = readl(&imx_ccm->CCGR2);
|
reg = readl(&imx_ccm->CCGR2);
|
||||||
reg |= MXC_CCM_CCGR2_LCD_MASK;
|
reg &= ~MXC_CCM_CCGR2_LCD_MASK;
|
||||||
writel(reg, &imx_ccm->CCGR2);
|
writel(reg, &imx_ccm->CCGR2);
|
||||||
|
|
||||||
|
if (enable) {
|
||||||
|
/* Select pre-mux */
|
||||||
|
reg = readl(&imx_ccm->cscdr2);
|
||||||
|
reg &= ~lcdif_clk_sel_mask;
|
||||||
|
writel(reg, &imx_ccm->cscdr2);
|
||||||
|
|
||||||
|
/* Enable the LCDIF pix clock */
|
||||||
|
reg = readl(&imx_ccm->CCGR3);
|
||||||
|
reg |= lcdif_ccgr3_mask;
|
||||||
|
writel(reg, &imx_ccm->CCGR3);
|
||||||
|
|
||||||
|
reg = readl(&imx_ccm->CCGR2);
|
||||||
|
reg |= MXC_CCM_CCGR2_LCD_MASK;
|
||||||
|
writel(reg, &imx_ccm->CCGR2);
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -916,6 +985,16 @@ static u32 get_usdhc_clk(u32 port)
|
||||||
u32 cscmr1 = __raw_readl(&imx_ccm->cscmr1);
|
u32 cscmr1 = __raw_readl(&imx_ccm->cscmr1);
|
||||||
u32 cscdr1 = __raw_readl(&imx_ccm->cscdr1);
|
u32 cscdr1 = __raw_readl(&imx_ccm->cscdr1);
|
||||||
|
|
||||||
|
if (is_mx6ul() || is_mx6ull()) {
|
||||||
|
if (port > 1)
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (is_mx6sll()) {
|
||||||
|
if (port > 2)
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
switch (port) {
|
switch (port) {
|
||||||
case 0:
|
case 0:
|
||||||
usdhc_podf = (cscdr1 & MXC_CCM_CSCDR1_USDHC1_PODF_MASK) >>
|
usdhc_podf = (cscdr1 & MXC_CCM_CSCDR1_USDHC1_PODF_MASK) >>
|
||||||
|
@ -1079,7 +1158,7 @@ void hab_caam_clock_enable(unsigned char enable)
|
||||||
{
|
{
|
||||||
u32 reg;
|
u32 reg;
|
||||||
|
|
||||||
if (is_mx6ull()) {
|
if (is_mx6ull() || is_mx6sll()) {
|
||||||
/* CG5, DCP clock */
|
/* CG5, DCP clock */
|
||||||
reg = __raw_readl(&imx_ccm->CCGR0);
|
reg = __raw_readl(&imx_ccm->CCGR0);
|
||||||
if (enable)
|
if (enable)
|
||||||
|
|
|
@ -293,9 +293,15 @@ dtb-$(CONFIG_VF610) += vf500-colibri.dtb \
|
||||||
pcm052.dtb \
|
pcm052.dtb \
|
||||||
bk4r1.dtb
|
bk4r1.dtb
|
||||||
|
|
||||||
|
dtb-$(CONFIG_MX53) += imx53-cx9020.dtb
|
||||||
|
|
||||||
dtb-$(CONFIG_MX6) += imx6ull-14x14-evk.dtb \
|
dtb-$(CONFIG_MX6) += imx6ull-14x14-evk.dtb \
|
||||||
|
imx6sll-evk.dtb \
|
||||||
imx6dl-icore.dtb \
|
imx6dl-icore.dtb \
|
||||||
imx6q-icore.dtb
|
imx6dl-icore-rqs.dtb \
|
||||||
|
imx6q-icore.dtb \
|
||||||
|
imx6q-icore-rqs.dtb \
|
||||||
|
imx6ul-geam-kit.dtb
|
||||||
|
|
||||||
dtb-$(CONFIG_MX7) += imx7-colibri.dtb
|
dtb-$(CONFIG_MX7) += imx7-colibri.dtb
|
||||||
|
|
||||||
|
|
190
arch/arm/dts/imx53-cx9020.dts
Normal file
190
arch/arm/dts/imx53-cx9020.dts
Normal file
|
@ -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";
|
||||||
|
};
|
1189
arch/arm/dts/imx53-pinfunc.h
Normal file
1189
arch/arm/dts/imx53-pinfunc.h
Normal file
File diff suppressed because it is too large
Load diff
110
arch/arm/dts/imx53.dtsi
Normal file
110
arch/arm/dts/imx53.dtsi
Normal file
|
@ -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";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
50
arch/arm/dts/imx6dl-icore-rqs.dts
Normal file
50
arch/arm/dts/imx6dl-icore-rqs.dts
Normal file
|
@ -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";
|
||||||
|
};
|
50
arch/arm/dts/imx6q-icore-rqs.dts
Normal file
50
arch/arm/dts/imx6q-icore-rqs.dts
Normal file
|
@ -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";
|
||||||
|
};
|
170
arch/arm/dts/imx6qdl-icore-rqs.dtsi
Normal file
170
arch/arm/dts/imx6qdl-icore-rqs.dtsi
Normal file
|
@ -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
|
||||||
|
>;
|
||||||
|
};
|
||||||
|
};
|
|
@ -75,6 +75,14 @@
|
||||||
assigned-clock-parents = <&clks IMX6QDL_CLK_OSC>;
|
assigned-clock-parents = <&clks IMX6QDL_CLK_OSC>;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
&fec {
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&pinctrl_enet>;
|
||||||
|
phy-reset-gpios = <&gpio7 12 GPIO_ACTIVE_LOW>;
|
||||||
|
phy-mode = "rmii";
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
&gpmi {
|
&gpmi {
|
||||||
pinctrl-names = "default";
|
pinctrl-names = "default";
|
||||||
pinctrl-0 = <&pinctrl_gpmi_nand>;
|
pinctrl-0 = <&pinctrl_gpmi_nand>;
|
||||||
|
@ -118,6 +126,22 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
&iomuxc {
|
&iomuxc {
|
||||||
|
pinctrl_enet: enetgrp {
|
||||||
|
fsl,pins = <
|
||||||
|
MX6QDL_PAD_ENET_CRS_DV__ENET_RX_EN 0x1b0b0
|
||||||
|
MX6QDL_PAD_GPIO_16__ENET_REF_CLK 0x1b0b1
|
||||||
|
MX6QDL_PAD_ENET_TX_EN__ENET_TX_EN 0x1b0b0
|
||||||
|
MX6QDL_PAD_ENET_RXD1__ENET_RX_DATA1 0x1b0b0
|
||||||
|
MX6QDL_PAD_ENET_RXD0__ENET_RX_DATA0 0x1b0b0
|
||||||
|
MX6QDL_PAD_ENET_TXD1__ENET_TX_DATA1 0x1b0b0
|
||||||
|
MX6QDL_PAD_ENET_TXD0__ENET_TX_DATA0 0x1b0b0
|
||||||
|
MX6QDL_PAD_ENET_MDC__ENET_MDC 0x1b0b0
|
||||||
|
MX6QDL_PAD_ENET_MDIO__ENET_MDIO 0x1b0b0
|
||||||
|
MX6QDL_PAD_ENET_REF_CLK__GPIO1_IO23 0x1b0b0
|
||||||
|
MX6QDL_PAD_GPIO_17__GPIO7_IO12 0x1b0b0
|
||||||
|
>;
|
||||||
|
};
|
||||||
|
|
||||||
pinctrl_flexcan1: flexcan1grp {
|
pinctrl_flexcan1: flexcan1grp {
|
||||||
fsl,pins = <
|
fsl,pins = <
|
||||||
MX6QDL_PAD_KEY_ROW2__FLEXCAN1_RX 0x1b020
|
MX6QDL_PAD_KEY_ROW2__FLEXCAN1_RX 0x1b020
|
||||||
|
|
801
arch/arm/dts/imx6sll-evk.dts
Normal file
801
arch/arm/dts/imx6sll-evk.dts
Normal file
|
@ -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";
|
||||||
|
};
|
882
arch/arm/dts/imx6sll-pinfunc.h
Normal file
882
arch/arm/dts/imx6sll-pinfunc.h
Normal file
|
@ -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 */
|
859
arch/arm/dts/imx6sll.dtsi
Normal file
859
arch/arm/dts/imx6sll.dtsi
Normal file
|
@ -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";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
168
arch/arm/dts/imx6ul-geam-kit.dts
Normal file
168
arch/arm/dts/imx6ul-geam-kit.dts
Normal file
|
@ -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
|
||||||
|
>;
|
||||||
|
};
|
||||||
|
};
|
942
arch/arm/dts/imx6ul.dtsi
Normal file
942
arch/arm/dts/imx6ul.dtsi
Normal file
|
@ -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";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
|
@ -35,6 +35,7 @@
|
||||||
compatible = "fsl,aips-bus", "simple-bus";
|
compatible = "fsl,aips-bus", "simple-bus";
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <1>;
|
#size-cells = <1>;
|
||||||
|
reg = <0x40000000 0x00070000>;
|
||||||
ranges;
|
ranges;
|
||||||
|
|
||||||
uart0: serial@40027000 {
|
uart0: serial@40027000 {
|
||||||
|
@ -130,6 +131,7 @@
|
||||||
compatible = "fsl,aips-bus", "simple-bus";
|
compatible = "fsl,aips-bus", "simple-bus";
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <1>;
|
#size-cells = <1>;
|
||||||
|
reg = <0x40080000 0x0007f000>;
|
||||||
ranges;
|
ranges;
|
||||||
|
|
||||||
uart4: serial@400a9000 {
|
uart4: serial@400a9000 {
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
#include <asm/armv7.h>
|
#include <asm/armv7.h>
|
||||||
#include <asm/pl310.h>
|
#include <asm/pl310.h>
|
||||||
#include <asm/io.h>
|
#include <asm/io.h>
|
||||||
|
#include <asm/imx-common/sys_proto.h>
|
||||||
|
|
||||||
#ifndef CONFIG_SYS_DCACHE_OFF
|
#ifndef CONFIG_SYS_DCACHE_OFF
|
||||||
void enable_caches(void)
|
void enable_caches(void)
|
||||||
|
@ -39,6 +40,7 @@ void enable_caches(void)
|
||||||
void v7_outer_cache_enable(void)
|
void v7_outer_cache_enable(void)
|
||||||
{
|
{
|
||||||
struct pl310_regs *const pl310 = (struct pl310_regs *)L2_PL310_BASE;
|
struct pl310_regs *const pl310 = (struct pl310_regs *)L2_PL310_BASE;
|
||||||
|
struct iomuxc *iomux = (struct iomuxc *)IOMUXC_BASE_ADDR;
|
||||||
unsigned int val;
|
unsigned int val;
|
||||||
|
|
||||||
|
|
||||||
|
@ -55,15 +57,14 @@ void v7_outer_cache_enable(void)
|
||||||
*/
|
*/
|
||||||
setbits_le32(&pl310->pl310_aux_ctrl, L310_SHARED_ATT_OVERRIDE_ENABLE);
|
setbits_le32(&pl310->pl310_aux_ctrl, L310_SHARED_ATT_OVERRIDE_ENABLE);
|
||||||
|
|
||||||
#if defined CONFIG_MX6SL
|
if (is_mx6sl() || is_mx6sll()) {
|
||||||
struct iomuxc *iomux = (struct iomuxc *)IOMUXC_BASE_ADDR;
|
val = readl(&iomux->gpr[11]);
|
||||||
val = readl(&iomux->gpr[11]);
|
if (val & IOMUXC_GPR11_L2CACHE_AS_OCRAM) {
|
||||||
if (val & IOMUXC_GPR11_L2CACHE_AS_OCRAM) {
|
/* L2 cache configured as OCRAM, reset it */
|
||||||
/* L2 cache configured as OCRAM, reset it */
|
val &= ~IOMUXC_GPR11_L2CACHE_AS_OCRAM;
|
||||||
val &= ~IOMUXC_GPR11_L2CACHE_AS_OCRAM;
|
writel(val, &iomux->gpr[11]);
|
||||||
writel(val, &iomux->gpr[11]);
|
}
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
writel(0x132, &pl310->pl310_tag_latency_ctrl);
|
writel(0x132, &pl310->pl310_tag_latency_ctrl);
|
||||||
writel(0x132, &pl310->pl310_data_latency_ctrl);
|
writel(0x132, &pl310->pl310_data_latency_ctrl);
|
||||||
|
|
|
@ -155,6 +155,8 @@ const char *get_imx_type(u32 imxtype)
|
||||||
return "6SOLO"; /* Solo version of the mx6 */
|
return "6SOLO"; /* Solo version of the mx6 */
|
||||||
case MXC_CPU_MX6SL:
|
case MXC_CPU_MX6SL:
|
||||||
return "6SL"; /* Solo-Lite version of the mx6 */
|
return "6SL"; /* Solo-Lite version of the mx6 */
|
||||||
|
case MXC_CPU_MX6SLL:
|
||||||
|
return "6SLL"; /* SLL version of the mx6 */
|
||||||
case MXC_CPU_MX6SX:
|
case MXC_CPU_MX6SX:
|
||||||
return "6SX"; /* SoloX version of the mx6 */
|
return "6SX"; /* SoloX version of the mx6 */
|
||||||
case MXC_CPU_MX6UL:
|
case MXC_CPU_MX6UL:
|
||||||
|
|
|
@ -31,7 +31,7 @@ void imx_iomux_v3_setup_pad(iomux_v3_cfg_t pad)
|
||||||
(pad & MUX_PAD_CTRL_OFS_MASK) >> MUX_PAD_CTRL_OFS_SHIFT;
|
(pad & MUX_PAD_CTRL_OFS_MASK) >> MUX_PAD_CTRL_OFS_SHIFT;
|
||||||
u32 pad_ctrl = (pad & MUX_PAD_CTRL_MASK) >> MUX_PAD_CTRL_SHIFT;
|
u32 pad_ctrl = (pad & MUX_PAD_CTRL_MASK) >> MUX_PAD_CTRL_SHIFT;
|
||||||
|
|
||||||
#if defined CONFIG_MX6SL
|
#if defined(CONFIG_MX6SL) || defined(CONFIG_MX6SLL)
|
||||||
/* Check whether LVE bit needs to be set */
|
/* Check whether LVE bit needs to be set */
|
||||||
if (pad_ctrl & PAD_CTL_LVE) {
|
if (pad_ctrl & PAD_CTL_LVE) {
|
||||||
pad_ctrl &= ~PAD_CTL_LVE;
|
pad_ctrl &= ~PAD_CTL_LVE;
|
||||||
|
@ -51,7 +51,7 @@ void imx_iomux_v3_setup_pad(iomux_v3_cfg_t pad)
|
||||||
sel_input_ofs += IOMUX_LPSR_SEL_INPUT_OFS;
|
sel_input_ofs += IOMUX_LPSR_SEL_INPUT_OFS;
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
if (is_mx6ull()) {
|
if (is_mx6ull() || is_mx6sll()) {
|
||||||
if (lpsr == IOMUX_CONFIG_LPSR) {
|
if (lpsr == IOMUX_CONFIG_LPSR) {
|
||||||
base = (void *)IOMUXC_SNVS_BASE_ADDR;
|
base = (void *)IOMUXC_SNVS_BASE_ADDR;
|
||||||
mux_mode &= ~IOMUX_CONFIG_LPSR;
|
mux_mode &= ~IOMUX_CONFIG_LPSR;
|
||||||
|
@ -60,7 +60,7 @@ void imx_iomux_v3_setup_pad(iomux_v3_cfg_t pad)
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (is_soc_type(MXC_SOC_MX7) || is_cpu_type(MXC_CPU_MX6ULL) || mux_ctrl_ofs)
|
if (is_mx7() || is_mx6ull() || is_mx6sll() || mux_ctrl_ofs)
|
||||||
__raw_writel(mux_mode, base + mux_ctrl_ofs);
|
__raw_writel(mux_mode, base + mux_ctrl_ofs);
|
||||||
|
|
||||||
if (sel_input_ofs)
|
if (sel_input_ofs)
|
||||||
|
@ -73,6 +73,10 @@ void imx_iomux_v3_setup_pad(iomux_v3_cfg_t pad)
|
||||||
#else
|
#else
|
||||||
if (!(pad_ctrl & NO_PAD_CTRL) && pad_ctrl_ofs)
|
if (!(pad_ctrl & NO_PAD_CTRL) && pad_ctrl_ofs)
|
||||||
__raw_writel(pad_ctrl, base + pad_ctrl_ofs);
|
__raw_writel(pad_ctrl, base + pad_ctrl_ofs);
|
||||||
|
#if defined(CONFIG_MX6SLL)
|
||||||
|
else if ((pad_ctrl & NO_PAD_CTRL) && pad_ctrl_ofs)
|
||||||
|
clrbits_le32(base + pad_ctrl_ofs, PAD_CTL_IPD_BIT);
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef CONFIG_IOMUX_LPSR
|
#ifdef CONFIG_IOMUX_LPSR
|
||||||
|
|
|
@ -14,9 +14,6 @@
|
||||||
#include <spl.h>
|
#include <spl.h>
|
||||||
|
|
||||||
#if defined(CONFIG_MX6)
|
#if defined(CONFIG_MX6)
|
||||||
#define MX6_MMC_PORT_MASK GENMASK(12, 11)
|
|
||||||
#define MX6_MMC_PORT_2 BIT(11)
|
|
||||||
|
|
||||||
/* determine boot device from SRC_SBMR1 (BOOT_CFG[4:1]) or SRC_GPR9 register */
|
/* determine boot device from SRC_SBMR1 (BOOT_CFG[4:1]) or SRC_GPR9 register */
|
||||||
u32 spl_boot_device(void)
|
u32 spl_boot_device(void)
|
||||||
{
|
{
|
||||||
|
@ -58,11 +55,10 @@ u32 spl_boot_device(void)
|
||||||
/* SD/eSD: 8.5.3, Table 8-15 */
|
/* SD/eSD: 8.5.3, Table 8-15 */
|
||||||
case 0x4:
|
case 0x4:
|
||||||
case 0x5:
|
case 0x5:
|
||||||
|
return BOOT_DEVICE_MMC1;
|
||||||
/* MMC/eMMC: 8.5.3 */
|
/* MMC/eMMC: 8.5.3 */
|
||||||
case 0x6:
|
case 0x6:
|
||||||
case 0x7:
|
case 0x7:
|
||||||
if ((reg & MX6_MMC_PORT_MASK) == MX6_MMC_PORT_2)
|
|
||||||
return BOOT_DEVICE_MMC2;
|
|
||||||
return BOOT_DEVICE_MMC1;
|
return BOOT_DEVICE_MMC1;
|
||||||
/* NAND Flash: 8.5.2 */
|
/* NAND Flash: 8.5.2 */
|
||||||
case 0x8 ... 0xf:
|
case 0x8 ... 0xf:
|
||||||
|
|
|
@ -45,7 +45,7 @@ static inline int gpt_has_clk_source_osc(void)
|
||||||
#if defined(CONFIG_MX6)
|
#if defined(CONFIG_MX6)
|
||||||
if (((is_mx6dq()) && (soc_rev() > CHIP_REV_1_0)) ||
|
if (((is_mx6dq()) && (soc_rev() > CHIP_REV_1_0)) ||
|
||||||
is_mx6dqp() || is_mx6sdl() || is_mx6sx() || is_mx6ul() ||
|
is_mx6dqp() || is_mx6sdl() || is_mx6sx() || is_mx6ul() ||
|
||||||
is_mx6ull())
|
is_mx6ull() || is_mx6sll())
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -84,8 +84,12 @@ int timer_init(void)
|
||||||
if (gpt_has_clk_source_osc()) {
|
if (gpt_has_clk_source_osc()) {
|
||||||
i |= GPTCR_CLKSOURCE_OSC | GPTCR_TEN;
|
i |= GPTCR_CLKSOURCE_OSC | GPTCR_TEN;
|
||||||
|
|
||||||
/* For DL/S, SX, UL, ULL set 24Mhz OSC Enable bit and prescaler */
|
/*
|
||||||
if (is_mx6sdl() || is_mx6sx() || is_mx6ul() || is_mx6ull()) {
|
* For DL/S, SX, UL, ULL, SLL set 24Mhz OSC
|
||||||
|
* Enable bit and prescaler
|
||||||
|
*/
|
||||||
|
if (is_mx6sdl() || is_mx6sx() || is_mx6ul() || is_mx6ull() ||
|
||||||
|
is_mx6sll()) {
|
||||||
i |= GPTCR_24MEN;
|
i |= GPTCR_24MEN;
|
||||||
|
|
||||||
/* Produce 3Mhz clock */
|
/* Produce 3Mhz clock */
|
||||||
|
|
|
@ -19,7 +19,8 @@
|
||||||
#define MXC_CPU_MX6UL 0x64
|
#define MXC_CPU_MX6UL 0x64
|
||||||
#define MXC_CPU_MX6ULL 0x65
|
#define MXC_CPU_MX6ULL 0x65
|
||||||
#define MXC_CPU_MX6SOLO 0x66 /* dummy */
|
#define MXC_CPU_MX6SOLO 0x66 /* dummy */
|
||||||
#define MXC_CPU_MX6D 0x67
|
#define MXC_CPU_MX6SLL 0x67
|
||||||
|
#define MXC_CPU_MX6D 0x6A
|
||||||
#define MXC_CPU_MX6DP 0x68
|
#define MXC_CPU_MX6DP 0x68
|
||||||
#define MXC_CPU_MX6QP 0x69
|
#define MXC_CPU_MX6QP 0x69
|
||||||
#define MXC_CPU_MX7S 0x71 /* dummy ID */
|
#define MXC_CPU_MX7S 0x71 /* dummy ID */
|
||||||
|
|
|
@ -74,7 +74,7 @@ int enable_spi_clk(unsigned char enable, unsigned spi_num);
|
||||||
void enable_ipu_clock(void);
|
void enable_ipu_clock(void);
|
||||||
int enable_fec_anatop_clock(int fec_id, enum enet_freq freq);
|
int enable_fec_anatop_clock(int fec_id, enum enet_freq freq);
|
||||||
void enable_enet_clk(unsigned char enable);
|
void enable_enet_clk(unsigned char enable);
|
||||||
int enable_lcdif_clock(u32 base_addr);
|
int enable_lcdif_clock(u32 base_addr, bool enable);
|
||||||
void enable_qspi_clk(int qspi_num);
|
void enable_qspi_clk(int qspi_num);
|
||||||
void enable_thermal_clk(void);
|
void enable_thermal_clk(void);
|
||||||
void mxs_set_lcdclk(u32 base_addr, u32 freq);
|
void mxs_set_lcdclk(u32 base_addr, u32 freq);
|
||||||
|
|
|
@ -307,6 +307,9 @@ struct mxc_ccm_reg {
|
||||||
/* LCFIF2_PODF on i.MX6SX */
|
/* LCFIF2_PODF on i.MX6SX */
|
||||||
#define MXC_CCM_CSCMR1_LCDIF2_PODF_MASK (0x7 << 20)
|
#define MXC_CCM_CSCMR1_LCDIF2_PODF_MASK (0x7 << 20)
|
||||||
#define MXC_CCM_CSCMR1_LCDIF2_PODF_OFFSET 20
|
#define MXC_CCM_CSCMR1_LCDIF2_PODF_OFFSET 20
|
||||||
|
/* LCDIF_PIX_PODF on i.MX6SL */
|
||||||
|
#define MXC_CCM_CSCMR1_LCDIF_PIX_PODF_MASK (0x7 << 20)
|
||||||
|
#define MXC_CCM_CSCMR1_LCDIF_PIX_PODF_OFFSET 20
|
||||||
/* ACLK_EMI on i.MX6DQ/SDL/DQP */
|
/* ACLK_EMI on i.MX6DQ/SDL/DQP */
|
||||||
#define MXC_CCM_CSCMR1_ACLK_EMI_PODF_MASK (0x7 << 20)
|
#define MXC_CCM_CSCMR1_ACLK_EMI_PODF_MASK (0x7 << 20)
|
||||||
#define MXC_CCM_CSCMR1_ACLK_EMI_PODF_OFFSET 20
|
#define MXC_CCM_CSCMR1_ACLK_EMI_PODF_OFFSET 20
|
||||||
|
@ -529,6 +532,12 @@ struct mxc_ccm_reg {
|
||||||
#define MXC_CCM_CSCDR2_LCDIF2_CLK_SEL_MASK (0x7 << 0)
|
#define MXC_CCM_CSCDR2_LCDIF2_CLK_SEL_MASK (0x7 << 0)
|
||||||
#define MXC_CCM_CSCDR2_LCDIF2_CLK_SEL_OFFSET 0
|
#define MXC_CCM_CSCDR2_LCDIF2_CLK_SEL_OFFSET 0
|
||||||
|
|
||||||
|
/*LCD on i.MX6SL */
|
||||||
|
#define MXC_CCM_CSCDR2_LCDIF_PIX_CLK_SEL_MASK (0x7 << 6)
|
||||||
|
#define MXC_CCM_CSCDR2_LCDIF_PIX_CLK_SEL_OFFSET 6
|
||||||
|
#define MXC_CCM_CSCDR2_LCDIF_PIX_PRE_DIV_MASK (0x7 << 3)
|
||||||
|
#define MXC_CCM_CSCDR2_LCDIF_PIX_PRE_DIV_OFFSET 3
|
||||||
|
|
||||||
/* All IPU2_DI1 are LCDIF1 on MX6SX */
|
/* All IPU2_DI1 are LCDIF1 on MX6SX */
|
||||||
#define MXC_CCM_CHSCCDR_IPU2_DI1_PRE_CLK_SEL_MASK (0x7 << 15)
|
#define MXC_CCM_CHSCCDR_IPU2_DI1_PRE_CLK_SEL_MASK (0x7 << 15)
|
||||||
#define MXC_CCM_CHSCCDR_IPU2_DI1_PRE_CLK_SEL_OFFSET 15
|
#define MXC_CCM_CHSCCDR_IPU2_DI1_PRE_CLK_SEL_OFFSET 15
|
||||||
|
@ -554,6 +563,12 @@ struct mxc_ccm_reg {
|
||||||
#define MXC_CCM_CSCDR3_IPU1_HSP_CLK_SEL_MASK (0x3 << 9)
|
#define MXC_CCM_CSCDR3_IPU1_HSP_CLK_SEL_MASK (0x3 << 9)
|
||||||
#define MXC_CCM_CSCDR3_IPU1_HSP_CLK_SEL_OFFSET 9
|
#define MXC_CCM_CSCDR3_IPU1_HSP_CLK_SEL_OFFSET 9
|
||||||
|
|
||||||
|
/* For i.MX6SL */
|
||||||
|
#define MXC_CCM_CSCDR3_LCDIF_AXI_PODF_MASK (0x7 << 16)
|
||||||
|
#define MXC_CCM_CSCDR3_LCDIF_AXI_PODF_OFFSET 16
|
||||||
|
#define MXC_CCM_CSCDR3_LCDIF_AXI_CLK_SEL_MASK (0x3 << 14)
|
||||||
|
#define MXC_CCM_CSCDR3_LCDIF_AXI_CLK_SEL_OFFSET 14
|
||||||
|
|
||||||
/* Define the bits in register CDHIPR */
|
/* Define the bits in register CDHIPR */
|
||||||
#define MXC_CCM_CDHIPR_ARM_PODF_BUSY (1 << 16)
|
#define MXC_CCM_CDHIPR_ARM_PODF_BUSY (1 << 16)
|
||||||
#define MXC_CCM_CDHIPR_PERIPH_CLK_SEL_BUSY (1 << 5)
|
#define MXC_CCM_CDHIPR_PERIPH_CLK_SEL_BUSY (1 << 5)
|
||||||
|
@ -783,6 +798,12 @@ struct mxc_ccm_reg {
|
||||||
#define MXC_CCM_CCGR3_QSPI_OFFSET 14
|
#define MXC_CCM_CCGR3_QSPI_OFFSET 14
|
||||||
#define MXC_CCM_CCGR3_QSPI_MASK (3 << MXC_CCM_CCGR3_QSPI_OFFSET)
|
#define MXC_CCM_CCGR3_QSPI_MASK (3 << MXC_CCM_CCGR3_QSPI_OFFSET)
|
||||||
|
|
||||||
|
/* i.MX6SL */
|
||||||
|
#define MXC_CCM_CCGR3_LCDIF_AXI_OFFSET 6
|
||||||
|
#define MXC_CCM_CCGR3_LCDIF_AXI_MASK (3 << MXC_CCM_CCGR3_LCDIF_AXI_OFFSET)
|
||||||
|
#define MXC_CCM_CCGR3_LCDIF_PIX_OFFSET 8
|
||||||
|
#define MXC_CCM_CCGR3_LCDIF_PIX_MASK (3 << MXC_CCM_CCGR3_LCDIF_PIX_OFFSET)
|
||||||
|
|
||||||
#define MXC_CCM_CCGR3_IPU1_IPU_OFFSET 0
|
#define MXC_CCM_CCGR3_IPU1_IPU_OFFSET 0
|
||||||
#define MXC_CCM_CCGR3_IPU1_IPU_MASK (3 << MXC_CCM_CCGR3_IPU1_IPU_OFFSET)
|
#define MXC_CCM_CCGR3_IPU1_IPU_MASK (3 << MXC_CCM_CCGR3_IPU1_IPU_OFFSET)
|
||||||
#define MXC_CCM_CCGR3_IPU1_IPU_DI0_OFFSET 2
|
#define MXC_CCM_CCGR3_IPU1_IPU_DI0_OFFSET 2
|
||||||
|
|
|
@ -26,7 +26,7 @@
|
||||||
#define APBH_DMA_ARB_END_ADDR 0x0180BFFF
|
#define APBH_DMA_ARB_END_ADDR 0x0180BFFF
|
||||||
#define M4_BOOTROM_BASE_ADDR 0x007F8000
|
#define M4_BOOTROM_BASE_ADDR 0x007F8000
|
||||||
|
|
||||||
#else
|
#elif !defined(CONFIG_MX6SLL)
|
||||||
#define CAAM_ARB_BASE_ADDR 0x00100000
|
#define CAAM_ARB_BASE_ADDR 0x00100000
|
||||||
#define CAAM_ARB_END_ADDR 0x00103FFF
|
#define CAAM_ARB_END_ADDR 0x00103FFF
|
||||||
#define APBH_DMA_ARB_BASE_ADDR 0x00110000
|
#define APBH_DMA_ARB_BASE_ADDR 0x00110000
|
||||||
|
@ -46,13 +46,9 @@
|
||||||
#define MXS_BCH_BASE (APBH_DMA_ARB_BASE_ADDR + 0x04000)
|
#define MXS_BCH_BASE (APBH_DMA_ARB_BASE_ADDR + 0x04000)
|
||||||
|
|
||||||
/* GPV - PL301 configuration ports */
|
/* GPV - PL301 configuration ports */
|
||||||
#if (defined(CONFIG_MX6SL) || defined(CONFIG_MX6SX) || defined(CONFIG_MX6UL))
|
#if (defined(CONFIG_MX6SX) || defined(CONFIG_MX6UL) || \
|
||||||
|
defined(CONFIG_MX6SL) || defined(CONFIG_MX6SLL))
|
||||||
#define GPV2_BASE_ADDR 0x00D00000
|
#define GPV2_BASE_ADDR 0x00D00000
|
||||||
#else
|
|
||||||
#define GPV2_BASE_ADDR 0x00200000
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if (defined(CONFIG_MX6SX) || defined(CONFIG_MX6UL))
|
|
||||||
#define GPV3_BASE_ADDR 0x00E00000
|
#define GPV3_BASE_ADDR 0x00E00000
|
||||||
#define GPV4_BASE_ADDR 0x00F00000
|
#define GPV4_BASE_ADDR 0x00F00000
|
||||||
#define GPV5_BASE_ADDR 0x01000000
|
#define GPV5_BASE_ADDR 0x01000000
|
||||||
|
@ -61,6 +57,7 @@
|
||||||
#define PCIE_ARB_END_ADDR 0x08FFFFFF
|
#define PCIE_ARB_END_ADDR 0x08FFFFFF
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
#define GPV2_BASE_ADDR 0x00200000
|
||||||
#define GPV3_BASE_ADDR 0x00300000
|
#define GPV3_BASE_ADDR 0x00300000
|
||||||
#define GPV4_BASE_ADDR 0x00800000
|
#define GPV4_BASE_ADDR 0x00800000
|
||||||
#define PCIE_ARB_BASE_ADDR 0x01000000
|
#define PCIE_ARB_BASE_ADDR 0x01000000
|
||||||
|
@ -96,7 +93,7 @@
|
||||||
#define WEIM_ARB_END_ADDR 0x57FFFFFF
|
#define WEIM_ARB_END_ADDR 0x57FFFFFF
|
||||||
#define QSPI0_AMBA_BASE 0x60000000
|
#define QSPI0_AMBA_BASE 0x60000000
|
||||||
#define QSPI0_AMBA_END 0x6FFFFFFF
|
#define QSPI0_AMBA_END 0x6FFFFFFF
|
||||||
#else
|
#elif !defined(CONFIG_MX6SLL)
|
||||||
#define SATA_ARB_BASE_ADDR 0x02200000
|
#define SATA_ARB_BASE_ADDR 0x02200000
|
||||||
#define SATA_ARB_END_ADDR 0x02203FFF
|
#define SATA_ARB_END_ADDR 0x02203FFF
|
||||||
#define OPENVG_ARB_BASE_ADDR 0x02204000
|
#define OPENVG_ARB_BASE_ADDR 0x02204000
|
||||||
|
@ -111,7 +108,8 @@
|
||||||
#define WEIM_ARB_END_ADDR 0x0FFFFFFF
|
#define WEIM_ARB_END_ADDR 0x0FFFFFFF
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if (defined(CONFIG_MX6SL) || defined(CONFIG_MX6SX) || defined(CONFIG_MX6UL))
|
#if (defined(CONFIG_MX6SLL) || defined(CONFIG_MX6SL) || \
|
||||||
|
defined(CONFIG_MX6SX) || defined(CONFIG_MX6UL))
|
||||||
#define MMDC0_ARB_BASE_ADDR 0x80000000
|
#define MMDC0_ARB_BASE_ADDR 0x80000000
|
||||||
#define MMDC0_ARB_END_ADDR 0xFFFFFFFF
|
#define MMDC0_ARB_END_ADDR 0xFFFFFFFF
|
||||||
#define MMDC1_ARB_BASE_ADDR 0xC0000000
|
#define MMDC1_ARB_BASE_ADDR 0xC0000000
|
||||||
|
@ -141,19 +139,21 @@
|
||||||
#define ECSPI2_BASE_ADDR (ATZ1_BASE_ADDR + 0x0C000)
|
#define ECSPI2_BASE_ADDR (ATZ1_BASE_ADDR + 0x0C000)
|
||||||
#define ECSPI3_BASE_ADDR (ATZ1_BASE_ADDR + 0x10000)
|
#define ECSPI3_BASE_ADDR (ATZ1_BASE_ADDR + 0x10000)
|
||||||
#define ECSPI4_BASE_ADDR (ATZ1_BASE_ADDR + 0x14000)
|
#define ECSPI4_BASE_ADDR (ATZ1_BASE_ADDR + 0x14000)
|
||||||
#ifdef CONFIG_MX6SL
|
|
||||||
#define UART5_IPS_BASE_ADDR (ATZ1_BASE_ADDR + 0x18000)
|
#define MX6SL_UART5_BASE_ADDR (ATZ1_BASE_ADDR + 0x18000)
|
||||||
#define UART1_IPS_BASE_ADDR (ATZ1_BASE_ADDR + 0x20000)
|
#define MX6SLL_UART4_BASE_ADDR (ATZ1_BASE_ADDR + 0x18000)
|
||||||
#define UART2_IPS_BASE_ADDR (ATZ1_BASE_ADDR + 0x24000)
|
#define MX6UL_UART7_BASE_ADDR (ATZ1_BASE_ADDR + 0x18000)
|
||||||
#define SSI1_IPS_BASE_ADDR (ATZ1_BASE_ADDR + 0x28000)
|
#define MX6SL_UART2_BASE_ADDR (ATZ1_BASE_ADDR + 0x24000)
|
||||||
#define SSI2_IPS_BASE_ADDR (ATZ1_BASE_ADDR + 0x2C000)
|
#define MX6SLL_UART2_BASE_ADDR (ATZ1_BASE_ADDR + 0x24000)
|
||||||
#define SSI3_IPS_BASE_ADDR (ATZ1_BASE_ADDR + 0x30000)
|
#define MX6UL_UART8_BASE_ADDR (ATZ1_BASE_ADDR + 0x24000)
|
||||||
#define UART3_IPS_BASE_ADDR (ATZ1_BASE_ADDR + 0x34000)
|
#define MX6SL_UART3_BASE_ADDR (ATZ1_BASE_ADDR + 0x34000)
|
||||||
#define UART4_IPS_BASE_ADDR (ATZ1_BASE_ADDR + 0x38000)
|
#define MX6SLL_UART3_BASE_ADDR (ATZ1_BASE_ADDR + 0x34000)
|
||||||
#else
|
#define MX6SL_UART4_BASE_ADDR (ATZ1_BASE_ADDR + 0x38000)
|
||||||
|
|
||||||
#ifndef CONFIG_MX6SX
|
#ifndef CONFIG_MX6SX
|
||||||
#define ECSPI5_BASE_ADDR (ATZ1_BASE_ADDR + 0x18000)
|
#define ECSPI5_BASE_ADDR (ATZ1_BASE_ADDR + 0x18000)
|
||||||
#endif
|
#endif
|
||||||
|
#define UART1_IPS_BASE_ADDR (ATZ1_BASE_ADDR + 0x20000)
|
||||||
#define UART1_BASE (ATZ1_BASE_ADDR + 0x20000)
|
#define UART1_BASE (ATZ1_BASE_ADDR + 0x20000)
|
||||||
#define ESAI1_BASE_ADDR (ATZ1_BASE_ADDR + 0x24000)
|
#define ESAI1_BASE_ADDR (ATZ1_BASE_ADDR + 0x24000)
|
||||||
#define UART8_BASE (ATZ1_BASE_ADDR + 0x24000)
|
#define UART8_BASE (ATZ1_BASE_ADDR + 0x24000)
|
||||||
|
@ -161,7 +161,6 @@
|
||||||
#define SSI2_BASE_ADDR (ATZ1_BASE_ADDR + 0x2C000)
|
#define SSI2_BASE_ADDR (ATZ1_BASE_ADDR + 0x2C000)
|
||||||
#define SSI3_BASE_ADDR (ATZ1_BASE_ADDR + 0x30000)
|
#define SSI3_BASE_ADDR (ATZ1_BASE_ADDR + 0x30000)
|
||||||
#define ASRC_BASE_ADDR (ATZ1_BASE_ADDR + 0x34000)
|
#define ASRC_BASE_ADDR (ATZ1_BASE_ADDR + 0x34000)
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef CONFIG_MX6SX
|
#ifndef CONFIG_MX6SX
|
||||||
#define SPBA_BASE_ADDR (ATZ1_BASE_ADDR + 0x3C000)
|
#define SPBA_BASE_ADDR (ATZ1_BASE_ADDR + 0x3C000)
|
||||||
|
@ -176,6 +175,8 @@
|
||||||
#define PWM4_BASE_ADDR (AIPS1_OFF_BASE_ADDR + 0xC000)
|
#define PWM4_BASE_ADDR (AIPS1_OFF_BASE_ADDR + 0xC000)
|
||||||
#define CAN1_BASE_ADDR (AIPS1_OFF_BASE_ADDR + 0x10000)
|
#define CAN1_BASE_ADDR (AIPS1_OFF_BASE_ADDR + 0x10000)
|
||||||
#define CAN2_BASE_ADDR (AIPS1_OFF_BASE_ADDR + 0x14000)
|
#define CAN2_BASE_ADDR (AIPS1_OFF_BASE_ADDR + 0x14000)
|
||||||
|
/* QOSC on i.MX6SLL */
|
||||||
|
#define QOSC_BASE_ADDR (AIPS1_OFF_BASE_ADDR + 0x14000)
|
||||||
#define GPT1_BASE_ADDR (AIPS1_OFF_BASE_ADDR + 0x18000)
|
#define GPT1_BASE_ADDR (AIPS1_OFF_BASE_ADDR + 0x18000)
|
||||||
#define GPIO1_BASE_ADDR (AIPS1_OFF_BASE_ADDR + 0x1C000)
|
#define GPIO1_BASE_ADDR (AIPS1_OFF_BASE_ADDR + 0x1C000)
|
||||||
#define GPIO2_BASE_ADDR (AIPS1_OFF_BASE_ADDR + 0x20000)
|
#define GPIO2_BASE_ADDR (AIPS1_OFF_BASE_ADDR + 0x20000)
|
||||||
|
@ -198,11 +199,18 @@
|
||||||
#define SRC_BASE_ADDR (AIPS1_OFF_BASE_ADDR + 0x58000)
|
#define SRC_BASE_ADDR (AIPS1_OFF_BASE_ADDR + 0x58000)
|
||||||
#define GPC_BASE_ADDR (AIPS1_OFF_BASE_ADDR + 0x5C000)
|
#define GPC_BASE_ADDR (AIPS1_OFF_BASE_ADDR + 0x5C000)
|
||||||
#define IOMUXC_BASE_ADDR (AIPS1_OFF_BASE_ADDR + 0x60000)
|
#define IOMUXC_BASE_ADDR (AIPS1_OFF_BASE_ADDR + 0x60000)
|
||||||
#ifdef CONFIG_MX6SL
|
#define IOMUXC_GPR_BASE_ADDR (AIPS1_OFF_BASE_ADDR + 0x64000)
|
||||||
|
#ifdef CONFIG_MX6SLL
|
||||||
|
#define CSI_BASE_ADDR (AIPS1_OFF_BASE_ADDR + 0x68000)
|
||||||
|
#define SDMA_PORT_HOST_BASE_ADDR (AIPS1_OFF_BASE_ADDR + 0x6C000)
|
||||||
|
#define PXP_BASE_ADDR (AIPS1_OFF_BASE_ADDR + 0x70000)
|
||||||
|
#define EPDC_BASE_ADDR (AIPS1_OFF_BASE_ADDR + 0x74000)
|
||||||
|
#define DCP_BASE_ADDR (AIPS1_OFF_BASE_ADDR + 0x7C000)
|
||||||
|
#elif defined(CONFIG_MX6SL)
|
||||||
#define CSI_BASE_ADDR (AIPS1_OFF_BASE_ADDR + 0x64000)
|
#define CSI_BASE_ADDR (AIPS1_OFF_BASE_ADDR + 0x64000)
|
||||||
#define SIPIX_BASE_ADDR (AIPS1_OFF_BASE_ADDR + 0x68000)
|
#define SIPIX_BASE_ADDR (AIPS1_OFF_BASE_ADDR + 0x68000)
|
||||||
#define SDMA_PORT_HOST_BASE_ADDR (AIPS1_OFF_BASE_ADDR + 0x6C000)
|
#define SDMA_PORT_HOST_BASE_ADDR (AIPS1_OFF_BASE_ADDR + 0x6C000)
|
||||||
#elif CONFIG_MX6SX
|
#elif defined(CONFIG_MX6SX)
|
||||||
#define CANFD1_BASE_ADDR (AIPS1_OFF_BASE_ADDR + 0x68000)
|
#define CANFD1_BASE_ADDR (AIPS1_OFF_BASE_ADDR + 0x68000)
|
||||||
#define SDMA_BASE_ADDR (AIPS1_OFF_BASE_ADDR + 0x6C000)
|
#define SDMA_BASE_ADDR (AIPS1_OFF_BASE_ADDR + 0x6C000)
|
||||||
#define CANFD2_BASE_ADDR (AIPS1_OFF_BASE_ADDR + 0x70000)
|
#define CANFD2_BASE_ADDR (AIPS1_OFF_BASE_ADDR + 0x70000)
|
||||||
|
@ -215,6 +223,9 @@
|
||||||
#define DMA_REQ_PORT_HOST_BASE_ADDR (AIPS1_OFF_BASE_ADDR + 0x6C000)
|
#define DMA_REQ_PORT_HOST_BASE_ADDR (AIPS1_OFF_BASE_ADDR + 0x6C000)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#define MX6SL_LCDIF_BASE_ADDR (AIPS1_OFF_BASE_ADDR + 0x78000)
|
||||||
|
#define MX6SLL_LCDIF_BASE_ADDR (AIPS1_OFF_BASE_ADDR + 0x78000)
|
||||||
|
|
||||||
#define AIPS2_ON_BASE_ADDR (ATZ2_BASE_ADDR + 0x7C000)
|
#define AIPS2_ON_BASE_ADDR (ATZ2_BASE_ADDR + 0x7C000)
|
||||||
#define AIPS2_OFF_BASE_ADDR (ATZ2_BASE_ADDR + 0x80000)
|
#define AIPS2_OFF_BASE_ADDR (ATZ2_BASE_ADDR + 0x80000)
|
||||||
#define AIPS3_ON_BASE_ADDR (ATZ3_BASE_ADDR + 0x7C000)
|
#define AIPS3_ON_BASE_ADDR (ATZ3_BASE_ADDR + 0x7C000)
|
||||||
|
@ -249,7 +260,7 @@
|
||||||
#define I2C3_BASE_ADDR (AIPS2_OFF_BASE_ADDR + 0x28000)
|
#define I2C3_BASE_ADDR (AIPS2_OFF_BASE_ADDR + 0x28000)
|
||||||
#define ROMCP_BASE_ADDR (AIPS2_OFF_BASE_ADDR + 0x2C000)
|
#define ROMCP_BASE_ADDR (AIPS2_OFF_BASE_ADDR + 0x2C000)
|
||||||
#define MMDC_P0_BASE_ADDR (AIPS2_OFF_BASE_ADDR + 0x30000)
|
#define MMDC_P0_BASE_ADDR (AIPS2_OFF_BASE_ADDR + 0x30000)
|
||||||
/* i.MX6SL */
|
/* i.MX6SL/SLL */
|
||||||
#define RNGB_IPS_BASE_ADDR (AIPS2_OFF_BASE_ADDR + 0x34000)
|
#define RNGB_IPS_BASE_ADDR (AIPS2_OFF_BASE_ADDR + 0x34000)
|
||||||
#ifdef CONFIG_MX6UL
|
#ifdef CONFIG_MX6UL
|
||||||
#define ENET2_BASE_ADDR (AIPS1_OFF_BASE_ADDR + 0x34000)
|
#define ENET2_BASE_ADDR (AIPS1_OFF_BASE_ADDR + 0x34000)
|
||||||
|
@ -263,6 +274,10 @@
|
||||||
#define WEIM_BASE_ADDR (AIPS2_OFF_BASE_ADDR + 0x38000)
|
#define WEIM_BASE_ADDR (AIPS2_OFF_BASE_ADDR + 0x38000)
|
||||||
#define OCOTP_BASE_ADDR (AIPS2_OFF_BASE_ADDR + 0x3C000)
|
#define OCOTP_BASE_ADDR (AIPS2_OFF_BASE_ADDR + 0x3C000)
|
||||||
#define CSU_BASE_ADDR (AIPS2_OFF_BASE_ADDR + 0x40000)
|
#define CSU_BASE_ADDR (AIPS2_OFF_BASE_ADDR + 0x40000)
|
||||||
|
#ifdef CONFIG_MX6SLL
|
||||||
|
#define IOMUXC_GPR_SNVS_BASE_ADDR (AIPS2_OFF_BASE_ADDR + 0x44000)
|
||||||
|
#define IOMUXC_SNVS_BASE_ADDR (AIPS2_OFF_BASE_ADDR + 0x48000)
|
||||||
|
#endif
|
||||||
#define IP2APB_PERFMON1_BASE_ADDR (AIPS2_OFF_BASE_ADDR + 0x44000)
|
#define IP2APB_PERFMON1_BASE_ADDR (AIPS2_OFF_BASE_ADDR + 0x44000)
|
||||||
#define IP2APB_PERFMON2_BASE_ADDR (AIPS2_OFF_BASE_ADDR + 0x48000)
|
#define IP2APB_PERFMON2_BASE_ADDR (AIPS2_OFF_BASE_ADDR + 0x48000)
|
||||||
#define MX6UL_LCDIF1_BASE_ADDR (AIPS2_OFF_BASE_ADDR + 0x48000)
|
#define MX6UL_LCDIF1_BASE_ADDR (AIPS2_OFF_BASE_ADDR + 0x48000)
|
||||||
|
@ -296,6 +311,8 @@
|
||||||
#define I2C4_BASE_ADDR (AIPS2_OFF_BASE_ADDR + 0x78000)
|
#define I2C4_BASE_ADDR (AIPS2_OFF_BASE_ADDR + 0x78000)
|
||||||
#define IP2APB_USBPHY1_BASE_ADDR (AIPS2_OFF_BASE_ADDR + 0x78000)
|
#define IP2APB_USBPHY1_BASE_ADDR (AIPS2_OFF_BASE_ADDR + 0x78000)
|
||||||
#define IP2APB_USBPHY2_BASE_ADDR (AIPS2_OFF_BASE_ADDR + 0x7C000)
|
#define IP2APB_USBPHY2_BASE_ADDR (AIPS2_OFF_BASE_ADDR + 0x7C000)
|
||||||
|
/* i.MX6SLL */
|
||||||
|
#define MTR_MASTER_BASE_ADDR (AIPS2_OFF_BASE_ADDR + 0x7C000)
|
||||||
|
|
||||||
#ifdef CONFIG_MX6SX
|
#ifdef CONFIG_MX6SX
|
||||||
#define GIS_BASE_ADDR (AIPS3_ARB_BASE_ADDR + 0x04000)
|
#define GIS_BASE_ADDR (AIPS3_ARB_BASE_ADDR + 0x04000)
|
||||||
|
@ -334,7 +351,8 @@
|
||||||
#define MX6SX_LCDIF1_BASE_ADDR (AIPS3_ARB_BASE_ADDR + 0x20000)
|
#define MX6SX_LCDIF1_BASE_ADDR (AIPS3_ARB_BASE_ADDR + 0x20000)
|
||||||
#define MX6SX_WDOG3_BASE_ADDR (AIPS3_ARB_BASE_ADDR + 0x88000)
|
#define MX6SX_WDOG3_BASE_ADDR (AIPS3_ARB_BASE_ADDR + 0x88000)
|
||||||
|
|
||||||
#if !(defined(CONFIG_MX6SX) || defined(CONFIG_MX6UL))
|
#if !(defined(CONFIG_MX6SX) || defined(CONFIG_MX6UL) || \
|
||||||
|
defined(CONFIG_MX6SLL) || defined(CONFIG_MX6SL))
|
||||||
#define IRAM_SIZE 0x00040000
|
#define IRAM_SIZE 0x00040000
|
||||||
#else
|
#else
|
||||||
#define IRAM_SIZE 0x00020000
|
#define IRAM_SIZE 0x00020000
|
||||||
|
@ -348,10 +366,14 @@
|
||||||
/* only for i.MX6SX/UL */
|
/* only for i.MX6SX/UL */
|
||||||
#define WDOG3_BASE_ADDR ((is_mx6ul() ? \
|
#define WDOG3_BASE_ADDR ((is_mx6ul() ? \
|
||||||
MX6UL_WDOG3_BASE_ADDR : MX6SX_WDOG3_BASE_ADDR))
|
MX6UL_WDOG3_BASE_ADDR : MX6SX_WDOG3_BASE_ADDR))
|
||||||
#define LCDIF1_BASE_ADDR ((is_mx6ul()) ? \
|
#define LCDIF1_BASE_ADDR ((is_cpu_type(MXC_CPU_MX6SLL)) ? \
|
||||||
|
MX6SLL_LCDIF_BASE_ADDR : \
|
||||||
|
(is_cpu_type(MXC_CPU_MX6SL)) ? \
|
||||||
|
MX6SL_LCDIF_BASE_ADDR : \
|
||||||
|
((is_cpu_type(MXC_CPU_MX6UL)) ? \
|
||||||
MX6UL_LCDIF1_BASE_ADDR : \
|
MX6UL_LCDIF1_BASE_ADDR : \
|
||||||
((is_mx6ull()) ? \
|
((is_mx6ull()) ? \
|
||||||
MX6ULL_LCDIF1_BASE_ADDR : MX6SX_LCDIF1_BASE_ADDR))
|
MX6ULL_LCDIF1_BASE_ADDR : MX6SX_LCDIF1_BASE_ADDR)))
|
||||||
|
|
||||||
|
|
||||||
extern void imx_get_mac_from_fuse(int dev_id, unsigned char *mac);
|
extern void imx_get_mac_from_fuse(int dev_id, unsigned char *mac);
|
||||||
|
@ -672,7 +694,8 @@ struct cspi_regs {
|
||||||
#define MXC_CSPICON_POL 4 /* SCLK polarity */
|
#define MXC_CSPICON_POL 4 /* SCLK polarity */
|
||||||
#define MXC_CSPICON_SSPOL 12 /* SS polarity */
|
#define MXC_CSPICON_SSPOL 12 /* SS polarity */
|
||||||
#define MXC_CSPICON_CTL 20 /* inactive state of SCLK */
|
#define MXC_CSPICON_CTL 20 /* inactive state of SCLK */
|
||||||
#if defined(CONFIG_MX6SL) || defined(CONFIG_MX6DL) || defined(CONFIG_MX6UL)
|
#if defined(CONFIG_MX6SLL) || defined(CONFIG_MX6SL) || \
|
||||||
|
defined(CONFIG_MX6DL) || defined(CONFIG_MX6UL)
|
||||||
#define MXC_SPI_BASE_ADDRESSES \
|
#define MXC_SPI_BASE_ADDRESSES \
|
||||||
ECSPI1_BASE_ADDR, \
|
ECSPI1_BASE_ADDR, \
|
||||||
ECSPI2_BASE_ADDR, \
|
ECSPI2_BASE_ADDR, \
|
||||||
|
|
|
@ -33,6 +33,8 @@ enum {
|
||||||
MX6_PAD_DECLARE(MX6_PAD_,name, pco, mc, mm, sio, si, pc),
|
MX6_PAD_DECLARE(MX6_PAD_,name, pco, mc, mm, sio, si, pc),
|
||||||
#include "mx6dl_pins.h"
|
#include "mx6dl_pins.h"
|
||||||
};
|
};
|
||||||
|
#elif defined(CONFIG_MX6SLL)
|
||||||
|
#include "mx6sll_pins.h"
|
||||||
#elif defined(CONFIG_MX6SL)
|
#elif defined(CONFIG_MX6SL)
|
||||||
#include "mx6sl_pins.h"
|
#include "mx6sl_pins.h"
|
||||||
#elif defined(CONFIG_MX6SX)
|
#elif defined(CONFIG_MX6SX)
|
||||||
|
|
1019
arch/arm/include/asm/arch-mx6/mx6sll_pins.h
Normal file
1019
arch/arm/include/asm/arch-mx6/mx6sll_pins.h
Normal file
File diff suppressed because it is too large
Load diff
|
@ -144,10 +144,12 @@ typedef u64 iomux_v3_cfg_t;
|
||||||
#define PAD_CTL_DSE_40ohm (6 << 3)
|
#define PAD_CTL_DSE_40ohm (6 << 3)
|
||||||
#define PAD_CTL_DSE_34ohm (7 << 3)
|
#define PAD_CTL_DSE_34ohm (7 << 3)
|
||||||
|
|
||||||
#if defined CONFIG_MX6SL
|
/* i.MX6SL/SLL */
|
||||||
#define PAD_CTL_LVE (1 << 1)
|
#define PAD_CTL_LVE (1 << 1)
|
||||||
#define PAD_CTL_LVE_BIT (1 << 22)
|
#define PAD_CTL_LVE_BIT (1 << 22)
|
||||||
#endif
|
|
||||||
|
/* i.MX6SLL */
|
||||||
|
#define PAD_CTL_IPD_BIT (1 << 27)
|
||||||
|
|
||||||
#elif defined(CONFIG_VF610)
|
#elif defined(CONFIG_VF610)
|
||||||
|
|
||||||
|
|
|
@ -20,7 +20,7 @@ struct mxs_lcdif_regs {
|
||||||
mxs_reg_32(hw_lcdif_ctrl) /* 0x00 */
|
mxs_reg_32(hw_lcdif_ctrl) /* 0x00 */
|
||||||
mxs_reg_32(hw_lcdif_ctrl1) /* 0x10 */
|
mxs_reg_32(hw_lcdif_ctrl1) /* 0x10 */
|
||||||
#if defined(CONFIG_MX28) || defined(CONFIG_MX6SX) || defined(CONFIG_MX6UL) || \
|
#if defined(CONFIG_MX28) || defined(CONFIG_MX6SX) || defined(CONFIG_MX6UL) || \
|
||||||
defined(CONFIG_MX7)
|
defined(CONFIG_MX7) || defined(CONFIG_MX6SL) || defined(CONFIG_MX6SLL)
|
||||||
mxs_reg_32(hw_lcdif_ctrl2) /* 0x20 */
|
mxs_reg_32(hw_lcdif_ctrl2) /* 0x20 */
|
||||||
#endif
|
#endif
|
||||||
mxs_reg_32(hw_lcdif_transfer_count) /* 0x20/0x30 */
|
mxs_reg_32(hw_lcdif_transfer_count) /* 0x20/0x30 */
|
||||||
|
@ -56,7 +56,7 @@ struct mxs_lcdif_regs {
|
||||||
mxs_reg_32(hw_lcdif_data) /* 0x1b0/0x180 */
|
mxs_reg_32(hw_lcdif_data) /* 0x1b0/0x180 */
|
||||||
mxs_reg_32(hw_lcdif_bm_error_stat) /* 0x1c0/0x190 */
|
mxs_reg_32(hw_lcdif_bm_error_stat) /* 0x1c0/0x190 */
|
||||||
#if defined(CONFIG_MX28) || defined(CONFIG_MX6SX) || defined(CONFIG_MX6UL) || \
|
#if defined(CONFIG_MX28) || defined(CONFIG_MX6SX) || defined(CONFIG_MX6UL) || \
|
||||||
defined(CONFIG_MX7)
|
defined(CONFIG_MX7) || defined(CONFIG_MX6SL) || defined(CONFIG_MX6SLL)
|
||||||
mxs_reg_32(hw_lcdif_crc_stat) /* 0x1a0 */
|
mxs_reg_32(hw_lcdif_crc_stat) /* 0x1a0 */
|
||||||
#endif
|
#endif
|
||||||
mxs_reg_32(hw_lcdif_lcdif_stat) /* 0x1d0/0x1b0 */
|
mxs_reg_32(hw_lcdif_lcdif_stat) /* 0x1d0/0x1b0 */
|
||||||
|
@ -64,7 +64,8 @@ struct mxs_lcdif_regs {
|
||||||
mxs_reg_32(hw_lcdif_debug0) /* 0x1f0/0x1d0 */
|
mxs_reg_32(hw_lcdif_debug0) /* 0x1f0/0x1d0 */
|
||||||
mxs_reg_32(hw_lcdif_debug1) /* 0x200/0x1e0 */
|
mxs_reg_32(hw_lcdif_debug1) /* 0x200/0x1e0 */
|
||||||
mxs_reg_32(hw_lcdif_debug2) /* 0x1f0 */
|
mxs_reg_32(hw_lcdif_debug2) /* 0x1f0 */
|
||||||
#if defined(CONFIG_MX6SX) || defined(CONFIG_MX6UL) || defined(CONFIG_MX7)
|
#if defined(CONFIG_MX6SX) || defined(CONFIG_MX6UL) || defined(CONFIG_MX7) || \
|
||||||
|
defined(CONFIG_MX6SL) || defined(CONFIG_MX6SLL)
|
||||||
mxs_reg_32(hw_lcdif_thres)
|
mxs_reg_32(hw_lcdif_thres)
|
||||||
mxs_reg_32(hw_lcdif_as_ctrl)
|
mxs_reg_32(hw_lcdif_as_ctrl)
|
||||||
mxs_reg_32(hw_lcdif_as_buf)
|
mxs_reg_32(hw_lcdif_as_buf)
|
||||||
|
|
|
@ -36,6 +36,7 @@
|
||||||
#define is_mx6solo() (is_cpu_type(MXC_CPU_MX6SOLO))
|
#define is_mx6solo() (is_cpu_type(MXC_CPU_MX6SOLO))
|
||||||
#define is_mx6ul() (is_cpu_type(MXC_CPU_MX6UL))
|
#define is_mx6ul() (is_cpu_type(MXC_CPU_MX6UL))
|
||||||
#define is_mx6ull() (is_cpu_type(MXC_CPU_MX6ULL))
|
#define is_mx6ull() (is_cpu_type(MXC_CPU_MX6ULL))
|
||||||
|
#define is_mx6sll() (is_cpu_type(MXC_CPU_MX6SLL))
|
||||||
|
|
||||||
u32 get_nr_cpus(void);
|
u32 get_nr_cpus(void);
|
||||||
u32 get_cpu_rev(void);
|
u32 get_cpu_rev(void);
|
||||||
|
|
6
arch/arm/mach-litesom/Kconfig
Normal file
6
arch/arm/mach-litesom/Kconfig
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
config LITESOM
|
||||||
|
bool
|
||||||
|
select MX6UL
|
||||||
|
select DM
|
||||||
|
select DM_THERMAL
|
||||||
|
select SUPPORT_SPL
|
6
arch/arm/mach-litesom/Makefile
Normal file
6
arch/arm/mach-litesom/Makefile
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
# (C) Copyright 2016 Grinn
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: GPL-2.0+
|
||||||
|
#
|
||||||
|
|
||||||
|
obj-y := litesom.o
|
16
arch/arm/mach-litesom/include/mach/litesom.h
Normal file
16
arch/arm/mach-litesom/include/mach/litesom.h
Normal file
|
@ -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
|
200
arch/arm/mach-litesom/litesom.c
Normal file
200
arch/arm/mach-litesom/litesom.c
Normal file
|
@ -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
|
12
board/beckhoff/mx53cx9020/Kconfig
Normal file
12
board/beckhoff/mx53cx9020/Kconfig
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
if TARGET_MX53CX9020
|
||||||
|
|
||||||
|
config SYS_BOARD
|
||||||
|
default "mx53cx9020"
|
||||||
|
|
||||||
|
config SYS_VENDOR
|
||||||
|
default "beckhoff"
|
||||||
|
|
||||||
|
config SYS_CONFIG_NAME
|
||||||
|
default "mx53cx9020"
|
||||||
|
|
||||||
|
endif
|
6
board/beckhoff/mx53cx9020/MAINTAINERS
Normal file
6
board/beckhoff/mx53cx9020/MAINTAINERS
Normal file
|
@ -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
|
9
board/beckhoff/mx53cx9020/Makefile
Normal file
9
board/beckhoff/mx53cx9020/Makefile
Normal file
|
@ -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
|
82
board/beckhoff/mx53cx9020/imximage.cfg
Normal file
82
board/beckhoff/mx53cx9020/imximage.cfg
Normal file
|
@ -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
|
367
board/beckhoff/mx53cx9020/mx53cx9020.c
Normal file
367
board/beckhoff/mx53cx9020/mx53cx9020.c
Normal file
|
@ -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;
|
||||||
|
}
|
49
board/beckhoff/mx53cx9020/mx53cx9020_video.c
Normal file
49
board/beckhoff/mx53cx9020/mx53cx9020_video.c
Normal file
|
@ -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;
|
||||||
|
}
|
12
board/engicam/geam6ul/Kconfig
Normal file
12
board/engicam/geam6ul/Kconfig
Normal file
|
@ -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
|
6
board/engicam/geam6ul/MAINTAINERS
Normal file
6
board/engicam/geam6ul/MAINTAINERS
Normal file
|
@ -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
|
6
board/engicam/geam6ul/Makefile
Normal file
6
board/engicam/geam6ul/Makefile
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
# Copyright (C) 2016 Amarula Solutions B.V.
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: GPL-2.0+
|
||||||
|
#
|
||||||
|
|
||||||
|
obj-y := geam6ul.o
|
28
board/engicam/geam6ul/README
Normal file
28
board/engicam/geam6ul/README
Normal file
|
@ -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.
|
317
board/engicam/geam6ul/geam6ul.c
Normal file
317
board/engicam/geam6ul/geam6ul.c
Normal file
|
@ -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 */
|
|
@ -3,5 +3,7 @@ M: Jagan Teki <jagan@amarulasolutions.com>
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: board/engicam/icorem6
|
F: board/engicam/icorem6
|
||||||
F: include/configs/imx6qdl_icore.h
|
F: include/configs/imx6qdl_icore.h
|
||||||
F: configs/imx6qdl_icore_mmc_defconfig
|
F: configs/imx6q_icore_mmc_defconfig
|
||||||
F: configs/imx6qdl_icore_nand_defconfig
|
F: configs/imx6q_icore_nand_defconfig
|
||||||
|
F: configs/imx6dl_icore_mmc_defconfig
|
||||||
|
F: configs/imx6dl_icore_nand_defconfig
|
||||||
|
|
|
@ -1,19 +1,17 @@
|
||||||
How to use U-Boot on Engicam i.CoreM6 DualLite/Solo and Quad/Dual Starter Kit:
|
How to use U-Boot on Engicam i.CoreM6 Solo/DualLite and Quad/Dual Starter Kit:
|
||||||
-----------------------------------------------------------------------------
|
-----------------------------------------------------------------------------
|
||||||
|
|
||||||
- Configure U-Boot for Engicam i.CoreM6 QDL:
|
|
||||||
|
|
||||||
$ make mrproper
|
$ make mrproper
|
||||||
$ make imx6qdl_icore_mmc_defconfig
|
|
||||||
|
|
||||||
- Build for i.CoreM6 DualLite/Solo
|
- Configure U-Boot for Engicam i.CoreM6 Quad/Dual:
|
||||||
|
$ make imx6q_icore_mmc_defconfig
|
||||||
|
|
||||||
|
- Configure U-Boot for Engicam i.CoreM6 Solo/DualLite:
|
||||||
|
$ make imx6dl_icore_mmc_defconfig
|
||||||
|
|
||||||
|
- Build U-Boot
|
||||||
$ make
|
$ make
|
||||||
|
|
||||||
- Build for i.CoreM6 Quad/Dual
|
|
||||||
|
|
||||||
$ make DEVICE_TREE=imx6q-icore
|
|
||||||
|
|
||||||
This will generate the SPL image called SPL and the u-boot-dtb.img.
|
This will generate the SPL image called SPL and the u-boot-dtb.img.
|
||||||
|
|
||||||
- Flash the SPL image into the micro SD card:
|
- Flash the SPL image into the micro SD card:
|
||||||
|
@ -33,6 +31,3 @@ MMC Boot: JM3 Closed
|
||||||
|
|
||||||
- Insert the micro SD card in the board, power it up and U-Boot messages should
|
- Insert the micro SD card in the board, power it up and U-Boot messages should
|
||||||
come up.
|
come up.
|
||||||
|
|
||||||
- Note: For loading Linux on Quad/Dual modules set the dtb as
|
|
||||||
icorem6qdl> setenv fdt_file imx6q-icore.dtb
|
|
||||||
|
|
|
@ -7,8 +7,6 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <common.h>
|
#include <common.h>
|
||||||
#include <miiphy.h>
|
|
||||||
#include <netdev.h>
|
|
||||||
|
|
||||||
#include <asm/io.h>
|
#include <asm/io.h>
|
||||||
#include <asm/gpio.h>
|
#include <asm/gpio.h>
|
||||||
|
@ -20,6 +18,7 @@
|
||||||
#include <asm/arch/mx6-pins.h>
|
#include <asm/arch/mx6-pins.h>
|
||||||
#include <asm/arch/sys_proto.h>
|
#include <asm/arch/sys_proto.h>
|
||||||
#include <asm/imx-common/iomux-v3.h>
|
#include <asm/imx-common/iomux-v3.h>
|
||||||
|
#include <asm/imx-common/video.h>
|
||||||
|
|
||||||
DECLARE_GLOBAL_DATA_PTR;
|
DECLARE_GLOBAL_DATA_PTR;
|
||||||
|
|
||||||
|
@ -27,80 +26,11 @@ DECLARE_GLOBAL_DATA_PTR;
|
||||||
PAD_CTL_PUS_100K_UP | PAD_CTL_SPEED_MED | \
|
PAD_CTL_PUS_100K_UP | PAD_CTL_SPEED_MED | \
|
||||||
PAD_CTL_DSE_40ohm | PAD_CTL_SRE_FAST | PAD_CTL_HYS)
|
PAD_CTL_DSE_40ohm | PAD_CTL_SRE_FAST | PAD_CTL_HYS)
|
||||||
|
|
||||||
#define ENET_PAD_CTRL (PAD_CTL_PKE | PAD_CTL_PUE | \
|
|
||||||
PAD_CTL_PUS_100K_UP | PAD_CTL_SPEED_MED | \
|
|
||||||
PAD_CTL_DSE_40ohm | PAD_CTL_HYS)
|
|
||||||
|
|
||||||
static iomux_v3_cfg_t const uart4_pads[] = {
|
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_COL0__UART4_TX_DATA | MUX_PAD_CTRL(UART_PAD_CTRL)),
|
||||||
IOMUX_PADS(PAD_KEY_ROW0__UART4_RX_DATA | MUX_PAD_CTRL(UART_PAD_CTRL)),
|
IOMUX_PADS(PAD_KEY_ROW0__UART4_RX_DATA | MUX_PAD_CTRL(UART_PAD_CTRL)),
|
||||||
};
|
};
|
||||||
|
|
||||||
static iomux_v3_cfg_t const enet_pads[] = {
|
|
||||||
IOMUX_PADS(PAD_ENET_CRS_DV__ENET_RX_EN | MUX_PAD_CTRL(ENET_PAD_CTRL)),
|
|
||||||
IOMUX_PADS(PAD_GPIO_16__ENET_REF_CLK | MUX_PAD_CTRL(ENET_PAD_CTRL | PAD_CTL_SRE_FAST)),
|
|
||||||
IOMUX_PADS(PAD_ENET_TX_EN__ENET_TX_EN | MUX_PAD_CTRL(ENET_PAD_CTRL)),
|
|
||||||
IOMUX_PADS(PAD_ENET_RXD1__ENET_RX_DATA1 | MUX_PAD_CTRL(ENET_PAD_CTRL)),
|
|
||||||
IOMUX_PADS(PAD_ENET_RXD0__ENET_RX_DATA0 | MUX_PAD_CTRL(ENET_PAD_CTRL)),
|
|
||||||
IOMUX_PADS(PAD_ENET_TXD1__ENET_TX_DATA1 | MUX_PAD_CTRL(ENET_PAD_CTRL)),
|
|
||||||
IOMUX_PADS(PAD_ENET_TXD0__ENET_TX_DATA0 | MUX_PAD_CTRL(ENET_PAD_CTRL)),
|
|
||||||
IOMUX_PADS(PAD_ENET_MDC__ENET_MDC | MUX_PAD_CTRL(ENET_PAD_CTRL)),
|
|
||||||
IOMUX_PADS(PAD_ENET_MDIO__ENET_MDIO | MUX_PAD_CTRL(ENET_PAD_CTRL)),
|
|
||||||
IOMUX_PADS(PAD_GPIO_17__GPIO7_IO12 | MUX_PAD_CTRL(NO_PAD_CTRL)),
|
|
||||||
};
|
|
||||||
|
|
||||||
#ifdef CONFIG_FEC_MXC
|
|
||||||
#define ENET_PHY_RST IMX_GPIO_NR(7, 12)
|
|
||||||
static int setup_fec(void)
|
|
||||||
{
|
|
||||||
struct mxc_ccm_reg *ccm = (struct mxc_ccm_reg *)CCM_BASE_ADDR;
|
|
||||||
struct anatop_regs *anatop = (struct anatop_regs *)ANATOP_BASE_ADDR;
|
|
||||||
s32 timeout = 100000;
|
|
||||||
u32 reg = 0;
|
|
||||||
int ret;
|
|
||||||
|
|
||||||
/* Enable fec clock */
|
|
||||||
setbits_le32(&ccm->CCGR1, MXC_CCM_CCGR1_ENET_MASK);
|
|
||||||
|
|
||||||
/* use 50MHz */
|
|
||||||
ret = enable_fec_anatop_clock(0, ENET_50MHZ);
|
|
||||||
if (ret)
|
|
||||||
return ret;
|
|
||||||
|
|
||||||
/* Enable PLLs */
|
|
||||||
reg = readl(&anatop->pll_enet);
|
|
||||||
reg &= ~BM_ANADIG_PLL_SYS_POWERDOWN;
|
|
||||||
writel(reg, &anatop->pll_enet);
|
|
||||||
reg = readl(&anatop->pll_enet);
|
|
||||||
reg |= BM_ANADIG_PLL_SYS_ENABLE;
|
|
||||||
while (timeout--) {
|
|
||||||
if (readl(&anatop->pll_enet) & BM_ANADIG_PLL_SYS_LOCK)
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
if (timeout <= 0)
|
|
||||||
return -EIO;
|
|
||||||
reg &= ~BM_ANADIG_PLL_SYS_BYPASS;
|
|
||||||
writel(reg, &anatop->pll_enet);
|
|
||||||
|
|
||||||
/* reset the phy */
|
|
||||||
gpio_direction_output(ENET_PHY_RST, 0);
|
|
||||||
udelay(10000);
|
|
||||||
gpio_set_value(ENET_PHY_RST, 1);
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
int board_eth_init(bd_t *bis)
|
|
||||||
{
|
|
||||||
int ret;
|
|
||||||
|
|
||||||
SETUP_IOMUX_PADS(enet_pads);
|
|
||||||
setup_fec();
|
|
||||||
|
|
||||||
return ret = cpu_eth_init(bis);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef CONFIG_NAND_MXS
|
#ifdef CONFIG_NAND_MXS
|
||||||
|
|
||||||
#define GPMI_PAD_CTRL0 (PAD_CTL_PKE | PAD_CTL_PUE | PAD_CTL_PUS_100K_UP)
|
#define GPMI_PAD_CTRL0 (PAD_CTL_PKE | PAD_CTL_PUE | PAD_CTL_PUS_100K_UP)
|
||||||
|
@ -161,6 +91,113 @@ static void setup_gpmi_nand(void)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined(CONFIG_VIDEO_IPUV3)
|
||||||
|
static iomux_v3_cfg_t const rgb_pads[] = {
|
||||||
|
IOMUX_PADS(PAD_DI0_DISP_CLK__IPU1_DI0_DISP_CLK),
|
||||||
|
IOMUX_PADS(PAD_DI0_PIN15__IPU1_DI0_PIN15),
|
||||||
|
IOMUX_PADS(PAD_DI0_PIN2__IPU1_DI0_PIN02),
|
||||||
|
IOMUX_PADS(PAD_DI0_PIN3__IPU1_DI0_PIN03),
|
||||||
|
IOMUX_PADS(PAD_DISP0_DAT0__IPU1_DISP0_DATA00),
|
||||||
|
IOMUX_PADS(PAD_DISP0_DAT1__IPU1_DISP0_DATA01),
|
||||||
|
IOMUX_PADS(PAD_DISP0_DAT2__IPU1_DISP0_DATA02),
|
||||||
|
IOMUX_PADS(PAD_DISP0_DAT3__IPU1_DISP0_DATA03),
|
||||||
|
IOMUX_PADS(PAD_DISP0_DAT4__IPU1_DISP0_DATA04),
|
||||||
|
IOMUX_PADS(PAD_DISP0_DAT5__IPU1_DISP0_DATA05),
|
||||||
|
IOMUX_PADS(PAD_DISP0_DAT6__IPU1_DISP0_DATA06),
|
||||||
|
IOMUX_PADS(PAD_DISP0_DAT7__IPU1_DISP0_DATA07),
|
||||||
|
IOMUX_PADS(PAD_DISP0_DAT8__IPU1_DISP0_DATA08),
|
||||||
|
IOMUX_PADS(PAD_DISP0_DAT9__IPU1_DISP0_DATA09),
|
||||||
|
IOMUX_PADS(PAD_DISP0_DAT10__IPU1_DISP0_DATA10),
|
||||||
|
IOMUX_PADS(PAD_DISP0_DAT11__IPU1_DISP0_DATA11),
|
||||||
|
IOMUX_PADS(PAD_DISP0_DAT12__IPU1_DISP0_DATA12),
|
||||||
|
IOMUX_PADS(PAD_DISP0_DAT13__IPU1_DISP0_DATA13),
|
||||||
|
IOMUX_PADS(PAD_DISP0_DAT14__IPU1_DISP0_DATA14),
|
||||||
|
IOMUX_PADS(PAD_DISP0_DAT15__IPU1_DISP0_DATA15),
|
||||||
|
IOMUX_PADS(PAD_DISP0_DAT16__IPU1_DISP0_DATA16),
|
||||||
|
IOMUX_PADS(PAD_DISP0_DAT17__IPU1_DISP0_DATA17),
|
||||||
|
};
|
||||||
|
|
||||||
|
static void enable_rgb(struct display_info_t const *dev)
|
||||||
|
{
|
||||||
|
SETUP_IOMUX_PADS(rgb_pads);
|
||||||
|
}
|
||||||
|
|
||||||
|
struct display_info_t const displays[] = {
|
||||||
|
{
|
||||||
|
.bus = -1,
|
||||||
|
.addr = 0,
|
||||||
|
.pixfmt = IPU_PIX_FMT_RGB666,
|
||||||
|
.detect = NULL,
|
||||||
|
.enable = enable_rgb,
|
||||||
|
.mode = {
|
||||||
|
.name = "Amp-WD",
|
||||||
|
.refresh = 60,
|
||||||
|
.xres = 800,
|
||||||
|
.yres = 480,
|
||||||
|
.pixclock = 30000,
|
||||||
|
.left_margin = 30,
|
||||||
|
.right_margin = 30,
|
||||||
|
.upper_margin = 5,
|
||||||
|
.lower_margin = 5,
|
||||||
|
.hsync_len = 64,
|
||||||
|
.vsync_len = 20,
|
||||||
|
.sync = FB_SYNC_EXT,
|
||||||
|
.vmode = FB_VMODE_NONINTERLACED
|
||||||
|
}
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
size_t display_count = ARRAY_SIZE(displays);
|
||||||
|
|
||||||
|
static void setup_display(void)
|
||||||
|
{
|
||||||
|
struct mxc_ccm_reg *mxc_ccm = (struct mxc_ccm_reg *)CCM_BASE_ADDR;
|
||||||
|
struct iomuxc *iomux = (struct iomuxc *)IOMUXC_BASE_ADDR;
|
||||||
|
int reg;
|
||||||
|
|
||||||
|
enable_ipu_clock();
|
||||||
|
|
||||||
|
/* Turn on LDB0,IPU,IPU DI0 clocks */
|
||||||
|
reg = __raw_readl(&mxc_ccm->CCGR3);
|
||||||
|
reg |= (MXC_CCM_CCGR3_LDB_DI0_MASK | 0xffff);
|
||||||
|
writel(reg, &mxc_ccm->CCGR3);
|
||||||
|
|
||||||
|
/* set LDB0, LDB1 clk select to 011/011 */
|
||||||
|
reg = readl(&mxc_ccm->cs2cdr);
|
||||||
|
reg &= ~(MXC_CCM_CS2CDR_LDB_DI0_CLK_SEL_MASK |
|
||||||
|
MXC_CCM_CS2CDR_LDB_DI1_CLK_SEL_MASK);
|
||||||
|
reg |= (3 << MXC_CCM_CS2CDR_LDB_DI0_CLK_SEL_OFFSET) |
|
||||||
|
(3 << MXC_CCM_CS2CDR_LDB_DI1_CLK_SEL_OFFSET);
|
||||||
|
writel(reg, &mxc_ccm->cs2cdr);
|
||||||
|
|
||||||
|
reg = readl(&mxc_ccm->cscmr2);
|
||||||
|
reg |= MXC_CCM_CSCMR2_LDB_DI0_IPU_DIV;
|
||||||
|
writel(reg, &mxc_ccm->cscmr2);
|
||||||
|
|
||||||
|
reg = readl(&mxc_ccm->chsccdr);
|
||||||
|
reg |= (CHSCCDR_CLK_SEL_LDB_DI0 <<
|
||||||
|
MXC_CCM_CHSCCDR_IPU1_DI0_CLK_SEL_OFFSET);
|
||||||
|
writel(reg, &mxc_ccm->chsccdr);
|
||||||
|
|
||||||
|
reg = IOMUXC_GPR2_BGREF_RRMODE_EXTERNAL_RES |
|
||||||
|
IOMUXC_GPR2_DI1_VS_POLARITY_ACTIVE_HIGH |
|
||||||
|
IOMUXC_GPR2_DI0_VS_POLARITY_ACTIVE_LOW |
|
||||||
|
IOMUXC_GPR2_BIT_MAPPING_CH1_SPWG |
|
||||||
|
IOMUXC_GPR2_DATA_WIDTH_CH1_18BIT |
|
||||||
|
IOMUXC_GPR2_BIT_MAPPING_CH0_SPWG |
|
||||||
|
IOMUXC_GPR2_DATA_WIDTH_CH0_18BIT |
|
||||||
|
IOMUXC_GPR2_LVDS_CH1_MODE_DISABLED |
|
||||||
|
IOMUXC_GPR2_LVDS_CH0_MODE_ENABLED_DI0;
|
||||||
|
writel(reg, &iomux->gpr[2]);
|
||||||
|
|
||||||
|
reg = readl(&iomux->gpr[3]);
|
||||||
|
reg = (reg & ~IOMUXC_GPR3_LVDS0_MUX_CTL_MASK) |
|
||||||
|
(IOMUXC_GPR3_MUX_SRC_IPU1_DI0 <<
|
||||||
|
IOMUXC_GPR3_LVDS0_MUX_CTL_OFFSET);
|
||||||
|
writel(reg, &iomux->gpr[3]);
|
||||||
|
}
|
||||||
|
#endif /* CONFIG_VIDEO_IPUV3 */
|
||||||
|
|
||||||
int board_early_init_f(void)
|
int board_early_init_f(void)
|
||||||
{
|
{
|
||||||
SETUP_IOMUX_PADS(uart4_pads);
|
SETUP_IOMUX_PADS(uart4_pads);
|
||||||
|
@ -176,6 +213,11 @@ int board_init(void)
|
||||||
#ifdef CONFIG_NAND_MXS
|
#ifdef CONFIG_NAND_MXS
|
||||||
setup_gpmi_nand();
|
setup_gpmi_nand();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef CONFIG_VIDEO_IPUV3
|
||||||
|
setup_display();
|
||||||
|
#endif
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
12
board/engicam/icorem6_rqs/Kconfig
Normal file
12
board/engicam/icorem6_rqs/Kconfig
Normal file
|
@ -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
|
7
board/engicam/icorem6_rqs/MAINTAINERS
Normal file
7
board/engicam/icorem6_rqs/MAINTAINERS
Normal file
|
@ -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
|
6
board/engicam/icorem6_rqs/Makefile
Normal file
6
board/engicam/icorem6_rqs/Makefile
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
# Copyright (C) 2016 Amarula Solutions B.V.
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: GPL-2.0+
|
||||||
|
#
|
||||||
|
|
||||||
|
obj-y := icorem6_rqs.o
|
33
board/engicam/icorem6_rqs/README
Normal file
33
board/engicam/icorem6_rqs/README
Normal file
|
@ -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.
|
399
board/engicam/icorem6_rqs/icorem6_rqs.c
Normal file
399
board/engicam/icorem6_rqs/icorem6_rqs.c
Normal file
|
@ -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
|
12
board/freescale/mx6sllevk/Kconfig
Normal file
12
board/freescale/mx6sllevk/Kconfig
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
if TARGET_MX6SLLEVK
|
||||||
|
|
||||||
|
config SYS_BOARD
|
||||||
|
default "mx6sllevk"
|
||||||
|
|
||||||
|
config SYS_VENDOR
|
||||||
|
default "freescale"
|
||||||
|
|
||||||
|
config SYS_CONFIG_NAME
|
||||||
|
default "mx6sllevk"
|
||||||
|
|
||||||
|
endif
|
6
board/freescale/mx6sllevk/Makefile
Normal file
6
board/freescale/mx6sllevk/Makefile
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
# (C) Copyright 2016 Freescale Semiconductor, Inc.
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: GPL-2.0+
|
||||||
|
#
|
||||||
|
|
||||||
|
obj-y := mx6sllevk.o
|
127
board/freescale/mx6sllevk/imximage.cfg
Normal file
127
board/freescale/mx6sllevk/imximage.cfg
Normal file
|
@ -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
|
131
board/freescale/mx6sllevk/mx6sllevk.c
Normal file
131
board/freescale/mx6sllevk/mx6sllevk.c
Normal file
|
@ -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;
|
||||||
|
}
|
155
board/freescale/mx6sllevk/plugin.S
Normal file
155
board/freescale/mx6sllevk/plugin.S
Normal file
|
@ -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>
|
|
@ -504,7 +504,7 @@ static iomux_v3_cfg_t const lcd_pads[] = {
|
||||||
|
|
||||||
static int setup_lcd(void)
|
static int setup_lcd(void)
|
||||||
{
|
{
|
||||||
enable_lcdif_clock(LCDIF1_BASE_ADDR);
|
enable_lcdif_clock(LCDIF1_BASE_ADDR, 1);
|
||||||
|
|
||||||
imx_iomux_v3_setup_multiple_pads(lcd_pads, ARRAY_SIZE(lcd_pads));
|
imx_iomux_v3_setup_multiple_pads(lcd_pads, ARRAY_SIZE(lcd_pads));
|
||||||
|
|
||||||
|
|
|
@ -600,7 +600,7 @@ static iomux_v3_cfg_t const lcd_pads[] = {
|
||||||
|
|
||||||
static int setup_lcd(void)
|
static int setup_lcd(void)
|
||||||
{
|
{
|
||||||
enable_lcdif_clock(LCDIF1_BASE_ADDR);
|
enable_lcdif_clock(LCDIF1_BASE_ADDR, 1);
|
||||||
|
|
||||||
imx_iomux_v3_setup_multiple_pads(lcd_pads, ARRAY_SIZE(lcd_pads));
|
imx_iomux_v3_setup_multiple_pads(lcd_pads, ARRAY_SIZE(lcd_pads));
|
||||||
|
|
||||||
|
|
12
board/grinn/liteboard/Kconfig
Normal file
12
board/grinn/liteboard/Kconfig
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
if TARGET_LITEBOARD
|
||||||
|
|
||||||
|
config SYS_BOARD
|
||||||
|
default "liteboard"
|
||||||
|
|
||||||
|
config SYS_VENDOR
|
||||||
|
default "grinn"
|
||||||
|
|
||||||
|
config SYS_CONFIG_NAME
|
||||||
|
default "liteboard"
|
||||||
|
|
||||||
|
endif
|
6
board/grinn/liteboard/MAINTAINERS
Normal file
6
board/grinn/liteboard/MAINTAINERS
Normal file
|
@ -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
|
6
board/grinn/liteboard/Makefile
Normal file
6
board/grinn/liteboard/Makefile
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
# (C) Copyright 2016 Grinn
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: GPL-2.0+
|
||||||
|
#
|
||||||
|
|
||||||
|
obj-y := board.o
|
31
board/grinn/liteboard/README
Normal file
31
board/grinn/liteboard/README
Normal file
|
@ -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.
|
287
board/grinn/liteboard/board.c
Normal file
287
board/grinn/liteboard/board.c
Normal file
|
@ -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
|
48
board/toradex/apalis_imx6/1066mhz_4x128mx16.cfg
Normal file
48
board/toradex/apalis_imx6/1066mhz_4x128mx16.cfg
Normal file
|
@ -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
|
48
board/toradex/apalis_imx6/1066mhz_4x256mx16.cfg
Normal file
48
board/toradex/apalis_imx6/1066mhz_4x256mx16.cfg
Normal file
|
@ -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
|
55
board/toradex/apalis_imx6/Kconfig
Normal file
55
board/toradex/apalis_imx6/Kconfig
Normal file
|
@ -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
|
9
board/toradex/apalis_imx6/MAINTAINERS
Normal file
9
board/toradex/apalis_imx6/MAINTAINERS
Normal file
|
@ -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
|
5
board/toradex/apalis_imx6/Makefile
Normal file
5
board/toradex/apalis_imx6/Makefile
Normal file
|
@ -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
|
1292
board/toradex/apalis_imx6/apalis_imx6.c
Normal file
1292
board/toradex/apalis_imx6/apalis_imx6.c
Normal file
File diff suppressed because it is too large
Load diff
34
board/toradex/apalis_imx6/apalis_imx6q.cfg
Normal file
34
board/toradex/apalis_imx6/apalis_imx6q.cfg
Normal file
|
@ -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"
|
42
board/toradex/apalis_imx6/clocks.cfg
Normal file
42
board/toradex/apalis_imx6/clocks.cfg
Normal file
|
@ -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
|
97
board/toradex/apalis_imx6/ddr-setup.cfg
Normal file
97
board/toradex/apalis_imx6/ddr-setup.cfg
Normal file
|
@ -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
|
98
board/toradex/apalis_imx6/do_fuse.c
Normal file
98
board/toradex/apalis_imx6/do_fuse.c
Normal file
|
@ -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 */
|
228
board/toradex/apalis_imx6/pf0100.c
Normal file
228
board/toradex/apalis_imx6/pf0100.c
Normal file
|
@ -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",
|
||||||
|
""
|
||||||
|
);
|
56
board/toradex/apalis_imx6/pf0100.h
Normal file
56
board/toradex/apalis_imx6/pf0100.h
Normal file
|
@ -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_ */
|
191
board/toradex/apalis_imx6/pf0100_otp.inc
Normal file
191
board/toradex/apalis_imx6/pf0100_otp.inc
Normal file
|
@ -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
|
||||||
|
};
|
|
@ -14,6 +14,7 @@
|
||||||
#include <asm/io.h>
|
#include <asm/io.h>
|
||||||
#include <dm.h>
|
#include <dm.h>
|
||||||
#include <i2c.h>
|
#include <i2c.h>
|
||||||
|
#include "../common/tdx-common.h"
|
||||||
|
|
||||||
#include "pinmux-config-apalis_t30.h"
|
#include "pinmux-config-apalis_t30.h"
|
||||||
|
|
||||||
|
@ -39,6 +40,13 @@ int checkboard(void)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined(CONFIG_OF_LIBFDT) && defined(CONFIG_OF_BOARD_SETUP)
|
||||||
|
int ft_board_setup(void *blob, bd_t *bd)
|
||||||
|
{
|
||||||
|
return ft_common_board_setup(blob, bd);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Routine: pinmux_init
|
* Routine: pinmux_init
|
||||||
* Description: Do individual peripheral pinmux configs
|
* Description: Do individual peripheral pinmux configs
|
||||||
|
|
59
board/toradex/colibri_imx6/800mhz_2x64mx16.cfg
Normal file
59
board/toradex/colibri_imx6/800mhz_2x64mx16.cfg
Normal file
|
@ -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
|
59
board/toradex/colibri_imx6/800mhz_4x64mx16.cfg
Normal file
59
board/toradex/colibri_imx6/800mhz_4x64mx16.cfg
Normal file
|
@ -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
|
44
board/toradex/colibri_imx6/Kconfig
Normal file
44
board/toradex/colibri_imx6/Kconfig
Normal file
|
@ -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
|
8
board/toradex/colibri_imx6/MAINTAINERS
Normal file
8
board/toradex/colibri_imx6/MAINTAINERS
Normal file
|
@ -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
|
5
board/toradex/colibri_imx6/Makefile
Normal file
5
board/toradex/colibri_imx6/Makefile
Normal file
|
@ -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
|
42
board/toradex/colibri_imx6/clocks.cfg
Normal file
42
board/toradex/colibri_imx6/clocks.cfg
Normal file
|
@ -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
|
1130
board/toradex/colibri_imx6/colibri_imx6.c
Normal file
1130
board/toradex/colibri_imx6/colibri_imx6.c
Normal file
File diff suppressed because it is too large
Load diff
38
board/toradex/colibri_imx6/colibri_imx6.cfg
Normal file
38
board/toradex/colibri_imx6/colibri_imx6.cfg
Normal file
|
@ -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"
|
98
board/toradex/colibri_imx6/ddr-setup.cfg
Normal file
98
board/toradex/colibri_imx6/ddr-setup.cfg
Normal file
|
@ -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
|
98
board/toradex/colibri_imx6/do_fuse.c
Normal file
98
board/toradex/colibri_imx6/do_fuse.c
Normal file
|
@ -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 */
|
211
board/toradex/colibri_imx6/pf0100.c
Normal file
211
board/toradex/colibri_imx6/pf0100.c
Normal file
|
@ -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",
|
||||||
|
""
|
||||||
|
);
|
56
board/toradex/colibri_imx6/pf0100.h
Normal file
56
board/toradex/colibri_imx6/pf0100.h
Normal file
|
@ -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_ */
|
189
board/toradex/colibri_imx6/pf0100_otp.inc
Normal file
189
board/toradex/colibri_imx6/pf0100_otp.inc
Normal file
|
@ -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
|
||||||
|
};
|
|
@ -24,6 +24,7 @@
|
||||||
#include <power/pmic.h>
|
#include <power/pmic.h>
|
||||||
#include <power/rn5t567_pmic.h>
|
#include <power/rn5t567_pmic.h>
|
||||||
#include <usb/ehci-ci.h>
|
#include <usb/ehci-ci.h>
|
||||||
|
#include "../common/tdx-common.h"
|
||||||
|
|
||||||
DECLARE_GLOBAL_DATA_PTR;
|
DECLARE_GLOBAL_DATA_PTR;
|
||||||
|
|
||||||
|
@ -387,6 +388,13 @@ int checkboard(void)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined(CONFIG_OF_LIBFDT) && defined(CONFIG_OF_BOARD_SETUP)
|
||||||
|
int ft_board_setup(void *blob, bd_t *bd)
|
||||||
|
{
|
||||||
|
return ft_common_board_setup(blob, bd);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef CONFIG_USB_EHCI_MX7
|
#ifdef CONFIG_USB_EHCI_MX7
|
||||||
static iomux_v3_cfg_t const usb_otg2_pads[] = {
|
static iomux_v3_cfg_t const usb_otg2_pads[] = {
|
||||||
MX7D_PAD_UART3_CTS_B__USB_OTG2_PWR | MUX_PAD_CTRL(NO_PAD_CTRL),
|
MX7D_PAD_UART3_CTS_B__USB_OTG2_PWR | MUX_PAD_CTRL(NO_PAD_CTRL),
|
||||||
|
|
|
@ -18,6 +18,7 @@
|
||||||
#include <netdev.h>
|
#include <netdev.h>
|
||||||
#include <serial.h>
|
#include <serial.h>
|
||||||
#include <usb.h>
|
#include <usb.h>
|
||||||
|
#include "../common/tdx-common.h"
|
||||||
|
|
||||||
DECLARE_GLOBAL_DATA_PTR;
|
DECLARE_GLOBAL_DATA_PTR;
|
||||||
|
|
||||||
|
@ -43,6 +44,13 @@ int checkboard(void)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined(CONFIG_OF_LIBFDT) && defined(CONFIG_OF_BOARD_SETUP)
|
||||||
|
int ft_board_setup(void *blob, bd_t *bd)
|
||||||
|
{
|
||||||
|
return ft_common_board_setup(blob, bd);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
int dram_init(void)
|
int dram_init(void)
|
||||||
{
|
{
|
||||||
pxa2xx_dram_init();
|
pxa2xx_dram_init();
|
||||||
|
|
|
@ -15,6 +15,7 @@
|
||||||
#include <asm/io.h>
|
#include <asm/io.h>
|
||||||
#include <i2c.h>
|
#include <i2c.h>
|
||||||
#include <nand.h>
|
#include <nand.h>
|
||||||
|
#include "../common/tdx-common.h"
|
||||||
|
|
||||||
DECLARE_GLOBAL_DATA_PTR;
|
DECLARE_GLOBAL_DATA_PTR;
|
||||||
|
|
||||||
|
@ -74,6 +75,13 @@ int checkboard(void)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined(CONFIG_OF_LIBFDT) && defined(CONFIG_OF_BOARD_SETUP)
|
||||||
|
int ft_board_setup(void *blob, bd_t *bd)
|
||||||
|
{
|
||||||
|
return ft_common_board_setup(blob, bd);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef CONFIG_TEGRA_MMC
|
#ifdef CONFIG_TEGRA_MMC
|
||||||
/*
|
/*
|
||||||
* Routine: pin_mux_mmc
|
* Routine: pin_mux_mmc
|
||||||
|
|
|
@ -14,6 +14,7 @@
|
||||||
#include <asm/io.h>
|
#include <asm/io.h>
|
||||||
#include <i2c.h>
|
#include <i2c.h>
|
||||||
#include "pinmux-config-colibri_t30.h"
|
#include "pinmux-config-colibri_t30.h"
|
||||||
|
#include "../common/tdx-common.h"
|
||||||
|
|
||||||
int arch_misc_init(void)
|
int arch_misc_init(void)
|
||||||
{
|
{
|
||||||
|
@ -31,6 +32,13 @@ int checkboard(void)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined(CONFIG_OF_LIBFDT) && defined(CONFIG_OF_BOARD_SETUP)
|
||||||
|
int ft_board_setup(void *blob, bd_t *bd)
|
||||||
|
{
|
||||||
|
return ft_common_board_setup(blob, bd);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Routine: pinmux_init
|
* Routine: pinmux_init
|
||||||
* Description: Do individual peripheral pinmux configs
|
* Description: Do individual peripheral pinmux configs
|
||||||
|
|
|
@ -15,13 +15,17 @@
|
||||||
#include <asm/arch/crm_regs.h>
|
#include <asm/arch/crm_regs.h>
|
||||||
#include <asm/arch/clock.h>
|
#include <asm/arch/clock.h>
|
||||||
#include <mmc.h>
|
#include <mmc.h>
|
||||||
|
#include <fdt_support.h>
|
||||||
#include <fsl_esdhc.h>
|
#include <fsl_esdhc.h>
|
||||||
|
#include <jffs2/load_kernel.h>
|
||||||
#include <miiphy.h>
|
#include <miiphy.h>
|
||||||
|
#include <mtd_node.h>
|
||||||
#include <netdev.h>
|
#include <netdev.h>
|
||||||
#include <i2c.h>
|
#include <i2c.h>
|
||||||
#include <g_dnl.h>
|
#include <g_dnl.h>
|
||||||
#include <asm/gpio.h>
|
#include <asm/gpio.h>
|
||||||
#include <usb.h>
|
#include <usb.h>
|
||||||
|
#include "../common/tdx-common.h"
|
||||||
|
|
||||||
DECLARE_GLOBAL_DATA_PTR;
|
DECLARE_GLOBAL_DATA_PTR;
|
||||||
|
|
||||||
|
@ -364,12 +368,18 @@ static void clock_init(void)
|
||||||
clrsetbits_le32(&ccm->ccgr10, CCM_REG_CTRL_MASK,
|
clrsetbits_le32(&ccm->ccgr10, CCM_REG_CTRL_MASK,
|
||||||
CCM_CCGR10_NFC_CTRL_MASK);
|
CCM_CCGR10_NFC_CTRL_MASK);
|
||||||
|
|
||||||
#ifdef CONFIG_CI_UDC
|
#ifdef CONFIG_USB_EHCI_VF
|
||||||
setbits_le32(&ccm->ccgr1, CCM_CCGR1_USBC0_CTRL_MASK);
|
setbits_le32(&ccm->ccgr1, CCM_CCGR1_USBC0_CTRL_MASK);
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef CONFIG_USB_EHCI
|
|
||||||
setbits_le32(&ccm->ccgr7, CCM_CCGR7_USBC1_CTRL_MASK);
|
setbits_le32(&ccm->ccgr7, CCM_CCGR7_USBC1_CTRL_MASK);
|
||||||
|
|
||||||
|
clrsetbits_le32(&anadig->pll3_ctrl, ANADIG_PLL3_CTRL_BYPASS |
|
||||||
|
ANADIG_PLL3_CTRL_POWERDOWN |
|
||||||
|
ANADIG_PLL3_CTRL_DIV_SELECT,
|
||||||
|
ANADIG_PLL3_CTRL_ENABLE);
|
||||||
|
clrsetbits_le32(&anadig->pll7_ctrl, ANADIG_PLL7_CTRL_BYPASS |
|
||||||
|
ANADIG_PLL7_CTRL_POWERDOWN |
|
||||||
|
ANADIG_PLL7_CTRL_DIV_SELECT,
|
||||||
|
ANADIG_PLL7_CTRL_ENABLE);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
clrsetbits_le32(&anadig->pll5_ctrl, ANADIG_PLL5_CTRL_BYPASS |
|
clrsetbits_le32(&anadig->pll5_ctrl, ANADIG_PLL5_CTRL_BYPASS |
|
||||||
|
@ -418,7 +428,7 @@ static void clock_init(void)
|
||||||
CCM_CSCDR2_ESDHC1_EN | CCM_CSCDR2_ESDHC1_CLK_DIV(0) |
|
CCM_CSCDR2_ESDHC1_EN | CCM_CSCDR2_ESDHC1_CLK_DIV(0) |
|
||||||
CCM_CSCDR2_NFC_EN);
|
CCM_CSCDR2_NFC_EN);
|
||||||
clrsetbits_le32(&ccm->cscdr3, CCM_REG_CTRL_MASK,
|
clrsetbits_le32(&ccm->cscdr3, CCM_REG_CTRL_MASK,
|
||||||
CCM_CSCDR3_NFC_PRE_DIV(5));
|
CCM_CSCDR3_NFC_PRE_DIV(3));
|
||||||
clrsetbits_le32(&ccm->cscmr2, CCM_REG_CTRL_MASK,
|
clrsetbits_le32(&ccm->cscmr2, CCM_REG_CTRL_MASK,
|
||||||
CCM_CSCMR2_RMII_CLK_SEL(2));
|
CCM_CSCMR2_RMII_CLK_SEL(2));
|
||||||
}
|
}
|
||||||
|
@ -528,6 +538,23 @@ int checkboard(void)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined(CONFIG_OF_LIBFDT) && defined(CONFIG_OF_BOARD_SETUP)
|
||||||
|
int ft_board_setup(void *blob, bd_t *bd)
|
||||||
|
{
|
||||||
|
#ifdef CONFIG_FDT_FIXUP_PARTITIONS
|
||||||
|
static struct node_info nodes[] = {
|
||||||
|
{ "fsl,vf610-nfc", MTD_DEV_TYPE_NAND, }, /* NAND flash */
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Update partition nodes using info from mtdparts env var */
|
||||||
|
puts(" Updating MTD partitions...\n");
|
||||||
|
fdt_fixup_mtdparts(blob, nodes, ARRAY_SIZE(nodes));
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return ft_common_board_setup(blob, bd);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef CONFIG_USB_EHCI_VF
|
#ifdef CONFIG_USB_EHCI_VF
|
||||||
int board_ehci_hcd_init(int port)
|
int board_ehci_hcd_init(int port)
|
||||||
{
|
{
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue