Hello Johannes, On 01.06.23 09:40, Johannes Zink wrote: > diff --git a/arch/arm/boards/Makefile b/arch/arm/boards/Makefile > index 2877debad535..67b2fc07a395 100644 > --- a/arch/arm/boards/Makefile > +++ b/arch/arm/boards/Makefile > @@ -81,6 +81,7 @@ obj-$(CONFIG_MACH_NXP_IMX8MQ_EVK) += nxp-imx8mq-evk/ > obj-$(CONFIG_MACH_NXP_IMX8MM_EVK) += nxp-imx8mm-evk/ > obj-$(CONFIG_MACH_NXP_IMX8MN_EVK) += nxp-imx8mn-evk/ > obj-$(CONFIG_MACH_NXP_IMX8MP_EVK) += nxp-imx8mp-evk/ > +obj-$(CONFIG_MACH_KB_ALPHAJET) += kb-imx8mp-alphajet/ Could you rename this after the SoM instead? This would make it easier to share code. Alphajet specific stuff you can do by matching against the alphajet compatible. > +static int kb_alphajet_probe(struct device *dev) > +{ > + setup_ethernet_phy(); > + > + imx8m_bbu_internal_flexspi_nor_register_handler("QSPI", "/dev/m25p0.boot", BBU_HANDLER_FLAG_DEFAULT); > + > + return 0; > +} > + > +static const struct of_device_id kb_alphajet_of_match[] = { > + { .compatible = "kb,alphajet" }, Is anything of the above really alphajet specific? If both PHY and QSPI flash are on SOM, you should match against SoM compatible here. > + { /* Sentinel */ } > +}; > +BAREBOX_DEEP_PROBE_ENABLE(kb_alphajet_of_match); > + > +static struct driver kb_alphajet_board_driver = { > + .name = "board-kb-alphajet", > + .probe = kb_alphajet_probe, > + .of_compatible = kb_alphajet_of_match, > +}; > +static void power_init_board(void) > +{ > + struct pbl_i2c *i2c; > + > + imx8mp_setup_pad(MX8MP_PAD_I2C1_SCL__I2C1_SCL | I2C_PAD_CTRL); > + imx8mp_setup_pad(MX8MP_PAD_I2C1_SDA__I2C1_SDA | I2C_PAD_CTRL); > + > + imx8mp_early_clock_init(); Move this above power_init_board(). See https://lore.barebox.org/barebox/20230523095330.3475712-1-a.fatoum@xxxxxxxxxxxxxx/ > + imx8m_ccgr_clock_enable(IMX8M_CCM_CCGR_I2C1); > + > + i2c = imx8m_i2c_early_init(IOMEM(MX8MP_I2C1_BASE_ADDR)); > + > + pmic_configure(i2c, 0x25, pca9450_cfg, ARRAY_SIZE(pca9450_cfg)); > +} > + > +extern struct dram_timing_info dram_timing_4g; > + > +static void start_atf(void) > +{ > + /* > + * If we are in EL3 we are running for the first time and need to > + * initialize the DRAM and run TF-A (BL31). The TF-A will then jump > + * to DRAM in EL2. > + */ > + if (current_el() != 3) > + return; > + > + power_init_board(); > + > + imx8mp_ddr_init(&dram_timing_4g, DRAM_TYPE_LPDDR4); > + > + imx8mp_load_and_start_image_via_tfa(); > +} > + > diff --git a/arch/arm/dts/imx8mp-koenigbauer-alphajet.dts b/arch/arm/dts/imx8mp-koenigbauer-alphajet.dts > new file mode 100644 > index 000000000000..1b2e8272aad6 > --- /dev/null > +++ b/arch/arm/dts/imx8mp-koenigbauer-alphajet.dts You will have an easier time if you split this up into imx8mp-koenigbauer-alphajet.dtsi which is your kernel DT and imx8mp-koenigbauer-alphajet.dts which just contains your barebox overrides. > @@ -0,0 +1,180 @@ > +// SPDX-License-Identifier: (GPL-2.0+ OR MIT) > +/* > + * Copyright 2023 Pengutronix, Johannes Zink <j.zink@xxxxxxxxxxxxxx> > + */ > +/dts-v1/; > + > +#include "imx8mp-cgtqx8p.dtsi" > + > +/ { > + model = "Koenig+Bauer Alphajet"; > + compatible = "kb,alphajet", "cgt,qxp8p", "fsl,imx8mp"; Is 8p correct or should this be 8mp? > + > + aliases { > + state = &state_emmc; > + }; > + > + chosen { > + stdout-path = &uart1; // labeled UART0 on baseboard, on connector J12 > + environment-emmc { > + compatible = "barebox,environment"; > + device-path = &env_emmc; > + }; > + }; > + > + display { > + compatible = "innolux,g101ice-l01"; > + backlight = <&lvds0_backlight>; > + power-supply = <®_lfp_vdd>; > + > + port { > + panel_in_lvds0: endpoint { > + remote-endpoint = <&ldb_lvds_ch0>; > + }; > + }; > + }; > + > + state_emmc: state { > + compatible = "barebox,state"; > + magic = <0xabff4b1f>; > + backend-type = "raw"; > + backend = <&backend_state_emmc>; > + backend-storage-type="direct"; > + backend-stridesize = <0x40>; > + #address-cells = <1>; > + #size-cells = <1>; > + > + bootstate { > + #address-cells = <1>; > + #size-cells = <1>; > + > + system0 { > + #address-cells = <1>; > + #size-cells = <1>; > + > + remaining_attempts@0 { > + reg = <0x0 0x4>; > + type = "uint32"; > + default = <2>; > + }; > + > + priority@4 { > + reg = <0x4 0x4>; > + type= "uint32"; > + default = <21>; > + }; > + }; > + > + system1 { > + #address-cells = <1>; > + #size-cells = <1>; > + > + remaining_attempts@8 { > + reg = <0x8 0x4>; > + type = "uint32"; > + default = <2>; > + }; > + > + priority@c { > + reg = <0xC 0x4>; > + type= "uint32"; > + default = <20>; > + }; > + }; > + > + last_chosen@10 { > + reg = <0x10 0x4>; > + type = "uint32"; > + }; > + > + }; > + > + }; > +}; > + > +&eqos { /* baseboard connects to on-SoM PHY */ > + status = "okay"; > +}; > + > +&gpu2d { > + status = "okay"; > +}; > + > +&gpu3d { > + status = "okay"; > +}; > + > +&lcdif2 { > + assigned-clock-rates = <0>, <995400000>; /* pin IMX8MP_VIDEO_PLL1 to provide bitclock needed by lvds panel */ > + status = "okay"; > +}; > + > +&lvds0_backlight { > + status = "okay"; > +}; > + > +&lvds_bridge { > + status = "okay"; > + > + ports { > + port@1 { > + ldb_lvds_ch0: endpoint { > + remote-endpoint = <&panel_in_lvds0>; > + }; > + }; > + }; > +}; > + > +&pcie { > + status = "okay"; > +}; > + > +&pcie_phy { > + status = "okay"; > +}; > + > + > +&pwm2 { /* for PWM Backlight */ > + status = "okay"; > +}; > + > +&uart1 { /* labeled UART0 on base board */ > + /delete-property/ uart-has-rtscts; //not connected on baseboard > + status = "okay"; > +}; > + > +&usb_dwc3_0 { /* Baseboard J13 Top Connector */ > + //fixme: overcurrent Pin is handled via TUSB8041 (which one?) > + status = "okay"; > +}; > + > +&usdhc1 { /* Baseboard J8 - uSD card slot */ > + status = "okay"; > + /delete-property/ cd-gpios; /* no CD is tied to GND on baseboard */ > + /delete-property/ wp-gpios; /* no WP is tied to GND on baseboard */ > + broken-cd; /* do not wait for CD interrupt */ > +}; > + > +&usdhc2 { /* on-SoM micro-SD card slot is not used*/ > + status = "disabled"; > +}; > + > +&usdhc3 { /* on-SoM emmc */ > + #address-cells = <1>; > + #size-cells = <1>; > + > + partition@0 { > + label = "barebox"; > + reg = <0x0 0xe0000>; > + }; > + > + env_emmc: partition@e0000 { > + label = "barebox-environment"; > + reg = <0xe0000 0x20000>; > + }; > + > + backend_state_emmc: partition@100000 { > + label = "state"; > + reg = <0x100000 0x20000>; > + }; > +}; > diff --git a/arch/arm/mach-imx/Kconfig b/arch/arm/mach-imx/Kconfig > index 4c93c1244a6a..058f0625addf 100644 > --- a/arch/arm/mach-imx/Kconfig > +++ b/arch/arm/mach-imx/Kconfig > @@ -653,6 +653,16 @@ config MACH_NXP_IMX8MQ_EVK > select ARM_SMCCC > select MCI_IMX_ESDHC_PBL > > +config MACH_KB_ALPHAJET > + bool "Koenig+Bauer AlphaJet Board" > + select ARCH_IMX8MP > + select FIRMWARE_IMX_LPDDR4_PMU_TRAIN > + select FIRMWARE_IMX8MP_ATF > + select ARM_SMCCC > + select MCI_IMX_ESDHC_PBL > + select IMX8M_DRAM > + select I2C_IMX_EARLY We want to avoid future boards with Congatec modules needing to duplicate code. Can you split this up: config MACH_CONGATEC_QX8MP bool "Koenig+Bauer AlphaJet Board" select ARCH_IMX8MP select FIRMWARE_IMX_LPDDR4_PMU_TRAIN select FIRMWARE_IMX8MP_ATF select ARM_SMCCC select MCI_IMX_ESDHC_PBL select IMX8M_DRAM select I2C_IMX_EARLY config MACH_KB_ALPHAJET bool "Koenig+Bauer AlphaJet Board" select MACH_CONGATEC_QX8MP > + > config MACH_PHYTEC_SOM_IMX8MQ > bool "Phytec i.MX8M SOM" > select ARCH_IMX8MQ > diff --git a/images/Makefile.imx b/images/Makefile.imx > index 9e70ba50a162..bfb2fcdd8ede 100644 > --- a/images/Makefile.imx > +++ b/images/Makefile.imx > @@ -473,6 +473,11 @@ CFG_start_variscite_imx8mp_dart.pblb.imximg = $(board)/variscite-dt8mcustomboard > FILE_barebox-variscite-imx8mp-dart-cb.img = start_variscite_imx8mp_dart.pblb.pimximg > image-$(CONFIG_MACH_VARISCITE_DT8MCUSTOMBOARD_IMX8MP) += barebox-variscite-imx8mp-dart-cb.img > > +pblb-$(CONFIG_MACH_KB_ALPHAJET) += start_congatec_qx8p This is defined no where. Should this be qx8mp too? > +CFG_start_kb_alphajet.pblb.imximg = $(board)/kb-imx8mp-alphajet/flash-header-imx8mp-cgtqx8p.imxcfg > +FILE_barebox-kb-alphajet.img = start_kb_alphajet.pblb.pimximg > +image-$(CONFIG_MACH_KB_ALPHAJET) += barebox-kb-alphajet.img > + > # ----------------------- i.MX8mq based boards -------------------------- > pblb-$(CONFIG_MACH_NXP_IMX8MQ_EVK) += start_nxp_imx8mq_evk > CFG_start_nxp_imx8mq_evk.pblb.imximg = $(board)/nxp-imx8mq-evk/flash-header-imx8mq-evk.imxcfg > > --- > base-commit: 64c528dd0bff0953192d90fbbc34b3d45d8116d0 > change-id: 20230601-koenigbauer-alphajet-upstreaming-2085dc8b9f77 > > Best regards, -- 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 |