mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-25 06:00:43 +00:00
Merge remote-tracking branch 'u-boot-imx/master'
This commit is contained in:
commit
f04821a8ca
43 changed files with 1865 additions and 493 deletions
|
@ -361,8 +361,12 @@ unsigned int mxc_get_clock(enum mxc_clock clk)
|
|||
return get_ipg_per_clk();
|
||||
case MXC_UART_CLK:
|
||||
return imx_get_uartclk();
|
||||
case MXC_ESDHC_CLK:
|
||||
case MXC_ESDHC1_CLK:
|
||||
return mxc_get_peri_clock(ESDHC1_CLK);
|
||||
case MXC_ESDHC2_CLK:
|
||||
return mxc_get_peri_clock(ESDHC2_CLK);
|
||||
case MXC_ESDHC3_CLK:
|
||||
return mxc_get_peri_clock(ESDHC3_CLK);
|
||||
case MXC_USB_CLK:
|
||||
return mxc_get_main_clock(USB_CLK);
|
||||
case MXC_FEC_CLK:
|
||||
|
@ -472,7 +476,13 @@ int cpu_mmc_init(bd_t *bis)
|
|||
int get_clocks(void)
|
||||
{
|
||||
#ifdef CONFIG_FSL_ESDHC
|
||||
gd->sdhc_clk = mxc_get_clock(MXC_ESDHC_CLK);
|
||||
#if CONFIG_SYS_FSL_ESDHC_ADDR == MMC_SDHC2_BASE_ADDR
|
||||
gd->sdhc_clk = mxc_get_clock(MXC_ESDHC2_CLK);
|
||||
#elif CONFIG_SYS_FSL_ESDHC_ADDR == MMC_SDHC3_BASE_ADDR
|
||||
gd->sdhc_clk = mxc_get_clock(MXC_ESDHC3_CLK);
|
||||
#else
|
||||
gd->sdhc_clk = mxc_get_clock(MXC_ESDHC1_CLK);
|
||||
#endif
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -338,7 +338,7 @@ static u32 get_ipg_per_clk(void)
|
|||
/* Get the output clock rate of a standard PLL MUX for peripherals. */
|
||||
static u32 get_standard_pll_sel_clk(u32 clk_sel)
|
||||
{
|
||||
u32 freq;
|
||||
u32 freq = 0;
|
||||
|
||||
switch (clk_sel & 0x3) {
|
||||
case 0:
|
||||
|
|
|
@ -26,6 +26,13 @@
|
|||
|
||||
.section ".text.init", "x"
|
||||
|
||||
.macro init_arm_erratum
|
||||
/* ARM erratum ID #468414 */
|
||||
mrc 15, 0, r1, c1, c0, 1
|
||||
orr r1, r1, #(1 << 5) /* enable L1NEON bit */
|
||||
mcr 15, 0, r1, c1, c0, 1
|
||||
.endm
|
||||
|
||||
/*
|
||||
* L2CC Cache setup/invalidation/disable
|
||||
*/
|
||||
|
@ -162,9 +169,9 @@ setup_pll_func:
|
|||
.endm
|
||||
|
||||
.macro init_clock
|
||||
#if defined (CONFIG_MX51)
|
||||
ldr r0, =CCM_BASE_ADDR
|
||||
|
||||
#if defined(CONFIG_MX51)
|
||||
/* Gate of clocks to the peripherals first */
|
||||
ldr r1, =0x3FFFFFFF
|
||||
str r1, [r0, #CLKCTL_CCGR0]
|
||||
|
@ -190,21 +197,6 @@ setup_pll_func:
|
|||
1: ldr r1, [r0, #CLKCTL_CDHIPR]
|
||||
cmp r1, #0x0
|
||||
bne 1b
|
||||
#else
|
||||
ldr r1, =0x3FFFFFFF
|
||||
str r1, [r0, #CLKCTL_CCGR0]
|
||||
str r4, [r0, #CLKCTL_CCGR1]
|
||||
str r4, [r0, #CLKCTL_CCGR2]
|
||||
str r4, [r0, #CLKCTL_CCGR3]
|
||||
str r4, [r0, #CLKCTL_CCGR7]
|
||||
|
||||
ldr r1, =0x00030000
|
||||
str r1, [r0, #CLKCTL_CCGR4]
|
||||
ldr r1, =0x00FFF030
|
||||
str r1, [r0, #CLKCTL_CCGR5]
|
||||
ldr r1, =0x0F00030F
|
||||
str r1, [r0, #CLKCTL_CCGR6]
|
||||
#endif
|
||||
|
||||
/* Switch ARM to step clock */
|
||||
mov r1, #0x4
|
||||
|
@ -217,7 +209,6 @@ setup_pll_func:
|
|||
setup_pll PLL1_BASE_ADDR, 800
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_MX51)
|
||||
setup_pll PLL3_BASE_ADDR, 665
|
||||
|
||||
/* Switch peripheral to PLL 3 */
|
||||
|
@ -234,7 +225,7 @@ setup_pll_func:
|
|||
str r1, [r0, #CLKCTL_CBCDR]
|
||||
ldr r1, =0x000020C0 | CONFIG_SYS_DDR_CLKSEL
|
||||
str r1, [r0, #CLKCTL_CBCMR]
|
||||
#endif
|
||||
|
||||
setup_pll PLL3_BASE_ADDR, 216
|
||||
|
||||
/* Set the platform clock dividers */
|
||||
|
@ -244,21 +235,17 @@ setup_pll_func:
|
|||
|
||||
ldr r0, =CCM_BASE_ADDR
|
||||
|
||||
#if defined(CONFIG_MX51)
|
||||
/* Run 3.0 at Full speed, for other TO's wait till we increase VDDGP */
|
||||
ldr r3, [r4, #ROM_SI_REV]
|
||||
cmp r3, #0x10
|
||||
movls r1, #0x1
|
||||
movhi r1, #0
|
||||
#else
|
||||
mov r1, #0
|
||||
#endif
|
||||
|
||||
str r1, [r0, #CLKCTL_CACRR]
|
||||
|
||||
/* Switch ARM back to PLL 1 */
|
||||
str r4, [r0, #CLKCTL_CCSR]
|
||||
|
||||
#if defined(CONFIG_MX51)
|
||||
/* setup the rest */
|
||||
/* Use lp_apm (24MHz) source for perclk */
|
||||
ldr r1, =0x000020C2 | CONFIG_SYS_DDR_CLKSEL
|
||||
|
@ -266,7 +253,6 @@ setup_pll_func:
|
|||
/* ddr clock from PLL 1, all perclk dividers are 1 since using 24MHz */
|
||||
ldr r1, =CONFIG_SYS_CLKTL_CBCDR
|
||||
str r1, [r0, #CLKCTL_CBCDR]
|
||||
#endif
|
||||
|
||||
/* Restore the default values in the Gate registers */
|
||||
ldr r1, =0xFFFFFFFF
|
||||
|
@ -277,36 +263,12 @@ setup_pll_func:
|
|||
str r1, [r0, #CLKCTL_CCGR4]
|
||||
str r1, [r0, #CLKCTL_CCGR5]
|
||||
str r1, [r0, #CLKCTL_CCGR6]
|
||||
#if defined(CONFIG_MX53)
|
||||
str r1, [r0, #CLKCTL_CCGR7]
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_MX51)
|
||||
/* Use PLL 2 for UART's, get 66.5MHz from it */
|
||||
ldr r1, =0xA5A2A020
|
||||
str r1, [r0, #CLKCTL_CSCMR1]
|
||||
ldr r1, =0x00C30321
|
||||
str r1, [r0, #CLKCTL_CSCDR1]
|
||||
#elif defined(CONFIG_MX53)
|
||||
/* Switch peripheral to PLL2 */
|
||||
ldr r0, =CCM_BASE_ADDR
|
||||
ldr r1, =0x00808145
|
||||
orr r1, r1, #2 << 10
|
||||
orr r1, r1, #1 << 19
|
||||
str r1, [r0, #CLKCTL_CBCDR]
|
||||
|
||||
ldr r1, =0x00016154
|
||||
str r1, [r0, #CLKCTL_CBCMR]
|
||||
/* Change uart clk parent to pll2*/
|
||||
ldr r1, [r0, #CLKCTL_CSCMR1]
|
||||
and r1, r1, #0xfcffffff
|
||||
orr r1, r1, #0x01000000
|
||||
str r1, [r0, #CLKCTL_CSCMR1]
|
||||
ldr r1, [r0, #CLKCTL_CSCDR1]
|
||||
and r1, r1, #0xffffffc0
|
||||
orr r1, r1, #0x0a
|
||||
str r1, [r0, #CLKCTL_CSCDR1]
|
||||
#endif
|
||||
/* make sure divider effective */
|
||||
1: ldr r1, [r0, #CLKCTL_CDHIPR]
|
||||
cmp r1, #0x0
|
||||
|
@ -318,6 +280,110 @@ setup_pll_func:
|
|||
mov r1, #0x000A0000
|
||||
add r1, r1, #0x00000F0
|
||||
str r1, [r0, #CLKCTL_CCOSR]
|
||||
#else /* CONFIG_MX53 */
|
||||
ldr r0, =CCM_BASE_ADDR
|
||||
|
||||
/* Gate of clocks to the peripherals first */
|
||||
ldr r1, =0x3FFFFFFF
|
||||
str r1, [r0, #CLKCTL_CCGR0]
|
||||
str r4, [r0, #CLKCTL_CCGR1]
|
||||
str r4, [r0, #CLKCTL_CCGR2]
|
||||
str r4, [r0, #CLKCTL_CCGR3]
|
||||
str r4, [r0, #CLKCTL_CCGR7]
|
||||
ldr r1, =0x00030000
|
||||
str r1, [r0, #CLKCTL_CCGR4]
|
||||
ldr r1, =0x00FFF030
|
||||
str r1, [r0, #CLKCTL_CCGR5]
|
||||
ldr r1, =0x0F00030F
|
||||
str r1, [r0, #CLKCTL_CCGR6]
|
||||
|
||||
/* Switch ARM to step clock */
|
||||
mov r1, #0x4
|
||||
str r1, [r0, #CLKCTL_CCSR]
|
||||
|
||||
setup_pll PLL1_BASE_ADDR, 800
|
||||
|
||||
setup_pll PLL3_BASE_ADDR, 400
|
||||
|
||||
/* Switch peripheral to PLL3 */
|
||||
ldr r0, =CCM_BASE_ADDR
|
||||
ldr r1, =0x00015154
|
||||
str r1, [r0, #CLKCTL_CBCMR]
|
||||
ldr r1, =0x02888945
|
||||
orr r1, r1, #(1 << 16)
|
||||
str r1, [r0, #CLKCTL_CBCDR]
|
||||
/* make sure change is effective */
|
||||
1: ldr r1, [r0, #CLKCTL_CDHIPR]
|
||||
cmp r1, #0x0
|
||||
bne 1b
|
||||
|
||||
setup_pll PLL2_BASE_ADDR, 400
|
||||
|
||||
/* Switch peripheral to PLL2 */
|
||||
ldr r0, =CCM_BASE_ADDR
|
||||
ldr r1, =0x00808145
|
||||
orr r1, r1, #(2 << 10)
|
||||
orr r1, r1, #(0 << 16)
|
||||
orr r1, r1, #(1 << 19)
|
||||
str r1, [r0, #CLKCTL_CBCDR]
|
||||
|
||||
ldr r1, =0x00016154
|
||||
str r1, [r0, #CLKCTL_CBCMR]
|
||||
|
||||
/*change uart clk parent to pll2*/
|
||||
ldr r1, [r0, #CLKCTL_CSCMR1]
|
||||
and r1, r1, #0xfcffffff
|
||||
orr r1, r1, #0x01000000
|
||||
str r1, [r0, #CLKCTL_CSCMR1]
|
||||
|
||||
/* make sure change is effective */
|
||||
1: ldr r1, [r0, #CLKCTL_CDHIPR]
|
||||
cmp r1, #0x0
|
||||
bne 1b
|
||||
|
||||
setup_pll PLL3_BASE_ADDR, 216
|
||||
|
||||
setup_pll PLL4_BASE_ADDR, 455
|
||||
|
||||
/* Set the platform clock dividers */
|
||||
ldr r0, =ARM_BASE_ADDR
|
||||
ldr r1, =0x00000124
|
||||
str r1, [r0, #0x14]
|
||||
|
||||
ldr r0, =CCM_BASE_ADDR
|
||||
mov r1, #0
|
||||
str r1, [r0, #CLKCTL_CACRR]
|
||||
|
||||
/* Switch ARM back to PLL 1. */
|
||||
mov r1, #0x0
|
||||
str r1, [r0, #CLKCTL_CCSR]
|
||||
|
||||
/* make uart div=6 */
|
||||
ldr r1, [r0, #CLKCTL_CSCDR1]
|
||||
and r1, r1, #0xffffffc0
|
||||
orr r1, r1, #0x0a
|
||||
str r1, [r0, #CLKCTL_CSCDR1]
|
||||
|
||||
/* Restore the default values in the Gate registers */
|
||||
ldr r1, =0xFFFFFFFF
|
||||
str r1, [r0, #CLKCTL_CCGR0]
|
||||
str r1, [r0, #CLKCTL_CCGR1]
|
||||
str r1, [r0, #CLKCTL_CCGR2]
|
||||
str r1, [r0, #CLKCTL_CCGR3]
|
||||
str r1, [r0, #CLKCTL_CCGR4]
|
||||
str r1, [r0, #CLKCTL_CCGR5]
|
||||
str r1, [r0, #CLKCTL_CCGR6]
|
||||
str r1, [r0, #CLKCTL_CCGR7]
|
||||
|
||||
mov r1, #0x00000
|
||||
str r1, [r0, #CLKCTL_CCDR]
|
||||
|
||||
/* for cko - for ARM div by 8 */
|
||||
mov r1, #0x000A0000
|
||||
add r1, r1, #0x00000F0
|
||||
str r1, [r0, #CLKCTL_CCOSR]
|
||||
|
||||
#endif /* CONFIG_MX53 */
|
||||
.endm
|
||||
|
||||
.macro setup_wdog
|
||||
|
@ -340,6 +406,8 @@ ENTRY(lowlevel_init)
|
|||
str r1, [r0, #0x4]
|
||||
#endif
|
||||
|
||||
init_arm_erratum
|
||||
|
||||
init_l2cc
|
||||
|
||||
init_aips
|
||||
|
@ -370,3 +438,9 @@ W_DP_665: .word DP_OP_665
|
|||
W_DP_216: .word DP_OP_216
|
||||
.word DP_MFD_216
|
||||
.word DP_MFN_216
|
||||
W_DP_400: .word DP_OP_400
|
||||
.word DP_MFD_400
|
||||
.word DP_MFN_400
|
||||
W_DP_455: .word DP_OP_455
|
||||
.word DP_MFD_455
|
||||
.word DP_MFN_455
|
||||
|
|
|
@ -54,9 +54,10 @@ int imx_iomux_v3_setup_pad(iomux_v3_cfg_t pad)
|
|||
return 0;
|
||||
}
|
||||
|
||||
int imx_iomux_v3_setup_multiple_pads(iomux_v3_cfg_t *pad_list, unsigned count)
|
||||
int imx_iomux_v3_setup_multiple_pads(iomux_v3_cfg_t const *pad_list,
|
||||
unsigned count)
|
||||
{
|
||||
iomux_v3_cfg_t *p = pad_list;
|
||||
iomux_v3_cfg_t const *p = pad_list;
|
||||
int i;
|
||||
int ret;
|
||||
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
* Copyright (C) 2009, DENX Software Engineering
|
||||
* Author: John Rigby <jcrigby@gmail.com
|
||||
*
|
||||
* Based on arch-mx31/mx31-regs.h
|
||||
* Based on arch-mx31/imx-regs.h
|
||||
* Copyright (C) 2009 Ilya Yanok,
|
||||
* Emcraft Systems <yanok@emcraft.com>
|
||||
* and arch-mx27/imx-regs.h
|
||||
|
@ -33,8 +33,7 @@
|
|||
#ifndef _IMX_REGS_H
|
||||
#define _IMX_REGS_H
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
|
||||
#if !(defined(__KERNEL_STRICT_NAMES) || defined(__ASSEMBLY__))
|
||||
#include <asm/types.h>
|
||||
|
||||
#ifdef CONFIG_FEC_MXC
|
||||
|
@ -254,6 +253,7 @@ struct aips_regs {
|
|||
|
||||
/* 128K Internal Static RAM */
|
||||
#define IMX_RAM_BASE (0x78000000)
|
||||
#define IMX_RAM_SIZE (128 * 1024)
|
||||
|
||||
/* SDRAM BANKS */
|
||||
#define IMX_SDRAM_BANK0_BASE (0x80000000)
|
||||
|
|
|
@ -44,7 +44,9 @@ enum mxc_clock {
|
|||
MXC_IPG_CLK,
|
||||
MXC_IPG_PERCLK,
|
||||
MXC_UART_CLK,
|
||||
MXC_ESDHC_CLK,
|
||||
MXC_ESDHC1_CLK,
|
||||
MXC_ESDHC2_CLK,
|
||||
MXC_ESDHC3_CLK,
|
||||
MXC_USB_CLK,
|
||||
MXC_CSPI_CLK,
|
||||
MXC_FEC_CLK,
|
||||
|
|
|
@ -19,122 +19,121 @@
|
|||
* MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
#include <asm/arch/imx-regs.h>
|
||||
#include <generated/asm-offsets.h>
|
||||
#include <asm/macro.h>
|
||||
|
||||
/*
|
||||
* AIPS setup - Only setup MPROTx registers.
|
||||
* The PACR default values are good.
|
||||
*
|
||||
* Default argument values:
|
||||
* - MPR: Set all MPROTx to be non-bufferable, trusted for R/W, not forced to
|
||||
* user-mode.
|
||||
* - OPACR: Clear the on and off peripheral modules Supervisor Protect bit for
|
||||
* SDMA to access them.
|
||||
*/
|
||||
.macro init_aips
|
||||
/*
|
||||
* Set all MPROTx to be non-bufferable, trusted for R/W,
|
||||
* not forced to user-mode.
|
||||
*/
|
||||
ldr r0, =AIPS1_BASE_ADDR
|
||||
ldr r1, =AIPS_MPR_CONFIG
|
||||
str r1, [r0, #0x00]
|
||||
str r1, [r0, #0x04]
|
||||
ldr r0, =AIPS2_BASE_ADDR
|
||||
str r1, [r0, #0x00]
|
||||
str r1, [r0, #0x04]
|
||||
.macro init_aips mpr=0x77777777, opacr=0x00000000
|
||||
ldr r0, =AIPS1_BASE_ADDR
|
||||
ldr r1, =\mpr
|
||||
str r1, [r0, #AIPS_MPR_0_7]
|
||||
str r1, [r0, #AIPS_MPR_8_15]
|
||||
ldr r2, =AIPS2_BASE_ADDR
|
||||
str r1, [r2, #AIPS_MPR_0_7]
|
||||
str r1, [r2, #AIPS_MPR_8_15]
|
||||
|
||||
/*
|
||||
* Clear the on and off peripheral modules Supervisor Protect bit
|
||||
* for SDMA to access them. Did not change the AIPS control registers
|
||||
* (offset 0x20) access type
|
||||
*/
|
||||
ldr r0, =AIPS1_BASE_ADDR
|
||||
ldr r1, =AIPS_OPACR_CONFIG
|
||||
str r1, [r0, #0x40]
|
||||
str r1, [r0, #0x44]
|
||||
str r1, [r0, #0x48]
|
||||
str r1, [r0, #0x4C]
|
||||
str r1, [r0, #0x50]
|
||||
ldr r0, =AIPS2_BASE_ADDR
|
||||
str r1, [r0, #0x40]
|
||||
str r1, [r0, #0x44]
|
||||
str r1, [r0, #0x48]
|
||||
str r1, [r0, #0x4C]
|
||||
str r1, [r0, #0x50]
|
||||
/* Did not change the AIPS control registers access type. */
|
||||
ldr r1, =\opacr
|
||||
str r1, [r0, #AIPS_OPACR_0_7]
|
||||
str r1, [r0, #AIPS_OPACR_8_15]
|
||||
str r1, [r0, #AIPS_OPACR_16_23]
|
||||
str r1, [r0, #AIPS_OPACR_24_31]
|
||||
str r1, [r0, #AIPS_OPACR_32_39]
|
||||
str r1, [r2, #AIPS_OPACR_0_7]
|
||||
str r1, [r2, #AIPS_OPACR_8_15]
|
||||
str r1, [r2, #AIPS_OPACR_16_23]
|
||||
str r1, [r2, #AIPS_OPACR_24_31]
|
||||
str r1, [r2, #AIPS_OPACR_32_39]
|
||||
.endm
|
||||
|
||||
/* MAX (Multi-Layer AHB Crossbar Switch) setup */
|
||||
.macro init_max
|
||||
ldr r0, =MAX_BASE_ADDR
|
||||
/* MPR - priority is M4 > M2 > M3 > M5 > M0 > M1 */
|
||||
ldr r1, =MAX_MPR_CONFIG
|
||||
str r1, [r0, #0x000] /* for S0 */
|
||||
str r1, [r0, #0x100] /* for S1 */
|
||||
str r1, [r0, #0x200] /* for S2 */
|
||||
str r1, [r0, #0x300] /* for S3 */
|
||||
str r1, [r0, #0x400] /* for S4 */
|
||||
/* SGPCR - always park on last master */
|
||||
ldr r1, =MAX_SGPCR_CONFIG
|
||||
str r1, [r0, #0x010] /* for S0 */
|
||||
str r1, [r0, #0x110] /* for S1 */
|
||||
str r1, [r0, #0x210] /* for S2 */
|
||||
str r1, [r0, #0x310] /* for S3 */
|
||||
str r1, [r0, #0x410] /* for S4 */
|
||||
/* MGPCR - restore default values */
|
||||
ldr r1, =MAX_MGPCR_CONFIG
|
||||
str r1, [r0, #0x800] /* for M0 */
|
||||
str r1, [r0, #0x900] /* for M1 */
|
||||
str r1, [r0, #0xA00] /* for M2 */
|
||||
str r1, [r0, #0xB00] /* for M3 */
|
||||
str r1, [r0, #0xC00] /* for M4 */
|
||||
str r1, [r0, #0xD00] /* for M5 */
|
||||
/*
|
||||
* MAX (Multi-Layer AHB Crossbar Switch) setup
|
||||
*
|
||||
* Default argument values:
|
||||
* - MPR: priority is M4 > M2 > M3 > M5 > M0 > M1
|
||||
* - SGPCR: always park on last master
|
||||
* - MGPCR: restore default values
|
||||
*/
|
||||
.macro init_max mpr=0x00302154, sgpcr=0x00000010, mgpcr=0x00000000
|
||||
ldr r0, =MAX_BASE_ADDR
|
||||
ldr r1, =\mpr
|
||||
str r1, [r0, #MAX_MPR0] /* for S0 */
|
||||
str r1, [r0, #MAX_MPR1] /* for S1 */
|
||||
str r1, [r0, #MAX_MPR2] /* for S2 */
|
||||
str r1, [r0, #MAX_MPR3] /* for S3 */
|
||||
str r1, [r0, #MAX_MPR4] /* for S4 */
|
||||
ldr r1, =\sgpcr
|
||||
str r1, [r0, #MAX_SGPCR0] /* for S0 */
|
||||
str r1, [r0, #MAX_SGPCR1] /* for S1 */
|
||||
str r1, [r0, #MAX_SGPCR2] /* for S2 */
|
||||
str r1, [r0, #MAX_SGPCR3] /* for S3 */
|
||||
str r1, [r0, #MAX_SGPCR4] /* for S4 */
|
||||
ldr r1, =\mgpcr
|
||||
str r1, [r0, #MAX_MGPCR0] /* for M0 */
|
||||
str r1, [r0, #MAX_MGPCR1] /* for M1 */
|
||||
str r1, [r0, #MAX_MGPCR2] /* for M2 */
|
||||
str r1, [r0, #MAX_MGPCR3] /* for M3 */
|
||||
str r1, [r0, #MAX_MGPCR4] /* for M4 */
|
||||
str r1, [r0, #MAX_MGPCR5] /* for M5 */
|
||||
.endm
|
||||
|
||||
/* M3IF setup */
|
||||
.macro init_m3if
|
||||
/* Configure M3IF registers */
|
||||
ldr r1, =M3IF_BASE_ADDR
|
||||
/*
|
||||
* M3IF Control Register (M3IFCTL)
|
||||
* MRRP[0] = L2CC0 not on priority list (0 << 0) = 0x00000000
|
||||
* MRRP[1] = L2CC1 not on priority list (0 << 0) = 0x00000000
|
||||
* MRRP[2] = MBX not on priority list (0 << 0) = 0x00000000
|
||||
* MRRP[3] = MAX1 not on priority list (0 << 0) = 0x00000000
|
||||
* MRRP[4] = SDMA not on priority list (0 << 0) = 0x00000000
|
||||
* MRRP[5] = MPEG4 not on priority list (0 << 0) = 0x00000000
|
||||
* MRRP[6] = IPU1 on priority list (1 << 6) = 0x00000040
|
||||
* MRRP[7] = IPU2 not on priority list (0 << 0) = 0x00000000
|
||||
* ------------
|
||||
* 0x00000040
|
||||
*/
|
||||
ldr r0, =M3IF_CONFIG
|
||||
str r0, [r1] /* M3IF control reg */
|
||||
/*
|
||||
* M3IF setup
|
||||
*
|
||||
* Default argument values:
|
||||
* - CTL:
|
||||
* MRRP[0] = L2CC0 not on priority list (0 << 0) = 0x00000000
|
||||
* MRRP[1] = L2CC1 not on priority list (0 << 1) = 0x00000000
|
||||
* MRRP[2] = MBX not on priority list (0 << 2) = 0x00000000
|
||||
* MRRP[3] = MAX1 not on priority list (0 << 3) = 0x00000000
|
||||
* MRRP[4] = SDMA not on priority list (0 << 4) = 0x00000000
|
||||
* MRRP[5] = MPEG4 not on priority list (0 << 5) = 0x00000000
|
||||
* MRRP[6] = IPU1 on priority list (1 << 6) = 0x00000040
|
||||
* MRRP[7] = IPU2 not on priority list (0 << 7) = 0x00000000
|
||||
* ------------
|
||||
* 0x00000040
|
||||
*/
|
||||
.macro init_m3if ctl=0x00000040
|
||||
/* M3IF Control Register (M3IFCTL) */
|
||||
write32 M3IF_BASE_ADDR, \ctl
|
||||
.endm
|
||||
|
||||
.macro core_init
|
||||
mrc 15, 0, r1, c1, c0, 0
|
||||
|
||||
mrc 15, 0, r0, c1, c0, 1
|
||||
orr r0, r0, #7
|
||||
mcr 15, 0, r0, c1, c0, 1
|
||||
orr r1, r1, #(1<<11)
|
||||
|
||||
/* Set unaligned access enable */
|
||||
orr r1, r1, #(1<<22)
|
||||
|
||||
/* Set low int latency enable */
|
||||
orr r1, r1, #(1<<21)
|
||||
|
||||
mcr 15, 0, r1, c1, c0, 0
|
||||
|
||||
mov r0, #0
|
||||
mrc p15, 0, r1, c1, c0, 0
|
||||
|
||||
/* Set branch prediction enable */
|
||||
mcr 15, 0, r0, c15, c2, 4
|
||||
mrc p15, 0, r0, c1, c0, 1
|
||||
orr r0, r0, #7
|
||||
mcr p15, 0, r0, c1, c0, 1
|
||||
orr r1, r1, #1 << 11
|
||||
|
||||
mcr 15, 0, r0, c7, c7, 0 /* invalidate I cache and D cache */
|
||||
mcr 15, 0, r0, c8, c7, 0 /* invalidate TLBs */
|
||||
mcr 15, 0, r0, c7, c10, 4 /* Drain the write buffer */
|
||||
/* Set unaligned access enable */
|
||||
orr r1, r1, #1 << 22
|
||||
|
||||
/*
|
||||
* initializes very early AIPS
|
||||
* Then it also initializes Multi-Layer AHB Crossbar Switch,
|
||||
* M3IF
|
||||
* Also setup the Peripheral Port Remap register inside the core
|
||||
*/
|
||||
ldr r0, =0x40000015 /* start from AIPS 2GB region */
|
||||
mcr p15, 0, r0, c15, c2, 4
|
||||
/* Set low int latency enable */
|
||||
orr r1, r1, #1 << 21
|
||||
|
||||
mcr p15, 0, r1, c1, c0, 0
|
||||
|
||||
mov r0, #0
|
||||
|
||||
mcr p15, 0, r0, c15, c2, 4
|
||||
|
||||
mcr p15, 0, r0, c7, c7, 0 /* Invalidate I cache and D cache */
|
||||
mcr p15, 0, r0, c8, c7, 0 /* Invalidate TLBs */
|
||||
mcr p15, 0, r0, c7, c10, 4 /* Drain the write buffer */
|
||||
|
||||
/* Setup the Peripheral Port Memory Remap Register */
|
||||
ldr r0, =0x40000015 /* Start from AIPS 2-GB region */
|
||||
mcr p15, 0, r0, c15, c2, 4
|
||||
.endm
|
||||
|
|
|
@ -308,6 +308,10 @@
|
|||
#define DP_MFD_400 (3 - 1)
|
||||
#define DP_MFN_400 1
|
||||
|
||||
#define DP_OP_455 ((9 << 4) + ((2 - 1) << 0))
|
||||
#define DP_MFD_455 (48 - 1)
|
||||
#define DP_MFN_455 23
|
||||
|
||||
#define DP_OP_216 ((6 << 4) + ((3 - 1) << 0))
|
||||
#define DP_MFD_216 (4 - 1)
|
||||
#define DP_MFN_216 3
|
||||
|
|
|
@ -200,6 +200,12 @@ struct src {
|
|||
u32 gpr10;
|
||||
};
|
||||
|
||||
/* OCOTP Registers */
|
||||
struct ocotp_regs {
|
||||
u32 reserved[0x198];
|
||||
u32 gp1; /* 0x660 */
|
||||
};
|
||||
|
||||
/* GPR3 bitfields */
|
||||
#define IOMUXC_GPR3_GPU_DBG_OFFSET 29
|
||||
#define IOMUXC_GPR3_GPU_DBG_MASK (3<<IOMUXC_GPR3_GPU_DBG_OFFSET)
|
||||
|
|
|
@ -530,20 +530,20 @@ enum {
|
|||
MX6Q_PAD_EIM_BCLK__IPU1_DI1_PIN16 = IOMUX_PAD(0x046C, 0x0158, 1, 0x0000, 0, 0),
|
||||
MX6Q_PAD_EIM_BCLK__GPIO_6_31 = IOMUX_PAD(0x046C, 0x0158, 5, 0x0000, 0, 0),
|
||||
MX6Q_PAD_EIM_BCLK__TPSMP_HDATA_31 = IOMUX_PAD(0x046C, 0x0158, 6, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DI0_DISP_CLK__IPU1_DI0_DISP_CLK = IOMUX_PAD(0x0470, 0x015C, 0, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DI0_DISP_CLK__IPU1_DI0_DISP_CLK = IOMUX_PAD(0x0470, 0x015C, 0, 0x0000, 0, PAD_CTL_DSE_120ohm),
|
||||
MX6Q_PAD_DI0_DISP_CLK__IPU2_DI0_DISP_CLK = IOMUX_PAD(0x0470, 0x015C, 1, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DI0_DISP_CLK__MIPI_CR_DPY_OT28 = IOMUX_PAD(0x0470, 0x015C, 3, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DI0_DISP_CLK__SDMA_DBG_CR_STA0 = IOMUX_PAD(0x0470, 0x015C, 4, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DI0_DISP_CLK__GPIO_4_16 = IOMUX_PAD(0x0470, 0x015C, 5, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DI0_DISP_CLK__MMDC_DEBUG_0 = IOMUX_PAD(0x0470, 0x015C, 6, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DI0_PIN15__IPU1_DI0_PIN15 = IOMUX_PAD(0x0474, 0x0160, 0, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DI0_PIN15__IPU1_DI0_PIN15 = IOMUX_PAD(0x0474, 0x0160, 0, 0x0000, 0, PAD_CTL_DSE_120ohm),
|
||||
MX6Q_PAD_DI0_PIN15__IPU2_DI0_PIN15 = IOMUX_PAD(0x0474, 0x0160, 1, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DI0_PIN15__AUDMUX_AUD6_TXC = IOMUX_PAD(0x0474, 0x0160, 2, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DI0_PIN15__MIPI_CR_DPHY_OUT_29 = IOMUX_PAD(0x0474, 0x0160, 3, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DI0_PIN15__SDMA_DBG_CORE_STA_1 = IOMUX_PAD(0x0474, 0x0160, 4, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DI0_PIN15__GPIO_4_17 = IOMUX_PAD(0x0474, 0x0160, 5, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DI0_PIN15__MMDC_MMDC_DEBUG_1 = IOMUX_PAD(0x0474, 0x0160, 6, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DI0_PIN2__IPU1_DI0_PIN2 = IOMUX_PAD(0x0478, 0x0164, 0, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DI0_PIN2__IPU1_DI0_PIN2 = IOMUX_PAD(0x0478, 0x0164, 0, 0x0000, 0, PAD_CTL_DSE_120ohm),
|
||||
MX6Q_PAD_DI0_PIN2__IPU2_DI0_PIN2 = IOMUX_PAD(0x0478, 0x0164, 1, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DI0_PIN2__AUDMUX_AUD6_TXD = IOMUX_PAD(0x0478, 0x0164, 2, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DI0_PIN2__MIPI_CR_DPHY_OUT_30 = IOMUX_PAD(0x0478, 0x0164, 3, 0x0000, 0, 0),
|
||||
|
@ -551,7 +551,7 @@ enum {
|
|||
MX6Q_PAD_DI0_PIN2__GPIO_4_18 = IOMUX_PAD(0x0478, 0x0164, 5, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DI0_PIN2__MMDC_DEBUG_2 = IOMUX_PAD(0x0478, 0x0164, 6, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DI0_PIN2__PL301_PER1_HADDR_9 = IOMUX_PAD(0x0478, 0x0164, 7, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DI0_PIN3__IPU1_DI0_PIN3 = IOMUX_PAD(0x047C, 0x0168, 0, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DI0_PIN3__IPU1_DI0_PIN3 = IOMUX_PAD(0x047C, 0x0168, 0, 0x0000, 0, PAD_CTL_DSE_120ohm),
|
||||
MX6Q_PAD_DI0_PIN3__IPU2_DI0_PIN3 = IOMUX_PAD(0x047C, 0x0168, 1, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DI0_PIN3__AUDMUX_AUD6_TXFS = IOMUX_PAD(0x047C, 0x0168, 2, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DI0_PIN3__MIPI_CORE_DPHY_OUT31 = IOMUX_PAD(0x047C, 0x0168, 3, 0x0000, 0, 0),
|
||||
|
@ -564,17 +564,17 @@ enum {
|
|||
MX6Q_PAD_DI0_PIN4__AUDMUX_AUD6_RXD = IOMUX_PAD(0x0480, 0x016C, 2, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DI0_PIN4__USDHC1_WP = IOMUX_PAD(0x0480, 0x016C, 3, 0x094C, 0, 0),
|
||||
MX6Q_PAD_DI0_PIN4__SDMA_DEBUG_YIELD = IOMUX_PAD(0x0480, 0x016C, 4, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DI0_PIN4__GPIO_4_20 = IOMUX_PAD(0x0480, 0x016C, 5, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DI0_PIN4__GPIO_4_20 = IOMUX_PAD(0x0480, 0x016C, 5, 0x0000, 0, PAD_CTL_DSE_120ohm),
|
||||
MX6Q_PAD_DI0_PIN4__MMDC_MMDC_DEBUG_4 = IOMUX_PAD(0x0480, 0x016C, 6, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DI0_PIN4__PL301_PER1_HADDR_11 = IOMUX_PAD(0x0480, 0x016C, 7, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DISP0_DAT0__IPU1_DISP0_DAT_0 = IOMUX_PAD(0x0484, 0x0170, 0, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DISP0_DAT0__IPU1_DISP0_DAT_0 = IOMUX_PAD(0x0484, 0x0170, 0, 0x0000, 0, PAD_CTL_DSE_120ohm),
|
||||
MX6Q_PAD_DISP0_DAT0__IPU2_DISP0_DAT_0 = IOMUX_PAD(0x0484, 0x0170, 1, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DISP0_DAT0__ECSPI3_SCLK = IOMUX_PAD(0x0484, 0x0170, 2, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DISP0_DAT0__USDHC1_USDHC_DBG_0 = IOMUX_PAD(0x0484, 0x0170, 3, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DISP0_DAT0__SDMA_DBG_CORE_RUN = IOMUX_PAD(0x0484, 0x0170, 4, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DISP0_DAT0__GPIO_4_21 = IOMUX_PAD(0x0484, 0x0170, 5, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DISP0_DAT0__MMDC_MMDC_DEBUG_5 = IOMUX_PAD(0x0484, 0x0170, 6, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DISP0_DAT1__IPU1_DISP0_DAT_1 = IOMUX_PAD(0x0488, 0x0174, 0, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DISP0_DAT1__IPU1_DISP0_DAT_1 = IOMUX_PAD(0x0488, 0x0174, 0, 0x0000, 0, PAD_CTL_DSE_120ohm),
|
||||
MX6Q_PAD_DISP0_DAT1__IPU2_DISP0_DAT_1 = IOMUX_PAD(0x0488, 0x0174, 1, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DISP0_DAT1__ECSPI3_MOSI = IOMUX_PAD(0x0488, 0x0174, 2, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DISP0_DAT1__USDHC1_USDHC_DBG_1 = IOMUX_PAD(0x0488, 0x0174, 3, 0x0000, 0, 0),
|
||||
|
@ -582,7 +582,7 @@ enum {
|
|||
MX6Q_PAD_DISP0_DAT1__GPIO_4_22 = IOMUX_PAD(0x0488, 0x0174, 5, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DISP0_DAT1__MMDC_DEBUG_6 = IOMUX_PAD(0x0488, 0x0174, 6, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DISP0_DAT1__PL301_PER1_HADR_12 = IOMUX_PAD(0x0488, 0x0174, 7, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DISP0_DAT2__IPU1_DISP0_DAT_2 = IOMUX_PAD(0x048C, 0x0178, 0, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DISP0_DAT2__IPU1_DISP0_DAT_2 = IOMUX_PAD(0x048C, 0x0178, 0, 0x0000, 0, PAD_CTL_DSE_120ohm),
|
||||
MX6Q_PAD_DISP0_DAT2__IPU2_DISP0_DAT_2 = IOMUX_PAD(0x048C, 0x0178, 1, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DISP0_DAT2__ECSPI3_MISO = IOMUX_PAD(0x048C, 0x0178, 2, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DISP0_DAT2__USDHC1_USDHC_DBG_2 = IOMUX_PAD(0x048C, 0x0178, 3, 0x0000, 0, 0),
|
||||
|
@ -590,7 +590,7 @@ enum {
|
|||
MX6Q_PAD_DISP0_DAT2__GPIO_4_23 = IOMUX_PAD(0x048C, 0x0178, 5, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DISP0_DAT2__MMDC_DEBUG_7 = IOMUX_PAD(0x048C, 0x0178, 6, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DISP0_DAT2__PL301_PER1_HADR_13 = IOMUX_PAD(0x048C, 0x0178, 7, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DISP0_DAT3__IPU1_DISP0_DAT_3 = IOMUX_PAD(0x0490, 0x017C, 0, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DISP0_DAT3__IPU1_DISP0_DAT_3 = IOMUX_PAD(0x0490, 0x017C, 0, 0x0000, 0, PAD_CTL_DSE_120ohm),
|
||||
MX6Q_PAD_DISP0_DAT3__IPU2_DISP0_DAT_3 = IOMUX_PAD(0x0490, 0x017C, 1, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DISP0_DAT3__ECSPI3_SS0 = IOMUX_PAD(0x0490, 0x017C, 2, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DISP0_DAT3__USDHC1_USDHC_DBG_3 = IOMUX_PAD(0x0490, 0x017C, 3, 0x0000, 0, 0),
|
||||
|
@ -598,7 +598,7 @@ enum {
|
|||
MX6Q_PAD_DISP0_DAT3__GPIO_4_24 = IOMUX_PAD(0x0490, 0x017C, 5, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DISP0_DAT3__MMDC_MMDC_DBG_8 = IOMUX_PAD(0x0490, 0x017C, 6, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DISP0_DAT3__PL301_PER1_HADR_14 = IOMUX_PAD(0x0490, 0x017C, 7, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DISP0_DAT4__IPU1_DISP0_DAT_4 = IOMUX_PAD(0x0494, 0x0180, 0, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DISP0_DAT4__IPU1_DISP0_DAT_4 = IOMUX_PAD(0x0494, 0x0180, 0, 0x0000, 0, PAD_CTL_DSE_120ohm),
|
||||
MX6Q_PAD_DISP0_DAT4__IPU2_DISP0_DAT_4 = IOMUX_PAD(0x0494, 0x0180, 1, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DISP0_DAT4__ECSPI3_SS1 = IOMUX_PAD(0x0494, 0x0180, 2, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DISP0_DAT4__USDHC1_USDHC_DBG_4 = IOMUX_PAD(0x0494, 0x0180, 3, 0x0000, 0, 0),
|
||||
|
@ -606,7 +606,7 @@ enum {
|
|||
MX6Q_PAD_DISP0_DAT4__GPIO_4_25 = IOMUX_PAD(0x0494, 0x0180, 5, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DISP0_DAT4__MMDC_MMDC_DEBUG_9 = IOMUX_PAD(0x0494, 0x0180, 6, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DISP0_DAT4__PL301_PER1_HADR_15 = IOMUX_PAD(0x0494, 0x0180, 7, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DISP0_DAT5__IPU1_DISP0_DAT_5 = IOMUX_PAD(0x0498, 0x0184, 0, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DISP0_DAT5__IPU1_DISP0_DAT_5 = IOMUX_PAD(0x0498, 0x0184, 0, 0x0000, 0, PAD_CTL_DSE_120ohm),
|
||||
MX6Q_PAD_DISP0_DAT5__IPU2_DISP0_DAT_5 = IOMUX_PAD(0x0498, 0x0184, 1, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DISP0_DAT5__ECSPI3_SS2 = IOMUX_PAD(0x0498, 0x0184, 2, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DISP0_DAT5__AUDMUX_AUD6_RXFS = IOMUX_PAD(0x0498, 0x0184, 3, 0x0000, 0, 0),
|
||||
|
@ -614,7 +614,7 @@ enum {
|
|||
MX6Q_PAD_DISP0_DAT5__GPIO_4_26 = IOMUX_PAD(0x0498, 0x0184, 5, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DISP0_DAT5__MMDC_DEBUG_10 = IOMUX_PAD(0x0498, 0x0184, 6, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DISP0_DAT5__PL301_PER1_HADR_16 = IOMUX_PAD(0x0498, 0x0184, 7, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DISP0_DAT6__IPU1_DISP0_DAT_6 = IOMUX_PAD(0x049C, 0x0188, 0, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DISP0_DAT6__IPU1_DISP0_DAT_6 = IOMUX_PAD(0x049C, 0x0188, 0, 0x0000, 0, PAD_CTL_DSE_120ohm),
|
||||
MX6Q_PAD_DISP0_DAT6__IPU2_DISP0_DAT_6 = IOMUX_PAD(0x049C, 0x0188, 1, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DISP0_DAT6__ECSPI3_SS3 = IOMUX_PAD(0x049C, 0x0188, 2, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DISP0_DAT6__AUDMUX_AUD6_RXC = IOMUX_PAD(0x049C, 0x0188, 3, 0x0000, 0, 0),
|
||||
|
@ -622,7 +622,7 @@ enum {
|
|||
MX6Q_PAD_DISP0_DAT6__GPIO_4_27 = IOMUX_PAD(0x049C, 0x0188, 5, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DISP0_DAT6__MMDC_DEBUG_11 = IOMUX_PAD(0x049C, 0x0188, 6, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DISP0_DAT6__PL301_PER1_HADR_17 = IOMUX_PAD(0x049C, 0x0188, 7, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DISP0_DAT7__IPU1_DISP0_DAT_7 = IOMUX_PAD(0x04A0, 0x018C, 0, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DISP0_DAT7__IPU1_DISP0_DAT_7 = IOMUX_PAD(0x04A0, 0x018C, 0, 0x0000, 0, PAD_CTL_DSE_120ohm),
|
||||
MX6Q_PAD_DISP0_DAT7__IPU2_DISP0_DAT_7 = IOMUX_PAD(0x04A0, 0x018C, 1, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DISP0_DAT7__ECSPI3_RDY = IOMUX_PAD(0x04A0, 0x018C, 2, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DISP0_DAT7__USDHC1_USDHC_DBG_5 = IOMUX_PAD(0x04A0, 0x018C, 3, 0x0000, 0, 0),
|
||||
|
@ -630,7 +630,7 @@ enum {
|
|||
MX6Q_PAD_DISP0_DAT7__GPIO_4_28 = IOMUX_PAD(0x04A0, 0x018C, 5, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DISP0_DAT7__MMDC_DEBUG_12 = IOMUX_PAD(0x04A0, 0x018C, 6, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DISP0_DAT7__PL301_PER1_HADR_18 = IOMUX_PAD(0x04A0, 0x018C, 7, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DISP0_DAT8__IPU1_DISP0_DAT_8 = IOMUX_PAD(0x04A4, 0x0190, 0, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DISP0_DAT8__IPU1_DISP0_DAT_8 = IOMUX_PAD(0x04A4, 0x0190, 0, 0x0000, 0, PAD_CTL_DSE_120ohm),
|
||||
MX6Q_PAD_DISP0_DAT8__IPU2_DISP0_DAT_8 = IOMUX_PAD(0x04A4, 0x0190, 1, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DISP0_DAT8__PWM1_PWMO = IOMUX_PAD(0x04A4, 0x0190, 2, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DISP0_DAT8__WDOG1_WDOG_B = IOMUX_PAD(0x04A4, 0x0190, 3, 0x0000, 0, 0),
|
||||
|
@ -638,7 +638,7 @@ enum {
|
|||
MX6Q_PAD_DISP0_DAT8__GPIO_4_29 = IOMUX_PAD(0x04A4, 0x0190, 5, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DISP0_DAT8__MMDC_DEBUG_13 = IOMUX_PAD(0x04A4, 0x0190, 6, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DISP0_DAT8__PL301_PER1_HADR_19 = IOMUX_PAD(0x04A4, 0x0190, 7, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DISP0_DAT9__IPU1_DISP0_DAT_9 = IOMUX_PAD(0x04A8, 0x0194, 0, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DISP0_DAT9__IPU1_DISP0_DAT_9 = IOMUX_PAD(0x04A8, 0x0194, 0, 0x0000, 0, PAD_CTL_DSE_120ohm),
|
||||
MX6Q_PAD_DISP0_DAT9__IPU2_DISP0_DAT_9 = IOMUX_PAD(0x04A8, 0x0194, 1, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DISP0_DAT9__PWM2_PWMO = IOMUX_PAD(0x04A8, 0x0194, 2, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DISP0_DAT9__WDOG2_WDOG_B = IOMUX_PAD(0x04A8, 0x0194, 3, 0x0000, 0, 0),
|
||||
|
@ -646,41 +646,41 @@ enum {
|
|||
MX6Q_PAD_DISP0_DAT9__GPIO_4_30 = IOMUX_PAD(0x04A8, 0x0194, 5, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DISP0_DAT9__MMDC_DEBUG_14 = IOMUX_PAD(0x04A8, 0x0194, 6, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DISP0_DAT9__PL301_PER1_HADR_20 = IOMUX_PAD(0x04A8, 0x0194, 7, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DISP0_DAT10__IPU1_DISP0_DAT_10 = IOMUX_PAD(0x04AC, 0x0198, 0, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DISP0_DAT10__IPU1_DISP0_DAT_10 = IOMUX_PAD(0x04AC, 0x0198, 0, 0x0000, 0, PAD_CTL_DSE_120ohm),
|
||||
MX6Q_PAD_DISP0_DAT10__IPU2_DISP0_DAT_10 = IOMUX_PAD(0x04AC, 0x0198, 1, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DISP0_DAT10__USDHC1_DBG_6 = IOMUX_PAD(0x04AC, 0x0198, 3, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DISP0_DAT10__SDMA_DBG_EVT_CHN3 = IOMUX_PAD(0x04AC, 0x0198, 4, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DISP0_DAT10__GPIO_4_31 = IOMUX_PAD(0x04AC, 0x0198, 5, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DISP0_DAT10__MMDC_DEBUG_15 = IOMUX_PAD(0x04AC, 0x0198, 6, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DISP0_DAT10__PL301_PER1_HADR21 = IOMUX_PAD(0x04AC, 0x0198, 7, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DISP0_DAT11__IPU1_DISP0_DAT_11 = IOMUX_PAD(0x04B0, 0x019C, 0, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DISP0_DAT11__IPU1_DISP0_DAT_11 = IOMUX_PAD(0x04B0, 0x019C, 0, 0x0000, 0, PAD_CTL_DSE_120ohm),
|
||||
MX6Q_PAD_DISP0_DAT11__IPU2_DISP0_DAT_11 = IOMUX_PAD(0x04B0, 0x019C, 1, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DISP0_DAT11__USDHC1_USDHC_DBG7 = IOMUX_PAD(0x04B0, 0x019C, 3, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DISP0_DAT11__SDMA_DBG_EVT_CHN4 = IOMUX_PAD(0x04B0, 0x019C, 4, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DISP0_DAT11__GPIO_5_5 = IOMUX_PAD(0x04B0, 0x019C, 5, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DISP0_DAT11__MMDC_DEBUG_16 = IOMUX_PAD(0x04B0, 0x019C, 6, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DISP0_DAT11__PL301_PER1_HADR22 = IOMUX_PAD(0x04B0, 0x019C, 7, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DISP0_DAT12__IPU1_DISP0_DAT_12 = IOMUX_PAD(0x04B4, 0x01A0, 0, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DISP0_DAT12__IPU1_DISP0_DAT_12 = IOMUX_PAD(0x04B4, 0x01A0, 0, 0x0000, 0, PAD_CTL_DSE_120ohm),
|
||||
MX6Q_PAD_DISP0_DAT12__IPU2_DISP0_DAT_12 = IOMUX_PAD(0x04B4, 0x01A0, 1, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DISP0_DAT12__RESERVED_RESERVED = IOMUX_PAD(0x04B4, 0x01A0, 3, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DISP0_DAT12__SDMA_DBG_EVT_CHN5 = IOMUX_PAD(0x04B4, 0x01A0, 4, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DISP0_DAT12__GPIO_5_6 = IOMUX_PAD(0x04B4, 0x01A0, 5, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DISP0_DAT12__MMDC_DEBUG_17 = IOMUX_PAD(0x04B4, 0x01A0, 6, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DISP0_DAT12__PL301_PER1_HADR23 = IOMUX_PAD(0x04B4, 0x01A0, 7, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DISP0_DAT13__IPU1_DISP0_DAT_13 = IOMUX_PAD(0x04B8, 0x01A4, 0, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DISP0_DAT13__IPU1_DISP0_DAT_13 = IOMUX_PAD(0x04B8, 0x01A4, 0, 0x0000, 0, PAD_CTL_DSE_120ohm),
|
||||
MX6Q_PAD_DISP0_DAT13__IPU2_DISP0_DAT_13 = IOMUX_PAD(0x04B8, 0x01A4, 1, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DISP0_DAT13__AUDMUX_AUD5_RXFS = IOMUX_PAD(0x04B8, 0x01A4, 3, 0x07D8, 1, 0),
|
||||
MX6Q_PAD_DISP0_DAT13__SDMA_DBG_EVT_CHN0 = IOMUX_PAD(0x04B8, 0x01A4, 4, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DISP0_DAT13__GPIO_5_7 = IOMUX_PAD(0x04B8, 0x01A4, 5, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DISP0_DAT13__MMDC_DEBUG_18 = IOMUX_PAD(0x04B8, 0x01A4, 6, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DISP0_DAT13__PL301_PER1_HADR24 = IOMUX_PAD(0x04B8, 0x01A4, 7, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DISP0_DAT14__IPU1_DISP0_DAT_14 = IOMUX_PAD(0x04BC, 0x01A8, 0, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DISP0_DAT14__IPU1_DISP0_DAT_14 = IOMUX_PAD(0x04BC, 0x01A8, 0, 0x0000, 0, PAD_CTL_DSE_120ohm),
|
||||
MX6Q_PAD_DISP0_DAT14__IPU2_DISP0_DAT_14 = IOMUX_PAD(0x04BC, 0x01A8, 1, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DISP0_DAT14__AUDMUX_AUD5_RXC = IOMUX_PAD(0x04BC, 0x01A8, 3, 0x07D4, 1, 0),
|
||||
MX6Q_PAD_DISP0_DAT14__SDMA_DBG_EVT_CHN1 = IOMUX_PAD(0x04BC, 0x01A8, 4, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DISP0_DAT14__GPIO_5_8 = IOMUX_PAD(0x04BC, 0x01A8, 5, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DISP0_DAT14__MMDC_DEBUG_19 = IOMUX_PAD(0x04BC, 0x01A8, 6, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DISP0_DAT15__IPU1_DISP0_DAT_15 = IOMUX_PAD(0x04C0, 0x01AC, 0, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DISP0_DAT15__IPU1_DISP0_DAT_15 = IOMUX_PAD(0x04C0, 0x01AC, 0, 0x0000, 0, PAD_CTL_DSE_120ohm),
|
||||
MX6Q_PAD_DISP0_DAT15__IPU2_DISP0_DAT_15 = IOMUX_PAD(0x04C0, 0x01AC, 1, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DISP0_DAT15__ECSPI1_SS1 = IOMUX_PAD(0x04C0, 0x01AC, 2, 0x0804, 1, 0),
|
||||
MX6Q_PAD_DISP0_DAT15__ECSPI2_SS1 = IOMUX_PAD(0x04C0, 0x01AC, 3, 0x0820, 1, 0),
|
||||
|
@ -688,7 +688,7 @@ enum {
|
|||
MX6Q_PAD_DISP0_DAT15__GPIO_5_9 = IOMUX_PAD(0x04C0, 0x01AC, 5, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DISP0_DAT15__MMDC_DEBUG_20 = IOMUX_PAD(0x04C0, 0x01AC, 6, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DISP0_DAT15__PL301_PER1_HADR25 = IOMUX_PAD(0x04C0, 0x01AC, 7, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DISP0_DAT16__IPU1_DISP0_DAT_16 = IOMUX_PAD(0x04C4, 0x01B0, 0, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DISP0_DAT16__IPU1_DISP0_DAT_16 = IOMUX_PAD(0x04C4, 0x01B0, 0, 0x0000, 0, PAD_CTL_DSE_120ohm),
|
||||
MX6Q_PAD_DISP0_DAT16__IPU2_DISP0_DAT_16 = IOMUX_PAD(0x04C4, 0x01B0, 1, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DISP0_DAT16__ECSPI2_MOSI = IOMUX_PAD(0x04C4, 0x01B0, 2, 0x0818, 1, 0),
|
||||
MX6Q_PAD_DISP0_DAT16__AUDMUX_AUD5_TXC = IOMUX_PAD(0x04C4, 0x01B0, 3, 0x07DC, 0, 0),
|
||||
|
@ -696,7 +696,7 @@ enum {
|
|||
MX6Q_PAD_DISP0_DAT16__GPIO_5_10 = IOMUX_PAD(0x04C4, 0x01B0, 5, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DISP0_DAT16__MMDC_DEBUG_21 = IOMUX_PAD(0x04C4, 0x01B0, 6, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DISP0_DAT16__PL301_PER1_HADR26 = IOMUX_PAD(0x04C4, 0x01B0, 7, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DISP0_DAT17__IPU1_DISP0_DAT_17 = IOMUX_PAD(0x04C8, 0x01B4, 0, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DISP0_DAT17__IPU1_DISP0_DAT_17 = IOMUX_PAD(0x04C8, 0x01B4, 0, 0x0000, 0, PAD_CTL_DSE_120ohm),
|
||||
MX6Q_PAD_DISP0_DAT17__IPU2_DISP0_DAT_17 = IOMUX_PAD(0x04C8, 0x01B4, 1, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DISP0_DAT17__ECSPI2_MISO = IOMUX_PAD(0x04C8, 0x01B4, 2, 0x0814, 1, 0),
|
||||
MX6Q_PAD_DISP0_DAT17__AUDMUX_AUD5_TXD = IOMUX_PAD(0x04C8, 0x01B4, 3, 0x07D0, 0, 0),
|
||||
|
@ -704,7 +704,7 @@ enum {
|
|||
MX6Q_PAD_DISP0_DAT17__GPIO_5_11 = IOMUX_PAD(0x04C8, 0x01B4, 5, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DISP0_DAT17__MMDC_DEBUG_22 = IOMUX_PAD(0x04C8, 0x01B4, 6, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DISP0_DAT17__PL301_PER1_HADR27 = IOMUX_PAD(0x04C8, 0x01B4, 7, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DISP0_DAT18__IPU1_DISP0_DAT_18 = IOMUX_PAD(0x04CC, 0x01B8, 0, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DISP0_DAT18__IPU1_DISP0_DAT_18 = IOMUX_PAD(0x04CC, 0x01B8, 0, 0x0000, 0, PAD_CTL_DSE_120ohm),
|
||||
MX6Q_PAD_DISP0_DAT18__IPU2_DISP0_DAT_18 = IOMUX_PAD(0x04CC, 0x01B8, 1, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DISP0_DAT18__ECSPI2_SS0 = IOMUX_PAD(0x04CC, 0x01B8, 2, 0x081C, 1, 0),
|
||||
MX6Q_PAD_DISP0_DAT18__AUDMUX_AUD5_TXFS = IOMUX_PAD(0x04CC, 0x01B8, 3, 0x07E0, 0, 0),
|
||||
|
@ -712,7 +712,7 @@ enum {
|
|||
MX6Q_PAD_DISP0_DAT18__GPIO_5_12 = IOMUX_PAD(0x04CC, 0x01B8, 5, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DISP0_DAT18__MMDC_DEBUG_23 = IOMUX_PAD(0x04CC, 0x01B8, 6, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DISP0_DAT18__WEIM_WEIM_CS_2 = IOMUX_PAD(0x04CC, 0x01B8, 7, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DISP0_DAT19__IPU1_DISP0_DAT_19 = IOMUX_PAD(0x04D0, 0x01BC, 0, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DISP0_DAT19__IPU1_DISP0_DAT_19 = IOMUX_PAD(0x04D0, 0x01BC, 0, 0x0000, 0, PAD_CTL_DSE_120ohm),
|
||||
MX6Q_PAD_DISP0_DAT19__IPU2_DISP0_DAT_19 = IOMUX_PAD(0x04D0, 0x01BC, 1, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DISP0_DAT19__ECSPI2_SCLK = IOMUX_PAD(0x04D0, 0x01BC, 2, 0x0810, 1, 0),
|
||||
MX6Q_PAD_DISP0_DAT19__AUDMUX_AUD5_RXD = IOMUX_PAD(0x04D0, 0x01BC, 3, 0x07CC, 0, 0),
|
||||
|
@ -720,7 +720,7 @@ enum {
|
|||
MX6Q_PAD_DISP0_DAT19__GPIO_5_13 = IOMUX_PAD(0x04D0, 0x01BC, 5, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DISP0_DAT19__MMDC_DEBUG_24 = IOMUX_PAD(0x04D0, 0x01BC, 6, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DISP0_DAT19__WEIM_WEIM_CS_3 = IOMUX_PAD(0x04D0, 0x01BC, 7, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DISP0_DAT20__IPU1_DISP0_DAT_20 = IOMUX_PAD(0x04D4, 0x01C0, 0, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DISP0_DAT20__IPU1_DISP0_DAT_20 = IOMUX_PAD(0x04D4, 0x01C0, 0, 0x0000, 0, PAD_CTL_DSE_120ohm),
|
||||
MX6Q_PAD_DISP0_DAT20__IPU2_DISP0_DAT_20 = IOMUX_PAD(0x04D4, 0x01C0, 1, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DISP0_DAT20__ECSPI1_SCLK = IOMUX_PAD(0x04D4, 0x01C0, 2, 0x07F4, 1, 0),
|
||||
MX6Q_PAD_DISP0_DAT20__AUDMUX_AUD4_TXC = IOMUX_PAD(0x04D4, 0x01C0, 3, 0x07C4, 0, 0),
|
||||
|
@ -728,7 +728,7 @@ enum {
|
|||
MX6Q_PAD_DISP0_DAT20__GPIO_5_14 = IOMUX_PAD(0x04D4, 0x01C0, 5, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DISP0_DAT20__MMDC_DEBUG_25 = IOMUX_PAD(0x04D4, 0x01C0, 6, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DISP0_DAT20__PL301_PER1_HADR28 = IOMUX_PAD(0x04D4, 0x01C0, 7, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DISP0_DAT21__IPU1_DISP0_DAT_21 = IOMUX_PAD(0x04D8, 0x01C4, 0, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DISP0_DAT21__IPU1_DISP0_DAT_21 = IOMUX_PAD(0x04D8, 0x01C4, 0, 0x0000, 0, PAD_CTL_DSE_120ohm),
|
||||
MX6Q_PAD_DISP0_DAT21__IPU2_DISP0_DAT_21 = IOMUX_PAD(0x04D8, 0x01C4, 1, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DISP0_DAT21__ECSPI1_MOSI = IOMUX_PAD(0x04D8, 0x01C4, 2, 0x07FC, 1, 0),
|
||||
MX6Q_PAD_DISP0_DAT21__AUDMUX_AUD4_TXD = IOMUX_PAD(0x04D8, 0x01C4, 3, 0x07B8, 1, 0),
|
||||
|
@ -736,7 +736,7 @@ enum {
|
|||
MX6Q_PAD_DISP0_DAT21__GPIO_5_15 = IOMUX_PAD(0x04D8, 0x01C4, 5, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DISP0_DAT21__MMDC_DEBUG_26 = IOMUX_PAD(0x04D8, 0x01C4, 6, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DISP0_DAT21__PL301_PER1_HADR29 = IOMUX_PAD(0x04D8, 0x01C4, 7, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DISP0_DAT22__IPU1_DISP0_DAT_22 = IOMUX_PAD(0x04DC, 0x01C8, 0, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DISP0_DAT22__IPU1_DISP0_DAT_22 = IOMUX_PAD(0x04DC, 0x01C8, 0, 0x0000, 0, PAD_CTL_DSE_120ohm),
|
||||
MX6Q_PAD_DISP0_DAT22__IPU2_DISP0_DAT_22 = IOMUX_PAD(0x04DC, 0x01C8, 1, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DISP0_DAT22__ECSPI1_MISO = IOMUX_PAD(0x04DC, 0x01C8, 2, 0x07F8, 1, 0),
|
||||
MX6Q_PAD_DISP0_DAT22__AUDMUX_AUD4_TXFS = IOMUX_PAD(0x04DC, 0x01C8, 3, 0x07C8, 1, 0),
|
||||
|
@ -744,7 +744,7 @@ enum {
|
|||
MX6Q_PAD_DISP0_DAT22__GPIO_5_16 = IOMUX_PAD(0x04DC, 0x01C8, 5, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DISP0_DAT22__MMDC_DEBUG_27 = IOMUX_PAD(0x04DC, 0x01C8, 6, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DISP0_DAT22__PL301_PER1_HADR30 = IOMUX_PAD(0x04DC, 0x01C8, 7, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DISP0_DAT23__IPU1_DISP0_DAT_23 = IOMUX_PAD(0x04E0, 0x01CC, 0, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DISP0_DAT23__IPU1_DISP0_DAT_23 = IOMUX_PAD(0x04E0, 0x01CC, 0, 0x0000, 0, PAD_CTL_DSE_120ohm),
|
||||
MX6Q_PAD_DISP0_DAT23__IPU2_DISP0_DAT_23 = IOMUX_PAD(0x04E0, 0x01CC, 1, 0x0000, 0, 0),
|
||||
MX6Q_PAD_DISP0_DAT23__ECSPI1_SS0 = IOMUX_PAD(0x04E0, 0x01CC, 2, 0x0800, 1, 0),
|
||||
MX6Q_PAD_DISP0_DAT23__AUDMUX_AUD4_RXD = IOMUX_PAD(0x04E0, 0x01CC, 3, 0x07B4, 1, 0),
|
||||
|
|
1053
arch/arm/include/asm/arch-mx6/mxc_hdmi.h
Normal file
1053
arch/arm/include/asm/arch-mx6/mxc_hdmi.h
Normal file
File diff suppressed because it is too large
Load diff
|
@ -98,6 +98,7 @@ typedef u64 iomux_v3_cfg_t;
|
|||
#define MUX_CONFIG_SION (0x1 << 4)
|
||||
|
||||
int imx_iomux_v3_setup_pad(iomux_v3_cfg_t pad);
|
||||
int imx_iomux_v3_setup_multiple_pads(iomux_v3_cfg_t *pad_list, unsigned count);
|
||||
int imx_iomux_v3_setup_multiple_pads(iomux_v3_cfg_t const *pad_list,
|
||||
unsigned count);
|
||||
|
||||
#endif /* __MACH_IOMUX_V3_H__*/
|
||||
|
|
|
@ -22,47 +22,6 @@
|
|||
*/
|
||||
|
||||
#include <config.h>
|
||||
#include <asm-offsets.h>
|
||||
#include <asm/arch/imx-regs.h>
|
||||
#include <generated/asm-offsets.h>
|
||||
|
||||
/*
|
||||
* Configuration for the flea3 board.
|
||||
* These defines are used by the included macros and must
|
||||
* be defined first
|
||||
*/
|
||||
#define AIPS_MPR_CONFIG 0x77777777
|
||||
#define AIPS_OPACR_CONFIG 0x00000000
|
||||
|
||||
/* MPR - priority is M4 > M2 > M3 > M5 > M0 > M1 */
|
||||
#define MAX_MPR_CONFIG 0x00302154
|
||||
|
||||
/* SGPCR - always park on last master */
|
||||
#define MAX_SGPCR_CONFIG 0x00000010
|
||||
|
||||
/* MGPCR - restore default values */
|
||||
#define MAX_MGPCR_CONFIG 0x00000000
|
||||
|
||||
/*
|
||||
* M3IF Control Register (M3IFCTL)
|
||||
* MRRP[0] = L2CC0 not on priority list (0 << 0) = 0x00000000
|
||||
* MRRP[1] = L2CC1 not on priority list (0 << 0) = 0x00000000
|
||||
* MRRP[2] = MBX not on priority list (0 << 0) = 0x00000000
|
||||
* MRRP[3] = MAX1 not on priority list (0 << 0) = 0x00000000
|
||||
* MRRP[4] = SDMA not on priority list (0 << 0) = 0x00000000
|
||||
* MRRP[5] = MPEG4 not on priority list (0 << 0) = 0x00000000
|
||||
* MRRP[6] = IPU1 on priority list (1 << 6) = 0x00000040
|
||||
* MRRP[7] = IPU2 not on priority list (0 << 0) = 0x00000000
|
||||
* ------------
|
||||
* 0x00000040
|
||||
*/
|
||||
#define M3IF_CONFIG 0x00000040
|
||||
|
||||
#define CCM_PDR0_CONFIG 0x00801000
|
||||
|
||||
/*
|
||||
* includes MX35 utility macros
|
||||
*/
|
||||
#include <asm/arch/lowlevel_macro.S>
|
||||
|
||||
.globl lowlevel_init
|
||||
|
|
|
@ -217,6 +217,7 @@ int board_mmc_init(bd_t *bis)
|
|||
PAD_CTL_HYS_ENABLE | PAD_CTL_DRV_HIGH | PAD_CTL_PUE_PULL |
|
||||
PAD_CTL_PKE_ENABLE | PAD_CTL_HYS_ENABLE | PAD_CTL_47K_PU);
|
||||
|
||||
esdhc_cfg.sdhc_clk = mxc_get_clock(MXC_ESDHC_CLK);
|
||||
return fsl_esdhc_initialize(bis, &esdhc_cfg);
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -23,6 +23,7 @@
|
|||
#include <asm/arch/imx-regs.h>
|
||||
#include <generated/asm-offsets.h>
|
||||
#include "mx35pdk.h"
|
||||
#include <asm/arch/lowlevel_macro.S>
|
||||
|
||||
/*
|
||||
* return soc version
|
||||
|
@ -40,91 +41,6 @@
|
|||
addne \ret, \ret, #0x10
|
||||
.endm
|
||||
|
||||
/*
|
||||
* AIPS setup - Only setup MPROTx registers.
|
||||
* The PACR default values are good.
|
||||
*/
|
||||
.macro init_aips
|
||||
/*
|
||||
* Set all MPROTx to be non-bufferable, trusted for R/W,
|
||||
* not forced to user-mode.
|
||||
*/
|
||||
ldr r0, =AIPS1_BASE_ADDR
|
||||
ldr r1, =AIPS_MPR_CONFIG
|
||||
str r1, [r0, #0x00]
|
||||
str r1, [r0, #0x04]
|
||||
ldr r0, =AIPS2_BASE_ADDR
|
||||
str r1, [r0, #0x00]
|
||||
str r1, [r0, #0x04]
|
||||
|
||||
/*
|
||||
* Clear the on and off peripheral modules Supervisor Protect bit
|
||||
* for SDMA to access them. Did not change the AIPS control registers
|
||||
* (offset 0x20) access type
|
||||
*/
|
||||
ldr r0, =AIPS1_BASE_ADDR
|
||||
ldr r1, =AIPS_OPACR_CONFIG
|
||||
str r1, [r0, #0x40]
|
||||
str r1, [r0, #0x44]
|
||||
str r1, [r0, #0x48]
|
||||
str r1, [r0, #0x4C]
|
||||
str r1, [r0, #0x50]
|
||||
ldr r0, =AIPS2_BASE_ADDR
|
||||
str r1, [r0, #0x40]
|
||||
str r1, [r0, #0x44]
|
||||
str r1, [r0, #0x48]
|
||||
str r1, [r0, #0x4C]
|
||||
str r1, [r0, #0x50]
|
||||
.endm
|
||||
|
||||
/* MAX (Multi-Layer AHB Crossbar Switch) setup */
|
||||
.macro init_max
|
||||
ldr r0, =MAX_BASE_ADDR
|
||||
/* MPR - priority is M4 > M2 > M3 > M5 > M0 > M1 */
|
||||
ldr r1, =MAX_MPR_CONFIG
|
||||
str r1, [r0, #0x000] /* for S0 */
|
||||
str r1, [r0, #0x100] /* for S1 */
|
||||
str r1, [r0, #0x200] /* for S2 */
|
||||
str r1, [r0, #0x300] /* for S3 */
|
||||
str r1, [r0, #0x400] /* for S4 */
|
||||
/* SGPCR - always park on last master */
|
||||
ldr r1, =MAX_SGPCR_CONFIG
|
||||
str r1, [r0, #0x010] /* for S0 */
|
||||
str r1, [r0, #0x110] /* for S1 */
|
||||
str r1, [r0, #0x210] /* for S2 */
|
||||
str r1, [r0, #0x310] /* for S3 */
|
||||
str r1, [r0, #0x410] /* for S4 */
|
||||
/* MGPCR - restore default values */
|
||||
ldr r1, =MAX_MGPCR_CONFIG
|
||||
str r1, [r0, #0x800] /* for M0 */
|
||||
str r1, [r0, #0x900] /* for M1 */
|
||||
str r1, [r0, #0xA00] /* for M2 */
|
||||
str r1, [r0, #0xB00] /* for M3 */
|
||||
str r1, [r0, #0xC00] /* for M4 */
|
||||
str r1, [r0, #0xD00] /* for M5 */
|
||||
.endm
|
||||
|
||||
/* M3IF setup */
|
||||
.macro init_m3if
|
||||
/* Configure M3IF registers */
|
||||
ldr r1, =M3IF_BASE_ADDR
|
||||
/*
|
||||
* M3IF Control Register (M3IFCTL)
|
||||
* MRRP[0] = L2CC0 not on priority list (0 << 0) = 0x00000000
|
||||
* MRRP[1] = L2CC1 not on priority list (0 << 0) = 0x00000000
|
||||
* MRRP[2] = MBX not on priority list (0 << 0) = 0x00000000
|
||||
* MRRP[3] = MAX1 not on priority list (0 << 0) = 0x00000000
|
||||
* MRRP[4] = SDMA not on priority list (0 << 0) = 0x00000000
|
||||
* MRRP[5] = MPEG4 not on priority list (0 << 0) = 0x00000000
|
||||
* MRRP[6] = IPU1 on priority list (1 << 6) = 0x00000040
|
||||
* MRRP[7] = IPU2 not on priority list (0 << 0) = 0x00000000
|
||||
* ------------
|
||||
* 0x00000040
|
||||
*/
|
||||
ldr r0, =M3IF_CONFIG
|
||||
str r0, [r1] /* M3IF control reg */
|
||||
.endm
|
||||
|
||||
/* CPLD on CS5 setup */
|
||||
.macro init_debug_board
|
||||
ldr r0, =DBG_BASE_ADDR
|
||||
|
@ -210,38 +126,7 @@
|
|||
lowlevel_init:
|
||||
mov r10, lr
|
||||
|
||||
mrc 15, 0, r1, c1, c0, 0
|
||||
|
||||
mrc 15, 0, r0, c1, c0, 1
|
||||
orr r0, r0, #7
|
||||
mcr 15, 0, r0, c1, c0, 1
|
||||
orr r1, r1, #(1<<11)
|
||||
|
||||
/* Set unaligned access enable */
|
||||
orr r1, r1, #(1<<22)
|
||||
|
||||
/* Set low int latency enable */
|
||||
orr r1, r1, #(1<<21)
|
||||
|
||||
mcr 15, 0, r1, c1, c0, 0
|
||||
|
||||
mov r0, #0
|
||||
|
||||
/* Set branch prediction enable */
|
||||
mcr 15, 0, r0, c15, c2, 4
|
||||
|
||||
mcr 15, 0, r0, c7, c7, 0 /* invalidate I cache and D cache */
|
||||
mcr 15, 0, r0, c8, c7, 0 /* invalidate TLBs */
|
||||
mcr 15, 0, r0, c7, c10, 4 /* Drain the write buffer */
|
||||
|
||||
/*
|
||||
* initializes very early AIPS
|
||||
* Then it also initializes Multi-Layer AHB Crossbar Switch,
|
||||
* M3IF
|
||||
* Also setup the Peripheral Port Remap register inside the core
|
||||
*/
|
||||
ldr r0, =0x40000015 /* start from AIPS 2GB region */
|
||||
mcr p15, 0, r0, c15, c2, 4
|
||||
core_init
|
||||
|
||||
init_aips
|
||||
|
||||
|
|
|
@ -27,6 +27,7 @@
|
|||
#include <asm/errno.h>
|
||||
#include <asm/arch/imx-regs.h>
|
||||
#include <asm/arch/crm_regs.h>
|
||||
#include <asm/arch/clock.h>
|
||||
#include <asm/arch/mx35_pins.h>
|
||||
#include <asm/arch/iomux.h>
|
||||
#include <i2c.h>
|
||||
|
@ -292,6 +293,7 @@ int board_mmc_init(bd_t *bis)
|
|||
mxc_request_iomux(MX35_PIN_SD1_DATA2, MUX_CONFIG_FUNC);
|
||||
mxc_request_iomux(MX35_PIN_SD1_DATA3, MUX_CONFIG_FUNC);
|
||||
|
||||
esdhc_cfg.sdhc_clk = mxc_get_clock(MXC_ESDHC1_CLK);
|
||||
return fsl_esdhc_initialize(bis, &esdhc_cfg);
|
||||
}
|
||||
|
||||
|
|
|
@ -26,31 +26,6 @@
|
|||
#ifndef __BOARD_MX35_3STACK_H
|
||||
#define __BOARD_MX35_3STACK_H
|
||||
|
||||
#define AIPS_MPR_CONFIG 0x77777777
|
||||
#define AIPS_OPACR_CONFIG 0x00000000
|
||||
|
||||
/* MPR - priority is M4 > M2 > M3 > M5 > M0 > M1 */
|
||||
#define MAX_MPR_CONFIG 0x00302154
|
||||
/* SGPCR - always park on last master */
|
||||
#define MAX_SGPCR_CONFIG 0x00000010
|
||||
/* MGPCR - restore default values */
|
||||
#define MAX_MGPCR_CONFIG 0x00000000
|
||||
|
||||
/*
|
||||
* M3IF Control Register (M3IFCTL)
|
||||
* MRRP[0] = L2CC0 not on priority list (0 << 0) = 0x00000000
|
||||
* MRRP[1] = L2CC1 not on priority list (0 << 0) = 0x00000000
|
||||
* MRRP[2] = MBX not on priority list (0 << 0) = 0x00000000
|
||||
* MRRP[3] = MAX1 not on priority list (0 << 0) = 0x00000000
|
||||
* MRRP[4] = SDMA not on priority list (0 << 0) = 0x00000000
|
||||
* MRRP[5] = MPEG4 not on priority list (0 << 0) = 0x00000000
|
||||
* MRRP[6] = IPU1 on priority list (1 << 6) = 0x00000040
|
||||
* MRRP[7] = IPU2 not on priority list (0 << 0) = 0x00000000
|
||||
* ------------
|
||||
* 0x00000040
|
||||
*/
|
||||
#define M3IF_CONFIG 0x00000040
|
||||
|
||||
#define DBG_BASE_ADDR WEIM_CTRL_CS5
|
||||
#define DBG_CSCR_U_CONFIG 0x0000D843
|
||||
#define DBG_CSCR_L_CONFIG 0x22252521
|
||||
|
|
|
@ -29,6 +29,7 @@
|
|||
#include <asm/errno.h>
|
||||
#include <asm/arch/sys_proto.h>
|
||||
#include <asm/arch/crm_regs.h>
|
||||
#include <asm/arch/clock.h>
|
||||
#include <i2c.h>
|
||||
#include <mmc.h>
|
||||
#include <fsl_esdhc.h>
|
||||
|
@ -358,6 +359,9 @@ int board_mmc_init(bd_t *bis)
|
|||
u32 index;
|
||||
s32 status = 0;
|
||||
|
||||
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) {
|
||||
|
@ -467,7 +471,7 @@ int board_mmc_init(bd_t *bis)
|
|||
}
|
||||
#endif
|
||||
|
||||
static struct fb_videomode claa_wvga = {
|
||||
static struct fb_videomode const claa_wvga = {
|
||||
.name = "CLAA07LC0ACW",
|
||||
.refresh = 57,
|
||||
.xres = 800,
|
||||
|
|
|
@ -26,6 +26,7 @@
|
|||
#include <asm/arch/mx5x_pins.h>
|
||||
#include <asm/arch/sys_proto.h>
|
||||
#include <asm/arch/crm_regs.h>
|
||||
#include <asm/arch/clock.h>
|
||||
#include <asm/arch/iomux.h>
|
||||
#include <asm/errno.h>
|
||||
#include <netdev.h>
|
||||
|
@ -106,6 +107,9 @@ int board_mmc_init(bd_t *bis)
|
|||
u32 index;
|
||||
s32 status = 0;
|
||||
|
||||
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:
|
||||
|
|
|
@ -26,6 +26,7 @@
|
|||
#include <asm/arch/mx5x_pins.h>
|
||||
#include <asm/arch/sys_proto.h>
|
||||
#include <asm/arch/crm_regs.h>
|
||||
#include <asm/arch/clock.h>
|
||||
#include <asm/arch/iomux.h>
|
||||
#include <asm/errno.h>
|
||||
#include <asm/imx-common/boot_mode.h>
|
||||
|
@ -232,6 +233,9 @@ int board_mmc_init(bd_t *bis)
|
|||
u32 index;
|
||||
s32 status = 0;
|
||||
|
||||
esdhc_cfg[0].sdhc_clk = mxc_get_clock(MXC_ESDHC_CLK);
|
||||
esdhc_cfg[1].sdhc_clk = mxc_get_clock(MXC_ESDHC3_CLK);
|
||||
|
||||
for (index = 0; index < CONFIG_SYS_FSL_ESDHC_NUM; index++) {
|
||||
switch (index) {
|
||||
case 0:
|
||||
|
|
|
@ -192,6 +192,9 @@ int board_mmc_init(bd_t *bis)
|
|||
u32 index;
|
||||
s32 status = 0;
|
||||
|
||||
esdhc_cfg[0].sdhc_clk = mxc_get_clock(MXC_ESDHC_CLK);
|
||||
esdhc_cfg[1].sdhc_clk = mxc_get_clock(MXC_ESDHC3_CLK);
|
||||
|
||||
for (index = 0; index < CONFIG_SYS_FSL_ESDHC_NUM; index++) {
|
||||
switch (index) {
|
||||
case 0:
|
||||
|
@ -409,7 +412,7 @@ static void clock_1GHz(void)
|
|||
printf("CPU: Switch DDR clock to 400MHz failed\n");
|
||||
}
|
||||
|
||||
static struct fb_videomode claa_wvga = {
|
||||
static struct fb_videomode const claa_wvga = {
|
||||
.name = "CLAA07LC0ACW",
|
||||
.refresh = 57,
|
||||
.xres = 800,
|
||||
|
|
|
@ -26,6 +26,7 @@
|
|||
#include <asm/arch/mx5x_pins.h>
|
||||
#include <asm/arch/sys_proto.h>
|
||||
#include <asm/arch/crm_regs.h>
|
||||
#include <asm/arch/clock.h>
|
||||
#include <asm/arch/iomux.h>
|
||||
#include <asm/errno.h>
|
||||
#include <netdev.h>
|
||||
|
@ -144,6 +145,8 @@ int board_mmc_init(bd_t *bis)
|
|||
u32 index;
|
||||
s32 status = 0;
|
||||
|
||||
esdhc_cfg[0].sdhc_clk = mxc_get_clock(MXC_ESDHC_CLK);
|
||||
|
||||
for (index = 0; index < CONFIG_SYS_FSL_ESDHC_NUM; index++) {
|
||||
switch (index) {
|
||||
case 0:
|
||||
|
|
|
@ -24,6 +24,7 @@
|
|||
#include <asm/io.h>
|
||||
#include <asm/arch/imx-regs.h>
|
||||
#include <asm/arch/mx6x_pins.h>
|
||||
#include <asm/arch/clock.h>
|
||||
#include <asm/errno.h>
|
||||
#include <asm/gpio.h>
|
||||
#include <asm/imx-common/iomux-v3.h>
|
||||
|
@ -53,12 +54,12 @@ int dram_init(void)
|
|||
return 0;
|
||||
}
|
||||
|
||||
iomux_v3_cfg_t uart4_pads[] = {
|
||||
iomux_v3_cfg_t const uart4_pads[] = {
|
||||
MX6Q_PAD_KEY_COL0__UART4_TXD | MUX_PAD_CTRL(UART_PAD_CTRL),
|
||||
MX6Q_PAD_KEY_ROW0__UART4_RXD | MUX_PAD_CTRL(UART_PAD_CTRL),
|
||||
};
|
||||
|
||||
iomux_v3_cfg_t usdhc3_pads[] = {
|
||||
iomux_v3_cfg_t const usdhc3_pads[] = {
|
||||
MX6Q_PAD_SD3_CLK__USDHC3_CLK | MUX_PAD_CTRL(USDHC_PAD_CTRL),
|
||||
MX6Q_PAD_SD3_CMD__USDHC3_CMD | MUX_PAD_CTRL(USDHC_PAD_CTRL),
|
||||
MX6Q_PAD_SD3_DAT0__USDHC3_DAT0 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
|
||||
|
@ -72,7 +73,7 @@ iomux_v3_cfg_t usdhc3_pads[] = {
|
|||
MX6Q_PAD_NANDF_CS0__GPIO_6_11 | MUX_PAD_CTRL(NO_PAD_CTRL), /* CD */
|
||||
};
|
||||
|
||||
iomux_v3_cfg_t usdhc4_pads[] = {
|
||||
iomux_v3_cfg_t const usdhc4_pads[] = {
|
||||
MX6Q_PAD_SD4_CLK__USDHC4_CLK | MUX_PAD_CTRL(USDHC_PAD_CTRL),
|
||||
MX6Q_PAD_SD4_CMD__USDHC4_CMD | MUX_PAD_CTRL(USDHC_PAD_CTRL),
|
||||
MX6Q_PAD_SD4_DAT0__USDHC4_DAT0 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
|
||||
|
@ -85,7 +86,7 @@ iomux_v3_cfg_t usdhc4_pads[] = {
|
|||
MX6Q_PAD_SD4_DAT7__USDHC4_DAT7 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
|
||||
};
|
||||
|
||||
iomux_v3_cfg_t enet_pads[] = {
|
||||
iomux_v3_cfg_t const enet_pads[] = {
|
||||
MX6Q_PAD_KEY_COL1__ENET_MDIO | MUX_PAD_CTRL(ENET_PAD_CTRL),
|
||||
MX6Q_PAD_KEY_COL2__ENET_MDC | MUX_PAD_CTRL(ENET_PAD_CTRL),
|
||||
MX6Q_PAD_RGMII_TXC__ENET_RGMII_TXC | MUX_PAD_CTRL(ENET_PAD_CTRL),
|
||||
|
@ -139,6 +140,9 @@ int board_mmc_init(bd_t *bis)
|
|||
s32 status = 0;
|
||||
u32 index = 0;
|
||||
|
||||
usdhc_cfg[0].sdhc_clk = mxc_get_clock(MXC_ESDHC3_CLK);
|
||||
usdhc_cfg[1].sdhc_clk = mxc_get_clock(MXC_ESDHC4_CLK);
|
||||
|
||||
for (index = 0; index < CONFIG_SYS_FSL_USDHC_NUM; ++index) {
|
||||
switch (index) {
|
||||
case 0:
|
||||
|
|
|
@ -30,6 +30,8 @@
|
|||
#include <fsl_esdhc.h>
|
||||
#include <miiphy.h>
|
||||
#include <netdev.h>
|
||||
#include <asm/arch/sys_proto.h>
|
||||
|
||||
DECLARE_GLOBAL_DATA_PTR;
|
||||
|
||||
#define UART_PAD_CTRL (PAD_CTL_PKE | PAD_CTL_PUE | \
|
||||
|
@ -51,12 +53,12 @@ int dram_init(void)
|
|||
return 0;
|
||||
}
|
||||
|
||||
iomux_v3_cfg_t uart4_pads[] = {
|
||||
iomux_v3_cfg_t const uart4_pads[] = {
|
||||
MX6Q_PAD_KEY_COL0__UART4_TXD | MUX_PAD_CTRL(UART_PAD_CTRL),
|
||||
MX6Q_PAD_KEY_ROW0__UART4_RXD | MUX_PAD_CTRL(UART_PAD_CTRL),
|
||||
};
|
||||
|
||||
iomux_v3_cfg_t enet_pads[] = {
|
||||
iomux_v3_cfg_t const enet_pads[] = {
|
||||
MX6Q_PAD_KEY_COL1__ENET_MDIO | MUX_PAD_CTRL(ENET_PAD_CTRL),
|
||||
MX6Q_PAD_KEY_COL2__ENET_MDC | MUX_PAD_CTRL(ENET_PAD_CTRL),
|
||||
MX6Q_PAD_RGMII_TXC__ENET_RGMII_TXC | MUX_PAD_CTRL(ENET_PAD_CTRL),
|
||||
|
@ -79,7 +81,7 @@ static void setup_iomux_enet(void)
|
|||
imx_iomux_v3_setup_multiple_pads(enet_pads, ARRAY_SIZE(enet_pads));
|
||||
}
|
||||
|
||||
iomux_v3_cfg_t usdhc3_pads[] = {
|
||||
iomux_v3_cfg_t const usdhc3_pads[] = {
|
||||
MX6Q_PAD_SD3_CLK__USDHC3_CLK | MUX_PAD_CTRL(USDHC_PAD_CTRL),
|
||||
MX6Q_PAD_SD3_CMD__USDHC3_CMD | MUX_PAD_CTRL(USDHC_PAD_CTRL),
|
||||
MX6Q_PAD_SD3_DAT0__USDHC3_DAT0 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
|
||||
|
@ -114,6 +116,7 @@ int board_mmc_init(bd_t *bis)
|
|||
{
|
||||
imx_iomux_v3_setup_multiple_pads(usdhc3_pads, ARRAY_SIZE(usdhc3_pads));
|
||||
|
||||
usdhc_cfg[0].sdhc_clk = mxc_get_clock(MXC_ESDHC3_CLK);
|
||||
return fsl_esdhc_initialize(bis, &usdhc_cfg[0]);
|
||||
}
|
||||
#endif
|
||||
|
@ -164,9 +167,38 @@ int board_eth_init(bd_t *bis)
|
|||
return 0;
|
||||
}
|
||||
|
||||
#define BOARD_REV_B 0x200
|
||||
#define BOARD_REV_A 0x100
|
||||
|
||||
static int mx6sabre_rev(void)
|
||||
{
|
||||
/*
|
||||
* Get Board ID information from OCOTP_GP1[15:8]
|
||||
* i.MX6Q ARD RevA: 0x01
|
||||
* i.MX6Q ARD RevB: 0x02
|
||||
*/
|
||||
struct ocotp_regs *ocotp = (struct ocotp_regs *)OCOTP_BASE_ADDR;
|
||||
int reg = readl(&ocotp->gp1);
|
||||
int ret;
|
||||
|
||||
switch (reg >> 8 & 0x0F) {
|
||||
case 0x02:
|
||||
ret = BOARD_REV_B;
|
||||
break;
|
||||
case 0x01:
|
||||
default:
|
||||
ret = BOARD_REV_A;
|
||||
break;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
u32 get_board_rev(void)
|
||||
{
|
||||
return 0x63000;
|
||||
int rev = mx6sabre_rev();
|
||||
|
||||
return (get_cpu_rev() & ~(0xF << 8)) | rev;
|
||||
}
|
||||
|
||||
int board_early_init_f(void)
|
||||
|
@ -186,7 +218,20 @@ int board_init(void)
|
|||
|
||||
int checkboard(void)
|
||||
{
|
||||
puts("Board: MX6Q-Sabreauto\n");
|
||||
int rev = mx6sabre_rev();
|
||||
char *revname;
|
||||
|
||||
switch (rev) {
|
||||
case BOARD_REV_B:
|
||||
revname = "B";
|
||||
break;
|
||||
case BOARD_REV_A:
|
||||
default:
|
||||
revname = "A";
|
||||
break;
|
||||
}
|
||||
|
||||
printf("Board: MX6Q-Sabreauto rev%s\n", revname);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -36,6 +36,12 @@
|
|||
#include <micrel.h>
|
||||
#include <miiphy.h>
|
||||
#include <netdev.h>
|
||||
#include <linux/fb.h>
|
||||
#include <ipu_pixfmt.h>
|
||||
#include <asm/arch/crm_regs.h>
|
||||
#include <asm/arch/mxc_hdmi.h>
|
||||
#include <i2c.h>
|
||||
|
||||
DECLARE_GLOBAL_DATA_PTR;
|
||||
|
||||
#define UART_PAD_CTRL (PAD_CTL_PKE | PAD_CTL_PUE | \
|
||||
|
@ -70,12 +76,12 @@ int dram_init(void)
|
|||
return 0;
|
||||
}
|
||||
|
||||
iomux_v3_cfg_t uart1_pads[] = {
|
||||
iomux_v3_cfg_t const uart1_pads[] = {
|
||||
MX6Q_PAD_SD3_DAT6__UART1_RXD | MUX_PAD_CTRL(UART_PAD_CTRL),
|
||||
MX6Q_PAD_SD3_DAT7__UART1_TXD | MUX_PAD_CTRL(UART_PAD_CTRL),
|
||||
};
|
||||
|
||||
iomux_v3_cfg_t uart2_pads[] = {
|
||||
iomux_v3_cfg_t const uart2_pads[] = {
|
||||
MX6Q_PAD_EIM_D26__UART2_TXD | MUX_PAD_CTRL(UART_PAD_CTRL),
|
||||
MX6Q_PAD_EIM_D27__UART2_RXD | MUX_PAD_CTRL(UART_PAD_CTRL),
|
||||
};
|
||||
|
@ -124,7 +130,7 @@ struct i2c_pads_info i2c_pad_info2 = {
|
|||
}
|
||||
};
|
||||
|
||||
iomux_v3_cfg_t usdhc3_pads[] = {
|
||||
iomux_v3_cfg_t const usdhc3_pads[] = {
|
||||
MX6Q_PAD_SD3_CLK__USDHC3_CLK | MUX_PAD_CTRL(USDHC_PAD_CTRL),
|
||||
MX6Q_PAD_SD3_CMD__USDHC3_CMD | MUX_PAD_CTRL(USDHC_PAD_CTRL),
|
||||
MX6Q_PAD_SD3_DAT0__USDHC3_DAT0 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
|
||||
|
@ -134,7 +140,7 @@ iomux_v3_cfg_t usdhc3_pads[] = {
|
|||
MX6Q_PAD_SD3_DAT5__GPIO_7_0 | MUX_PAD_CTRL(NO_PAD_CTRL), /* CD */
|
||||
};
|
||||
|
||||
iomux_v3_cfg_t usdhc4_pads[] = {
|
||||
iomux_v3_cfg_t const usdhc4_pads[] = {
|
||||
MX6Q_PAD_SD4_CLK__USDHC4_CLK | MUX_PAD_CTRL(USDHC_PAD_CTRL),
|
||||
MX6Q_PAD_SD4_CMD__USDHC4_CMD | MUX_PAD_CTRL(USDHC_PAD_CTRL),
|
||||
MX6Q_PAD_SD4_DAT0__USDHC4_DAT0 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
|
||||
|
@ -144,7 +150,7 @@ iomux_v3_cfg_t usdhc4_pads[] = {
|
|||
MX6Q_PAD_NANDF_D6__GPIO_2_6 | MUX_PAD_CTRL(NO_PAD_CTRL), /* CD */
|
||||
};
|
||||
|
||||
iomux_v3_cfg_t enet_pads1[] = {
|
||||
iomux_v3_cfg_t const enet_pads1[] = {
|
||||
MX6Q_PAD_ENET_MDIO__ENET_MDIO | MUX_PAD_CTRL(ENET_PAD_CTRL),
|
||||
MX6Q_PAD_ENET_MDC__ENET_MDC | MUX_PAD_CTRL(ENET_PAD_CTRL),
|
||||
MX6Q_PAD_RGMII_TXC__ENET_RGMII_TXC | MUX_PAD_CTRL(ENET_PAD_CTRL),
|
||||
|
@ -170,7 +176,7 @@ iomux_v3_cfg_t enet_pads1[] = {
|
|||
MX6Q_PAD_EIM_D23__GPIO_3_23 | MUX_PAD_CTRL(NO_PAD_CTRL),
|
||||
};
|
||||
|
||||
iomux_v3_cfg_t enet_pads2[] = {
|
||||
iomux_v3_cfg_t const enet_pads2[] = {
|
||||
MX6Q_PAD_RGMII_RXC__ENET_RGMII_RXC | MUX_PAD_CTRL(ENET_PAD_CTRL),
|
||||
MX6Q_PAD_RGMII_RD0__ENET_RGMII_RD0 | MUX_PAD_CTRL(ENET_PAD_CTRL),
|
||||
MX6Q_PAD_RGMII_RD1__ENET_RGMII_RD1 | MUX_PAD_CTRL(ENET_PAD_CTRL),
|
||||
|
@ -180,7 +186,7 @@ iomux_v3_cfg_t enet_pads2[] = {
|
|||
};
|
||||
|
||||
/* Button assignments for J14 */
|
||||
static iomux_v3_cfg_t button_pads[] = {
|
||||
static iomux_v3_cfg_t const button_pads[] = {
|
||||
/* Menu */
|
||||
MX6Q_PAD_NANDF_D1__GPIO_2_1 | MUX_PAD_CTRL(BUTTON_PAD_CTRL),
|
||||
/* Back */
|
||||
|
@ -213,7 +219,7 @@ static void setup_iomux_enet(void)
|
|||
imx_iomux_v3_setup_multiple_pads(enet_pads2, ARRAY_SIZE(enet_pads2));
|
||||
}
|
||||
|
||||
iomux_v3_cfg_t usb_pads[] = {
|
||||
iomux_v3_cfg_t const usb_pads[] = {
|
||||
MX6Q_PAD_GPIO_17__GPIO_7_12 | MUX_PAD_CTRL(NO_PAD_CTRL),
|
||||
};
|
||||
|
||||
|
@ -264,6 +270,9 @@ int board_mmc_init(bd_t *bis)
|
|||
s32 status = 0;
|
||||
u32 index = 0;
|
||||
|
||||
usdhc_cfg[0].sdhc_clk = mxc_get_clock(MXC_ESDHC3_CLK);
|
||||
usdhc_cfg[1].sdhc_clk = mxc_get_clock(MXC_ESDHC4_CLK);
|
||||
|
||||
for (index = 0; index < CONFIG_SYS_FSL_USDHC_NUM; ++index) {
|
||||
switch (index) {
|
||||
case 0:
|
||||
|
@ -294,7 +303,7 @@ u32 get_board_rev(void)
|
|||
}
|
||||
|
||||
#ifdef CONFIG_MXC_SPI
|
||||
iomux_v3_cfg_t ecspi1_pads[] = {
|
||||
iomux_v3_cfg_t const ecspi1_pads[] = {
|
||||
/* SS1 */
|
||||
MX6Q_PAD_EIM_D19__GPIO_3_19 | MUX_PAD_CTRL(SPI_PAD_CTRL),
|
||||
MX6Q_PAD_EIM_D17__ECSPI1_MISO | MUX_PAD_CTRL(SPI_PAD_CTRL),
|
||||
|
@ -372,14 +381,337 @@ int setup_sata(void)
|
|||
}
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_VIDEO_IPUV3)
|
||||
|
||||
static iomux_v3_cfg_t const backlight_pads[] = {
|
||||
/* Backlight on RGB connector: J15 */
|
||||
MX6Q_PAD_SD1_DAT3__GPIO_1_21 | MUX_PAD_CTRL(NO_PAD_CTRL),
|
||||
#define RGB_BACKLIGHT_GP IMX_GPIO_NR(1, 21)
|
||||
|
||||
/* Backlight on LVDS connector: J6 */
|
||||
MX6Q_PAD_SD1_CMD__GPIO_1_18 | MUX_PAD_CTRL(NO_PAD_CTRL),
|
||||
#define LVDS_BACKLIGHT_GP IMX_GPIO_NR(1, 18)
|
||||
};
|
||||
|
||||
static iomux_v3_cfg_t const rgb_pads[] = {
|
||||
MX6Q_PAD_DI0_DISP_CLK__IPU1_DI0_DISP_CLK,
|
||||
MX6Q_PAD_DI0_PIN15__IPU1_DI0_PIN15,
|
||||
MX6Q_PAD_DI0_PIN2__IPU1_DI0_PIN2,
|
||||
MX6Q_PAD_DI0_PIN3__IPU1_DI0_PIN3,
|
||||
MX6Q_PAD_DI0_PIN4__GPIO_4_20,
|
||||
MX6Q_PAD_DISP0_DAT0__IPU1_DISP0_DAT_0,
|
||||
MX6Q_PAD_DISP0_DAT1__IPU1_DISP0_DAT_1,
|
||||
MX6Q_PAD_DISP0_DAT2__IPU1_DISP0_DAT_2,
|
||||
MX6Q_PAD_DISP0_DAT3__IPU1_DISP0_DAT_3,
|
||||
MX6Q_PAD_DISP0_DAT4__IPU1_DISP0_DAT_4,
|
||||
MX6Q_PAD_DISP0_DAT5__IPU1_DISP0_DAT_5,
|
||||
MX6Q_PAD_DISP0_DAT6__IPU1_DISP0_DAT_6,
|
||||
MX6Q_PAD_DISP0_DAT7__IPU1_DISP0_DAT_7,
|
||||
MX6Q_PAD_DISP0_DAT8__IPU1_DISP0_DAT_8,
|
||||
MX6Q_PAD_DISP0_DAT9__IPU1_DISP0_DAT_9,
|
||||
MX6Q_PAD_DISP0_DAT10__IPU1_DISP0_DAT_10,
|
||||
MX6Q_PAD_DISP0_DAT11__IPU1_DISP0_DAT_11,
|
||||
MX6Q_PAD_DISP0_DAT12__IPU1_DISP0_DAT_12,
|
||||
MX6Q_PAD_DISP0_DAT13__IPU1_DISP0_DAT_13,
|
||||
MX6Q_PAD_DISP0_DAT14__IPU1_DISP0_DAT_14,
|
||||
MX6Q_PAD_DISP0_DAT15__IPU1_DISP0_DAT_15,
|
||||
MX6Q_PAD_DISP0_DAT16__IPU1_DISP0_DAT_16,
|
||||
MX6Q_PAD_DISP0_DAT17__IPU1_DISP0_DAT_17,
|
||||
MX6Q_PAD_DISP0_DAT18__IPU1_DISP0_DAT_18,
|
||||
MX6Q_PAD_DISP0_DAT19__IPU1_DISP0_DAT_19,
|
||||
MX6Q_PAD_DISP0_DAT20__IPU1_DISP0_DAT_20,
|
||||
MX6Q_PAD_DISP0_DAT21__IPU1_DISP0_DAT_21,
|
||||
MX6Q_PAD_DISP0_DAT22__IPU1_DISP0_DAT_22,
|
||||
MX6Q_PAD_DISP0_DAT23__IPU1_DISP0_DAT_23,
|
||||
};
|
||||
|
||||
struct display_info_t {
|
||||
int bus;
|
||||
int addr;
|
||||
int pixfmt;
|
||||
int (*detect)(struct display_info_t const *dev);
|
||||
void (*enable)(struct display_info_t const *dev);
|
||||
struct fb_videomode mode;
|
||||
};
|
||||
|
||||
|
||||
static int detect_hdmi(struct display_info_t const *dev)
|
||||
{
|
||||
return __raw_readb(HDMI_ARB_BASE_ADDR+HDMI_PHY_STAT0) & HDMI_PHY_HPD;
|
||||
}
|
||||
|
||||
static void enable_hdmi(struct display_info_t const *dev)
|
||||
{
|
||||
u8 reg;
|
||||
printf("%s: setup HDMI monitor\n", __func__);
|
||||
reg = __raw_readb(
|
||||
HDMI_ARB_BASE_ADDR
|
||||
+HDMI_PHY_CONF0);
|
||||
reg |= HDMI_PHY_CONF0_PDZ_MASK;
|
||||
__raw_writeb(reg,
|
||||
HDMI_ARB_BASE_ADDR
|
||||
+HDMI_PHY_CONF0);
|
||||
udelay(3000);
|
||||
reg |= HDMI_PHY_CONF0_ENTMDS_MASK;
|
||||
__raw_writeb(reg,
|
||||
HDMI_ARB_BASE_ADDR
|
||||
+HDMI_PHY_CONF0);
|
||||
udelay(3000);
|
||||
reg |= HDMI_PHY_CONF0_GEN2_TXPWRON_MASK;
|
||||
__raw_writeb(reg,
|
||||
HDMI_ARB_BASE_ADDR
|
||||
+HDMI_PHY_CONF0);
|
||||
__raw_writeb(HDMI_MC_PHYRSTZ_ASSERT,
|
||||
HDMI_ARB_BASE_ADDR+HDMI_MC_PHYRSTZ);
|
||||
}
|
||||
|
||||
static int detect_i2c(struct display_info_t const *dev)
|
||||
{
|
||||
return ((0 == i2c_set_bus_num(dev->bus))
|
||||
&&
|
||||
(0 == i2c_probe(dev->addr)));
|
||||
}
|
||||
|
||||
static void enable_lvds(struct display_info_t const *dev)
|
||||
{
|
||||
struct iomuxc *iomux = (struct iomuxc *)
|
||||
IOMUXC_BASE_ADDR;
|
||||
u32 reg = readl(&iomux->gpr[2]);
|
||||
reg |= IOMUXC_GPR2_DATA_WIDTH_CH0_24BIT;
|
||||
writel(reg, &iomux->gpr[2]);
|
||||
gpio_direction_output(LVDS_BACKLIGHT_GP, 1);
|
||||
}
|
||||
|
||||
static void enable_rgb(struct display_info_t const *dev)
|
||||
{
|
||||
imx_iomux_v3_setup_multiple_pads(
|
||||
rgb_pads,
|
||||
ARRAY_SIZE(rgb_pads));
|
||||
gpio_direction_output(RGB_BACKLIGHT_GP, 1);
|
||||
}
|
||||
|
||||
static struct display_info_t const displays[] = {{
|
||||
.bus = -1,
|
||||
.addr = 0,
|
||||
.pixfmt = IPU_PIX_FMT_RGB24,
|
||||
.detect = detect_hdmi,
|
||||
.enable = enable_hdmi,
|
||||
.mode = {
|
||||
.name = "HDMI",
|
||||
.refresh = 60,
|
||||
.xres = 1024,
|
||||
.yres = 768,
|
||||
.pixclock = 15385,
|
||||
.left_margin = 220,
|
||||
.right_margin = 40,
|
||||
.upper_margin = 21,
|
||||
.lower_margin = 7,
|
||||
.hsync_len = 60,
|
||||
.vsync_len = 10,
|
||||
.sync = FB_SYNC_EXT,
|
||||
.vmode = FB_VMODE_NONINTERLACED
|
||||
} }, {
|
||||
.bus = 2,
|
||||
.addr = 0x4,
|
||||
.pixfmt = IPU_PIX_FMT_LVDS666,
|
||||
.detect = detect_i2c,
|
||||
.enable = enable_lvds,
|
||||
.mode = {
|
||||
.name = "Hannstar-XGA",
|
||||
.refresh = 60,
|
||||
.xres = 1024,
|
||||
.yres = 768,
|
||||
.pixclock = 15385,
|
||||
.left_margin = 220,
|
||||
.right_margin = 40,
|
||||
.upper_margin = 21,
|
||||
.lower_margin = 7,
|
||||
.hsync_len = 60,
|
||||
.vsync_len = 10,
|
||||
.sync = FB_SYNC_EXT,
|
||||
.vmode = FB_VMODE_NONINTERLACED
|
||||
} }, {
|
||||
.bus = 2,
|
||||
.addr = 0x38,
|
||||
.pixfmt = IPU_PIX_FMT_LVDS666,
|
||||
.detect = detect_i2c,
|
||||
.enable = enable_lvds,
|
||||
.mode = {
|
||||
.name = "wsvga-lvds",
|
||||
.refresh = 60,
|
||||
.xres = 1024,
|
||||
.yres = 600,
|
||||
.pixclock = 15385,
|
||||
.left_margin = 220,
|
||||
.right_margin = 40,
|
||||
.upper_margin = 21,
|
||||
.lower_margin = 7,
|
||||
.hsync_len = 60,
|
||||
.vsync_len = 10,
|
||||
.sync = FB_SYNC_EXT,
|
||||
.vmode = FB_VMODE_NONINTERLACED
|
||||
} }, {
|
||||
.bus = 2,
|
||||
.addr = 0x48,
|
||||
.pixfmt = IPU_PIX_FMT_RGB666,
|
||||
.detect = detect_i2c,
|
||||
.enable = enable_rgb,
|
||||
.mode = {
|
||||
.name = "wvga-rgb",
|
||||
.refresh = 57,
|
||||
.xres = 800,
|
||||
.yres = 480,
|
||||
.pixclock = 37037,
|
||||
.left_margin = 40,
|
||||
.right_margin = 60,
|
||||
.upper_margin = 10,
|
||||
.lower_margin = 10,
|
||||
.hsync_len = 20,
|
||||
.vsync_len = 10,
|
||||
.sync = 0,
|
||||
.vmode = FB_VMODE_NONINTERLACED
|
||||
} } };
|
||||
|
||||
int board_video_skip(void)
|
||||
{
|
||||
int i;
|
||||
int ret;
|
||||
char const *panel = getenv("panel");
|
||||
if (!panel) {
|
||||
for (i = 0; i < ARRAY_SIZE(displays); i++) {
|
||||
struct display_info_t const *dev = displays+i;
|
||||
if (dev->detect(dev)) {
|
||||
panel = dev->mode.name;
|
||||
printf("auto-detected panel %s\n", panel);
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!panel) {
|
||||
panel = displays[0].mode.name;
|
||||
printf("No panel detected: default to %s\n", panel);
|
||||
}
|
||||
} else {
|
||||
for (i = 0; i < ARRAY_SIZE(displays); i++) {
|
||||
if (!strcmp(panel, displays[i].mode.name))
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (i < ARRAY_SIZE(displays)) {
|
||||
ret = ipuv3_fb_init(&displays[i].mode, 0,
|
||||
displays[i].pixfmt);
|
||||
if (!ret) {
|
||||
displays[i].enable(displays+i);
|
||||
printf("Display: %s (%ux%u)\n",
|
||||
displays[i].mode.name,
|
||||
displays[i].mode.xres,
|
||||
displays[i].mode.yres);
|
||||
} else
|
||||
printf("LCD %s cannot be configured: %d\n",
|
||||
displays[i].mode.name, ret);
|
||||
} else {
|
||||
printf("unsupported panel %s\n", panel);
|
||||
ret = -EINVAL;
|
||||
}
|
||||
return (0 != ret);
|
||||
}
|
||||
|
||||
static void setup_display(void)
|
||||
{
|
||||
struct mxc_ccm_reg *mxc_ccm = (struct mxc_ccm_reg *)CCM_BASE_ADDR;
|
||||
struct anatop_regs *anatop = (struct anatop_regs *)ANATOP_BASE_ADDR;
|
||||
struct iomuxc *iomux = (struct iomuxc *)IOMUXC_BASE_ADDR;
|
||||
|
||||
int reg;
|
||||
|
||||
/* Turn on LDB0,IPU,IPU DI0 clocks */
|
||||
reg = __raw_readl(&mxc_ccm->CCGR3);
|
||||
reg |= MXC_CCM_CCGR3_IPU1_IPU_DI0_OFFSET
|
||||
|MXC_CCM_CCGR3_LDB_DI0_MASK;
|
||||
writel(reg, &mxc_ccm->CCGR3);
|
||||
|
||||
/* Turn on HDMI PHY clock */
|
||||
reg = __raw_readl(&mxc_ccm->CCGR2);
|
||||
reg |= MXC_CCM_CCGR2_HDMI_TX_IAHBCLK_MASK
|
||||
|MXC_CCM_CCGR2_HDMI_TX_ISFRCLK_MASK;
|
||||
writel(reg, &mxc_ccm->CCGR2);
|
||||
|
||||
/* clear HDMI PHY reset */
|
||||
__raw_writeb(HDMI_MC_PHYRSTZ_DEASSERT,
|
||||
HDMI_ARB_BASE_ADDR+HDMI_MC_PHYRSTZ);
|
||||
|
||||
/* set PFD1_FRAC to 0x13 == 455 MHz (480*18)/0x13 */
|
||||
writel(ANATOP_PFD_480_PFD1_FRAC_MASK, &anatop->pfd_480_clr);
|
||||
writel(0x13<<ANATOP_PFD_480_PFD1_FRAC_SHIFT, &anatop->pfd_480_set);
|
||||
|
||||
/* 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 &= ~(MXC_CCM_CHSCCDR_IPU1_DI0_PRE_CLK_SEL_MASK
|
||||
|MXC_CCM_CHSCCDR_IPU1_DI0_PODF_MASK
|
||||
|MXC_CCM_CHSCCDR_IPU1_DI0_CLK_SEL_MASK);
|
||||
reg |= (CHSCCDR_CLK_SEL_LDB_DI0
|
||||
<<MXC_CCM_CHSCCDR_IPU1_DI0_CLK_SEL_OFFSET)
|
||||
|(CHSCCDR_PODF_DIVIDE_BY_3
|
||||
<<MXC_CCM_CHSCCDR_IPU1_DI0_PODF_OFFSET)
|
||||
|(CHSCCDR_IPU_PRE_CLK_540M_PFD
|
||||
<<MXC_CCM_CHSCCDR_IPU1_DI0_PRE_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]);
|
||||
|
||||
/* backlights off until needed */
|
||||
imx_iomux_v3_setup_multiple_pads(backlight_pads,
|
||||
ARRAY_SIZE(backlight_pads));
|
||||
gpio_direction_input(LVDS_BACKLIGHT_GP);
|
||||
gpio_direction_input(RGB_BACKLIGHT_GP);
|
||||
}
|
||||
#endif
|
||||
|
||||
int board_early_init_f(void)
|
||||
{
|
||||
setup_iomux_uart();
|
||||
setup_buttons();
|
||||
|
||||
#if defined(CONFIG_VIDEO_IPUV3)
|
||||
setup_display();
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Do not overwrite the console
|
||||
* Use always serial for U-Boot console
|
||||
*/
|
||||
int overwrite_console(void)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
int board_init(void)
|
||||
{
|
||||
/* address of boot parameters */
|
||||
|
|
|
@ -51,12 +51,12 @@ int dram_init(void)
|
|||
return 0;
|
||||
}
|
||||
|
||||
iomux_v3_cfg_t uart1_pads[] = {
|
||||
iomux_v3_cfg_t const uart1_pads[] = {
|
||||
MX6Q_PAD_CSI0_DAT10__UART1_TXD | MUX_PAD_CTRL(UART_PAD_CTRL),
|
||||
MX6Q_PAD_CSI0_DAT11__UART1_RXD | MUX_PAD_CTRL(UART_PAD_CTRL),
|
||||
};
|
||||
|
||||
iomux_v3_cfg_t enet_pads[] = {
|
||||
iomux_v3_cfg_t const enet_pads[] = {
|
||||
MX6Q_PAD_ENET_MDIO__ENET_MDIO | MUX_PAD_CTRL(ENET_PAD_CTRL),
|
||||
MX6Q_PAD_ENET_MDC__ENET_MDC | MUX_PAD_CTRL(ENET_PAD_CTRL),
|
||||
MX6Q_PAD_RGMII_TXC__ENET_RGMII_TXC | MUX_PAD_CTRL(ENET_PAD_CTRL),
|
||||
|
@ -86,7 +86,7 @@ static void setup_iomux_enet(void)
|
|||
gpio_set_value(IMX_GPIO_NR(1, 25), 1);
|
||||
}
|
||||
|
||||
iomux_v3_cfg_t usdhc3_pads[] = {
|
||||
iomux_v3_cfg_t const usdhc3_pads[] = {
|
||||
MX6Q_PAD_SD3_CLK__USDHC3_CLK | MUX_PAD_CTRL(USDHC_PAD_CTRL),
|
||||
MX6Q_PAD_SD3_CMD__USDHC3_CMD | MUX_PAD_CTRL(USDHC_PAD_CTRL),
|
||||
MX6Q_PAD_SD3_DAT0__USDHC3_DAT0 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
|
||||
|
@ -120,6 +120,7 @@ int board_mmc_init(bd_t *bis)
|
|||
{
|
||||
imx_iomux_v3_setup_multiple_pads(usdhc3_pads, ARRAY_SIZE(usdhc3_pads));
|
||||
|
||||
usdhc_cfg[0].sdhc_clk = mxc_get_clock(MXC_ESDHC3_CLK);
|
||||
return fsl_esdhc_initialize(bis, &usdhc_cfg[0]);
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -29,6 +29,7 @@
|
|||
#include <asm/errno.h>
|
||||
#include <asm/arch/sys_proto.h>
|
||||
#include <asm/arch/crm_regs.h>
|
||||
#include <asm/arch/clock.h>
|
||||
#include <i2c.h>
|
||||
#include <mmc.h>
|
||||
#include <fsl_esdhc.h>
|
||||
|
@ -93,7 +94,7 @@ static u32 get_mx_rev(void)
|
|||
return (~rev & 0x7) + 1;
|
||||
}
|
||||
|
||||
static iomux_v3_cfg_t efikasb_revision_pads[] = {
|
||||
static iomux_v3_cfg_t const efikasb_revision_pads[] = {
|
||||
MX51_PAD_EIM_CS3__GPIO2_28,
|
||||
MX51_PAD_EIM_CS4__GPIO2_29,
|
||||
};
|
||||
|
@ -140,7 +141,7 @@ int dram_init(void)
|
|||
/*
|
||||
* UART configuration
|
||||
*/
|
||||
static iomux_v3_cfg_t efikamx_uart_pads[] = {
|
||||
static iomux_v3_cfg_t const efikamx_uart_pads[] = {
|
||||
MX51_PAD_UART1_RXD__UART1_RXD,
|
||||
MX51_PAD_UART1_TXD__UART1_TXD,
|
||||
MX51_PAD_UART1_RTS__UART1_RTS,
|
||||
|
@ -150,7 +151,7 @@ static iomux_v3_cfg_t efikamx_uart_pads[] = {
|
|||
/*
|
||||
* SPI configuration
|
||||
*/
|
||||
static iomux_v3_cfg_t efikamx_spi_pads[] = {
|
||||
static iomux_v3_cfg_t const efikamx_spi_pads[] = {
|
||||
MX51_PAD_CSPI1_MOSI__ECSPI1_MOSI,
|
||||
MX51_PAD_CSPI1_MISO__ECSPI1_MISO,
|
||||
MX51_PAD_CSPI1_SCLK__ECSPI1_SCLK,
|
||||
|
@ -272,7 +273,7 @@ struct fsl_esdhc_cfg esdhc_cfg[2] = {
|
|||
{MMC_SDHC2_BASE_ADDR},
|
||||
};
|
||||
|
||||
static iomux_v3_cfg_t efikamx_sdhc1_pads[] = {
|
||||
static iomux_v3_cfg_t const efikamx_sdhc1_pads[] = {
|
||||
MX51_PAD_SD1_CMD__SD1_CMD,
|
||||
MX51_PAD_SD1_CLK__SD1_CLK,
|
||||
MX51_PAD_SD1_DATA0__SD1_DATA0,
|
||||
|
@ -284,7 +285,7 @@ static iomux_v3_cfg_t efikamx_sdhc1_pads[] = {
|
|||
|
||||
#define EFIKAMX_SDHC1_WP IMX_GPIO_NR(1, 1)
|
||||
|
||||
static iomux_v3_cfg_t efikamx_sdhc1_cd_pads[] = {
|
||||
static iomux_v3_cfg_t const efikamx_sdhc1_cd_pads[] = {
|
||||
MX51_PAD_GPIO1_0__SD1_CD,
|
||||
MX51_PAD_EIM_CS2__SD1_CD,
|
||||
};
|
||||
|
@ -292,7 +293,7 @@ static iomux_v3_cfg_t efikamx_sdhc1_cd_pads[] = {
|
|||
#define EFIKAMX_SDHC1_CD IMX_GPIO_NR(1, 0)
|
||||
#define EFIKASB_SDHC1_CD IMX_GPIO_NR(2, 27)
|
||||
|
||||
static iomux_v3_cfg_t efikasb_sdhc2_pads[] = {
|
||||
static iomux_v3_cfg_t const efikasb_sdhc2_pads[] = {
|
||||
MX51_PAD_SD2_CMD__SD2_CMD,
|
||||
MX51_PAD_SD2_CLK__SD2_CLK,
|
||||
MX51_PAD_SD2_DATA0__SD2_DATA0,
|
||||
|
@ -349,6 +350,9 @@ int board_mmc_init(bd_t *bis)
|
|||
gpio_direction_input(EFIKASB_SDHC1_CD);
|
||||
}
|
||||
|
||||
esdhc_cfg[0].sdhc_clk = mxc_get_clock(MXC_ESDHC_CLK);
|
||||
esdhc_cfg[1].sdhc_clk = mxc_get_clock(MXC_ESDHC2_CLK);
|
||||
|
||||
ret = fsl_esdhc_initialize(bis, &esdhc_cfg[0]);
|
||||
|
||||
if (machine_is_efikasb()) {
|
||||
|
@ -368,7 +372,7 @@ int board_mmc_init(bd_t *bis)
|
|||
/*
|
||||
* PATA
|
||||
*/
|
||||
static iomux_v3_cfg_t efikamx_pata_pads[] = {
|
||||
static iomux_v3_cfg_t const efikamx_pata_pads[] = {
|
||||
MX51_PAD_NANDF_WE_B__PATA_DIOW,
|
||||
MX51_PAD_NANDF_RE_B__PATA_DIOR,
|
||||
MX51_PAD_NANDF_ALE__PATA_BUFFER_EN,
|
||||
|
@ -419,7 +423,7 @@ static inline void setup_iomux_usb(void) { }
|
|||
#define EFIKAMX_LED_GREEN IMX_GPIO_NR(3, 14)
|
||||
#define EFIKAMX_LED_RED IMX_GPIO_NR(3, 15)
|
||||
|
||||
static iomux_v3_cfg_t efikasb_led_pads[] = {
|
||||
static iomux_v3_cfg_t const efikasb_led_pads[] = {
|
||||
MX51_PAD_GPIO1_3__GPIO1_3,
|
||||
MX51_PAD_EIM_CS0__GPIO2_25,
|
||||
};
|
||||
|
|
|
@ -28,6 +28,7 @@
|
|||
#include <asm/arch/imx-regs.h>
|
||||
#include <asm/arch/mx5x_pins.h>
|
||||
#include <asm/arch/crm_regs.h>
|
||||
#include <asm/arch/clock.h>
|
||||
#include <asm/arch/iomux.h>
|
||||
#include <asm/gpio.h>
|
||||
#include <asm/arch/sys_proto.h>
|
||||
|
@ -43,7 +44,7 @@
|
|||
|
||||
DECLARE_GLOBAL_DATA_PTR;
|
||||
|
||||
static struct fb_videomode nec_nl6448bc26_09c = {
|
||||
static struct fb_videomode const nec_nl6448bc26_09c = {
|
||||
"NEC_NL6448BC26-09C",
|
||||
60, /* Refresh */
|
||||
640, /* xres */
|
||||
|
@ -590,6 +591,7 @@ int board_mmc_init(bd_t *bis)
|
|||
mxc_iomux_set_pad(MX51_PIN_GPIO1_1,
|
||||
PAD_CTL_HYS_ENABLE);
|
||||
|
||||
esdhc_cfg[0].sdhc_clk = mxc_get_clock(MXC_ESDHC_CLK);
|
||||
return fsl_esdhc_initialize(bis, &esdhc_cfg[0]);
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -410,12 +410,12 @@ esdhc_send_cmd(struct mmc *mmc, struct mmc_cmd *cmd, struct mmc_data *data)
|
|||
return 0;
|
||||
}
|
||||
|
||||
void set_sysctl(struct mmc *mmc, uint clock)
|
||||
static void set_sysctl(struct mmc *mmc, uint clock)
|
||||
{
|
||||
int sdhc_clk = gd->sdhc_clk;
|
||||
int div, pre_div;
|
||||
struct fsl_esdhc_cfg *cfg = (struct fsl_esdhc_cfg *)mmc->priv;
|
||||
volatile struct fsl_esdhc *regs = (struct fsl_esdhc *)cfg->esdhc_base;
|
||||
int sdhc_clk = cfg->sdhc_clk;
|
||||
uint clk;
|
||||
|
||||
if (clock < mmc->f_min)
|
||||
|
@ -598,6 +598,7 @@ int fsl_esdhc_mmc_init(bd_t *bis)
|
|||
cfg = malloc(sizeof(struct fsl_esdhc_cfg));
|
||||
memset(cfg, 0, sizeof(struct fsl_esdhc_cfg));
|
||||
cfg->esdhc_base = CONFIG_SYS_FSL_ESDHC_ADDR;
|
||||
cfg->sdhc_clk = gd->sdhc_clk;
|
||||
return fsl_esdhc_initialize(bis, cfg);
|
||||
}
|
||||
|
||||
|
|
|
@ -45,7 +45,7 @@ static int mxcfb_unmap_video_memory(struct fb_info *fbi);
|
|||
|
||||
/* graphics setup */
|
||||
static GraphicDevice panel;
|
||||
static struct fb_videomode *gmode;
|
||||
static struct fb_videomode const *gmode;
|
||||
static uint8_t gdisp;
|
||||
static uint32_t gpixfmt;
|
||||
|
||||
|
@ -503,7 +503,7 @@ static struct fb_info *mxcfb_init_fbinfo(void)
|
|||
* @return Appropriate error code to the kernel common code
|
||||
*/
|
||||
static int mxcfb_probe(u32 interface_pix_fmt, uint8_t disp,
|
||||
struct fb_videomode *mode)
|
||||
struct fb_videomode const *mode)
|
||||
{
|
||||
struct fb_info *fbi;
|
||||
struct mxcfb_info *mxcfbi;
|
||||
|
@ -619,7 +619,9 @@ void video_set_lut(unsigned int index, /* color number */
|
|||
return;
|
||||
}
|
||||
|
||||
int ipuv3_fb_init(struct fb_videomode *mode, uint8_t disp, uint32_t pixfmt)
|
||||
int ipuv3_fb_init(struct fb_videomode const *mode,
|
||||
uint8_t disp,
|
||||
uint32_t pixfmt)
|
||||
{
|
||||
gmode = mode;
|
||||
gdisp = disp;
|
||||
|
|
|
@ -15,6 +15,8 @@
|
|||
#ifndef __CONFIG_H
|
||||
#define __CONFIG_H
|
||||
|
||||
#include <asm/arch/imx-regs.h>
|
||||
|
||||
/* High Level Configuration Options */
|
||||
|
||||
#define CONFIG_SYS_HZ 1000
|
||||
|
@ -41,8 +43,13 @@
|
|||
#define CONFIG_BOARD_EARLY_INIT_F
|
||||
|
||||
#define CONFIG_SYS_SDRAM_BASE PHYS_SDRAM_1
|
||||
#define CONFIG_SYS_INIT_SP_ADDR (CONFIG_SYS_SDRAM_BASE + 0x1000 - \
|
||||
GENERATED_GBL_DATA_SIZE)
|
||||
#define CONFIG_SYS_INIT_RAM_ADDR IMX_RAM_BASE
|
||||
#define CONFIG_SYS_INIT_RAM_SIZE IMX_RAM_SIZE
|
||||
|
||||
#define CONFIG_SYS_INIT_SP_OFFSET \
|
||||
(CONFIG_SYS_INIT_RAM_SIZE - GENERATED_GBL_DATA_SIZE)
|
||||
#define CONFIG_SYS_INIT_SP_ADDR \
|
||||
(CONFIG_SYS_INIT_RAM_ADDR + CONFIG_SYS_INIT_SP_OFFSET)
|
||||
|
||||
/* Memory Test */
|
||||
#define CONFIG_SYS_MEMTEST_START (PHYS_SDRAM_1 + PHYS_SDRAM_1_SIZE/2)
|
||||
|
|
|
@ -96,7 +96,6 @@
|
|||
/*
|
||||
* Eth Configs
|
||||
*/
|
||||
#define CONFIG_HAS_ETH1
|
||||
#define CONFIG_MII
|
||||
|
||||
#define CONFIG_FEC_MXC
|
||||
|
|
|
@ -73,7 +73,6 @@
|
|||
#define CONFIG_DOS_PARTITION
|
||||
|
||||
/* Eth Configs */
|
||||
#define CONFIG_HAS_ETH1
|
||||
#define CONFIG_MII
|
||||
|
||||
#define CONFIG_FEC_MXC
|
||||
|
|
|
@ -58,7 +58,6 @@
|
|||
#define CONFIG_DOS_PARTITION
|
||||
|
||||
/* Eth Configs */
|
||||
#define CONFIG_HAS_ETH1
|
||||
#define CONFIG_MII
|
||||
|
||||
#define CONFIG_FEC_MXC
|
||||
|
@ -222,6 +221,6 @@
|
|||
#define CONFIG_SPLASH_SCREEN
|
||||
#define CONFIG_BMP_16BPP
|
||||
#define CONFIG_VIDEO_LOGO
|
||||
#define CONFIG_IPUV3_CLK 133000000
|
||||
#define CONFIG_IPUV3_CLK 200000000
|
||||
|
||||
#endif /* __CONFIG_H */
|
||||
|
|
|
@ -50,6 +50,7 @@
|
|||
#define CONFIG_MMC
|
||||
#define CONFIG_CMD_MMC
|
||||
#define CONFIG_GENERIC_MMC
|
||||
#define CONFIG_MMC_BOUNCE_BUFFER
|
||||
#define CONFIG_CMD_FAT
|
||||
#define CONFIG_DOS_PARTITION
|
||||
|
||||
|
@ -164,6 +165,4 @@
|
|||
#define CONFIG_OF_LIBFDT
|
||||
#define CONFIG_CMD_BOOTZ
|
||||
|
||||
#define CONFIG_SYS_DCACHE_OFF
|
||||
|
||||
#endif /* __CONFIG_H */
|
||||
|
|
|
@ -45,6 +45,7 @@
|
|||
#define CONFIG_MMC
|
||||
#define CONFIG_CMD_MMC
|
||||
#define CONFIG_GENERIC_MMC
|
||||
#define CONFIG_MMC_BOUNCE_BUFFER
|
||||
#define CONFIG_CMD_EXT2
|
||||
#define CONFIG_CMD_FAT
|
||||
#define CONFIG_DOS_PARTITION
|
||||
|
@ -86,7 +87,7 @@
|
|||
"initrd_high=0xffffffff\0" \
|
||||
"mmcdev=0\0" \
|
||||
"mmcpart=1\0" \
|
||||
"mmcroot=/dev/mmcblk1p2 rootwait rw\0" \
|
||||
"mmcroot=" CONFIG_MMCROOT " rootwait rw\0" \
|
||||
"mmcargs=setenv bootargs console=${console},${baudrate} " \
|
||||
"root=${mmcroot}\0" \
|
||||
"loadbootscript=" \
|
||||
|
@ -168,8 +169,6 @@
|
|||
|
||||
#define CONFIG_OF_LIBFDT
|
||||
|
||||
#define CONFIG_SYS_DCACHE_OFF
|
||||
|
||||
#ifndef CONFIG_SYS_DCACHE_OFF
|
||||
#define CONFIG_CMD_CACHE
|
||||
#endif
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* Copyright (C) 2012 Freescale Semiconductor, Inc.
|
||||
*
|
||||
* Configuration settings for the Freescale i.MX6Q SabreSD board.
|
||||
* Configuration settings for the Freescale i.MX6Q SabreAuto board.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
|
@ -15,6 +15,7 @@
|
|||
#define CONFIG_MACH_TYPE 3529
|
||||
#define CONFIG_MXC_UART_BASE UART4_BASE
|
||||
#define CONFIG_CONSOLE_DEV "ttymxc3"
|
||||
#define CONFIG_MMCROOT "/dev/mmcblk0p2"
|
||||
#define PHYS_SDRAM_SIZE (2u * 1024 * 1024 * 1024)
|
||||
|
||||
#include "mx6qsabre_common.h"
|
||||
|
|
|
@ -37,7 +37,7 @@
|
|||
#define CONFIG_REVISION_TAG
|
||||
|
||||
/* Size of malloc() pool */
|
||||
#define CONFIG_SYS_MALLOC_LEN (CONFIG_ENV_SIZE + 2 * 1024 * 1024)
|
||||
#define CONFIG_SYS_MALLOC_LEN (10 * 1024 * 1024)
|
||||
|
||||
#define CONFIG_BOARD_EARLY_INIT_F
|
||||
#define CONFIG_MISC_INIT_R
|
||||
|
@ -72,6 +72,7 @@
|
|||
#define CONFIG_MMC
|
||||
#define CONFIG_CMD_MMC
|
||||
#define CONFIG_GENERIC_MMC
|
||||
#define CONFIG_MMC_BOUNCE_BUFFER
|
||||
#define CONFIG_CMD_EXT2
|
||||
#define CONFIG_CMD_FAT
|
||||
#define CONFIG_DOS_PARTITION
|
||||
|
@ -119,6 +120,19 @@
|
|||
/* Miscellaneous commands */
|
||||
#define CONFIG_CMD_BMODE
|
||||
|
||||
/* Framebuffer and LCD */
|
||||
#define CONFIG_VIDEO
|
||||
#define CONFIG_VIDEO_IPUV3
|
||||
#define CONFIG_CFB_CONSOLE
|
||||
#define CONFIG_VGA_AS_SINGLE_DEVICE
|
||||
#define CONFIG_SYS_CONSOLE_IS_IN_ENV
|
||||
#define CONFIG_SYS_CONSOLE_OVERWRITE_ROUTINE
|
||||
#define CONFIG_VIDEO_BMP_RLE8
|
||||
#define CONFIG_SPLASH_SCREEN
|
||||
#define CONFIG_BMP_16BPP
|
||||
#define CONFIG_VIDEO_LOGO
|
||||
#define CONFIG_IPUV3_CLK 260000000
|
||||
|
||||
/* allow to overwrite serial and ethaddr */
|
||||
#define CONFIG_ENV_OVERWRITE
|
||||
#define CONFIG_CONS_INDEX 1
|
||||
|
@ -234,8 +248,6 @@
|
|||
#define CONFIG_OF_LIBFDT
|
||||
#define CONFIG_CMD_BOOTZ
|
||||
|
||||
#define CONFIG_SYS_DCACHE_OFF
|
||||
|
||||
#ifndef CONFIG_SYS_DCACHE_OFF
|
||||
#define CONFIG_CMD_CACHE
|
||||
#endif
|
||||
|
|
|
@ -20,6 +20,7 @@
|
|||
#define CONFIG_MACH_TYPE 3980
|
||||
#define CONFIG_MXC_UART_BASE UART1_BASE
|
||||
#define CONFIG_CONSOLE_DEV "ttymxc0"
|
||||
#define CONFIG_MMCROOT "/dev/mmcblk1p2"
|
||||
#define PHYS_SDRAM_SIZE (1u * 1024 * 1024 * 1024)
|
||||
|
||||
#include "mx6qsabre_common.h"
|
||||
|
|
|
@ -167,6 +167,7 @@
|
|||
|
||||
struct fsl_esdhc_cfg {
|
||||
u32 esdhc_base;
|
||||
u32 sdhc_clk;
|
||||
};
|
||||
|
||||
/* Select the correct accessors depending on endianess */
|
||||
|
|
|
@ -76,7 +76,9 @@
|
|||
#define IPU_PIX_FMT_YVU422P fourcc('Y', 'V', '1', '6') /*< 16 YVU 4:2:2 */
|
||||
#define IPU_PIX_FMT_YUV422P fourcc('4', '2', '2', 'P') /*< 16 YUV 4:2:2 */
|
||||
|
||||
int ipuv3_fb_init(struct fb_videomode *mode, uint8_t disp, uint32_t pixfmt);
|
||||
int ipuv3_fb_init(struct fb_videomode const *mode,
|
||||
uint8_t disp,
|
||||
uint32_t pixfmt);
|
||||
void ipuv3_fb_shutdown(void);
|
||||
|
||||
#endif
|
||||
|
|
102
tools/imximage.c
102
tools/imximage.c
|
@ -71,6 +71,8 @@ static uint32_t imximage_version;
|
|||
static set_dcd_val_t set_dcd_val;
|
||||
static set_dcd_rst_t set_dcd_rst;
|
||||
static set_imx_hdr_t set_imx_hdr;
|
||||
static uint32_t max_dcd_entries;
|
||||
static uint32_t *header_size_ptr;
|
||||
|
||||
static uint32_t get_cfg_value(char *token, char *name, int linenr)
|
||||
{
|
||||
|
@ -170,13 +172,6 @@ static void set_dcd_rst_v1(struct imx_header *imxhdr, uint32_t dcd_len,
|
|||
{
|
||||
dcd_v1_t *dcd_v1 = &imxhdr->header.hdr_v1.dcd_table;
|
||||
|
||||
if (dcd_len > MAX_HW_CFG_SIZE_V1) {
|
||||
fprintf(stderr, "Error: %s[%d] -"
|
||||
"DCD table exceeds maximum size(%d)\n",
|
||||
name, lineno, MAX_HW_CFG_SIZE_V1);
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
dcd_v1->preamble.barker = DCD_BARKER;
|
||||
dcd_v1->preamble.length = dcd_len * sizeof(dcd_type_addr_data_t);
|
||||
}
|
||||
|
@ -190,13 +185,6 @@ static void set_dcd_rst_v2(struct imx_header *imxhdr, uint32_t dcd_len,
|
|||
{
|
||||
dcd_v2_t *dcd_v2 = &imxhdr->header.hdr_v2.dcd_table;
|
||||
|
||||
if (dcd_len > MAX_HW_CFG_SIZE_V2) {
|
||||
fprintf(stderr, "Error: %s[%d] -"
|
||||
"DCD table exceeds maximum size(%d)\n",
|
||||
name, lineno, MAX_HW_CFG_SIZE_V2);
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
dcd_v2->header.tag = DCD_HEADER_TAG;
|
||||
dcd_v2->header.length = cpu_to_be16(
|
||||
dcd_len * sizeof(dcd_addr_data_t) + 8);
|
||||
|
@ -208,84 +196,55 @@ static void set_dcd_rst_v2(struct imx_header *imxhdr, uint32_t dcd_len,
|
|||
}
|
||||
|
||||
static void set_imx_hdr_v1(struct imx_header *imxhdr, uint32_t dcd_len,
|
||||
struct stat *sbuf,
|
||||
struct mkimage_params *params)
|
||||
uint32_t entry_point, uint32_t flash_offset)
|
||||
{
|
||||
imx_header_v1_t *hdr_v1 = &imxhdr->header.hdr_v1;
|
||||
flash_header_v1_t *fhdr_v1 = &hdr_v1->fhdr;
|
||||
dcd_v1_t *dcd_v1 = &hdr_v1->dcd_table;
|
||||
uint32_t base_offset;
|
||||
|
||||
/* Exit if there is no BOOT_FROM field specifying the flash_offset */
|
||||
if(imxhdr->flash_offset == FLASH_OFFSET_UNDEFINED) {
|
||||
fprintf(stderr, "Error: Header v1: No BOOT_FROM tag in %s\n",
|
||||
params->imagename);
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
uint32_t hdr_base;
|
||||
uint32_t header_length = (((char *)&dcd_v1->addr_data[dcd_len].addr)
|
||||
- ((char *)imxhdr));
|
||||
|
||||
/* Set magic number */
|
||||
fhdr_v1->app_code_barker = APP_CODE_BARKER;
|
||||
|
||||
fhdr_v1->app_dest_ptr = params->addr;
|
||||
fhdr_v1->app_dest_ptr = params->ep - imxhdr->flash_offset -
|
||||
sizeof(struct imx_header);
|
||||
fhdr_v1->app_code_jump_vector = params->ep;
|
||||
hdr_base = entry_point - sizeof(struct imx_header);
|
||||
fhdr_v1->app_dest_ptr = hdr_base - flash_offset;
|
||||
fhdr_v1->app_code_jump_vector = entry_point;
|
||||
|
||||
base_offset = fhdr_v1->app_dest_ptr + imxhdr->flash_offset ;
|
||||
fhdr_v1->dcd_ptr_ptr =
|
||||
(uint32_t) (offsetof(flash_header_v1_t, dcd_ptr) -
|
||||
offsetof(flash_header_v1_t, app_code_jump_vector) +
|
||||
base_offset);
|
||||
|
||||
fhdr_v1->dcd_ptr = base_offset +
|
||||
offsetof(imx_header_v1_t, dcd_table);
|
||||
|
||||
/* The external flash header must be at the end of the DCD table */
|
||||
dcd_v1->addr_data[dcd_len].type = sbuf->st_size +
|
||||
imxhdr->flash_offset +
|
||||
sizeof(struct imx_header);
|
||||
fhdr_v1->dcd_ptr_ptr = hdr_base + offsetof(flash_header_v1_t, dcd_ptr);
|
||||
fhdr_v1->dcd_ptr = hdr_base + offsetof(imx_header_v1_t, dcd_table);
|
||||
|
||||
/* Security feature are not supported */
|
||||
fhdr_v1->app_code_csf = 0;
|
||||
fhdr_v1->super_root_key = 0;
|
||||
header_size_ptr = (uint32_t *)(((char *)imxhdr) + header_length - 4);
|
||||
}
|
||||
|
||||
static void set_imx_hdr_v2(struct imx_header *imxhdr, uint32_t dcd_len,
|
||||
struct stat *sbuf,
|
||||
struct mkimage_params *params)
|
||||
uint32_t entry_point, uint32_t flash_offset)
|
||||
{
|
||||
imx_header_v2_t *hdr_v2 = &imxhdr->header.hdr_v2;
|
||||
flash_header_v2_t *fhdr_v2 = &hdr_v2->fhdr;
|
||||
|
||||
/* Exit if there is no BOOT_FROM field specifying the flash_offset */
|
||||
if(imxhdr->flash_offset == FLASH_OFFSET_UNDEFINED) {
|
||||
fprintf(stderr, "Error: Header v2: No BOOT_FROM tag in %s\n",
|
||||
params->imagename);
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
uint32_t hdr_base;
|
||||
|
||||
/* Set magic number */
|
||||
fhdr_v2->header.tag = IVT_HEADER_TAG; /* 0xD1 */
|
||||
fhdr_v2->header.length = cpu_to_be16(sizeof(flash_header_v2_t));
|
||||
fhdr_v2->header.version = IVT_VERSION; /* 0x40 */
|
||||
|
||||
fhdr_v2->entry = params->ep;
|
||||
fhdr_v2->entry = entry_point;
|
||||
fhdr_v2->reserved1 = fhdr_v2->reserved2 = 0;
|
||||
fhdr_v2->self = params->ep - sizeof(struct imx_header);
|
||||
fhdr_v2->self = hdr_base = entry_point - sizeof(struct imx_header);
|
||||
|
||||
fhdr_v2->dcd_ptr = fhdr_v2->self +
|
||||
offsetof(imx_header_v2_t, dcd_table);
|
||||
|
||||
fhdr_v2->boot_data_ptr = fhdr_v2->self +
|
||||
offsetof(imx_header_v2_t, boot_data);
|
||||
|
||||
hdr_v2->boot_data.start = fhdr_v2->self - imxhdr->flash_offset;
|
||||
hdr_v2->boot_data.size = sbuf->st_size +
|
||||
imxhdr->flash_offset +
|
||||
sizeof(struct imx_header);
|
||||
fhdr_v2->dcd_ptr = hdr_base + offsetof(imx_header_v2_t, dcd_table);
|
||||
fhdr_v2->boot_data_ptr = hdr_base
|
||||
+ offsetof(imx_header_v2_t, boot_data);
|
||||
hdr_v2->boot_data.start = hdr_base - flash_offset;
|
||||
|
||||
/* Security feature are not supported */
|
||||
fhdr_v2->csf = 0;
|
||||
header_size_ptr = &hdr_v2->boot_data.size;
|
||||
}
|
||||
|
||||
static void set_hdr_func(struct imx_header *imxhdr)
|
||||
|
@ -295,11 +254,13 @@ static void set_hdr_func(struct imx_header *imxhdr)
|
|||
set_dcd_val = set_dcd_val_v1;
|
||||
set_dcd_rst = set_dcd_rst_v1;
|
||||
set_imx_hdr = set_imx_hdr_v1;
|
||||
max_dcd_entries = MAX_HW_CFG_SIZE_V1;
|
||||
break;
|
||||
case IMXIMAGE_V2:
|
||||
set_dcd_val = set_dcd_val_v2;
|
||||
set_dcd_rst = set_dcd_rst_v2;
|
||||
set_imx_hdr = set_imx_hdr_v2;
|
||||
max_dcd_entries = MAX_HW_CFG_SIZE_V2;
|
||||
break;
|
||||
default:
|
||||
err_imximage_version(imximage_version);
|
||||
|
@ -426,8 +387,15 @@ static void parse_cfg_fld(struct imx_header *imxhdr, int32_t *cmd,
|
|||
value = get_cfg_value(token, name, lineno);
|
||||
(*set_dcd_val)(imxhdr, name, lineno, fld, value, *dcd_len);
|
||||
|
||||
if (fld == CFG_REG_VALUE)
|
||||
if (fld == CFG_REG_VALUE) {
|
||||
(*dcd_len)++;
|
||||
if (*dcd_len > max_dcd_entries) {
|
||||
fprintf(stderr, "Error: %s[%d] -"
|
||||
"DCD table exceeds maximum size(%d)\n",
|
||||
name, lineno, max_dcd_entries);
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
@ -480,6 +448,11 @@ static uint32_t parse_cfg_file(struct imx_header *imxhdr, char *name)
|
|||
(*set_dcd_rst)(imxhdr, dcd_len, name, lineno);
|
||||
fclose(fd);
|
||||
|
||||
/* Exit if there is no BOOT_FROM field specifying the flash_offset */
|
||||
if (imxhdr->flash_offset == FLASH_OFFSET_UNDEFINED) {
|
||||
fprintf(stderr, "Error: No BOOT_FROM tag in %s\n", name);
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
return dcd_len;
|
||||
}
|
||||
|
||||
|
@ -541,7 +514,8 @@ static void imximage_set_header(void *ptr, struct stat *sbuf, int ifd,
|
|||
dcd_len = parse_cfg_file(imxhdr, params->imagename);
|
||||
|
||||
/* Set the imx header */
|
||||
(*set_imx_hdr)(imxhdr, dcd_len, sbuf, params);
|
||||
(*set_imx_hdr)(imxhdr, dcd_len, params->ep, imxhdr->flash_offset);
|
||||
*header_size_ptr = sbuf->st_size + imxhdr->flash_offset;
|
||||
}
|
||||
|
||||
int imximage_check_params(struct mkimage_params *params)
|
||||
|
|
|
@ -168,9 +168,7 @@ typedef void (*set_dcd_rst_t)(struct imx_header *imxhdr,
|
|||
uint32_t dcd_len,
|
||||
char *name, int lineno);
|
||||
|
||||
typedef void (*set_imx_hdr_t)(struct imx_header *imxhdr,
|
||||
uint32_t dcd_len,
|
||||
struct stat *sbuf,
|
||||
struct mkimage_params *params);
|
||||
typedef void (*set_imx_hdr_t)(struct imx_header *imxhdr, uint32_t dcd_len,
|
||||
uint32_t entry_point, uint32_t flash_offset);
|
||||
|
||||
#endif /* _IMXIMAGE_H_ */
|
||||
|
|
Loading…
Reference in a new issue