diff options
author | Robin van der Gracht <robin@protonic.nl> | 2021-08-25 14:54:30 +0200 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2021-10-04 13:52:22 +0200 |
commit | 1768de74fc32fd2cf923fe066f5cf28e20953a33 (patch) | |
tree | 47c823f1edcbb253e24684234696f22b72b7ef0e /arch/arm/boards/protonic-imx6 | |
parent | eed06d3f08dc0bc869e6b8745c5e9ac03f7a9511 (diff) | |
download | barebox-1768de74fc32fd2cf923fe066f5cf28e20953a33.tar.gz barebox-1768de74fc32fd2cf923fe066f5cf28e20953a33.tar.xz |
ARM: boards: protonic-imx6: Add support for jozacp board
The jozacp is an industrial imx6ull based board with ethernet,
wifi and zigbee.
Note: this patch includes WIP version of the devicetree:
arch/arm/dts/imx6ull-jozacp.dtsi. This devicetree will be reworked,
mainlined to the kernel and at the end replaced with the kernel
mainline version.
Signed-off-by: Robin van der Gracht <robin@protonic.nl>
Signed-off-by: Oleksij Rempel <o.rempel@pengutronix.de>
Link: https://lore.barebox.org/20210825125430.26901-5-o.rempel@pengutronix.de
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'arch/arm/boards/protonic-imx6')
-rw-r--r-- | arch/arm/boards/protonic-imx6/board.c | 23 | ||||
-rw-r--r-- | arch/arm/boards/protonic-imx6/flash-header-jozacp.imxcfg | 81 | ||||
-rw-r--r-- | arch/arm/boards/protonic-imx6/lowlevel.c | 20 |
3 files changed, 124 insertions, 0 deletions
diff --git a/arch/arm/boards/protonic-imx6/board.c b/arch/arm/boards/protonic-imx6/board.c index cacbdafa31..9b2a00c6c3 100644 --- a/arch/arm/boards/protonic-imx6/board.c +++ b/arch/arm/boards/protonic-imx6/board.c @@ -51,6 +51,8 @@ enum { HW_TYPE_LANMCU = 23, HW_TYPE_PLYBAS = 24, HW_TYPE_VICTGO = 28, + HW_TYPE_JOZACP = 30, + HW_TYPE_JOZACPP = 31, }; enum prt_imx6_kvg_pw_mode { @@ -1088,6 +1090,26 @@ static const struct prt_machine_data prt_imx6_cfg_prtwd3[] = { }, }; +static const struct prt_machine_data prt_imx6_cfg_jozacp[] = { + { + .hw_id = HW_TYPE_JOZACP, + .hw_rev = 1, + .i2c_addr = 0x51, + .i2c_adapter = 0, + .emmc_usdhc = 0, + .flags = PRT_IMX6_BOOTSRC_EMMC | PRT_IMX6_BOOTCHOOSER, + }, { + .hw_id = HW_TYPE_JOZACPP, + .hw_rev = 1, + .i2c_addr = 0x51, + .i2c_adapter = 0, + .emmc_usdhc = 0, + .flags = PRT_IMX6_BOOTSRC_EMMC | PRT_IMX6_BOOTCHOOSER, + }, { + .hw_id = UINT_MAX + }, +}; + static const struct of_device_id prt_imx6_of_match[] = { { .compatible = "alt,alti6p", .data = &prt_imx6_cfg_alti6p }, { .compatible = "kvg,victgo", .data = &prt_imx6_cfg_victgo }, @@ -1104,6 +1126,7 @@ static const struct of_device_id prt_imx6_of_match[] = { { .compatible = "prt,prtvt7", .data = &prt_imx6_cfg_prtvt7 }, { .compatible = "prt,prtwd2", .data = &prt_imx6_cfg_prtwd2 }, { .compatible = "prt,prtwd3", .data = &prt_imx6_cfg_prtwd3 }, + { .compatible = "joz,jozacp", .data = &prt_imx6_cfg_jozacp }, { /* sentinel */ }, }; BAREBOX_DEEP_PROBE_ENABLE(prt_imx6_of_match); diff --git a/arch/arm/boards/protonic-imx6/flash-header-jozacp.imxcfg b/arch/arm/boards/protonic-imx6/flash-header-jozacp.imxcfg new file mode 100644 index 0000000000..ec9fb84108 --- /dev/null +++ b/arch/arm/boards/protonic-imx6/flash-header-jozacp.imxcfg @@ -0,0 +1,81 @@ +soc imx6 +loadaddr 0x80000000 +ivtofs 0x400 + +#include "ddr3-defines.imxcfg" +#include "padsetup-ul.imxcfg" + +/* Set Read data delay 3 delay units for all bits */ +wm 32 0x021b081c 0x33333333 +wm 32 0x021b0820 0x33333333 + +/* MDMISC No addr mirror, 1 WALAT, 5 RALAT, DDR3 mode */ +wm 32 0x021b0018 0x00011740 + +/* CSCR: Configuration mode */ +wm 32 0x021b001c 0x00008000 + +wm 32 0x021b000c MDCFG0_2G_400MHZ +wm 32 0x021b0010 MDCFG1_400MHZ +wm 32 0x021b0014 MDCFG2_400MHZ + +/* MDRWD */ +wm 32 0x021b002c 0x000026d2 + +wm 32 0x021b0030 MDOR_2G_400MHZ +wm 32 0x021b0008 MDOTC_400MHZ +wm 32 0x021b0004 MDPDC_400MHZ +wm 32 0x021b0040 0x00000047 /* MDASP_512MIB */ +wm 32 0x021b0000 MDCTL_2G_16BIT + +/* DDR3 MR config */ +wm 32 0x021b001c DDR3_MR2_400MHZ_RTT_120 + +/* + * DDR3 chip MR3, n = 3, vvvv = 0 (no configurable function of interest). + */ +wm 32 0x021b001c 0x00008033 + +wm 32 0x021b001c DDR3_MR1_RTT_120_ODS_40 +wm 32 0x021b001c DDR3_MR0_400MHZ + +/* + * ZQ calibration, n = 0x10 (Precharge all): + * Bit 10 = 1: Start ZQ calibration + * REGISTER: 0x04008040 + */ +wm 32 0x021b001c 0x04008040 + +/* MPZQHWCTRL */ +wm 32 0x021b0800 0xa1390003 /* ZQ mode = 3 force calibration */ + +wm 32 0x021b0020 MDREF_64KHZ + +wm 32 0x021b0818 0x00000117 /* MPODTCTRL_ODT_120 */ + +wm 32 0x021b083c MPDGCTRL0_CH0_400MHZ + +/* MPRDDLCTL, MPWRDLCTL */ +wm 32 0x021b0848 0x40404040 /* TODO. Read delay line conf. */ +wm 32 0x021b0850 0x40404040 /* For now set all to 50%. */ + +/* MPWLDECTRL0 */ +wm 32 0x021b080c 0x001f001f /* TODO. Write level delay control */ + +/* MPMUR0 */ +wm 32 0x021b08b8 0x00000800 /* Force measurement on delay lines */ + +/* MDSCR */ +wm 32 0x021b001c 0x00000000 /* Disable configuration req */ + +/* MAPSR */ +wm 32 0x021b0404 0x00011007 /* 0x0001...? FIXME: Disable powersaving for now */ + +/* Enable all clocks */ +wm 32 0x020c4068 0xffffffff +wm 32 0x020c406c 0xffffffff +wm 32 0x020c4070 0xffffffff +wm 32 0x020c4074 0xffffffff +wm 32 0x020c4078 0xffffffff +wm 32 0x020c407c 0xffffffff +wm 32 0x020c4080 0xffffffff diff --git a/arch/arm/boards/protonic-imx6/lowlevel.c b/arch/arm/boards/protonic-imx6/lowlevel.c index f5784cc6b1..ef8e7016d1 100644 --- a/arch/arm/boards/protonic-imx6/lowlevel.c +++ b/arch/arm/boards/protonic-imx6/lowlevel.c @@ -24,6 +24,7 @@ extern char __dtb_z_imx6dl_vicut1_start[]; extern char __dtb_z_imx6qp_prtwd3_start[]; extern char __dtb_z_imx6qp_vicutp_start[]; extern char __dtb_z_imx6ul_prti6g_start[]; +extern char __dtb_z_imx6ull_jozacp_start[]; ENTRY_FUNCTION(start_imx6q_prti6q, r0, r1, r2) { @@ -189,3 +190,22 @@ ENTRY_FUNCTION(start_imx6ul_prti6g, r0, r1, r2) imx6ul_barebox_entry(fdt); } + +ENTRY_FUNCTION(start_imx6ull_jozacp, r0, r1, r2) +{ + void *fdt; + + imx6ul_cpu_lowlevel_init(); + + /* Disconnect USDHC2 from SD card */ + writel(0x5, 0x020e0178); + writel(0x5, 0x020e017c); + writel(0x5, 0x020e0180); + writel(0x5, 0x020e0184); + writel(0x5, 0x020e0188); + writel(0x5, 0x020e018c); + + fdt = __dtb_z_imx6ull_jozacp_start + get_runtime_offset(); + + imx6ul_barebox_entry(fdt); +} |