[U-Boot] [PATCH 1/1] ARM: ts4600: add basic board support

This commit adds basic support including: MMC, Serial console
Signed-off-by: Sebastien Bourdelin sebastien.bourdelin@savoirfairelinux.com --- arch/arm/Kconfig | 6 ++ board/technologic/ts4600/Kconfig | 15 ++++ board/technologic/ts4600/MAINTAINERS | 6 ++ board/technologic/ts4600/Makefile | 11 +++ board/technologic/ts4600/iomux.c | 131 +++++++++++++++++++++++++++++++++++ board/technologic/ts4600/ts4600.c | 99 ++++++++++++++++++++++++++ configs/ts4600_defconfig | 18 +++++ include/configs/ts4600.h | 70 +++++++++++++++++++ 8 files changed, 356 insertions(+) create mode 100644 board/technologic/ts4600/Kconfig create mode 100644 board/technologic/ts4600/MAINTAINERS create mode 100644 board/technologic/ts4600/Makefile create mode 100644 board/technologic/ts4600/iomux.c create mode 100644 board/technologic/ts4600/ts4600.c create mode 100644 configs/ts4600_defconfig create mode 100644 include/configs/ts4600.h
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig index d7a9b11..142c445 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig @@ -579,6 +579,11 @@ config ARCH_SUNXI select USB_KEYBOARD select USE_TINY_PRINTF
+config TARGET_TS4600 + bool "Support TS4600" + select CPU_ARM926EJS + select SUPPORT_SPL + config TARGET_TS4800 bool "Support TS4800" select CPU_V7 @@ -1015,6 +1020,7 @@ source "board/ti/ti816x/Kconfig" source "board/timll/devkit3250/Kconfig" source "board/toradex/colibri_pxa270/Kconfig" source "board/toradex/colibri_vf/Kconfig" +source "board/technologic/ts4600/Kconfig" source "board/technologic/ts4800/Kconfig" source "board/vscom/baltos/Kconfig" source "board/woodburn/Kconfig" diff --git a/board/technologic/ts4600/Kconfig b/board/technologic/ts4600/Kconfig new file mode 100644 index 0000000..d0dc2e1 --- /dev/null +++ b/board/technologic/ts4600/Kconfig @@ -0,0 +1,15 @@ +if TARGET_TS4600 + +config SYS_BOARD + default "ts4600" + +config SYS_VENDOR + default "technologic" + +config SYS_SOC + default "mxs" + +config SYS_CONFIG_NAME + default "ts4600" + +endif diff --git a/board/technologic/ts4600/MAINTAINERS b/board/technologic/ts4600/MAINTAINERS new file mode 100644 index 0000000..6f683b5 --- /dev/null +++ b/board/technologic/ts4600/MAINTAINERS @@ -0,0 +1,6 @@ +TS4600 BOARD +M: Sebastien Bourdelin sebastien.bourdelin@savoirfairelinux.com +S: Maintained +F: board/technologic/ts4600/ +F: include/configs/ts4600.h +F: configs/ts4600_defconfig diff --git a/board/technologic/ts4600/Makefile b/board/technologic/ts4600/Makefile new file mode 100644 index 0000000..faa2970 --- /dev/null +++ b/board/technologic/ts4600/Makefile @@ -0,0 +1,11 @@ +# +# (C) Copyright 2016 Savoir-faire Linux +# +# SPDX-License-Identifier: GPL-2.0+ +# + +ifndef CONFIG_SPL_BUILD +obj-y := ts4600.o +else +obj-y := iomux.o +endif diff --git a/board/technologic/ts4600/iomux.c b/board/technologic/ts4600/iomux.c new file mode 100644 index 0000000..de49fc2 --- /dev/null +++ b/board/technologic/ts4600/iomux.c @@ -0,0 +1,131 @@ +/* + * (C) Copyright 2016 Savoir-faire Linux Inc. + * + * Author: Sebastien Bourdelin sebastien.bourdelin@savoirfairelinux.com + * + * Based on work from TS7680 code by: + * Kris Bahnsen kris@embeddedarm.com + * Mark Featherston mark@embeddedarm.com + * https://github.com/embeddedarm/u-boot/tree/master/board/technologic/ts7680 + * + * Derived from MX28EVK code by + * Freescale Semiconductor, Inc. + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +#include <common.h> +#include <config.h> +#include <asm/io.h> +#include <asm/arch/iomux-mx28.h> +#include <asm/arch/imx-regs.h> +#include <asm/arch/sys_proto.h> + +#define MUX_CONFIG_SSP0 (MXS_PAD_3V3 | MXS_PAD_8MA | MXS_PAD_PULLUP) +#define MUX_CONFIG_GPMI (MXS_PAD_3V3 | MXS_PAD_4MA | MXS_PAD_NOPULL) +#define MUX_CONFIG_ENET (MXS_PAD_3V3 | MXS_PAD_8MA | MXS_PAD_PULLUP) +#define MUX_CONFIG_EMI (MXS_PAD_3V3 | MXS_PAD_12MA | MXS_PAD_NOPULL) +#define MUX_CONFIG_LCD (MXS_PAD_3V3 | MXS_PAD_4MA | MXS_PAD_NOPULL) + +const iomux_cfg_t iomux_setup[] = { + /* DUART */ + MX28_PAD_PWM0__DUART_RX, + MX28_PAD_PWM1__DUART_TX, + + /* MMC0 */ + MX28_PAD_SSP0_DATA0__SSP0_D0 | MUX_CONFIG_SSP0, + MX28_PAD_SSP0_DATA1__SSP0_D1 | MUX_CONFIG_SSP0, + MX28_PAD_SSP0_DATA2__SSP0_D2 | MUX_CONFIG_SSP0, + MX28_PAD_SSP0_DATA3__SSP0_D3 | MUX_CONFIG_SSP0, + MX28_PAD_SSP0_CMD__SSP0_CMD | MUX_CONFIG_SSP0, + MX28_PAD_SSP0_SCK__SSP0_SCK | + (MXS_PAD_12MA | MXS_PAD_3V3 | MXS_PAD_NOPULL), + + /* MMC0 slot power enable */ + MX28_PAD_PWM3__GPIO_3_28 | + (MXS_PAD_12MA | MXS_PAD_3V3 | MXS_PAD_PULLUP), + + /* MMC1 eMMC */ + MX28_PAD_GPMI_WRN__SSP1_SCK | + (MXS_PAD_12MA | MXS_PAD_3V3 | MXS_PAD_NOPULL), + MX28_PAD_GPMI_RDY1__SSP1_CMD | MUX_CONFIG_SSP0, + MX28_PAD_GPMI_D00__SSP1_D0 | MUX_CONFIG_SSP0, + MX28_PAD_GPMI_D01__SSP1_D1 | MUX_CONFIG_SSP0, + MX28_PAD_GPMI_D02__SSP1_D2 | MUX_CONFIG_SSP0, + MX28_PAD_GPMI_D03__SSP1_D3 | MUX_CONFIG_SSP0, + + /* EMI */ + MX28_PAD_EMI_D00__EMI_DATA0 | MUX_CONFIG_EMI, + MX28_PAD_EMI_D01__EMI_DATA1 | MUX_CONFIG_EMI, + MX28_PAD_EMI_D02__EMI_DATA2 | MUX_CONFIG_EMI, + MX28_PAD_EMI_D03__EMI_DATA3 | MUX_CONFIG_EMI, + MX28_PAD_EMI_D04__EMI_DATA4 | MUX_CONFIG_EMI, + MX28_PAD_EMI_D05__EMI_DATA5 | MUX_CONFIG_EMI, + MX28_PAD_EMI_D06__EMI_DATA6 | MUX_CONFIG_EMI, + MX28_PAD_EMI_D07__EMI_DATA7 | MUX_CONFIG_EMI, + MX28_PAD_EMI_D08__EMI_DATA8 | MUX_CONFIG_EMI, + MX28_PAD_EMI_D09__EMI_DATA9 | MUX_CONFIG_EMI, + MX28_PAD_EMI_D10__EMI_DATA10 | MUX_CONFIG_EMI, + MX28_PAD_EMI_D11__EMI_DATA11 | MUX_CONFIG_EMI, + MX28_PAD_EMI_D12__EMI_DATA12 | MUX_CONFIG_EMI, + MX28_PAD_EMI_D13__EMI_DATA13 | MUX_CONFIG_EMI, + MX28_PAD_EMI_D14__EMI_DATA14 | MUX_CONFIG_EMI, + MX28_PAD_EMI_D15__EMI_DATA15 | MUX_CONFIG_EMI, + MX28_PAD_EMI_ODT0__EMI_ODT0 | MUX_CONFIG_EMI, + MX28_PAD_EMI_DQM0__EMI_DQM0 | MUX_CONFIG_EMI, + MX28_PAD_EMI_ODT1__EMI_ODT1 | MUX_CONFIG_EMI, + MX28_PAD_EMI_DQM1__EMI_DQM1 | MUX_CONFIG_EMI, + MX28_PAD_EMI_DDR_OPEN_FB__EMI_DDR_OPEN_FEEDBACK | MUX_CONFIG_EMI, + MX28_PAD_EMI_CLK__EMI_CLK | MUX_CONFIG_EMI, + MX28_PAD_EMI_DQS0__EMI_DQS0 | MUX_CONFIG_EMI, + MX28_PAD_EMI_DQS1__EMI_DQS1 | MUX_CONFIG_EMI, + MX28_PAD_EMI_DDR_OPEN__EMI_DDR_OPEN | MUX_CONFIG_EMI, + MX28_PAD_EMI_A00__EMI_ADDR0 | MUX_CONFIG_EMI, + MX28_PAD_EMI_A01__EMI_ADDR1 | MUX_CONFIG_EMI, + MX28_PAD_EMI_A02__EMI_ADDR2 | MUX_CONFIG_EMI, + MX28_PAD_EMI_A03__EMI_ADDR3 | MUX_CONFIG_EMI, + MX28_PAD_EMI_A04__EMI_ADDR4 | MUX_CONFIG_EMI, + MX28_PAD_EMI_A05__EMI_ADDR5 | MUX_CONFIG_EMI, + MX28_PAD_EMI_A06__EMI_ADDR6 | MUX_CONFIG_EMI, + MX28_PAD_EMI_A07__EMI_ADDR7 | MUX_CONFIG_EMI, + MX28_PAD_EMI_A08__EMI_ADDR8 | MUX_CONFIG_EMI, + MX28_PAD_EMI_A09__EMI_ADDR9 | MUX_CONFIG_EMI, + MX28_PAD_EMI_A10__EMI_ADDR10 | MUX_CONFIG_EMI, + MX28_PAD_EMI_A11__EMI_ADDR11 | MUX_CONFIG_EMI, + MX28_PAD_EMI_A12__EMI_ADDR12 | MUX_CONFIG_EMI, + MX28_PAD_EMI_A13__EMI_ADDR13 | MUX_CONFIG_EMI, + MX28_PAD_EMI_A14__EMI_ADDR14 | MUX_CONFIG_EMI, + MX28_PAD_EMI_BA0__EMI_BA0 | MUX_CONFIG_EMI, + MX28_PAD_EMI_BA1__EMI_BA1 | MUX_CONFIG_EMI, + MX28_PAD_EMI_BA2__EMI_BA2 | MUX_CONFIG_EMI, + MX28_PAD_EMI_CASN__EMI_CASN | MUX_CONFIG_EMI, + MX28_PAD_EMI_RASN__EMI_RASN | MUX_CONFIG_EMI, + MX28_PAD_EMI_WEN__EMI_WEN | MUX_CONFIG_EMI, + MX28_PAD_EMI_CE0N__EMI_CE0N | MUX_CONFIG_EMI, + MX28_PAD_EMI_CE1N__EMI_CE1N | MUX_CONFIG_EMI, + MX28_PAD_EMI_CKE__EMI_CKE | MUX_CONFIG_EMI, + + /* I2C */ + MX28_PAD_I2C0_SCL__I2C0_SCL, + MX28_PAD_I2C0_SDA__I2C0_SDA, + +}; + +#define HW_DRAM_CTL29 (0x74 >> 2) +#define CS_MAP 0xf +#define COLUMN_SIZE 0x2 +#define ADDR_PINS 0x1 +#define APREBIT 0xa + +#define HW_DRAM_CTL29_CONFIG (CS_MAP << 24 | COLUMN_SIZE << 16 | \ + ADDR_PINS << 8 | APREBIT) + +void mxs_adjust_memory_params(uint32_t *dram_vals) +{ + dram_vals[HW_DRAM_CTL29] = HW_DRAM_CTL29_CONFIG; +} + +void board_init_ll(const uint32_t arg, const uint32_t *resptr) +{ + mxs_common_spl_init(arg, resptr, iomux_setup, ARRAY_SIZE(iomux_setup)); +} diff --git a/board/technologic/ts4600/ts4600.c b/board/technologic/ts4600/ts4600.c new file mode 100644 index 0000000..a992946 --- /dev/null +++ b/board/technologic/ts4600/ts4600.c @@ -0,0 +1,99 @@ +/* + * (C) Copyright 2016 Savoir-faire Linux Inc. + * + * Author: Sebastien Bourdelin sebastien.bourdelin@savoirfairelinux.com + * + * Based on work from TS7680 code by: + * Kris Bahnsen kris@embeddedarm.com + * Mark Featherston mark@embeddedarm.com + * https://github.com/embeddedarm/u-boot/tree/master/board/technologic/ts7680 + * + * Derived from MX28EVK code by + * Freescale Semiconductor, Inc. + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +#include <common.h> +#include <asm/gpio.h> +#include <asm/io.h> +#include <asm/arch/imx-regs.h> +#include <asm/arch/iomux-mx28.h> +#include <asm/arch/clock.h> +#include <asm/arch/sys_proto.h> +#include <linux/mii.h> +#include <miiphy.h> +#include <netdev.h> +#include <errno.h> + +DECLARE_GLOBAL_DATA_PTR; + +int board_early_init_f(void) +{ + /* IO0 clock at 480MHz */ + mxs_set_ioclk(MXC_IOCLK0, 480000); + /* IO1 clock at 480MHz */ + mxs_set_ioclk(MXC_IOCLK1, 480000); + + /* SSP0 clocks at 96MHz */ + mxs_set_sspclk(MXC_SSPCLK0, 96000, 0); + /* SSP1 clocks at 96MHz */ + mxs_set_sspclk(MXC_SSPCLK1, 96000, 0); + /* SSP2 clock at 160MHz */ + mxs_set_sspclk(MXC_SSPCLK2, 160000, 0); + + return 0; +} + +int dram_init(void) +{ + return mxs_dram_init(); +} + +int board_init(void) +{ + /* Adress of boot parameters */ + gd->bd->bi_boot_params = PHYS_SDRAM_1 + 0x100; + + return 0; +} + +#ifdef CONFIG_CMD_MMC +static int ts4600_mmc_cd(int id) +{ + return 1; +} + +int board_mmc_init(bd_t *bis) +{ + int ret; + + mxs_iomux_setup_pad(MX28_PAD_PWM3__GPIO_3_28); + + /* Power-on SD */ + gpio_direction_output(MX28_PAD_PWM3__GPIO_3_28, 1); + udelay(1000); + gpio_direction_output(MX28_PAD_PWM3__GPIO_3_28, 0); + + /* SD card */ + ret = mxsmmc_initialize(bis, 0, NULL, ts4600_mmc_cd); + if(ret != 0) { + printf("SD controller initialized with %d\n", ret); + } + + /* eMMC */ + ret = mxsmmc_initialize(bis, 1, NULL, ts4600_mmc_cd); + if(ret != 0) { + printf("eMMC controller initialized with %d\n", ret); + } + + return ret; +} +#endif + +int checkboard(void) +{ + puts("Board: TS4600\n"); + + return 0; +} diff --git a/configs/ts4600_defconfig b/configs/ts4600_defconfig new file mode 100644 index 0000000..c052ded --- /dev/null +++ b/configs/ts4600_defconfig @@ -0,0 +1,18 @@ +CONFIG_ARM=y +CONFIG_TARGET_TS4600=y +CONFIG_SPL_LIBCOMMON_SUPPORT=y +CONFIG_SPL_LIBGENERIC_SUPPORT=y +CONFIG_FIT=y +CONFIG_SYS_EXTRA_OPTIONS="ENV_IS_IN_MMC" +CONFIG_SYS_CONSOLE_IS_IN_ENV=y +CONFIG_SPL=y +CONFIG_HUSH_PARSER=y +CONFIG_CMD_BOOTZ=y +# CONFIG_CMD_IMLS is not set +# CONFIG_CMD_FLASH is not set +CONFIG_CMD_MMC=y +CONFIG_CMD_EXT4=y +CONFIG_CMD_EXT4_WRITE=y +CONFIG_CMD_FAT=y +CONFIG_CMD_FS_GENERIC=y +CONFIG_OF_LIBFDT=y diff --git a/include/configs/ts4600.h b/include/configs/ts4600.h new file mode 100644 index 0000000..9c8d29d --- /dev/null +++ b/include/configs/ts4600.h @@ -0,0 +1,70 @@ +/* + * (C) Copyright 2016 Savoir-faire Linux Inc. + * + * Author: Sebastien Bourdelin sebastien.bourdelin@savoirfairelinux.com + * + * Derived from MX28EVK code by + * Fabio Estevam fabio.estevam@freescale.com + * Freescale Semiconductor, Inc. + * + * Configuration settings for the TS4600 Board + * + * SPDX-License-Identifier: GPL-2.0+ + */ +#ifndef __CONFIGS_TS4600_H__ +#define __CONFIGS_TS4600_H__ + +/* System configurations */ +#define CONFIG_MX28 /* i.MX28 SoC */ + +/* U-Boot Commands */ +#define CONFIG_SYS_NO_FLASH /* No NOR Flash */ +#define CONFIG_DOS_PARTITION + +/* Memory configuration */ +#define CONFIG_NR_DRAM_BANKS 1 /* 1 bank of DRAM */ +#define PHYS_SDRAM_1 0x40000000 /* Base address */ +#define PHYS_SDRAM_1_SIZE 0x40000000 /* Max 1 GB RAM */ +#define CONFIG_SYS_SDRAM_BASE PHYS_SDRAM_1 + +/* Environment */ +#define CONFIG_ENV_SIZE (8 * 1024) + +/* Environment is in MMC */ +#if defined(CONFIG_CMD_MMC) && defined(CONFIG_ENV_IS_IN_MMC) +#define CONFIG_ENV_OFFSET (256 * 1024) +#define CONFIG_SYS_MMC_ENV_DEV 0 +#endif + +/* Boot Linux */ +#define CONFIG_LOADADDR 0x42000000 +#define CONFIG_SYS_LOAD_ADDR CONFIG_LOADADDR + +/* Extra Environment */ +#define CONFIG_EXTRA_ENV_SETTINGS \ + "fdt_addr=0x41000000\0" \ + "loadkernel=load mmc ${mmcdev}:${mmcpart} ${loadaddr} zImage\0" \ + "loadfdt=load mmc ${mmcdev}:${mmcpart} ${fdt_addr} ts4600.dtb\0" \ + "loadbootscript=load mmc ${mmcdev}:${mmcpart} ${loadaddr} boot.ub\0" \ + "bootscript=echo Running bootscript from mmc...; " \ + "setenv mmcdev 0; " \ + "setenv mmcpart 2; " \ + "run loadbootscript && source ${loadaddr}; \0" \ + "sdboot=echo Booting from SD card ...; " \ + "setenv mmcdev 0; " \ + "setenv mmcpart 2; " \ + "setenv root /dev/mmcblk0p3; " \ + "run loadkernel && run loadfdt; \0" \ + "startbootsequence=run bootscript || run sdboot \0" \ + +#define CONFIG_BOOTCOMMAND \ + "mmc rescan; " \ + "run startbootsequence; " \ + "setenv cmdline_append console=ttyAMA0,115200; " \ + "setenv bootargs root=${root} rootwait rw ${cmdline_append}; " \ + "bootz ${loadaddr} - ${fdt_addr}; " + +/* The rest of the configuration is shared */ +#include <configs/mxs.h> + +#endif /* __CONFIGS_TS4600_H__ */

On Thu, Nov 3, 2016 at 5:20 PM, Sebastien Bourdelin sebastien.bourdelin@savoirfairelinux.com wrote:
This commit adds basic support including: MMC, Serial console
Signed-off-by: Sebastien Bourdelin sebastien.bourdelin@savoirfairelinux.com
Looks good:
Reviewed-by: Fabio Estevam fabio.estevam@nxp.com

Hi Sebastien,
On Thu, Nov 3, 2016 at 5:20 PM, Sebastien Bourdelin sebastien.bourdelin@savoirfairelinux.com wrote:
+/* Extra Environment */ +#define CONFIG_EXTRA_ENV_SETTINGS \
"fdt_addr=0x41000000\0" \
"loadkernel=load mmc ${mmcdev}:${mmcpart} ${loadaddr} zImage\0" \
"loadfdt=load mmc ${mmcdev}:${mmcpart} ${fdt_addr} ts4600.dtb\0" \
Not related to this patch: do you plan to submit ts4600.dts for mainline inclusion as well?
Regards,
Fabio Estevam

Hi Fabio.
On 11/06/2016 02:16 PM, Fabio Estevam wrote:
Hi Sebastien,
On Thu, Nov 3, 2016 at 5:20 PM, Sebastien Bourdelin sebastien.bourdelin@savoirfairelinux.com wrote:
+/* Extra Environment */ +#define CONFIG_EXTRA_ENV_SETTINGS \
"fdt_addr=0x41000000\0" \
"loadkernel=load mmc ${mmcdev}:${mmcpart} ${loadaddr} zImage\0" \
"loadfdt=load mmc ${mmcdev}:${mmcpart} ${fdt_addr} ts4600.dtb\0" \
Not related to this patch: do you plan to submit ts4600.dts for mainline inclusion as well?
It's in my todo list yes, but nothing really planned currently, do you think i should keep the mx28evk dtb instead?
Regards,
Fabio Estevam
Regards,
Sebastien Bourdelin

Hi Sebastien,
On Mon, Nov 7, 2016 at 1:36 PM, Sebastien Bourdelin sebastien.bourdelin@savoirfairelinux.com wrote:
It's in my todo list yes, but nothing really planned currently, do you think i should keep the mx28evk dtb instead?
I am not familar with this board. Do you mean that you use imx28-evk.dtb to boot it?
IMHO it would be nice to have a dedicated ts4600.dts to avoid confusion.
Regards,
Fabio Estevam

Hi Fabio.
On 11/07/2016 10:43 AM, Fabio Estevam wrote:
Hi Sebastien,
On Mon, Nov 7, 2016 at 1:36 PM, Sebastien Bourdelin sebastien.bourdelin@savoirfairelinux.com wrote:
It's in my todo list yes, but nothing really planned currently, do you think i should keep the mx28evk dtb instead?
I am not familar with this board. Do you mean that you use imx28-evk.dtb to boot it?
Yes currently i'm using the mainstream Linux kernel using the mx28evk defconfig and its Device Tree. Obviously not all peripherals are working.
IMHO it would be nice to have a dedicated ts4600.dts to avoid confusion.
For my understanding, are we talking about adding the dts in U-Boot or in Linux?
Regards,
Fabio Estevam
Best Regards,
Sebastien Bourdelin

Hi Sebastien,
On Mon, Nov 7, 2016 at 2:24 PM, Sebastien Bourdelin sebastien.bourdelin@savoirfairelinux.com wrote:
Yes currently i'm using the mainstream Linux kernel using the mx28evk defconfig and its Device Tree. Obviously not all peripherals are working.
Ok, got it. So that means that having a dedicated ts4600.dts file in mainline kernel would be helpful.
For my understanding, are we talking about adding the dts in U-Boot or in Linux?
I am talking about adding ts4600.dts file to mainline kernel.
Regards,
Fabio Estevam

Hi Fabio
On 11/07/2016 11:49 AM, Fabio Estevam wrote:
Hi Sebastien,
On Mon, Nov 7, 2016 at 2:24 PM, Sebastien Bourdelin sebastien.bourdelin@savoirfairelinux.com wrote:
Yes currently i'm using the mainstream Linux kernel using the mx28evk defconfig and its Device Tree. Obviously not all peripherals are working.
Ok, got it. So that means that having a dedicated ts4600.dts file in mainline kernel would be helpful.
For my understanding, are we talking about adding the dts in U-Boot or in Linux?
I am talking about adding ts4600.dts file to mainline kernel.
Perfect, thanks for the clarification. I will work on it.
Regards,
Fabio Estevam
Best Regards,
Sebastien Bourdelin

This commit adds basic support including: MMC, Serial console
Signed-off-by: Sebastien Bourdelin sebastien.bourdelin@savoirfairelinux.com
--- Changes v1 -> v2: - remove useless define - remove eMMC muxing and init which doesn't exist on the TS4600 board - disable SSP1 and SSP2 clocks settings which are not currently used
Signed-off-by: Sebastien Bourdelin sebastien.bourdelin@savoirfairelinux.com --- arch/arm/Kconfig | 6 ++ board/technologic/ts4600/Kconfig | 15 +++++ board/technologic/ts4600/MAINTAINERS | 6 ++ board/technologic/ts4600/Makefile | 11 ++++ board/technologic/ts4600/iomux.c | 119 +++++++++++++++++++++++++++++++++++ board/technologic/ts4600/ts4600.c | 89 ++++++++++++++++++++++++++ configs/ts4600_defconfig | 18 ++++++ include/configs/ts4600.h | 70 +++++++++++++++++++++ 8 files changed, 334 insertions(+) create mode 100644 board/technologic/ts4600/Kconfig create mode 100644 board/technologic/ts4600/MAINTAINERS create mode 100644 board/technologic/ts4600/Makefile create mode 100644 board/technologic/ts4600/iomux.c create mode 100644 board/technologic/ts4600/ts4600.c create mode 100644 configs/ts4600_defconfig create mode 100644 include/configs/ts4600.h
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig index d7a9b11..142c445 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig @@ -579,6 +579,11 @@ config ARCH_SUNXI select USB_KEYBOARD select USE_TINY_PRINTF
+config TARGET_TS4600 + bool "Support TS4600" + select CPU_ARM926EJS + select SUPPORT_SPL + config TARGET_TS4800 bool "Support TS4800" select CPU_V7 @@ -1015,6 +1020,7 @@ source "board/ti/ti816x/Kconfig" source "board/timll/devkit3250/Kconfig" source "board/toradex/colibri_pxa270/Kconfig" source "board/toradex/colibri_vf/Kconfig" +source "board/technologic/ts4600/Kconfig" source "board/technologic/ts4800/Kconfig" source "board/vscom/baltos/Kconfig" source "board/woodburn/Kconfig" diff --git a/board/technologic/ts4600/Kconfig b/board/technologic/ts4600/Kconfig new file mode 100644 index 0000000..d0dc2e1 --- /dev/null +++ b/board/technologic/ts4600/Kconfig @@ -0,0 +1,15 @@ +if TARGET_TS4600 + +config SYS_BOARD + default "ts4600" + +config SYS_VENDOR + default "technologic" + +config SYS_SOC + default "mxs" + +config SYS_CONFIG_NAME + default "ts4600" + +endif diff --git a/board/technologic/ts4600/MAINTAINERS b/board/technologic/ts4600/MAINTAINERS new file mode 100644 index 0000000..6f683b5 --- /dev/null +++ b/board/technologic/ts4600/MAINTAINERS @@ -0,0 +1,6 @@ +TS4600 BOARD +M: Sebastien Bourdelin sebastien.bourdelin@savoirfairelinux.com +S: Maintained +F: board/technologic/ts4600/ +F: include/configs/ts4600.h +F: configs/ts4600_defconfig diff --git a/board/technologic/ts4600/Makefile b/board/technologic/ts4600/Makefile new file mode 100644 index 0000000..faa2970 --- /dev/null +++ b/board/technologic/ts4600/Makefile @@ -0,0 +1,11 @@ +# +# (C) Copyright 2016 Savoir-faire Linux +# +# SPDX-License-Identifier: GPL-2.0+ +# + +ifndef CONFIG_SPL_BUILD +obj-y := ts4600.o +else +obj-y := iomux.o +endif diff --git a/board/technologic/ts4600/iomux.c b/board/technologic/ts4600/iomux.c new file mode 100644 index 0000000..11d1723 --- /dev/null +++ b/board/technologic/ts4600/iomux.c @@ -0,0 +1,119 @@ +/* + * (C) Copyright 2016 Savoir-faire Linux Inc. + * + * Author: Sebastien Bourdelin sebastien.bourdelin@savoirfairelinux.com + * + * Based on work from TS7680 code by: + * Kris Bahnsen kris@embeddedarm.com + * Mark Featherston mark@embeddedarm.com + * https://github.com/embeddedarm/u-boot/tree/master/board/technologic/ts7680 + * + * Derived from MX28EVK code by + * Freescale Semiconductor, Inc. + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +#include <common.h> +#include <config.h> +#include <asm/io.h> +#include <asm/arch/iomux-mx28.h> +#include <asm/arch/imx-regs.h> +#include <asm/arch/sys_proto.h> + +#define MUX_CONFIG_SSP0 (MXS_PAD_3V3 | MXS_PAD_8MA | MXS_PAD_PULLUP) +#define MUX_CONFIG_EMI (MXS_PAD_3V3 | MXS_PAD_12MA | MXS_PAD_NOPULL) + +const iomux_cfg_t iomux_setup[] = { + /* DUART */ + MX28_PAD_PWM0__DUART_RX, + MX28_PAD_PWM1__DUART_TX, + + /* MMC0 */ + MX28_PAD_SSP0_DATA0__SSP0_D0 | MUX_CONFIG_SSP0, + MX28_PAD_SSP0_DATA1__SSP0_D1 | MUX_CONFIG_SSP0, + MX28_PAD_SSP0_DATA2__SSP0_D2 | MUX_CONFIG_SSP0, + MX28_PAD_SSP0_DATA3__SSP0_D3 | MUX_CONFIG_SSP0, + MX28_PAD_SSP0_CMD__SSP0_CMD | MUX_CONFIG_SSP0, + MX28_PAD_SSP0_SCK__SSP0_SCK | + (MXS_PAD_12MA | MXS_PAD_3V3 | MXS_PAD_NOPULL), + + /* MMC0 slot power enable */ + MX28_PAD_PWM3__GPIO_3_28 | + (MXS_PAD_12MA | MXS_PAD_3V3 | MXS_PAD_PULLUP), + + /* EMI */ + MX28_PAD_EMI_D00__EMI_DATA0 | MUX_CONFIG_EMI, + MX28_PAD_EMI_D01__EMI_DATA1 | MUX_CONFIG_EMI, + MX28_PAD_EMI_D02__EMI_DATA2 | MUX_CONFIG_EMI, + MX28_PAD_EMI_D03__EMI_DATA3 | MUX_CONFIG_EMI, + MX28_PAD_EMI_D04__EMI_DATA4 | MUX_CONFIG_EMI, + MX28_PAD_EMI_D05__EMI_DATA5 | MUX_CONFIG_EMI, + MX28_PAD_EMI_D06__EMI_DATA6 | MUX_CONFIG_EMI, + MX28_PAD_EMI_D07__EMI_DATA7 | MUX_CONFIG_EMI, + MX28_PAD_EMI_D08__EMI_DATA8 | MUX_CONFIG_EMI, + MX28_PAD_EMI_D09__EMI_DATA9 | MUX_CONFIG_EMI, + MX28_PAD_EMI_D10__EMI_DATA10 | MUX_CONFIG_EMI, + MX28_PAD_EMI_D11__EMI_DATA11 | MUX_CONFIG_EMI, + MX28_PAD_EMI_D12__EMI_DATA12 | MUX_CONFIG_EMI, + MX28_PAD_EMI_D13__EMI_DATA13 | MUX_CONFIG_EMI, + MX28_PAD_EMI_D14__EMI_DATA14 | MUX_CONFIG_EMI, + MX28_PAD_EMI_D15__EMI_DATA15 | MUX_CONFIG_EMI, + MX28_PAD_EMI_ODT0__EMI_ODT0 | MUX_CONFIG_EMI, + MX28_PAD_EMI_DQM0__EMI_DQM0 | MUX_CONFIG_EMI, + MX28_PAD_EMI_ODT1__EMI_ODT1 | MUX_CONFIG_EMI, + MX28_PAD_EMI_DQM1__EMI_DQM1 | MUX_CONFIG_EMI, + MX28_PAD_EMI_DDR_OPEN_FB__EMI_DDR_OPEN_FEEDBACK | MUX_CONFIG_EMI, + MX28_PAD_EMI_CLK__EMI_CLK | MUX_CONFIG_EMI, + MX28_PAD_EMI_DQS0__EMI_DQS0 | MUX_CONFIG_EMI, + MX28_PAD_EMI_DQS1__EMI_DQS1 | MUX_CONFIG_EMI, + MX28_PAD_EMI_DDR_OPEN__EMI_DDR_OPEN | MUX_CONFIG_EMI, + MX28_PAD_EMI_A00__EMI_ADDR0 | MUX_CONFIG_EMI, + MX28_PAD_EMI_A01__EMI_ADDR1 | MUX_CONFIG_EMI, + MX28_PAD_EMI_A02__EMI_ADDR2 | MUX_CONFIG_EMI, + MX28_PAD_EMI_A03__EMI_ADDR3 | MUX_CONFIG_EMI, + MX28_PAD_EMI_A04__EMI_ADDR4 | MUX_CONFIG_EMI, + MX28_PAD_EMI_A05__EMI_ADDR5 | MUX_CONFIG_EMI, + MX28_PAD_EMI_A06__EMI_ADDR6 | MUX_CONFIG_EMI, + MX28_PAD_EMI_A07__EMI_ADDR7 | MUX_CONFIG_EMI, + MX28_PAD_EMI_A08__EMI_ADDR8 | MUX_CONFIG_EMI, + MX28_PAD_EMI_A09__EMI_ADDR9 | MUX_CONFIG_EMI, + MX28_PAD_EMI_A10__EMI_ADDR10 | MUX_CONFIG_EMI, + MX28_PAD_EMI_A11__EMI_ADDR11 | MUX_CONFIG_EMI, + MX28_PAD_EMI_A12__EMI_ADDR12 | MUX_CONFIG_EMI, + MX28_PAD_EMI_A13__EMI_ADDR13 | MUX_CONFIG_EMI, + MX28_PAD_EMI_A14__EMI_ADDR14 | MUX_CONFIG_EMI, + MX28_PAD_EMI_BA0__EMI_BA0 | MUX_CONFIG_EMI, + MX28_PAD_EMI_BA1__EMI_BA1 | MUX_CONFIG_EMI, + MX28_PAD_EMI_BA2__EMI_BA2 | MUX_CONFIG_EMI, + MX28_PAD_EMI_CASN__EMI_CASN | MUX_CONFIG_EMI, + MX28_PAD_EMI_RASN__EMI_RASN | MUX_CONFIG_EMI, + MX28_PAD_EMI_WEN__EMI_WEN | MUX_CONFIG_EMI, + MX28_PAD_EMI_CE0N__EMI_CE0N | MUX_CONFIG_EMI, + MX28_PAD_EMI_CE1N__EMI_CE1N | MUX_CONFIG_EMI, + MX28_PAD_EMI_CKE__EMI_CKE | MUX_CONFIG_EMI, + + /* I2C */ + MX28_PAD_I2C0_SCL__I2C0_SCL, + MX28_PAD_I2C0_SDA__I2C0_SDA, + +}; + +#define HW_DRAM_CTL29 (0x74 >> 2) +#define CS_MAP 0xf +#define COLUMN_SIZE 0x2 +#define ADDR_PINS 0x1 +#define APREBIT 0xa + +#define HW_DRAM_CTL29_CONFIG (CS_MAP << 24 | COLUMN_SIZE << 16 | \ + ADDR_PINS << 8 | APREBIT) + +void mxs_adjust_memory_params(uint32_t *dram_vals) +{ + dram_vals[HW_DRAM_CTL29] = HW_DRAM_CTL29_CONFIG; +} + +void board_init_ll(const uint32_t arg, const uint32_t *resptr) +{ + mxs_common_spl_init(arg, resptr, iomux_setup, ARRAY_SIZE(iomux_setup)); +} diff --git a/board/technologic/ts4600/ts4600.c b/board/technologic/ts4600/ts4600.c new file mode 100644 index 0000000..70dfead --- /dev/null +++ b/board/technologic/ts4600/ts4600.c @@ -0,0 +1,89 @@ +/* + * (C) Copyright 2016 Savoir-faire Linux Inc. + * + * Author: Sebastien Bourdelin sebastien.bourdelin@savoirfairelinux.com + * + * Based on work from TS7680 code by: + * Kris Bahnsen kris@embeddedarm.com + * Mark Featherston mark@embeddedarm.com + * https://github.com/embeddedarm/u-boot/tree/master/board/technologic/ts7680 + * + * Derived from MX28EVK code by + * Freescale Semiconductor, Inc. + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +#include <common.h> +#include <asm/gpio.h> +#include <asm/io.h> +#include <asm/arch/imx-regs.h> +#include <asm/arch/iomux-mx28.h> +#include <asm/arch/clock.h> +#include <asm/arch/sys_proto.h> +#include <linux/mii.h> +#include <miiphy.h> +#include <netdev.h> +#include <errno.h> + +DECLARE_GLOBAL_DATA_PTR; + +int board_early_init_f(void) +{ + /* IO0 clock at 480MHz */ + mxs_set_ioclk(MXC_IOCLK0, 480000); + /* IO1 clock at 480MHz */ + mxs_set_ioclk(MXC_IOCLK1, 480000); + + /* SSP0 clocks at 96MHz */ + mxs_set_sspclk(MXC_SSPCLK0, 96000, 0); + + return 0; +} + +int dram_init(void) +{ + return mxs_dram_init(); +} + +int board_init(void) +{ + /* Adress of boot parameters */ + gd->bd->bi_boot_params = PHYS_SDRAM_1 + 0x100; + + return 0; +} + +#ifdef CONFIG_CMD_MMC +static int ts4600_mmc_cd(int id) +{ + return 1; +} + +int board_mmc_init(bd_t *bis) +{ + int ret; + + mxs_iomux_setup_pad(MX28_PAD_PWM3__GPIO_3_28); + + /* Power-on SD */ + gpio_direction_output(MX28_PAD_PWM3__GPIO_3_28, 1); + udelay(1000); + gpio_direction_output(MX28_PAD_PWM3__GPIO_3_28, 0); + + /* SD card */ + ret = mxsmmc_initialize(bis, 0, NULL, ts4600_mmc_cd); + if(ret != 0) { + printf("SD controller initialized with %d\n", ret); + } + + return ret; +} +#endif + +int checkboard(void) +{ + puts("Board: TS4600\n"); + + return 0; +} diff --git a/configs/ts4600_defconfig b/configs/ts4600_defconfig new file mode 100644 index 0000000..c052ded --- /dev/null +++ b/configs/ts4600_defconfig @@ -0,0 +1,18 @@ +CONFIG_ARM=y +CONFIG_TARGET_TS4600=y +CONFIG_SPL_LIBCOMMON_SUPPORT=y +CONFIG_SPL_LIBGENERIC_SUPPORT=y +CONFIG_FIT=y +CONFIG_SYS_EXTRA_OPTIONS="ENV_IS_IN_MMC" +CONFIG_SYS_CONSOLE_IS_IN_ENV=y +CONFIG_SPL=y +CONFIG_HUSH_PARSER=y +CONFIG_CMD_BOOTZ=y +# CONFIG_CMD_IMLS is not set +# CONFIG_CMD_FLASH is not set +CONFIG_CMD_MMC=y +CONFIG_CMD_EXT4=y +CONFIG_CMD_EXT4_WRITE=y +CONFIG_CMD_FAT=y +CONFIG_CMD_FS_GENERIC=y +CONFIG_OF_LIBFDT=y diff --git a/include/configs/ts4600.h b/include/configs/ts4600.h new file mode 100644 index 0000000..9c8d29d --- /dev/null +++ b/include/configs/ts4600.h @@ -0,0 +1,70 @@ +/* + * (C) Copyright 2016 Savoir-faire Linux Inc. + * + * Author: Sebastien Bourdelin sebastien.bourdelin@savoirfairelinux.com + * + * Derived from MX28EVK code by + * Fabio Estevam fabio.estevam@freescale.com + * Freescale Semiconductor, Inc. + * + * Configuration settings for the TS4600 Board + * + * SPDX-License-Identifier: GPL-2.0+ + */ +#ifndef __CONFIGS_TS4600_H__ +#define __CONFIGS_TS4600_H__ + +/* System configurations */ +#define CONFIG_MX28 /* i.MX28 SoC */ + +/* U-Boot Commands */ +#define CONFIG_SYS_NO_FLASH /* No NOR Flash */ +#define CONFIG_DOS_PARTITION + +/* Memory configuration */ +#define CONFIG_NR_DRAM_BANKS 1 /* 1 bank of DRAM */ +#define PHYS_SDRAM_1 0x40000000 /* Base address */ +#define PHYS_SDRAM_1_SIZE 0x40000000 /* Max 1 GB RAM */ +#define CONFIG_SYS_SDRAM_BASE PHYS_SDRAM_1 + +/* Environment */ +#define CONFIG_ENV_SIZE (8 * 1024) + +/* Environment is in MMC */ +#if defined(CONFIG_CMD_MMC) && defined(CONFIG_ENV_IS_IN_MMC) +#define CONFIG_ENV_OFFSET (256 * 1024) +#define CONFIG_SYS_MMC_ENV_DEV 0 +#endif + +/* Boot Linux */ +#define CONFIG_LOADADDR 0x42000000 +#define CONFIG_SYS_LOAD_ADDR CONFIG_LOADADDR + +/* Extra Environment */ +#define CONFIG_EXTRA_ENV_SETTINGS \ + "fdt_addr=0x41000000\0" \ + "loadkernel=load mmc ${mmcdev}:${mmcpart} ${loadaddr} zImage\0" \ + "loadfdt=load mmc ${mmcdev}:${mmcpart} ${fdt_addr} ts4600.dtb\0" \ + "loadbootscript=load mmc ${mmcdev}:${mmcpart} ${loadaddr} boot.ub\0" \ + "bootscript=echo Running bootscript from mmc...; " \ + "setenv mmcdev 0; " \ + "setenv mmcpart 2; " \ + "run loadbootscript && source ${loadaddr}; \0" \ + "sdboot=echo Booting from SD card ...; " \ + "setenv mmcdev 0; " \ + "setenv mmcpart 2; " \ + "setenv root /dev/mmcblk0p3; " \ + "run loadkernel && run loadfdt; \0" \ + "startbootsequence=run bootscript || run sdboot \0" \ + +#define CONFIG_BOOTCOMMAND \ + "mmc rescan; " \ + "run startbootsequence; " \ + "setenv cmdline_append console=ttyAMA0,115200; " \ + "setenv bootargs root=${root} rootwait rw ${cmdline_append}; " \ + "bootz ${loadaddr} - ${fdt_addr}; " + +/* The rest of the configuration is shared */ +#include <configs/mxs.h> + +#endif /* __CONFIGS_TS4600_H__ */

Hi,
I found an problem with this patch on the last rev B of the TS4600 due to a DRAM timing issue.
Please do not consider this patch until i post an other one.
Sorry for the noise,
Regards.
On 11/07/2016 02:30 PM, Sebastien Bourdelin wrote:
This commit adds basic support including: MMC, Serial console
Signed-off-by: Sebastien Bourdelin sebastien.bourdelin@savoirfairelinux.com
Changes v1 -> v2:
- remove useless define
- remove eMMC muxing and init which doesn't exist on the TS4600 board
- disable SSP1 and SSP2 clocks settings which are not currently used
Signed-off-by: Sebastien Bourdelin sebastien.bourdelin@savoirfairelinux.com
arch/arm/Kconfig | 6 ++ board/technologic/ts4600/Kconfig | 15 +++++ board/technologic/ts4600/MAINTAINERS | 6 ++ board/technologic/ts4600/Makefile | 11 ++++ board/technologic/ts4600/iomux.c | 119 +++++++++++++++++++++++++++++++++++ board/technologic/ts4600/ts4600.c | 89 ++++++++++++++++++++++++++ configs/ts4600_defconfig | 18 ++++++ include/configs/ts4600.h | 70 +++++++++++++++++++++ 8 files changed, 334 insertions(+) create mode 100644 board/technologic/ts4600/Kconfig create mode 100644 board/technologic/ts4600/MAINTAINERS create mode 100644 board/technologic/ts4600/Makefile create mode 100644 board/technologic/ts4600/iomux.c create mode 100644 board/technologic/ts4600/ts4600.c create mode 100644 configs/ts4600_defconfig create mode 100644 include/configs/ts4600.h
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig index d7a9b11..142c445 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig @@ -579,6 +579,11 @@ config ARCH_SUNXI select USB_KEYBOARD select USE_TINY_PRINTF
+config TARGET_TS4600
- bool "Support TS4600"
- select CPU_ARM926EJS
- select SUPPORT_SPL
config TARGET_TS4800 bool "Support TS4800" select CPU_V7 @@ -1015,6 +1020,7 @@ source "board/ti/ti816x/Kconfig" source "board/timll/devkit3250/Kconfig" source "board/toradex/colibri_pxa270/Kconfig" source "board/toradex/colibri_vf/Kconfig" +source "board/technologic/ts4600/Kconfig" source "board/technologic/ts4800/Kconfig" source "board/vscom/baltos/Kconfig" source "board/woodburn/Kconfig" diff --git a/board/technologic/ts4600/Kconfig b/board/technologic/ts4600/Kconfig new file mode 100644 index 0000000..d0dc2e1 --- /dev/null +++ b/board/technologic/ts4600/Kconfig @@ -0,0 +1,15 @@ +if TARGET_TS4600
+config SYS_BOARD
- default "ts4600"
+config SYS_VENDOR
- default "technologic"
+config SYS_SOC
- default "mxs"
+config SYS_CONFIG_NAME
- default "ts4600"
+endif diff --git a/board/technologic/ts4600/MAINTAINERS b/board/technologic/ts4600/MAINTAINERS new file mode 100644 index 0000000..6f683b5 --- /dev/null +++ b/board/technologic/ts4600/MAINTAINERS @@ -0,0 +1,6 @@ +TS4600 BOARD +M: Sebastien Bourdelin sebastien.bourdelin@savoirfairelinux.com +S: Maintained +F: board/technologic/ts4600/ +F: include/configs/ts4600.h +F: configs/ts4600_defconfig diff --git a/board/technologic/ts4600/Makefile b/board/technologic/ts4600/Makefile new file mode 100644 index 0000000..faa2970 --- /dev/null +++ b/board/technologic/ts4600/Makefile @@ -0,0 +1,11 @@ +# +# (C) Copyright 2016 Savoir-faire Linux +# +# SPDX-License-Identifier: GPL-2.0+ +#
+ifndef CONFIG_SPL_BUILD +obj-y := ts4600.o +else +obj-y := iomux.o +endif diff --git a/board/technologic/ts4600/iomux.c b/board/technologic/ts4600/iomux.c new file mode 100644 index 0000000..11d1723 --- /dev/null +++ b/board/technologic/ts4600/iomux.c @@ -0,0 +1,119 @@ +/*
- (C) Copyright 2016 Savoir-faire Linux Inc.
- Author: Sebastien Bourdelin sebastien.bourdelin@savoirfairelinux.com
- Based on work from TS7680 code by:
- Kris Bahnsen kris@embeddedarm.com
- Mark Featherston mark@embeddedarm.com
- Derived from MX28EVK code by
- Freescale Semiconductor, Inc.
- SPDX-License-Identifier: GPL-2.0+
- */
+#include <common.h> +#include <config.h> +#include <asm/io.h> +#include <asm/arch/iomux-mx28.h> +#include <asm/arch/imx-regs.h> +#include <asm/arch/sys_proto.h>
+#define MUX_CONFIG_SSP0 (MXS_PAD_3V3 | MXS_PAD_8MA | MXS_PAD_PULLUP) +#define MUX_CONFIG_EMI (MXS_PAD_3V3 | MXS_PAD_12MA | MXS_PAD_NOPULL)
+const iomux_cfg_t iomux_setup[] = {
- /* DUART */
- MX28_PAD_PWM0__DUART_RX,
- MX28_PAD_PWM1__DUART_TX,
- /* MMC0 */
- MX28_PAD_SSP0_DATA0__SSP0_D0 | MUX_CONFIG_SSP0,
- MX28_PAD_SSP0_DATA1__SSP0_D1 | MUX_CONFIG_SSP0,
- MX28_PAD_SSP0_DATA2__SSP0_D2 | MUX_CONFIG_SSP0,
- MX28_PAD_SSP0_DATA3__SSP0_D3 | MUX_CONFIG_SSP0,
- MX28_PAD_SSP0_CMD__SSP0_CMD | MUX_CONFIG_SSP0,
- MX28_PAD_SSP0_SCK__SSP0_SCK |
(MXS_PAD_12MA | MXS_PAD_3V3 | MXS_PAD_NOPULL),
- /* MMC0 slot power enable */
- MX28_PAD_PWM3__GPIO_3_28 |
(MXS_PAD_12MA | MXS_PAD_3V3 | MXS_PAD_PULLUP),
- /* EMI */
- MX28_PAD_EMI_D00__EMI_DATA0 | MUX_CONFIG_EMI,
- MX28_PAD_EMI_D01__EMI_DATA1 | MUX_CONFIG_EMI,
- MX28_PAD_EMI_D02__EMI_DATA2 | MUX_CONFIG_EMI,
- MX28_PAD_EMI_D03__EMI_DATA3 | MUX_CONFIG_EMI,
- MX28_PAD_EMI_D04__EMI_DATA4 | MUX_CONFIG_EMI,
- MX28_PAD_EMI_D05__EMI_DATA5 | MUX_CONFIG_EMI,
- MX28_PAD_EMI_D06__EMI_DATA6 | MUX_CONFIG_EMI,
- MX28_PAD_EMI_D07__EMI_DATA7 | MUX_CONFIG_EMI,
- MX28_PAD_EMI_D08__EMI_DATA8 | MUX_CONFIG_EMI,
- MX28_PAD_EMI_D09__EMI_DATA9 | MUX_CONFIG_EMI,
- MX28_PAD_EMI_D10__EMI_DATA10 | MUX_CONFIG_EMI,
- MX28_PAD_EMI_D11__EMI_DATA11 | MUX_CONFIG_EMI,
- MX28_PAD_EMI_D12__EMI_DATA12 | MUX_CONFIG_EMI,
- MX28_PAD_EMI_D13__EMI_DATA13 | MUX_CONFIG_EMI,
- MX28_PAD_EMI_D14__EMI_DATA14 | MUX_CONFIG_EMI,
- MX28_PAD_EMI_D15__EMI_DATA15 | MUX_CONFIG_EMI,
- MX28_PAD_EMI_ODT0__EMI_ODT0 | MUX_CONFIG_EMI,
- MX28_PAD_EMI_DQM0__EMI_DQM0 | MUX_CONFIG_EMI,
- MX28_PAD_EMI_ODT1__EMI_ODT1 | MUX_CONFIG_EMI,
- MX28_PAD_EMI_DQM1__EMI_DQM1 | MUX_CONFIG_EMI,
- MX28_PAD_EMI_DDR_OPEN_FB__EMI_DDR_OPEN_FEEDBACK | MUX_CONFIG_EMI,
- MX28_PAD_EMI_CLK__EMI_CLK | MUX_CONFIG_EMI,
- MX28_PAD_EMI_DQS0__EMI_DQS0 | MUX_CONFIG_EMI,
- MX28_PAD_EMI_DQS1__EMI_DQS1 | MUX_CONFIG_EMI,
- MX28_PAD_EMI_DDR_OPEN__EMI_DDR_OPEN | MUX_CONFIG_EMI,
- MX28_PAD_EMI_A00__EMI_ADDR0 | MUX_CONFIG_EMI,
- MX28_PAD_EMI_A01__EMI_ADDR1 | MUX_CONFIG_EMI,
- MX28_PAD_EMI_A02__EMI_ADDR2 | MUX_CONFIG_EMI,
- MX28_PAD_EMI_A03__EMI_ADDR3 | MUX_CONFIG_EMI,
- MX28_PAD_EMI_A04__EMI_ADDR4 | MUX_CONFIG_EMI,
- MX28_PAD_EMI_A05__EMI_ADDR5 | MUX_CONFIG_EMI,
- MX28_PAD_EMI_A06__EMI_ADDR6 | MUX_CONFIG_EMI,
- MX28_PAD_EMI_A07__EMI_ADDR7 | MUX_CONFIG_EMI,
- MX28_PAD_EMI_A08__EMI_ADDR8 | MUX_CONFIG_EMI,
- MX28_PAD_EMI_A09__EMI_ADDR9 | MUX_CONFIG_EMI,
- MX28_PAD_EMI_A10__EMI_ADDR10 | MUX_CONFIG_EMI,
- MX28_PAD_EMI_A11__EMI_ADDR11 | MUX_CONFIG_EMI,
- MX28_PAD_EMI_A12__EMI_ADDR12 | MUX_CONFIG_EMI,
- MX28_PAD_EMI_A13__EMI_ADDR13 | MUX_CONFIG_EMI,
- MX28_PAD_EMI_A14__EMI_ADDR14 | MUX_CONFIG_EMI,
- MX28_PAD_EMI_BA0__EMI_BA0 | MUX_CONFIG_EMI,
- MX28_PAD_EMI_BA1__EMI_BA1 | MUX_CONFIG_EMI,
- MX28_PAD_EMI_BA2__EMI_BA2 | MUX_CONFIG_EMI,
- MX28_PAD_EMI_CASN__EMI_CASN | MUX_CONFIG_EMI,
- MX28_PAD_EMI_RASN__EMI_RASN | MUX_CONFIG_EMI,
- MX28_PAD_EMI_WEN__EMI_WEN | MUX_CONFIG_EMI,
- MX28_PAD_EMI_CE0N__EMI_CE0N | MUX_CONFIG_EMI,
- MX28_PAD_EMI_CE1N__EMI_CE1N | MUX_CONFIG_EMI,
- MX28_PAD_EMI_CKE__EMI_CKE | MUX_CONFIG_EMI,
- /* I2C */
- MX28_PAD_I2C0_SCL__I2C0_SCL,
- MX28_PAD_I2C0_SDA__I2C0_SDA,
+};
+#define HW_DRAM_CTL29 (0x74 >> 2) +#define CS_MAP 0xf +#define COLUMN_SIZE 0x2 +#define ADDR_PINS 0x1 +#define APREBIT 0xa
+#define HW_DRAM_CTL29_CONFIG (CS_MAP << 24 | COLUMN_SIZE << 16 | \
ADDR_PINS << 8 | APREBIT)
+void mxs_adjust_memory_params(uint32_t *dram_vals) +{
- dram_vals[HW_DRAM_CTL29] = HW_DRAM_CTL29_CONFIG;
+}
+void board_init_ll(const uint32_t arg, const uint32_t *resptr) +{
- mxs_common_spl_init(arg, resptr, iomux_setup, ARRAY_SIZE(iomux_setup));
+} diff --git a/board/technologic/ts4600/ts4600.c b/board/technologic/ts4600/ts4600.c new file mode 100644 index 0000000..70dfead --- /dev/null +++ b/board/technologic/ts4600/ts4600.c @@ -0,0 +1,89 @@ +/*
- (C) Copyright 2016 Savoir-faire Linux Inc.
- Author: Sebastien Bourdelin sebastien.bourdelin@savoirfairelinux.com
- Based on work from TS7680 code by:
- Kris Bahnsen kris@embeddedarm.com
- Mark Featherston mark@embeddedarm.com
- Derived from MX28EVK code by
- Freescale Semiconductor, Inc.
- SPDX-License-Identifier: GPL-2.0+
- */
+#include <common.h> +#include <asm/gpio.h> +#include <asm/io.h> +#include <asm/arch/imx-regs.h> +#include <asm/arch/iomux-mx28.h> +#include <asm/arch/clock.h> +#include <asm/arch/sys_proto.h> +#include <linux/mii.h> +#include <miiphy.h> +#include <netdev.h> +#include <errno.h>
+DECLARE_GLOBAL_DATA_PTR;
+int board_early_init_f(void) +{
- /* IO0 clock at 480MHz */
- mxs_set_ioclk(MXC_IOCLK0, 480000);
- /* IO1 clock at 480MHz */
- mxs_set_ioclk(MXC_IOCLK1, 480000);
- /* SSP0 clocks at 96MHz */
- mxs_set_sspclk(MXC_SSPCLK0, 96000, 0);
- return 0;
+}
+int dram_init(void) +{
- return mxs_dram_init();
+}
+int board_init(void) +{
- /* Adress of boot parameters */
- gd->bd->bi_boot_params = PHYS_SDRAM_1 + 0x100;
- return 0;
+}
+#ifdef CONFIG_CMD_MMC +static int ts4600_mmc_cd(int id) +{
- return 1;
+}
+int board_mmc_init(bd_t *bis) +{
- int ret;
- mxs_iomux_setup_pad(MX28_PAD_PWM3__GPIO_3_28);
- /* Power-on SD */
- gpio_direction_output(MX28_PAD_PWM3__GPIO_3_28, 1);
- udelay(1000);
- gpio_direction_output(MX28_PAD_PWM3__GPIO_3_28, 0);
- /* SD card */
- ret = mxsmmc_initialize(bis, 0, NULL, ts4600_mmc_cd);
- if(ret != 0) {
printf("SD controller initialized with %d\n", ret);
- }
- return ret;
+} +#endif
+int checkboard(void) +{
- puts("Board: TS4600\n");
- return 0;
+} diff --git a/configs/ts4600_defconfig b/configs/ts4600_defconfig new file mode 100644 index 0000000..c052ded --- /dev/null +++ b/configs/ts4600_defconfig @@ -0,0 +1,18 @@ +CONFIG_ARM=y +CONFIG_TARGET_TS4600=y +CONFIG_SPL_LIBCOMMON_SUPPORT=y +CONFIG_SPL_LIBGENERIC_SUPPORT=y +CONFIG_FIT=y +CONFIG_SYS_EXTRA_OPTIONS="ENV_IS_IN_MMC" +CONFIG_SYS_CONSOLE_IS_IN_ENV=y +CONFIG_SPL=y +CONFIG_HUSH_PARSER=y +CONFIG_CMD_BOOTZ=y +# CONFIG_CMD_IMLS is not set +# CONFIG_CMD_FLASH is not set +CONFIG_CMD_MMC=y +CONFIG_CMD_EXT4=y +CONFIG_CMD_EXT4_WRITE=y +CONFIG_CMD_FAT=y +CONFIG_CMD_FS_GENERIC=y +CONFIG_OF_LIBFDT=y diff --git a/include/configs/ts4600.h b/include/configs/ts4600.h new file mode 100644 index 0000000..9c8d29d --- /dev/null +++ b/include/configs/ts4600.h @@ -0,0 +1,70 @@ +/*
- (C) Copyright 2016 Savoir-faire Linux Inc.
- Author: Sebastien Bourdelin sebastien.bourdelin@savoirfairelinux.com
- Derived from MX28EVK code by
- Fabio Estevam fabio.estevam@freescale.com
- Freescale Semiconductor, Inc.
- Configuration settings for the TS4600 Board
- SPDX-License-Identifier: GPL-2.0+
- */
+#ifndef __CONFIGS_TS4600_H__ +#define __CONFIGS_TS4600_H__
+/* System configurations */ +#define CONFIG_MX28 /* i.MX28 SoC */
+/* U-Boot Commands */ +#define CONFIG_SYS_NO_FLASH /* No NOR Flash */ +#define CONFIG_DOS_PARTITION
+/* Memory configuration */ +#define CONFIG_NR_DRAM_BANKS 1 /* 1 bank of DRAM */ +#define PHYS_SDRAM_1 0x40000000 /* Base address */ +#define PHYS_SDRAM_1_SIZE 0x40000000 /* Max 1 GB RAM */ +#define CONFIG_SYS_SDRAM_BASE PHYS_SDRAM_1
+/* Environment */ +#define CONFIG_ENV_SIZE (8 * 1024)
+/* Environment is in MMC */ +#if defined(CONFIG_CMD_MMC) && defined(CONFIG_ENV_IS_IN_MMC) +#define CONFIG_ENV_OFFSET (256 * 1024) +#define CONFIG_SYS_MMC_ENV_DEV 0 +#endif
+/* Boot Linux */ +#define CONFIG_LOADADDR 0x42000000 +#define CONFIG_SYS_LOAD_ADDR CONFIG_LOADADDR
+/* Extra Environment */ +#define CONFIG_EXTRA_ENV_SETTINGS \
- "fdt_addr=0x41000000\0" \
- "loadkernel=load mmc ${mmcdev}:${mmcpart} ${loadaddr} zImage\0" \
- "loadfdt=load mmc ${mmcdev}:${mmcpart} ${fdt_addr} ts4600.dtb\0" \
- "loadbootscript=load mmc ${mmcdev}:${mmcpart} ${loadaddr} boot.ub\0" \
- "bootscript=echo Running bootscript from mmc...; " \
"setenv mmcdev 0; " \
"setenv mmcpart 2; " \
"run loadbootscript && source ${loadaddr}; \0" \
- "sdboot=echo Booting from SD card ...; " \
"setenv mmcdev 0; " \
"setenv mmcpart 2; " \
"setenv root /dev/mmcblk0p3; " \
"run loadkernel && run loadfdt; \0" \
- "startbootsequence=run bootscript || run sdboot \0" \
+#define CONFIG_BOOTCOMMAND \
- "mmc rescan; " \
- "run startbootsequence; " \
- "setenv cmdline_append console=ttyAMA0,115200; " \
- "setenv bootargs root=${root} rootwait rw ${cmdline_append}; " \
- "bootz ${loadaddr} - ${fdt_addr}; "
+/* The rest of the configuration is shared */ +#include <configs/mxs.h>
+#endif /* __CONFIGS_TS4600_H__ */
participants (2)
-
Fabio Estevam
-
Sebastien Bourdelin