diff --git a/arch/arm/mach-imx/mx7/Kconfig b/arch/arm/mach-imx/mx7/Kconfig index 2a3db860bbcfeb7314a395dba61f37ee277d0c4e..cbc3ef71c81723b40839e455325055120bea45e2 100644 --- a/arch/arm/mach-imx/mx7/Kconfig +++ b/arch/arm/mach-imx/mx7/Kconfig @@ -55,11 +55,18 @@ config TARGET_COLIBRI_IMX7 select DM_SERIAL select DM_THERMAL +config TARGET_NITROGEN7 + bool "nitrogen7" + select CPU_V7 + select DM + select DM_THERMAL + endchoice config SYS_SOC default "mx7" +source "board/boundary/nitrogen7/Kconfig" source "board/compulab/cl-som-imx7/Kconfig" source "board/freescale/mx7dsabresd/Kconfig" source "board/technexion/pico-imx7d/Kconfig" diff --git a/board/boundary/nitrogen7/Kconfig b/board/boundary/nitrogen7/Kconfig new file mode 100644 index 0000000000000000000000000000000000000000..f0cd1432feb327bc53f86859dc6d0bbdc668e769 --- /dev/null +++ b/board/boundary/nitrogen7/Kconfig @@ -0,0 +1,21 @@ +if TARGET_NITROGEN7 + +config SYS_BOARD + default "nitrogen7" + +config SYS_VENDOR + default "boundary" + +config SYS_SOC + default "mx7" + +config SYS_CONFIG_NAME + default "nitrogen7" + +config ENV_WLMAC + bool + default y + +source "board/boundary/common/Kconfig" + +endif diff --git a/board/boundary/nitrogen7/MAINTAINERS b/board/boundary/nitrogen7/MAINTAINERS new file mode 100644 index 0000000000000000000000000000000000000000..201e393d6c94cf57aad94e9ab765a7523bdf1023 --- /dev/null +++ b/board/boundary/nitrogen7/MAINTAINERS @@ -0,0 +1,6 @@ +NITROGEN7 BOARD +M: Troy Kisky <troy.kisky@boundarydevices.com> +S: Maintained +F: board/boundary/nitrogen7 +F: include/configs/nitrogen7.h +F: configs/nitrogen7_defconfig diff --git a/board/boundary/nitrogen7/Makefile b/board/boundary/nitrogen7/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..72708afc06beb7c13b717e896e2342e4f8a5490c --- /dev/null +++ b/board/boundary/nitrogen7/Makefile @@ -0,0 +1,6 @@ +# (C) Copyright 2015 Freescale Semiconductor, Inc. +# +# SPDX-License-Identifier: GPL-2.0+ +# + +obj-y := nitrogen7.o diff --git a/board/boundary/nitrogen7/nitrogen7.c b/board/boundary/nitrogen7/nitrogen7.c new file mode 100644 index 0000000000000000000000000000000000000000..8a4448f5bc929f6e671dfbd50530a76c1272b654 --- /dev/null +++ b/board/boundary/nitrogen7/nitrogen7.c @@ -0,0 +1,484 @@ +/* + * Copyright (C) 2015 Freescale Semiconductor, Inc. + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +#include <asm/arch/clock.h> +#include <asm/arch/imx-regs.h> +#include <asm/arch/mx7-pins.h> +#include <asm/arch/sys_proto.h> +#include <asm/gpio.h> +#include <asm/mach-imx/iomux-v3.h> +#include <asm/mach-imx/boot_mode.h> +#include <asm/mach-imx/fbpanel.h> +#include <asm/io.h> +#include <linux/sizes.h> +#include <common.h> +#include <fsl_esdhc.h> +#include <malloc.h> +#include <mmc.h> +#include <power/pmic.h> +#include <power/pfuze3000_pmic.h> +#include "../../freescale/common/pfuze.h" +#include <i2c.h> +#include <asm/mach-imx/mxc_i2c.h> +#include <asm/arch/crm_regs.h> +#include <usb.h> +#include "../common/bd_common.h" +#include "../common/padctrl.h" + +DECLARE_GLOBAL_DATA_PTR; + +#define UART_PAD_CTRL (PAD_CTL_DSE_3P3V_49OHM | \ + PAD_CTL_PUS_PU100KOHM | PAD_CTL_HYS) + +#define USDHC_PAD_CTRL (PAD_CTL_DSE_3P3V_32OHM | PAD_CTL_SRE_SLOW | \ + PAD_CTL_HYS | PAD_CTL_PUE | PAD_CTL_PUS_PU47KOHM) + +#define I2C_PAD_CTRL (PAD_CTL_DSE_3P3V_32OHM | PAD_CTL_SRE_SLOW | \ + PAD_CTL_HYS | PAD_CTL_PUE | PAD_CTL_PUS_PU100KOHM) + +#define QSPI_PAD_CTRL (PAD_CTL_SRE_FAST | PAD_CTL_PUS_PU100KOHM | PAD_CTL_DSE_3P3V_49OHM) + +#define RGB_PAD_CTRL PAD_CTL_DSE_3P3V_49OHM + +#define SETUP_IOMUX_PADS(x) \ + imx_iomux_v3_setup_multiple_pads(x, ARRAY_SIZE(x)) + +static const iomux_v3_cfg_t init_pads[] = { + /* fec */ +#ifdef CONFIG_FEC_MXC + /* PHY - AR8035 */ + IOMUX_PAD_CTRL(GPIO1_IO10__ENET1_MDIO, PAD_CTRL_ENET_MDIO), + IOMUX_PAD_CTRL(GPIO1_IO11__ENET1_MDC, PAD_CTRL_ENET_MDC), + IOMUX_PAD_CTRL(ENET1_RGMII_TX_CTL__ENET1_RGMII_TX_CTL, PAD_CTRL_ENET_TX), + IOMUX_PAD_CTRL(ENET1_RGMII_TD0__ENET1_RGMII_TD0, PAD_CTRL_ENET_TX), + IOMUX_PAD_CTRL(ENET1_RGMII_TD1__ENET1_RGMII_TD1, PAD_CTRL_ENET_TX), + IOMUX_PAD_CTRL(ENET1_RGMII_TD2__ENET1_RGMII_TD2, PAD_CTRL_ENET_TX), + IOMUX_PAD_CTRL(ENET1_RGMII_TD3__ENET1_RGMII_TD3, PAD_CTRL_ENET_TX), + IOMUX_PAD_CTRL(ENET1_RGMII_TXC__ENET1_RGMII_TXC, PAD_CTRL_ENET_TX), + IOMUX_PAD_CTRL(GPIO1_IO12__CCM_ENET_REF_CLK1, PAD_CTRL_ENET_TX), +#endif +#define GP_RGMII_PHY_RESET IMX_GPIO_NR(6, 10) + IOMUX_PAD_CTRL(SD3_STROBE__GPIO6_IO10, WEAK_PULLUP), +#define GPIRQ_ENET_PHY IMX_GPIO_NR(1, 2) + IOMUX_PAD_CTRL(GPIO1_IO02__GPIO1_IO2, WEAK_PULLUP), + + /* flexcan2 */ + IOMUX_PAD_CTRL(GPIO1_IO14__FLEXCAN2_RX, WEAK_PULLUP), + IOMUX_PAD_CTRL(GPIO1_IO15__FLEXCAN2_TX, WEAK_PULLUP), +#define GP_CAN_STANDBY IMX_GPIO_NR(2, 14) + IOMUX_PAD_CTRL(EPDC_DATA14__GPIO2_IO14, WEAK_PULLUP), + + /* GPIOs - J2 */ + IOMUX_PAD_CTRL(SAI1_TX_DATA__GPIO6_IO15, WEAK_PULLUP), /* pin 1 */ + IOMUX_PAD_CTRL(SAI1_RX_DATA__GPIO6_IO12, WEAK_PULLUP), /* pin 3 */ + IOMUX_PAD_CTRL(SD1_WP__GPIO5_IO1, WEAK_PULLUP), /* pin 5 */ + IOMUX_PAD_CTRL(SD1_RESET_B__GPIO5_IO2, WEAK_PULLUP), /* pin 7 */ + IOMUX_PAD_CTRL(EPDC_DATA07__GPIO2_IO7, WEAK_PULLUP), /* pin 15 */ + IOMUX_PAD_CTRL(EPDC_DATA08__GPIO2_IO8, WEAK_PULLUP), /* pin 17 */ + IOMUX_PAD_CTRL(EPDC_DATA09__GPIO2_IO9, WEAK_PULLUP), /* pin 19 */ + IOMUX_PAD_CTRL(EPDC_DATA10__GPIO2_IO10, WEAK_PULLUP), /* pin 21 */ + IOMUX_PAD_CTRL(EPDC_DATA11__GPIO2_IO11, WEAK_PULLUP), /* pin 23 */ + IOMUX_PAD_CTRL(EPDC_DATA12__GPIO2_IO12, WEAK_PULLUP), /* pin 25 */ + IOMUX_PAD_CTRL(EPDC_DATA13__GPIO2_IO13, WEAK_PULLUP), /* pin 27 */ + IOMUX_PAD_CTRL(EPDC_GDCLK__GPIO2_IO24, WEAK_PULLUP), /* pin 33 */ + IOMUX_PAD_CTRL(EPDC_GDOE__GPIO2_IO25, WEAK_PULLUP), /* pin 35 */ + IOMUX_PAD_CTRL(EPDC_GDRL__GPIO2_IO26, WEAK_PULLUP), /* pin 37 */ + IOMUX_PAD_CTRL(EPDC_SDCE0__GPIO2_IO20, WEAK_PULLUP), /* pin 39 */ + IOMUX_PAD_CTRL(EPDC_SDCE1__GPIO2_IO21, WEAK_PULLUP), /* pin 41 */ + IOMUX_PAD_CTRL(EPDC_SDCE2__GPIO2_IO22, WEAK_PULLUP), /* pin 43 */ + IOMUX_PAD_CTRL(EPDC_SDCE3__GPIO2_IO23, WEAK_PULLUP), /* pin 45 */ + IOMUX_PAD_CTRL(EPDC_GDSP__GPIO2_IO27, WEAK_PULLUP), /* pin 47 */ + IOMUX_PAD_CTRL(EPDC_SDCLK__GPIO2_IO16, WEAK_PULLUP), /* pin 51 */ + IOMUX_PAD_CTRL(EPDC_SDLE__GPIO2_IO17, WEAK_PULLUP), /* pin 53 */ + IOMUX_PAD_CTRL(EPDC_SDOE__GPIO2_IO18, WEAK_PULLUP), /* pin 55 */ + IOMUX_PAD_CTRL(EPDC_PWR_COM__GPIO2_IO30, WEAK_PULLUP), /* pin 57 */ + IOMUX_PAD_CTRL(EPDC_PWR_STAT__GPIO2_IO31, WEAK_PULLUP), /* pin 59 */ + + IOMUX_PAD_CTRL(EPDC_BDR0__GPIO2_IO28, WEAK_PULLUP), /* pin 2 */ + IOMUX_PAD_CTRL(EPDC_BDR1__GPIO2_IO29, WEAK_PULLUP), /* pin 4 */ + IOMUX_PAD_CTRL(EPDC_SDSHR__GPIO2_IO19, WEAK_PULLUP), /* pin 6 */ + IOMUX_PAD_CTRL(SD2_RESET_B__GPIO5_IO11, WEAK_PULLUP), /* pin 10 */ + IOMUX_PAD_CTRL(SAI1_TX_SYNC__GPIO6_IO14, WEAK_PULLUP), /* pin 26 */ + IOMUX_PAD_CTRL(SAI1_TX_BCLK__GPIO6_IO13, WEAK_PULLUP), /* pin 28 */ + IOMUX_PAD_CTRL(SD2_CD_B__GPIO5_IO9, WEAK_PULLUP), /* pin 30 */ + IOMUX_PAD_CTRL(SAI2_RX_DATA__GPIO6_IO21, WEAK_PULLUP), /* pin 34 */ + IOMUX_PAD_CTRL(SAI2_TX_DATA__GPIO6_IO22, WEAK_PULLUP), /* pin 38 */ + IOMUX_PAD_CTRL(SAI2_TX_BCLK__GPIO6_IO20, WEAK_PULLUP), /* pin 40 */ + IOMUX_PAD_CTRL(SAI2_TX_SYNC__GPIO6_IO19, WEAK_PULLUP), /* pin 42 */ + + /* i2c1 - pmic */ +#define GP_PMIC_INT_B IMX_GPIO_NR(4, 22) + IOMUX_PAD_CTRL(ECSPI2_MISO__GPIO4_IO22, WEAK_PULLUP), + + /* i2c2 - rv4162 */ +#define GP_RTC IMX_GPIO_NR(2, 15) + IOMUX_PAD_CTRL(EPDC_DATA15__GPIO2_IO15, WEAK_PULLUP), + + /* i2c2a */ +#define GP_I2C2A_EN IMX_GPIO_NR(1, 7) + IOMUX_PAD_CTRL(GPIO1_IO07__GPIO1_IO7, WEAK_PULLUP), +#define GP_MIPI IMX_GPIO_NR(1, 6) + IOMUX_PAD_CTRL(GPIO1_IO06__GPIO1_IO6, WEAK_PULLUP), +#define GP_MIPI_BACKLIGHT IMX_GPIO_NR(1, 13) + IOMUX_PAD_CTRL(GPIO1_IO13__GPIO1_IO13, WEAK_PULLUP), + + /* i2c3 - J9, J2(gpio connector), J20(rgb connector) */ +#define GP_I2C_TOUCH IMX_GPIO_NR(5, 10) +// IOMUX_PAD_CTRL(SD2_WP__GPIO5_IO10, WEAK_PULLUP), + /* i2c4 - PCIe, WM8960*/ + + /* PCIe */ +#define GP_PCIE_DISABLE IMX_GPIO_NR(6, 17) + IOMUX_PAD_CTRL(SAI1_RX_BCLK__GPIO6_IO17, WEAK_PULLUP), +#define GP_PCIE_RESET IMX_GPIO_NR(6, 16) + IOMUX_PAD_CTRL(SAI1_RX_SYNC__GPIO6_IO16, WEAK_PULLUP), + + /* PWM1 - rgb */ +#define GP_BACKLIGHT_RGB IMX_GPIO_NR(1, 1) + IOMUX_PAD_CTRL(GPIO1_IO01__GPIO1_IO1, WEAK_PULLDN_OUTPUT), +// IOMUX_PAD_CTRL(GPIO1_IO01__PWM1_OUT, WEAK_PULLDN_OUTPUT), + + /* PWM2 */ + IOMUX_PAD_CTRL(GPIO1_IO09__PWM2_OUT, WEAK_PULLUP), + + /* QSPIA */ + IOMUX_PAD_CTRL(EPDC_DATA00__QSPI_A_DATA0, QSPI_PAD_CTRL), + IOMUX_PAD_CTRL(EPDC_DATA01__QSPI_A_DATA1, QSPI_PAD_CTRL), +#if 1 + IOMUX_PAD_CTRL(EPDC_DATA02__QSPI_A_DATA2, QSPI_PAD_CTRL), + IOMUX_PAD_CTRL(EPDC_DATA03__QSPI_A_DATA3, QSPI_PAD_CTRL), +#else +#define GP_SPI_nWP IMX_GPIO_NR(2, 2) + IOMUX_PAD_CTRL(EPDC_DATA02__GPIO2_IO2, WEAK_PULLUP), +#define GP_SPI_nHOLD IMX_GPIO_NR(2, 3) + IOMUX_PAD_CTRL(EPDC_DATA03__GPIO2_IO3, WEAK_PULLUP), +#endif + IOMUX_PAD_CTRL(EPDC_DATA05__QSPI_A_SCLK, QSPI_PAD_CTRL), + IOMUX_PAD_CTRL(EPDC_DATA06__QSPI_A_SS0_B, QSPI_PAD_CTRL), + + /* SAI1 - wm8960 on i2c4 */ + IOMUX_PAD_CTRL(ENET1_CRS__SAI1_TX_SYNC, WEAK_PULLUP), + IOMUX_PAD_CTRL(ENET1_RX_CLK__SAI1_TX_BCLK, WEAK_PULLUP), + IOMUX_PAD_CTRL(ENET1_TX_CLK__SAI1_RX_DATA0, WEAK_PULLUP), + IOMUX_PAD_CTRL(ENET1_COL__SAI1_TX_DATA0, WEAK_PULLUP), + IOMUX_PAD_CTRL(SAI1_MCLK__SAI1_MCLK, WEAK_PULLUP), + + /* uart1 */ + IOMUX_PAD_CTRL(UART1_TX_DATA__UART1_DCE_TX, UART_PAD_CTRL), + IOMUX_PAD_CTRL(UART1_RX_DATA__UART1_DCE_RX, UART_PAD_CTRL), + + /* uart2 */ + IOMUX_PAD_CTRL(UART2_TX_DATA__UART2_DCE_TX, UART_PAD_CTRL), + IOMUX_PAD_CTRL(UART2_RX_DATA__UART2_DCE_RX, UART_PAD_CTRL), + + /* uart3 */ + IOMUX_PAD_CTRL(UART3_TX_DATA__UART3_DCE_TX, UART_PAD_CTRL), + IOMUX_PAD_CTRL(UART3_RX_DATA__UART3_DCE_RX, UART_PAD_CTRL), +#define GP_UART3_RS485_TX IMX_GPIO_NR(2, 4) + IOMUX_PAD_CTRL(EPDC_DATA04__GPIO2_IO4, WEAK_PULLUP), + + /* uart6 - bluetooth */ + IOMUX_PAD_CTRL(ECSPI1_MOSI__UART6_DCE_TX, UART_PAD_CTRL), + IOMUX_PAD_CTRL(ECSPI1_SCLK__UART6_DCE_RX, UART_PAD_CTRL), + IOMUX_PAD_CTRL(ECSPI1_MISO__UART6_DCE_RTS, UART_PAD_CTRL), + IOMUX_PAD_CTRL(ECSPI1_SS0__UART6_DCE_CTS, UART_PAD_CTRL), + +#ifdef CONFIG_USB_EHCI_MX7 + /* usbotg1 */ + IOMUX_PAD_CTRL(GPIO1_IO04__USB_OTG1_OC, WEAK_PULLUP), + IOMUX_PAD_CTRL(GPIO1_IO05__USB_OTG1_PWR, WEAK_PULLUP), +// IOMUX_PAD_CTRL(SD2_WP__USB_OTG1_ID, WEAK_PULLUP), +#define GP_OTG1_ID IMX_GPIO_NR(5, 10) + IOMUX_PAD_CTRL(SD2_WP__GPIO5_IO10, WEAK_PULLUP), + + /* usbotg2 */ + IOMUX_PAD_CTRL(UART3_RTS_B__USB_OTG2_OC, WEAK_PULLUP), + IOMUX_PAD_CTRL(UART3_CTS_B__USB_OTG2_PWR, WEAK_PULLUP), +#endif + + /* usdhc1 */ + IOMUX_PAD_CTRL(SD1_CLK__SD1_CLK, USDHC_PAD_CTRL), + IOMUX_PAD_CTRL(SD1_CMD__SD1_CMD, USDHC_PAD_CTRL), + IOMUX_PAD_CTRL(SD1_DATA0__SD1_DATA0, USDHC_PAD_CTRL), + IOMUX_PAD_CTRL(SD1_DATA1__SD1_DATA1, USDHC_PAD_CTRL), + IOMUX_PAD_CTRL(SD1_DATA2__SD1_DATA2, USDHC_PAD_CTRL), + IOMUX_PAD_CTRL(SD1_DATA3__SD1_DATA3, USDHC_PAD_CTRL), +#define GP_USDHC1_CD IMX_GPIO_NR(5, 0) + IOMUX_PAD_CTRL(SD1_CD_B__GPIO5_IO0, USDHC_PAD_CTRL), +#define GP_PMIC_SD1_VSEL IMX_GPIO_NR(1, 8) + IOMUX_PAD_CTRL(GPIO1_IO08__SD1_VSELECT, WEAK_PULLUP), + + /* usdhc2 - murata wifi */ + IOMUX_PAD_CTRL(SD2_CLK__SD2_CLK, USDHC_PAD_CTRL), + IOMUX_PAD_CTRL(SD2_CMD__SD2_CMD, USDHC_PAD_CTRL), + IOMUX_PAD_CTRL(SD2_DATA0__SD2_DATA0, USDHC_PAD_CTRL), + IOMUX_PAD_CTRL(SD2_DATA1__SD2_DATA1, USDHC_PAD_CTRL), + IOMUX_PAD_CTRL(SD2_DATA2__SD2_DATA2, USDHC_PAD_CTRL), + IOMUX_PAD_CTRL(SD2_DATA3__SD2_DATA3, USDHC_PAD_CTRL), + IOMUX_PAD_CTRL(GPIO1_IO03__CCM_CLKO2, WEAK_PULLUP), /* Slow clock */ +#define GP_BT_REG_ON IMX_GPIO_NR(4, 23) + IOMUX_PAD_CTRL(ECSPI2_SS0__GPIO4_IO23, WEAK_PULLUP), +#define GP_WL_HOST_WAKE IMX_GPIO_NR(4, 20) + IOMUX_PAD_CTRL(ECSPI2_SCLK__GPIO4_IO20, WEAK_PULLUP), +#define GP_WL_REG_ON IMX_GPIO_NR(4, 21) + IOMUX_PAD_CTRL(ECSPI2_MOSI__GPIO4_IO21, WEAK_PULLUP), + + /* usdhc3 - emmc */ + IOMUX_PAD_CTRL(SD3_CLK__SD3_CLK, USDHC_PAD_CTRL), + IOMUX_PAD_CTRL(SD3_CMD__SD3_CMD, USDHC_PAD_CTRL), + IOMUX_PAD_CTRL(SD3_DATA0__SD3_DATA0, USDHC_PAD_CTRL), + IOMUX_PAD_CTRL(SD3_DATA1__SD3_DATA1, USDHC_PAD_CTRL), + IOMUX_PAD_CTRL(SD3_DATA2__SD3_DATA2, USDHC_PAD_CTRL), + IOMUX_PAD_CTRL(SD3_DATA3__SD3_DATA3, USDHC_PAD_CTRL), + IOMUX_PAD_CTRL(SD3_DATA4__SD3_DATA4, USDHC_PAD_CTRL), + IOMUX_PAD_CTRL(SD3_DATA5__SD3_DATA5, USDHC_PAD_CTRL), + IOMUX_PAD_CTRL(SD3_DATA6__SD3_DATA6, USDHC_PAD_CTRL), + IOMUX_PAD_CTRL(SD3_DATA7__SD3_DATA7, USDHC_PAD_CTRL), +#define GP_EMMC_RESET IMX_GPIO_NR(6, 11) + IOMUX_PAD_CTRL(SD3_RESET_B__GPIO6_IO11, USDHC_PAD_CTRL), + + /* watchdog */ + IOMUX_PAD_CTRL(GPIO1_IO00__WDOG1_WDOG_B, WEAK_PULLUP_OUTPUT), +}; + +static const iomux_v3_cfg_t rgb_pads[] = { + IOMUX_PAD_CTRL(LCD_CLK__LCD_CLK, RGB_PAD_CTRL), + IOMUX_PAD_CTRL(LCD_ENABLE__LCD_ENABLE, RGB_PAD_CTRL), + IOMUX_PAD_CTRL(LCD_HSYNC__LCD_HSYNC, RGB_PAD_CTRL), + IOMUX_PAD_CTRL(LCD_VSYNC__LCD_VSYNC, RGB_PAD_CTRL), + IOMUX_PAD_CTRL(LCD_RESET__LCD_RESET, RGB_PAD_CTRL), + IOMUX_PAD_CTRL(LCD_DATA00__LCD_DATA0, RGB_PAD_CTRL), + IOMUX_PAD_CTRL(LCD_DATA01__LCD_DATA1, RGB_PAD_CTRL), + IOMUX_PAD_CTRL(LCD_DATA02__LCD_DATA2, RGB_PAD_CTRL), + IOMUX_PAD_CTRL(LCD_DATA03__LCD_DATA3, RGB_PAD_CTRL), + IOMUX_PAD_CTRL(LCD_DATA04__LCD_DATA4, RGB_PAD_CTRL), + IOMUX_PAD_CTRL(LCD_DATA05__LCD_DATA5, RGB_PAD_CTRL), + IOMUX_PAD_CTRL(LCD_DATA06__LCD_DATA6, RGB_PAD_CTRL), + IOMUX_PAD_CTRL(LCD_DATA07__LCD_DATA7, RGB_PAD_CTRL), + IOMUX_PAD_CTRL(LCD_DATA08__LCD_DATA8, RGB_PAD_CTRL), + IOMUX_PAD_CTRL(LCD_DATA09__LCD_DATA9, RGB_PAD_CTRL), + IOMUX_PAD_CTRL(LCD_DATA10__LCD_DATA10, RGB_PAD_CTRL), + IOMUX_PAD_CTRL(LCD_DATA11__LCD_DATA11, RGB_PAD_CTRL), + IOMUX_PAD_CTRL(LCD_DATA12__LCD_DATA12, RGB_PAD_CTRL), + IOMUX_PAD_CTRL(LCD_DATA13__LCD_DATA13, RGB_PAD_CTRL), + IOMUX_PAD_CTRL(LCD_DATA14__LCD_DATA14, RGB_PAD_CTRL), + IOMUX_PAD_CTRL(LCD_DATA15__LCD_DATA15, RGB_PAD_CTRL), + IOMUX_PAD_CTRL(LCD_DATA16__LCD_DATA16, RGB_PAD_CTRL), + IOMUX_PAD_CTRL(LCD_DATA17__LCD_DATA17, RGB_PAD_CTRL), + IOMUX_PAD_CTRL(LCD_DATA18__LCD_DATA18, RGB_PAD_CTRL), + IOMUX_PAD_CTRL(LCD_DATA19__LCD_DATA19, RGB_PAD_CTRL), + IOMUX_PAD_CTRL(LCD_DATA20__LCD_DATA20, RGB_PAD_CTRL), + IOMUX_PAD_CTRL(LCD_DATA21__LCD_DATA21, RGB_PAD_CTRL), + IOMUX_PAD_CTRL(LCD_DATA22__LCD_DATA22, RGB_PAD_CTRL), + IOMUX_PAD_CTRL(LCD_DATA23__LCD_DATA23, RGB_PAD_CTRL), +}; + +static const iomux_v3_cfg_t rgb_gpio_pads[] = { + IOMUX_PAD_CTRL(LCD_CLK__GPIO3_IO0, WEAK_PULLUP), + IOMUX_PAD_CTRL(LCD_ENABLE__GPIO3_IO1, WEAK_PULLUP), + IOMUX_PAD_CTRL(LCD_HSYNC__GPIO3_IO2, WEAK_PULLUP), + IOMUX_PAD_CTRL(LCD_VSYNC__GPIO3_IO3, WEAK_PULLUP), + IOMUX_PAD_CTRL(LCD_RESET__GPIO3_IO4, WEAK_PULLUP), + IOMUX_PAD_CTRL(LCD_DATA00__GPIO3_IO5, WEAK_PULLUP), + IOMUX_PAD_CTRL(LCD_DATA01__GPIO3_IO6, WEAK_PULLUP), + IOMUX_PAD_CTRL(LCD_DATA02__GPIO3_IO7, WEAK_PULLUP), + IOMUX_PAD_CTRL(LCD_DATA03__GPIO3_IO8, WEAK_PULLUP), + IOMUX_PAD_CTRL(LCD_DATA04__GPIO3_IO9, WEAK_PULLUP), + IOMUX_PAD_CTRL(LCD_DATA05__GPIO3_IO10, WEAK_PULLUP), + IOMUX_PAD_CTRL(LCD_DATA06__GPIO3_IO11, WEAK_PULLUP), + IOMUX_PAD_CTRL(LCD_DATA07__GPIO3_IO12, WEAK_PULLUP), + IOMUX_PAD_CTRL(LCD_DATA08__GPIO3_IO13, WEAK_PULLUP), + IOMUX_PAD_CTRL(LCD_DATA09__GPIO3_IO14, WEAK_PULLUP), + IOMUX_PAD_CTRL(LCD_DATA10__GPIO3_IO15, WEAK_PULLUP), + IOMUX_PAD_CTRL(LCD_DATA11__GPIO3_IO16, WEAK_PULLUP), + IOMUX_PAD_CTRL(LCD_DATA12__GPIO3_IO17, WEAK_PULLUP), + IOMUX_PAD_CTRL(LCD_DATA13__GPIO3_IO18, WEAK_PULLUP), + IOMUX_PAD_CTRL(LCD_DATA14__GPIO3_IO19, WEAK_PULLUP), + IOMUX_PAD_CTRL(LCD_DATA15__GPIO3_IO20, WEAK_PULLUP), + IOMUX_PAD_CTRL(LCD_DATA16__GPIO3_IO21, WEAK_PULLUP), + IOMUX_PAD_CTRL(LCD_DATA17__GPIO3_IO22, WEAK_PULLUP), + IOMUX_PAD_CTRL(LCD_DATA18__GPIO3_IO23, WEAK_PULLUP), + IOMUX_PAD_CTRL(LCD_DATA19__GPIO3_IO24, WEAK_PULLUP), + IOMUX_PAD_CTRL(LCD_DATA20__GPIO3_IO25, WEAK_PULLUP), + IOMUX_PAD_CTRL(LCD_DATA21__GPIO3_IO26, WEAK_PULLUP), + IOMUX_PAD_CTRL(LCD_DATA22__GPIO3_IO27, WEAK_PULLUP), + IOMUX_PAD_CTRL(LCD_DATA23__GPIO3_IO28, WEAK_PULLUP), +}; + +#ifdef CONFIG_SYS_I2C_MXC +/* I2C1 for PMIC */ +static const struct i2c_pads_info i2c_pads[] = { + I2C_PADS_INFO_ENTRY(I2C1, I2C1_SCL, 4, 8, I2C1_SDA, 4, 9, I2C_PAD_CTRL), + I2C_PADS_INFO_ENTRY(I2C2, I2C2_SCL, 4, 10, I2C2_SDA, 4, 11, I2C_PAD_CTRL), + I2C_PADS_INFO_ENTRY(I2C3, I2C3_SCL, 4, 12, I2C3_SDA, 4, 13, I2C_PAD_CTRL), + I2C_PADS_INFO_ENTRY(I2C4, I2C4_SCL, 4, 14, I2C4_SDA, 4, 15, I2C_PAD_CTRL), +}; +#define I2C_BUS_CNT 4 +#else +#define i2c_pads NULL +#define I2C_BUS_CNT 0 +#endif + +#ifdef CONFIG_FSL_ESDHC +struct fsl_esdhc_cfg board_usdhc_cfg[] = { + {.esdhc_base = USDHC1_BASE_ADDR, .bus_width = 4, + .gp_cd = GP_USDHC1_CD}, + {.esdhc_base = USDHC3_BASE_ADDR, .bus_width = 8, + .gp_reset = GP_EMMC_RESET}, +}; +#endif + +#ifdef CONFIG_CMD_FBPANEL +void board_enable_lcd(const struct display_info_t *di, int enable) +{ + if (enable) + SETUP_IOMUX_PADS(rgb_pads); + else + SETUP_IOMUX_PADS(rgb_gpio_pads); + gpio_direction_output(GP_BACKLIGHT_RGB, enable); +} + +static const struct display_info_t displays[] = { + /* fusion7 specific touchscreen */ + VD_FUSION7(LCD, fbp_detect_i2c, 2, 0x10), + + /* tsc2004 */ + VD_CLAA_WVGA(LCD, fbp_detect_i2c, 2, 0x48), + VD_SHARP_WVGA(LCD, NULL, 2, 0x48), + VD_DC050WX(LCD, NULL, 2, 0x48), + VD_QVGA(LCD, NULL, 2, 0x48), + VD_AT035GT_07ET3(LCD, NULL, 2, 0x48), + + VD_LSA40AT9001(LCD, NULL, 0, 0x00), +}; +#define display_cnt ARRAY_SIZE(displays) +#else +#define displays NULL +#define display_cnt 0 +#endif + +static const unsigned short gpios_out_low[] = { + GP_RGMII_PHY_RESET, + GP_I2C2A_EN, + GP_MIPI_BACKLIGHT, + GP_PCIE_DISABLE, + GP_PCIE_RESET, + GP_BACKLIGHT_RGB, + GP_UART3_RS485_TX, + GP_PMIC_SD1_VSEL, + GP_BT_REG_ON, + GP_WL_REG_ON, + GP_EMMC_RESET, +}; + +static const unsigned short gpios_out_high[] = { + GP_CAN_STANDBY, +#ifdef GP_SPI_nWP + GP_SPI_nWP, +#endif +#ifdef GP_SPI_nHOLD + GP_SPI_nHOLD, +#endif +}; + +static const unsigned short gpios_in[] = { + GPIRQ_ENET_PHY, + GP_PMIC_INT_B, + GP_RTC, + GP_MIPI, + GP_I2C_TOUCH, + GP_USDHC1_CD, + GP_WL_HOST_WAKE, + GP_OTG1_ID, +}; + +int board_early_init_f(void) +{ + set_gpios_in(gpios_in, ARRAY_SIZE(gpios_in)); + set_gpios(gpios_out_high, ARRAY_SIZE(gpios_out_high), 1); + set_gpios(gpios_out_low, ARRAY_SIZE(gpios_out_low), 0); + SETUP_IOMUX_PADS(init_pads); + SETUP_IOMUX_PADS(rgb_gpio_pads); + return 0; +} + +int board_init(void) +{ + common_board_init(i2c_pads, I2C_BUS_CNT, 0, + displays, display_cnt, 0); + return 0; +} + +#ifdef CONFIG_CMD_BMODE +const struct boot_mode board_boot_modes[] = { + /* 4 bit bus width */ + {"sd1", MAKE_CFGVAL(0x10, 0x10, 0x00, 0x00)}, + {"emmc", MAKE_CFGVAL(0x10, 0x2a, 0x00, 0x00)}, + {NULL, 0}, +}; +#endif + +#ifdef CONFIG_POWER +#define I2C_PMIC 0 +int power_init_board(void) +{ + struct pmic *p; + int ret; + unsigned int reg, rev_id; + + ret = power_pfuze3000_init(I2C_PMIC); + if (ret) + return ret; + + p = pmic_get("PFUZE3000"); + ret = pmic_probe(p); + if (ret) + return ret; + + pmic_reg_read(p, PFUZE3000_DEVICEID, ®); + pmic_reg_read(p, PFUZE3000_REVID, &rev_id); + printf("PMIC: PFUZE3000 DEV_ID=0x%x REV_ID=0x%x\n", reg, rev_id); + + /* disable Low Power Mode during standby mode */ + pmic_reg_read(p, PFUZE3000_LDOGCTL, ®); + reg |= 0x1; + pmic_reg_write(p, PFUZE3000_LDOGCTL, reg); + + return 0; +} +#endif + +u32 get_board_rev(void) +{ + return get_cpu_rev(); +} + +const struct button_key board_buttons[] = { + {NULL, 0, 0, 0}, +}; + +#ifdef CONFIG_USB_EHCI_MX7 +int board_usb_phy_mode(int port) +{ + if (port) + return USB_INIT_HOST; + return gpio_get_value(GP_OTG1_ID) ? USB_INIT_DEVICE : USB_INIT_HOST; +} + +int board_ehci_hcd_init(int port) +{ + switch (port) { + case 0: + break; + case 1: + break; + default: + printf("MXC USB port %d not yet supported\n", port); + return -EINVAL; + } + return 0; +} +#endif diff --git a/board/boundary/nitrogen7/nitrogen7.cfg b/board/boundary/nitrogen7/nitrogen7.cfg new file mode 100644 index 0000000000000000000000000000000000000000..0abb4a8ee11e402dda9e0d5b76f9113177d0c19f --- /dev/null +++ b/board/boundary/nitrogen7/nitrogen7.cfg @@ -0,0 +1,106 @@ +/* + * Copyright (C) 2015 Freescale Semiconductor, Inc. + * + * SPDX-License-Identifier: GPL-2.0+ + * + * Refer docs/README.imxmage for more details about how-to configure + * and create imximage boot image + * + * The syntax is taken as close as possible with the kwbimage + */ +/* H5TC4G63CFR-PBA */ +#define __ASSEMBLY__ +#include <config.h> + +/* image version */ + +IMAGE_VERSION 2 + +/* + * Boot Device : sd + */ +#ifdef CONFIG_LINK_QSPI +BOOT_FROM qspi +#else +BOOT_FROM sd +#endif + +#ifdef CONFIG_SECURE_BOOT +CSF CONFIG_CSF_SIZE +#endif + +/* + * Device Configuration Data (DCD) + * + * Each entry must have the format: + * Addr-type Address Value + * + * where: + * Addr-type register length (1,2 or 4 bytes) + * Address absolute address of the register + * value value to be stored in the register + */ + +DATA 4 0x30340004 0x4F400005 /* IOMUXC_GPR_GPR1 - enable ocram EPDC function */ + +DATA 4 0x30391000 0x00000002 /* SRC_DDRC_RCR - assert ddr phy reset */ +DATA 4 0x307a0000 0x01040001 /* DDRC_MSTR - DDR3, burst 8, rank 1 */ +DATA 4 0x307a01a0 0x80400003 /* DDRC_DFIUPD0 - disable auto req */ +DATA 4 0x307a01a4 0x00100020 /* DDRC_DFIUPD1 - min/max delay line recalibration */ +DATA 4 0x307a01a8 0x80100004 /* DDRC_DFIUPD2 - req controls */ +DATA 4 0x307a0064 0x00400046 /* DDRC_RFSHTMG - */ +DATA 4 0x307a0490 0x00000001 /* DDRC_MP_PCTRL_0 - port enable */ +DATA 4 0x307a00d0 0x00020083 /* DDRC_INIT0 - wait 2 clocks after cke high */ +DATA 4 0x307a00d4 0x00690000 /* DDRC_INIT1 - reset width */ +DATA 4 0x307a00dc 0x09300004 /* DDRC_INIT3 - MR0/MR1 reg values */ +DATA 4 0x307a00e0 0x04080000 /* DDRC_INIT4 - MR2/MR3 reg values */ +DATA 4 0x307a00e4 0x00100004 /* DDRC_INIT5 - ZQ cal clks(512)*/ +DATA 4 0x307a00f4 0x0000033f /* DDRC_RANKCTL - */ +DATA 4 0x307a0100 0x09081109 /* DDRC_DRAMTMG0 - RAS */ +DATA 4 0x307a0104 0x0007020d /* DDRC_DRAMTMG1 - tRC */ +DATA 4 0x307a0108 0x03040407 /* DDRC_DRAMTMG2 - WL/RL */ +DATA 4 0x307a010c 0x00002006 /* DDRC_DRAMTMG3 - tMRD */ +DATA 4 0x307a0110 0x04020205 /* DDRC_DRAMTMG4 - tRCD, tRRD, tRP */ +DATA 4 0x307a0114 0x03030202 /* DDRC_DRAMTMG5 - tCKE */ +DATA 4 0x307a0120 0x00000803 /* DDRC_DRAMTMG8 - tXS */ +DATA 4 0x307a0180 0x00800020 /* DDRC_ZQCTL0 - 32 NOP clks after short calibration */ +DATA 4 0x307a0184 0x02000100 /* DDRC_ZQCTL1 - short calibration interval */ +DATA 4 0x307a0190 0x02098204 /* DDRC_DFITMG0 - */ +DATA 4 0x307a0194 0x00030303 /* DDRC_DFITMG1 - */ +DATA 4 0x307a0200 0x00000016 /* DDRC_ADDRMAP0 - bit(A28=22+6) used for rank */ +DATA 4 0x307a0204 0x00171717 /* DDRC_ADDRMAP1 - bit(A25,A26,A27) for bank*/ +DATA 4 0x307a0214 0x04040404 /* DDRC_ADDRMAP5 - bit(A10) for row bit 0, bit(A21) for row bit 11 */ +DATA 4 0x307a0218 0x0f040404 /* DDRC_ADDRMAP6 - bit(A22) for row bit 12, A24 for row bit 14 */ +DATA 4 0x307a0240 0x06000604 /* DDRC_ODTCFG - odt clocks */ +DATA 4 0x307a0244 0x00000001 /* DDRC_ODTMAP - enable rank 0 */ +DATA 4 0x30391000 0x00000000 /* SRC_DDRC_RCR - release ddr phy reset */ + +DATA 4 0x30790000 0x17420f40 /* DDR_PHY_PHY_CON0 */ +DATA 4 0x30790004 0x10210100 /* DDR_PHY_PHY_CON1 */ +DATA 4 0x30790010 0x00060807 /* DDR_PHY_PHY_CON4 - BL8, tRL */ +DATA 4 0x307900b0 0x1010007e /* DDR_PHY_MDLL_CON0 */ +DATA 4 0x3079009c 0x00000d6e /* DDR_PHY_DRVDS_CON0 - drive strength, CA/RAS/CAS/WEN/ODT/RESET/BANK */ + +DATA 4 0x30790020 0x08080808 /* DDR_PHY_OFFSET_RD_CON0, read DQS calibration */ +DATA 4 0x30790030 0x08080808 /* DDR_PHY_OFFSET_WR_CON0, write DQS calibration */ +DATA 4 0x30790050 0x01000010 /* DDR_PHY_CMD_SDLL_CON0, resync */ +DATA 4 0x30790050 0x00000010 /* DDR_PHY_CMD_SDLL_CON0 */ + +DATA 4 0x307900c0 0x0e407304 /* DDR_PHY_ZQ_CON0, */ +DATA 4 0x307900c0 0x0e447304 /* DDR_PHY_ZQ_CON0, zq_clk_div_en */ +DATA 4 0x307900c0 0x0e447306 /* DDR_PHY_ZQ_CON0, start calibration */ + +CHECK_BITS_SET 4 0x307900c4 0x1 /* DDR_PHY_ZQ_CON1, zq calibration done */ + +DATA 4 0x307900c0 0x0e447304 /* DDR_PHY_ZQ_CON0, zq_clk_div_en*/ +DATA 4 0x307900c0 0x0e407304 /* DDR_PHY_ZQ_CON0 */ + +DATA 4 0x30384130 0x00000000 /* CCM_CCGR19 - turn off clocks */ +DATA 4 0x30340020 0x00000178 /* IOMUXC_GPR_GPR8 - start DDR PHY */ +DATA 4 0x30384130 0x00000002 /* CCM_CCGR19 - turn on clock */ +DATA 4 0x30790018 0x0000000f /* DDR_PHY_RODT_CON0 */ + +CHECK_BITS_SET 4 0x307a0004 0x1 /* DDRC_STAT - wait for normal mode */ + +DATA 4 0x88780000 0x12345678 +CHECK_BITS_SET 4 0x88780000 0x8 diff --git a/board/boundary/nitrogen7/qspi-mx25l6405d b/board/boundary/nitrogen7/qspi-mx25l6405d new file mode 100644 index 0000000000000000000000000000000000000000..94e773e6b9a0d7bbe2e926a745db3aa194eaab18 --- /dev/null +++ b/board/boundary/nitrogen7/qspi-mx25l6405d @@ -0,0 +1,128 @@ +0 /* 0 dqs_loopback=0 or 1*/ /* The binary file can be built using "./qspi_param.awk qspi-MX25L6405D | xxd -r >qspi-MX25L6405D.nitrogen7" */ +0 /* 4 hold_delay=0 to 3*/ +0 /* 8 reserved */ +0 /* c reserved */ +0 /*10 device_quad_mode_en=1 to enable sending command to SPI device*/ +0 /*14 device_cmd=command to device for enabling Quad I/O mode*/ +03000001 /*18 write_cmd_ipcr=hex value to be written to IPCR register for write cmd of device*/ +02000000 /*1c write_enable_ipcr=hex value to be written to IPCR register for write enable of device*/ +3 /*20 cs_hold_time=0 to 0xF*/ +3 /*24 cs_setup_time=0 to 0xF*/ +8000000 /*28 sflash_A1_size=size in byte(hex)*/ +0 /*2c sflash_A2_size=size in byte(hex)*/ +0 /*30 sflash_B1_size=size in byte(hex)*/ +0 /*34 sflash_B2_size=size in byte(hex)*/ +5 /*38 sclk_freq=0 to 6, 0:18Mhz, 1:49Mhz, 2:55Mhz, 3:60Mhz, 4:66Mhz, 5:76MHz, 6:99Mhz, max 80 MHz*/ +0 /*3c busy_bit_offset=bit position of device BUSY in device status register*/ +1 /*40 sflash_type=1 (Single), 2 (Dual), 4 (Quad mode of operation)*/ +0 /*44 sflash_port=0 or 1 (Port B used)*/ +0 /*48 ddr_mode_enable=0 or 1*/ +0 /*4c dqs_enable=0 or 1*/ +0 /*50 parallel_mode_enable=0 or 1*/ +0 /*54 portA_cs1=0 or 1*/ +0 /*58 portB_cs1=0 or 1*/ +0 /*5c fsphs=0 (Full Speed Phase sampling at non-inverted clock) or 1 (sampling at inverted clock)*/ +0 /*60 fsdly=0 (Full Speed Delay One clk delay) or 1 (two clk cycle delay)*/ +0 /*64 ddrsmp=0 to 7 (sampling point for incoming data in DDR mode)*/ +0818040b /*68 lut[0] QSPI_CMD_FAST_READ */ +1c040c08 /*6c lut[1] */ +2400 /*70 lut[2] */ +0 /*74 lut[3] */ +1c010405 /*78 lut[4] QSPI_CMD_RDSR(Read status register 1) */ +2400 /*7c lut[5] */ +0 /*80 lut[6] */ +0 /*84 lut[7] */ +24000406 /*88 lut[8] QSPI_CMD_WREN(write enable) */ +0 /*8c lut[9] */ +0 /*90 lut[10] */ +0 /*94 lut[11] */ +20010401 /*98 lut[12] QSPI_CMD_WRITE_STATUS(Write status register 1) */ +2400 /*9c lut[13] */ +0 /*a0 lut[14] */ +0 /*a4 lut[15] */ +0 /*a8 lut[16] */ +0 /*ac lut[17] */ +0 /*b0 lut[18] */ +0 /*b4 lut[19] */ +0 /*b8 lut[20] */ +0 /*bc lut[21] */ +0 /*c0 lut[22] */ +0 /*c4 lut[23] */ +0 /*c8 lut[24] */ +0 /*cc lut[25] */ +0 /*d0 lut[26] */ +0 /*d4 lut[27] */ +0 /*d8 lut[28] */ +0 /*dc lut[29] */ +0 /*e0 lut[30] */ +0 /*e4 lut[31] */ +0 /*e8 lut[32] */ +0 /*ec lut[33] */ +0 /*f0 lut[34] */ +0 /*f4 lut[35] */ +0 /*f8 lut[36] */ +0 /*fc lut[37] */ +0 /*100 lut[38] */ +0 /*104 lut[39] */ +0 /*108 lut[40] */ +0 /*10c lut[41] */ +0 /*110 lut[42] */ +0 /*114 lut[43] */ +0 /*118 lut[44] */ +0 /*11c lut[45] */ +0 /*120 lut[46] */ +0 /*124 lut[47] */ +0 /*128 lut[48] */ +0 /*12c lut[49] */ +0 /*130 lut[50] */ +0 /*134 lut[51] */ +0 /*138 lut[52] */ +0 /*13c lut[53] */ +0 /*140 lut[54] */ +0 /*144 lut[55] */ +0 /*148 lut[56] */ +0 /*14c lut[57] */ +0 /*150 lut[58] */ +0 /*154 lut[59] */ +0 /*158 lut[60] */ +0 /*15c lut[61] */ +0 /*160 lut[62] */ +0 /*164 lut[63] */ +1000001 /*168 read_status_ipcr=hex value to be written to IPCR register for reading status reg of device */ +0 /*16c enable_dqs_phase=0 or 1 */ +0 /*170 Not used */ +0 /*174 */ +0 /*178 */ +0 /*17c */ +0 /*180 */ +0 /*184 */ +0 /*188 */ +0 /*18c */ +0 /*190 */ +0 /*194 DQS pin pad setting override */ +0 /*198 SCLK pin pad setting override */ +0 /*19c DATA pins pad setting override */ +0 /*1a0 CS pins pad setting override */ +0 /*1a4 0: dqs loopback from pad/1: dqs loopback internally */ +0 /*1a8 dqs phase selection */ +0 /*1ac dqs fa delay chain selection */ +0 /*1b0 dqs fb delay chain selection */ +0 /*1b4 sclk fa delay chain selection */ +0 /*1b8 sclk fb delay chain selection */ +0 /*1bc */ +0 /*1c0 reserve[0] */ +0 /*1c4 reserve[1] */ +0 /*1c8 reserve[2] */ +0 /*1cc reserve[3] */ +0 /*1d0 reserve[4] */ +0 /*1d4 reserve[5] */ +0 /*1d8 reserve[6] */ +0 /*1dc reserve[7] */ +0 /*1e0 reserve[8] */ +0 /*1e4 reserve[9] */ +0 /*1e8 reserve[10] */ +0 /*1ec reserve[11] */ +0 /*1f0 reserve[12] */ +0 /*1f4 reserve[13] */ +0 /*1f8 reserve[14] */ +c0ffee01 /*1fc tag, QSPI configuration tag, should be 0xc0ffee01 */ diff --git a/board/boundary/nitrogen7/qspi-sst25vf016b b/board/boundary/nitrogen7/qspi-sst25vf016b new file mode 100644 index 0000000000000000000000000000000000000000..eacc1fb8577a1cd5edc2775b8d4441a751ef6fc1 --- /dev/null +++ b/board/boundary/nitrogen7/qspi-sst25vf016b @@ -0,0 +1,128 @@ +0 /* 0 dqs_loopback=0 or 1*/ /* The binary file can be built using "./qspi_param.awk qspi-SST25VF016B | xxd -r >qspi-SST25VF016B.nitrogen7" */ +0 /* 4 hold_delay=0 to 3*/ +0 /* 8 reserved */ +0 /* c reserved */ +0 /*10 device_quad_mode_en=1 to enable sending command to SPI device*/ +0 /*14 device_cmd=command to device for enabling Quad I/O mode*/ +03000002 /*18 write_cmd_ipcr=hex value to be written to IPCR register for write cmd of device*/ +02000000 /*1c write_enable_ipcr=hex value to be written to IPCR register for write enable of device*/ +3 /*20 cs_hold_time=0 to 0xF*/ +3 /*24 cs_setup_time=0 to 0xF*/ +1000000 /*28 sflash_A1_size=size in byte(hex)*/ +0 /*2c sflash_A2_size=size in byte(hex)*/ +0 /*30 sflash_B1_size=size in byte(hex)*/ +0 /*34 sflash_B2_size=size in byte(hex)*/ +5 /*38 sclk_freq=0 to 6, 0:18Mhz, 1:49Mhz, 2:55Mhz, 3:60Mhz, 4:66Mhz, 5:76MHz, 6:99Mhz, max 80 MHz*/ +0 /*3c busy_bit_offset=bit position of device BUSY in device status register*/ +1 /*40 sflash_type=1 (Single), 2 (Dual), 4 (Quad mode of operation)*/ +0 /*44 sflash_port=0 or 1 (Port B used)*/ +0 /*48 ddr_mode_enable=0 or 1*/ +0 /*4c dqs_enable=0 or 1*/ +0 /*50 parallel_mode_enable=0 or 1*/ +0 /*54 portA_cs1=0 or 1*/ +0 /*58 portB_cs1=0 or 1*/ +0 /*5c fsphs=0 (Full Speed Phase sampling at non-inverted clock) or 1 (sampling at inverted clock)*/ +0 /*60 fsdly=0 (Full Speed Delay One clk delay) or 1 (two clk cycle delay)*/ +0 /*64 ddrsmp=0 to 7 (sampling point for incoming data in DDR mode)*/ +0818040b /*68 lut[0] QSPI_CMD_FAST_READ */ +1c040c08 /*6c lut[1] */ +2400 /*70 lut[2] */ +0 /*74 lut[3] */ +1c010405 /*78 lut[4] QSPI_CMD_RDSR(Read status register 1) */ +2400 /*7c lut[5] */ +0 /*80 lut[6] */ +0 /*84 lut[7] */ +24000406 /*88 lut[8] QSPI_CMD_WREN(write enable) */ +0 /*8c lut[9] */ +0 /*90 lut[10] */ +0 /*94 lut[11] */ +20010401 /*98 lut[12] QSPI_CMD_WRITE_STATUS(Write status register 1) */ +2400 /*9c lut[13] */ +0 /*a0 lut[14] */ +0 /*a4 lut[15] */ +0 /*a8 lut[16] */ +0 /*ac lut[17] */ +0 /*b0 lut[18] */ +0 /*b4 lut[19] */ +0 /*b8 lut[20] */ +0 /*bc lut[21] */ +0 /*c0 lut[22] */ +0 /*c4 lut[23] */ +0 /*c8 lut[24] */ +0 /*cc lut[25] */ +0 /*d0 lut[26] */ +0 /*d4 lut[27] */ +0 /*d8 lut[28] */ +0 /*dc lut[29] */ +0 /*e0 lut[30] */ +0 /*e4 lut[31] */ +0 /*e8 lut[32] */ +0 /*ec lut[33] */ +0 /*f0 lut[34] */ +0 /*f4 lut[35] */ +0 /*f8 lut[36] */ +0 /*fc lut[37] */ +0 /*100 lut[38] */ +0 /*104 lut[39] */ +0 /*108 lut[40] */ +0 /*10c lut[41] */ +0 /*110 lut[42] */ +0 /*114 lut[43] */ +0 /*118 lut[44] */ +0 /*11c lut[45] */ +0 /*120 lut[46] */ +0 /*124 lut[47] */ +0 /*128 lut[48] */ +0 /*12c lut[49] */ +0 /*130 lut[50] */ +0 /*134 lut[51] */ +0 /*138 lut[52] */ +0 /*13c lut[53] */ +0 /*140 lut[54] */ +0 /*144 lut[55] */ +0 /*148 lut[56] */ +0 /*14c lut[57] */ +0 /*150 lut[58] */ +0 /*154 lut[59] */ +0 /*158 lut[60] */ +0 /*15c lut[61] */ +0 /*160 lut[62] */ +0 /*164 lut[63] */ +1000001 /*168 read_status_ipcr=hex value to be written to IPCR register for reading status reg of device */ +0 /*16c enable_dqs_phase=0 or 1 */ +0 /*170 Not used */ +0 /*174 */ +0 /*178 */ +0 /*17c */ +0 /*180 */ +0 /*184 */ +0 /*188 */ +0 /*18c */ +0 /*190 */ +0 /*194 DQS pin pad setting override */ +0 /*198 SCLK pin pad setting override */ +0 /*19c DATA pins pad setting override */ +0 /*1a0 CS pins pad setting override */ +0 /*1a4 0: dqs loopback from pad/1: dqs loopback internally */ +0 /*1a8 dqs phase selection */ +0 /*1ac dqs fa delay chain selection */ +0 /*1b0 dqs fb delay chain selection */ +0 /*1b4 sclk fa delay chain selection */ +0 /*1b8 sclk fb delay chain selection */ +0 /*1bc */ +0 /*1c0 reserve[0] */ +0 /*1c4 reserve[1] */ +0 /*1c8 reserve[2] */ +0 /*1cc reserve[3] */ +0 /*1d0 reserve[4] */ +0 /*1d4 reserve[5] */ +0 /*1d8 reserve[6] */ +0 /*1dc reserve[7] */ +0 /*1e0 reserve[8] */ +0 /*1e4 reserve[9] */ +0 /*1e8 reserve[10] */ +0 /*1ec reserve[11] */ +0 /*1f0 reserve[12] */ +0 /*1f4 reserve[13] */ +0 /*1f8 reserve[14] */ +c0ffee01 /*1fc tag, QSPI configuration tag, should be 0xc0ffee01 */ diff --git a/board/boundary/nitrogen7/qspi-w25q128bv b/board/boundary/nitrogen7/qspi-w25q128bv new file mode 100644 index 0000000000000000000000000000000000000000..4e77b028e968c3c40d450f37f847d460fb73e52e --- /dev/null +++ b/board/boundary/nitrogen7/qspi-w25q128bv @@ -0,0 +1,128 @@ +0 /* 0 dqs_loopback=0 or 1*/ /* The binary file can be built using "./qspi_param.awk qspi-W25Q128BV | xxd -r >qspi-W25Q128BV.nitrogen7" */ +0 /* 4 hold_delay=0 to 3*/ +0 /* 8 reserved */ +0 /* c reserved */ +1 /*10 device_quad_mode_en=1 to enable sending command to SPI device*/ +0200 /*14 device_cmd=command to device for enabling Quad I/O mode(status reg1 & 2 write) */ +03000002 /*18 write_cmd_ipcr=hex value to be written to IPCR register for write cmd of device*/ +02000000 /*1c write_enable_ipcr=hex value to be written to IPCR register for write enable of device*/ +3 /*20 cs_hold_time=0 to 0xF*/ +3 /*24 cs_setup_time=0 to 0xF*/ +1000000 /*28 sflash_A1_size=size in byte(hex)*/ +0 /*2c sflash_A2_size=size in byte(hex)*/ +0 /*30 sflash_B1_size=size in byte(hex)*/ +0 /*34 sflash_B2_size=size in byte(hex)*/ +6 /*38 sclk_freq=0 to 6*/ +0 /*3c busy_bit_offset=bit position of device BUSY in device status register*/ +4 /*40 sflash_type=1 (Single), 2 (Dual), 4 (Quad mode of operation)*/ +0 /*44 sflash_port=0 or 1 (Port B used)*/ +0 /*48 ddr_mode_enable=0 or 1*/ +0 /*4c dqs_enable=0 or 1*/ +0 /*50 parallel_mode_enable=0 or 1*/ +0 /*54 portA_cs1=0 or 1*/ +0 /*58 portB_cs1=0 or 1*/ +0 /*5c fsphs=0 (Full Speed Phase sampling at non-inverted clock) or 1 (sampling at inverted clock)*/ +0 /*60 fsdly=0 (Full Speed Delay One clk delay) or 1 (two clk cycle delay)*/ +0 /*64 ddrsmp=0 to 7 (sampling point for incoming data in DDR mode)*/ +0a1804eb /*68 lut[0] Fast Read Quad I/O, needs status reg write to enable cmd */ +0e041200 /*6c lut[1] */ +24001e04 /*70 lut[2] */ +0 /*74 lut[3] */ +1c010405 /*78 lut[4] QSPI_CMD_RDSR(Read status register 1) */ +2400 /*7c lut[5] */ +0 /*80 lut[6] */ +0 /*84 lut[7] */ +24000406 /*88 lut[8] QSPI_CMD_WREN(write enable) */ +0 /*8c lut[9] */ +0 /*90 lut[10] */ +0 /*94 lut[11] */ +20010401 /*98 lut[12] QSPI_CMD_WRITE_STATUS(Write status register 1) */ +2400 /*9c lut[13] */ +0 /*a0 lut[14] */ +0 /*a4 lut[15] */ +1c010435 /*a8 lut[16] QSPI_CMD_RDSR2(Read status register 2) */ +2400 /*ac lut[17] */ +0 /*b0 lut[18] */ +0 /*b4 lut[19] */ +0 /*b8 lut[20] */ +0 /*bc lut[21] */ +0 /*c0 lut[22] */ +0 /*c4 lut[23] */ +0 /*c8 lut[24] */ +0 /*cc lut[25] */ +0 /*d0 lut[26] */ +0 /*d4 lut[27] */ +0 /*d8 lut[28] */ +0 /*dc lut[29] */ +0 /*e0 lut[30] */ +0 /*e4 lut[31] */ +0 /*e8 lut[32] */ +0 /*ec lut[33] */ +0 /*f0 lut[34] */ +0 /*f4 lut[35] */ +0 /*f8 lut[36] */ +0 /*fc lut[37] */ +0 /*100 lut[38] */ +0 /*104 lut[39] */ +0 /*108 lut[40] */ +0 /*10c lut[41] */ +0 /*110 lut[42] */ +0 /*114 lut[43] */ +0 /*118 lut[44] */ +0 /*11c lut[45] */ +0 /*120 lut[46] */ +0 /*124 lut[47] */ +0 /*128 lut[48] */ +0 /*12c lut[49] */ +0 /*130 lut[50] */ +0 /*134 lut[51] */ +0 /*138 lut[52] */ +0 /*13c lut[53] */ +0 /*140 lut[54] */ +0 /*144 lut[55] */ +0 /*148 lut[56] */ +0 /*14c lut[57] */ +0 /*150 lut[58] */ +0 /*154 lut[59] */ +0 /*158 lut[60] */ +0 /*15c lut[61] */ +0 /*160 lut[62] */ +0 /*164 lut[63] */ +1000001 /*168 read_status_ipcr=hex value to be written to IPCR register for reading status reg of device */ +0 /*16c enable_dqs_phase=0 or 1 */ +0 /*170 Not used */ +0 /*174 */ +0 /*178 */ +0 /*17c */ +0 /*180 */ +0 /*184 */ +0 /*188 */ +0 /*18c */ +0 /*190 */ +0 /*194 DQS pin pad setting override */ +0 /*198 SCLK pin pad setting override */ +0 /*19c DATA pins pad setting override */ +0 /*1a0 CS pins pad setting override */ +0 /*1a4 0: dqs loopback from pad/1: dqs loopback internally */ +0 /*1a8 dqs phase selection */ +0 /*1ac dqs fa delay chain selection */ +0 /*1b0 dqs fb delay chain selection */ +0 /*1b4 sclk fa delay chain selection */ +0 /*1b8 sclk fb delay chain selection */ +0 /*1bc */ +0 /*1c0 reserve[0] */ +0 /*1c4 reserve[1] */ +0 /*1c8 reserve[2] */ +0 /*1cc reserve[3] */ +0 /*1d0 reserve[4] */ +0 /*1d4 reserve[5] */ +0 /*1d8 reserve[6] */ +0 /*1dc reserve[7] */ +0 /*1e0 reserve[8] */ +0 /*1e4 reserve[9] */ +0 /*1e8 reserve[10] */ +0 /*1ec reserve[11] */ +0 /*1f0 reserve[12] */ +0 /*1f4 reserve[13] */ +0 /*1f8 reserve[14] */ +c0ffee01 /*1fc tag, QSPI configuration tag, should be 0xc0ffee01 */ diff --git a/board/boundary/nitrogen7/qspi_param.awk b/board/boundary/nitrogen7/qspi_param.awk new file mode 100644 index 0000000000000000000000000000000000000000..351fabbfa8cebbda32918402ab66ec6d1d66ec10 --- /dev/null +++ b/board/boundary/nitrogen7/qspi_param.awk @@ -0,0 +1,12 @@ +#!/usr/bin/awk -f +{ + s="00000000"$1; + l=length(s); + if(!((NR-1)%4)) + printf "%03x ",(NR-1)*4; + for(i=l-1;i>l-8;i-=2) + printf " %s",substr(s,i,2); + if(!(NR%4)) + printf "\n"; +} + diff --git a/configs/nitrogen7_defconfig b/configs/nitrogen7_defconfig new file mode 100644 index 0000000000000000000000000000000000000000..d0e1de0ed6fce807dbe786f0dacb48fdee2f78ff --- /dev/null +++ b/configs/nitrogen7_defconfig @@ -0,0 +1,76 @@ +CONFIG_ARM=y +CONFIG_ARCH_MX7=y +CONFIG_SYS_TEXT_BASE=0x87800000 +CONFIG_TARGET_NITROGEN7=y +CONFIG_ARMV7_BOOT_SEC_DEFAULT=y +CONFIG_IMX_RDC=y +CONFIG_IMX_BOOTAUX=y +CONFIG_ENV_VARS_UBOOT_CONFIG=y +CONFIG_SYS_EXTRA_OPTIONS="IMX_CONFIG=board/boundary/nitrogen7/nitrogen7.cfg,MX7D,DDR_MB=1024,DEFCONFIG=\"nitrogen7\"" +CONFIG_BOOTDELAY=3 +CONFIG_SYS_CONSOLE_OVERWRITE_ROUTINE=y +CONFIG_SUPPORT_RAW_INITRD=y +CONFIG_HUSH_PARSER=y +CONFIG_CMD_BOOTZ=y +CONFIG_CMD_MEMTEST=y +CONFIG_SYS_ALT_MEMTEST=y +CONFIG_CMD_DFU=y +# CONFIG_CMD_FLASH is not set +CONFIG_CMD_GPIO=y +CONFIG_CMD_GPT=y +# CONFIG_RANDOM_UUID is not set +CONFIG_CMD_I2C=y +CONFIG_CMD_MMC=y +CONFIG_CMD_PART=y +CONFIG_CMD_SF=y +CONFIG_CMD_USB=y +CONFIG_CMD_USB_MASS_STORAGE=y +CONFIG_CMD_DHCP=y +CONFIG_CMD_MII=y +CONFIG_CMD_PING=y +CONFIG_CMD_CACHE=y +CONFIG_CMD_TIME=y +CONFIG_CMD_EXT2=y +CONFIG_CMD_EXT4=y +CONFIG_CMD_EXT4_WRITE=y +CONFIG_CMD_FAT=y +CONFIG_CMD_FS_GENERIC=y +CONFIG_PARTITION_TYPE_GUID=y +CONFIG_ENV_IS_IN_SPI_FLASH=y +CONFIG_USB_FUNCTION_FASTBOOT=y +CONFIG_FASTBOOT_BUF_ADDR=0x12000000 +CONFIG_FASTBOOT_BUF_SIZE=0x26000000 +CONFIG_FASTBOOT_FLASH=y +CONFIG_FASTBOOT_FLASH_MMC_DEV=1 +CONFIG_FSL_ESDHC=y +CONFIG_SPI_FLASH=y +CONFIG_SPI_FLASH_GIGADEVICE=y +CONFIG_SPI_FLASH_MACRONIX=y +CONFIG_SPI_FLASH_SPANSION=y +CONFIG_SPI_FLASH_SST=y +CONFIG_SPI_FLASH_WINBOND=y +CONFIG_PHYLIB=y +CONFIG_PHY_ATHEROS=y +CONFIG_NETDEVICES=y +CONFIG_FEC_MXC=y +CONFIG_SPI=y +CONFIG_FSL_QSPI=y +CONFIG_USB=y +CONFIG_USB_EHCI_HCD=y +CONFIG_MXC_USB_OTG_HACTIVE=y +CONFIG_USB_STORAGE=y +CONFIG_USB_KEYBOARD=y +CONFIG_SYS_USB_EVENT_POLL_VIA_CONTROL_EP=y +CONFIG_USB_GADGET=y +CONFIG_USB_GADGET_MANUFACTURER="Boundary" +CONFIG_USB_GADGET_VENDOR_NUM=0x0525 +CONFIG_USB_GADGET_PRODUCT_NUM=0xa4a5 +CONFIG_CI_UDC=y +CONFIG_USB_ETHER=y +CONFIG_USB_ETH_CDC=y +CONFIG_USB_HOST_ETHER=y +CONFIG_USB_ETHER_ASIX=y +CONFIG_USB_ETHER_MCS7830=y +CONFIG_USB_ETHER_SMSC95XX=y +CONFIG_VIDEO=y +CONFIG_OF_LIBFDT=y diff --git a/include/configs/nitrogen7.h b/include/configs/nitrogen7.h new file mode 100644 index 0000000000000000000000000000000000000000..81f0ad0db6ce34440c1984f8352382967ce61977 --- /dev/null +++ b/include/configs/nitrogen7.h @@ -0,0 +1,94 @@ +/* + * Copyright (C) 2015 Freescale Semiconductor, Inc. + * + * Configuration settings for the Freescale i.MX7D SABRESD board. + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +#ifndef __NITROGEN7_CONFIG_H +#define __NITROGEN7_CONFIG_H + +#include "mx7_common.h" + +#define CONFIG_DBG_MONITOR +#define PHYS_SDRAM_SIZE SZ_1G +#define CONFIG_SYS_LOAD_ADDR CONFIG_LOADADDR +#define CONFIG_SYS_HZ 1000 + +#define CONFIG_IMX_THERMAL + +#define CONFIG_DFU_MMC + +/* ENET1 */ +#define IMX_FEC_BASE ENET_IPS_BASE_ADDR + +/* PMIC */ +#define CONFIG_POWER +#define CONFIG_POWER_I2C +#define CONFIG_POWER_PFUZE3000 +#define CONFIG_POWER_PFUZE3000_I2C_ADDR 0x08 + +#ifdef CONFIG_SPI_FLASH +/* #define CONFIG_SYS_FSL_QSPI_AHB */ +#define FSL_QSPI_FLASH_NUM 1 +#define FSL_QSPI_FLASH_SIZE SZ_16M +#endif + +#undef CONFIG_BOOTM_NETBSD +#undef CONFIG_BOOTM_PLAN9 +#undef CONFIG_BOOTM_RTEMS + +#define CONFIG_SUPPORT_EMMC_BOOT /* eMMC specific */ +#define CONFIG_SYS_MMC_IMG_LOAD_PART 1 + +#define CONFIG_FEC_MXC_PHYADDR 4 +#define CONFIG_SYS_FSL_USDHC_NUM 2 +#define CONFIG_USB_MAX_CONTROLLER_COUNT 2 +#define CONFIG_MXC_UART_BASE UART1_IPS_BASE_ADDR +#define BD_CONSOLE "ttymxc0" +#define BD_I2C_MASK 0xf + +/* M4 specific */ +#define SYS_AUXCORE_BOOTDATA_DDR 0x9ff00000 +#define SYS_AUXCORE_BOOTDATA_OCRAM 0x00910000 +#define SYS_AUXCORE_BOOTDATA_QSPI 0x601e0000 +#define SYS_AUXCORE_BOOTDATA_TCM 0x007F8000 +#define EXTRA_ENV_M4 \ + "loadm4image=load ${devtype} ${devnum}:1 ${loadaddr} ${m4image}\0" \ + "m4boot=run m4boot_nor\0" \ + "m4boot_ext=load ${devtype} ${devnum}:1 ${m4loadaddr} ${m4image}; " \ + "dcache flush; bootaux ${m4loadaddr}\0" \ + "m4boot_nor=sf probe; sf read ${m4loadaddr} ${m4offset} ${m4size}; " \ + "dcache flush; bootaux ${m4loadaddr}\0" \ + "m4boot_qspi=bootaux "__stringify(SYS_AUXCORE_BOOTDATA_QSPI)"\0" \ + "m4image=m4_fw.bin\0" \ + "m4loadaddr="__stringify(SYS_AUXCORE_BOOTDATA_TCM)"\0" \ + "m4loaddevs=mmc\0" \ + "m4offset=0x1e0000\0" \ + "m4size=0x8000\0" \ + "m4update=for devtype in ${m4loaddevs}; do " \ + "for devnum in 0 1 ; do ${devtype} dev ${devnum} ;" \ + "if run loadm4image; then " \ + "sf probe; " \ + "sf erase ${m4offset} ${m4size}; " \ + "sf write ${loadaddr} ${m4offset} ${filesize}; " \ + "exit; " \ + "fi; " \ + "done; " \ + "done\0" + +#include "boundary.h" +#define CONFIG_EXTRA_ENV_SETTINGS BD_BOUNDARY_ENV_SETTINGS \ + "mfgtool_args=setenv bootargs console=${console},${baudrate} " \ + "rdinit=/linuxrc " \ + "g_mass_storage.stall=0 g_mass_storage.removable=1 " \ + "g_mass_storage.idVendor=0x066F g_mass_storage.idProduct=0x37FF "\ + "g_mass_storage.iSerialNumber=\"\" "\ + "clk_ignore_unused "\ + "\0" \ + "initrd_addr=0x83800000\0" \ + "bootcmd_mfg=run mfgtool_args;bootz ${loadaddr} ${initrd_addr} ${fdt_addr};\0" \ + EXTRA_ENV_M4 + +#endif /* __CONFIG_H */