[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