[PATCH v2] ARM: i.MX: Kamstrup mx7 concentrator board support

Sascha Hauer sha at pengutronix.de
Wed Apr 14 15:37:10 BST 2021


On Tue, Apr 13, 2021 at 08:17:27AM +0200, Lars Pedersen wrote:
> This adds support for Kamstrup mx7 concentrator board
> 
> Signed-off-by: Lars Pedersen <lapeddk at gmail.com>
> Reviewed-by: Bruno Thomsen <bruno.thomsen at gmail.com>
> Reviewed-by: Ahmad Fatoum <a.fatoum at pengutronix.de>
> ---
> Changes since v1:
> - Removed all board.c specific stuff
> - Board power reset via new GPIO board power-off driver
> - TPM reset will now be handled entirely in hardware
> - Set barebox_set_model removed.

Applied like it is here, without the fixup.

Sascha

> 
>  arch/arm/boards/Makefile                      |   1 +
>  .../boards/kamstrup-mx7-concentrator/Makefile |   1 +
>  .../flash-header-tqma7d.imxcfg                |  79 +++++++++++++
>  .../kamstrup-mx7-concentrator/lowlevel.c      |  35 ++++++
>  arch/arm/configs/imx_v7_defconfig             |   1 +
>  arch/arm/dts/Makefile                         |   1 +
>  arch/arm/dts/imx7d-flex-concentrator-mfg.dts  | 108 ++++++++++++++++++
>  arch/arm/mach-imx/Kconfig                     |   5 +
>  images/Makefile.imx                           |   5 +
>  9 files changed, 236 insertions(+)
>  create mode 100644 arch/arm/boards/kamstrup-mx7-concentrator/Makefile
>  create mode 100644 arch/arm/boards/kamstrup-mx7-concentrator/flash-header-tqma7d.imxcfg
>  create mode 100644 arch/arm/boards/kamstrup-mx7-concentrator/lowlevel.c
>  create mode 100644 arch/arm/dts/imx7d-flex-concentrator-mfg.dts
> 
> diff --git a/arch/arm/boards/Makefile b/arch/arm/boards/Makefile
> index 9ccb75e27..0e59d6a77 100644
> --- a/arch/arm/boards/Makefile
> +++ b/arch/arm/boards/Makefile
> @@ -63,6 +63,7 @@ obj-$(CONFIG_MACH_HABA_KNX_LITE)		+= haba-knx/
>  obj-$(CONFIG_MACH_IMX21ADS)			+= freescale-mx21-ads/
>  obj-$(CONFIG_MACH_IMX233_OLINUXINO)		+= imx233-olinuxino/
>  obj-$(CONFIG_MACH_IMX27ADS)			+= freescale-mx27-ads/
> +obj-$(CONFIG_MACH_KAMSTRUP_MX7_CONCENTRATOR)	+= kamstrup-mx7-concentrator/
>  obj-$(CONFIG_MACH_KINDLE3)			+= kindle3/
>  obj-$(CONFIG_MACH_KONTRON_SAMX6I)		+= kontron-samx6i/
>  obj-$(CONFIG_MACH_LENOVO_IX4_300D)		+= lenovo-ix4-300d/
> diff --git a/arch/arm/boards/kamstrup-mx7-concentrator/Makefile b/arch/arm/boards/kamstrup-mx7-concentrator/Makefile
> new file mode 100644
> index 000000000..7ab9f5274
> --- /dev/null
> +++ b/arch/arm/boards/kamstrup-mx7-concentrator/Makefile
> @@ -0,0 +1 @@
> +lwl-y += lowlevel.o
> \ No newline at end of file
> diff --git a/arch/arm/boards/kamstrup-mx7-concentrator/flash-header-tqma7d.imxcfg b/arch/arm/boards/kamstrup-mx7-concentrator/flash-header-tqma7d.imxcfg
> new file mode 100644
> index 000000000..4b3632411
> --- /dev/null
> +++ b/arch/arm/boards/kamstrup-mx7-concentrator/flash-header-tqma7d.imxcfg
> @@ -0,0 +1,79 @@
> +soc imx7
> +loadaddr 0xbfbff000
> +ivtofs 0x400
> +
> +#include <mach/imx7-ddr-regs.h>
> +
> +wm 32 0x30340004 0x4F400005 /* IOMUXC_GPR_GPR1 */
> +/* Clear then set bit30 to ensure exit from DDR retention */
> +wm 32 0x30360388 0x40000000
> +wm 32 0x30360384 0x40000000
> +
> +/* TQMa7x DRAM Timing REV0100 */
> +/* DCD Code i.MX7D/S 528 MHz 1 GByte Samsung K4B4G1646D */
> +wm 32 0x30360070 0x0070302C /* CCM_ANALOG_PLL_DDRx */
> +wm 32  0x30360090 0x00000000 /* CCM_ANALOG_PLL_NUM */
> +wm 32  0x30360070 0x0060302C /* CCM_ANALOG_PLL_DDRx */
> +check 32 until_all_bits_set 0x30360070 0x80000000
> +wm 32 0x30391000 0x00000002 /* SRC_DDRC_RCR */
> +
> +wm 32 MX7_DDRC_MSTR 0x01040001
> +wm 32 MX7_DDRC_DFIUPD0 0x80400003
> +wm 32 MX7_DDRC_DFIUPD1 0x00100020
> +wm 32 MX7_DDRC_DFIUPD2 0x80100004
> +wm 32 MX7_DDRC_RFSHTMG 0x00200045
> +wm 32 MX7_DDRC_MP_PCTRL_0 0x00000001
> +wm 32 MX7_DDRC_INIT0 0x00020081
> +wm 32 MX7_DDRC_INIT1 0x00680000
> +wm 32 MX7_DDRC_INIT3 0x09300004
> +wm 32 MX7_DDRC_INIT4 0x00480000
> +wm 32 MX7_DDRC_INIT5 0x00100004
> +wm 32 MX7_DDRC_RANKCTL 0x0000033F
> +wm 32 MX7_DDRC_DRAMTMG0 0x090E0809
> +wm 32 MX7_DDRC_DRAMTMG1 0x0007020E
> +wm 32 MX7_DDRC_DRAMTMG2 0x03040407
> +wm 32 MX7_DDRC_DRAMTMG3 0x00002006
> +wm 32 MX7_DDRC_DRAMTMG4 0x04020304
> +wm 32 MX7_DDRC_DRAMTMG5 0x03030202
> +wm 32 MX7_DDRC_DRAMTMG8 0x00000803
> +wm 32 MX7_DDRC_ZQCTL0 0x00800020
> +wm 32 MX7_DDRC_DFITMG0 0x02098204
> +wm 32 MX7_DDRC_DFITMG1 0x00030303
> +wm 32 MX7_DDRC_ADDRMAP0 0x00000016
> +wm 32 MX7_DDRC_ADDRMAP1 0x00171717
> +wm 32 MX7_DDRC_ADDRMAP4 0x00000F0F
> +wm 32 MX7_DDRC_ADDRMAP5 0x04040404
> +wm 32 MX7_DDRC_ADDRMAP6 0x0F040404
> +wm 32 MX7_DDRC_ODTCFG 0x06000604
> +wm 32 MX7_DDRC_ODTMAP 0x00000001
> +wm 32 0x30391000 0x00000000 /* SRC_DDRC_RCR */
> +wm 32 MX7_DDR_PHY_PHY_CON0 0x17420F40
> +wm 32 MX7_DDR_PHY_PHY_CON1 0x10210100
> +wm 32 MX7_DDR_PHY_PHY_CON4 0x00060807
> +wm 32 MX7_DDR_PHY_MDLL_CON0 0x1010007E
> +wm 32 MX7_DDR_PHY_DRVDS_CON0 0x00000924
> +/* DDR_PHY_CMD_DESKEW_CON0 not set */
> +/* DDR_PHY_CMD_DESKEW_CON1 not set */
> +/* DDR_PHY_CMD_DESKEW_CON2 not set */
> +/* DDR_PHY_CMD_DESKEW_CON3 not set */
> +/* DDR_PHY_LVL_CON0 not set */
> +wm 32 MX7_DDR_PHY_OFFSET_RD_CON0 0x0B0B0B0B
> +wm 32 MX7_DDR_PHY_OFFSET_WR_CON0 0x06060606
> +wm 32 MX7_DDR_PHY_CMD_SDLL_CON0 0x01000010
> +wm 32 MX7_DDR_PHY_CMD_SDLL_CON0 0x00000010
> +
> +wm 32 MX7_DDR_PHY_ZQ_CON0 0x0C407304
> +wm 32 MX7_DDR_PHY_ZQ_CON0 0x0C447304
> +wm 32 MX7_DDR_PHY_ZQ_CON0 0x0C447306
> +check 32 until_all_bits_set MX7_DDR_PHY_ZQ_CON1 0x1 /* ZQ Calibration is finished */
> +wm 32 MX7_DDR_PHY_ZQ_CON0 0x0C447304
> +wm 32 MX7_DDR_PHY_ZQ_CON0 0x0C407304
> +
> +wm 32 0x30384130 0x00000000 /* CCM_CCGRn */
> +wm 32 0x30340020 0x00000178 /* IOMUXC_GPR_GPR8 */
> +wm 32 0x30384130 0x00000002 /* CCM_CCGRn */
> +wm 32 0x30790018 0x0000000f /* DDR_PHY_LP_CON0 */
> +
> +/* DDRC_STAT */
> +check 32 until_all_bits_set 0x307a0004 0x1
> +
> diff --git a/arch/arm/boards/kamstrup-mx7-concentrator/lowlevel.c b/arch/arm/boards/kamstrup-mx7-concentrator/lowlevel.c
> new file mode 100644
> index 000000000..8cd6d67f7
> --- /dev/null
> +++ b/arch/arm/boards/kamstrup-mx7-concentrator/lowlevel.c
> @@ -0,0 +1,35 @@
> +#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_z_imx7d_flex_concentrator_mfg_start[];
> +
> +static inline void setup_uart(void)
> +{
> +	imx7_early_setup_uart_clock();
> +
> +	imx7_setup_pad(MX7D_PAD_SAI2_TX_BCLK__UART4_DCE_TX);
> +
> +	imx7_uart_setup_ll();
> +
> +	putc_ll('>');
> +}
> +
> +ENTRY_FUNCTION(start_kamstrup_mx7_concentrator, r0, r1, r2)
> +{
> +	imx7_cpu_lowlevel_init();
> +
> +	if (IS_ENABLED(CONFIG_DEBUG_LL))
> +		setup_uart();
> +
> +	imx7d_barebox_entry(__dtb_z_imx7d_flex_concentrator_mfg_start + get_runtime_offset());
> +}
> diff --git a/arch/arm/configs/imx_v7_defconfig b/arch/arm/configs/imx_v7_defconfig
> index 16e109464..624698ae3 100644
> --- a/arch/arm/configs/imx_v7_defconfig
> +++ b/arch/arm/configs/imx_v7_defconfig
> @@ -13,6 +13,7 @@ CONFIG_MACH_FREESCALE_MX53_VMX53=y
>  CONFIG_MACH_TX53=y
>  CONFIG_MACH_PHYTEC_SOM_IMX6=y
>  CONFIG_MACH_PROTONIC_IMX6=y
> +CONFIG_MACH_KAMSTRUP_MX7_CONCENTRATOR=y
>  CONFIG_MACH_KONTRON_SAMX6I=y
>  CONFIG_MACH_DFI_FS700_M60=y
>  CONFIG_MACH_GUF_SANTARO=y
> diff --git a/arch/arm/dts/Makefile b/arch/arm/dts/Makefile
> index d5f61768a..d66b6db07 100644
> --- a/arch/arm/dts/Makefile
> +++ b/arch/arm/dts/Makefile
> @@ -30,6 +30,7 @@ lwl-$(CONFIG_MACH_GRINN_LITEBOARD) += imx6ul-liteboard.dtb.o
>  lwl-$(CONFIG_MACH_GUF_SANTARO) += imx6q-guf-santaro.dtb.o
>  lwl-$(CONFIG_MACH_GUF_VINCELL) += imx53-guf-vincell.dtb.o imx53-guf-vincell-lt.dtb.o
>  lwl-$(CONFIG_MACH_GW_VENTANA) += imx6q-gw54xx.dtb.o
> +lwl-$(CONFIG_MACH_KAMSTRUP_MX7_CONCENTRATOR) += imx7d-flex-concentrator-mfg.dtb.o
>  lwl-$(CONFIG_MACH_KONTRON_SAMX6I) += imx6q-samx6i.dtb.o \
>  					imx6dl-samx6i.dtb.o
>  lwl-$(CONFIG_MACH_LENOVO_IX4_300D) += armada-xp-lenovo-ix4-300d-bb.dtb.o
> diff --git a/arch/arm/dts/imx7d-flex-concentrator-mfg.dts b/arch/arm/dts/imx7d-flex-concentrator-mfg.dts
> new file mode 100644
> index 000000000..d174ef725
> --- /dev/null
> +++ b/arch/arm/dts/imx7d-flex-concentrator-mfg.dts
> @@ -0,0 +1,108 @@
> +/*
> + * The code contained herein is licensed under the GNU General Public
> + * License. You may obtain a copy of the GNU General Public License
> + * Version 2 or later at the following locations:
> + *
> + * http://www.opensource.org/licenses/gpl-license.html
> + * http://www.gnu.org/copyleft/gpl.html
> + */
> +
> +#include <arm/imx7d-flex-concentrator-mfg.dts>
> +
> +/ {
> +	chosen {
> +		environment {
> +			compatible = "barebox,environment";
> +			device-path = &environment_emmc;
> +		};
> +	};
> +
> +	aliases {
> +		state = &state_emmc;
> +	};
> +
> +	state_emmc: state {
> +		#address-cells = <1>;
> +		#size-cells = <1>;
> +		compatible = "barebox,state";
> +		magic = <0x4b414d31>;
> +		backend-type = "raw";
> +		backend = <&backend_state_emmc>;
> +		backend-stridesize = <0x200>;
> +
> +		bootstate {
> +			#address-cells = <1>;
> +			#size-cells = <1>;
> +
> +			system0 {
> +				#address-cells = <1>;
> +				#size-cells = <1>;
> +
> +				remaining_attempts at 0 {
> +					reg = <0x0 0x4>;
> +					type = "uint32";
> +					default = <10>;
> +				};
> +
> +				priority at 4 {
> +					reg = <0x4 0x4>;
> +					type = "uint32";
> +					default = <21>;
> +				};
> +			};
> +
> +			system1 {
> +				#address-cells = <1>;
> +				#size-cells = <1>;
> +
> +				remaining_attempts at 8 {
> +					reg = <0x8 0x4>;
> +					type = "uint32";
> +					default = <0>;
> +				};
> +
> +				priority at c {
> +					reg = <0xc 0x4>;
> +					type = "uint32";
> +					default = <20>;
> +				};
> +			};
> +
> +			last_chosen at 10 {
> +				reg = <0x10 0x4>;
> +				type = "uint32";
> +			};
> +		};
> +	};
> +};
> +
> +/* eMMC */
> +&usdhc3 {
> +	partitions {
> +		compatible = "fixed-partitions";
> +		#address-cells = <1>;
> +		#size-cells = <1>;
> +
> +		partition at 0 {
> +			label = "barebox";
> +			reg = <0x0 0x100000>;
> +		};
> +
> +		environment_emmc: partition at 100000 {
> +			label = "barebox-environment";
> +			reg = <0x100000 0x100000>;
> +		};
> +
> +		backend_state_emmc: partition at 200000 {
> +			label = "barebox-state";
> +			reg = <0x200000 0x100000>;
> +		};
> +	};
> +};
> +
> +/* FIXME: barebox serial is broken when barebox applies requested reparenting */
> +&uart4 {
> +	/delete-property/ assigned-clocks;
> +	/delete-property/ assigned-clock-parents;
> +};
> +
> diff --git a/arch/arm/mach-imx/Kconfig b/arch/arm/mach-imx/Kconfig
> index 3f8012c73..cc73d0a0d 100644
> --- a/arch/arm/mach-imx/Kconfig
> +++ b/arch/arm/mach-imx/Kconfig
> @@ -526,6 +526,11 @@ config MACH_FREESCALE_MX7_SABRESD
>  
>  	  https://goo.gl/6EKGdk
>  
> +config MACH_KAMSTRUP_MX7_CONCENTRATOR
> +	bool "Kamstrup i.MX7 Concentrator"
> +	select ARCH_IMX7
> +	select ARM_USE_COMPRESSED_DTB
> +
>  config MACH_NXP_IMX6ULL_EVK
>  	bool "NXP i.MX6ull EVK Board"
>  	select ARCH_IMX6UL
> diff --git a/images/Makefile.imx b/images/Makefile.imx
> index b892ec019..bc5ad1c7c 100644
> --- a/images/Makefile.imx
> +++ b/images/Makefile.imx
> @@ -403,6 +403,11 @@ CFG_start_zii_imx7d_dev.pblb.imximg = $(board)/zii-imx7d-dev/flash-header-zii-im
>  FILE_barebox-zii-imx7d-dev.img = start_zii_imx7d_dev.pblb.imximg
>  image-$(CONFIG_MACH_ZII_IMX7D_DEV) += barebox-zii-imx7d-dev.img
>  
> +pblb-$(CONFIG_MACH_KAMSTRUP_MX7_CONCENTRATOR) += start_kamstrup_mx7_concentrator
> +CFG_start_kamstrup_mx7_concentrator.pblb.imximg = $(board)/kamstrup-mx7-concentrator/flash-header-tqma7d.imxcfg
> +FILE_barebox-kamstrup-mx7-concentrator.img = start_kamstrup_mx7_concentrator.pblb.imximg
> +image-$(CONFIG_MACH_KAMSTRUP_MX7_CONCENTRATOR) += barebox-kamstrup-mx7-concentrator.img
> +
>  # ----------------------- i.MX8mm based boards --------------------------
>  pblb-$(CONFIG_MACH_NXP_IMX8MM_EVK) += start_nxp_imx8mm_evk
>  CFG_start_nxp_imx8mm_evk.pblb.imximg = $(board)/nxp-imx8mm-evk/flash-header-imx8mm-evk.imxcfg
> -- 
> 2.30.2
> 
> 
> _______________________________________________
> barebox mailing list
> barebox at lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/barebox
> 

-- 
Pengutronix e.K.                           |                             |
Steuerwalder Str. 21                       | http://www.pengutronix.de/  |
31137 Hildesheim, Germany                  | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |



More information about the barebox mailing list