diff options
author | Sascha Hauer <s.hauer@pengutronix.de> | 2019-07-12 07:10:19 +0200 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2019-07-12 07:10:19 +0200 |
commit | af66ec677c40dfaed68a124d21dd59d5f8c63381 (patch) | |
tree | 8e58a7467542269f631215fbf60637c4a974ff6f /arch/arm/boards | |
parent | f9dfe479ebacbb3efacef4525682546713b11597 (diff) | |
parent | bc482d1ab37b8aeb8cbb0aa380df93ff6e73c9bc (diff) | |
download | barebox-af66ec677c40dfaed68a124d21dd59d5f8c63381.tar.gz barebox-af66ec677c40dfaed68a124d21dd59d5f8c63381.tar.xz |
Merge branch 'for-next/zii'
Diffstat (limited to 'arch/arm/boards')
-rw-r--r-- | arch/arm/boards/Makefile | 2 | ||||
-rw-r--r-- | arch/arm/boards/zii-imx7d-dev/Makefile | 3 | ||||
-rw-r--r-- | arch/arm/boards/zii-imx7d-dev/board.c (renamed from arch/arm/boards/zii-imx7d-rpu2/board.c) | 3 | ||||
-rw-r--r-- | arch/arm/boards/zii-imx7d-dev/flash-header-zii-imx7d-dev.imxcfg (renamed from arch/arm/boards/zii-imx7d-rpu2/flash-header-zii-imx7d-rpu2.imxcfg) | 0 | ||||
-rw-r--r-- | arch/arm/boards/zii-imx7d-dev/lowlevel.c | 108 | ||||
-rw-r--r-- | arch/arm/boards/zii-imx7d-rpu2/Makefile | 2 | ||||
-rw-r--r-- | arch/arm/boards/zii-imx7d-rpu2/lowlevel.c | 50 |
7 files changed, 114 insertions, 54 deletions
diff --git a/arch/arm/boards/Makefile b/arch/arm/boards/Makefile index bdf78d068d..a814ab8239 100644 --- a/arch/arm/boards/Makefile +++ b/arch/arm/boards/Makefile @@ -164,7 +164,7 @@ obj-$(CONFIG_MACH_ZII_RDU1) += zii-imx51-rdu1/ obj-$(CONFIG_MACH_ZII_RDU2) += zii-imx6q-rdu2/ obj-$(CONFIG_MACH_ZII_IMX8MQ_DEV) += zii-imx8mq-dev/ obj-$(CONFIG_MACH_ZII_VF610_DEV) += zii-vf610-dev/ -obj-$(CONFIG_MACH_ZII_IMX7D_RPU2) += zii-imx7d-rpu2/ +obj-$(CONFIG_MACH_ZII_IMX7D_DEV) += zii-imx7d-dev/ obj-$(CONFIG_MACH_WAGO_PFC_AM35XX) += wago-pfc-am35xx/ obj-$(CONFIG_MACH_LS1046ARDB) += ls1046ardb/ obj-$(CONFIG_MACH_TQMLS1046A) += tqmls1046a/ diff --git a/arch/arm/boards/zii-imx7d-dev/Makefile b/arch/arm/boards/zii-imx7d-dev/Makefile new file mode 100644 index 0000000000..e1baed17ba --- /dev/null +++ b/arch/arm/boards/zii-imx7d-dev/Makefile @@ -0,0 +1,3 @@ +CFLAGS_pbl-lowlevel.o := -fno-tree-switch-conversion -fno-jump-tables +obj-y += board.o +lwl-y += lowlevel.o diff --git a/arch/arm/boards/zii-imx7d-rpu2/board.c b/arch/arm/boards/zii-imx7d-dev/board.c index 0a99976b7d..89f0515306 100644 --- a/arch/arm/boards/zii-imx7d-rpu2/board.c +++ b/arch/arm/boards/zii-imx7d-dev/board.c @@ -33,7 +33,8 @@ static void zii_imx7d_rpu2_init_fec(void) static int zii_imx7d_rpu2_coredevices_init(void) { - if (!of_machine_is_compatible("zii,imx7d-zii-rpu2")) + if (!of_machine_is_compatible("zii,imx7d-zii-rpu2") && + !of_machine_is_compatible("zii,imx7d-rmu2")) return 0; zii_imx7d_rpu2_init_fec(); diff --git a/arch/arm/boards/zii-imx7d-rpu2/flash-header-zii-imx7d-rpu2.imxcfg b/arch/arm/boards/zii-imx7d-dev/flash-header-zii-imx7d-dev.imxcfg index 46f3d95048..46f3d95048 100644 --- a/arch/arm/boards/zii-imx7d-rpu2/flash-header-zii-imx7d-rpu2.imxcfg +++ b/arch/arm/boards/zii-imx7d-dev/flash-header-zii-imx7d-dev.imxcfg diff --git a/arch/arm/boards/zii-imx7d-dev/lowlevel.c b/arch/arm/boards/zii-imx7d-dev/lowlevel.c new file mode 100644 index 0000000000..3ad4940da8 --- /dev/null +++ b/arch/arm/boards/zii-imx7d-dev/lowlevel.c @@ -0,0 +1,108 @@ +// SPDX-License-Identifier: GPL-2.0+ + +/* + * Copyright (C) 2018 Zodiac Inflight Innovation + * Author: Andrey Smirnov <andrew.smirnov@gmail.com> + */ + +#include <debug_ll.h> +#include <io.h> +#include <common.h> +#include <linux/sizes.h> +#include <mach/generic.h> +#include <asm/barebox-arm-head.h> +#include <asm/barebox-arm.h> +#include <mach/imx7-ccm-regs.h> +#include <mach/iomux-mx7.h> +#include <mach/debug_ll.h> +#include <asm/cache.h> +#include <mach/esdctl.h> + +extern char __dtb_imx7d_zii_rpu2_start[]; +extern char __dtb_imx7d_zii_rmu2_start[]; + +static inline void setup_uart(void) +{ + void __iomem *iomux = IOMEM(MX7_IOMUXC_BASE_ADDR); + void __iomem *ccm = IOMEM(MX7_CCM_BASE_ADDR); + + writel(CCM_CCGR_SETTINGn_NEEDED(0), + ccm + CCM_CCGRn_CLR(CCM_CCGR_UART2)); + writel(CCM_TARGET_ROOTn_ENABLE | UART2_CLK_ROOT__OSC_24M, + ccm + CCM_TARGET_ROOTn(UART2_CLK_ROOT)); + writel(CCM_CCGR_SETTINGn_NEEDED(0), + ccm + CCM_CCGRn_SET(CCM_CCGR_UART2)); + + mx7_setup_pad(iomux, MX7D_PAD_UART2_TX_DATA__UART2_DCE_TX); + + imx7_uart_setup_ll(); + + putc_ll('>'); +} + +enum zii_platform_imx7d_type { + ZII_PLATFORM_IMX7D_RPU2 = 0b0000, + ZII_PLATFORM_IMX7D_RMU2 = 0b1000, +}; + +static unsigned int get_system_type(void) +{ +#define GPIO_DR 0x000 +#define GPIO_GDIR 0x004 +#define SYSTEM_TYPE GENMASK(15, 12) + + u32 gdir, dr; + void __iomem *gpio2 = IOMEM(MX7_GPIO2_BASE_ADDR); + void __iomem *iomuxbase = IOMEM(MX7_IOMUXC_BASE_ADDR); + + /* + * System type is encoded as a 4-bit number specified by the + * following pins (pulled up or down with resistors on the + * board). + */ + imx_setup_pad(iomuxbase, MX7D_PAD_EPDC_DATA12__GPIO2_IO12); + imx_setup_pad(iomuxbase, MX7D_PAD_EPDC_DATA13__GPIO2_IO13); + imx_setup_pad(iomuxbase, MX7D_PAD_EPDC_DATA14__GPIO2_IO14); + imx_setup_pad(iomuxbase, MX7D_PAD_EPDC_DATA15__GPIO2_IO15); + + gdir = readl(gpio2 + GPIO_GDIR); + gdir &= ~SYSTEM_TYPE; + writel(gdir, gpio2 + GPIO_GDIR); + + dr = readl(gpio2 + GPIO_DR); + + return FIELD_GET(SYSTEM_TYPE, dr); +} + +ENTRY_FUNCTION(start_zii_imx7d_dev, r0, r1, r2) +{ + void *fdt; + const unsigned int system_type = get_system_type(); + + imx7_cpu_lowlevel_init(); + + if (IS_ENABLED(CONFIG_DEBUG_LL)) + setup_uart(); + + switch (system_type) { + default: + if (IS_ENABLED(CONFIG_DEBUG_LL)) { + relocate_to_current_adr(); + setup_c(); + puts_ll("\n*********************************\n"); + puts_ll("* Unknown system type: "); + puthex_ll(system_type); + puts_ll("\n* Assuming RPU2\n"); + puts_ll("*********************************\n"); + } + /* FALLTHROUGH */ + case ZII_PLATFORM_IMX7D_RPU2: + fdt = __dtb_imx7d_zii_rpu2_start; + break; + case ZII_PLATFORM_IMX7D_RMU2: + fdt = __dtb_imx7d_zii_rmu2_start; + break; + } + + imx7d_barebox_entry(fdt + get_runtime_offset()); +} diff --git a/arch/arm/boards/zii-imx7d-rpu2/Makefile b/arch/arm/boards/zii-imx7d-rpu2/Makefile deleted file mode 100644 index 01c7a259e9..0000000000 --- a/arch/arm/boards/zii-imx7d-rpu2/Makefile +++ /dev/null @@ -1,2 +0,0 @@ -obj-y += board.o -lwl-y += lowlevel.o diff --git a/arch/arm/boards/zii-imx7d-rpu2/lowlevel.c b/arch/arm/boards/zii-imx7d-rpu2/lowlevel.c deleted file mode 100644 index 1eeab7d216..0000000000 --- a/arch/arm/boards/zii-imx7d-rpu2/lowlevel.c +++ /dev/null @@ -1,50 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0+ - -/* - * Copyright (C) 2018 Zodiac Inflight Innovation - * Author: Andrey Smirnov <andrew.smirnov@gmail.com> - */ - -#include <debug_ll.h> -#include <io.h> -#include <common.h> -#include <linux/sizes.h> -#include <mach/generic.h> -#include <asm/barebox-arm-head.h> -#include <asm/barebox-arm.h> -#include <mach/imx7-ccm-regs.h> -#include <mach/iomux-mx7.h> -#include <mach/debug_ll.h> -#include <asm/cache.h> -#include <mach/esdctl.h> - -extern char __dtb_imx7d_zii_rpu2_start[]; - -static inline void setup_uart(void) -{ - void __iomem *iomux = IOMEM(MX7_IOMUXC_BASE_ADDR); - void __iomem *ccm = IOMEM(MX7_CCM_BASE_ADDR); - - writel(CCM_CCGR_SETTINGn_NEEDED(0), - ccm + CCM_CCGRn_CLR(CCM_CCGR_UART2)); - writel(CCM_TARGET_ROOTn_ENABLE | UART2_CLK_ROOT__OSC_24M, - ccm + CCM_TARGET_ROOTn(UART2_CLK_ROOT)); - writel(CCM_CCGR_SETTINGn_NEEDED(0), - ccm + CCM_CCGRn_SET(CCM_CCGR_UART2)); - - mx7_setup_pad(iomux, MX7D_PAD_UART2_TX_DATA__UART2_DCE_TX); - - imx7_uart_setup_ll(); - - putc_ll('>'); -} - -ENTRY_FUNCTION(start_zii_imx7d_rpu2, r0, r1, r2) -{ - imx7_cpu_lowlevel_init(); - - if (IS_ENABLED(CONFIG_DEBUG_LL)) - setup_uart(); - - imx7d_barebox_entry(__dtb_imx7d_zii_rpu2_start + get_runtime_offset()); -} |