mirror of
https://xff.cz/git/u-boot/
synced 2025-09-01 00:32:04 +02:00
Merge git://git.denx.de/u-boot-imx
Signed-off-by: Tom Rini <trini@konsulko.com>
This commit is contained in:
8
Makefile
8
Makefile
@@ -792,8 +792,12 @@ ALL-$(CONFIG_SPL) += spl/u-boot-spl.bin
|
|||||||
ifeq ($(CONFIG_MX6)$(CONFIG_SECURE_BOOT), yy)
|
ifeq ($(CONFIG_MX6)$(CONFIG_SECURE_BOOT), yy)
|
||||||
ALL-$(CONFIG_SPL_FRAMEWORK) += u-boot-ivt.img
|
ALL-$(CONFIG_SPL_FRAMEWORK) += u-boot-ivt.img
|
||||||
else
|
else
|
||||||
|
ifeq ($(CONFIG_MX7)$(CONFIG_SECURE_BOOT), yy)
|
||||||
|
ALL-$(CONFIG_SPL_FRAMEWORK) += u-boot-ivt.img
|
||||||
|
else
|
||||||
ALL-$(CONFIG_SPL_FRAMEWORK) += u-boot.img
|
ALL-$(CONFIG_SPL_FRAMEWORK) += u-boot.img
|
||||||
endif
|
endif
|
||||||
|
endif
|
||||||
ALL-$(CONFIG_TPL) += tpl/u-boot-tpl.bin
|
ALL-$(CONFIG_TPL) += tpl/u-boot-tpl.bin
|
||||||
ALL-$(CONFIG_OF_SEPARATE) += u-boot.dtb
|
ALL-$(CONFIG_OF_SEPARATE) += u-boot.dtb
|
||||||
ifeq ($(CONFIG_SPL_FRAMEWORK),y)
|
ifeq ($(CONFIG_SPL_FRAMEWORK),y)
|
||||||
@@ -856,11 +860,11 @@ MKIMAGEOUTPUT ?= /dev/null
|
|||||||
|
|
||||||
quiet_cmd_mkimage = MKIMAGE $@
|
quiet_cmd_mkimage = MKIMAGE $@
|
||||||
cmd_mkimage = $(objtree)/tools/mkimage $(MKIMAGEFLAGS_$(@F)) -d $< $@ \
|
cmd_mkimage = $(objtree)/tools/mkimage $(MKIMAGEFLAGS_$(@F)) -d $< $@ \
|
||||||
$(if $(KBUILD_VERBOSE:1=), >$(MKIMAGEOUTPUT))
|
>$(MKIMAGEOUTPUT) $(if $(KBUILD_VERBOSE:0=), && cat $(MKIMAGEOUTPUT))
|
||||||
|
|
||||||
quiet_cmd_mkfitimage = MKIMAGE $@
|
quiet_cmd_mkfitimage = MKIMAGE $@
|
||||||
cmd_mkfitimage = $(objtree)/tools/mkimage $(MKIMAGEFLAGS_$(@F)) -f $(U_BOOT_ITS) -E $@ \
|
cmd_mkfitimage = $(objtree)/tools/mkimage $(MKIMAGEFLAGS_$(@F)) -f $(U_BOOT_ITS) -E $@ \
|
||||||
$(if $(KBUILD_VERBOSE:1=), >$(MKIMAGEOUTPUT))
|
>$(MKIMAGEOUTPUT) $(if $(KBUILD_VERBOSE:0=), && cat $(MKIMAGEOUTPUT))
|
||||||
|
|
||||||
quiet_cmd_cat = CAT $@
|
quiet_cmd_cat = CAT $@
|
||||||
cmd_cat = cat $(filter-out $(PHONY), $^) > $@
|
cmd_cat = cat $(filter-out $(PHONY), $^) > $@
|
||||||
|
@@ -444,22 +444,6 @@ config TARGET_X600
|
|||||||
select SUPPORT_SPL
|
select SUPPORT_SPL
|
||||||
select PL011_SERIAL
|
select PL011_SERIAL
|
||||||
|
|
||||||
config TARGET_IMX31_PHYCORE
|
|
||||||
bool "Support imx31_phycore_eet"
|
|
||||||
select CPU_ARM1136
|
|
||||||
select BOARD_EARLY_INIT_F
|
|
||||||
|
|
||||||
config TARGET_IMX31_PHYCORE_EET
|
|
||||||
bool "Support imx31_phycore_eet"
|
|
||||||
select BOARD_LATE_INIT
|
|
||||||
select CPU_ARM1136
|
|
||||||
select BOARD_EARLY_INIT_F
|
|
||||||
|
|
||||||
config TARGET_MX31ADS
|
|
||||||
bool "Support mx31ads"
|
|
||||||
select CPU_ARM1136
|
|
||||||
select BOARD_EARLY_INIT_F
|
|
||||||
|
|
||||||
config TARGET_MX31PDK
|
config TARGET_MX31PDK
|
||||||
bool "Support mx31pdk"
|
bool "Support mx31pdk"
|
||||||
select BOARD_LATE_INIT
|
select BOARD_LATE_INIT
|
||||||
@@ -1335,7 +1319,6 @@ source "board/freescale/ls1046ardb/Kconfig"
|
|||||||
source "board/freescale/ls1012aqds/Kconfig"
|
source "board/freescale/ls1012aqds/Kconfig"
|
||||||
source "board/freescale/ls1012ardb/Kconfig"
|
source "board/freescale/ls1012ardb/Kconfig"
|
||||||
source "board/freescale/ls1012afrdm/Kconfig"
|
source "board/freescale/ls1012afrdm/Kconfig"
|
||||||
source "board/freescale/mx31ads/Kconfig"
|
|
||||||
source "board/freescale/mx31pdk/Kconfig"
|
source "board/freescale/mx31pdk/Kconfig"
|
||||||
source "board/freescale/mx35pdk/Kconfig"
|
source "board/freescale/mx35pdk/Kconfig"
|
||||||
source "board/freescale/s32v234evb/Kconfig"
|
source "board/freescale/s32v234evb/Kconfig"
|
||||||
@@ -1345,7 +1328,6 @@ source "board/gumstix/pepper/Kconfig"
|
|||||||
source "board/h2200/Kconfig"
|
source "board/h2200/Kconfig"
|
||||||
source "board/hisilicon/hikey/Kconfig"
|
source "board/hisilicon/hikey/Kconfig"
|
||||||
source "board/hisilicon/poplar/Kconfig"
|
source "board/hisilicon/poplar/Kconfig"
|
||||||
source "board/imx31_phycore/Kconfig"
|
|
||||||
source "board/isee/igep003x/Kconfig"
|
source "board/isee/igep003x/Kconfig"
|
||||||
source "board/phytec/pcm051/Kconfig"
|
source "board/phytec/pcm051/Kconfig"
|
||||||
source "board/silica/pengwyn/Kconfig"
|
source "board/silica/pengwyn/Kconfig"
|
||||||
|
@@ -14,6 +14,9 @@ config ARCH_LS1012A
|
|||||||
select SYS_FSL_ERRATUM_A009008
|
select SYS_FSL_ERRATUM_A009008
|
||||||
select ARCH_EARLY_INIT_R
|
select ARCH_EARLY_INIT_R
|
||||||
select BOARD_EARLY_INIT_F
|
select BOARD_EARLY_INIT_F
|
||||||
|
select SYS_I2C_MXC
|
||||||
|
select SYS_I2C_MXC_I2C1
|
||||||
|
select SYS_I2C_MXC_I2C2
|
||||||
imply PANIC_HANG
|
imply PANIC_HANG
|
||||||
|
|
||||||
config ARCH_LS1043A
|
config ARCH_LS1043A
|
||||||
@@ -41,6 +44,11 @@ config ARCH_LS1043A
|
|||||||
select SYS_FSL_HAS_DDR4
|
select SYS_FSL_HAS_DDR4
|
||||||
select ARCH_EARLY_INIT_R
|
select ARCH_EARLY_INIT_R
|
||||||
select BOARD_EARLY_INIT_F
|
select BOARD_EARLY_INIT_F
|
||||||
|
select SYS_I2C_MXC
|
||||||
|
select SYS_I2C_MXC_I2C1
|
||||||
|
select SYS_I2C_MXC_I2C2
|
||||||
|
select SYS_I2C_MXC_I2C3
|
||||||
|
select SYS_I2C_MXC_I2C4
|
||||||
imply SCSI
|
imply SCSI
|
||||||
imply SCSI_AHCI
|
imply SCSI_AHCI
|
||||||
imply CMD_PCI
|
imply CMD_PCI
|
||||||
@@ -70,6 +78,11 @@ config ARCH_LS1046A
|
|||||||
select SYS_FSL_SRDS_2
|
select SYS_FSL_SRDS_2
|
||||||
select ARCH_EARLY_INIT_R
|
select ARCH_EARLY_INIT_R
|
||||||
select BOARD_EARLY_INIT_F
|
select BOARD_EARLY_INIT_F
|
||||||
|
select SYS_I2C_MXC
|
||||||
|
select SYS_I2C_MXC_I2C1
|
||||||
|
select SYS_I2C_MXC_I2C2
|
||||||
|
select SYS_I2C_MXC_I2C3
|
||||||
|
select SYS_I2C_MXC_I2C4
|
||||||
imply SCSI
|
imply SCSI
|
||||||
imply SCSI_AHCI
|
imply SCSI_AHCI
|
||||||
|
|
||||||
@@ -102,6 +115,11 @@ config ARCH_LS1088A
|
|||||||
select FSL_TZASC_1
|
select FSL_TZASC_1
|
||||||
select ARCH_EARLY_INIT_R
|
select ARCH_EARLY_INIT_R
|
||||||
select BOARD_EARLY_INIT_F
|
select BOARD_EARLY_INIT_F
|
||||||
|
select SYS_I2C_MXC
|
||||||
|
select SYS_I2C_MXC_I2C1
|
||||||
|
select SYS_I2C_MXC_I2C2
|
||||||
|
select SYS_I2C_MXC_I2C3
|
||||||
|
select SYS_I2C_MXC_I2C4
|
||||||
imply SCSI
|
imply SCSI
|
||||||
imply PANIC_HANG
|
imply PANIC_HANG
|
||||||
|
|
||||||
@@ -144,6 +162,11 @@ config ARCH_LS2080A
|
|||||||
select SYS_FSL_ERRATUM_A009203
|
select SYS_FSL_ERRATUM_A009203
|
||||||
select ARCH_EARLY_INIT_R
|
select ARCH_EARLY_INIT_R
|
||||||
select BOARD_EARLY_INIT_F
|
select BOARD_EARLY_INIT_F
|
||||||
|
select SYS_I2C_MXC
|
||||||
|
select SYS_I2C_MXC_I2C1
|
||||||
|
select SYS_I2C_MXC_I2C2
|
||||||
|
select SYS_I2C_MXC_I2C3
|
||||||
|
select SYS_I2C_MXC_I2C4
|
||||||
imply PANIC_HANG
|
imply PANIC_HANG
|
||||||
|
|
||||||
config FSL_LSCH2
|
config FSL_LSCH2
|
||||||
|
@@ -881,6 +881,14 @@
|
|||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
wdog3: wdog@021e4000 {
|
||||||
|
compatible = "fsl,imx6ul-wdt", "fsl,imx21-wdt";
|
||||||
|
reg = <0x021e4000 0x4000>;
|
||||||
|
interrupts = <GIC_SPI 11 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
|
clocks = <&clks IMX6UL_CLK_WDOG3>;
|
||||||
|
status = "disabled";
|
||||||
|
};
|
||||||
|
|
||||||
uart2: serial@021e8000 {
|
uart2: serial@021e8000 {
|
||||||
compatible = "fsl,imx6ul-uart",
|
compatible = "fsl,imx6ul-uart",
|
||||||
"fsl,imx6q-uart";
|
"fsl,imx6q-uart";
|
||||||
|
@@ -1026,6 +1026,14 @@
|
|||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
wdog3: wdog@021e4000 {
|
||||||
|
compatible = "fsl,imx6ul-wdt", "fsl,imx21-wdt";
|
||||||
|
reg = <0x021e4000 0x4000>;
|
||||||
|
interrupts = <GIC_SPI 11 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
|
clocks = <&clks IMX6UL_CLK_WDOG3>;
|
||||||
|
status = "disabled";
|
||||||
|
};
|
||||||
|
|
||||||
uart2: serial@021e8000 {
|
uart2: serial@021e8000 {
|
||||||
compatible = "fsl,imx6ul-uart",
|
compatible = "fsl,imx6ul-uart",
|
||||||
"fsl,imx6q-uart", "fsl,imx21-uart";
|
"fsl,imx6q-uart", "fsl,imx21-uart";
|
||||||
|
@@ -232,7 +232,11 @@
|
|||||||
#define AIPS2_OFF_BASE_ADDR (ATZ2_BASE_ADDR + 0x80000)
|
#define AIPS2_OFF_BASE_ADDR (ATZ2_BASE_ADDR + 0x80000)
|
||||||
#define AIPS3_ON_BASE_ADDR (ATZ3_BASE_ADDR + 0x7C000)
|
#define AIPS3_ON_BASE_ADDR (ATZ3_BASE_ADDR + 0x7C000)
|
||||||
#define AIPS3_OFF_BASE_ADDR (ATZ3_BASE_ADDR + 0x80000)
|
#define AIPS3_OFF_BASE_ADDR (ATZ3_BASE_ADDR + 0x80000)
|
||||||
|
#if defined(CONFIG_MX6UL)
|
||||||
|
#define CAAM_BASE_ADDR (ATZ2_BASE_ADDR + 0x40000)
|
||||||
|
#else
|
||||||
#define CAAM_BASE_ADDR (ATZ2_BASE_ADDR)
|
#define CAAM_BASE_ADDR (ATZ2_BASE_ADDR)
|
||||||
|
#endif
|
||||||
#define ARM_BASE_ADDR (ATZ2_BASE_ADDR + 0x40000)
|
#define ARM_BASE_ADDR (ATZ2_BASE_ADDR + 0x40000)
|
||||||
|
|
||||||
#define CONFIG_SYS_FSL_SEC_OFFSET 0
|
#define CONFIG_SYS_FSL_SEC_OFFSET 0
|
||||||
|
@@ -264,6 +264,8 @@ struct src {
|
|||||||
u32 ddrc_rcr;
|
u32 ddrc_rcr;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#define src_base ((struct src *)SRC_BASE_ADDR)
|
||||||
|
|
||||||
#define SRC_M4_REG_OFFSET 0xC
|
#define SRC_M4_REG_OFFSET 0xC
|
||||||
#define SRC_M4C_NON_SCLR_RST_OFFSET 0
|
#define SRC_M4C_NON_SCLR_RST_OFFSET 0
|
||||||
#define SRC_M4C_NON_SCLR_RST_MASK BIT(0)
|
#define SRC_M4C_NON_SCLR_RST_MASK BIT(0)
|
||||||
|
@@ -107,6 +107,7 @@ void set_chipselect_size(int const);
|
|||||||
|
|
||||||
void init_aips(void);
|
void init_aips(void);
|
||||||
void init_src(void);
|
void init_src(void);
|
||||||
|
void init_snvs(void);
|
||||||
void imx_wdog_disable_powerdown(void);
|
void imx_wdog_disable_powerdown(void);
|
||||||
|
|
||||||
int board_mmc_get_env_dev(int devno);
|
int board_mmc_get_env_dev(int devno);
|
||||||
|
@@ -78,9 +78,11 @@ endif
|
|||||||
quiet_cmd_cpp_cfg = CFGS $@
|
quiet_cmd_cpp_cfg = CFGS $@
|
||||||
cmd_cpp_cfg = $(CPP) $(cpp_flags) -x c -o $@ $<
|
cmd_cpp_cfg = $(CPP) $(cpp_flags) -x c -o $@ $<
|
||||||
|
|
||||||
IMX_CONFIG = $(CONFIG_IMX_CONFIG:"%"=%).cfgtmp
|
# mkimage source config file
|
||||||
|
IMX_CONFIG = $(CONFIG_IMX_CONFIG:"%"=%)
|
||||||
|
|
||||||
$(IMX_CONFIG): %.cfgtmp: % FORCE
|
# How to create a cpp processed config file, they all use the same source
|
||||||
|
%.cfgout: $(IMX_CONFIG) FORCE
|
||||||
$(Q)mkdir -p $(dir $@)
|
$(Q)mkdir -p $(dir $@)
|
||||||
$(call if_changed_dep,cpp_cfg)
|
$(call if_changed_dep,cpp_cfg)
|
||||||
|
|
||||||
@@ -88,7 +90,7 @@ MKIMAGEFLAGS_u-boot.imx = -n $(filter-out $(PLUGIN).bin $< $(PHONY),$^) -T imxim
|
|||||||
-e $(CONFIG_SYS_TEXT_BASE)
|
-e $(CONFIG_SYS_TEXT_BASE)
|
||||||
u-boot.imx: MKIMAGEOUTPUT = u-boot.imx.log
|
u-boot.imx: MKIMAGEOUTPUT = u-boot.imx.log
|
||||||
|
|
||||||
u-boot.imx: u-boot.bin $(IMX_CONFIG) $(PLUGIN).bin FORCE
|
u-boot.imx: u-boot.bin u-boot.cfgout $(PLUGIN).bin FORCE
|
||||||
$(call if_changed,mkimage)
|
$(call if_changed,mkimage)
|
||||||
|
|
||||||
ifeq ($(CONFIG_OF_SEPARATE),y)
|
ifeq ($(CONFIG_OF_SEPARATE),y)
|
||||||
@@ -96,16 +98,15 @@ MKIMAGEFLAGS_u-boot-dtb.imx = -n $(filter-out $(PLUGIN).bin $< $(PHONY),$^) -T i
|
|||||||
-e $(CONFIG_SYS_TEXT_BASE)
|
-e $(CONFIG_SYS_TEXT_BASE)
|
||||||
u-boot-dtb.imx: MKIMAGEOUTPUT = u-boot-dtb.imx.log
|
u-boot-dtb.imx: MKIMAGEOUTPUT = u-boot-dtb.imx.log
|
||||||
|
|
||||||
u-boot-dtb.imx: u-boot-dtb.bin $(IMX_CONFIG) $(PLUGIN).bin FORCE
|
u-boot-dtb.imx: u-boot-dtb.bin u-boot-dtb.cfgout $(PLUGIN).bin FORCE
|
||||||
$(call if_changed,mkimage)
|
$(call if_changed,mkimage)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
MKIMAGEFLAGS_SPL = -n $(filter-out $(PLUGIN).bin $< $(PHONY),$^) -T imximage \
|
MKIMAGEFLAGS_SPL = -n $(filter-out $(PLUGIN).bin $< $(PHONY),$^) -T imximage \
|
||||||
-e $(CONFIG_SPL_TEXT_BASE)
|
-e $(CONFIG_SPL_TEXT_BASE)
|
||||||
|
|
||||||
SPL: MKIMAGEOUTPUT = SPL.log
|
SPL: MKIMAGEOUTPUT = SPL.log
|
||||||
|
|
||||||
SPL: spl/u-boot-spl.bin $(IMX_CONFIG) $(PLUGIN).bin FORCE
|
SPL: spl/u-boot-spl.bin spl/u-boot-spl.cfgout $(PLUGIN).bin FORCE
|
||||||
$(call if_changed,mkimage)
|
$(call if_changed,mkimage)
|
||||||
|
|
||||||
MKIMAGEFLAGS_u-boot.uim = -A arm -O U-Boot -a $(CONFIG_SYS_TEXT_BASE) \
|
MKIMAGEFLAGS_u-boot.uim = -A arm -O U-Boot -a $(CONFIG_SYS_TEXT_BASE) \
|
||||||
@@ -133,7 +134,7 @@ cmd_u-boot-nand-spl_imx = (printf '\000\000\000\000\106\103\102\040\001' && \
|
|||||||
spl/u-boot-nand-spl.imx: SPL FORCE
|
spl/u-boot-nand-spl.imx: SPL FORCE
|
||||||
$(call if_changed,u-boot-nand-spl_imx)
|
$(call if_changed,u-boot-nand-spl_imx)
|
||||||
|
|
||||||
targets += $(addprefix ../../../,$(IMX_CONFIG) SPL u-boot.uim spl/u-boot-nand-spl.imx)
|
targets += $(addprefix ../../../,SPL spl/u-boot-spl.cfgout u-boot-dtb.cfgout u-boot.cfgout u-boot.uim spl/u-boot-nand-spl.imx)
|
||||||
|
|
||||||
obj-$(CONFIG_ARM64) += sip.o
|
obj-$(CONFIG_ARM64) += sip.o
|
||||||
|
|
||||||
|
@@ -341,6 +341,31 @@ static int do_hab_failsafe(cmd_tbl_t *cmdtp, int flag, int argc,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int do_authenticate_image_or_failover(cmd_tbl_t *cmdtp, int flag,
|
||||||
|
int argc, char * const argv[])
|
||||||
|
{
|
||||||
|
int ret = CMD_RET_FAILURE;
|
||||||
|
|
||||||
|
if (argc != 4) {
|
||||||
|
ret = CMD_RET_USAGE;
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!imx_hab_is_enabled()) {
|
||||||
|
printf("error: secure boot disabled\n");
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (do_authenticate_image(NULL, flag, argc, argv) != CMD_RET_SUCCESS) {
|
||||||
|
fprintf(stderr, "authentication fail -> %s %s %s %s\n",
|
||||||
|
argv[0], argv[1], argv[2], argv[3]);
|
||||||
|
do_hab_failsafe(0, 0, 1, NULL);
|
||||||
|
};
|
||||||
|
ret = CMD_RET_SUCCESS;
|
||||||
|
error:
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
U_BOOT_CMD(
|
U_BOOT_CMD(
|
||||||
hab_status, CONFIG_SYS_MAXARGS, 1, do_hab_status,
|
hab_status, CONFIG_SYS_MAXARGS, 1, do_hab_status,
|
||||||
"display HAB status",
|
"display HAB status",
|
||||||
@@ -362,6 +387,16 @@ U_BOOT_CMD(
|
|||||||
""
|
""
|
||||||
);
|
);
|
||||||
|
|
||||||
|
U_BOOT_CMD(
|
||||||
|
hab_auth_img_or_fail, 4, 0,
|
||||||
|
do_authenticate_image_or_failover,
|
||||||
|
"authenticate image via HAB on failure drop to USB BootROM mode",
|
||||||
|
"addr length ivt_offset\n"
|
||||||
|
"addr - image hex address\n"
|
||||||
|
"length - image hex length\n"
|
||||||
|
"ivt_offset - hex offset of IVT in the image"
|
||||||
|
);
|
||||||
|
|
||||||
#endif /* !defined(CONFIG_SPL_BUILD) */
|
#endif /* !defined(CONFIG_SPL_BUILD) */
|
||||||
|
|
||||||
/* Get CSF Header length */
|
/* Get CSF Header length */
|
||||||
|
@@ -387,6 +387,16 @@ config TARGET_TBS2910
|
|||||||
config TARGET_TITANIUM
|
config TARGET_TITANIUM
|
||||||
bool "titanium"
|
bool "titanium"
|
||||||
|
|
||||||
|
config TARGET_KP_IMX6Q_TPC
|
||||||
|
bool "K+P KP_IMX6Q_TPC i.MX6 Quad"
|
||||||
|
select MX6QDL
|
||||||
|
select BOARD_LATE_INIT
|
||||||
|
select BOARD_EARLY_INIT_F
|
||||||
|
select SUPPORT_SPL
|
||||||
|
select DM
|
||||||
|
select DM_THERMAL
|
||||||
|
imply CMD_SPL
|
||||||
|
|
||||||
config TARGET_TQMA6
|
config TARGET_TQMA6
|
||||||
bool "TQ Systems TQMa6 board"
|
bool "TQ Systems TQMa6 board"
|
||||||
select BOARD_LATE_INIT
|
select BOARD_LATE_INIT
|
||||||
@@ -493,6 +503,7 @@ source "board/tbs/tbs2910/Kconfig"
|
|||||||
source "board/tqc/tqma6/Kconfig"
|
source "board/tqc/tqma6/Kconfig"
|
||||||
source "board/toradex/apalis_imx6/Kconfig"
|
source "board/toradex/apalis_imx6/Kconfig"
|
||||||
source "board/toradex/colibri_imx6/Kconfig"
|
source "board/toradex/colibri_imx6/Kconfig"
|
||||||
|
source "board/k+p/kp_imx6q_tpc/Kconfig"
|
||||||
source "board/udoo/Kconfig"
|
source "board/udoo/Kconfig"
|
||||||
source "board/udoo/neo/Kconfig"
|
source "board/udoo/neo/Kconfig"
|
||||||
source "board/wandboard/Kconfig"
|
source "board/wandboard/Kconfig"
|
||||||
|
@@ -85,6 +85,23 @@ static void modify_dg_result(u32 *reg_st0, u32 *reg_st1, u32 *reg_ctrl)
|
|||||||
writel(val_ctrl, reg_ctrl);
|
writel(val_ctrl, reg_ctrl);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void correct_mpwldectr_result(void *reg)
|
||||||
|
{
|
||||||
|
/* Limit is 200/256 of CK, which is WL_HC_DELx | 0x48. */
|
||||||
|
const unsigned int limit = 0x148;
|
||||||
|
u32 val = readl(reg);
|
||||||
|
u32 old = val;
|
||||||
|
|
||||||
|
if ((val & 0x17f) > limit)
|
||||||
|
val &= 0xffff << 16;
|
||||||
|
|
||||||
|
if (((val >> 16) & 0x17f) > limit)
|
||||||
|
val &= 0xffff;
|
||||||
|
|
||||||
|
if (old != val)
|
||||||
|
writel(val, reg);
|
||||||
|
}
|
||||||
|
|
||||||
int mmdc_do_write_level_calibration(struct mx6_ddr_sysinfo const *sysinfo)
|
int mmdc_do_write_level_calibration(struct mx6_ddr_sysinfo const *sysinfo)
|
||||||
{
|
{
|
||||||
struct mmdc_p_regs *mmdc0 = (struct mmdc_p_regs *)MMDC_P0_BASE_ADDR;
|
struct mmdc_p_regs *mmdc0 = (struct mmdc_p_regs *)MMDC_P0_BASE_ADDR;
|
||||||
@@ -176,6 +193,13 @@ int mmdc_do_write_level_calibration(struct mx6_ddr_sysinfo const *sysinfo)
|
|||||||
errors |= 4;
|
errors |= 4;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
correct_mpwldectr_result(&mmdc0->mpwldectrl0);
|
||||||
|
correct_mpwldectr_result(&mmdc0->mpwldectrl1);
|
||||||
|
if (sysinfo->dsize == 2) {
|
||||||
|
correct_mpwldectr_result(&mmdc1->mpwldectrl0);
|
||||||
|
correct_mpwldectr_result(&mmdc1->mpwldectrl1);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* User should issue MRS command to exit write leveling mode
|
* User should issue MRS command to exit write leveling mode
|
||||||
* through Load Mode Register command
|
* through Load Mode Register command
|
||||||
|
@@ -5,7 +5,7 @@
|
|||||||
#
|
#
|
||||||
#
|
#
|
||||||
|
|
||||||
obj-y := soc.o clock.o clock_slice.o ddr.o
|
obj-y := soc.o clock.o clock_slice.o ddr.o snvs.o
|
||||||
|
|
||||||
ifdef CONFIG_ARMV7_PSCI
|
ifdef CONFIG_ARMV7_PSCI
|
||||||
obj-y += psci-mx7.o psci.o
|
obj-y += psci-mx7.o psci.o
|
||||||
|
22
arch/arm/mach-imx/mx7/snvs.c
Normal file
22
arch/arm/mach-imx/mx7/snvs.c
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2018 Linaro
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: GPL-2.0+
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <asm/io.h>
|
||||||
|
#include <asm/arch/imx-regs.h>
|
||||||
|
#include <linux/bitops.h>
|
||||||
|
|
||||||
|
#define SNVS_HPCOMR 0x04
|
||||||
|
#define SNVS_HPCOMR_NPSWA_EN BIT(31)
|
||||||
|
|
||||||
|
void init_snvs(void)
|
||||||
|
{
|
||||||
|
u32 val;
|
||||||
|
|
||||||
|
/* Ensure SNVS HPCOMR sets NPSWA_EN to allow unpriv access to SNVS LP */
|
||||||
|
val = readl(SNVS_BASE_ADDR + SNVS_HPCOMR);
|
||||||
|
val |= SNVS_HPCOMR_NPSWA_EN;
|
||||||
|
writel(val, SNVS_BASE_ADDR + SNVS_HPCOMR);
|
||||||
|
}
|
@@ -18,6 +18,7 @@
|
|||||||
#include <dm.h>
|
#include <dm.h>
|
||||||
#include <imx_thermal.h>
|
#include <imx_thermal.h>
|
||||||
#include <fsl_sec.h>
|
#include <fsl_sec.h>
|
||||||
|
#include <asm/setup.h>
|
||||||
|
|
||||||
#if defined(CONFIG_IMX_THERMAL)
|
#if defined(CONFIG_IMX_THERMAL)
|
||||||
static const struct imx_thermal_plat imx7_thermal_plat = {
|
static const struct imx_thermal_plat imx7_thermal_plat = {
|
||||||
@@ -179,6 +180,8 @@ int arch_cpu_init(void)
|
|||||||
isolate_resource();
|
isolate_resource();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
init_snvs();
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -201,6 +204,27 @@ int arch_misc_init(void)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef CONFIG_SERIAL_TAG
|
#ifdef CONFIG_SERIAL_TAG
|
||||||
|
/*
|
||||||
|
* OCOTP_TESTER
|
||||||
|
* i.MX 7Solo Applications Processor Reference Manual, Rev. 0.1, 08/2016
|
||||||
|
* OCOTP_TESTER describes a unique ID based on silicon wafer
|
||||||
|
* and die X/Y position
|
||||||
|
*
|
||||||
|
* OCOTOP_TESTER offset 0x410
|
||||||
|
* 31:0 fuse 0
|
||||||
|
* FSL-wide unique, encoded LOT ID STD II/SJC CHALLENGE/ Unique ID
|
||||||
|
*
|
||||||
|
* OCOTP_TESTER1 offset 0x420
|
||||||
|
* 31:24 fuse 1
|
||||||
|
* The X-coordinate of the die location on the wafer/SJC CHALLENGE/ Unique ID
|
||||||
|
* 23:16 fuse 1
|
||||||
|
* The Y-coordinate of the die location on the wafer/SJC CHALLENGE/ Unique ID
|
||||||
|
* 15:11 fuse 1
|
||||||
|
* The wafer number of the wafer on which the device was fabricated/SJC
|
||||||
|
* CHALLENGE/ Unique ID
|
||||||
|
* 10:0 fuse 1
|
||||||
|
* FSL-wide unique, encoded LOT ID STD II/SJC CHALLENGE/ Unique ID
|
||||||
|
*/
|
||||||
void get_board_serial(struct tag_serialnr *serialnr)
|
void get_board_serial(struct tag_serialnr *serialnr)
|
||||||
{
|
{
|
||||||
struct ocotp_regs *ocotp = (struct ocotp_regs *)OCOTP_BASE_ADDR;
|
struct ocotp_regs *ocotp = (struct ocotp_regs *)OCOTP_BASE_ADDR;
|
||||||
|
@@ -101,6 +101,29 @@ u32 spl_boot_device(void)
|
|||||||
/* Translate iMX7/MX8M boot device to the SPL boot device enumeration */
|
/* Translate iMX7/MX8M boot device to the SPL boot device enumeration */
|
||||||
u32 spl_boot_device(void)
|
u32 spl_boot_device(void)
|
||||||
{
|
{
|
||||||
|
#if defined(CONFIG_MX7)
|
||||||
|
unsigned int bmode = readl(&src_base->sbmr2);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Check for BMODE if serial downloader is enabled
|
||||||
|
* BOOT_MODE - see IMX7DRM Table 6-24
|
||||||
|
*/
|
||||||
|
if (((bmode >> 24) & 0x03) == 0x01) /* Serial Downloader */
|
||||||
|
return BOOT_DEVICE_BOARD;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The above method does not detect that the boot ROM used
|
||||||
|
* serial downloader in case the boot ROM decided to use the
|
||||||
|
* serial downloader as a fall back (primary boot source failed).
|
||||||
|
*
|
||||||
|
* Infer that the boot ROM used the USB serial downloader by
|
||||||
|
* checking whether the USB PHY is currently active... This
|
||||||
|
* assumes that SPL did not (yet) initialize the USB PHY...
|
||||||
|
*/
|
||||||
|
if (is_boot_from_usb())
|
||||||
|
return BOOT_DEVICE_BOARD;
|
||||||
|
#endif
|
||||||
|
|
||||||
enum boot_device boot_device_spl = get_boot_device();
|
enum boot_device boot_device_spl = get_boot_device();
|
||||||
|
|
||||||
switch (boot_device_spl) {
|
switch (boot_device_spl) {
|
||||||
|
@@ -1,15 +0,0 @@
|
|||||||
if TARGET_MX31ADS
|
|
||||||
|
|
||||||
config SYS_BOARD
|
|
||||||
default "mx31ads"
|
|
||||||
|
|
||||||
config SYS_VENDOR
|
|
||||||
default "freescale"
|
|
||||||
|
|
||||||
config SYS_SOC
|
|
||||||
default "mx31"
|
|
||||||
|
|
||||||
config SYS_CONFIG_NAME
|
|
||||||
default "mx31ads"
|
|
||||||
|
|
||||||
endif
|
|
@@ -1,6 +0,0 @@
|
|||||||
MX31ADS BOARD
|
|
||||||
#M: (resigned) Guennadi Liakhovetski <g.liakhovetski@gmx.de>
|
|
||||||
S: Orphan (since 2013-09)
|
|
||||||
F: board/freescale/mx31ads/
|
|
||||||
F: include/configs/mx31ads.h
|
|
||||||
F: configs/mx31ads_defconfig
|
|
@@ -1,8 +0,0 @@
|
|||||||
#
|
|
||||||
# Copyright (C) 2008, Guennadi Liakhovetski <lg@denx.de>
|
|
||||||
#
|
|
||||||
# SPDX-License-Identifier: GPL-2.0+
|
|
||||||
#
|
|
||||||
|
|
||||||
obj-y := mx31ads.o
|
|
||||||
obj-y += lowlevel_init.o
|
|
@@ -1,268 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2008, Guennadi Liakhovetski <lg@denx.de>
|
|
||||||
*
|
|
||||||
* SPDX-License-Identifier: GPL-2.0+
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <asm/arch/imx-regs.h>
|
|
||||||
|
|
||||||
.macro REG reg, val
|
|
||||||
ldr r2, =\reg
|
|
||||||
ldr r3, =\val
|
|
||||||
str r3, [r2]
|
|
||||||
.endm
|
|
||||||
|
|
||||||
.macro REG8 reg, val
|
|
||||||
ldr r2, =\reg
|
|
||||||
ldr r3, =\val
|
|
||||||
strb r3, [r2]
|
|
||||||
.endm
|
|
||||||
|
|
||||||
.macro DELAY loops
|
|
||||||
ldr r2, =\loops
|
|
||||||
1:
|
|
||||||
subs r2, r2, #1
|
|
||||||
nop
|
|
||||||
bcs 1b
|
|
||||||
.endm
|
|
||||||
|
|
||||||
/* RedBoot: 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, =0x43F00000
|
|
||||||
ldr r1, =0x77777777
|
|
||||||
str r1, [r0, #0x00]
|
|
||||||
str r1, [r0, #0x04]
|
|
||||||
ldr r0, =0x53F00000
|
|
||||||
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, =0x43F00000
|
|
||||||
ldr r1, =0x0
|
|
||||||
str r1, [r0, #0x40]
|
|
||||||
str r1, [r0, #0x44]
|
|
||||||
str r1, [r0, #0x48]
|
|
||||||
str r1, [r0, #0x4C]
|
|
||||||
ldr r1, [r0, #0x50]
|
|
||||||
and r1, r1, #0x00FFFFFF
|
|
||||||
str r1, [r0, #0x50]
|
|
||||||
|
|
||||||
ldr r0, =0x53F00000
|
|
||||||
ldr r1, =0x0
|
|
||||||
str r1, [r0, #0x40]
|
|
||||||
str r1, [r0, #0x44]
|
|
||||||
str r1, [r0, #0x48]
|
|
||||||
str r1, [r0, #0x4C]
|
|
||||||
ldr r1, [r0, #0x50]
|
|
||||||
and r1, r1, #0x00FFFFFF
|
|
||||||
str r1, [r0, #0x50]
|
|
||||||
.endm /* init_aips */
|
|
||||||
|
|
||||||
/* RedBoot: MAX (Multi-Layer AHB Crossbar Switch) setup */
|
|
||||||
.macro init_max
|
|
||||||
ldr r0, =0x43F04000
|
|
||||||
/* MPR - priority is M4 > M2 > M3 > M5 > M0 > M1 */
|
|
||||||
ldr r1, =0x00302154
|
|
||||||
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, =0x10
|
|
||||||
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, =0x0
|
|
||||||
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 /* init_max */
|
|
||||||
|
|
||||||
/* RedBoot: M3IF setup */
|
|
||||||
.macro init_m3if
|
|
||||||
/* Configure M3IF registers */
|
|
||||||
ldr r1, =0xB8003000
|
|
||||||
/*
|
|
||||||
* 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, =0x00000040
|
|
||||||
str r0, [r1] /* M3IF control reg */
|
|
||||||
.endm /* init_m3if */
|
|
||||||
|
|
||||||
/* RedBoot: To support 133MHz DDR */
|
|
||||||
.macro init_drive_strength
|
|
||||||
/*
|
|
||||||
* Disable maximum drive strength SDRAM/DDR lines by clearing DSE1 bits
|
|
||||||
* in SW_PAD_CTL registers
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* SDCLK */
|
|
||||||
ldr r1, =0x43FAC200
|
|
||||||
ldr r0, [r1, #0x6C]
|
|
||||||
bic r0, r0, #(1 << 12)
|
|
||||||
str r0, [r1, #0x6C]
|
|
||||||
|
|
||||||
/* CAS */
|
|
||||||
ldr r0, [r1, #0x70]
|
|
||||||
bic r0, r0, #(1 << 22)
|
|
||||||
str r0, [r1, #0x70]
|
|
||||||
|
|
||||||
/* RAS */
|
|
||||||
ldr r0, [r1, #0x74]
|
|
||||||
bic r0, r0, #(1 << 2)
|
|
||||||
str r0, [r1, #0x74]
|
|
||||||
|
|
||||||
/* CS2 (CSD0) */
|
|
||||||
ldr r0, [r1, #0x7C]
|
|
||||||
bic r0, r0, #(1 << 22)
|
|
||||||
str r0, [r1, #0x7C]
|
|
||||||
|
|
||||||
/* DQM3 */
|
|
||||||
ldr r0, [r1, #0x84]
|
|
||||||
bic r0, r0, #(1 << 22)
|
|
||||||
str r0, [r1, #0x84]
|
|
||||||
|
|
||||||
/* DQM2, DQM1, DQM0, SD31-SD0, A25-A0, MA10 (0x288..0x2DC) */
|
|
||||||
ldr r2, =22 /* (0x2E0 - 0x288) / 4 = 22 */
|
|
||||||
pad_loop:
|
|
||||||
ldr r0, [r1, #0x88]
|
|
||||||
bic r0, r0, #(1 << 22)
|
|
||||||
bic r0, r0, #(1 << 12)
|
|
||||||
bic r0, r0, #(1 << 2)
|
|
||||||
str r0, [r1, #0x88]
|
|
||||||
add r1, r1, #4
|
|
||||||
subs r2, r2, #0x1
|
|
||||||
bne pad_loop
|
|
||||||
.endm /* init_drive_strength */
|
|
||||||
|
|
||||||
/* CPLD on CS4 setup */
|
|
||||||
.macro init_cs4
|
|
||||||
ldr r0, =WEIM_BASE
|
|
||||||
ldr r1, =0x0000D843
|
|
||||||
str r1, [r0, #0x40]
|
|
||||||
ldr r1, =0x22252521
|
|
||||||
str r1, [r0, #0x44]
|
|
||||||
ldr r1, =0x22220A00
|
|
||||||
str r1, [r0, #0x48]
|
|
||||||
.endm /* init_cs4 */
|
|
||||||
|
|
||||||
.globl lowlevel_init
|
|
||||||
lowlevel_init:
|
|
||||||
|
|
||||||
/* Redboot initializes very early AIPS, what for?
|
|
||||||
* 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
|
|
||||||
|
|
||||||
init_aips
|
|
||||||
|
|
||||||
init_max
|
|
||||||
|
|
||||||
init_m3if
|
|
||||||
|
|
||||||
init_drive_strength
|
|
||||||
|
|
||||||
init_cs4
|
|
||||||
|
|
||||||
/* Image Processing Unit: */
|
|
||||||
/* Too early to switch display on? */
|
|
||||||
REG IPU_CONF, IPU_CONF_DI_EN /* Switch on Display Interface */
|
|
||||||
/* Clock Control Module: */
|
|
||||||
REG CCM_CCMR, 0x074B0BF5 /* Use CKIH, MCU PLL off */
|
|
||||||
|
|
||||||
DELAY 0x40000
|
|
||||||
|
|
||||||
REG CCM_CCMR, 0x074B0BF5 | CCMR_MPE /* MCU PLL on */
|
|
||||||
REG CCM_CCMR, (0x074B0BF5 | CCMR_MPE) & ~CCMR_MDS /* Switch to MCU PLL */
|
|
||||||
|
|
||||||
/* PBC CPLD on CS4 */
|
|
||||||
mov r1, #CS4_BASE
|
|
||||||
ldrh r1, [r1, #0x2]
|
|
||||||
/* Is 27MHz switch set? */
|
|
||||||
ands r1, r1, #0x10
|
|
||||||
|
|
||||||
/* 532-133-66.5 */
|
|
||||||
ldr r0, =CCM_BASE
|
|
||||||
ldr r1, =0xFF871D58
|
|
||||||
/* PDR0 */
|
|
||||||
str r1, [r0, #0x4]
|
|
||||||
ldreq r1, MPCTL_PARAM_532
|
|
||||||
ldrne r1, MPCTL_PARAM_532_27
|
|
||||||
/* MPCTL */
|
|
||||||
str r1, [r0, #0x10]
|
|
||||||
|
|
||||||
/* Set UPLL=240MHz, USB=60MHz */
|
|
||||||
ldr r1, =0x49FCFE7F
|
|
||||||
/* PDR1 */
|
|
||||||
str r1, [r0, #0x8]
|
|
||||||
ldreq r1, UPCTL_PARAM_240
|
|
||||||
ldrne r1, UPCTL_PARAM_240_27
|
|
||||||
/* UPCTL */
|
|
||||||
str r1, [r0, #0x14]
|
|
||||||
/* default CLKO to 1/8 of the ARM core */
|
|
||||||
mov r1, #0x000002C0
|
|
||||||
add r1, r1, #0x00000006
|
|
||||||
/* COSR */
|
|
||||||
str r1, [r0, #0x1c]
|
|
||||||
|
|
||||||
/* RedBoot sets 0x3f, 7, 7, 3, 5, 1, 3, 0 */
|
|
||||||
/* REG CCM_PDR0, PDR0_CSI_PODF(0x3f) | PDR0_CSI_PRDF(7) | PDR0_PER_PODF(7) | PDR0_HSP_PODF(2) | PDR0_NFC_PODF(6) | PDR0_IPG_PODF(1) | PDR0_MAX_PODF(2) | PDR0_MCU_PODF(0)*/
|
|
||||||
|
|
||||||
/* Redboot: 0, 51, 10, 12 / 0, 14, 9, 13 */
|
|
||||||
/* REG CCM_MPCTL, PLL_PD(0) | PLL_MFD(0x33) | PLL_MFI(7) | PLL_MFN(0x23)*/
|
|
||||||
/* Default: 1, 4, 12, 1 */
|
|
||||||
REG CCM_SPCTL, PLL_PD(1) | PLL_MFD(4) | PLL_MFI(12) | PLL_MFN(1)
|
|
||||||
|
|
||||||
/* B8xxxxxx - NAND, 8xxxxxxx - CSD0 RAM */
|
|
||||||
REG 0xB8001010, 0x00000004
|
|
||||||
REG 0xB8001004, 0x006ac73a
|
|
||||||
REG 0xB8001000, 0x92100000
|
|
||||||
REG 0x80000f00, 0x12344321
|
|
||||||
REG 0xB8001000, 0xa2100000
|
|
||||||
REG 0x80000000, 0x12344321
|
|
||||||
REG 0x80000000, 0x12344321
|
|
||||||
REG 0xB8001000, 0xb2100000
|
|
||||||
REG8 0x80000033, 0xda
|
|
||||||
REG8 0x81000000, 0xff
|
|
||||||
REG 0xB8001000, 0x82226080
|
|
||||||
REG 0x80000000, 0xDEADBEEF
|
|
||||||
REG 0xB8001010, 0x0000000c
|
|
||||||
|
|
||||||
mov pc, lr
|
|
||||||
|
|
||||||
MPCTL_PARAM_532:
|
|
||||||
.word (((1-1) << 26) + ((52-1) << 16) + (10 << 10) + (12 << 0))
|
|
||||||
MPCTL_PARAM_532_27:
|
|
||||||
.word (((1-1) << 26) + ((15-1) << 16) + (9 << 10) + (13 << 0))
|
|
||||||
UPCTL_PARAM_240:
|
|
||||||
.word (((2-1) << 26) + ((13-1) << 16) + (9 << 10) + (3 << 0))
|
|
||||||
UPCTL_PARAM_240_27:
|
|
||||||
.word (((2-1) << 26) + ((9 -1) << 16) + (8 << 10) + (8 << 0))
|
|
@@ -1,114 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2008, Guennadi Liakhovetski <lg@denx.de>
|
|
||||||
*
|
|
||||||
* SPDX-License-Identifier: GPL-2.0+
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <common.h>
|
|
||||||
#include <netdev.h>
|
|
||||||
#include <asm/io.h>
|
|
||||||
#include <asm/arch/clock.h>
|
|
||||||
#include <asm/arch/imx-regs.h>
|
|
||||||
#include <asm/arch/sys_proto.h>
|
|
||||||
|
|
||||||
DECLARE_GLOBAL_DATA_PTR;
|
|
||||||
|
|
||||||
int dram_init(void)
|
|
||||||
{
|
|
||||||
/* dram_init must store complete ramsize in gd->ram_size */
|
|
||||||
gd->ram_size = get_ram_size((void *)PHYS_SDRAM_1,
|
|
||||||
PHYS_SDRAM_1_SIZE);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
int board_early_init_f(void)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
|
|
||||||
/* CS0: Nor Flash */
|
|
||||||
/*
|
|
||||||
* CS0L and CS0A values are from the RedBoot sources by Freescale
|
|
||||||
* and are also equal to those used by Sascha Hauer for the Phytec
|
|
||||||
* i.MX31 board. CS0U is just a slightly optimized hardware default:
|
|
||||||
* the only non-zero field "Wait State Control" is set to half the
|
|
||||||
* default value.
|
|
||||||
*/
|
|
||||||
static const struct mxc_weimcs cs0 = {
|
|
||||||
/* sp wp bcd bcs psz pme sync dol cnc wsc ew wws edc */
|
|
||||||
CSCR_U(0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0),
|
|
||||||
/* oea oen ebwa ebwn csa ebc dsz csn psr cre wrap csen */
|
|
||||||
CSCR_L(1, 0, 0, 0, 0, 1, 5, 0, 0, 0, 1, 1),
|
|
||||||
/* ebra ebrn rwa rwn mum lah lbn lba dww dct wwu age cnc2 fce*/
|
|
||||||
CSCR_A(0, 0, 7, 2, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0)
|
|
||||||
};
|
|
||||||
|
|
||||||
mxc_setup_weimcs(0, &cs0);
|
|
||||||
|
|
||||||
/* setup pins for UART1 */
|
|
||||||
mx31_gpio_mux(MUX_RXD1__UART1_RXD_MUX);
|
|
||||||
mx31_gpio_mux(MUX_TXD1__UART1_TXD_MUX);
|
|
||||||
mx31_gpio_mux(MUX_RTS1__UART1_RTS_B);
|
|
||||||
mx31_gpio_mux(MUX_CTS1__UART1_CTS_B);
|
|
||||||
|
|
||||||
/* SPI2 */
|
|
||||||
mx31_gpio_mux(MUX_CSPI2_SS2__CSPI2_SS2_B);
|
|
||||||
mx31_gpio_mux(MUX_CSPI2_SCLK__CSPI2_CLK);
|
|
||||||
mx31_gpio_mux(MUX_CSPI2_SPI_RDY__CSPI2_DATAREADY_B);
|
|
||||||
mx31_gpio_mux(MUX_CSPI2_MOSI__CSPI2_MOSI);
|
|
||||||
mx31_gpio_mux(MUX_CSPI2_MISO__CSPI2_MISO);
|
|
||||||
mx31_gpio_mux(MUX_CSPI2_SS0__CSPI2_SS0_B);
|
|
||||||
mx31_gpio_mux(MUX_CSPI2_SS1__CSPI2_SS1_B);
|
|
||||||
|
|
||||||
/* start SPI2 clock */
|
|
||||||
__REG(CCM_CGR2) = __REG(CCM_CGR2) | (3 << 4);
|
|
||||||
|
|
||||||
/* PBC setup */
|
|
||||||
/* Enable UART transceivers also reset the Ethernet/external UART */
|
|
||||||
readw(CS4_BASE + 4);
|
|
||||||
|
|
||||||
writew(0x8023, CS4_BASE + 4);
|
|
||||||
|
|
||||||
/* RedBoot also has an empty loop with 100000 iterations here -
|
|
||||||
* clock doesn't run yet */
|
|
||||||
for (i = 0; i < 100000; i++)
|
|
||||||
;
|
|
||||||
|
|
||||||
/* Clear the reset, toggle the LEDs */
|
|
||||||
writew(0xDF, CS4_BASE + 6);
|
|
||||||
|
|
||||||
/* clock still doesn't run */
|
|
||||||
for (i = 0; i < 100000; i++)
|
|
||||||
;
|
|
||||||
|
|
||||||
/* See 1.5.4 in IMX31ADSE_PERI_BUS_CNTRL_CPLD_RM.pdf */
|
|
||||||
readb(CS4_BASE + 8);
|
|
||||||
readb(CS4_BASE + 7);
|
|
||||||
readb(CS4_BASE + 8);
|
|
||||||
readb(CS4_BASE + 7);
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
int board_init(void)
|
|
||||||
{
|
|
||||||
gd->bd->bi_boot_params = 0x80000100; /* adress of boot parameters */
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
int checkboard(void)
|
|
||||||
{
|
|
||||||
printf("Board: MX31ADS\n");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef CONFIG_CMD_NET
|
|
||||||
int board_eth_init(bd_t *bis)
|
|
||||||
{
|
|
||||||
int rc = 0;
|
|
||||||
#ifdef CONFIG_CS8900
|
|
||||||
rc = cs8900_initialize(0, CONFIG_CS8900_BASE);
|
|
||||||
#endif
|
|
||||||
return rc;
|
|
||||||
}
|
|
||||||
#endif
|
|
@@ -1,110 +0,0 @@
|
|||||||
/*
|
|
||||||
* January 2004 - Changed to support H4 device
|
|
||||||
* Copyright (c) 2004 Texas Instruments
|
|
||||||
*
|
|
||||||
* (C) Copyright 2002
|
|
||||||
* Gary Jennejohn, DENX Software Engineering, <garyj@denx.de>
|
|
||||||
*
|
|
||||||
* SPDX-License-Identifier: GPL-2.0+
|
|
||||||
*/
|
|
||||||
|
|
||||||
OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
|
|
||||||
OUTPUT_ARCH(arm)
|
|
||||||
ENTRY(_start)
|
|
||||||
SECTIONS
|
|
||||||
{
|
|
||||||
. = 0x00000000;
|
|
||||||
|
|
||||||
. = ALIGN(4);
|
|
||||||
.text :
|
|
||||||
{
|
|
||||||
*(.__image_copy_start)
|
|
||||||
/* WARNING - the following is hand-optimized to fit within */
|
|
||||||
/* the sector layout of our flash chips! XXX FIXME XXX */
|
|
||||||
|
|
||||||
* (.vectors)
|
|
||||||
arch/arm/cpu/arm1136/start.o (.text*)
|
|
||||||
board/freescale/mx31ads/built-in.o (.text*)
|
|
||||||
arch/arm/lib/built-in.o (.text*)
|
|
||||||
net/built-in.o (.text*)
|
|
||||||
drivers/mtd/built-in.o (.text*)
|
|
||||||
|
|
||||||
. = DEFINED(env_offset) ? env_offset : .;
|
|
||||||
env/embedded.o(.text*)
|
|
||||||
|
|
||||||
*(.text*)
|
|
||||||
}
|
|
||||||
. = ALIGN(4);
|
|
||||||
.rodata : { *(.rodata*) }
|
|
||||||
|
|
||||||
. = ALIGN(4);
|
|
||||||
.data : {
|
|
||||||
*(.data*)
|
|
||||||
}
|
|
||||||
|
|
||||||
. = ALIGN(4);
|
|
||||||
|
|
||||||
. = ALIGN(4);
|
|
||||||
.u_boot_list : {
|
|
||||||
KEEP(*(SORT(.u_boot_list*)));
|
|
||||||
}
|
|
||||||
|
|
||||||
. = ALIGN(4);
|
|
||||||
|
|
||||||
.image_copy_end :
|
|
||||||
{
|
|
||||||
*(.__image_copy_end)
|
|
||||||
}
|
|
||||||
|
|
||||||
.rel_dyn_start :
|
|
||||||
{
|
|
||||||
*(.__rel_dyn_start)
|
|
||||||
}
|
|
||||||
|
|
||||||
.rel.dyn : {
|
|
||||||
*(.rel*)
|
|
||||||
}
|
|
||||||
|
|
||||||
.rel_dyn_end :
|
|
||||||
{
|
|
||||||
*(.__rel_dyn_end)
|
|
||||||
}
|
|
||||||
|
|
||||||
.hash : { *(.hash*) }
|
|
||||||
|
|
||||||
.end :
|
|
||||||
{
|
|
||||||
*(.__end)
|
|
||||||
}
|
|
||||||
|
|
||||||
_image_binary_end = .;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Compiler-generated __bss_start and __bss_end, see arch/arm/lib/bss.c
|
|
||||||
* __bss_base and __bss_limit are for linker only (overlay ordering)
|
|
||||||
*/
|
|
||||||
|
|
||||||
.bss_start __rel_dyn_start (OVERLAY) : {
|
|
||||||
KEEP(*(.__bss_start));
|
|
||||||
__bss_base = .;
|
|
||||||
}
|
|
||||||
|
|
||||||
.bss __bss_base (OVERLAY) : {
|
|
||||||
*(.bss*)
|
|
||||||
. = ALIGN(4);
|
|
||||||
__bss_limit = .;
|
|
||||||
}
|
|
||||||
.bss_end __bss_limit (OVERLAY) : {
|
|
||||||
KEEP(*(.__bss_end));
|
|
||||||
}
|
|
||||||
|
|
||||||
.dynsym _image_binary_end : { *(.dynsym) }
|
|
||||||
.dynbss : { *(.dynbss) }
|
|
||||||
.dynstr : { *(.dynstr*) }
|
|
||||||
.dynamic : { *(.dynamic*) }
|
|
||||||
.gnu.hash : { *(.gnu.hash) }
|
|
||||||
.plt : { *(.plt*) }
|
|
||||||
.interp : { *(.interp*) }
|
|
||||||
.gnu : { *(.gnu*) }
|
|
||||||
.ARM.exidx : { *(.ARM.exidx*) }
|
|
||||||
}
|
|
@@ -786,23 +786,6 @@ int board_late_init(void)
|
|||||||
add_board_boot_modes(board_boot_modes);
|
add_board_boot_modes(board_boot_modes);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef CONFIG_VIDEO_IPUV3
|
|
||||||
/* We need at least 200ms between power on and backlight on
|
|
||||||
* as per specifications from CHI MEI */
|
|
||||||
mdelay(250);
|
|
||||||
|
|
||||||
/* enable backlight PWM 1 */
|
|
||||||
pwm_init(0, 0, 0);
|
|
||||||
|
|
||||||
/* duty cycle 5000000ns, period: 5000000ns */
|
|
||||||
pwm_config(0, 5000000, 5000000);
|
|
||||||
|
|
||||||
/* Backlight Power */
|
|
||||||
gpio_direction_output(LVDS_BACKLIGHT_GP, 1);
|
|
||||||
|
|
||||||
pwm_enable(0);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* board specific pmic init */
|
/* board specific pmic init */
|
||||||
pmic_init();
|
pmic_init();
|
||||||
|
|
||||||
@@ -843,3 +826,31 @@ int checkboard(void)
|
|||||||
printf("BOARD: %s\n", CONFIG_BOARD_NAME);
|
printf("BOARD: %s\n", CONFIG_BOARD_NAME);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int do_backlight_enable(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
|
||||||
|
{
|
||||||
|
#ifdef CONFIG_VIDEO_IPUV3
|
||||||
|
/* We need at least 200ms between power on and backlight on
|
||||||
|
* as per specifications from CHI MEI */
|
||||||
|
mdelay(250);
|
||||||
|
|
||||||
|
/* enable backlight PWM 1 */
|
||||||
|
pwm_init(0, 0, 0);
|
||||||
|
|
||||||
|
/* duty cycle 5000000ns, period: 5000000ns */
|
||||||
|
pwm_config(0, 5000000, 5000000);
|
||||||
|
|
||||||
|
/* Backlight Power */
|
||||||
|
gpio_direction_output(LVDS_BACKLIGHT_GP, 1);
|
||||||
|
|
||||||
|
pwm_enable(0);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
U_BOOT_CMD(
|
||||||
|
bx50_backlight_enable, 1, 1, do_backlight_enable,
|
||||||
|
"enable Bx50 backlight",
|
||||||
|
""
|
||||||
|
);
|
||||||
|
@@ -1,12 +0,0 @@
|
|||||||
if TARGET_IMX31_PHYCORE || TARGET_IMX31_PHYCORE_EET
|
|
||||||
|
|
||||||
config SYS_BOARD
|
|
||||||
default "imx31_phycore"
|
|
||||||
|
|
||||||
config SYS_SOC
|
|
||||||
default "mx31"
|
|
||||||
|
|
||||||
config SYS_CONFIG_NAME
|
|
||||||
default "imx31_phycore"
|
|
||||||
|
|
||||||
endif
|
|
@@ -1,11 +0,0 @@
|
|||||||
IMX31_PHYCORE BOARD
|
|
||||||
#M: -
|
|
||||||
S: Maintained
|
|
||||||
F: board/imx31_phycore/
|
|
||||||
F: include/configs/imx31_phycore.h
|
|
||||||
F: configs/imx31_phycore_defconfig
|
|
||||||
|
|
||||||
IMX31_PHYCORE_EET BOARD
|
|
||||||
#M: (resigned) Guennadi Liakhovetski <g.liakhovetski@gmx.de>
|
|
||||||
S: Orphan (since 2013-09)
|
|
||||||
F: configs/imx31_phycore_eet_defconfig
|
|
@@ -1,9 +0,0 @@
|
|||||||
#
|
|
||||||
# (C) Copyright 2000-2006
|
|
||||||
# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
|
|
||||||
#
|
|
||||||
# SPDX-License-Identifier: GPL-2.0+
|
|
||||||
#
|
|
||||||
|
|
||||||
obj-y := imx31_phycore.o
|
|
||||||
obj-y += lowlevel_init.o
|
|
@@ -1,154 +0,0 @@
|
|||||||
/*
|
|
||||||
*
|
|
||||||
* (c) 2007 Pengutronix, Sascha Hauer <s.hauer@pengutronix.de>
|
|
||||||
*
|
|
||||||
* SPDX-License-Identifier: GPL-2.0+
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
#include <common.h>
|
|
||||||
#include <s6e63d6.h>
|
|
||||||
#include <netdev.h>
|
|
||||||
#include <asm/arch/clock.h>
|
|
||||||
#include <asm/arch/imx-regs.h>
|
|
||||||
#include <asm/mach-types.h>
|
|
||||||
#include <asm/arch/sys_proto.h>
|
|
||||||
|
|
||||||
DECLARE_GLOBAL_DATA_PTR;
|
|
||||||
|
|
||||||
int dram_init(void)
|
|
||||||
{
|
|
||||||
/* dram_init must store complete ramsize in gd->ram_size */
|
|
||||||
gd->ram_size = get_ram_size((void *)PHYS_SDRAM_1,
|
|
||||||
PHYS_SDRAM_1_SIZE);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
int board_init(void)
|
|
||||||
{
|
|
||||||
|
|
||||||
gd->bd->bi_arch_number = MACH_TYPE_PCM037; /* board id for linux */
|
|
||||||
gd->bd->bi_boot_params = (0x80000100); /* adress of boot parameters */
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
int board_early_init_f(void)
|
|
||||||
{
|
|
||||||
/* CS0: Nor Flash */
|
|
||||||
static const struct mxc_weimcs cs0 = {
|
|
||||||
/* sp wp bcd bcs psz pme sync dol cnc wsc ew wws edc */
|
|
||||||
CSCR_U(0, 0, 0, 0, 0, 0, 0, 0, 3, 15, 0, 0, 3),
|
|
||||||
/* oea oen ebwa ebwn csa ebc dsz csn psr cre wrap csen */
|
|
||||||
CSCR_L(1, 0, 0, 0, 0, 1, 5, 0, 0, 0, 1, 1),
|
|
||||||
/* ebra ebrn rwa rwn mum lah lbn lba dww dct wwu age cnc2 fce*/
|
|
||||||
CSCR_A(0, 0, 7, 2, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0)
|
|
||||||
};
|
|
||||||
|
|
||||||
/* CS1: Network Controller */
|
|
||||||
static const struct mxc_weimcs cs1 = {
|
|
||||||
/* sp wp bcd bcs psz pme sync dol cnc wsc ew wws edc */
|
|
||||||
CSCR_U(0, 0, 0, 0, 0, 0, 0, 0, 3, 31, 0, 0, 6),
|
|
||||||
/* oea oen ebwa ebwn csa ebc dsz csn psr cre wrap csen */
|
|
||||||
CSCR_L(4, 4, 4, 10, 4, 0, 5, 4, 0, 0, 0, 1),
|
|
||||||
/* ebra ebrn rwa rwn mum lah lbn lba dww dct wwu age cnc2 fce*/
|
|
||||||
CSCR_A(4, 4, 4, 4, 0, 1, 4, 3, 0, 0, 0, 0, 1, 0)
|
|
||||||
};
|
|
||||||
|
|
||||||
/* CS4: SRAM */
|
|
||||||
static const struct mxc_weimcs cs4 = {
|
|
||||||
/* sp wp bcd bcs psz pme sync dol cnc wsc ew wws edc */
|
|
||||||
CSCR_U(0, 0, 0, 0, 0, 0, 0, 0, 3, 24, 0, 4, 3),
|
|
||||||
/* oea oen ebwa ebwn csa ebc dsz csn psr cre wrap csen */
|
|
||||||
CSCR_L(2, 2, 2, 5, 2, 0, 5, 2, 0, 0, 0, 1),
|
|
||||||
/* ebra ebrn rwa rwn mum lah lbn lba dww dct wwu age cnc2 fce*/
|
|
||||||
CSCR_A(2, 2, 2, 2, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0)
|
|
||||||
};
|
|
||||||
|
|
||||||
mxc_setup_weimcs(0, &cs0);
|
|
||||||
mxc_setup_weimcs(1, &cs1);
|
|
||||||
mxc_setup_weimcs(4, &cs4);
|
|
||||||
|
|
||||||
/* setup pins for UART1 */
|
|
||||||
mx31_gpio_mux(MUX_RXD1__UART1_RXD_MUX);
|
|
||||||
mx31_gpio_mux(MUX_TXD1__UART1_TXD_MUX);
|
|
||||||
mx31_gpio_mux(MUX_RTS1__UART1_RTS_B);
|
|
||||||
mx31_gpio_mux(MUX_CTS1__UART1_CTS_B);
|
|
||||||
|
|
||||||
/* setup pins for I2C2 (for EEPROM, RTC) */
|
|
||||||
mx31_gpio_mux(MUX_CSPI2_MOSI__I2C2_SCL);
|
|
||||||
mx31_gpio_mux(MUX_CSPI2_MISO__I2C2_SDA);
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef CONFIG_BOARD_LATE_INIT
|
|
||||||
int board_late_init(void)
|
|
||||||
{
|
|
||||||
#ifdef CONFIG_S6E63D6
|
|
||||||
struct s6e63d6 data = {
|
|
||||||
/*
|
|
||||||
* See comment in mxc_spi.c::decode_cs() for .cs field format.
|
|
||||||
* We use GPIO 57 as a chipselect for the S6E63D6 and chipselect
|
|
||||||
* 2 of the SPI controller #1, since it is unused.
|
|
||||||
*/
|
|
||||||
.cs = 2 | (57 << 8),
|
|
||||||
.bus = 0,
|
|
||||||
.id = 0,
|
|
||||||
};
|
|
||||||
int ret;
|
|
||||||
|
|
||||||
/* SPI1 */
|
|
||||||
mx31_gpio_mux(MUX_CSPI1_SCLK__CSPI1_CLK);
|
|
||||||
mx31_gpio_mux(MUX_CSPI1_SPI_RDY__CSPI1_DATAREADY_B);
|
|
||||||
mx31_gpio_mux(MUX_CSPI1_MOSI__CSPI1_MOSI);
|
|
||||||
mx31_gpio_mux(MUX_CSPI1_MISO__CSPI1_MISO);
|
|
||||||
mx31_gpio_mux(MUX_CSPI1_SS0__CSPI1_SS0_B);
|
|
||||||
mx31_gpio_mux(MUX_CSPI1_SS1__CSPI1_SS1_B);
|
|
||||||
mx31_gpio_mux(MUX_CSPI1_SS2__CSPI1_SS2_B);
|
|
||||||
|
|
||||||
/* start SPI1 clock */
|
|
||||||
__REG(CCM_CGR2) = __REG(CCM_CGR2) | (3 << 2);
|
|
||||||
|
|
||||||
/* GPIO 57 */
|
|
||||||
/* sw_mux_ctl_key_col4_key_col5_key_col6_key_col7 */
|
|
||||||
mx31_gpio_mux(IOMUX_MODE(0x63, MUX_CTL_GPIO));
|
|
||||||
|
|
||||||
/* SPI1 CS2 is free */
|
|
||||||
ret = s6e63d6_init(&data);
|
|
||||||
if (ret)
|
|
||||||
return ret;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* This is a "magic" sequence to initialise a C0240QGLA / C0283QGLC
|
|
||||||
* OLED display connected to a S6E63D6 SPI display controller in the
|
|
||||||
* 18 bit RGB mode
|
|
||||||
*/
|
|
||||||
s6e63d6_index(&data, 2);
|
|
||||||
s6e63d6_param(&data, 0x0182);
|
|
||||||
s6e63d6_index(&data, 3);
|
|
||||||
s6e63d6_param(&data, 0x8130);
|
|
||||||
s6e63d6_index(&data, 0x10);
|
|
||||||
s6e63d6_param(&data, 0x0000);
|
|
||||||
s6e63d6_index(&data, 5);
|
|
||||||
s6e63d6_param(&data, 0x0001);
|
|
||||||
s6e63d6_index(&data, 0x22);
|
|
||||||
#endif
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
int checkboard (void)
|
|
||||||
{
|
|
||||||
printf("Board: Phytec phyCore i.MX31\n");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
int board_eth_init(bd_t *bis)
|
|
||||||
{
|
|
||||||
int rc = 0;
|
|
||||||
#ifdef CONFIG_SMC911X
|
|
||||||
rc = smc911x_initialize(0, CONFIG_SMC911X_BASE);
|
|
||||||
#endif
|
|
||||||
return rc;
|
|
||||||
}
|
|
@@ -1,88 +0,0 @@
|
|||||||
/*
|
|
||||||
*
|
|
||||||
* (c) 2007 Pengutronix, Sascha Hauer <s.hauer@pengutronix.de>
|
|
||||||
*
|
|
||||||
* SPDX-License-Identifier: GPL-2.0+
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <asm/arch/imx-regs.h>
|
|
||||||
|
|
||||||
.macro REG reg, val
|
|
||||||
ldr r2, =\reg
|
|
||||||
ldr r3, =\val
|
|
||||||
str r3, [r2]
|
|
||||||
.endm
|
|
||||||
|
|
||||||
.macro REG8 reg, val
|
|
||||||
ldr r2, =\reg
|
|
||||||
ldr r3, =\val
|
|
||||||
strb r3, [r2]
|
|
||||||
.endm
|
|
||||||
|
|
||||||
.macro DELAY loops
|
|
||||||
ldr r2, =\loops
|
|
||||||
1:
|
|
||||||
subs r2, r2, #1
|
|
||||||
nop
|
|
||||||
bcs 1b
|
|
||||||
.endm
|
|
||||||
|
|
||||||
.globl lowlevel_init
|
|
||||||
lowlevel_init:
|
|
||||||
|
|
||||||
REG IPU_CONF, IPU_CONF_DI_EN
|
|
||||||
REG CCM_CCMR, 0x074B0BF5
|
|
||||||
|
|
||||||
DELAY 0x40000
|
|
||||||
|
|
||||||
REG CCM_CCMR, 0x074B0BF5 | CCMR_MPE
|
|
||||||
REG CCM_CCMR, (0x074B0BF5 | CCMR_MPE) & ~CCMR_MDS
|
|
||||||
|
|
||||||
REG CCM_PDR0, PDR0_CSI_PODF(0x3f) | PDR0_CSI_PRDF(7) | PDR0_PER_PODF(7) | PDR0_HSP_PODF(3) | PDR0_NFC_PODF(5) | PDR0_IPG_PODF(1) | PDR0_MAX_PODF(3) | PDR0_MCU_PODF(0)
|
|
||||||
|
|
||||||
REG CCM_MPCTL, PLL_PD(0) | PLL_MFD(0xe) | PLL_MFI(9) | PLL_MFN(0xd)
|
|
||||||
|
|
||||||
REG CCM_SPCTL, PLL_PD(1) | PLL_MFD(0x43) | PLL_MFI(12) | PLL_MFN(1)
|
|
||||||
|
|
||||||
REG 0x43FAC26C, 0 /* SDCLK */
|
|
||||||
REG 0x43FAC270, 0 /* CAS */
|
|
||||||
REG 0x43FAC274, 0 /* RAS */
|
|
||||||
REG 0x43FAC27C, 0x1000 /* CS2 (CSD0) */
|
|
||||||
REG 0x43FAC284, 0 /* DQM3 */
|
|
||||||
REG 0x43FAC288, 0 /* DQM2, DQM1, DQM0, SD31-SD0, A25-A0, MA10 (0x288..0x2DC) */
|
|
||||||
REG 0x43FAC28C, 0
|
|
||||||
REG 0x43FAC290, 0
|
|
||||||
REG 0x43FAC294, 0
|
|
||||||
REG 0x43FAC298, 0
|
|
||||||
REG 0x43FAC29C, 0
|
|
||||||
REG 0x43FAC2A0, 0
|
|
||||||
REG 0x43FAC2A4, 0
|
|
||||||
REG 0x43FAC2A8, 0
|
|
||||||
REG 0x43FAC2AC, 0
|
|
||||||
REG 0x43FAC2B0, 0
|
|
||||||
REG 0x43FAC2B4, 0
|
|
||||||
REG 0x43FAC2B8, 0
|
|
||||||
REG 0x43FAC2BC, 0
|
|
||||||
REG 0x43FAC2C0, 0
|
|
||||||
REG 0x43FAC2C4, 0
|
|
||||||
REG 0x43FAC2C8, 0
|
|
||||||
REG 0x43FAC2CC, 0
|
|
||||||
REG 0x43FAC2D0, 0
|
|
||||||
REG 0x43FAC2D4, 0
|
|
||||||
REG 0x43FAC2D8, 0
|
|
||||||
REG 0x43FAC2DC, 0
|
|
||||||
REG 0xB8001010, 0x00000004
|
|
||||||
REG 0xB8001004, 0x006ac73a
|
|
||||||
REG 0xB8001000, 0x92100000
|
|
||||||
REG 0x80000f00, 0x12344321
|
|
||||||
REG 0xB8001000, 0xa2100000
|
|
||||||
REG 0x80000000, 0x12344321
|
|
||||||
REG 0x80000000, 0x12344321
|
|
||||||
REG 0xB8001000, 0xb2100000
|
|
||||||
REG8 0x80000033, 0xda
|
|
||||||
REG8 0x81000000, 0xff
|
|
||||||
REG 0xB8001000, 0x82226080
|
|
||||||
REG 0x80000000, 0xDEADBEEF
|
|
||||||
REG 0xB8001010, 0x0000000c
|
|
||||||
|
|
||||||
mov pc, lr
|
|
96
board/k+p/bootscripts/tpcboot.cmd
Normal file
96
board/k+p/bootscripts/tpcboot.cmd
Normal file
@@ -0,0 +1,96 @@
|
|||||||
|
#
|
||||||
|
# Copyright (C) 2018
|
||||||
|
# Lukasz Majewski, DENX Software Engineering, lukma@denx.de
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# This is an example file to generate boot.scr - a boot script for U-Boot
|
||||||
|
# Generate boot.scr:
|
||||||
|
# ./tools/mkimage -c none -A arm -T script -d tpcboot.cmd boot.scr
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: GPL-2.0+
|
||||||
|
|
||||||
|
|
||||||
|
# Input envs (to be set in environment)
|
||||||
|
# Mandatory:
|
||||||
|
# kernel_file = "fitImage"
|
||||||
|
# boardname = "XXXX" // set automatically in u-boot
|
||||||
|
# boardsoc = "imx6q" // set automatically in u-boot
|
||||||
|
#
|
||||||
|
# Optional:
|
||||||
|
# bootcmd_force = "nfs" "tftp_kernel"
|
||||||
|
# If not set - eMMC/SD boot
|
||||||
|
|
||||||
|
# Generic setup
|
||||||
|
setenv mmcroot "/dev/mmcblk${devnum}p2 rootwait rw"
|
||||||
|
setenv displayargs ""
|
||||||
|
setenv mmcargs "setenv bootargs console=${console} ${smp} root=${mmcroot} \
|
||||||
|
${displayargs}"
|
||||||
|
setenv boot_fitImage "
|
||||||
|
setenv fdt_conf 'conf@${boardsoc}-${boardname}.dtb';
|
||||||
|
setenv itbcfg "\"#\${fdt_conf}\"";
|
||||||
|
print itbcfg;
|
||||||
|
bootm '${loadaddr}${itbcfg}';"
|
||||||
|
|
||||||
|
#------------------------------------------------------------
|
||||||
|
#
|
||||||
|
# Provide default 'bootcmd' command
|
||||||
|
#------------------------------------------------------------
|
||||||
|
setenv bootcmd "
|
||||||
|
if test -e ${devtype} ${devnum}:${distro_bootpart} ${kernel_file}; then
|
||||||
|
echo Found kernel image: ${kernel_file};
|
||||||
|
if load ${devtype} ${devnum}:${distro_bootpart} ${loadaddr} \
|
||||||
|
${kernel_file}; then
|
||||||
|
run mmcargs;
|
||||||
|
run boot_fitImage;
|
||||||
|
fi;
|
||||||
|
fi;"
|
||||||
|
|
||||||
|
#------------------------------------------------------------
|
||||||
|
#
|
||||||
|
# Provide 'boot_tftp_kernel' command
|
||||||
|
#------------------------------------------------------------
|
||||||
|
setenv download_kernel "tftpboot ${loadaddr} ${kernel_file}"
|
||||||
|
|
||||||
|
setenv boot_tftp_kernel "
|
||||||
|
if run download_kernel; then
|
||||||
|
run mmcargs;
|
||||||
|
run boot_fitImage;
|
||||||
|
fi"
|
||||||
|
|
||||||
|
#------------------------------------------------------------
|
||||||
|
#
|
||||||
|
# Provide 'boot_nfs' command
|
||||||
|
#------------------------------------------------------------
|
||||||
|
setenv rootpath "/srv/tftp/KP/rootfs"
|
||||||
|
setenv nfsargs "setenv bootargs root=/dev/nfs rw \
|
||||||
|
nfsroot=${serverip}:${rootpath},nolock,nfsvers=3"
|
||||||
|
setenv addip "setenv bootargs ${bootargs} \
|
||||||
|
ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}:\
|
||||||
|
${hostname}:eth0:on"
|
||||||
|
|
||||||
|
setenv boot_nfs "
|
||||||
|
if run download_kernel; then
|
||||||
|
run nfsargs;
|
||||||
|
run addip;
|
||||||
|
setenv bootargs ${bootargs} console=${console};
|
||||||
|
|
||||||
|
run boot_fitImage;
|
||||||
|
fi"
|
||||||
|
|
||||||
|
#------------------------------------------------------------
|
||||||
|
#
|
||||||
|
# Set correct boot flow
|
||||||
|
#------------------------------------------------------------
|
||||||
|
|
||||||
|
setenv bcmd "
|
||||||
|
if test ! -n ${bootcmd_force}; then
|
||||||
|
run bootcmd;
|
||||||
|
fi;
|
||||||
|
if test ${bootcmd_force} = nfs; then
|
||||||
|
run boot_nfs;
|
||||||
|
else if test ${bootcmd_force} = tftp_kernel; then
|
||||||
|
run boot_tftp_kernel;
|
||||||
|
fi;
|
||||||
|
fi"
|
||||||
|
|
||||||
|
run bcmd
|
12
board/k+p/kp_imx6q_tpc/Kconfig
Normal file
12
board/k+p/kp_imx6q_tpc/Kconfig
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
if TARGET_KP_IMX6Q_TPC
|
||||||
|
|
||||||
|
config SYS_BOARD
|
||||||
|
default "kp_imx6q_tpc"
|
||||||
|
|
||||||
|
config SYS_VENDOR
|
||||||
|
default "k+p"
|
||||||
|
|
||||||
|
config SYS_CONFIG_NAME
|
||||||
|
default "kp_imx6q_tpc"
|
||||||
|
|
||||||
|
endif
|
6
board/k+p/kp_imx6q_tpc/MAINTAINERS
Normal file
6
board/k+p/kp_imx6q_tpc/MAINTAINERS
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
KP_IMX6Q_TPC BOARD
|
||||||
|
M: Lukasz Majewski <lukma@denx.de>
|
||||||
|
S: Maintained
|
||||||
|
F: board/k+p/kp_imx6q_tpc/
|
||||||
|
F: include/configs/kp_imx6q_tpc.h
|
||||||
|
F: configs/kp_imx6q_tpc_defconfig
|
11
board/k+p/kp_imx6q_tpc/Makefile
Normal file
11
board/k+p/kp_imx6q_tpc/Makefile
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
#
|
||||||
|
# Copyright (C) 2018 Lukasz Majewski <lukma@denx.de>
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: GPL-2.0+
|
||||||
|
#
|
||||||
|
|
||||||
|
ifdef CONFIG_SPL_BUILD
|
||||||
|
obj-y := kp_imx6q_tpc_spl.o
|
||||||
|
else
|
||||||
|
obj-y := kp_imx6q_tpc.o
|
||||||
|
endif
|
302
board/k+p/kp_imx6q_tpc/kp_imx6q_tpc.c
Normal file
302
board/k+p/kp_imx6q_tpc/kp_imx6q_tpc.c
Normal file
@@ -0,0 +1,302 @@
|
|||||||
|
/*
|
||||||
|
* K+P iMX6Q KP_IMX6Q_TPC board configuration
|
||||||
|
*
|
||||||
|
* Copyright (C) 2018 Lukasz Majewski <lukma@denx.de>
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: GPL-2.0+
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <common.h>
|
||||||
|
#include <asm/arch/clock.h>
|
||||||
|
#include <asm/arch/crm_regs.h>
|
||||||
|
#include <asm/arch/imx-regs.h>
|
||||||
|
#include <asm/arch/iomux.h>
|
||||||
|
#include <asm/arch/mx6-pins.h>
|
||||||
|
#include <asm/arch/sys_proto.h>
|
||||||
|
#include <asm/gpio.h>
|
||||||
|
#include <asm/io.h>
|
||||||
|
#include <asm/mach-imx/boot_mode.h>
|
||||||
|
#include <asm/mach-imx/iomux-v3.h>
|
||||||
|
#include <asm/mach-imx/mxc_i2c.h>
|
||||||
|
#include <errno.h>
|
||||||
|
#include <fsl_esdhc.h>
|
||||||
|
#include <fuse.h>
|
||||||
|
#include <i2c.h>
|
||||||
|
#include <miiphy.h>
|
||||||
|
#include <mmc.h>
|
||||||
|
#include <net.h>
|
||||||
|
#include <netdev.h>
|
||||||
|
#include <usb.h>
|
||||||
|
#include <usb/ehci-ci.h>
|
||||||
|
|
||||||
|
DECLARE_GLOBAL_DATA_PTR;
|
||||||
|
|
||||||
|
#define ENET_PAD_CTRL \
|
||||||
|
(PAD_CTL_PUS_100K_UP | PAD_CTL_SPEED_MED | PAD_CTL_DSE_40ohm | \
|
||||||
|
PAD_CTL_HYS)
|
||||||
|
|
||||||
|
#define I2C_PAD_CTRL \
|
||||||
|
(PAD_CTL_PUS_100K_UP | PAD_CTL_SPEED_MED | PAD_CTL_DSE_40ohm | \
|
||||||
|
PAD_CTL_HYS | PAD_CTL_ODE | PAD_CTL_SRE_FAST)
|
||||||
|
|
||||||
|
#define PC MUX_PAD_CTRL(I2C_PAD_CTRL)
|
||||||
|
|
||||||
|
static struct i2c_pads_info kp_imx6q_tpc_i2c_pad_info0 = {
|
||||||
|
.scl = {
|
||||||
|
.i2c_mode = MX6Q_PAD_CSI0_DAT9__I2C1_SCL | PC,
|
||||||
|
.gpio_mode = MX6Q_PAD_CSI0_DAT9__GPIO5_IO27 | PC,
|
||||||
|
.gp = IMX_GPIO_NR(5, 27)
|
||||||
|
},
|
||||||
|
.sda = {
|
||||||
|
.i2c_mode = MX6Q_PAD_CSI0_DAT8__I2C1_SDA | PC,
|
||||||
|
.gpio_mode = MX6Q_PAD_CSI0_DAT8__GPIO5_IO26 | PC,
|
||||||
|
.gp = IMX_GPIO_NR(5, 26)
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct i2c_pads_info kp_imx6q_tpc_i2c_pad_info1 = {
|
||||||
|
.scl = {
|
||||||
|
.i2c_mode = MX6Q_PAD_KEY_COL3__I2C2_SCL | PC,
|
||||||
|
.gpio_mode = MX6Q_PAD_KEY_COL3__GPIO4_IO12 | PC,
|
||||||
|
.gp = IMX_GPIO_NR(4, 12)
|
||||||
|
},
|
||||||
|
.sda = {
|
||||||
|
.i2c_mode = MX6Q_PAD_KEY_ROW3__I2C2_SDA | PC,
|
||||||
|
.gpio_mode = MX6Q_PAD_KEY_ROW3__GPIO4_IO13 | PC,
|
||||||
|
.gp = IMX_GPIO_NR(4, 13)
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
int dram_init(void)
|
||||||
|
{
|
||||||
|
gd->ram_size = imx_ddr_size();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Do not overwrite the console
|
||||||
|
* Use always serial for U-Boot console
|
||||||
|
*/
|
||||||
|
int overwrite_console(void)
|
||||||
|
{
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef CONFIG_FEC_MXC
|
||||||
|
static iomux_v3_cfg_t const enet_pads[] = {
|
||||||
|
IOMUX_PADS(PAD_ENET_MDIO__ENET_MDIO | MUX_PAD_CTRL(ENET_PAD_CTRL)),
|
||||||
|
IOMUX_PADS(PAD_ENET_MDC__ENET_MDC | MUX_PAD_CTRL(ENET_PAD_CTRL)),
|
||||||
|
IOMUX_PADS(PAD_RGMII_TXC__RGMII_TXC | MUX_PAD_CTRL(ENET_PAD_CTRL)),
|
||||||
|
IOMUX_PADS(PAD_RGMII_TD0__RGMII_TD0 | MUX_PAD_CTRL(ENET_PAD_CTRL)),
|
||||||
|
IOMUX_PADS(PAD_RGMII_TD1__RGMII_TD1 | MUX_PAD_CTRL(ENET_PAD_CTRL)),
|
||||||
|
IOMUX_PADS(PAD_RGMII_TD2__RGMII_TD2 | MUX_PAD_CTRL(ENET_PAD_CTRL)),
|
||||||
|
IOMUX_PADS(PAD_RGMII_TD3__RGMII_TD3 | MUX_PAD_CTRL(ENET_PAD_CTRL)),
|
||||||
|
IOMUX_PADS(PAD_RGMII_TX_CTL__RGMII_TX_CTL |
|
||||||
|
MUX_PAD_CTRL(ENET_PAD_CTRL)),
|
||||||
|
IOMUX_PADS(PAD_ENET_REF_CLK__ENET_TX_CLK | MUX_PAD_CTRL(ENET_PAD_CTRL)),
|
||||||
|
IOMUX_PADS(PAD_RGMII_RXC__RGMII_RXC | MUX_PAD_CTRL(ENET_PAD_CTRL)),
|
||||||
|
IOMUX_PADS(PAD_RGMII_RD0__RGMII_RD0 | MUX_PAD_CTRL(ENET_PAD_CTRL)),
|
||||||
|
IOMUX_PADS(PAD_RGMII_RD1__RGMII_RD1 | MUX_PAD_CTRL(ENET_PAD_CTRL)),
|
||||||
|
IOMUX_PADS(PAD_RGMII_RD2__RGMII_RD2 | MUX_PAD_CTRL(ENET_PAD_CTRL)),
|
||||||
|
IOMUX_PADS(PAD_RGMII_RD3__RGMII_RD3 | MUX_PAD_CTRL(ENET_PAD_CTRL)),
|
||||||
|
IOMUX_PADS(PAD_RGMII_RX_CTL__RGMII_RX_CTL |
|
||||||
|
MUX_PAD_CTRL(ENET_PAD_CTRL)),
|
||||||
|
/* AR8031 PHY Reset */
|
||||||
|
IOMUX_PADS(PAD_ENET_CRS_DV__GPIO1_IO25 | MUX_PAD_CTRL(NO_PAD_CTRL)),
|
||||||
|
};
|
||||||
|
|
||||||
|
static void eth_phy_reset(void)
|
||||||
|
{
|
||||||
|
/* Reset AR8031 PHY */
|
||||||
|
gpio_direction_output(IMX_GPIO_NR(1, 25), 0);
|
||||||
|
mdelay(10);
|
||||||
|
gpio_set_value(IMX_GPIO_NR(1, 25), 1);
|
||||||
|
udelay(100);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int setup_fec_clock(void)
|
||||||
|
{
|
||||||
|
struct iomuxc *iomuxc_regs = (struct iomuxc *)IOMUXC_BASE_ADDR;
|
||||||
|
|
||||||
|
/* set gpr1[21] to select anatop clock */
|
||||||
|
clrsetbits_le32(&iomuxc_regs->gpr[1], 0x1 << 21, 0x1 << 21);
|
||||||
|
|
||||||
|
return enable_fec_anatop_clock(0, ENET_50MHZ);
|
||||||
|
}
|
||||||
|
|
||||||
|
int board_eth_init(bd_t *bis)
|
||||||
|
{
|
||||||
|
SETUP_IOMUX_PADS(enet_pads);
|
||||||
|
setup_fec_clock();
|
||||||
|
eth_phy_reset();
|
||||||
|
|
||||||
|
return cpu_eth_init(bis);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int ar8031_phy_fixup(struct phy_device *phydev)
|
||||||
|
{
|
||||||
|
unsigned short val;
|
||||||
|
|
||||||
|
/* To enable AR8031 output a 125MHz clk from CLK_25M */
|
||||||
|
phy_write(phydev, MDIO_DEVAD_NONE, 0xd, 0x7);
|
||||||
|
phy_write(phydev, MDIO_DEVAD_NONE, 0xe, 0x8016);
|
||||||
|
phy_write(phydev, MDIO_DEVAD_NONE, 0xd, 0x4007);
|
||||||
|
|
||||||
|
val = phy_read(phydev, MDIO_DEVAD_NONE, 0xe);
|
||||||
|
val &= 0xffe3;
|
||||||
|
val |= 0x18;
|
||||||
|
phy_write(phydev, MDIO_DEVAD_NONE, 0xe, val);
|
||||||
|
|
||||||
|
/* introduce tx clock delay */
|
||||||
|
phy_write(phydev, MDIO_DEVAD_NONE, 0x1d, 0x5);
|
||||||
|
val = phy_read(phydev, MDIO_DEVAD_NONE, 0x1e);
|
||||||
|
val |= 0x0100;
|
||||||
|
phy_write(phydev, MDIO_DEVAD_NONE, 0x1e, val);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int board_phy_config(struct phy_device *phydev)
|
||||||
|
{
|
||||||
|
ar8031_phy_fixup(phydev);
|
||||||
|
|
||||||
|
if (phydev->drv->config)
|
||||||
|
phydev->drv->config(phydev);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef CONFIG_FSL_ESDHC
|
||||||
|
|
||||||
|
#define USDHC2_CD_GPIO IMX_GPIO_NR(1, 4)
|
||||||
|
static struct fsl_esdhc_cfg usdhc_cfg[] = {
|
||||||
|
{ USDHC2_BASE_ADDR },
|
||||||
|
{ USDHC4_BASE_ADDR },
|
||||||
|
};
|
||||||
|
|
||||||
|
int board_mmc_getcd(struct mmc *mmc)
|
||||||
|
{
|
||||||
|
struct fsl_esdhc_cfg *cfg = (struct fsl_esdhc_cfg *)mmc->priv;
|
||||||
|
|
||||||
|
switch (cfg->esdhc_base) {
|
||||||
|
case USDHC2_BASE_ADDR:
|
||||||
|
return !gpio_get_value(USDHC2_CD_GPIO);
|
||||||
|
case USDHC4_BASE_ADDR:
|
||||||
|
return 1; /* eMMC/uSDHC4 is always present */
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int board_mmc_init(bd_t *bis)
|
||||||
|
{
|
||||||
|
int i, ret;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* According to the board_mmc_init() the following map is done:
|
||||||
|
* (U-Boot device node) (Physical Port)
|
||||||
|
* mmc0 micro SD
|
||||||
|
* mmc2 eMMC
|
||||||
|
*/
|
||||||
|
gpio_direction_input(USDHC2_CD_GPIO);
|
||||||
|
|
||||||
|
usdhc_cfg[0].sdhc_clk = mxc_get_clock(MXC_ESDHC2_CLK);
|
||||||
|
usdhc_cfg[1].sdhc_clk = mxc_get_clock(MXC_ESDHC4_CLK);
|
||||||
|
|
||||||
|
for (i = 0; i < CONFIG_SYS_FSL_USDHC_NUM; i++) {
|
||||||
|
ret = fsl_esdhc_initialize(bis, &usdhc_cfg[i]);
|
||||||
|
if (ret)
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef CONFIG_USB_EHCI_MX6
|
||||||
|
static void setup_usb(void)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* Set daisy chain for otg_pin_id on MX6Q.
|
||||||
|
* For MX6DL, this bit is reserved.
|
||||||
|
*/
|
||||||
|
imx_iomux_set_gpr_register(1, 13, 1, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
int board_usb_phy_mode(int port)
|
||||||
|
{
|
||||||
|
if (port == 1)
|
||||||
|
return USB_INIT_HOST;
|
||||||
|
else
|
||||||
|
return USB_INIT_DEVICE;
|
||||||
|
}
|
||||||
|
|
||||||
|
int board_ehci_power(int port, int on)
|
||||||
|
{
|
||||||
|
switch (port) {
|
||||||
|
case 0:
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
gpio_direction_output(IMX_GPIO_NR(3, 31), !!on);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
printf("MXC USB port %d not yet supported\n", port);
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
int board_early_init_f(void)
|
||||||
|
{
|
||||||
|
#ifdef CONFIG_USB_EHCI_MX6
|
||||||
|
setup_usb();
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int board_init(void)
|
||||||
|
{
|
||||||
|
struct mxc_ccm_reg *mxc_ccm = (struct mxc_ccm_reg *)CCM_BASE_ADDR;
|
||||||
|
|
||||||
|
/* address of boot parameters */
|
||||||
|
gd->bd->bi_boot_params = PHYS_SDRAM + 0x100;
|
||||||
|
|
||||||
|
/* Enable eim_slow clocks */
|
||||||
|
setbits_le32(&mxc_ccm->CCGR6, 0x1 << MXC_CCM_CCGR6_EMI_SLOW_OFFSET);
|
||||||
|
|
||||||
|
setup_i2c(0, CONFIG_SYS_I2C_SPEED, 0x7f, &kp_imx6q_tpc_i2c_pad_info0);
|
||||||
|
setup_i2c(1, CONFIG_SYS_I2C_SPEED, 0x7f, &kp_imx6q_tpc_i2c_pad_info1);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef CONFIG_CMD_BMODE
|
||||||
|
static const struct boot_mode board_boot_modes[] = {
|
||||||
|
/* 4 bit bus width */
|
||||||
|
{"sd2", MAKE_CFGVAL(0x40, 0x28, 0x00, 0x00)},
|
||||||
|
/* 8 bit bus width */
|
||||||
|
{"emmc", MAKE_CFGVAL(0x60, 0x58, 0x00, 0x00)},
|
||||||
|
{NULL, 0},
|
||||||
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
|
int board_late_init(void)
|
||||||
|
{
|
||||||
|
#ifdef CONFIG_CMD_BMODE
|
||||||
|
add_board_boot_modes(board_boot_modes);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
env_set("boardname", "kp-tpc");
|
||||||
|
env_set("boardsoc", "imx6q");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int checkboard(void)
|
||||||
|
{
|
||||||
|
puts("Board: K+P KP_IMX6Q_TPC i.MX6Q\n");
|
||||||
|
return 0;
|
||||||
|
}
|
338
board/k+p/kp_imx6q_tpc/kp_imx6q_tpc_spl.c
Normal file
338
board/k+p/kp_imx6q_tpc/kp_imx6q_tpc_spl.c
Normal file
@@ -0,0 +1,338 @@
|
|||||||
|
/*
|
||||||
|
* K+P iMX6Q KP_IMX6Q_TPC board configuration
|
||||||
|
*
|
||||||
|
* Copyright (C) 2018 Lukasz Majewski <lukma@denx.de>
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: GPL-2.0+
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <common.h>
|
||||||
|
#include <asm/arch/clock.h>
|
||||||
|
#include <asm/arch/crm_regs.h>
|
||||||
|
#include <asm/arch/imx-regs.h>
|
||||||
|
#include <asm/arch/iomux.h>
|
||||||
|
#include <asm/arch/mx6-ddr.h>
|
||||||
|
#include <asm/arch/mx6-pins.h>
|
||||||
|
#include <asm/arch/sys_proto.h>
|
||||||
|
#include <asm/gpio.h>
|
||||||
|
#include <asm/mach-imx/boot_mode.h>
|
||||||
|
#include <asm/mach-imx/iomux-v3.h>
|
||||||
|
#include <asm/mach-imx/mxc_i2c.h>
|
||||||
|
#include <asm/io.h>
|
||||||
|
#include <errno.h>
|
||||||
|
#include <fuse.h>
|
||||||
|
#include <fsl_esdhc.h>
|
||||||
|
#include <i2c.h>
|
||||||
|
#include <mmc.h>
|
||||||
|
#include <spl.h>
|
||||||
|
|
||||||
|
#define UART_PAD_CTRL \
|
||||||
|
(PAD_CTL_PUS_100K_UP | PAD_CTL_SPEED_MED | PAD_CTL_DSE_40ohm | \
|
||||||
|
PAD_CTL_SRE_FAST | PAD_CTL_HYS)
|
||||||
|
|
||||||
|
#define USDHC_PAD_CTRL \
|
||||||
|
(PAD_CTL_PUS_47K_UP | PAD_CTL_SPEED_LOW | PAD_CTL_DSE_80ohm | \
|
||||||
|
PAD_CTL_SRE_FAST | PAD_CTL_HYS)
|
||||||
|
|
||||||
|
DECLARE_GLOBAL_DATA_PTR;
|
||||||
|
|
||||||
|
static void ccgr_init(void)
|
||||||
|
{
|
||||||
|
struct mxc_ccm_reg *ccm = (struct mxc_ccm_reg *)CCM_BASE_ADDR;
|
||||||
|
|
||||||
|
writel(0x00C03F3F, &ccm->CCGR0);
|
||||||
|
writel(0x0030FC03, &ccm->CCGR1);
|
||||||
|
writel(0x0FFFC000, &ccm->CCGR2);
|
||||||
|
writel(0x3FF00000, &ccm->CCGR3);
|
||||||
|
writel(0x00FFF300, &ccm->CCGR4);
|
||||||
|
writel(0x0F0000C3, &ccm->CCGR5);
|
||||||
|
writel(0x000003FF, &ccm->CCGR6);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* onboard microSD */
|
||||||
|
static iomux_v3_cfg_t const usdhc2_pads[] = {
|
||||||
|
IOMUX_PADS(PAD_SD2_DAT0__SD2_DATA0 | MUX_PAD_CTRL(USDHC_PAD_CTRL)),
|
||||||
|
IOMUX_PADS(PAD_SD2_DAT1__SD2_DATA1 | MUX_PAD_CTRL(USDHC_PAD_CTRL)),
|
||||||
|
IOMUX_PADS(PAD_SD2_DAT2__SD2_DATA2 | MUX_PAD_CTRL(USDHC_PAD_CTRL)),
|
||||||
|
IOMUX_PADS(PAD_SD2_DAT3__SD2_DATA3 | MUX_PAD_CTRL(USDHC_PAD_CTRL)),
|
||||||
|
IOMUX_PADS(PAD_SD2_CLK__SD2_CLK | MUX_PAD_CTRL(USDHC_PAD_CTRL)),
|
||||||
|
IOMUX_PADS(PAD_SD2_CMD__SD2_CMD | MUX_PAD_CTRL(USDHC_PAD_CTRL)),
|
||||||
|
IOMUX_PADS(PAD_NANDF_CS3__GPIO6_IO16 | MUX_PAD_CTRL(NO_PAD_CTRL)),
|
||||||
|
};
|
||||||
|
|
||||||
|
/* eMMC */
|
||||||
|
static iomux_v3_cfg_t const usdhc4_pads[] = {
|
||||||
|
IOMUX_PADS(PAD_SD4_DAT0__SD4_DATA0 | MUX_PAD_CTRL(USDHC_PAD_CTRL)),
|
||||||
|
IOMUX_PADS(PAD_SD4_DAT1__SD4_DATA1 | MUX_PAD_CTRL(USDHC_PAD_CTRL)),
|
||||||
|
IOMUX_PADS(PAD_SD4_DAT2__SD4_DATA2 | MUX_PAD_CTRL(USDHC_PAD_CTRL)),
|
||||||
|
IOMUX_PADS(PAD_SD4_DAT3__SD4_DATA3 | MUX_PAD_CTRL(USDHC_PAD_CTRL)),
|
||||||
|
IOMUX_PADS(PAD_SD4_DAT4__SD4_DATA4 | MUX_PAD_CTRL(USDHC_PAD_CTRL)),
|
||||||
|
IOMUX_PADS(PAD_SD4_DAT5__SD4_DATA5 | MUX_PAD_CTRL(USDHC_PAD_CTRL)),
|
||||||
|
IOMUX_PADS(PAD_SD4_DAT6__SD4_DATA6 | MUX_PAD_CTRL(USDHC_PAD_CTRL)),
|
||||||
|
IOMUX_PADS(PAD_SD4_DAT7__SD4_DATA7 | MUX_PAD_CTRL(USDHC_PAD_CTRL)),
|
||||||
|
IOMUX_PADS(PAD_SD4_CLK__SD4_CLK | MUX_PAD_CTRL(USDHC_PAD_CTRL)),
|
||||||
|
IOMUX_PADS(PAD_SD4_CMD__SD4_CMD | MUX_PAD_CTRL(USDHC_PAD_CTRL)),
|
||||||
|
};
|
||||||
|
|
||||||
|
/* SD */
|
||||||
|
static void setup_iomux_sd(void)
|
||||||
|
{
|
||||||
|
SETUP_IOMUX_PADS(usdhc2_pads);
|
||||||
|
SETUP_IOMUX_PADS(usdhc4_pads);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* UART */
|
||||||
|
static iomux_v3_cfg_t const uart1_pads[] = {
|
||||||
|
IOMUX_PADS(PAD_SD3_DAT7__UART1_TX_DATA | MUX_PAD_CTRL(UART_PAD_CTRL)),
|
||||||
|
IOMUX_PADS(PAD_SD3_DAT6__UART1_RX_DATA | MUX_PAD_CTRL(UART_PAD_CTRL)),
|
||||||
|
};
|
||||||
|
|
||||||
|
static void setup_iomux_uart(void)
|
||||||
|
{
|
||||||
|
SETUP_IOMUX_PADS(uart1_pads);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* USB */
|
||||||
|
static iomux_v3_cfg_t const usb_pads[] = {
|
||||||
|
IOMUX_PADS(PAD_GPIO_1__USB_OTG_ID | MUX_PAD_CTRL(NO_PAD_CTRL)),
|
||||||
|
IOMUX_PADS(PAD_EIM_D31__GPIO3_IO31 | MUX_PAD_CTRL(NO_PAD_CTRL)),
|
||||||
|
};
|
||||||
|
|
||||||
|
static void setup_iomux_usb(void)
|
||||||
|
{
|
||||||
|
SETUP_IOMUX_PADS(usb_pads);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* DDR3 */
|
||||||
|
static const struct mx6dq_iomux_ddr_regs mx6_ddr_ioregs = {
|
||||||
|
.dram_sdclk_0 = 0x00000030,
|
||||||
|
.dram_sdclk_1 = 0x00000030,
|
||||||
|
.dram_cas = 0x00000030,
|
||||||
|
.dram_ras = 0x00000030,
|
||||||
|
.dram_reset = 0x00000030,
|
||||||
|
.dram_sdcke0 = 0x00003000,
|
||||||
|
.dram_sdcke1 = 0x00003000,
|
||||||
|
.dram_sdba2 = 0x00000000,
|
||||||
|
.dram_sdodt0 = 0x00000030,
|
||||||
|
.dram_sdodt1 = 0x00000030,
|
||||||
|
|
||||||
|
.dram_sdqs0 = 0x00000018,
|
||||||
|
.dram_sdqs1 = 0x00000018,
|
||||||
|
.dram_sdqs2 = 0x00000018,
|
||||||
|
.dram_sdqs3 = 0x00000018,
|
||||||
|
.dram_sdqs4 = 0x00000018,
|
||||||
|
.dram_sdqs5 = 0x00000018,
|
||||||
|
.dram_sdqs6 = 0x00000018,
|
||||||
|
.dram_sdqs7 = 0x00000018,
|
||||||
|
|
||||||
|
.dram_dqm0 = 0x00000018,
|
||||||
|
.dram_dqm1 = 0x00000018,
|
||||||
|
.dram_dqm2 = 0x00000018,
|
||||||
|
.dram_dqm3 = 0x00000018,
|
||||||
|
.dram_dqm4 = 0x00000018,
|
||||||
|
.dram_dqm5 = 0x00000018,
|
||||||
|
.dram_dqm6 = 0x00000018,
|
||||||
|
.dram_dqm7 = 0x00000018,
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct mx6dq_iomux_grp_regs mx6_grp_ioregs = {
|
||||||
|
.grp_ddr_type = 0x000c0000,
|
||||||
|
.grp_ddrmode_ctl = 0x00020000,
|
||||||
|
.grp_ddrpke = 0x00000000,
|
||||||
|
.grp_addds = 0x00000030,
|
||||||
|
.grp_ctlds = 0x00000030,
|
||||||
|
.grp_ddrmode = 0x00020000,
|
||||||
|
.grp_b0ds = 0x00000018,
|
||||||
|
.grp_b1ds = 0x00000018,
|
||||||
|
.grp_b2ds = 0x00000018,
|
||||||
|
.grp_b3ds = 0x00000018,
|
||||||
|
.grp_b4ds = 0x00000018,
|
||||||
|
.grp_b5ds = 0x00000018,
|
||||||
|
.grp_b6ds = 0x00000018,
|
||||||
|
.grp_b7ds = 0x00000018,
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct mx6_mmdc_calibration mx6_4x256mx16_mmdc_calib = {
|
||||||
|
.p0_mpwldectrl0 = 0x001F001F,
|
||||||
|
.p0_mpwldectrl1 = 0x001F001F,
|
||||||
|
.p1_mpwldectrl0 = 0x001F001F,
|
||||||
|
.p1_mpwldectrl1 = 0x001F001F,
|
||||||
|
.p0_mpdgctrl0 = 0x43270338,
|
||||||
|
.p0_mpdgctrl1 = 0x03200314,
|
||||||
|
.p1_mpdgctrl0 = 0x431A032F,
|
||||||
|
.p1_mpdgctrl1 = 0x03200263,
|
||||||
|
.p0_mprddlctl = 0x4B434748,
|
||||||
|
.p1_mprddlctl = 0x4445404C,
|
||||||
|
.p0_mpwrdlctl = 0x38444542,
|
||||||
|
.p1_mpwrdlctl = 0x4935493A,
|
||||||
|
};
|
||||||
|
|
||||||
|
/* MT41K256M16 (4Gb density) */
|
||||||
|
static const struct mx6_ddr3_cfg mt41k256m16 = {
|
||||||
|
.mem_speed = 1600,
|
||||||
|
.density = 4,
|
||||||
|
.width = 16,
|
||||||
|
.banks = 8,
|
||||||
|
.rowaddr = 15,
|
||||||
|
.coladdr = 10,
|
||||||
|
.pagesz = 2,
|
||||||
|
.trcd = 1375,
|
||||||
|
.trcmin = 4875,
|
||||||
|
.trasmin = 3500,
|
||||||
|
};
|
||||||
|
|
||||||
|
#ifdef CONFIG_MX6_DDRCAL
|
||||||
|
static void spl_dram_print_cal(struct mx6_ddr_sysinfo const *sysinfo)
|
||||||
|
{
|
||||||
|
struct mx6_mmdc_calibration calibration = {0};
|
||||||
|
|
||||||
|
mmdc_read_calibration(sysinfo, &calibration);
|
||||||
|
|
||||||
|
debug(".p0_mpdgctrl0\t= 0x%08X\n", calibration.p0_mpdgctrl0);
|
||||||
|
debug(".p0_mpdgctrl1\t= 0x%08X\n", calibration.p0_mpdgctrl1);
|
||||||
|
debug(".p0_mprddlctl\t= 0x%08X\n", calibration.p0_mprddlctl);
|
||||||
|
debug(".p0_mpwrdlctl\t= 0x%08X\n", calibration.p0_mpwrdlctl);
|
||||||
|
debug(".p0_mpwldectrl0\t= 0x%08X\n", calibration.p0_mpwldectrl0);
|
||||||
|
debug(".p0_mpwldectrl1\t= 0x%08X\n", calibration.p0_mpwldectrl1);
|
||||||
|
debug(".p1_mpdgctrl0\t= 0x%08X\n", calibration.p1_mpdgctrl0);
|
||||||
|
debug(".p1_mpdgctrl1\t= 0x%08X\n", calibration.p1_mpdgctrl1);
|
||||||
|
debug(".p1_mprddlctl\t= 0x%08X\n", calibration.p1_mprddlctl);
|
||||||
|
debug(".p1_mpwrdlctl\t= 0x%08X\n", calibration.p1_mpwrdlctl);
|
||||||
|
debug(".p1_mpwldectrl0\t= 0x%08X\n", calibration.p1_mpwldectrl0);
|
||||||
|
debug(".p1_mpwldectrl1\t= 0x%08X\n", calibration.p1_mpwldectrl1);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void spl_dram_perform_cal(struct mx6_ddr_sysinfo const *sysinfo)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
/* Perform DDR DRAM calibration */
|
||||||
|
udelay(100);
|
||||||
|
ret = mmdc_do_write_level_calibration(sysinfo);
|
||||||
|
if (ret) {
|
||||||
|
printf("DDR: Write level calibration error [%d]\n", ret);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = mmdc_do_dqs_calibration(sysinfo);
|
||||||
|
if (ret) {
|
||||||
|
printf("DDR: DQS calibration error [%d]\n", ret);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
spl_dram_print_cal(sysinfo);
|
||||||
|
}
|
||||||
|
#endif /* CONFIG_MX6_DDRCAL */
|
||||||
|
|
||||||
|
static void spl_dram_init(void)
|
||||||
|
{
|
||||||
|
struct mx6_ddr_sysinfo sysinfo = {
|
||||||
|
/* width of data bus:0=16,1=32,2=64 */
|
||||||
|
.dsize = 2,
|
||||||
|
/* config for full 4GB range so that get_mem_size() works */
|
||||||
|
.cs_density = 32, /* 32Gb per CS */
|
||||||
|
/* single chip select */
|
||||||
|
.ncs = 1,
|
||||||
|
.cs1_mirror = 0,
|
||||||
|
.rtt_wr = 1 /*DDR3_RTT_60_OHM*/, /* RTT_Wr = RZQ/4 */
|
||||||
|
.rtt_nom = 2 /*DDR3_RTT_120_OHM*/, /* RTT_Nom = RZQ/2 */
|
||||||
|
.walat = 1, /* Write additional latency */
|
||||||
|
.ralat = 5, /* Read additional latency */
|
||||||
|
.mif3_mode = 3, /* Command prediction working mode */
|
||||||
|
.bi_on = 1, /* Bank interleaving enabled */
|
||||||
|
.sde_to_rst = 0x10, /* 14 cycles, 200us (JEDEC default) */
|
||||||
|
.rst_to_cke = 0x23, /* 33 cycles, 500us (JEDEC default) */
|
||||||
|
.pd_fast_exit = 1, /* enable precharge power-down fast exit */
|
||||||
|
.ddr_type = DDR_TYPE_DDR3,
|
||||||
|
.refsel = 1, /* Refresh cycles at 32KHz */
|
||||||
|
.refr = 7, /* 8 refresh commands per refresh cycle */
|
||||||
|
};
|
||||||
|
|
||||||
|
mx6dq_dram_iocfg(64, &mx6_ddr_ioregs, &mx6_grp_ioregs);
|
||||||
|
mx6_dram_cfg(&sysinfo, &mx6_4x256mx16_mmdc_calib, &mt41k256m16);
|
||||||
|
|
||||||
|
#ifdef CONFIG_MX6_DDRCAL
|
||||||
|
spl_dram_perform_cal(&sysinfo);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
struct fsl_esdhc_cfg usdhc_cfg[] = {
|
||||||
|
{USDHC2_BASE_ADDR},
|
||||||
|
{USDHC4_BASE_ADDR},
|
||||||
|
};
|
||||||
|
|
||||||
|
#define USDHC2_CD_GPIO IMX_GPIO_NR(1, 4)
|
||||||
|
int board_mmc_getcd(struct mmc *mmc)
|
||||||
|
{
|
||||||
|
struct fsl_esdhc_cfg *cfg = (struct fsl_esdhc_cfg *)mmc->priv;
|
||||||
|
int ret = 0;
|
||||||
|
|
||||||
|
switch (cfg->esdhc_base) {
|
||||||
|
case USDHC2_BASE_ADDR:
|
||||||
|
ret = !gpio_get_value(USDHC2_CD_GPIO);
|
||||||
|
break;
|
||||||
|
case USDHC4_BASE_ADDR:
|
||||||
|
ret = 1; /* eMMC/uSDHC4 is always present */
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
int board_mmc_init(bd_t *bd)
|
||||||
|
{
|
||||||
|
struct src *psrc = (struct src *)SRC_BASE_ADDR;
|
||||||
|
unsigned int reg = readl(&psrc->sbmr1) >> 11;
|
||||||
|
/*
|
||||||
|
* Upon reading BOOT_CFG register the following map is done:
|
||||||
|
* Bit 11 and 12 of BOOT_CFG register can determine the current
|
||||||
|
* mmc port
|
||||||
|
* 0x1 SD1
|
||||||
|
* 0x3 SD4
|
||||||
|
*/
|
||||||
|
|
||||||
|
switch (reg & 0x3) {
|
||||||
|
case 0x1:
|
||||||
|
SETUP_IOMUX_PADS(usdhc2_pads);
|
||||||
|
usdhc_cfg[0].esdhc_base = USDHC2_BASE_ADDR;
|
||||||
|
usdhc_cfg[0].sdhc_clk = mxc_get_clock(MXC_ESDHC2_CLK);
|
||||||
|
gd->arch.sdhc_clk = usdhc_cfg[0].sdhc_clk;
|
||||||
|
break;
|
||||||
|
case 0x3:
|
||||||
|
SETUP_IOMUX_PADS(usdhc4_pads);
|
||||||
|
usdhc_cfg[0].esdhc_base = USDHC4_BASE_ADDR;
|
||||||
|
usdhc_cfg[0].sdhc_clk = mxc_get_clock(MXC_ESDHC4_CLK);
|
||||||
|
gd->arch.sdhc_clk = usdhc_cfg[0].sdhc_clk;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return fsl_esdhc_initialize(bd, &usdhc_cfg[0]);
|
||||||
|
}
|
||||||
|
|
||||||
|
void board_init_f(ulong dummy)
|
||||||
|
{
|
||||||
|
/* setup AIPS and disable watchdog */
|
||||||
|
arch_cpu_init();
|
||||||
|
|
||||||
|
ccgr_init();
|
||||||
|
gpr_init();
|
||||||
|
|
||||||
|
/* setup GP timer */
|
||||||
|
timer_init();
|
||||||
|
|
||||||
|
setup_iomux_sd();
|
||||||
|
setup_iomux_uart();
|
||||||
|
setup_iomux_usb();
|
||||||
|
|
||||||
|
/* UART clocks enabled and gd valid - init serial console */
|
||||||
|
preloader_console_init();
|
||||||
|
|
||||||
|
/* DDR initialization */
|
||||||
|
spl_dram_init();
|
||||||
|
|
||||||
|
/* Clear the BSS. */
|
||||||
|
memset(__bss_start, 0, __bss_end - __bss_start);
|
||||||
|
|
||||||
|
/* load/boot image from boot device */
|
||||||
|
board_init_r(NULL, 0);
|
||||||
|
}
|
@@ -428,7 +428,7 @@ static const struct mx6dq_iomux_ddr_regs mx6q_ddr_ioregs = {
|
|||||||
.dram_sdclk_1 = 0x00020030,
|
.dram_sdclk_1 = 0x00020030,
|
||||||
.dram_cas = 0x00020030,
|
.dram_cas = 0x00020030,
|
||||||
.dram_ras = 0x00020030,
|
.dram_ras = 0x00020030,
|
||||||
.dram_reset = 0x00020030,
|
.dram_reset = 0x000c0030,
|
||||||
.dram_sdcke0 = 0x00003000,
|
.dram_sdcke0 = 0x00003000,
|
||||||
.dram_sdcke1 = 0x00003000,
|
.dram_sdcke1 = 0x00003000,
|
||||||
.dram_sdba2 = 0x00000000,
|
.dram_sdba2 = 0x00000000,
|
||||||
@@ -584,7 +584,6 @@ static struct mx6_ddr3_cfg mem_ddr_2g = {
|
|||||||
.trcd = 1375,
|
.trcd = 1375,
|
||||||
.trcmin = 4875,
|
.trcmin = 4875,
|
||||||
.trasmin = 3500,
|
.trasmin = 3500,
|
||||||
.SRT = 1,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct mx6_ddr3_cfg mem_ddr_4g = {
|
static struct mx6_ddr3_cfg mem_ddr_4g = {
|
||||||
|
@@ -28,7 +28,6 @@
|
|||||||
#include <miiphy.h>
|
#include <miiphy.h>
|
||||||
#include <netdev.h>
|
#include <netdev.h>
|
||||||
#include <phy.h>
|
#include <phy.h>
|
||||||
#include <input.h>
|
|
||||||
#include <i2c.h>
|
#include <i2c.h>
|
||||||
#include <power/pmic.h>
|
#include <power/pmic.h>
|
||||||
#include <power/pfuze100_pmic.h>
|
#include <power/pfuze100_pmic.h>
|
||||||
|
@@ -23,6 +23,8 @@
|
|||||||
#include <power/pmic.h>
|
#include <power/pmic.h>
|
||||||
#include <power/pfuze3000_pmic.h>
|
#include <power/pfuze3000_pmic.h>
|
||||||
#include "../freescale/common/pfuze.h"
|
#include "../freescale/common/pfuze.h"
|
||||||
|
#include <asm/setup.h>
|
||||||
|
#include <asm/bootm.h>
|
||||||
|
|
||||||
DECLARE_GLOBAL_DATA_PTR;
|
DECLARE_GLOBAL_DATA_PTR;
|
||||||
|
|
||||||
@@ -186,6 +188,10 @@ int board_usb_phy_mode(int port)
|
|||||||
int board_late_init(void)
|
int board_late_init(void)
|
||||||
{
|
{
|
||||||
struct wdog_regs *wdog = (struct wdog_regs *)WDOG1_BASE_ADDR;
|
struct wdog_regs *wdog = (struct wdog_regs *)WDOG1_BASE_ADDR;
|
||||||
|
#ifdef CONFIG_SERIAL_TAG
|
||||||
|
struct tag_serialnr serialnr;
|
||||||
|
char serial_string[0x20];
|
||||||
|
#endif
|
||||||
|
|
||||||
imx_iomux_v3_setup_multiple_pads(wdog_pads, ARRAY_SIZE(wdog_pads));
|
imx_iomux_v3_setup_multiple_pads(wdog_pads, ARRAY_SIZE(wdog_pads));
|
||||||
|
|
||||||
@@ -197,5 +203,13 @@ int board_late_init(void)
|
|||||||
*/
|
*/
|
||||||
clrsetbits_le16(&wdog->wcr, 0, 0x10);
|
clrsetbits_le16(&wdog->wcr, 0, 0x10);
|
||||||
|
|
||||||
|
#ifdef CONFIG_SERIAL_TAG
|
||||||
|
/* Set serial# standard environment variable based on OTP settings */
|
||||||
|
get_board_serial(&serialnr);
|
||||||
|
snprintf(serial_string, sizeof(serial_string), "WaRP7-0x%08x%08x",
|
||||||
|
serialnr.low, serialnr.high);
|
||||||
|
env_set("serial#", serial_string);
|
||||||
|
#endif
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@@ -33,6 +33,7 @@ CONFIG_DWC_AHSATA=y
|
|||||||
CONFIG_FSL_ESDHC=y
|
CONFIG_FSL_ESDHC=y
|
||||||
CONFIG_SPI_FLASH=y
|
CONFIG_SPI_FLASH=y
|
||||||
CONFIG_SPI_FLASH_STMICRO=y
|
CONFIG_SPI_FLASH_STMICRO=y
|
||||||
|
CONFIG_SPI_FLASH_WINBOND=y
|
||||||
CONFIG_PHYLIB=y
|
CONFIG_PHYLIB=y
|
||||||
CONFIG_MXC_SPI=y
|
CONFIG_MXC_SPI=y
|
||||||
CONFIG_USB=y
|
CONFIG_USB=y
|
||||||
|
@@ -32,6 +32,7 @@ CONFIG_DWC_AHSATA=y
|
|||||||
CONFIG_FSL_ESDHC=y
|
CONFIG_FSL_ESDHC=y
|
||||||
CONFIG_SPI_FLASH=y
|
CONFIG_SPI_FLASH=y
|
||||||
CONFIG_SPI_FLASH_STMICRO=y
|
CONFIG_SPI_FLASH_STMICRO=y
|
||||||
|
CONFIG_SPI_FLASH_WINBOND=y
|
||||||
CONFIG_PHYLIB=y
|
CONFIG_PHYLIB=y
|
||||||
CONFIG_MXC_SPI=y
|
CONFIG_MXC_SPI=y
|
||||||
CONFIG_USB=y
|
CONFIG_USB=y
|
||||||
|
@@ -1,19 +0,0 @@
|
|||||||
CONFIG_ARM=y
|
|
||||||
CONFIG_TARGET_IMX31_PHYCORE=y
|
|
||||||
CONFIG_SYS_TEXT_BASE=0xA0000000
|
|
||||||
CONFIG_BOOTDELAY=3
|
|
||||||
# CONFIG_AUTO_COMPLETE is not set
|
|
||||||
CONFIG_SYS_PROMPT="uboot> "
|
|
||||||
CONFIG_CMD_IMLS=y
|
|
||||||
CONFIG_CMD_EEPROM=y
|
|
||||||
CONFIG_CMD_I2C=y
|
|
||||||
# CONFIG_CMD_SETEXPR is not set
|
|
||||||
CONFIG_CMD_PING=y
|
|
||||||
CONFIG_MTDPARTS_DEFAULT="mtdparts=physmap-flash.0:128k(uboot)ro,1536k(kernel),-(root)"
|
|
||||||
CONFIG_ENV_IS_IN_EEPROM=y
|
|
||||||
# CONFIG_MMC is not set
|
|
||||||
CONFIG_MTD_NOR_FLASH=y
|
|
||||||
CONFIG_NETDEVICES=y
|
|
||||||
CONFIG_SMC911X=y
|
|
||||||
CONFIG_SMC911X_BASE=0xa8000000
|
|
||||||
CONFIG_SMC911X_32_BIT=y
|
|
@@ -1,25 +0,0 @@
|
|||||||
CONFIG_ARM=y
|
|
||||||
CONFIG_TARGET_IMX31_PHYCORE_EET=y
|
|
||||||
CONFIG_SYS_TEXT_BASE=0xA0000000
|
|
||||||
CONFIG_BOOTDELAY=3
|
|
||||||
# CONFIG_CONSOLE_MUX is not set
|
|
||||||
CONFIG_SYS_CONSOLE_IS_IN_ENV=y
|
|
||||||
# CONFIG_AUTO_COMPLETE is not set
|
|
||||||
CONFIG_CMD_IMLS=y
|
|
||||||
CONFIG_CMD_EEPROM=y
|
|
||||||
CONFIG_CMD_I2C=y
|
|
||||||
CONFIG_CMD_SPI=y
|
|
||||||
# CONFIG_CMD_SETEXPR is not set
|
|
||||||
CONFIG_CMD_PING=y
|
|
||||||
CONFIG_CMD_BMP=y
|
|
||||||
CONFIG_MTDPARTS_DEFAULT="mtdparts=physmap-flash.0:128k(uboot)ro,1536k(kernel),-(root)"
|
|
||||||
CONFIG_ENV_IS_IN_EEPROM=y
|
|
||||||
CONFIG_MXC_GPIO=y
|
|
||||||
# CONFIG_MMC is not set
|
|
||||||
CONFIG_MTD_NOR_FLASH=y
|
|
||||||
CONFIG_NETDEVICES=y
|
|
||||||
CONFIG_SMC911X=y
|
|
||||||
CONFIG_SMC911X_BASE=0xa8000000
|
|
||||||
CONFIG_SMC911X_32_BIT=y
|
|
||||||
CONFIG_MXC_SPI=y
|
|
||||||
CONFIG_VIDEO=y
|
|
42
configs/kp_imx6q_tpc_defconfig
Normal file
42
configs/kp_imx6q_tpc_defconfig
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
CONFIG_ARM=y
|
||||||
|
CONFIG_ARCH_MX6=y
|
||||||
|
CONFIG_SYS_TEXT_BASE=0x17800000
|
||||||
|
CONFIG_SPL_GPIO_SUPPORT=y
|
||||||
|
CONFIG_SPL_LIBCOMMON_SUPPORT=y
|
||||||
|
CONFIG_SPL_LIBGENERIC_SUPPORT=y
|
||||||
|
CONFIG_MX6_DDRCAL=y
|
||||||
|
CONFIG_TARGET_KP_IMX6Q_TPC=y
|
||||||
|
CONFIG_SPL_MMC_SUPPORT=y
|
||||||
|
CONFIG_SPL_SERIAL_SUPPORT=y
|
||||||
|
CONFIG_SPL_WATCHDOG_SUPPORT=y
|
||||||
|
CONFIG_DISTRO_DEFAULTS=y
|
||||||
|
CONFIG_FIT=y
|
||||||
|
CONFIG_SYS_EXTRA_OPTIONS="IMX_CONFIG=arch/arm/mach-imx/spl_sd.cfg"
|
||||||
|
CONFIG_BOOTDELAY=3
|
||||||
|
# CONFIG_USE_BOOTCOMMAND is not set
|
||||||
|
CONFIG_SYS_CONSOLE_OVERWRITE_ROUTINE=y
|
||||||
|
CONFIG_SPL=y
|
||||||
|
CONFIG_SPL_RAW_IMAGE_SUPPORT=y
|
||||||
|
CONFIG_AUTOBOOT_KEYED=y
|
||||||
|
CONFIG_AUTOBOOT_STOP_STR="."
|
||||||
|
# CONFIG_CMD_BOOTEFI_HELLO_COMPILE is not set
|
||||||
|
# CONFIG_CMD_ELF is not set
|
||||||
|
# CONFIG_CMD_FLASH is not set
|
||||||
|
CONFIG_CMD_GPIO=y
|
||||||
|
CONFIG_CMD_I2C=y
|
||||||
|
CONFIG_CMD_MMC=y
|
||||||
|
CONFIG_CMD_USB=y
|
||||||
|
CONFIG_CMD_CACHE=y
|
||||||
|
CONFIG_CMD_TIME=y
|
||||||
|
CONFIG_CMD_EXT4_WRITE=y
|
||||||
|
# CONFIG_ISO_PARTITION is not set
|
||||||
|
# CONFIG_EFI_PARTITION is not set
|
||||||
|
CONFIG_ENV_IS_IN_MMC=y
|
||||||
|
CONFIG_PHYLIB=y
|
||||||
|
CONFIG_PHY_ATHEROS=y
|
||||||
|
CONFIG_NETDEVICES=y
|
||||||
|
CONFIG_FEC_MXC=y
|
||||||
|
CONFIG_IMX_THERMAL=y
|
||||||
|
CONFIG_USB=y
|
||||||
|
CONFIG_USB_STORAGE=y
|
||||||
|
CONFIG_OF_LIBFDT=y
|
@@ -1,15 +0,0 @@
|
|||||||
CONFIG_ARM=y
|
|
||||||
CONFIG_TARGET_MX31ADS=y
|
|
||||||
CONFIG_SYS_TEXT_BASE=0xA0000000
|
|
||||||
# CONFIG_AUTO_COMPLETE is not set
|
|
||||||
CONFIG_CMD_IMLS=y
|
|
||||||
CONFIG_CMD_SPI=y
|
|
||||||
# CONFIG_CMD_SETEXPR is not set
|
|
||||||
CONFIG_CMD_DHCP=y
|
|
||||||
CONFIG_CMD_PING=y
|
|
||||||
CONFIG_CMD_DATE=y
|
|
||||||
CONFIG_ENV_IS_IN_FLASH=y
|
|
||||||
CONFIG_MXC_GPIO=y
|
|
||||||
# CONFIG_MMC is not set
|
|
||||||
CONFIG_MTD_NOR_FLASH=y
|
|
||||||
CONFIG_MXC_SPI=y
|
|
@@ -23,6 +23,7 @@ CONFIG_CMD_EXT4=y
|
|||||||
CONFIG_CMD_EXT4_WRITE=y
|
CONFIG_CMD_EXT4_WRITE=y
|
||||||
CONFIG_CMD_FAT=y
|
CONFIG_CMD_FAT=y
|
||||||
CONFIG_FSL_ESDHC=y
|
CONFIG_FSL_ESDHC=y
|
||||||
|
CONFIG_CMD_FS_GENERIC=y
|
||||||
CONFIG_PHYLIB=y
|
CONFIG_PHYLIB=y
|
||||||
CONFIG_USB=y
|
CONFIG_USB=y
|
||||||
CONFIG_USB_EHCI_HCD=y
|
CONFIG_USB_EHCI_HCD=y
|
||||||
|
@@ -33,12 +33,12 @@ Image Ver: 2 (i.MX53/6 compatible)
|
|||||||
Data Size: 327680 Bytes = 320.00 kB = 0.31 MB
|
Data Size: 327680 Bytes = 320.00 kB = 0.31 MB
|
||||||
Load Address: 177ff420
|
Load Address: 177ff420
|
||||||
Entry Point: 17800000
|
Entry Point: 17800000
|
||||||
HAB Blocks: 177ff400 00000000 0004dc00
|
HAB Blocks: 0x177ff400 0x00000000 0x0004dc00
|
||||||
^^^^^^^^ ^^^^^^^^ ^^^^^^^^
|
^^^^^^^^^^ ^^^^^^^^^^ ^^^^^^^^^^
|
||||||
| | |
|
| | |
|
||||||
| | -------- (1)
|
| | ----- (1)
|
||||||
| |
|
| |
|
||||||
| ------------------- (2)
|
| ---------------- (2)
|
||||||
|
|
|
|
||||||
--------------------------- (3)
|
--------------------------- (3)
|
||||||
|
|
||||||
@@ -78,7 +78,7 @@ Example Output of the SPL (imximage) creation:
|
|||||||
Data Size: 61440 Bytes = 60.00 kB = 0.06 MB
|
Data Size: 61440 Bytes = 60.00 kB = 0.06 MB
|
||||||
Load Address: 00907420
|
Load Address: 00907420
|
||||||
Entry Point: 00908000
|
Entry Point: 00908000
|
||||||
HAB Blocks: 00907400 00000000 0000cc00
|
HAB Blocks: 0x00907400 0x00000000 0x0000cc00
|
||||||
|
|
||||||
Example Output of the u-boot-ivt.img (firmware_ivt) creation:
|
Example Output of the u-boot-ivt.img (firmware_ivt) creation:
|
||||||
Image Name: U-Boot 2016.11-rc1-31589-g2a4411
|
Image Name: U-Boot 2016.11-rc1-31589-g2a4411
|
||||||
|
@@ -149,13 +149,176 @@ config SYS_I2C_MESON
|
|||||||
both 7-bit and 10-bit addresses.
|
both 7-bit and 10-bit addresses.
|
||||||
|
|
||||||
config SYS_I2C_MXC
|
config SYS_I2C_MXC
|
||||||
bool "NXP i.MX I2C driver"
|
bool "NXP MXC I2C driver"
|
||||||
depends on MX6
|
|
||||||
help
|
help
|
||||||
Add support for the NXP i.MX I2C driver. This supports upto for bus
|
Add support for the NXP I2C driver. This supports upto for bus
|
||||||
channels and operating on standard mode upto 100 kbits/s and fast
|
channels and operating on standard mode upto 100 kbits/s and fast
|
||||||
mode upto 400 kbits/s.
|
mode upto 400 kbits/s.
|
||||||
|
|
||||||
|
if SYS_I2C_MXC
|
||||||
|
config SYS_I2C_MXC_I2C1
|
||||||
|
bool "NXP MXC I2C1"
|
||||||
|
help
|
||||||
|
Add support for NXP MXC I2C Controller 1.
|
||||||
|
Required for SoCs which have I2C MXC controller 1 eg LS1088A, LS2080A
|
||||||
|
|
||||||
|
config SYS_I2C_MXC_I2C2
|
||||||
|
bool "NXP MXC I2C2"
|
||||||
|
help
|
||||||
|
Add support for NXP MXC I2C Controller 2.
|
||||||
|
Required for SoCs which have I2C MXC controller 2 eg LS1088A, LS2080A
|
||||||
|
|
||||||
|
config SYS_I2C_MXC_I2C3
|
||||||
|
bool "NXP MXC I2C3"
|
||||||
|
help
|
||||||
|
Add support for NXP MXC I2C Controller 3.
|
||||||
|
Required for SoCs which have I2C MXC controller 3 eg LS1088A, LS2080A
|
||||||
|
|
||||||
|
config SYS_I2C_MXC_I2C4
|
||||||
|
bool "NXP MXC I2C4"
|
||||||
|
help
|
||||||
|
Add support for NXP MXC I2C Controller 4.
|
||||||
|
Required for SoCs which have I2C MXC controller 4 eg LS1088A, LS2080A
|
||||||
|
|
||||||
|
config SYS_I2C_MXC_I2C5
|
||||||
|
bool "NXP MXC I2C5"
|
||||||
|
help
|
||||||
|
Add support for NXP MXC I2C Controller 5.
|
||||||
|
Required for SoCs which have I2C MXC controller 5 eg LX2160A
|
||||||
|
|
||||||
|
config SYS_I2C_MXC_I2C6
|
||||||
|
bool "NXP MXC I2C6"
|
||||||
|
help
|
||||||
|
Add support for NXP MXC I2C Controller 6.
|
||||||
|
Required for SoCs which have I2C MXC controller 6 eg LX2160A
|
||||||
|
|
||||||
|
config SYS_I2C_MXC_I2C7
|
||||||
|
bool "NXP MXC I2C7"
|
||||||
|
help
|
||||||
|
Add support for NXP MXC I2C Controller 7.
|
||||||
|
Required for SoCs which have I2C MXC controller 7 eg LX2160A
|
||||||
|
|
||||||
|
config SYS_I2C_MXC_I2C8
|
||||||
|
bool "NXP MXC I2C8"
|
||||||
|
help
|
||||||
|
Add support for NXP MXC I2C Controller 8.
|
||||||
|
Required for SoCs which have I2C MXC controller 8 eg LX2160A
|
||||||
|
endif
|
||||||
|
|
||||||
|
if SYS_I2C_MXC_I2C1
|
||||||
|
config SYS_MXC_I2C1_SPEED
|
||||||
|
int "I2C Channel 1 speed"
|
||||||
|
default 40000000 if TARGET_LS2080A_SIMU || TARGET_LS2080A_EMU
|
||||||
|
default 100000
|
||||||
|
help
|
||||||
|
MXC I2C Channel 1 speed
|
||||||
|
|
||||||
|
config SYS_MXC_I2C1_SLAVE
|
||||||
|
int "I2C1 Slave"
|
||||||
|
default 0
|
||||||
|
help
|
||||||
|
MXC I2C1 Slave
|
||||||
|
endif
|
||||||
|
|
||||||
|
if SYS_I2C_MXC_I2C2
|
||||||
|
config SYS_MXC_I2C2_SPEED
|
||||||
|
int "I2C Channel 2 speed"
|
||||||
|
default 40000000 if TARGET_LS2080A_SIMU || TARGET_LS2080A_EMU
|
||||||
|
default 100000
|
||||||
|
help
|
||||||
|
MXC I2C Channel 2 speed
|
||||||
|
|
||||||
|
config SYS_MXC_I2C2_SLAVE
|
||||||
|
int "I2C2 Slave"
|
||||||
|
default 0
|
||||||
|
help
|
||||||
|
MXC I2C2 Slave
|
||||||
|
endif
|
||||||
|
|
||||||
|
if SYS_I2C_MXC_I2C3
|
||||||
|
config SYS_MXC_I2C3_SPEED
|
||||||
|
int "I2C Channel 3 speed"
|
||||||
|
default 100000
|
||||||
|
help
|
||||||
|
MXC I2C Channel 3 speed
|
||||||
|
|
||||||
|
config SYS_MXC_I2C3_SLAVE
|
||||||
|
int "I2C3 Slave"
|
||||||
|
default 0
|
||||||
|
help
|
||||||
|
MXC I2C3 Slave
|
||||||
|
endif
|
||||||
|
|
||||||
|
if SYS_I2C_MXC_I2C4
|
||||||
|
config SYS_MXC_I2C4_SPEED
|
||||||
|
int "I2C Channel 4 speed"
|
||||||
|
default 100000
|
||||||
|
help
|
||||||
|
MXC I2C Channel 4 speed
|
||||||
|
|
||||||
|
config SYS_MXC_I2C4_SLAVE
|
||||||
|
int "I2C4 Slave"
|
||||||
|
default 0
|
||||||
|
help
|
||||||
|
MXC I2C4 Slave
|
||||||
|
endif
|
||||||
|
|
||||||
|
if SYS_I2C_MXC_I2C5
|
||||||
|
config SYS_MXC_I2C5_SPEED
|
||||||
|
int "I2C Channel 5 speed"
|
||||||
|
default 100000
|
||||||
|
help
|
||||||
|
MXC I2C Channel 5 speed
|
||||||
|
|
||||||
|
config SYS_MXC_I2C5_SLAVE
|
||||||
|
int "I2C5 Slave"
|
||||||
|
default 0
|
||||||
|
help
|
||||||
|
MXC I2C5 Slave
|
||||||
|
endif
|
||||||
|
|
||||||
|
if SYS_I2C_MXC_I2C6
|
||||||
|
config SYS_MXC_I2C6_SPEED
|
||||||
|
int "I2C Channel 6 speed"
|
||||||
|
default 100000
|
||||||
|
help
|
||||||
|
MXC I2C Channel 6 speed
|
||||||
|
|
||||||
|
config SYS_MXC_I2C6_SLAVE
|
||||||
|
int "I2C6 Slave"
|
||||||
|
default 0
|
||||||
|
help
|
||||||
|
MXC I2C6 Slave
|
||||||
|
endif
|
||||||
|
|
||||||
|
if SYS_I2C_MXC_I2C7
|
||||||
|
config SYS_MXC_I2C7_SPEED
|
||||||
|
int "I2C Channel 7 speed"
|
||||||
|
default 100000
|
||||||
|
help
|
||||||
|
MXC I2C Channel 7 speed
|
||||||
|
|
||||||
|
config SYS_MXC_I2C7_SLAVE
|
||||||
|
int "I2C7 Slave"
|
||||||
|
default 0
|
||||||
|
help
|
||||||
|
MXC I2C7 Slave
|
||||||
|
endif
|
||||||
|
|
||||||
|
if SYS_I2C_MXC_I2C8
|
||||||
|
config SYS_MXC_I2C8_SPEED
|
||||||
|
int "I2C Channel 8 speed"
|
||||||
|
default 100000
|
||||||
|
help
|
||||||
|
MXC I2C Channel 8 speed
|
||||||
|
|
||||||
|
config SYS_MXC_I2C8_SLAVE
|
||||||
|
int "I2C8 Slave"
|
||||||
|
default 0
|
||||||
|
help
|
||||||
|
MXC I2C8 Slave
|
||||||
|
endif
|
||||||
|
|
||||||
config SYS_I2C_OMAP24XX
|
config SYS_I2C_OMAP24XX
|
||||||
bool "TI OMAP2+ I2C driver"
|
bool "TI OMAP2+ I2C driver"
|
||||||
depends on ARCH_OMAP2PLUS
|
depends on ARCH_OMAP2PLUS
|
||||||
|
@@ -589,6 +589,22 @@ static int bus_i2c_write(struct mxc_i2c_bus *i2c_bus, u8 chip, u32 addr,
|
|||||||
#define I2C4_BASE_ADDR 0
|
#define I2C4_BASE_ADDR 0
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if !defined(I2C5_BASE_ADDR)
|
||||||
|
#define I2C5_BASE_ADDR 0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if !defined(I2C6_BASE_ADDR)
|
||||||
|
#define I2C6_BASE_ADDR 0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if !defined(I2C7_BASE_ADDR)
|
||||||
|
#define I2C7_BASE_ADDR 0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if !defined(I2C8_BASE_ADDR)
|
||||||
|
#define I2C8_BASE_ADDR 0
|
||||||
|
#endif
|
||||||
|
|
||||||
static struct mxc_i2c_bus mxc_i2c_buses[] = {
|
static struct mxc_i2c_bus mxc_i2c_buses[] = {
|
||||||
#if defined(CONFIG_ARCH_LS1021A) || defined(CONFIG_VF610) || \
|
#if defined(CONFIG_ARCH_LS1021A) || defined(CONFIG_VF610) || \
|
||||||
defined(CONFIG_FSL_LAYERSCAPE)
|
defined(CONFIG_FSL_LAYERSCAPE)
|
||||||
@@ -596,11 +612,19 @@ static struct mxc_i2c_bus mxc_i2c_buses[] = {
|
|||||||
{ 1, I2C2_BASE_ADDR, I2C_QUIRK_FLAG },
|
{ 1, I2C2_BASE_ADDR, I2C_QUIRK_FLAG },
|
||||||
{ 2, I2C3_BASE_ADDR, I2C_QUIRK_FLAG },
|
{ 2, I2C3_BASE_ADDR, I2C_QUIRK_FLAG },
|
||||||
{ 3, I2C4_BASE_ADDR, I2C_QUIRK_FLAG },
|
{ 3, I2C4_BASE_ADDR, I2C_QUIRK_FLAG },
|
||||||
|
{ 4, I2C5_BASE_ADDR, I2C_QUIRK_FLAG },
|
||||||
|
{ 5, I2C6_BASE_ADDR, I2C_QUIRK_FLAG },
|
||||||
|
{ 6, I2C7_BASE_ADDR, I2C_QUIRK_FLAG },
|
||||||
|
{ 7, I2C8_BASE_ADDR, I2C_QUIRK_FLAG },
|
||||||
#else
|
#else
|
||||||
{ 0, I2C1_BASE_ADDR, 0 },
|
{ 0, I2C1_BASE_ADDR, 0 },
|
||||||
{ 1, I2C2_BASE_ADDR, 0 },
|
{ 1, I2C2_BASE_ADDR, 0 },
|
||||||
{ 2, I2C3_BASE_ADDR, 0 },
|
{ 2, I2C3_BASE_ADDR, 0 },
|
||||||
{ 3, I2C4_BASE_ADDR, 0 },
|
{ 3, I2C4_BASE_ADDR, 0 },
|
||||||
|
{ 4, I2C5_BASE_ADDR, 0 },
|
||||||
|
{ 5, I2C6_BASE_ADDR, 0 },
|
||||||
|
{ 6, I2C7_BASE_ADDR, 0 },
|
||||||
|
{ 7, I2C8_BASE_ADDR, 0 },
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -738,6 +762,38 @@ U_BOOT_I2C_ADAP_COMPLETE(mxc3, mxc_i2c_init, mxc_i2c_probe,
|
|||||||
CONFIG_SYS_MXC_I2C4_SLAVE, 3)
|
CONFIG_SYS_MXC_I2C4_SLAVE, 3)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef CONFIG_SYS_I2C_MXC_I2C5
|
||||||
|
U_BOOT_I2C_ADAP_COMPLETE(mxc4, mxc_i2c_init, mxc_i2c_probe,
|
||||||
|
mxc_i2c_read, mxc_i2c_write,
|
||||||
|
mxc_i2c_set_bus_speed,
|
||||||
|
CONFIG_SYS_MXC_I2C5_SPEED,
|
||||||
|
CONFIG_SYS_MXC_I2C5_SLAVE, 4)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef CONFIG_SYS_I2C_MXC_I2C6
|
||||||
|
U_BOOT_I2C_ADAP_COMPLETE(mxc5, mxc_i2c_init, mxc_i2c_probe,
|
||||||
|
mxc_i2c_read, mxc_i2c_write,
|
||||||
|
mxc_i2c_set_bus_speed,
|
||||||
|
CONFIG_SYS_MXC_I2C6_SPEED,
|
||||||
|
CONFIG_SYS_MXC_I2C6_SLAVE, 5)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef CONFIG_SYS_I2C_MXC_I2C7
|
||||||
|
U_BOOT_I2C_ADAP_COMPLETE(mxc6, mxc_i2c_init, mxc_i2c_probe,
|
||||||
|
mxc_i2c_read, mxc_i2c_write,
|
||||||
|
mxc_i2c_set_bus_speed,
|
||||||
|
CONFIG_SYS_MXC_I2C7_SPEED,
|
||||||
|
CONFIG_SYS_MXC_I2C7_SLAVE, 6)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef CONFIG_SYS_I2C_MXC_I2C8
|
||||||
|
U_BOOT_I2C_ADAP_COMPLETE(mxc7, mxc_i2c_init, mxc_i2c_probe,
|
||||||
|
mxc_i2c_read, mxc_i2c_write,
|
||||||
|
mxc_i2c_set_bus_speed,
|
||||||
|
CONFIG_SYS_MXC_I2C8_SPEED,
|
||||||
|
CONFIG_SYS_MXC_I2C8_SLAVE, 7)
|
||||||
|
#endif
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
static int mxc_i2c_set_bus_speed(struct udevice *bus, unsigned int speed)
|
static int mxc_i2c_set_bus_speed(struct udevice *bus, unsigned int speed)
|
||||||
|
@@ -30,7 +30,6 @@ obj-$(CONFIG_VIDEO_FSL_DCU_FB) += fsl_dcu_fb.o videomodes.o
|
|||||||
obj-$(CONFIG_PXA_LCD) += pxa_lcd.o
|
obj-$(CONFIG_PXA_LCD) += pxa_lcd.o
|
||||||
obj-$(CONFIG_SCF0403_LCD) += scf0403_lcd.o
|
obj-$(CONFIG_SCF0403_LCD) += scf0403_lcd.o
|
||||||
obj-$(CONFIG_S6E8AX0) += s6e8ax0.o
|
obj-$(CONFIG_S6E8AX0) += s6e8ax0.o
|
||||||
obj-$(CONFIG_S6E63D6) += s6e63d6.o
|
|
||||||
obj-$(CONFIG_LD9040) += ld9040.o
|
obj-$(CONFIG_LD9040) += ld9040.o
|
||||||
obj-$(CONFIG_VIDEO_BCM2835) += bcm2835.o
|
obj-$(CONFIG_VIDEO_BCM2835) += bcm2835.o
|
||||||
obj-$(CONFIG_VIDEO_COREBOOT) += coreboot.o
|
obj-$(CONFIG_VIDEO_COREBOOT) += coreboot.o
|
||||||
|
@@ -1,60 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2009
|
|
||||||
* Guennadi Liakhovetski, DENX Software Engineering, <lg@denx.de>
|
|
||||||
*
|
|
||||||
* SPDX-License-Identifier: GPL-2.0+
|
|
||||||
*/
|
|
||||||
#include <common.h>
|
|
||||||
#include <spi.h>
|
|
||||||
#include <s6e63d6.h>
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Each transfer is performed as:
|
|
||||||
* 1. chip-select active
|
|
||||||
* 2. send 8-bit start code
|
|
||||||
* 3. send 16-bit data
|
|
||||||
* 4. chip-select inactive
|
|
||||||
*/
|
|
||||||
static int send_word(struct s6e63d6 *data, u8 rs, u16 word)
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* The start byte looks like (binary):
|
|
||||||
* 01110<ID><RS><R/W>
|
|
||||||
* RS is 0 for index or 1 for data, and R/W is 0 for write.
|
|
||||||
*/
|
|
||||||
u32 buf8 = 0x70 | data->id | (rs & 2);
|
|
||||||
u32 buf16 = cpu_to_le16(word);
|
|
||||||
u32 buf_in;
|
|
||||||
int err;
|
|
||||||
|
|
||||||
err = spi_xfer(data->slave, 8, &buf8, &buf_in, SPI_XFER_BEGIN);
|
|
||||||
if (err)
|
|
||||||
return err;
|
|
||||||
|
|
||||||
return spi_xfer(data->slave, 16, &buf16, &buf_in, SPI_XFER_END);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Index and param differ in Register Select bit */
|
|
||||||
int s6e63d6_index(struct s6e63d6 *data, u8 idx)
|
|
||||||
{
|
|
||||||
return send_word(data, 0, idx);
|
|
||||||
}
|
|
||||||
|
|
||||||
int s6e63d6_param(struct s6e63d6 *data, u16 param)
|
|
||||||
{
|
|
||||||
return send_word(data, 2, param);
|
|
||||||
}
|
|
||||||
|
|
||||||
int s6e63d6_init(struct s6e63d6 *data)
|
|
||||||
{
|
|
||||||
if (data->id != 0 && data->id != 4) {
|
|
||||||
printf("s6e63d6: invalid ID %u\n", data->id);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
data->slave = spi_setup_slave(data->bus, data->cs, 100000, SPI_MODE_3);
|
|
||||||
if (!data->slave)
|
|
||||||
return 1;
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
@@ -124,6 +124,7 @@
|
|||||||
"swappartitions=" \
|
"swappartitions=" \
|
||||||
"setexpr partnum 3 - ${partnum}\0" \
|
"setexpr partnum 3 - ${partnum}\0" \
|
||||||
"failbootcmd=" \
|
"failbootcmd=" \
|
||||||
|
"bx50_backlight_enable; " \
|
||||||
"msg=\"Monitor failed to start. Try again, or contact GE Service for support.\"; " \
|
"msg=\"Monitor failed to start. Try again, or contact GE Service for support.\"; " \
|
||||||
"echo $msg; " \
|
"echo $msg; " \
|
||||||
"setenv stdout vga; " \
|
"setenv stdout vga; " \
|
||||||
|
@@ -1,155 +0,0 @@
|
|||||||
/*
|
|
||||||
* (C) Copyright 2004
|
|
||||||
* Texas Instruments.
|
|
||||||
* Richard Woodruff <r-woodruff2@ti.com>
|
|
||||||
* Kshitij Gupta <kshitij@ti.com>
|
|
||||||
*
|
|
||||||
* Configuration settings for the phyCORE-i.MX31 board.
|
|
||||||
*
|
|
||||||
* SPDX-License-Identifier: GPL-2.0+
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef __CONFIG_H
|
|
||||||
#define __CONFIG_H
|
|
||||||
|
|
||||||
#include <asm/arch/imx-regs.h>
|
|
||||||
|
|
||||||
/* High Level Configuration Options */
|
|
||||||
#define CONFIG_MX31 /* This is a mx31 */
|
|
||||||
#define CONFIG_MX31_CLK32 32000
|
|
||||||
|
|
||||||
#define CONFIG_CMDLINE_TAG /* enable passing of ATAGs */
|
|
||||||
#define CONFIG_SETUP_MEMORY_TAGS
|
|
||||||
#define CONFIG_INITRD_TAG
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Size of malloc() pool
|
|
||||||
*/
|
|
||||||
#define CONFIG_SYS_MALLOC_LEN (CONFIG_ENV_SIZE + 512 * 1024)
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Hardware drivers
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define CONFIG_SYS_I2C
|
|
||||||
#define CONFIG_SYS_I2C_MXC
|
|
||||||
#define CONFIG_SYS_I2C_MXC_I2C1 /* enable I2C bus 1 */
|
|
||||||
#define CONFIG_SYS_I2C_MXC_I2C2 /* enable I2C bus 2 */
|
|
||||||
#define CONFIG_SYS_I2C_MXC_I2C3 /* enable I2C bus 3 */
|
|
||||||
#define CONFIG_SYS_I2C_CLK_OFFSET I2C2_CLK_OFFSET
|
|
||||||
|
|
||||||
#define CONFIG_MXC_UART
|
|
||||||
#define CONFIG_MXC_UART_BASE UART1_BASE
|
|
||||||
|
|
||||||
/* allow to overwrite serial and ethaddr */
|
|
||||||
#define CONFIG_ENV_OVERWRITE
|
|
||||||
|
|
||||||
/***********************************************************
|
|
||||||
* Command definition
|
|
||||||
***********************************************************/
|
|
||||||
|
|
||||||
#define CONFIG_NETMASK 255.255.255.0
|
|
||||||
#define CONFIG_IPADDR 192.168.23.168
|
|
||||||
#define CONFIG_SERVERIP 192.168.23.2
|
|
||||||
|
|
||||||
#define CONFIG_EXTRA_ENV_SETTINGS \
|
|
||||||
"bootargs_base=setenv bootargs console=ttySMX0,115200\0" \
|
|
||||||
"bootargs_nfs=setenv bootargs $(bootargs) root=/dev/nfs " \
|
|
||||||
"ip=dhcp nfsroot=$(serverip):$(nfsrootfs),v3,tcp\0" \
|
|
||||||
"bootargs_flash=setenv bootargs $(bootargs) " \
|
|
||||||
"root=/dev/mtdblock2 rootfstype=jffs2\0" \
|
|
||||||
"bootargs_mtd=setenv bootargs $(bootargs) $(mtdparts)\0" \
|
|
||||||
"bootcmd=run bootcmd_net\0" \
|
|
||||||
"bootcmd_net=run bootargs_base bootargs_mtd bootargs_nfs;" \
|
|
||||||
"tftpboot 0x80000000 $(uimage);bootm\0" \
|
|
||||||
"bootcmd_flash=run bootargs_base bootargs_mtd bootargs_flash;" \
|
|
||||||
"bootm 0x80000000\0" \
|
|
||||||
"unlock=yes\0" \
|
|
||||||
"mtdparts=" CONFIG_MTDPARTS_DEFAULT "\0" \
|
|
||||||
"prg_uboot=tftpboot 0x80000000 $(uboot);" \
|
|
||||||
"protect off 0xa0000000 +0x20000;" \
|
|
||||||
"erase 0xa0000000 +0x20000;" \
|
|
||||||
"cp.b 0x80000000 0xa0000000 $(filesize)\0" \
|
|
||||||
"prg_kernel=tftpboot 0x80000000 $(uimage);" \
|
|
||||||
"erase 0xa0040000 +0x180000;" \
|
|
||||||
"cp.b 0x80000000 0xa0040000 $(filesize)\0" \
|
|
||||||
"prg_jffs2=tftpboot 0x80000000 $(jffs2);" \
|
|
||||||
"erase 0xa01c0000 0xa1ffffff;" \
|
|
||||||
"cp.b 0x80000000 0xa01c0000 $(filesize)\0" \
|
|
||||||
"videomode=video=ctfb:x:240,y:320,depth:16,mode:0," \
|
|
||||||
"pclk:185925,le:9,ri:17,up:7,lo:10,hs:1,vs:1," \
|
|
||||||
"sync:1241513985,vmode:0\0"
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Miscellaneous configurable options
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define CONFIG_SYS_MEMTEST_START 0 /* memtest works on */
|
|
||||||
#define CONFIG_SYS_MEMTEST_END 0x10000
|
|
||||||
|
|
||||||
#define CONFIG_SYS_LOAD_ADDR 0 /* default load address */
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Physical Memory Map
|
|
||||||
*/
|
|
||||||
#define CONFIG_NR_DRAM_BANKS 1
|
|
||||||
#define PHYS_SDRAM_1 0x80000000
|
|
||||||
#define PHYS_SDRAM_1_SIZE (128 * 1024 * 1024)
|
|
||||||
|
|
||||||
#define CONFIG_SYS_SDRAM_BASE PHYS_SDRAM_1
|
|
||||||
#define CONFIG_SYS_INIT_RAM_ADDR IRAM_BASE_ADDR
|
|
||||||
#define CONFIG_SYS_INIT_RAM_SIZE IRAM_SIZE
|
|
||||||
#define CONFIG_SYS_GBL_DATA_OFFSET (CONFIG_SYS_INIT_RAM_SIZE - \
|
|
||||||
GENERATED_GBL_DATA_SIZE)
|
|
||||||
#define CONFIG_SYS_INIT_SP_ADDR (CONFIG_SYS_INIT_RAM_ADDR + \
|
|
||||||
CONFIG_SYS_GBL_DATA_OFFSET)
|
|
||||||
|
|
||||||
/*
|
|
||||||
* FLASH and environment organization
|
|
||||||
*/
|
|
||||||
#define CONFIG_SYS_FLASH_BASE 0xa0000000
|
|
||||||
#define CONFIG_SYS_MAX_FLASH_BANKS 1 /* max # of memory banks */
|
|
||||||
#define CONFIG_SYS_MAX_FLASH_SECT 259 /* max # of sectors/chip */
|
|
||||||
/* Monitor at beginning of flash */
|
|
||||||
#define CONFIG_SYS_MONITOR_BASE CONFIG_SYS_FLASH_BASE
|
|
||||||
|
|
||||||
#define CONFIG_ENV_OFFSET 0x00 /* env. starts here */
|
|
||||||
#define CONFIG_ENV_SIZE 4096
|
|
||||||
#define CONFIG_SYS_I2C_EEPROM_ADDR 0x52
|
|
||||||
#define CONFIG_SYS_EEPROM_PAGE_WRITE_BITS 5 /* 5 bits = 32 octets */
|
|
||||||
#define CONFIG_SYS_EEPROM_PAGE_WRITE_DELAY_MS 10 /* 10 ms delay */
|
|
||||||
#define CONFIG_SYS_I2C_EEPROM_ADDR_LEN 2 /* byte addr. lenght */
|
|
||||||
|
|
||||||
/*
|
|
||||||
* CFI FLASH driver setup
|
|
||||||
*/
|
|
||||||
#define CONFIG_SYS_FLASH_CFI /* Flash memory is CFI compliant */
|
|
||||||
#define CONFIG_FLASH_CFI_DRIVER /* Use drivers/mtd/cfi_flash.c */
|
|
||||||
#define CONFIG_SYS_FLASH_USE_BUFFER_WRITE /* buffered writes (~10x faster) */
|
|
||||||
#define CONFIG_SYS_FLASH_PROTECTION /* Use hardware sector protection */
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Timeout for Flash Erase and Flash Write
|
|
||||||
* timeout values are in ticks
|
|
||||||
*/
|
|
||||||
#define CONFIG_SYS_FLASH_ERASE_TOUT (100*CONFIG_SYS_HZ)
|
|
||||||
#define CONFIG_SYS_FLASH_WRITE_TOUT (100*CONFIG_SYS_HZ)
|
|
||||||
|
|
||||||
/*
|
|
||||||
* JFFS2 partitions
|
|
||||||
*/
|
|
||||||
#define CONFIG_JFFS2_DEV "nor0"
|
|
||||||
|
|
||||||
/* EET platform additions */
|
|
||||||
#ifdef CONFIG_TARGET_IMX31_PHYCORE_EET
|
|
||||||
#define CONFIG_HARD_SPI
|
|
||||||
|
|
||||||
#define CONFIG_S6E63D6
|
|
||||||
|
|
||||||
#define CONFIG_VIDEO_MX3
|
|
||||||
#define CONFIG_VIDEO_LOGO
|
|
||||||
#define CONFIG_SPLASH_SCREEN
|
|
||||||
#define CONFIG_BMP_16BPP
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif /* __CONFIG_H */
|
|
141
include/configs/kp_imx6q_tpc.h
Normal file
141
include/configs/kp_imx6q_tpc.h
Normal file
@@ -0,0 +1,141 @@
|
|||||||
|
/*
|
||||||
|
* K+P iMX6Q KP_IMX6Q_TPC board configuration
|
||||||
|
*
|
||||||
|
* Copyright (C) 2018 Lukasz Majewski <lukma@denx.de>
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: GPL-2.0+
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __KP_IMX6Q_TPC_IMX6_CONFIG_H_
|
||||||
|
#define __KP_IMX6Q_TPC_IMX6_CONFIG_H_
|
||||||
|
|
||||||
|
#include <asm/arch/imx-regs.h>
|
||||||
|
|
||||||
|
#include "mx6_common.h"
|
||||||
|
|
||||||
|
/* SPL */
|
||||||
|
#include "imx6_spl.h" /* common IMX6 SPL configuration */
|
||||||
|
|
||||||
|
/* Miscellaneous configurable options */
|
||||||
|
#define CONFIG_CMDLINE_TAG
|
||||||
|
#define CONFIG_SETUP_MEMORY_TAGS
|
||||||
|
#define CONFIG_INITRD_TAG
|
||||||
|
#define CONFIG_REVISION_TAG
|
||||||
|
|
||||||
|
#define CONFIG_BOUNCE_BUFFER
|
||||||
|
|
||||||
|
/* Size of malloc() pool */
|
||||||
|
#define CONFIG_SYS_MALLOC_LEN (4 * SZ_1M)
|
||||||
|
|
||||||
|
/* FEC ethernet */
|
||||||
|
#define CONFIG_MII
|
||||||
|
#define IMX_FEC_BASE ENET_BASE_ADDR
|
||||||
|
#define CONFIG_FEC_XCV_TYPE RGMII
|
||||||
|
#define CONFIG_ETHPRIME "FEC"
|
||||||
|
#define CONFIG_FEC_MXC_PHYADDR 0
|
||||||
|
#define CONFIG_ARP_TIMEOUT 200UL
|
||||||
|
|
||||||
|
/* Fuses */
|
||||||
|
#ifdef CONFIG_CMD_FUSE
|
||||||
|
#define CONFIG_MXC_OCOTP
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* I2C Configs */
|
||||||
|
#define CONFIG_SYS_I2C
|
||||||
|
#define CONFIG_SYS_I2C_MXC
|
||||||
|
#define CONFIG_SYS_I2C_MXC_I2C1 /* enable I2C bus 1 */
|
||||||
|
#define CONFIG_SYS_I2C_MXC_I2C2 /* enable I2C bus 2 */
|
||||||
|
#define CONFIG_SYS_I2C_SPEED 100000
|
||||||
|
|
||||||
|
/* MMC Configs */
|
||||||
|
#define CONFIG_FSL_ESDHC
|
||||||
|
#define CONFIG_FSL_USDHC
|
||||||
|
#define CONFIG_SYS_FSL_ESDHC_ADDR 0
|
||||||
|
#define CONFIG_SYS_FSL_USDHC_NUM 2
|
||||||
|
#define CONFIG_SYS_MMC_ENV_DEV 1 /* 0 = SDHC2, 1 = SDHC4 (eMMC) */
|
||||||
|
|
||||||
|
/* UART */
|
||||||
|
#define CONFIG_MXC_UART
|
||||||
|
#define CONFIG_MXC_UART_BASE UART1_BASE
|
||||||
|
#define CONFIG_CONS_INDEX 1
|
||||||
|
#define CONFIG_BAUDRATE 115200
|
||||||
|
|
||||||
|
/* USB Configs */
|
||||||
|
#ifdef CONFIG_CMD_USB
|
||||||
|
#define CONFIG_EHCI_HCD_INIT_AFTER_RESET
|
||||||
|
#define CONFIG_USB_HOST_ETHER
|
||||||
|
#define CONFIG_USB_ETHER_ASIX
|
||||||
|
#define CONFIG_MXC_USB_PORTSC (PORT_PTS_UTMI | PORT_PTS_PTW)
|
||||||
|
#define CONFIG_MXC_USB_FLAGS 0
|
||||||
|
#define CONFIG_USB_MAX_CONTROLLER_COUNT 2 /* Enabled USB controller number */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Watchdog */
|
||||||
|
#define CONFIG_HW_WATCHDOG
|
||||||
|
#define CONFIG_IMX_WATCHDOG
|
||||||
|
#define CONFIG_WATCHDOG_TIMEOUT_MSECS 60000
|
||||||
|
|
||||||
|
/* allow to overwrite serial and ethaddr */
|
||||||
|
#define CONFIG_ENV_OVERWRITE
|
||||||
|
|
||||||
|
#define CONFIG_LOADADDR 0x12000000
|
||||||
|
#define CONFIG_SYS_LOAD_ADDR CONFIG_LOADADDR
|
||||||
|
|
||||||
|
#ifndef CONFIG_SPL_BUILD
|
||||||
|
#define CONFIG_EXTRA_ENV_SETTINGS \
|
||||||
|
"console=ttymxc0,115200\0" \
|
||||||
|
"fdt_addr=0x18000000\0" \
|
||||||
|
"fdt_high=0xffffffff\0" \
|
||||||
|
"initrd_high=0xffffffff\0" \
|
||||||
|
"kernel_addr_r=0x10008000\0" \
|
||||||
|
"fdt_addr_r=0x13000000\0" \
|
||||||
|
"ramdisk_addr_r=0x18000000\0" \
|
||||||
|
"scriptaddr=0x14000000\0" \
|
||||||
|
"kernel_file=fitImage\0"\
|
||||||
|
"rdinit=/sbin/init\0" \
|
||||||
|
"addinitrd=setenv bootargs ${bootargs} rdinit=${rdinit} ${debug} \0" \
|
||||||
|
"fit_config=mx6q_tpc70_conf\0" \
|
||||||
|
"upd_image=st.4k\0" \
|
||||||
|
"updargs=setenv bootargs console=${console} ${smp}"\
|
||||||
|
"rdinit=${rdinit} ${debug} ${displayargs}\0" \
|
||||||
|
"loadusb=usb start; " \
|
||||||
|
"fatload usb 0 ${loadaddr} ${upd_image}\0" \
|
||||||
|
"usbupd=echo Booting update from usb ...; " \
|
||||||
|
"setenv bootargs; " \
|
||||||
|
"run updargs; " \
|
||||||
|
"run loadusb; " \
|
||||||
|
"bootm ${loadaddr}#${fit_config}\0" \
|
||||||
|
BOOTENV
|
||||||
|
|
||||||
|
#define CONFIG_BOOTCOMMAND "run usbupd; run distro_bootcmd"
|
||||||
|
|
||||||
|
#define BOOT_TARGET_DEVICES(func) \
|
||||||
|
func(MMC, mmc, 0) \
|
||||||
|
func(MMC, mmc, 1) \
|
||||||
|
func(USB, usb, 0) \
|
||||||
|
func(DHCP, dhcp, na)
|
||||||
|
|
||||||
|
#include <config_distro_bootcmd.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Physical Memory Map */
|
||||||
|
#define CONFIG_NR_DRAM_BANKS 1
|
||||||
|
#define PHYS_SDRAM MMDC0_ARB_BASE_ADDR
|
||||||
|
|
||||||
|
#define CONFIG_SYS_SDRAM_BASE PHYS_SDRAM
|
||||||
|
#define CONFIG_SYS_INIT_RAM_ADDR IRAM_BASE_ADDR
|
||||||
|
#define CONFIG_SYS_INIT_RAM_SIZE IRAM_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)
|
||||||
|
|
||||||
|
/* Environment */
|
||||||
|
#define CONFIG_ENV_SIZE (SZ_8K)
|
||||||
|
#define CONFIG_ENV_OFFSET 0x100000
|
||||||
|
#define CONFIG_ENV_OFFSET_REDUND (CONFIG_ENV_OFFSET + CONFIG_ENV_SIZE)
|
||||||
|
#define CONFIG_SYS_REDUNDAND_ENVIRONMENT
|
||||||
|
|
||||||
|
#endif /* __KP_IMX6Q_TPC_IMX6_CONFIG_H_ */
|
@@ -75,9 +75,6 @@
|
|||||||
|
|
||||||
/* I2C */
|
/* I2C */
|
||||||
#define CONFIG_SYS_I2C
|
#define CONFIG_SYS_I2C
|
||||||
#define CONFIG_SYS_I2C_MXC
|
|
||||||
#define CONFIG_SYS_I2C_MXC_I2C1 /* enable I2C bus 1 */
|
|
||||||
#define CONFIG_SYS_I2C_MXC_I2C2 /* enable I2C bus 2 */
|
|
||||||
|
|
||||||
#define CONFIG_SYS_NS16550_SERIAL
|
#define CONFIG_SYS_NS16550_SERIAL
|
||||||
#define CONFIG_SYS_NS16550_REG_SIZE 1
|
#define CONFIG_SYS_NS16550_REG_SIZE 1
|
||||||
|
@@ -147,11 +147,6 @@
|
|||||||
|
|
||||||
/* I2C */
|
/* I2C */
|
||||||
#define CONFIG_SYS_I2C
|
#define CONFIG_SYS_I2C
|
||||||
#define CONFIG_SYS_I2C_MXC
|
|
||||||
#define CONFIG_SYS_I2C_MXC_I2C1
|
|
||||||
#define CONFIG_SYS_I2C_MXC_I2C2
|
|
||||||
#define CONFIG_SYS_I2C_MXC_I2C3
|
|
||||||
#define CONFIG_SYS_I2C_MXC_I2C4
|
|
||||||
|
|
||||||
/* PCIe */
|
/* PCIe */
|
||||||
#ifndef SPL_NO_PCIE
|
#ifndef SPL_NO_PCIE
|
||||||
|
@@ -125,11 +125,6 @@
|
|||||||
|
|
||||||
/* I2C */
|
/* I2C */
|
||||||
#define CONFIG_SYS_I2C
|
#define CONFIG_SYS_I2C
|
||||||
#define CONFIG_SYS_I2C_MXC
|
|
||||||
#define CONFIG_SYS_I2C_MXC_I2C1
|
|
||||||
#define CONFIG_SYS_I2C_MXC_I2C2
|
|
||||||
#define CONFIG_SYS_I2C_MXC_I2C3
|
|
||||||
#define CONFIG_SYS_I2C_MXC_I2C4
|
|
||||||
|
|
||||||
/* PCIe */
|
/* PCIe */
|
||||||
#define CONFIG_PCIE1 /* PCIE controller 1 */
|
#define CONFIG_PCIE1 /* PCIE controller 1 */
|
||||||
|
@@ -67,11 +67,6 @@
|
|||||||
|
|
||||||
/* I2C */
|
/* I2C */
|
||||||
#define CONFIG_SYS_I2C
|
#define CONFIG_SYS_I2C
|
||||||
#define CONFIG_SYS_I2C_MXC
|
|
||||||
#define CONFIG_SYS_I2C_MXC_I2C1 /* enable I2C bus 1 */
|
|
||||||
#define CONFIG_SYS_I2C_MXC_I2C2 /* enable I2C bus 2 */
|
|
||||||
#define CONFIG_SYS_I2C_MXC_I2C3 /* enable I2C bus 3 */
|
|
||||||
#define CONFIG_SYS_I2C_MXC_I2C4 /* enable I2C bus 4 */
|
|
||||||
|
|
||||||
/* Serial Port */
|
/* Serial Port */
|
||||||
#define CONFIG_SYS_NS16550_SERIAL
|
#define CONFIG_SYS_NS16550_SERIAL
|
||||||
|
@@ -77,11 +77,6 @@
|
|||||||
|
|
||||||
/* I2C */
|
/* I2C */
|
||||||
#define CONFIG_SYS_I2C
|
#define CONFIG_SYS_I2C
|
||||||
#define CONFIG_SYS_I2C_MXC
|
|
||||||
#define CONFIG_SYS_I2C_MXC_I2C1 /* enable I2C bus 1 */
|
|
||||||
#define CONFIG_SYS_I2C_MXC_I2C2 /* enable I2C bus 2 */
|
|
||||||
#define CONFIG_SYS_I2C_MXC_I2C3 /* enable I2C bus 3 */
|
|
||||||
#define CONFIG_SYS_I2C_MXC_I2C4 /* enable I2C bus 4 */
|
|
||||||
|
|
||||||
/* Serial Port */
|
/* Serial Port */
|
||||||
#define CONFIG_SYS_NS16550_SERIAL
|
#define CONFIG_SYS_NS16550_SERIAL
|
||||||
|
@@ -12,9 +12,6 @@
|
|||||||
#define CONFIG_SYS_CLK_FREQ 100000000
|
#define CONFIG_SYS_CLK_FREQ 100000000
|
||||||
#define CONFIG_DDR_CLK_FREQ 133333333
|
#define CONFIG_DDR_CLK_FREQ 133333333
|
||||||
|
|
||||||
#define CONFIG_SYS_MXC_I2C1_SPEED 40000000
|
|
||||||
#define CONFIG_SYS_MXC_I2C2_SPEED 40000000
|
|
||||||
|
|
||||||
#define CONFIG_DDR_SPD
|
#define CONFIG_DDR_SPD
|
||||||
#define CONFIG_SYS_FSL_DDR_EMU /* Support emulator */
|
#define CONFIG_SYS_FSL_DDR_EMU /* Support emulator */
|
||||||
#define SPD_EEPROM_ADDRESS1 0x51
|
#define SPD_EEPROM_ADDRESS1 0x51
|
||||||
|
@@ -12,9 +12,6 @@
|
|||||||
#define CONFIG_SYS_CLK_FREQ 100000000
|
#define CONFIG_SYS_CLK_FREQ 100000000
|
||||||
#define CONFIG_DDR_CLK_FREQ 133333333
|
#define CONFIG_DDR_CLK_FREQ 133333333
|
||||||
|
|
||||||
#define CONFIG_SYS_MXC_I2C1_SPEED 40000000
|
|
||||||
#define CONFIG_SYS_MXC_I2C2_SPEED 40000000
|
|
||||||
|
|
||||||
#define CONFIG_DIMM_SLOTS_PER_CTLR 1
|
#define CONFIG_DIMM_SLOTS_PER_CTLR 1
|
||||||
#define CONFIG_CHIP_SELECTS_PER_CTRL 4
|
#define CONFIG_CHIP_SELECTS_PER_CTRL 4
|
||||||
#ifdef CONFIG_SYS_FSL_HAS_DP_DDR
|
#ifdef CONFIG_SYS_FSL_HAS_DP_DDR
|
||||||
|
@@ -1,144 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2008, Guennadi Liakhovetski <lg@denx.de>
|
|
||||||
*
|
|
||||||
* Configuration settings for the MX31ADS Freescale board.
|
|
||||||
*
|
|
||||||
* SPDX-License-Identifier: GPL-2.0+
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef __CONFIG_H
|
|
||||||
#define __CONFIG_H
|
|
||||||
|
|
||||||
#include <asm/arch/imx-regs.h>
|
|
||||||
|
|
||||||
/* High Level Configuration Options */
|
|
||||||
#define CONFIG_MX31 1 /* This is a mx31 */
|
|
||||||
|
|
||||||
#define CONFIG_MACH_TYPE MACH_TYPE_MX31ADS
|
|
||||||
|
|
||||||
#define CONFIG_CMDLINE_TAG 1 /* enable passing of ATAGs */
|
|
||||||
#define CONFIG_SETUP_MEMORY_TAGS 1
|
|
||||||
#define CONFIG_INITRD_TAG 1
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Size of malloc() pool
|
|
||||||
*/
|
|
||||||
#define CONFIG_SYS_MALLOC_LEN (CONFIG_ENV_SIZE + 128 * 1024)
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Hardware drivers
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define CONFIG_MXC_UART
|
|
||||||
#define CONFIG_MXC_UART_BASE UART1_BASE
|
|
||||||
|
|
||||||
#define CONFIG_HARD_SPI 1
|
|
||||||
#define CONFIG_DEFAULT_SPI_BUS 1
|
|
||||||
#define CONFIG_DEFAULT_SPI_MODE (SPI_MODE_0 | SPI_CS_HIGH)
|
|
||||||
|
|
||||||
/* PMIC Controller */
|
|
||||||
#define CONFIG_POWER
|
|
||||||
#define CONFIG_POWER_SPI
|
|
||||||
#define CONFIG_POWER_FSL
|
|
||||||
#define CONFIG_FSL_PMIC_BUS 1
|
|
||||||
#define CONFIG_FSL_PMIC_CS 0
|
|
||||||
#define CONFIG_FSL_PMIC_CLK 1000000
|
|
||||||
#define CONFIG_FSL_PMIC_MODE (SPI_MODE_0 | SPI_CS_HIGH)
|
|
||||||
#define CONFIG_FSL_PMIC_BITLEN 32
|
|
||||||
#define CONFIG_RTC_MC13XXX
|
|
||||||
|
|
||||||
/* allow to overwrite serial and ethaddr */
|
|
||||||
#define CONFIG_ENV_OVERWRITE
|
|
||||||
|
|
||||||
#define CONFIG_LOADADDR 0x80800000 /* loadaddr env var */
|
|
||||||
|
|
||||||
#define CONFIG_EXTRA_ENV_SETTINGS \
|
|
||||||
"netdev=eth0\0" \
|
|
||||||
"uboot_addr=0xa0000000\0" \
|
|
||||||
"uboot=mx31ads/u-boot.bin\0" \
|
|
||||||
"kernel=mx31ads/uImage\0" \
|
|
||||||
"nfsroot=/opt/eldk/arm\0" \
|
|
||||||
"bootargs_base=setenv bootargs console=ttymxc0,115200\0" \
|
|
||||||
"bootargs_nfs=setenv bootargs ${bootargs} root=/dev/nfs " \
|
|
||||||
"ip=dhcp nfsroot=${serverip}:${nfsroot},v3,tcp\0" \
|
|
||||||
"bootcmd=run bootcmd_net\0" \
|
|
||||||
"bootcmd_net=run bootargs_base bootargs_nfs; " \
|
|
||||||
"tftpboot ${loadaddr} ${kernel}; bootm\0" \
|
|
||||||
"prg_uboot=tftpboot ${loadaddr} ${uboot}; " \
|
|
||||||
"protect off ${uboot_addr} 0xa003ffff; " \
|
|
||||||
"erase ${uboot_addr} 0xa003ffff; " \
|
|
||||||
"cp.b ${loadaddr} ${uboot_addr} ${filesize}; " \
|
|
||||||
"setenv filesize; saveenv\0"
|
|
||||||
|
|
||||||
#define CONFIG_CS8900
|
|
||||||
#define CONFIG_CS8900_BASE 0xb4020300
|
|
||||||
#define CONFIG_CS8900_BUS16 1 /* follow the Linux driver */
|
|
||||||
|
|
||||||
/*
|
|
||||||
* The MX31ADS board seems to have a hardware "peculiarity" confirmed under
|
|
||||||
* U-Boot, RedBoot and Linux: the ethernet Rx signal is reaching the CS8900A
|
|
||||||
* controller inverted. The controller is capable of detecting and correcting
|
|
||||||
* this, but it needs 4 network packets for that. Which means, at startup, you
|
|
||||||
* will not receive answers to the first 4 packest, unless there have been some
|
|
||||||
* broadcasts on the network, or your board is on a hub. Reducing the ARP
|
|
||||||
* timeout from default 5 seconds to 200ms we speed up the initial TFTP
|
|
||||||
* transfer, should the user wish one, significantly.
|
|
||||||
*/
|
|
||||||
#define CONFIG_ARP_TIMEOUT 200UL
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Miscellaneous configurable options
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define CONFIG_SYS_MEMTEST_START 0 /* memtest works on */
|
|
||||||
#define CONFIG_SYS_MEMTEST_END 0x10000
|
|
||||||
|
|
||||||
#define CONFIG_SYS_LOAD_ADDR CONFIG_LOADADDR
|
|
||||||
|
|
||||||
/*-----------------------------------------------------------------------
|
|
||||||
* Physical Memory Map
|
|
||||||
*/
|
|
||||||
#define CONFIG_NR_DRAM_BANKS 1
|
|
||||||
#define PHYS_SDRAM_1 CSD0_BASE
|
|
||||||
#define PHYS_SDRAM_1_SIZE (128 * 1024 * 1024)
|
|
||||||
|
|
||||||
#define CONFIG_SYS_SDRAM_BASE PHYS_SDRAM_1
|
|
||||||
#define CONFIG_SYS_INIT_RAM_ADDR IRAM_BASE_ADDR
|
|
||||||
#define CONFIG_SYS_INIT_RAM_SIZE IRAM_SIZE
|
|
||||||
#define CONFIG_SYS_GBL_DATA_OFFSET (CONFIG_SYS_INIT_RAM_SIZE - \
|
|
||||||
GENERATED_GBL_DATA_SIZE)
|
|
||||||
#define CONFIG_SYS_INIT_SP_ADDR (CONFIG_SYS_INIT_RAM_ADDR + \
|
|
||||||
CONFIG_SYS_GBL_DATA_OFFSET)
|
|
||||||
|
|
||||||
/*-----------------------------------------------------------------------
|
|
||||||
* FLASH and environment organization
|
|
||||||
*/
|
|
||||||
#define CONFIG_SYS_FLASH_BASE CS0_BASE
|
|
||||||
#define CONFIG_SYS_MAX_FLASH_BANKS 1 /* max number of memory banks */
|
|
||||||
#define CONFIG_SYS_MAX_FLASH_SECT 262 /* max number of sectors on one chip */
|
|
||||||
#define CONFIG_SYS_MONITOR_BASE CONFIG_SYS_FLASH_BASE /* Monitor at beginning of flash */
|
|
||||||
#define CONFIG_SYS_MONITOR_LEN (256 * 1024) /* Reserve 256KiB */
|
|
||||||
|
|
||||||
#define CONFIG_ENV_SECT_SIZE (128 * 1024)
|
|
||||||
#define CONFIG_ENV_SIZE CONFIG_ENV_SECT_SIZE
|
|
||||||
#define CONFIG_ENV_ADDR (CONFIG_SYS_MONITOR_BASE + CONFIG_SYS_MONITOR_LEN)
|
|
||||||
|
|
||||||
/* Address and size of Redundant Environment Sector */
|
|
||||||
#define CONFIG_ENV_ADDR_REDUND (CONFIG_ENV_ADDR + CONFIG_ENV_SIZE)
|
|
||||||
#define CONFIG_ENV_SIZE_REDUND CONFIG_ENV_SIZE
|
|
||||||
|
|
||||||
/*-----------------------------------------------------------------------
|
|
||||||
* CFI FLASH driver setup
|
|
||||||
*/
|
|
||||||
#define CONFIG_SYS_FLASH_CFI 1 /* Flash memory is CFI compliant */
|
|
||||||
#define CONFIG_FLASH_CFI_DRIVER 1 /* Use drivers/cfi_flash.c */
|
|
||||||
#define CONFIG_FLASH_SPANSION_S29WS_N 1 /* A non-standard buffered write algorithm */
|
|
||||||
#define CONFIG_SYS_FLASH_USE_BUFFER_WRITE 1 /* Use buffered writes (~10x faster) */
|
|
||||||
#define CONFIG_SYS_FLASH_PROTECTION 1 /* Use hardware sector protection */
|
|
||||||
|
|
||||||
/*
|
|
||||||
* JFFS2 partitions
|
|
||||||
*/
|
|
||||||
#define CONFIG_JFFS2_DEV "nor0"
|
|
||||||
|
|
||||||
#endif /* __CONFIG_H */
|
|
@@ -197,8 +197,8 @@
|
|||||||
(CONFIG_SYS_INIT_RAM_ADDR + CONFIG_SYS_INIT_SP_OFFSET)
|
(CONFIG_SYS_INIT_RAM_ADDR + CONFIG_SYS_INIT_SP_OFFSET)
|
||||||
|
|
||||||
/* FLASH and environment organization */
|
/* FLASH and environment organization */
|
||||||
#define CONFIG_ENV_OFFSET (6 * 64 * 1024)
|
#define CONFIG_ENV_OFFSET (12 * 64 * 1024)
|
||||||
#define CONFIG_ENV_SIZE (8 * 1024)
|
#define CONFIG_ENV_SIZE (10 * 1024)
|
||||||
#define CONFIG_ENV_IS_IN_MMC
|
#define CONFIG_ENV_IS_IN_MMC
|
||||||
#define CONFIG_SYS_MMC_ENV_DEV 0
|
#define CONFIG_SYS_MMC_ENV_DEV 0
|
||||||
|
|
||||||
|
@@ -57,6 +57,9 @@
|
|||||||
/* Secure boot (HAB) support */
|
/* Secure boot (HAB) support */
|
||||||
#ifdef CONFIG_SECURE_BOOT
|
#ifdef CONFIG_SECURE_BOOT
|
||||||
#define CONFIG_CSF_SIZE 0x2000
|
#define CONFIG_CSF_SIZE 0x2000
|
||||||
|
#ifdef CONFIG_SPL_BUILD
|
||||||
|
#define CONFIG_SPL_DRIVERS_MISC_SUPPORT
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@@ -50,8 +50,8 @@
|
|||||||
"finduuid=part uuid mmc 0:2 uuid\0" \
|
"finduuid=part uuid mmc 0:2 uuid\0" \
|
||||||
"mmcargs=setenv bootargs console=${console},${baudrate} " \
|
"mmcargs=setenv bootargs console=${console},${baudrate} " \
|
||||||
"root=PARTUUID=${uuid} rootwait rw\0" \
|
"root=PARTUUID=${uuid} rootwait rw\0" \
|
||||||
"loadimage=fatload mmc ${mmcdev}:${mmcpart} ${loadaddr} ${image}\0" \
|
"loadimage=load mmc ${mmcdev}:${mmcpart} ${loadaddr} ${image}\0" \
|
||||||
"loadfdt=fatload mmc ${mmcdev}:${mmcpart} ${fdt_addr} ${fdt_file}\0" \
|
"loadfdt=load mmc ${mmcdev}:${mmcpart} ${fdt_addr} ${fdt_file}\0" \
|
||||||
"mmcboot=echo Booting from mmc ...; " \
|
"mmcboot=echo Booting from mmc ...; " \
|
||||||
"run finduuid; " \
|
"run finduuid; " \
|
||||||
"run mmcargs; " \
|
"run mmcargs; " \
|
||||||
|
@@ -24,6 +24,9 @@
|
|||||||
#define CONFIG_SYS_FSL_ESDHC_HAS_DDR_MODE
|
#define CONFIG_SYS_FSL_ESDHC_HAS_DDR_MODE
|
||||||
#define CONFIG_SYS_MMC_IMG_LOAD_PART 1
|
#define CONFIG_SYS_MMC_IMG_LOAD_PART 1
|
||||||
|
|
||||||
|
/* Switch on SERIAL_TAG */
|
||||||
|
#define CONFIG_SERIAL_TAG
|
||||||
|
|
||||||
#define CONFIG_DFU_ENV_SETTINGS \
|
#define CONFIG_DFU_ENV_SETTINGS \
|
||||||
"dfu_alt_info=boot raw 0x2 0x400 mmcpart 1\0" \
|
"dfu_alt_info=boot raw 0x2 0x400 mmcpart 1\0" \
|
||||||
|
|
||||||
|
@@ -56,6 +56,7 @@
|
|||||||
#define DCD_CHECK_BITS_SET_PARAM 0x14
|
#define DCD_CHECK_BITS_SET_PARAM 0x14
|
||||||
#define DCD_CHECK_BITS_CLR_PARAM 0x04
|
#define DCD_CHECK_BITS_CLR_PARAM 0x04
|
||||||
|
|
||||||
|
#ifndef __ASSEMBLY__
|
||||||
enum imximage_cmd {
|
enum imximage_cmd {
|
||||||
CMD_INVALID,
|
CMD_INVALID,
|
||||||
CMD_IMAGE_VERSION,
|
CMD_IMAGE_VERSION,
|
||||||
@@ -197,4 +198,5 @@ typedef void (*set_dcd_rst_t)(struct imx_header *imxhdr,
|
|||||||
typedef void (*set_imx_hdr_t)(struct imx_header *imxhdr, uint32_t dcd_len,
|
typedef void (*set_imx_hdr_t)(struct imx_header *imxhdr, uint32_t dcd_len,
|
||||||
uint32_t entry_point, uint32_t flash_offset);
|
uint32_t entry_point, uint32_t flash_offset);
|
||||||
|
|
||||||
|
#endif /* __ASSEMBLY__ */
|
||||||
#endif /* _IMXIMAGE_H_ */
|
#endif /* _IMXIMAGE_H_ */
|
||||||
|
@@ -1,21 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2009
|
|
||||||
* Guennadi Liakhovetski, DENX Software Engineering, <lg@denx.de>
|
|
||||||
*
|
|
||||||
* SPDX-License-Identifier: GPL-2.0+
|
|
||||||
*/
|
|
||||||
#ifndef _S6E63D6_H_
|
|
||||||
#define _S6E63D6_H_
|
|
||||||
|
|
||||||
struct s6e63d6 {
|
|
||||||
unsigned int bus;
|
|
||||||
unsigned int cs;
|
|
||||||
unsigned int id;
|
|
||||||
struct spi_slave *slave;
|
|
||||||
};
|
|
||||||
|
|
||||||
extern int s6e63d6_init(struct s6e63d6 *data);
|
|
||||||
extern int s6e63d6_index(struct s6e63d6 *data, u8 idx);
|
|
||||||
extern int s6e63d6_param(struct s6e63d6 *data, u16 param);
|
|
||||||
|
|
||||||
#endif
|
|
@@ -521,7 +521,7 @@ cmd_xzmisc = (cat $(filter-out FORCE,$^) | \
|
|||||||
MKIMAGEOUTPUT ?= /dev/null
|
MKIMAGEOUTPUT ?= /dev/null
|
||||||
quiet_cmd_mkimage = MKIMAGE $@
|
quiet_cmd_mkimage = MKIMAGE $@
|
||||||
cmd_mkimage = $(objtree)/tools/mkimage $(MKIMAGEFLAGS_$(@F)) -d $< $@ \
|
cmd_mkimage = $(objtree)/tools/mkimage $(MKIMAGEFLAGS_$(@F)) -d $< $@ \
|
||||||
$(if $(KBUILD_VERBOSE:1=), >$(MKIMAGEOUTPUT))
|
>$(MKIMAGEOUTPUT) $(if $(KBUILD_VERBOSE:0=), && cat $(MKIMAGEOUTPUT))
|
||||||
|
|
||||||
# fdtgrep
|
# fdtgrep
|
||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
|
@@ -144,7 +144,7 @@ MKIMAGEOUTPUT ?= /dev/null
|
|||||||
|
|
||||||
quiet_cmd_mkimage = MKIMAGE $@
|
quiet_cmd_mkimage = MKIMAGE $@
|
||||||
cmd_mkimage = $(objtree)/tools/mkimage $(MKIMAGEFLAGS_$(@F)) -d $< $@ \
|
cmd_mkimage = $(objtree)/tools/mkimage $(MKIMAGEFLAGS_$(@F)) -d $< $@ \
|
||||||
$(if $(KBUILD_VERBOSE:1=), >$(MKIMAGEOUTPUT))
|
>$(MKIMAGEOUTPUT) $(if $(KBUILD_VERBOSE:0=), && cat $(MKIMAGEOUTPUT))
|
||||||
|
|
||||||
MKIMAGEFLAGS_MLO = -T omapimage -a $(CONFIG_SPL_TEXT_BASE)
|
MKIMAGEFLAGS_MLO = -T omapimage -a $(CONFIG_SPL_TEXT_BASE)
|
||||||
|
|
||||||
|
@@ -516,7 +516,7 @@ static void print_hdr_v2(struct imx_header *imx_hdr)
|
|||||||
offs = (char *)&hdr_v2->data.dcd_table
|
offs = (char *)&hdr_v2->data.dcd_table
|
||||||
- (char *)hdr_v2;
|
- (char *)hdr_v2;
|
||||||
|
|
||||||
printf("HAB Blocks: %08x %08x %08x\n",
|
printf("HAB Blocks: 0x%08x 0x%08x 0x%08x\n",
|
||||||
(uint32_t)fhdr_v2->self, 0,
|
(uint32_t)fhdr_v2->self, 0,
|
||||||
hdr_v2->boot_data.size - imximage_ivt_offset -
|
hdr_v2->boot_data.size - imximage_ivt_offset -
|
||||||
imximage_csf_size);
|
imximage_csf_size);
|
||||||
|
Reference in New Issue
Block a user