Hi Ahmad,
thank you for your review.
On 6/1/23 10:49, Ahmad Fatoum wrote:
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.
Yes, I will do this for v2.
+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.
No, the above can be moved to a generic SoM part. I assume though, that stuff
will not work properly (TM) as long as the individual boards don't enable deep
probe support (at least it did not work for my machine), though I think this
should be kept in the baseboard-specific part, right?
+ { /* 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/
ACK, gonna do that in v2
+ 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.
ACK, gonna refactor this for v2.
@@ -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?
good catch, the SoM's name is conga-QMX8-Plus, gonna change the compatible to
cgt,qmx8p
+
+ 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"
I guess this should probably be
bool "Congatec conga-QMX8-Plus"
then?
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
ack.
+
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,
Best regards
Johannes
--
Pengutronix e.K. | Johannes Zink |
Steuerwalder Str. 21 | https://www.pengutronix.de/ |
31137 Hildesheim, Germany | Phone: +49-5121-206917-0 |
Amtsgericht Hildesheim, HRA 2686| Fax: +49-5121-206917-5555 |