All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/2] Conclusive KSTR-SAMA5D27 support
@ 2023-09-21 15:37 Artur Rojek
  2023-09-21 15:37 ` [PATCH 1/2] common: add prototype for populate_serial_number() Artur Rojek
  2023-09-21 15:37 ` [PATCH 2/2] board: Add support for Conclusive KSTR-SAMA5D27 Artur Rojek
  0 siblings, 2 replies; 8+ messages in thread
From: Artur Rojek @ 2023-09-21 15:37 UTC (permalink / raw)
  To: Eugen Hristev, Jakub Klama, Marcin Jabrzyk
  Cc: Wojciech Kloska, u-boot, Artur Rojek

Hi all,

this series adds support for Conclusive KSTR-SAMA5D27, a Microchip
SAMA5D27 SoC based Single Board Computer by Conclusive Engineering.

Patch [1/2] adds a missing prototype for populate_serial_number(), which
is used by KSTR-SAMA5D27 in order to read its serial number embedded in
EEPROM TLV.

Patch [2/2] introduces KSTR-SAMA5D27 support, including board init,
Device Tree and defconfig files. An appropriate MAINTAINERS entry is
also provided. A new board/conclusive subdirectory is added in
anticipation of future support of our other products.

Note that the "if (IS_ENABLED(CONFIG...))" checkpatch warnings for this
patch are considered by me as false positives.

Artur Rojek (2):
  common: add prototype for populate_serial_number()
  board: Add support for Conclusive KSTR-SAMA5D27

 arch/arm/dts/Makefile                         |   3 +
 arch/arm/dts/at91-kstr-sama5d27.dts           | 310 ++++++++++++++++++
 arch/arm/mach-at91/Kconfig                    |  13 +
 board/conclusive/kstr-sama5d27/Kconfig        |  15 +
 board/conclusive/kstr-sama5d27/MAINTAINERS    |   8 +
 board/conclusive/kstr-sama5d27/Makefile       |   5 +
 .../conclusive/kstr-sama5d27/kstr-sama5d27.c  | 235 +++++++++++++
 configs/kstr_sama5d27_defconfig               |  79 +++++
 include/configs/kstr-sama5d27.h               |  15 +
 include/init.h                                |   1 +
 10 files changed, 684 insertions(+)
 create mode 100644 arch/arm/dts/at91-kstr-sama5d27.dts
 create mode 100644 board/conclusive/kstr-sama5d27/Kconfig
 create mode 100644 board/conclusive/kstr-sama5d27/MAINTAINERS
 create mode 100644 board/conclusive/kstr-sama5d27/Makefile
 create mode 100644 board/conclusive/kstr-sama5d27/kstr-sama5d27.c
 create mode 100644 configs/kstr_sama5d27_defconfig
 create mode 100644 include/configs/kstr-sama5d27.h

-- 
2.42.0


^ permalink raw reply	[flat|nested] 8+ messages in thread

* [PATCH 1/2] common: add prototype for populate_serial_number()
  2023-09-21 15:37 [PATCH 0/2] Conclusive KSTR-SAMA5D27 support Artur Rojek
@ 2023-09-21 15:37 ` Artur Rojek
  2023-09-21 16:29   ` Simon Glass
  2023-09-21 15:37 ` [PATCH 2/2] board: Add support for Conclusive KSTR-SAMA5D27 Artur Rojek
  1 sibling, 1 reply; 8+ messages in thread
From: Artur Rojek @ 2023-09-21 15:37 UTC (permalink / raw)
  To: Eugen Hristev, Jakub Klama, Marcin Jabrzyk
  Cc: Wojciech Kloska, u-boot, Artur Rojek

Provide function prototype for populate_serial_number().
This is useful for boards that wish to read their serial number from
EEPROM at init.

Signed-off-by: Artur Rojek <artur@conclusive.pl>
---
 include/init.h | 1 +
 1 file changed, 1 insertion(+)

diff --git a/include/init.h b/include/init.h
index 3bf30476a2e0..e0b7fbc943ad 100644
--- a/include/init.h
+++ b/include/init.h
@@ -283,6 +283,7 @@ void board_init_r(struct global_data *id, ulong dest_addr)
 int cpu_init_r(void);
 int last_stage_init(void);
 int mac_read_from_eeprom(void);
+int populate_serial_number(int devnum);
 int set_cpu_clk_info(void);
 int update_flash_size(int flash_size);
 int arch_early_init_r(void);
-- 
2.42.0


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH 2/2] board: Add support for Conclusive KSTR-SAMA5D27
  2023-09-21 15:37 [PATCH 0/2] Conclusive KSTR-SAMA5D27 support Artur Rojek
  2023-09-21 15:37 ` [PATCH 1/2] common: add prototype for populate_serial_number() Artur Rojek
@ 2023-09-21 15:37 ` Artur Rojek
  2023-09-22  6:35   ` Eugen Hristev
  1 sibling, 1 reply; 8+ messages in thread
From: Artur Rojek @ 2023-09-21 15:37 UTC (permalink / raw)
  To: Eugen Hristev, Jakub Klama, Marcin Jabrzyk
  Cc: Wojciech Kloska, u-boot, Artur Rojek

Introduce support for Conclusive KSTR-SAMA5D27 Single Board Computer.

Co-developed-by: Jakub Klama <jakub@conclusive.pl>
Signed-off-by: Jakub Klama <jakub@conclusive.pl>
Co-developed-by: Marcin Jabrzyk <marcin@conclusive.pl>
Signed-off-by: Marcin Jabrzyk <marcin@conclusive.pl>
Signed-off-by: Artur Rojek <artur@conclusive.pl>
---
 arch/arm/dts/Makefile                         |   3 +
 arch/arm/dts/at91-kstr-sama5d27.dts           | 310 ++++++++++++++++++
 arch/arm/mach-at91/Kconfig                    |  13 +
 board/conclusive/kstr-sama5d27/Kconfig        |  15 +
 board/conclusive/kstr-sama5d27/MAINTAINERS    |   8 +
 board/conclusive/kstr-sama5d27/Makefile       |   5 +
 .../conclusive/kstr-sama5d27/kstr-sama5d27.c  | 235 +++++++++++++
 configs/kstr_sama5d27_defconfig               |  79 +++++
 include/configs/kstr-sama5d27.h               |  15 +
 9 files changed, 683 insertions(+)
 create mode 100644 arch/arm/dts/at91-kstr-sama5d27.dts
 create mode 100644 board/conclusive/kstr-sama5d27/Kconfig
 create mode 100644 board/conclusive/kstr-sama5d27/MAINTAINERS
 create mode 100644 board/conclusive/kstr-sama5d27/Makefile
 create mode 100644 board/conclusive/kstr-sama5d27/kstr-sama5d27.c
 create mode 100644 configs/kstr_sama5d27_defconfig
 create mode 100644 include/configs/kstr-sama5d27.h

diff --git a/arch/arm/dts/Makefile b/arch/arm/dts/Makefile
index 85fd5b1157b1..8e4d33c01912 100644
--- a/arch/arm/dts/Makefile
+++ b/arch/arm/dts/Makefile
@@ -1198,6 +1198,9 @@ dtb-$(CONFIG_TARGET_SAMA5D27_SOM1_EK) += \
 dtb-$(CONFIG_TARGET_SAMA5D27_WLSOM1_EK) += \
 	at91-sama5d27_wlsom1_ek.dtb
 
+dtb-$(CONFIG_TARGET_KSTR_SAMA5D27) += \
+	at91-kstr-sama5d27.dtb
+
 dtb-$(CONFIG_TARGET_SAMA5D2_ICP) += \
 	at91-sama5d2_icp.dtb
 
diff --git a/arch/arm/dts/at91-kstr-sama5d27.dts b/arch/arm/dts/at91-kstr-sama5d27.dts
new file mode 100644
index 000000000000..6de918a3c964
--- /dev/null
+++ b/arch/arm/dts/at91-kstr-sama5d27.dts
@@ -0,0 +1,310 @@
+// SPDX-License-Identifier: GPL-2.0+ OR X11
+/*
+ * at91-kstr-sama5d27.dts - Device Tree file for Conclusive KSTR-SAMA5D27 board
+ *
+ *  Copyright (C) 2019-2023 Conclusive Engineering Sp. z o. o.
+ *
+ * This file is dual-licensed: you can use it either under the terms
+ * of the GPL or the X11 license, at your option. Note that this dual
+ * licensing only applies to this file, and not this project as a
+ * whole.
+ *
+ *  a) This file is free software; you can redistribute it and/or
+ *     modify it under the terms of the GNU General Public License as
+ *     published by the Free Software Foundation; either version 2 of the
+ *     License, or (at your option) any later version.
+ *
+ *     This file is distributed in the hope that it will be useful,
+ *     but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *     GNU General Public License for more details.
+ *
+ * Or, alternatively,
+ *
+ *  b) Permission is hereby granted, free of charge, to any person
+ *     obtaining a copy of this software and associated documentation
+ *     files (the "Software"), to deal in the Software without
+ *     restriction, including without limitation the rights to use,
+ *     copy, modify, merge, publish, distribute, sublicense, and/or
+ *     sell copies of the Software, and to permit persons to whom the
+ *     Software is furnished to do so, subject to the following
+ *     conditions:
+ *
+ *     The above copyright notice and this permission notice shall be
+ *     included in all copies or substantial portions of the Software.
+ *
+ *     THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ *     EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ *     OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ *     NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ *     HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ *     WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *     FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ *     OTHER DEALINGS IN THE SOFTWARE.
+ */
+/dts-v1/;
+
+#include "sama5d2.dtsi"
+#include "sama5d2-pinfunc.h"
+#include <dt-bindings/interrupt-controller/irq.h>
+#include <dt-bindings/gpio/gpio.h>
+
+/ {
+	model = "Conclusive KSTR-SAMA5D27";
+	compatible = "conclusive,kstr-sama5d27", "atmel,sama5d2", "atmel,sama5";
+
+	chosen {
+		bootph-all;
+		stdout-path = &uart1;
+	};
+
+	clocks {
+		main_xtal: main_xtal {
+			clock-frequency = <12000000>;
+		};
+	};
+
+	ahb {
+			usb0: gadget@00300000 {
+			#address-cells = <1>;
+			#size-cells = <0>;
+			compatible = "atmel,sama5d3-udc";
+			reg = <0x00300000 0x100000
+				0xfc02c000 0x400>;
+			interrupts = <42 IRQ_TYPE_LEVEL_HIGH 2>;
+			clocks = <&udphs_clk>, <&utmi>;
+			clock-names = "pclk", "hclk";
+			status = "okay";
+
+			ep0: endpoint@0 {
+				reg = <0>;
+				atmel,fifo-size = <64>;
+				atmel,nb-banks = <1>;
+			};
+
+			ep1: endpoint@1 {
+				reg = <1>;
+				atmel,fifo-size = <1024>;
+				atmel,nb-banks = <3>;
+				atmel,can-dma;
+				atmel,can-isoc;
+			};
+
+			ep2: endpoint@2 {
+				reg = <2>;
+				atmel,fifo-size = <1024>;
+				atmel,nb-banks = <3>;
+				atmel,can-dma;
+				atmel,can-isoc;
+			};
+
+			ep3: endpoint@3 {
+				reg = <3>;
+				atmel,fifo-size = <1024>;
+				atmel,nb-banks = <2>;
+				atmel,can-dma;
+				atmel,can-isoc;
+			};
+
+			ep4: endpoint@4 {
+				reg = <4>;
+				atmel,fifo-size = <1024>;
+				atmel,nb-banks = <2>;
+				atmel,can-dma;
+				atmel,can-isoc;
+			};
+
+			ep5: endpoint@5 {
+				reg = <5>;
+				atmel,fifo-size = <1024>;
+				atmel,nb-banks = <2>;
+				atmel,can-dma;
+				atmel,can-isoc;
+			};
+
+			ep6: endpoint@6 {
+				reg = <6>;
+				atmel,fifo-size = <1024>;
+				atmel,nb-banks = <2>;
+				atmel,can-dma;
+				atmel,can-isoc;
+			};
+
+			ep7: endpoint@7 {
+				reg = <7>;
+				atmel,fifo-size = <1024>;
+				atmel,nb-banks = <2>;
+				atmel,can-dma;
+				atmel,can-isoc;
+			};
+
+			ep8: endpoint@8 {
+				reg = <8>;
+				atmel,fifo-size = <1024>;
+				atmel,nb-banks = <2>;
+				atmel,can-isoc;
+			};
+
+			ep9: endpoint@9 {
+				reg = <9>;
+				atmel,fifo-size = <1024>;
+				atmel,nb-banks = <2>;
+				atmel,can-isoc;
+			};
+
+			ep10: endpoint@a {
+				reg = <10>;
+				atmel,fifo-size = <1024>;
+				atmel,nb-banks = <2>;
+				atmel,can-isoc;
+			};
+
+			ep11: endpoint@b {
+				reg = <11>;
+				atmel,fifo-size = <1024>;
+				atmel,nb-banks = <2>;
+				atmel,can-isoc;
+			};
+
+			ep12: endpoint@c {
+				reg = <12>;
+				atmel,fifo-size = <1024>;
+				atmel,nb-banks = <2>;
+				atmel,can-isoc;
+			};
+
+			ep13: endpoint@d {
+				reg = <13>;
+				atmel,fifo-size = <1024>;
+				atmel,nb-banks = <2>;
+				atmel,can-isoc;
+			};
+
+			ep14: endpoint@e {
+				reg = <14>;
+				atmel,fifo-size = <1024>;
+				atmel,nb-banks = <2>;
+				atmel,can-isoc;
+			};
+
+			ep15: endpoint@f {
+				reg = <15>;
+				atmel,fifo-size = <1024>;
+				atmel,nb-banks = <2>;
+				atmel,can-isoc;
+			};
+		};
+
+		sdmmc0: sdio-host@a0000000 {
+			bus-width = <4>;
+			pinctrl-names = "default";
+			pinctrl-0 = <&pinctrl_sdmmc0_cmd_dat_default &pinctrl_sdmmc0_ck_cd_default>;
+			status = "okay";
+			bootph-all;
+		};
+
+		apb {
+			uart1: serial@f8020000 {
+				pinctrl-names = "default";
+				pinctrl-0 = <&pinctrl_uart1_default>;
+				status = "okay";
+				bootph-all;
+			};
+
+			macb0: ethernet@f8008000 {
+				pinctrl-names = "default";
+				pinctrl-0 = <&pinctrl_macb0_rmii &pinctrl_macb0_phy_irq>;
+				phy-mode = "rmii";
+				status = "okay";
+
+				ethernet-phy@0 {
+					reg = <0x0>;
+					reset-gpios = <&pioA 44 GPIO_ACTIVE_LOW>;
+				};
+			};
+
+			i2c@fc018000 {
+				compatible = "atmel,sama5d2-i2c";
+				reg = <0xfc018600 0x100>;
+				#address-cells = <1>;
+				#size-cells = <0>;
+				clocks = <&flx4_clk>;
+				clock-names = "i2c2_clk";
+				clock-frequency = <100000>;
+				pinctrl-names = "default";
+				pinctrl-0 = <&pinctrl_flx4_i2c>;
+				status = "okay";
+
+				eeprom: eeprom@50 {
+					compatible = "microchip,24c32", "atmel,24c32";
+					reg = <0x50>;
+					read-only;
+					pagesize = <32>;
+					status = "okay";
+				};
+
+				pmic: pmic@5b {
+					compatible = "active-semi,act8945a";
+					reg = <0x5b>;
+					status = "okay";
+				};
+			};
+
+			pioA: pinctrl@fc038000 {
+				pinctrl {
+					pinctrl_uart1_default: uart1_default {
+						pinmux = <PIN_PD2__URXD1>,
+							 <PIN_PD3__UTXD1>;
+						bias-disable;
+						bootph-all;
+					};
+
+					pinctrl_macb0_phy_irq: macb0_phy_irq {
+						pinmux = <PIN_PB13__GPIO>;
+						bias-disable;
+						bootph-all;
+					};
+
+					pinctrl_macb0_rmii: macb0_rmii {
+						pinmux = <PIN_PB14__GTXCK>,
+							 <PIN_PB15__GTXEN>,
+							 <PIN_PB16__GRXDV>,
+							 <PIN_PB17__GRXER>,
+							 <PIN_PB18__GRX0>,
+							 <PIN_PB19__GRX1>,
+							 <PIN_PB20__GTX0>,
+							 <PIN_PB21__GTX1>,
+							 <PIN_PB22__GMDC>,
+							 <PIN_PB23__GMDIO>;
+						bias-disable;
+						bootph-all;
+					};
+
+					pinctrl_sdmmc0_cmd_dat_default: sdmmc0_cmd_dat_default {
+						pinmux = <PIN_PA1__SDMMC0_CMD>,
+							 <PIN_PA2__SDMMC0_DAT0>,
+							 <PIN_PA3__SDMMC0_DAT1>,
+							 <PIN_PA4__SDMMC0_DAT2>,
+							 <PIN_PA5__SDMMC0_DAT3>;
+						bias-pull-up;
+						bootph-all;
+					};
+
+					pinctrl_sdmmc0_ck_cd_default: sdmmc0_ck_cd_default {
+						pinmux = <PIN_PA0__SDMMC0_CK>,
+							 <PIN_PA11__SDMMC0_VDDSEL>,
+							 <PIN_PA13__SDMMC0_CD>;
+						bias-disable;
+						bootph-all;
+					};
+
+					pinctrl_flx4_i2c: flx4_i2c {
+						pinmux = <PIN_PC28__FLEXCOM4_IO0>,
+							 <PIN_PC29__FLEXCOM4_IO1>;
+						bias-disable;
+					};
+				};
+			};
+		};
+	};
+};
diff --git a/arch/arm/mach-at91/Kconfig b/arch/arm/mach-at91/Kconfig
index 7c2e4ebbdb0f..9ab1a9339ee1 100644
--- a/arch/arm/mach-at91/Kconfig
+++ b/arch/arm/mach-at91/Kconfig
@@ -204,6 +204,18 @@ config TARGET_SAMA5D27_WLSOM1_EK
 	  processor-based SAMA5D2 MPU with 2 Gbit LPDDR2-SDRAM
 	  in a single package.
 
+config TARGET_KSTR_SAMA5D27
+	bool "Conclusive KSTR-SAMA5D27 board"
+	select BOARD_EARLY_INIT_F
+	select SAMA5D2
+	select BOARD_LATE_INIT
+	help
+	  The KSTR-SAMA5D27 embeds SAMA5D27 SoC, together with
+	  256 MiB SDRAM, 10/100 Mbit/s Ethernet, 96 Mbit/s Wi-Fi b/g/n,
+	  Bluetooth 4.1 LE, USB OTG controller w/ type-C USB connector
+	  and stackable GPIO headers in an all-in-one SBC form factor:
+	  https://conclusive.pl/products/kstr-sama5d27-sbc/
+
 config TARGET_SAMA5D2_ICP
 	bool "SAMA5D2 Industrial Connectivity Platform (ICP)"
 	select SAMA5D2
@@ -352,6 +364,7 @@ source "board/atmel/sama5d4_xplained/Kconfig"
 source "board/atmel/sama5d4ek/Kconfig"
 source "board/bluewater/gurnard/Kconfig"
 source "board/calao/usb_a9263/Kconfig"
+source "board/conclusive/kstr-sama5d27/Kconfig"
 source "board/egnite/ethernut5/Kconfig"
 source "board/esd/meesc/Kconfig"
 source "board/gardena/smart-gateway-at91sam/Kconfig"
diff --git a/board/conclusive/kstr-sama5d27/Kconfig b/board/conclusive/kstr-sama5d27/Kconfig
new file mode 100644
index 000000000000..572551cfda98
--- /dev/null
+++ b/board/conclusive/kstr-sama5d27/Kconfig
@@ -0,0 +1,15 @@
+if TARGET_KSTR_SAMA5D27
+
+config SYS_BOARD
+	default "kstr-sama5d27"
+
+config SYS_VENDOR
+	default "conclusive"
+
+config SYS_SOC
+	default "at91"
+
+config SYS_CONFIG_NAME
+	default "kstr-sama5d27"
+
+endif
diff --git a/board/conclusive/kstr-sama5d27/MAINTAINERS b/board/conclusive/kstr-sama5d27/MAINTAINERS
new file mode 100644
index 000000000000..cb1635cdd280
--- /dev/null
+++ b/board/conclusive/kstr-sama5d27/MAINTAINERS
@@ -0,0 +1,8 @@
+CONCLUSIVE KSTR-SAMA5D27 BOARD
+M:	Jakub Klama <jakub@conclusive.pl>
+M:	Artur Rojek <artur@conclusive.pl>
+S:	Maintained
+F:	board/conclusive/kstr-sama5d27
+F:	include/configs/kstr-sama5d27.h
+F:	configs/kstr_sama5d27_defconfig
+F:	arch/arm/dts/at91-kstr-sama5d27.dts
diff --git a/board/conclusive/kstr-sama5d27/Makefile b/board/conclusive/kstr-sama5d27/Makefile
new file mode 100644
index 000000000000..edf7d1c93441
--- /dev/null
+++ b/board/conclusive/kstr-sama5d27/Makefile
@@ -0,0 +1,5 @@
+# SPDX-License-Identifier: GPL-2.0+
+#
+# Copyright (C) 2019-2023 Conclusive Engineering Sp. z o. o.
+
+obj-y += kstr-sama5d27.o
diff --git a/board/conclusive/kstr-sama5d27/kstr-sama5d27.c b/board/conclusive/kstr-sama5d27/kstr-sama5d27.c
new file mode 100644
index 000000000000..e29fd00544bd
--- /dev/null
+++ b/board/conclusive/kstr-sama5d27/kstr-sama5d27.c
@@ -0,0 +1,235 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * kstr-sama5d27.c - Board init file for Conclusive KSTR-SAMA5D27 board
+ * Copyright (C) 2021-2023 Conclusive Engineering Sp. z o. o.
+ */
+
+#include <common.h>
+#include <debug_uart.h>
+#include <init.h>
+#include <env.h>
+#include <fdt_support.h>
+#include <asm/global_data.h>
+#include <asm/io.h>
+#include <asm/arch/at91_common.h>
+#include <asm/arch/atmel_pio4.h>
+#include <asm/arch/atmel_mpddrc.h>
+#include <asm/arch/atmel_sdhci.h>
+#include <asm/arch/clk.h>
+#include <asm/arch/gpio.h>
+#include <asm/arch/sama5d2.h>
+#include <linux/delay.h>
+
+#ifdef CONFIG_USB_GADGET_ATMEL_USBA
+#include <asm/arch/atmel_usba_udc.h>
+#endif
+
+DECLARE_GLOBAL_DATA_PTR;
+
+#ifdef CONFIG_DEBUG_UART_BOARD_INIT
+static void board_uart1_hw_init(void)
+{
+	/* URXD1 */
+	atmel_pio4_set_a_periph(AT91_PIO_PORTD, 2, ATMEL_PIO_PUEN_MASK);
+	/* UTXD1 */
+	atmel_pio4_set_a_periph(AT91_PIO_PORTD, 3, 0);
+	at91_periph_clk_enable(ATMEL_ID_UART1);
+}
+
+void board_debug_uart_init(void)
+{
+	board_uart1_hw_init();
+}
+#endif
+
+void board_lan8720a_init(void)
+{
+	/* LAN8720A_nRST */
+	atmel_pio4_set_pio_output(AT91_PIO_PORTB, 12, 0);
+	/*
+	 * Force 0 on RXER/PHYAD0. LAN8720A chipset will latch with address 0 on
+	 * MDIO bus.
+	 */
+	atmel_pio4_set_pio_output(AT91_PIO_PORTB, 17, 0);
+	/* Minimal delay of reset signal is 25 ms */
+	mdelay(30);
+	/* LAN8720A_nRST */
+	atmel_pio4_set_pio_output(AT91_PIO_PORTB, 12, 1);
+}
+
+void board_usba_init(void)
+{
+#ifdef CONFIG_USB_GADGET_ATMEL_USBA
+	/* USB device peripheral initialization: sama5d2_devices.c */
+	at91_udp_hw_init();
+	/* USB device controller drivers/usb/gadget/atmel_usba_udc.c */
+	usba_udc_probe(&pdata);
+#endif
+}
+
+#ifdef CONFIG_BOARD_EARLY_INIT_F
+int board_early_init_f(void)
+{
+#ifdef CONFIG_DEBUG_UART
+	debug_uart_init();
+#endif
+	/* Initialize FLEXCOM 4 in TWI(I2C) mode */
+	writel(0x3, 0xfc018000);
+	return 0;
+}
+#endif
+
+int ft_board_setup(void *blob, struct bd_info *bd)
+{
+	char *wlanaddr = env_get("eth1addr");
+
+	if (wlanaddr)
+		do_fixup_by_compat(blob, "brcm,bcm4329-fmac", "local-mac-address",
+				   wlanaddr, strlen(wlanaddr), 1);
+	else
+		printf("Not setting WIFI mac address. Check if EEPROM TLV is correctly set up.\n");
+
+	return 0;
+}
+
+int board_init(void)
+{
+	/* address of boot parameters */
+	gd->bd->bi_boot_params = CFG_SYS_SDRAM_BASE + 0x100;
+
+	board_usba_init();
+	board_lan8720a_init();
+
+	return 0;
+}
+
+#ifdef CONFIG_BOARD_LATE_INIT
+int board_late_init(void)
+{
+	const char *serial_number;
+
+	populate_serial_number(0);
+
+	printf("Conclusive KSTR-SAMA5D27\n");
+
+	serial_number = env_get("serial#");
+	if (!serial_number)
+		printf("Warning: unknown serial number.\n");
+	else
+		printf("Serial number %s\n", serial_number);
+
+	return 0;
+}
+#endif
+
+#ifdef CONFIG_MISC_INIT_R
+int misc_init_r(void)
+{
+	return 0;
+}
+#endif
+
+int dram_init(void)
+{
+	gd->ram_size = get_ram_size((void *)CFG_SYS_SDRAM_BASE,
+				    CFG_SYS_SDRAM_SIZE);
+	return 0;
+}
+
+/* SPL */
+#ifdef CONFIG_SPL_BUILD
+void spl_board_init(void)
+{
+}
+
+static void ddrc_conf(struct atmel_mpddrc_config *ddrc)
+{
+	ddrc->md = (ATMEL_MPDDRC_MD_DBW_16_BITS | ATMEL_MPDDRC_MD_DDR2_SDRAM);
+
+	ddrc->cr = (ATMEL_MPDDRC_CR_NC_COL_10 |
+		    ATMEL_MPDDRC_CR_NR_ROW_13 |
+		    ATMEL_MPDDRC_CR_CAS_DDR_CAS3 |
+		    ATMEL_MPDDRC_CR_DIC_DS |
+		    ATMEL_MPDDRC_CR_ZQ_LONG |
+		    ATMEL_MPDDRC_CR_NB_8BANKS |
+		    ATMEL_MPDDRC_CR_DECOD_INTERLEAVED |
+		    ATMEL_MPDDRC_CR_UNAL_SUPPORTED);
+
+	ddrc->rtr = 0x511;
+
+	ddrc->tpr0 = ((7 << ATMEL_MPDDRC_TPR0_TRAS_OFFSET) |
+		      (3 << ATMEL_MPDDRC_TPR0_TRCD_OFFSET) |
+		      (3 << ATMEL_MPDDRC_TPR0_TWR_OFFSET) |
+		      (9 << ATMEL_MPDDRC_TPR0_TRC_OFFSET) |
+		      (3 << ATMEL_MPDDRC_TPR0_TRP_OFFSET) |
+		      (4 << ATMEL_MPDDRC_TPR0_TRRD_OFFSET) |
+		      (4 << ATMEL_MPDDRC_TPR0_TWTR_OFFSET) |
+		      (2 << ATMEL_MPDDRC_TPR0_TMRD_OFFSET));
+
+	ddrc->tpr1 = ((22 << ATMEL_MPDDRC_TPR1_TRFC_OFFSET) |
+		      (23 << ATMEL_MPDDRC_TPR1_TXSNR_OFFSET) |
+		      (200 << ATMEL_MPDDRC_TPR1_TXSRD_OFFSET) |
+		      (3 << ATMEL_MPDDRC_TPR1_TXP_OFFSET));
+
+	ddrc->tpr2 = ((2 << ATMEL_MPDDRC_TPR2_TXARD_OFFSET) |
+		      (8 << ATMEL_MPDDRC_TPR2_TXARDS_OFFSET) |
+		      (4 << ATMEL_MPDDRC_TPR2_TRPA_OFFSET) |
+		      (4 << ATMEL_MPDDRC_TPR2_TRTP_OFFSET) |
+		      (8 << ATMEL_MPDDRC_TPR2_TFAW_OFFSET));
+}
+
+void mem_init(void)
+{
+	struct at91_pmc *pmc = (struct at91_pmc *)ATMEL_BASE_PMC;
+	struct atmel_mpddr *mpddrc = (struct atmel_mpddr *)ATMEL_BASE_MPDDRC;
+	struct atmel_mpddrc_config ddrc_config;
+	u32 reg;
+
+	ddrc_conf(&ddrc_config);
+
+	at91_periph_clk_enable(ATMEL_ID_MPDDRC);
+	writel(AT91_PMC_DDR, &pmc->scer);
+
+	reg = readl(&mpddrc->io_calibr);
+	reg &= ~ATMEL_MPDDRC_IO_CALIBR_RDIV;
+	reg |= ATMEL_MPDDRC_IO_CALIBR_DDR3_RZQ_55;
+	reg &= ~ATMEL_MPDDRC_IO_CALIBR_TZQIO;
+	reg |= ATMEL_MPDDRC_IO_CALIBR_TZQIO_(101);
+	writel(reg, &mpddrc->io_calibr);
+
+	writel(ATMEL_MPDDRC_RD_DATA_PATH_SHIFT_ONE_CYCLE,
+	       &mpddrc->rd_data_path);
+
+	ddr3_init(ATMEL_BASE_MPDDRC, ATMEL_BASE_DDRCS, &ddrc_config);
+
+	writel(0x3, &mpddrc->cal_mr4);
+	writel(64, &mpddrc->tim_cal);
+}
+
+void at91_pmc_init(void)
+{
+	u32 tmp;
+
+	/*
+	 * While coming from the ROM code, we run on PLLA @ 492 MHz / 164 MHz,
+	 * so we need to slow down and configure MCKR accordingly.
+	 * This is why we have a special flavor of the switching function.
+	 */
+	tmp = AT91_PMC_MCKR_PLLADIV_2 |
+	      AT91_PMC_MCKR_MDIV_3 |
+	      AT91_PMC_MCKR_CSS_MAIN;
+	at91_mck_init_down(tmp);
+
+	tmp = AT91_PMC_PLLAR_29 |
+	      AT91_PMC_PLLXR_PLLCOUNT(0x3f) |
+	      AT91_PMC_PLLXR_MUL(40) |
+	      AT91_PMC_PLLXR_DIV(1);
+	at91_plla_init(tmp);
+
+	tmp = AT91_PMC_MCKR_H32MXDIV |
+	      AT91_PMC_MCKR_PLLADIV_2 |
+	      AT91_PMC_MCKR_MDIV_3 |
+	      AT91_PMC_MCKR_CSS_PLLA;
+	at91_mck_init(tmp);
+}
+#endif
diff --git a/configs/kstr_sama5d27_defconfig b/configs/kstr_sama5d27_defconfig
new file mode 100644
index 000000000000..a0b8ea79c66b
--- /dev/null
+++ b/configs/kstr_sama5d27_defconfig
@@ -0,0 +1,79 @@
+CONFIG_ARM=y
+CONFIG_ARCH_AT91=y
+CONFIG_TEXT_BASE=0x26f00000
+CONFIG_SYS_LOAD_ADDR=0x24000000
+CONFIG_SYS_MONITOR_LEN=524288
+CONFIG_TARGET_KSTR_SAMA5D27=y
+CONFIG_SYS_MALLOC_F_LEN=0x2000
+CONFIG_HAS_CUSTOM_SYS_INIT_SP_ADDR=y
+CONFIG_CUSTOM_SYS_INIT_SP_ADDR=0x20003ee0
+CONFIG_NR_DRAM_BANKS=1
+CONFIG_DM_GPIO=y
+CONFIG_DEFAULT_DEVICE_TREE="at91-kstr-sama5d27"
+CONFIG_DISTRO_DEFAULTS=y
+CONFIG_FIT=y
+CONFIG_OF_BOARD_SETUP=y
+CONFIG_SYS_EXTRA_OPTIONS="SAMA5D2"
+CONFIG_SD_BOOT=y
+CONFIG_BOOTDELAY=3
+CONFIG_USE_BOOTARGS=y
+CONFIG_BOOTARGS="console=ttyS0,115200 earlyprintk root=/dev/mmcblk0p2 rw rootwait"
+# CONFIG_USE_BOOTCOMMAND is not set
+# CONFIG_DISPLAY_BOARDINFO is not set
+CONFIG_MISC_INIT_R=y
+CONFIG_CMD_TLV_EEPROM=y
+CONFIG_CMD_IMAGE=y
+CONFIG_CMD_DM=y
+CONFIG_CMD_GPIO=y
+CONFIG_CMD_GPT=y
+CONFIG_CMD_I2C=y
+# CONFIG_CMD_LOADS is not set
+CONFIG_CMD_MMC=y
+CONFIG_CMD_USB=y
+CONFIG_CMD_USB_MASS_STORAGE=y
+# CONFIG_ISO_PARTITION is not set
+CONFIG_OF_CONTROL=y
+CONFIG_ENV_OVERWRITE=y
+CONFIG_ENV_IS_IN_FAT=y
+CONFIG_NET_RANDOM_ETHADDR=y
+CONFIG_DM=y
+CONFIG_CLK=y
+CONFIG_CLK_AT91=y
+CONFIG_AT91_UTMI=y
+CONFIG_AT91_H32MX=y
+CONFIG_AT91_GENERIC_CLK=y
+CONFIG_ATMEL_PIO4=y
+CONFIG_DM_I2C=y
+CONFIG_SYS_I2C_AT91=y
+CONFIG_I2C_EEPROM=y
+CONFIG_DM_MMC=y
+CONFIG_MMC_IO_VOLTAGE=y
+CONFIG_MMC_SDHCI=y
+CONFIG_MMC_SDHCI_SDMA=y
+CONFIG_MMC_SDHCI_ATMEL=y
+CONFIG_PHY_MICREL=y
+CONFIG_DM_ETH=y
+CONFIG_MACB=y
+CONFIG_PINCTRL=y
+CONFIG_PINCTRL_AT91PIO4=y
+CONFIG_DM_SERIAL=y
+CONFIG_ATMEL_USART=y
+CONFIG_TEE=y
+CONFIG_OPTEE=y
+CONFIG_SYSRESET=y
+CONFIG_SYSRESET_AT91=y
+CONFIG_DM_RESET=y
+CONFIG_RESET_AT91=y
+CONFIG_TIMER=y
+CONFIG_ATMEL_PIT_TIMER=y
+CONFIG_USB=y
+CONFIG_DM_USB=y
+CONFIG_USB_EHCI_HCD=y
+CONFIG_USB_GADGET=y
+CONFIG_USB_GADGET_VENDOR_NUM=0x16c0
+CONFIG_USB_GADGET_PRODUCT_NUM=0x03e9
+CONFIG_USB_GADGET_ATMEL_USBA=y
+CONFIG_USB_GADGET_DOWNLOAD=y
+CONFIG_OF_LIBFDT_OVERLAY=y
+CONFIG_SPL_OF_LIBFDT=y
+# CONFIG_EFI_LOADER is not set
diff --git a/include/configs/kstr-sama5d27.h b/include/configs/kstr-sama5d27.h
new file mode 100644
index 000000000000..772a073ba209
--- /dev/null
+++ b/include/configs/kstr-sama5d27.h
@@ -0,0 +1,15 @@
+/* SPDX-License-Identifier: GPL-2.0+ */
+/*
+ * Copyright (C) 2021-2023 Conclusive Engineering Sp. z o. o.
+ */
+
+#ifndef __CONFIG_H
+#define __CONFIG_H
+
+#include "at91-sama5_common.h"
+
+/* SDRAM */
+#define CFG_SYS_SDRAM_BASE           0x20000000
+#define CFG_SYS_SDRAM_SIZE           0x10000000
+
+#endif
-- 
2.42.0


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [PATCH 1/2] common: add prototype for populate_serial_number()
  2023-09-21 15:37 ` [PATCH 1/2] common: add prototype for populate_serial_number() Artur Rojek
@ 2023-09-21 16:29   ` Simon Glass
  2023-09-25 19:07     ` Artur Rojek
  0 siblings, 1 reply; 8+ messages in thread
From: Simon Glass @ 2023-09-21 16:29 UTC (permalink / raw)
  To: Artur Rojek
  Cc: Eugen Hristev, Jakub Klama, Marcin Jabrzyk, Wojciech Kloska, u-boot

Hi Artur,

On Thu, 21 Sept 2023 at 09:44, Artur Rojek <artur@conclusive.pl> wrote:
>
> Provide function prototype for populate_serial_number().
> This is useful for boards that wish to read their serial number from
> EEPROM at init.
>
> Signed-off-by: Artur Rojek <artur@conclusive.pl>
> ---
>  include/init.h | 1 +
>  1 file changed, 1 insertion(+)
>
> diff --git a/include/init.h b/include/init.h
> index 3bf30476a2e0..e0b7fbc943ad 100644
> --- a/include/init.h
> +++ b/include/init.h
> @@ -283,6 +283,7 @@ void board_init_r(struct global_data *id, ulong dest_addr)
>  int cpu_init_r(void);
>  int last_stage_init(void);
>  int mac_read_from_eeprom(void);
> +int populate_serial_number(int devnum);

Please can you add a comment for this function? You can move it from the C file.

I also suggest renaming it to something like eeprom_get_serial() or
something like that.

>  int set_cpu_clk_info(void);
>  int update_flash_size(int flash_size);
>  int arch_early_init_r(void);
> --
> 2.42.0
>

BTW tlv_eeprom.c should really be converted to driver model.

Regards,
Simon

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH 2/2] board: Add support for Conclusive KSTR-SAMA5D27
  2023-09-21 15:37 ` [PATCH 2/2] board: Add support for Conclusive KSTR-SAMA5D27 Artur Rojek
@ 2023-09-22  6:35   ` Eugen Hristev
  2023-09-25 19:31     ` Artur Rojek
  0 siblings, 1 reply; 8+ messages in thread
From: Eugen Hristev @ 2023-09-22  6:35 UTC (permalink / raw)
  To: Artur Rojek, Jakub Klama, Marcin Jabrzyk; +Cc: Wojciech Kloska, u-boot

Hello,

Thank you for your patch,

On 9/21/23 18:37, Artur Rojek wrote:
> Introduce support for Conclusive KSTR-SAMA5D27 Single Board Computer.
> 
> Co-developed-by: Jakub Klama <jakub@conclusive.pl>
> Signed-off-by: Jakub Klama <jakub@conclusive.pl>
> Co-developed-by: Marcin Jabrzyk <marcin@conclusive.pl>
> Signed-off-by: Marcin Jabrzyk <marcin@conclusive.pl>
> Signed-off-by: Artur Rojek <artur@conclusive.pl>
> ---
>   arch/arm/dts/Makefile                         |   3 +
>   arch/arm/dts/at91-kstr-sama5d27.dts           | 310 ++++++++++++++++++
>   arch/arm/mach-at91/Kconfig                    |  13 +
>   board/conclusive/kstr-sama5d27/Kconfig        |  15 +
>   board/conclusive/kstr-sama5d27/MAINTAINERS    |   8 +
>   board/conclusive/kstr-sama5d27/Makefile       |   5 +
>   .../conclusive/kstr-sama5d27/kstr-sama5d27.c  | 235 +++++++++++++
>   configs/kstr_sama5d27_defconfig               |  79 +++++
>   include/configs/kstr-sama5d27.h               |  15 +
>   9 files changed, 683 insertions(+)
>   create mode 100644 arch/arm/dts/at91-kstr-sama5d27.dts
>   create mode 100644 board/conclusive/kstr-sama5d27/Kconfig
>   create mode 100644 board/conclusive/kstr-sama5d27/MAINTAINERS
>   create mode 100644 board/conclusive/kstr-sama5d27/Makefile
>   create mode 100644 board/conclusive/kstr-sama5d27/kstr-sama5d27.c
>   create mode 100644 configs/kstr_sama5d27_defconfig
>   create mode 100644 include/configs/kstr-sama5d27.h
> 
> diff --git a/arch/arm/dts/Makefile b/arch/arm/dts/Makefile
> index 85fd5b1157b1..8e4d33c01912 100644
> --- a/arch/arm/dts/Makefile
> +++ b/arch/arm/dts/Makefile
> @@ -1198,6 +1198,9 @@ dtb-$(CONFIG_TARGET_SAMA5D27_SOM1_EK) += \
>   dtb-$(CONFIG_TARGET_SAMA5D27_WLSOM1_EK) += \
>   	at91-sama5d27_wlsom1_ek.dtb
>   
> +dtb-$(CONFIG_TARGET_KSTR_SAMA5D27) += \
> +	at91-kstr-sama5d27.dtb
> +
>   dtb-$(CONFIG_TARGET_SAMA5D2_ICP) += \
>   	at91-sama5d2_icp.dtb
>   
> diff --git a/arch/arm/dts/at91-kstr-sama5d27.dts b/arch/arm/dts/at91-kstr-sama5d27.dts
> new file mode 100644
> index 000000000000..6de918a3c964
> --- /dev/null
> +++ b/arch/arm/dts/at91-kstr-sama5d27.dts
> @@ -0,0 +1,310 @@
> +// SPDX-License-Identifier: GPL-2.0+ OR X11
> +/*
> + * at91-kstr-sama5d27.dts - Device Tree file for Conclusive KSTR-SAMA5D27 board
> + *
> + *  Copyright (C) 2019-2023 Conclusive Engineering Sp. z o. o.

SPDX tag is enough, no need to replicate the license text below

> + *
> + * This file is dual-licensed: you can use it either under the terms
> + * of the GPL or the X11 license, at your option. Note that this dual
> + * licensing only applies to this file, and not this project as a
> + * whole.
> + *
> + *  a) This file is free software; you can redistribute it and/or
> + *     modify it under the terms of the GNU General Public License as
> + *     published by the Free Software Foundation; either version 2 of the
> + *     License, or (at your option) any later version.
> + *
> + *     This file is distributed in the hope that it will be useful,
> + *     but WITHOUT ANY WARRANTY; without even the implied warranty of
> + *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> + *     GNU General Public License for more details.
> + *
> + * Or, alternatively,
> + *
> + *  b) Permission is hereby granted, free of charge, to any person
> + *     obtaining a copy of this software and associated documentation
> + *     files (the "Software"), to deal in the Software without
> + *     restriction, including without limitation the rights to use,
> + *     copy, modify, merge, publish, distribute, sublicense, and/or
> + *     sell copies of the Software, and to permit persons to whom the
> + *     Software is furnished to do so, subject to the following
> + *     conditions:
> + *
> + *     The above copyright notice and this permission notice shall be
> + *     included in all copies or substantial portions of the Software.
> + *
> + *     THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
> + *     EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
> + *     OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
> + *     NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
> + *     HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
> + *     WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
> + *     FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
> + *     OTHER DEALINGS IN THE SOFTWARE.
> + */
> +/dts-v1/;
> +
> +#include "sama5d2.dtsi"
> +#include "sama5d2-pinfunc.h"
> +#include <dt-bindings/interrupt-controller/irq.h>
> +#include <dt-bindings/gpio/gpio.h>
> +
> +/ {
> +	model = "Conclusive KSTR-SAMA5D27";
> +	compatible = "conclusive,kstr-sama5d27", "atmel,sama5d2", "atmel,sama5";
> +
> +	chosen {
> +		bootph-all;
> +		stdout-path = &uart1;
> +	};
> +
> +	clocks {
> +		main_xtal: main_xtal {
> +			clock-frequency = <12000000>;
> +		};
> +	};
> +
> +	ahb {
> +			usb0: gadget@00300000 {

I feel this line is not properly aligned

> +			#address-cells = <1>;
> +			#size-cells = <0>;
> +			compatible = "atmel,sama5d3-udc";
> +			reg = <0x00300000 0x100000
> +				0xfc02c000 0x400>;
> +			interrupts = <42 IRQ_TYPE_LEVEL_HIGH 2>;
> +			clocks = <&udphs_clk>, <&utmi>;
> +			clock-names = "pclk", "hclk";
> +			status = "okay";

This gadget appears to be SoC specific, is it not described in 
sama5d2.dtsi right ? Do you think it would be beneficial to add it as a 
separate patch to sama5d2.dtsi ?

> +
> +			ep0: endpoint@0 {
> +				reg = <0>;
> +				atmel,fifo-size = <64>;
> +				atmel,nb-banks = <1>;
> +			};
> +
> +			ep1: endpoint@1 {
> +				reg = <1>;
> +				atmel,fifo-size = <1024>;
> +				atmel,nb-banks = <3>;
> +				atmel,can-dma;
> +				atmel,can-isoc;
> +			};
> +
> +			ep2: endpoint@2 {
> +				reg = <2>;
> +				atmel,fifo-size = <1024>;
> +				atmel,nb-banks = <3>;
> +				atmel,can-dma;
> +				atmel,can-isoc;
> +			};
> +
> +			ep3: endpoint@3 {
> +				reg = <3>;
> +				atmel,fifo-size = <1024>;
> +				atmel,nb-banks = <2>;
> +				atmel,can-dma;
> +				atmel,can-isoc;
> +			};
> +
> +			ep4: endpoint@4 {
> +				reg = <4>;
> +				atmel,fifo-size = <1024>;
> +				atmel,nb-banks = <2>;
> +				atmel,can-dma;
> +				atmel,can-isoc;
> +			};
> +
> +			ep5: endpoint@5 {
> +				reg = <5>;
> +				atmel,fifo-size = <1024>;
> +				atmel,nb-banks = <2>;
> +				atmel,can-dma;
> +				atmel,can-isoc;
> +			};
> +
> +			ep6: endpoint@6 {
> +				reg = <6>;
> +				atmel,fifo-size = <1024>;
> +				atmel,nb-banks = <2>;
> +				atmel,can-dma;
> +				atmel,can-isoc;
> +			};
> +
> +			ep7: endpoint@7 {
> +				reg = <7>;
> +				atmel,fifo-size = <1024>;
> +				atmel,nb-banks = <2>;
> +				atmel,can-dma;
> +				atmel,can-isoc;
> +			};
> +
> +			ep8: endpoint@8 {
> +				reg = <8>;
> +				atmel,fifo-size = <1024>;
> +				atmel,nb-banks = <2>;
> +				atmel,can-isoc;
> +			};
> +
> +			ep9: endpoint@9 {
> +				reg = <9>;
> +				atmel,fifo-size = <1024>;
> +				atmel,nb-banks = <2>;
> +				atmel,can-isoc;
> +			};
> +
> +			ep10: endpoint@a {
> +				reg = <10>;
> +				atmel,fifo-size = <1024>;
> +				atmel,nb-banks = <2>;
> +				atmel,can-isoc;
> +			};
> +
> +			ep11: endpoint@b {
> +				reg = <11>;
> +				atmel,fifo-size = <1024>;
> +				atmel,nb-banks = <2>;
> +				atmel,can-isoc;
> +			};
> +
> +			ep12: endpoint@c {
> +				reg = <12>;
> +				atmel,fifo-size = <1024>;
> +				atmel,nb-banks = <2>;
> +				atmel,can-isoc;
> +			};
> +
> +			ep13: endpoint@d {
> +				reg = <13>;
> +				atmel,fifo-size = <1024>;
> +				atmel,nb-banks = <2>;
> +				atmel,can-isoc;
> +			};
> +
> +			ep14: endpoint@e {
> +				reg = <14>;
> +				atmel,fifo-size = <1024>;
> +				atmel,nb-banks = <2>;
> +				atmel,can-isoc;
> +			};
> +
> +			ep15: endpoint@f {
> +				reg = <15>;
> +				atmel,fifo-size = <1024>;
> +				atmel,nb-banks = <2>;
> +				atmel,can-isoc;
> +			};
> +		};
> +
> +		sdmmc0: sdio-host@a0000000 {
> +			bus-width = <4>;
> +			pinctrl-names = "default";
> +			pinctrl-0 = <&pinctrl_sdmmc0_cmd_dat_default &pinctrl_sdmmc0_ck_cd_default>;
> +			status = "okay";
> +			bootph-all;
> +		};
> +
> +		apb {
> +			uart1: serial@f8020000 {
> +				pinctrl-names = "default";
> +				pinctrl-0 = <&pinctrl_uart1_default>;
> +				status = "okay";
> +				bootph-all;
> +			};
> +
> +			macb0: ethernet@f8008000 {
> +				pinctrl-names = "default";
> +				pinctrl-0 = <&pinctrl_macb0_rmii &pinctrl_macb0_phy_irq>;
> +				phy-mode = "rmii";
> +				status = "okay";
> +
> +				ethernet-phy@0 {
> +					reg = <0x0>;
> +					reset-gpios = <&pioA 44 GPIO_ACTIVE_LOW>;
> +				};
> +			};
> +
> +			i2c@fc018000 {

I have a feeling this node should also reside in sama5d2.dtsi, and that 
it's a flexcom in fact (judging by how you hack it later), you should 
enable the flexcom driver and have this as a child node of the flexcom 
node (there are some examples done in other sama*.dtsi)

> +				compatible = "atmel,sama5d2-i2c";
> +				reg = <0xfc018600 0x100>;
> +				#address-cells = <1>;
> +				#size-cells = <0>;
> +				clocks = <&flx4_clk>;
> +				clock-names = "i2c2_clk";
> +				clock-frequency = <100000>;
> +				pinctrl-names = "default";
> +				pinctrl-0 = <&pinctrl_flx4_i2c>;
> +				status = "okay";
> +
> +				eeprom: eeprom@50 {
> +					compatible = "microchip,24c32", "atmel,24c32";
> +					reg = <0x50>;
> +					read-only;
> +					pagesize = <32>;
> +					status = "okay";
> +				};
> +
> +				pmic: pmic@5b {
> +					compatible = "active-semi,act8945a";
> +					reg = <0x5b>;
> +					status = "okay";
> +				};
> +			};
> +
> +			pioA: pinctrl@fc038000 {
> +				pinctrl {
> +					pinctrl_uart1_default: uart1_default {
> +						pinmux = <PIN_PD2__URXD1>,
> +							 <PIN_PD3__UTXD1>;
> +						bias-disable;
> +						bootph-all;
> +					};
> +
> +					pinctrl_macb0_phy_irq: macb0_phy_irq {
> +						pinmux = <PIN_PB13__GPIO>;
> +						bias-disable;
> +						bootph-all;
> +					};
> +
> +					pinctrl_macb0_rmii: macb0_rmii {
> +						pinmux = <PIN_PB14__GTXCK>,
> +							 <PIN_PB15__GTXEN>,
> +							 <PIN_PB16__GRXDV>,
> +							 <PIN_PB17__GRXER>,
> +							 <PIN_PB18__GRX0>,
> +							 <PIN_PB19__GRX1>,
> +							 <PIN_PB20__GTX0>,
> +							 <PIN_PB21__GTX1>,
> +							 <PIN_PB22__GMDC>,
> +							 <PIN_PB23__GMDIO>;
> +						bias-disable;
> +						bootph-all;
> +					};
> +
> +					pinctrl_sdmmc0_cmd_dat_default: sdmmc0_cmd_dat_default {
> +						pinmux = <PIN_PA1__SDMMC0_CMD>,
> +							 <PIN_PA2__SDMMC0_DAT0>,
> +							 <PIN_PA3__SDMMC0_DAT1>,
> +							 <PIN_PA4__SDMMC0_DAT2>,
> +							 <PIN_PA5__SDMMC0_DAT3>;
> +						bias-pull-up;
> +						bootph-all;
> +					};
> +
> +					pinctrl_sdmmc0_ck_cd_default: sdmmc0_ck_cd_default {
> +						pinmux = <PIN_PA0__SDMMC0_CK>,
> +							 <PIN_PA11__SDMMC0_VDDSEL>,
> +							 <PIN_PA13__SDMMC0_CD>;
> +						bias-disable;
> +						bootph-all;
> +					};
> +
> +					pinctrl_flx4_i2c: flx4_i2c {
> +						pinmux = <PIN_PC28__FLEXCOM4_IO0>,
> +							 <PIN_PC29__FLEXCOM4_IO1>;
> +						bias-disable;
> +					};
> +				};
> +			};
> +		};
> +	};
> +};
> diff --git a/arch/arm/mach-at91/Kconfig b/arch/arm/mach-at91/Kconfig
> index 7c2e4ebbdb0f..9ab1a9339ee1 100644
> --- a/arch/arm/mach-at91/Kconfig
> +++ b/arch/arm/mach-at91/Kconfig
> @@ -204,6 +204,18 @@ config TARGET_SAMA5D27_WLSOM1_EK
>   	  processor-based SAMA5D2 MPU with 2 Gbit LPDDR2-SDRAM
>   	  in a single package.
>   
> +config TARGET_KSTR_SAMA5D27
> +	bool "Conclusive KSTR-SAMA5D27 board"
> +	select BOARD_EARLY_INIT_F
> +	select SAMA5D2
> +	select BOARD_LATE_INIT
> +	help
> +	  The KSTR-SAMA5D27 embeds SAMA5D27 SoC, together with
> +	  256 MiB SDRAM, 10/100 Mbit/s Ethernet, 96 Mbit/s Wi-Fi b/g/n,
> +	  Bluetooth 4.1 LE, USB OTG controller w/ type-C USB connector
> +	  and stackable GPIO headers in an all-in-one SBC form factor:
> +	  https://conclusive.pl/products/kstr-sama5d27-sbc/
> +
>   config TARGET_SAMA5D2_ICP
>   	bool "SAMA5D2 Industrial Connectivity Platform (ICP)"
>   	select SAMA5D2
> @@ -352,6 +364,7 @@ source "board/atmel/sama5d4_xplained/Kconfig"
>   source "board/atmel/sama5d4ek/Kconfig"
>   source "board/bluewater/gurnard/Kconfig"
>   source "board/calao/usb_a9263/Kconfig"
> +source "board/conclusive/kstr-sama5d27/Kconfig"
>   source "board/egnite/ethernut5/Kconfig"
>   source "board/esd/meesc/Kconfig"
>   source "board/gardena/smart-gateway-at91sam/Kconfig"
> diff --git a/board/conclusive/kstr-sama5d27/Kconfig b/board/conclusive/kstr-sama5d27/Kconfig
> new file mode 100644
> index 000000000000..572551cfda98
> --- /dev/null
> +++ b/board/conclusive/kstr-sama5d27/Kconfig
> @@ -0,0 +1,15 @@
> +if TARGET_KSTR_SAMA5D27
> +
> +config SYS_BOARD
> +	default "kstr-sama5d27"
> +
> +config SYS_VENDOR
> +	default "conclusive"
> +
> +config SYS_SOC
> +	default "at91"
> +
> +config SYS_CONFIG_NAME
> +	default "kstr-sama5d27"
> +
> +endif
> diff --git a/board/conclusive/kstr-sama5d27/MAINTAINERS b/board/conclusive/kstr-sama5d27/MAINTAINERS
> new file mode 100644
> index 000000000000..cb1635cdd280
> --- /dev/null
> +++ b/board/conclusive/kstr-sama5d27/MAINTAINERS
> @@ -0,0 +1,8 @@
> +CONCLUSIVE KSTR-SAMA5D27 BOARD
> +M:	Jakub Klama <jakub@conclusive.pl>
> +M:	Artur Rojek <artur@conclusive.pl>
> +S:	Maintained
> +F:	board/conclusive/kstr-sama5d27
> +F:	include/configs/kstr-sama5d27.h
> +F:	configs/kstr_sama5d27_defconfig
> +F:	arch/arm/dts/at91-kstr-sama5d27.dts
> diff --git a/board/conclusive/kstr-sama5d27/Makefile b/board/conclusive/kstr-sama5d27/Makefile
> new file mode 100644
> index 000000000000..edf7d1c93441
> --- /dev/null
> +++ b/board/conclusive/kstr-sama5d27/Makefile
> @@ -0,0 +1,5 @@
> +# SPDX-License-Identifier: GPL-2.0+
> +#
> +# Copyright (C) 2019-2023 Conclusive Engineering Sp. z o. o.
> +
> +obj-y += kstr-sama5d27.o
> diff --git a/board/conclusive/kstr-sama5d27/kstr-sama5d27.c b/board/conclusive/kstr-sama5d27/kstr-sama5d27.c
> new file mode 100644
> index 000000000000..e29fd00544bd
> --- /dev/null
> +++ b/board/conclusive/kstr-sama5d27/kstr-sama5d27.c
> @@ -0,0 +1,235 @@
> +// SPDX-License-Identifier: GPL-2.0+
> +/*
> + * kstr-sama5d27.c - Board init file for Conclusive KSTR-SAMA5D27 board
> + * Copyright (C) 2021-2023 Conclusive Engineering Sp. z o. o.
> + */
> +
> +#include <common.h>
> +#include <debug_uart.h>
> +#include <init.h>
> +#include <env.h>
> +#include <fdt_support.h>
> +#include <asm/global_data.h>
> +#include <asm/io.h>
> +#include <asm/arch/at91_common.h>
> +#include <asm/arch/atmel_pio4.h>
> +#include <asm/arch/atmel_mpddrc.h>
> +#include <asm/arch/atmel_sdhci.h>
> +#include <asm/arch/clk.h>
> +#include <asm/arch/gpio.h>
> +#include <asm/arch/sama5d2.h>
> +#include <linux/delay.h>
> +
> +#ifdef CONFIG_USB_GADGET_ATMEL_USBA
> +#include <asm/arch/atmel_usba_udc.h>
> +#endif
> +
> +DECLARE_GLOBAL_DATA_PTR;
> +
> +#ifdef CONFIG_DEBUG_UART_BOARD_INIT
> +static void board_uart1_hw_init(void)
> +{
> +	/* URXD1 */
> +	atmel_pio4_set_a_periph(AT91_PIO_PORTD, 2, ATMEL_PIO_PUEN_MASK);
> +	/* UTXD1 */
> +	atmel_pio4_set_a_periph(AT91_PIO_PORTD, 3, 0);
> +	at91_periph_clk_enable(ATMEL_ID_UART1);
> +}
> +
> +void board_debug_uart_init(void)
> +{
> +	board_uart1_hw_init();
> +}
> +#endif
> +
> +void board_lan8720a_init(void)
> +{
> +	/* LAN8720A_nRST */
> +	atmel_pio4_set_pio_output(AT91_PIO_PORTB, 12, 0);
> +	/*
> +	 * Force 0 on RXER/PHYAD0. LAN8720A chipset will latch with address 0 on
> +	 * MDIO bus.
> +	 */
> +	atmel_pio4_set_pio_output(AT91_PIO_PORTB, 17, 0);
> +	/* Minimal delay of reset signal is 25 ms */
> +	mdelay(30);
> +	/* LAN8720A_nRST */
> +	atmel_pio4_set_pio_output(AT91_PIO_PORTB, 12, 1);
> +}
> +
> +void board_usba_init(void)
> +{
> +#ifdef CONFIG_USB_GADGET_ATMEL_USBA
> +	/* USB device peripheral initialization: sama5d2_devices.c */
> +	at91_udp_hw_init();
> +	/* USB device controller drivers/usb/gadget/atmel_usba_udc.c */
> +	usba_udc_probe(&pdata);

Any reason to probe the UDC here and not on-demand lazy probing when 
it's required ?

> +#endif
> +}
> +
> +#ifdef CONFIG_BOARD_EARLY_INIT_F
> +int board_early_init_f(void)
> +{
> +#ifdef CONFIG_DEBUG_UART
> +	debug_uart_init();
> +#endif
> +	/* Initialize FLEXCOM 4 in TWI(I2C) mode */
> +	writel(0x3, 0xfc018000);

There is a driver for flexcom, as stated above

> +	return 0;
> +}
> +#endif
> +
> +int ft_board_setup(void *blob, struct bd_info *bd)
> +{
> +	char *wlanaddr = env_get("eth1addr");
> +
> +	if (wlanaddr)
> +		do_fixup_by_compat(blob, "brcm,bcm4329-fmac", "local-mac-address",
> +				   wlanaddr, strlen(wlanaddr), 1);
> +	else
> +		printf("Not setting WIFI mac address. Check if EEPROM TLV is correctly set up.\n");
> +
> +	return 0;
> +}
> +
> +int board_init(void)
> +{
> +	/* address of boot parameters */
> +	gd->bd->bi_boot_params = CFG_SYS_SDRAM_BASE + 0x100;
> +
> +	board_usba_init();
> +	board_lan8720a_init();
> +
> +	return 0;
> +}
> +
> +#ifdef CONFIG_BOARD_LATE_INIT
> +int board_late_init(void)
> +{
> +	const char *serial_number;
> +
> +	populate_serial_number(0);
> +
> +	printf("Conclusive KSTR-SAMA5D27\n");

Normally, the board name is printed by U-boot, why duplicate it here ?
> +
> +	serial_number = env_get("serial#");
> +	if (!serial_number)
> +		printf("Warning: unknown serial number.\n");
> +	else
> +		printf("Serial number %s\n", serial_number);
> +
> +	return 0;
> +}
> +#endif
> +
> +#ifdef CONFIG_MISC_INIT_R
> +int misc_init_r(void)
> +{
> +	return 0;
> +}
> +#endif
> +
> +int dram_init(void)
> +{
> +	gd->ram_size = get_ram_size((void *)CFG_SYS_SDRAM_BASE,
> +				    CFG_SYS_SDRAM_SIZE);
> +	return 0;
> +}
> +
> +/* SPL */
> +#ifdef CONFIG_SPL_BUILD
> +void spl_board_init(void)
> +{
> +}
> +
> +static void ddrc_conf(struct atmel_mpddrc_config *ddrc)
> +{
> +	ddrc->md = (ATMEL_MPDDRC_MD_DBW_16_BITS | ATMEL_MPDDRC_MD_DDR2_SDRAM);
> +
> +	ddrc->cr = (ATMEL_MPDDRC_CR_NC_COL_10 |
> +		    ATMEL_MPDDRC_CR_NR_ROW_13 |
> +		    ATMEL_MPDDRC_CR_CAS_DDR_CAS3 |
> +		    ATMEL_MPDDRC_CR_DIC_DS |
> +		    ATMEL_MPDDRC_CR_ZQ_LONG |
> +		    ATMEL_MPDDRC_CR_NB_8BANKS |
> +		    ATMEL_MPDDRC_CR_DECOD_INTERLEAVED |
> +		    ATMEL_MPDDRC_CR_UNAL_SUPPORTED);
> +
> +	ddrc->rtr = 0x511;
> +
> +	ddrc->tpr0 = ((7 << ATMEL_MPDDRC_TPR0_TRAS_OFFSET) |
> +		      (3 << ATMEL_MPDDRC_TPR0_TRCD_OFFSET) |
> +		      (3 << ATMEL_MPDDRC_TPR0_TWR_OFFSET) |
> +		      (9 << ATMEL_MPDDRC_TPR0_TRC_OFFSET) |
> +		      (3 << ATMEL_MPDDRC_TPR0_TRP_OFFSET) |
> +		      (4 << ATMEL_MPDDRC_TPR0_TRRD_OFFSET) |
> +		      (4 << ATMEL_MPDDRC_TPR0_TWTR_OFFSET) |
> +		      (2 << ATMEL_MPDDRC_TPR0_TMRD_OFFSET));
> +
> +	ddrc->tpr1 = ((22 << ATMEL_MPDDRC_TPR1_TRFC_OFFSET) |
> +		      (23 << ATMEL_MPDDRC_TPR1_TXSNR_OFFSET) |
> +		      (200 << ATMEL_MPDDRC_TPR1_TXSRD_OFFSET) |
> +		      (3 << ATMEL_MPDDRC_TPR1_TXP_OFFSET));
> +
> +	ddrc->tpr2 = ((2 << ATMEL_MPDDRC_TPR2_TXARD_OFFSET) |
> +		      (8 << ATMEL_MPDDRC_TPR2_TXARDS_OFFSET) |
> +		      (4 << ATMEL_MPDDRC_TPR2_TRPA_OFFSET) |
> +		      (4 << ATMEL_MPDDRC_TPR2_TRTP_OFFSET) |
> +		      (8 << ATMEL_MPDDRC_TPR2_TFAW_OFFSET));
> +}
> +
> +void mem_init(void)
> +{
> +	struct at91_pmc *pmc = (struct at91_pmc *)ATMEL_BASE_PMC;
> +	struct atmel_mpddr *mpddrc = (struct atmel_mpddr *)ATMEL_BASE_MPDDRC;
> +	struct atmel_mpddrc_config ddrc_config;
> +	u32 reg;
> +
> +	ddrc_conf(&ddrc_config);
> +
> +	at91_periph_clk_enable(ATMEL_ID_MPDDRC);
> +	writel(AT91_PMC_DDR, &pmc->scer);
> +
> +	reg = readl(&mpddrc->io_calibr);
> +	reg &= ~ATMEL_MPDDRC_IO_CALIBR_RDIV;
> +	reg |= ATMEL_MPDDRC_IO_CALIBR_DDR3_RZQ_55;
> +	reg &= ~ATMEL_MPDDRC_IO_CALIBR_TZQIO;
> +	reg |= ATMEL_MPDDRC_IO_CALIBR_TZQIO_(101);
> +	writel(reg, &mpddrc->io_calibr);
> +
> +	writel(ATMEL_MPDDRC_RD_DATA_PATH_SHIFT_ONE_CYCLE,
> +	       &mpddrc->rd_data_path);
> +
> +	ddr3_init(ATMEL_BASE_MPDDRC, ATMEL_BASE_DDRCS, &ddrc_config);
> +
> +	writel(0x3, &mpddrc->cal_mr4);
> +	writel(64, &mpddrc->tim_cal);
> +}
> +
> +void at91_pmc_init(void)
> +{
> +	u32 tmp;
> +
> +	/*
> +	 * While coming from the ROM code, we run on PLLA @ 492 MHz / 164 MHz,
> +	 * so we need to slow down and configure MCKR accordingly.
> +	 * This is why we have a special flavor of the switching function.
> +	 */
> +	tmp = AT91_PMC_MCKR_PLLADIV_2 |
> +	      AT91_PMC_MCKR_MDIV_3 |
> +	      AT91_PMC_MCKR_CSS_MAIN;
> +	at91_mck_init_down(tmp);
> +
> +	tmp = AT91_PMC_PLLAR_29 |
> +	      AT91_PMC_PLLXR_PLLCOUNT(0x3f) |
> +	      AT91_PMC_PLLXR_MUL(40) |
> +	      AT91_PMC_PLLXR_DIV(1);
> +	at91_plla_init(tmp);
> +
> +	tmp = AT91_PMC_MCKR_H32MXDIV |
> +	      AT91_PMC_MCKR_PLLADIV_2 |
> +	      AT91_PMC_MCKR_MDIV_3 |
> +	      AT91_PMC_MCKR_CSS_PLLA;
> +	at91_mck_init(tmp);
> +}
> +#endif
> diff --git a/configs/kstr_sama5d27_defconfig b/configs/kstr_sama5d27_defconfig
> new file mode 100644
> index 000000000000..a0b8ea79c66b
> --- /dev/null
> +++ b/configs/kstr_sama5d27_defconfig
> @@ -0,0 +1,79 @@
> +CONFIG_ARM=y
> +CONFIG_ARCH_AT91=y
> +CONFIG_TEXT_BASE=0x26f00000
> +CONFIG_SYS_LOAD_ADDR=0x24000000
> +CONFIG_SYS_MONITOR_LEN=524288
> +CONFIG_TARGET_KSTR_SAMA5D27=y
> +CONFIG_SYS_MALLOC_F_LEN=0x2000
> +CONFIG_HAS_CUSTOM_SYS_INIT_SP_ADDR=y
> +CONFIG_CUSTOM_SYS_INIT_SP_ADDR=0x20003ee0
> +CONFIG_NR_DRAM_BANKS=1
> +CONFIG_DM_GPIO=y
> +CONFIG_DEFAULT_DEVICE_TREE="at91-kstr-sama5d27"
> +CONFIG_DISTRO_DEFAULTS=y
> +CONFIG_FIT=y
> +CONFIG_OF_BOARD_SETUP=y
> +CONFIG_SYS_EXTRA_OPTIONS="SAMA5D2"
> +CONFIG_SD_BOOT=y
> +CONFIG_BOOTDELAY=3
> +CONFIG_USE_BOOTARGS=y
> +CONFIG_BOOTARGS="console=ttyS0,115200 earlyprintk root=/dev/mmcblk0p2 rw rootwait"
> +# CONFIG_USE_BOOTCOMMAND is not set
> +# CONFIG_DISPLAY_BOARDINFO is not set
> +CONFIG_MISC_INIT_R=y
> +CONFIG_CMD_TLV_EEPROM=y
> +CONFIG_CMD_IMAGE=y
> +CONFIG_CMD_DM=y
> +CONFIG_CMD_GPIO=y
> +CONFIG_CMD_GPT=y
> +CONFIG_CMD_I2C=y
> +# CONFIG_CMD_LOADS is not set
> +CONFIG_CMD_MMC=y
> +CONFIG_CMD_USB=y
> +CONFIG_CMD_USB_MASS_STORAGE=y
> +# CONFIG_ISO_PARTITION is not set
> +CONFIG_OF_CONTROL=y
> +CONFIG_ENV_OVERWRITE=y
> +CONFIG_ENV_IS_IN_FAT=y
> +CONFIG_NET_RANDOM_ETHADDR=y
> +CONFIG_DM=y
> +CONFIG_CLK=y
> +CONFIG_CLK_AT91=y
> +CONFIG_AT91_UTMI=y
> +CONFIG_AT91_H32MX=y
> +CONFIG_AT91_GENERIC_CLK=y
> +CONFIG_ATMEL_PIO4=y
> +CONFIG_DM_I2C=y
> +CONFIG_SYS_I2C_AT91=y
> +CONFIG_I2C_EEPROM=y
> +CONFIG_DM_MMC=y
> +CONFIG_MMC_IO_VOLTAGE=y
> +CONFIG_MMC_SDHCI=y
> +CONFIG_MMC_SDHCI_SDMA=y
> +CONFIG_MMC_SDHCI_ATMEL=y
> +CONFIG_PHY_MICREL=y
> +CONFIG_DM_ETH=y
> +CONFIG_MACB=y
> +CONFIG_PINCTRL=y
> +CONFIG_PINCTRL_AT91PIO4=y
> +CONFIG_DM_SERIAL=y
> +CONFIG_ATMEL_USART=y
> +CONFIG_TEE=y
> +CONFIG_OPTEE=y
> +CONFIG_SYSRESET=y
> +CONFIG_SYSRESET_AT91=y
> +CONFIG_DM_RESET=y
> +CONFIG_RESET_AT91=y
> +CONFIG_TIMER=y
> +CONFIG_ATMEL_PIT_TIMER=y
> +CONFIG_USB=y
> +CONFIG_DM_USB=y
> +CONFIG_USB_EHCI_HCD=y
> +CONFIG_USB_GADGET=y
> +CONFIG_USB_GADGET_VENDOR_NUM=0x16c0
> +CONFIG_USB_GADGET_PRODUCT_NUM=0x03e9
> +CONFIG_USB_GADGET_ATMEL_USBA=y
> +CONFIG_USB_GADGET_DOWNLOAD=y
> +CONFIG_OF_LIBFDT_OVERLAY=y
> +CONFIG_SPL_OF_LIBFDT=y
> +# CONFIG_EFI_LOADER is not set
> diff --git a/include/configs/kstr-sama5d27.h b/include/configs/kstr-sama5d27.h
> new file mode 100644
> index 000000000000..772a073ba209
> --- /dev/null
> +++ b/include/configs/kstr-sama5d27.h
> @@ -0,0 +1,15 @@
> +/* SPDX-License-Identifier: GPL-2.0+ */
> +/*
> + * Copyright (C) 2021-2023 Conclusive Engineering Sp. z o. o.
> + */
> +
> +#ifndef __CONFIG_H
> +#define __CONFIG_H
> +
> +#include "at91-sama5_common.h"
> +
> +/* SDRAM */
> +#define CFG_SYS_SDRAM_BASE           0x20000000
> +#define CFG_SYS_SDRAM_SIZE           0x10000000
> +
> +#endif


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH 1/2] common: add prototype for populate_serial_number()
  2023-09-21 16:29   ` Simon Glass
@ 2023-09-25 19:07     ` Artur Rojek
  0 siblings, 0 replies; 8+ messages in thread
From: Artur Rojek @ 2023-09-25 19:07 UTC (permalink / raw)
  To: sjg; +Cc: artur, eugen.hristev, jakub, marcin, u-boot, wojciech

Hi Simon,

thanks for the review.
>Hi Artur,
>
>On Thu, 21 Sept 2023 at 09:44, Artur Rojek <artur@conclusive.pl> wrote:
>>
>> Provide function prototype for populate_serial_number().
>> This is useful for boards that wish to read their serial number from
>> EEPROM at init.
>>
>> Signed-off-by: Artur Rojek <artur@conclusive.pl>
>> ---
>>  include/init.h | 1 +
>>  1 file changed, 1 insertion(+)
>>
>> diff --git a/include/init.h b/include/init.h
>> index 3bf30476a2e0..e0b7fbc943ad 100644
>> --- a/include/init.h
>> +++ b/include/init.h
>> @@ -283,6 +283,7 @@ void board_init_r(struct global_data *id, ulong dest_addr)
>>  int cpu_init_r(void);
>>  int last_stage_init(void);
>>  int mac_read_from_eeprom(void);
>> +int populate_serial_number(int devnum);
>
>Please can you add a comment for this function? You can move it from the C file.
>
>I also suggest renaming it to something like eeprom_get_serial() or
>something like that.
I'll go with eeprom_read_serial(), as the one you suggested is
apparently already taken by board/gateworks/venice/eeprom.c.
>
>>  int set_cpu_clk_info(void);
>>  int update_flash_size(int flash_size);
>>  int arch_early_init_r(void);
>> --
>> 2.42.0
>>
>
>BTW tlv_eeprom.c should really be converted to driver model.
It should, but maybe at some other opportunity :)

Cheers,
Artur
>
>Regards,
>Simon

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH 2/2] board: Add support for Conclusive KSTR-SAMA5D27
  2023-09-22  6:35   ` Eugen Hristev
@ 2023-09-25 19:31     ` Artur Rojek
  2023-09-27 20:54       ` Eugen Hristev
  0 siblings, 1 reply; 8+ messages in thread
From: Artur Rojek @ 2023-09-25 19:31 UTC (permalink / raw)
  To: eugen.hristev; +Cc: artur, jakub, marcin, u-boot, wojciech

Hey Eugen,

thanks for the review.
>Hello,
>
>Thank you for your patch,
>
>On 9/21/23 18:37, Artur Rojek wrote:
>> Introduce support for Conclusive KSTR-SAMA5D27 Single Board Computer.
>> 
>> Co-developed-by: Jakub Klama <jakub@conclusive.pl>
>> Signed-off-by: Jakub Klama <jakub@conclusive.pl>
>> Co-developed-by: Marcin Jabrzyk <marcin@conclusive.pl>
>> Signed-off-by: Marcin Jabrzyk <marcin@conclusive.pl>
>> Signed-off-by: Artur Rojek <artur@conclusive.pl>
>> ---
>>   arch/arm/dts/Makefile                         |   3 +
>>   arch/arm/dts/at91-kstr-sama5d27.dts           | 310 ++++++++++++++++++
>>   arch/arm/mach-at91/Kconfig                    |  13 +
>>   board/conclusive/kstr-sama5d27/Kconfig        |  15 +
>>   board/conclusive/kstr-sama5d27/MAINTAINERS    |   8 +
>>   board/conclusive/kstr-sama5d27/Makefile       |   5 +
>>   .../conclusive/kstr-sama5d27/kstr-sama5d27.c  | 235 +++++++++++++
>>   configs/kstr_sama5d27_defconfig               |  79 +++++
>>   include/configs/kstr-sama5d27.h               |  15 +
>>   9 files changed, 683 insertions(+)
>>   create mode 100644 arch/arm/dts/at91-kstr-sama5d27.dts
>>   create mode 100644 board/conclusive/kstr-sama5d27/Kconfig
>>   create mode 100644 board/conclusive/kstr-sama5d27/MAINTAINERS
>>   create mode 100644 board/conclusive/kstr-sama5d27/Makefile
>>   create mode 100644 board/conclusive/kstr-sama5d27/kstr-sama5d27.c
>>   create mode 100644 configs/kstr_sama5d27_defconfig
>>   create mode 100644 include/configs/kstr-sama5d27.h
>> 
>> diff --git a/arch/arm/dts/Makefile b/arch/arm/dts/Makefile
>> index 85fd5b1157b1..8e4d33c01912 100644
>> --- a/arch/arm/dts/Makefile
>> +++ b/arch/arm/dts/Makefile
>> @@ -1198,6 +1198,9 @@ dtb-$(CONFIG_TARGET_SAMA5D27_SOM1_EK) += \
>>   dtb-$(CONFIG_TARGET_SAMA5D27_WLSOM1_EK) += \
>>   	at91-sama5d27_wlsom1_ek.dtb
>>   
>> +dtb-$(CONFIG_TARGET_KSTR_SAMA5D27) += \
>> +	at91-kstr-sama5d27.dtb
>> +
>>   dtb-$(CONFIG_TARGET_SAMA5D2_ICP) += \
>>   	at91-sama5d2_icp.dtb
>>   
>> diff --git a/arch/arm/dts/at91-kstr-sama5d27.dts b/arch/arm/dts/at91-kstr-sama5d27.dts
>> new file mode 100644
>> index 000000000000..6de918a3c964
>> --- /dev/null
>> +++ b/arch/arm/dts/at91-kstr-sama5d27.dts
>> @@ -0,0 +1,310 @@
>> +// SPDX-License-Identifier: GPL-2.0+ OR X11
>> +/*
>> + * at91-kstr-sama5d27.dts - Device Tree file for Conclusive KSTR-SAMA5D27 board
>> + *
>> + *  Copyright (C) 2019-2023 Conclusive Engineering Sp. z o. o.
>
>SPDX tag is enough, no need to replicate the license text below
>
>> + *
>> + * This file is dual-licensed: you can use it either under the terms
>> + * of the GPL or the X11 license, at your option. Note that this dual
>> + * licensing only applies to this file, and not this project as a
>> + * whole.
>> + *
>> + *  a) This file is free software; you can redistribute it and/or
>> + *     modify it under the terms of the GNU General Public License as
>> + *     published by the Free Software Foundation; either version 2 of the
>> + *     License, or (at your option) any later version.
>> + *
>> + *     This file is distributed in the hope that it will be useful,
>> + *     but WITHOUT ANY WARRANTY; without even the implied warranty of
>> + *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
>> + *     GNU General Public License for more details.
>> + *
>> + * Or, alternatively,
>> + *
>> + *  b) Permission is hereby granted, free of charge, to any person
>> + *     obtaining a copy of this software and associated documentation
>> + *     files (the "Software"), to deal in the Software without
>> + *     restriction, including without limitation the rights to use,
>> + *     copy, modify, merge, publish, distribute, sublicense, and/or
>> + *     sell copies of the Software, and to permit persons to whom the
>> + *     Software is furnished to do so, subject to the following
>> + *     conditions:
>> + *
>> + *     The above copyright notice and this permission notice shall be
>> + *     included in all copies or substantial portions of the Software.
>> + *
>> + *     THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
>> + *     EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
>> + *     OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
>> + *     NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
>> + *     HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
>> + *     WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
>> + *     FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
>> + *     OTHER DEALINGS IN THE SOFTWARE.
>> + */
>> +/dts-v1/;
>> +
>> +#include "sama5d2.dtsi"
>> +#include "sama5d2-pinfunc.h"
>> +#include <dt-bindings/interrupt-controller/irq.h>
>> +#include <dt-bindings/gpio/gpio.h>
>> +
>> +/ {
>> +	model = "Conclusive KSTR-SAMA5D27";
>> +	compatible = "conclusive,kstr-sama5d27", "atmel,sama5d2", "atmel,sama5";
>> +
>> +	chosen {
>> +		bootph-all;
>> +		stdout-path = &uart1;
>> +	};
>> +
>> +	clocks {
>> +		main_xtal: main_xtal {
>> +			clock-frequency = <12000000>;
>> +		};
>> +	};
>> +
>> +	ahb {
>> +			usb0: gadget@00300000 {
>
>I feel this line is not properly aligned
>
>> +			#address-cells = <1>;
>> +			#size-cells = <0>;
>> +			compatible = "atmel,sama5d3-udc";
>> +			reg = <0x00300000 0x100000
>> +				0xfc02c000 0x400>;
>> +			interrupts = <42 IRQ_TYPE_LEVEL_HIGH 2>;
>> +			clocks = <&udphs_clk>, <&utmi>;
>> +			clock-names = "pclk", "hclk";
>> +			status = "okay";
>
>This gadget appears to be SoC specific, is it not described in 
>sama5d2.dtsi right ? Do you think it would be beneficial to add it as a 
>separate patch to sama5d2.dtsi ?
It would be beneficial to do that, although, embarrassingly, I just
noticed that the driver in question (atmel_usba_udc.c) does not use DT
at all... Instead, it uses hardcoded pdata for endpoint configuration.
So this entire node will be dropped in v2.
>
>> +
>> +			ep0: endpoint@0 {
>> +				reg = <0>;
>> +				atmel,fifo-size = <64>;
>> +				atmel,nb-banks = <1>;
>> +			};
>> +
>> +			ep1: endpoint@1 {
>> +				reg = <1>;
>> +				atmel,fifo-size = <1024>;
>> +				atmel,nb-banks = <3>;
>> +				atmel,can-dma;
>> +				atmel,can-isoc;
>> +			};
>> +
>> +			ep2: endpoint@2 {
>> +				reg = <2>;
>> +				atmel,fifo-size = <1024>;
>> +				atmel,nb-banks = <3>;
>> +				atmel,can-dma;
>> +				atmel,can-isoc;
>> +			};
>> +
>> +			ep3: endpoint@3 {
>> +				reg = <3>;
>> +				atmel,fifo-size = <1024>;
>> +				atmel,nb-banks = <2>;
>> +				atmel,can-dma;
>> +				atmel,can-isoc;
>> +			};
>> +
>> +			ep4: endpoint@4 {
>> +				reg = <4>;
>> +				atmel,fifo-size = <1024>;
>> +				atmel,nb-banks = <2>;
>> +				atmel,can-dma;
>> +				atmel,can-isoc;
>> +			};
>> +
>> +			ep5: endpoint@5 {
>> +				reg = <5>;
>> +				atmel,fifo-size = <1024>;
>> +				atmel,nb-banks = <2>;
>> +				atmel,can-dma;
>> +				atmel,can-isoc;
>> +			};
>> +
>> +			ep6: endpoint@6 {
>> +				reg = <6>;
>> +				atmel,fifo-size = <1024>;
>> +				atmel,nb-banks = <2>;
>> +				atmel,can-dma;
>> +				atmel,can-isoc;
>> +			};
>> +
>> +			ep7: endpoint@7 {
>> +				reg = <7>;
>> +				atmel,fifo-size = <1024>;
>> +				atmel,nb-banks = <2>;
>> +				atmel,can-dma;
>> +				atmel,can-isoc;
>> +			};
>> +
>> +			ep8: endpoint@8 {
>> +				reg = <8>;
>> +				atmel,fifo-size = <1024>;
>> +				atmel,nb-banks = <2>;
>> +				atmel,can-isoc;
>> +			};
>> +
>> +			ep9: endpoint@9 {
>> +				reg = <9>;
>> +				atmel,fifo-size = <1024>;
>> +				atmel,nb-banks = <2>;
>> +				atmel,can-isoc;
>> +			};
>> +
>> +			ep10: endpoint@a {
>> +				reg = <10>;
>> +				atmel,fifo-size = <1024>;
>> +				atmel,nb-banks = <2>;
>> +				atmel,can-isoc;
>> +			};
>> +
>> +			ep11: endpoint@b {
>> +				reg = <11>;
>> +				atmel,fifo-size = <1024>;
>> +				atmel,nb-banks = <2>;
>> +				atmel,can-isoc;
>> +			};
>> +
>> +			ep12: endpoint@c {
>> +				reg = <12>;
>> +				atmel,fifo-size = <1024>;
>> +				atmel,nb-banks = <2>;
>> +				atmel,can-isoc;
>> +			};
>> +
>> +			ep13: endpoint@d {
>> +				reg = <13>;
>> +				atmel,fifo-size = <1024>;
>> +				atmel,nb-banks = <2>;
>> +				atmel,can-isoc;
>> +			};
>> +
>> +			ep14: endpoint@e {
>> +				reg = <14>;
>> +				atmel,fifo-size = <1024>;
>> +				atmel,nb-banks = <2>;
>> +				atmel,can-isoc;
>> +			};
>> +
>> +			ep15: endpoint@f {
>> +				reg = <15>;
>> +				atmel,fifo-size = <1024>;
>> +				atmel,nb-banks = <2>;
>> +				atmel,can-isoc;
>> +			};
>> +		};
>> +
>> +		sdmmc0: sdio-host@a0000000 {
>> +			bus-width = <4>;
>> +			pinctrl-names = "default";
>> +			pinctrl-0 = <&pinctrl_sdmmc0_cmd_dat_default &pinctrl_sdmmc0_ck_cd_default>;
>> +			status = "okay";
>> +			bootph-all;
>> +		};
>> +
>> +		apb {
>> +			uart1: serial@f8020000 {
>> +				pinctrl-names = "default";
>> +				pinctrl-0 = <&pinctrl_uart1_default>;
>> +				status = "okay";
>> +				bootph-all;
>> +			};
>> +
>> +			macb0: ethernet@f8008000 {
>> +				pinctrl-names = "default";
>> +				pinctrl-0 = <&pinctrl_macb0_rmii &pinctrl_macb0_phy_irq>;
>> +				phy-mode = "rmii";
>> +				status = "okay";
>> +
>> +				ethernet-phy@0 {
>> +					reg = <0x0>;
>> +					reset-gpios = <&pioA 44 GPIO_ACTIVE_LOW>;
>> +				};
>> +			};
>> +
>> +			i2c@fc018000 {
>
>I have a feeling this node should also reside in sama5d2.dtsi, and that 
>it's a flexcom in fact (judging by how you hack it later), you should 
>enable the flexcom driver and have this as a child node of the flexcom 
>node (there are some examples done in other sama*.dtsi)
Indeed. Will be done in v2.
>
>> +				compatible = "atmel,sama5d2-i2c";
>> +				reg = <0xfc018600 0x100>;
>> +				#address-cells = <1>;
>> +				#size-cells = <0>;
>> +				clocks = <&flx4_clk>;
>> +				clock-names = "i2c2_clk";
>> +				clock-frequency = <100000>;
>> +				pinctrl-names = "default";
>> +				pinctrl-0 = <&pinctrl_flx4_i2c>;
>> +				status = "okay";
>> +
>> +				eeprom: eeprom@50 {
>> +					compatible = "microchip,24c32", "atmel,24c32";
>> +					reg = <0x50>;
>> +					read-only;
>> +					pagesize = <32>;
>> +					status = "okay";
>> +				};
>> +
>> +				pmic: pmic@5b {
>> +					compatible = "active-semi,act8945a";
>> +					reg = <0x5b>;
>> +					status = "okay";
>> +				};
>> +			};
>> +
>> +			pioA: pinctrl@fc038000 {
>> +				pinctrl {
>> +					pinctrl_uart1_default: uart1_default {
>> +						pinmux = <PIN_PD2__URXD1>,
>> +							 <PIN_PD3__UTXD1>;
>> +						bias-disable;
>> +						bootph-all;
>> +					};
>> +
>> +					pinctrl_macb0_phy_irq: macb0_phy_irq {
>> +						pinmux = <PIN_PB13__GPIO>;
>> +						bias-disable;
>> +						bootph-all;
>> +					};
>> +
>> +					pinctrl_macb0_rmii: macb0_rmii {
>> +						pinmux = <PIN_PB14__GTXCK>,
>> +							 <PIN_PB15__GTXEN>,
>> +							 <PIN_PB16__GRXDV>,
>> +							 <PIN_PB17__GRXER>,
>> +							 <PIN_PB18__GRX0>,
>> +							 <PIN_PB19__GRX1>,
>> +							 <PIN_PB20__GTX0>,
>> +							 <PIN_PB21__GTX1>,
>> +							 <PIN_PB22__GMDC>,
>> +							 <PIN_PB23__GMDIO>;
>> +						bias-disable;
>> +						bootph-all;
>> +					};
>> +
>> +					pinctrl_sdmmc0_cmd_dat_default: sdmmc0_cmd_dat_default {
>> +						pinmux = <PIN_PA1__SDMMC0_CMD>,
>> +							 <PIN_PA2__SDMMC0_DAT0>,
>> +							 <PIN_PA3__SDMMC0_DAT1>,
>> +							 <PIN_PA4__SDMMC0_DAT2>,
>> +							 <PIN_PA5__SDMMC0_DAT3>;
>> +						bias-pull-up;
>> +						bootph-all;
>> +					};
>> +
>> +					pinctrl_sdmmc0_ck_cd_default: sdmmc0_ck_cd_default {
>> +						pinmux = <PIN_PA0__SDMMC0_CK>,
>> +							 <PIN_PA11__SDMMC0_VDDSEL>,
>> +							 <PIN_PA13__SDMMC0_CD>;
>> +						bias-disable;
>> +						bootph-all;
>> +					};
>> +
>> +					pinctrl_flx4_i2c: flx4_i2c {
>> +						pinmux = <PIN_PC28__FLEXCOM4_IO0>,
>> +							 <PIN_PC29__FLEXCOM4_IO1>;
>> +						bias-disable;
>> +					};
>> +				};
>> +			};
>> +		};
>> +	};
>> +};
>> diff --git a/arch/arm/mach-at91/Kconfig b/arch/arm/mach-at91/Kconfig
>> index 7c2e4ebbdb0f..9ab1a9339ee1 100644
>> --- a/arch/arm/mach-at91/Kconfig
>> +++ b/arch/arm/mach-at91/Kconfig
>> @@ -204,6 +204,18 @@ config TARGET_SAMA5D27_WLSOM1_EK
>>   	  processor-based SAMA5D2 MPU with 2 Gbit LPDDR2-SDRAM
>>   	  in a single package.
>>   
>> +config TARGET_KSTR_SAMA5D27
>> +	bool "Conclusive KSTR-SAMA5D27 board"
>> +	select BOARD_EARLY_INIT_F
>> +	select SAMA5D2
>> +	select BOARD_LATE_INIT
>> +	help
>> +	  The KSTR-SAMA5D27 embeds SAMA5D27 SoC, together with
>> +	  256 MiB SDRAM, 10/100 Mbit/s Ethernet, 96 Mbit/s Wi-Fi b/g/n,
>> +	  Bluetooth 4.1 LE, USB OTG controller w/ type-C USB connector
>> +	  and stackable GPIO headers in an all-in-one SBC form factor:
>> +	  https://conclusive.pl/products/kstr-sama5d27-sbc/
>> +
>>   config TARGET_SAMA5D2_ICP
>>   	bool "SAMA5D2 Industrial Connectivity Platform (ICP)"
>>   	select SAMA5D2
>> @@ -352,6 +364,7 @@ source "board/atmel/sama5d4_xplained/Kconfig"
>>   source "board/atmel/sama5d4ek/Kconfig"
>>   source "board/bluewater/gurnard/Kconfig"
>>   source "board/calao/usb_a9263/Kconfig"
>> +source "board/conclusive/kstr-sama5d27/Kconfig"
>>   source "board/egnite/ethernut5/Kconfig"
>>   source "board/esd/meesc/Kconfig"
>>   source "board/gardena/smart-gateway-at91sam/Kconfig"
>> diff --git a/board/conclusive/kstr-sama5d27/Kconfig b/board/conclusive/kstr-sama5d27/Kconfig
>> new file mode 100644
>> index 000000000000..572551cfda98
>> --- /dev/null
>> +++ b/board/conclusive/kstr-sama5d27/Kconfig
>> @@ -0,0 +1,15 @@
>> +if TARGET_KSTR_SAMA5D27
>> +
>> +config SYS_BOARD
>> +	default "kstr-sama5d27"
>> +
>> +config SYS_VENDOR
>> +	default "conclusive"
>> +
>> +config SYS_SOC
>> +	default "at91"
>> +
>> +config SYS_CONFIG_NAME
>> +	default "kstr-sama5d27"
>> +
>> +endif
>> diff --git a/board/conclusive/kstr-sama5d27/MAINTAINERS b/board/conclusive/kstr-sama5d27/MAINTAINERS
>> new file mode 100644
>> index 000000000000..cb1635cdd280
>> --- /dev/null
>> +++ b/board/conclusive/kstr-sama5d27/MAINTAINERS
>> @@ -0,0 +1,8 @@
>> +CONCLUSIVE KSTR-SAMA5D27 BOARD
>> +M:	Jakub Klama <jakub@conclusive.pl>
>> +M:	Artur Rojek <artur@conclusive.pl>
>> +S:	Maintained
>> +F:	board/conclusive/kstr-sama5d27
>> +F:	include/configs/kstr-sama5d27.h
>> +F:	configs/kstr_sama5d27_defconfig
>> +F:	arch/arm/dts/at91-kstr-sama5d27.dts
>> diff --git a/board/conclusive/kstr-sama5d27/Makefile b/board/conclusive/kstr-sama5d27/Makefile
>> new file mode 100644
>> index 000000000000..edf7d1c93441
>> --- /dev/null
>> +++ b/board/conclusive/kstr-sama5d27/Makefile
>> @@ -0,0 +1,5 @@
>> +# SPDX-License-Identifier: GPL-2.0+
>> +#
>> +# Copyright (C) 2019-2023 Conclusive Engineering Sp. z o. o.
>> +
>> +obj-y += kstr-sama5d27.o
>> diff --git a/board/conclusive/kstr-sama5d27/kstr-sama5d27.c b/board/conclusive/kstr-sama5d27/kstr-sama5d27.c
>> new file mode 100644
>> index 000000000000..e29fd00544bd
>> --- /dev/null
>> +++ b/board/conclusive/kstr-sama5d27/kstr-sama5d27.c
>> @@ -0,0 +1,235 @@
>> +// SPDX-License-Identifier: GPL-2.0+
>> +/*
>> + * kstr-sama5d27.c - Board init file for Conclusive KSTR-SAMA5D27 board
>> + * Copyright (C) 2021-2023 Conclusive Engineering Sp. z o. o.
>> + */
>> +
>> +#include <common.h>
>> +#include <debug_uart.h>
>> +#include <init.h>
>> +#include <env.h>
>> +#include <fdt_support.h>
>> +#include <asm/global_data.h>
>> +#include <asm/io.h>
>> +#include <asm/arch/at91_common.h>
>> +#include <asm/arch/atmel_pio4.h>
>> +#include <asm/arch/atmel_mpddrc.h>
>> +#include <asm/arch/atmel_sdhci.h>
>> +#include <asm/arch/clk.h>
>> +#include <asm/arch/gpio.h>
>> +#include <asm/arch/sama5d2.h>
>> +#include <linux/delay.h>
>> +
>> +#ifdef CONFIG_USB_GADGET_ATMEL_USBA
>> +#include <asm/arch/atmel_usba_udc.h>
>> +#endif
>> +
>> +DECLARE_GLOBAL_DATA_PTR;
>> +
>> +#ifdef CONFIG_DEBUG_UART_BOARD_INIT
>> +static void board_uart1_hw_init(void)
>> +{
>> +	/* URXD1 */
>> +	atmel_pio4_set_a_periph(AT91_PIO_PORTD, 2, ATMEL_PIO_PUEN_MASK);
>> +	/* UTXD1 */
>> +	atmel_pio4_set_a_periph(AT91_PIO_PORTD, 3, 0);
>> +	at91_periph_clk_enable(ATMEL_ID_UART1);
>> +}
>> +
>> +void board_debug_uart_init(void)
>> +{
>> +	board_uart1_hw_init();
>> +}
>> +#endif
>> +
>> +void board_lan8720a_init(void)
>> +{
>> +	/* LAN8720A_nRST */
>> +	atmel_pio4_set_pio_output(AT91_PIO_PORTB, 12, 0);
>> +	/*
>> +	 * Force 0 on RXER/PHYAD0. LAN8720A chipset will latch with address 0 on
>> +	 * MDIO bus.
>> +	 */
>> +	atmel_pio4_set_pio_output(AT91_PIO_PORTB, 17, 0);
>> +	/* Minimal delay of reset signal is 25 ms */
>> +	mdelay(30);
>> +	/* LAN8720A_nRST */
>> +	atmel_pio4_set_pio_output(AT91_PIO_PORTB, 12, 1);
>> +}
>> +
>> +void board_usba_init(void)
>> +{
>> +#ifdef CONFIG_USB_GADGET_ATMEL_USBA
>> +	/* USB device peripheral initialization: sama5d2_devices.c */
>> +	at91_udp_hw_init();
>> +	/* USB device controller drivers/usb/gadget/atmel_usba_udc.c */
>> +	usba_udc_probe(&pdata);
>
>Any reason to probe the UDC here and not on-demand lazy probing when 
>it's required ?
This driver doesn't use U_BOOT_DRIVER style declaration, so the board
init has to call the probe manually. It would be nice to rewrite it to
do that, and also to sample platform data from OF, however I'd like to
avoid doing that in this series (which merely tries to add a new board).
>
>> +#endif
>> +}
>> +
>> +#ifdef CONFIG_BOARD_EARLY_INIT_F
>> +int board_early_init_f(void)
>> +{
>> +#ifdef CONFIG_DEBUG_UART
>> +	debug_uart_init();
>> +#endif
>> +	/* Initialize FLEXCOM 4 in TWI(I2C) mode */
>> +	writel(0x3, 0xfc018000);
>
>There is a driver for flexcom, as stated above
>
>> +	return 0;
>> +}
>> +#endif
>> +
>> +int ft_board_setup(void *blob, struct bd_info *bd)
>> +{
>> +	char *wlanaddr = env_get("eth1addr");
>> +
>> +	if (wlanaddr)
>> +		do_fixup_by_compat(blob, "brcm,bcm4329-fmac", "local-mac-address",
>> +				   wlanaddr, strlen(wlanaddr), 1);
>> +	else
>> +		printf("Not setting WIFI mac address. Check if EEPROM TLV is correctly set up.\n");
>> +
>> +	return 0;
>> +}
>> +
>> +int board_init(void)
>> +{
>> +	/* address of boot parameters */
>> +	gd->bd->bi_boot_params = CFG_SYS_SDRAM_BASE + 0x100;
>> +
>> +	board_usba_init();
>> +	board_lan8720a_init();
>> +
>> +	return 0;
>> +}
>> +
>> +#ifdef CONFIG_BOARD_LATE_INIT
>> +int board_late_init(void)
>> +{
>> +	const char *serial_number;
>> +
>> +	populate_serial_number(0);
>> +
>> +	printf("Conclusive KSTR-SAMA5D27\n");
>
>Normally, the board name is printed by U-boot, why duplicate it here ?
Doesn't happen on our board and I couldn't find a generic mechanism that
would do that. Did I miss something? Other boards which print their
names also seem to have custom logic for it.

Cheers,
Artur
>> +
>> +	serial_number = env_get("serial#");
>> +	if (!serial_number)
>> +		printf("Warning: unknown serial number.\n");
>> +	else
>> +		printf("Serial number %s\n", serial_number);
>> +
>> +	return 0;
>> +}
>> +#endif
>> +
>> +#ifdef CONFIG_MISC_INIT_R
>> +int misc_init_r(void)
>> +{
>> +	return 0;
>> +}
>> +#endif
>> +
>> +int dram_init(void)
>> +{
>> +	gd->ram_size = get_ram_size((void *)CFG_SYS_SDRAM_BASE,
>> +				    CFG_SYS_SDRAM_SIZE);
>> +	return 0;
>> +}
>> +
>> +/* SPL */
>> +#ifdef CONFIG_SPL_BUILD
>> +void spl_board_init(void)
>> +{
>> +}
>> +
>> +static void ddrc_conf(struct atmel_mpddrc_config *ddrc)
>> +{
>> +	ddrc->md = (ATMEL_MPDDRC_MD_DBW_16_BITS | ATMEL_MPDDRC_MD_DDR2_SDRAM);
>> +
>> +	ddrc->cr = (ATMEL_MPDDRC_CR_NC_COL_10 |
>> +		    ATMEL_MPDDRC_CR_NR_ROW_13 |
>> +		    ATMEL_MPDDRC_CR_CAS_DDR_CAS3 |
>> +		    ATMEL_MPDDRC_CR_DIC_DS |
>> +		    ATMEL_MPDDRC_CR_ZQ_LONG |
>> +		    ATMEL_MPDDRC_CR_NB_8BANKS |
>> +		    ATMEL_MPDDRC_CR_DECOD_INTERLEAVED |
>> +		    ATMEL_MPDDRC_CR_UNAL_SUPPORTED);
>> +
>> +	ddrc->rtr = 0x511;
>> +
>> +	ddrc->tpr0 = ((7 << ATMEL_MPDDRC_TPR0_TRAS_OFFSET) |
>> +		      (3 << ATMEL_MPDDRC_TPR0_TRCD_OFFSET) |
>> +		      (3 << ATMEL_MPDDRC_TPR0_TWR_OFFSET) |
>> +		      (9 << ATMEL_MPDDRC_TPR0_TRC_OFFSET) |
>> +		      (3 << ATMEL_MPDDRC_TPR0_TRP_OFFSET) |
>> +		      (4 << ATMEL_MPDDRC_TPR0_TRRD_OFFSET) |
>> +		      (4 << ATMEL_MPDDRC_TPR0_TWTR_OFFSET) |
>> +		      (2 << ATMEL_MPDDRC_TPR0_TMRD_OFFSET));
>> +
>> +	ddrc->tpr1 = ((22 << ATMEL_MPDDRC_TPR1_TRFC_OFFSET) |
>> +		      (23 << ATMEL_MPDDRC_TPR1_TXSNR_OFFSET) |
>> +		      (200 << ATMEL_MPDDRC_TPR1_TXSRD_OFFSET) |
>> +		      (3 << ATMEL_MPDDRC_TPR1_TXP_OFFSET));
>> +
>> +	ddrc->tpr2 = ((2 << ATMEL_MPDDRC_TPR2_TXARD_OFFSET) |
>> +		      (8 << ATMEL_MPDDRC_TPR2_TXARDS_OFFSET) |
>> +		      (4 << ATMEL_MPDDRC_TPR2_TRPA_OFFSET) |
>> +		      (4 << ATMEL_MPDDRC_TPR2_TRTP_OFFSET) |
>> +		      (8 << ATMEL_MPDDRC_TPR2_TFAW_OFFSET));
>> +}
>> +
>> +void mem_init(void)
>> +{
>> +	struct at91_pmc *pmc = (struct at91_pmc *)ATMEL_BASE_PMC;
>> +	struct atmel_mpddr *mpddrc = (struct atmel_mpddr *)ATMEL_BASE_MPDDRC;
>> +	struct atmel_mpddrc_config ddrc_config;
>> +	u32 reg;
>> +
>> +	ddrc_conf(&ddrc_config);
>> +
>> +	at91_periph_clk_enable(ATMEL_ID_MPDDRC);
>> +	writel(AT91_PMC_DDR, &pmc->scer);
>> +
>> +	reg = readl(&mpddrc->io_calibr);
>> +	reg &= ~ATMEL_MPDDRC_IO_CALIBR_RDIV;
>> +	reg |= ATMEL_MPDDRC_IO_CALIBR_DDR3_RZQ_55;
>> +	reg &= ~ATMEL_MPDDRC_IO_CALIBR_TZQIO;
>> +	reg |= ATMEL_MPDDRC_IO_CALIBR_TZQIO_(101);
>> +	writel(reg, &mpddrc->io_calibr);
>> +
>> +	writel(ATMEL_MPDDRC_RD_DATA_PATH_SHIFT_ONE_CYCLE,
>> +	       &mpddrc->rd_data_path);
>> +
>> +	ddr3_init(ATMEL_BASE_MPDDRC, ATMEL_BASE_DDRCS, &ddrc_config);
>> +
>> +	writel(0x3, &mpddrc->cal_mr4);
>> +	writel(64, &mpddrc->tim_cal);
>> +}
>> +
>> +void at91_pmc_init(void)
>> +{
>> +	u32 tmp;
>> +
>> +	/*
>> +	 * While coming from the ROM code, we run on PLLA @ 492 MHz / 164 MHz,
>> +	 * so we need to slow down and configure MCKR accordingly.
>> +	 * This is why we have a special flavor of the switching function.
>> +	 */
>> +	tmp = AT91_PMC_MCKR_PLLADIV_2 |
>> +	      AT91_PMC_MCKR_MDIV_3 |
>> +	      AT91_PMC_MCKR_CSS_MAIN;
>> +	at91_mck_init_down(tmp);
>> +
>> +	tmp = AT91_PMC_PLLAR_29 |
>> +	      AT91_PMC_PLLXR_PLLCOUNT(0x3f) |
>> +	      AT91_PMC_PLLXR_MUL(40) |
>> +	      AT91_PMC_PLLXR_DIV(1);
>> +	at91_plla_init(tmp);
>> +
>> +	tmp = AT91_PMC_MCKR_H32MXDIV |
>> +	      AT91_PMC_MCKR_PLLADIV_2 |
>> +	      AT91_PMC_MCKR_MDIV_3 |
>> +	      AT91_PMC_MCKR_CSS_PLLA;
>> +	at91_mck_init(tmp);
>> +}
>> +#endif
>> diff --git a/configs/kstr_sama5d27_defconfig b/configs/kstr_sama5d27_defconfig
>> new file mode 100644
>> index 000000000000..a0b8ea79c66b
>> --- /dev/null
>> +++ b/configs/kstr_sama5d27_defconfig
>> @@ -0,0 +1,79 @@
>> +CONFIG_ARM=y
>> +CONFIG_ARCH_AT91=y
>> +CONFIG_TEXT_BASE=0x26f00000
>> +CONFIG_SYS_LOAD_ADDR=0x24000000
>> +CONFIG_SYS_MONITOR_LEN=524288
>> +CONFIG_TARGET_KSTR_SAMA5D27=y
>> +CONFIG_SYS_MALLOC_F_LEN=0x2000
>> +CONFIG_HAS_CUSTOM_SYS_INIT_SP_ADDR=y
>> +CONFIG_CUSTOM_SYS_INIT_SP_ADDR=0x20003ee0
>> +CONFIG_NR_DRAM_BANKS=1
>> +CONFIG_DM_GPIO=y
>> +CONFIG_DEFAULT_DEVICE_TREE="at91-kstr-sama5d27"
>> +CONFIG_DISTRO_DEFAULTS=y
>> +CONFIG_FIT=y
>> +CONFIG_OF_BOARD_SETUP=y
>> +CONFIG_SYS_EXTRA_OPTIONS="SAMA5D2"
>> +CONFIG_SD_BOOT=y
>> +CONFIG_BOOTDELAY=3
>> +CONFIG_USE_BOOTARGS=y
>> +CONFIG_BOOTARGS="console=ttyS0,115200 earlyprintk root=/dev/mmcblk0p2 rw rootwait"
>> +# CONFIG_USE_BOOTCOMMAND is not set
>> +# CONFIG_DISPLAY_BOARDINFO is not set
>> +CONFIG_MISC_INIT_R=y
>> +CONFIG_CMD_TLV_EEPROM=y
>> +CONFIG_CMD_IMAGE=y
>> +CONFIG_CMD_DM=y
>> +CONFIG_CMD_GPIO=y
>> +CONFIG_CMD_GPT=y
>> +CONFIG_CMD_I2C=y
>> +# CONFIG_CMD_LOADS is not set
>> +CONFIG_CMD_MMC=y
>> +CONFIG_CMD_USB=y
>> +CONFIG_CMD_USB_MASS_STORAGE=y
>> +# CONFIG_ISO_PARTITION is not set
>> +CONFIG_OF_CONTROL=y
>> +CONFIG_ENV_OVERWRITE=y
>> +CONFIG_ENV_IS_IN_FAT=y
>> +CONFIG_NET_RANDOM_ETHADDR=y
>> +CONFIG_DM=y
>> +CONFIG_CLK=y
>> +CONFIG_CLK_AT91=y
>> +CONFIG_AT91_UTMI=y
>> +CONFIG_AT91_H32MX=y
>> +CONFIG_AT91_GENERIC_CLK=y
>> +CONFIG_ATMEL_PIO4=y
>> +CONFIG_DM_I2C=y
>> +CONFIG_SYS_I2C_AT91=y
>> +CONFIG_I2C_EEPROM=y
>> +CONFIG_DM_MMC=y
>> +CONFIG_MMC_IO_VOLTAGE=y
>> +CONFIG_MMC_SDHCI=y
>> +CONFIG_MMC_SDHCI_SDMA=y
>> +CONFIG_MMC_SDHCI_ATMEL=y
>> +CONFIG_PHY_MICREL=y
>> +CONFIG_DM_ETH=y
>> +CONFIG_MACB=y
>> +CONFIG_PINCTRL=y
>> +CONFIG_PINCTRL_AT91PIO4=y
>> +CONFIG_DM_SERIAL=y
>> +CONFIG_ATMEL_USART=y
>> +CONFIG_TEE=y
>> +CONFIG_OPTEE=y
>> +CONFIG_SYSRESET=y
>> +CONFIG_SYSRESET_AT91=y
>> +CONFIG_DM_RESET=y
>> +CONFIG_RESET_AT91=y
>> +CONFIG_TIMER=y
>> +CONFIG_ATMEL_PIT_TIMER=y
>> +CONFIG_USB=y
>> +CONFIG_DM_USB=y
>> +CONFIG_USB_EHCI_HCD=y
>> +CONFIG_USB_GADGET=y
>> +CONFIG_USB_GADGET_VENDOR_NUM=0x16c0
>> +CONFIG_USB_GADGET_PRODUCT_NUM=0x03e9
>> +CONFIG_USB_GADGET_ATMEL_USBA=y
>> +CONFIG_USB_GADGET_DOWNLOAD=y
>> +CONFIG_OF_LIBFDT_OVERLAY=y
>> +CONFIG_SPL_OF_LIBFDT=y
>> +# CONFIG_EFI_LOADER is not set
>> diff --git a/include/configs/kstr-sama5d27.h b/include/configs/kstr-sama5d27.h
>> new file mode 100644
>> index 000000000000..772a073ba209
>> --- /dev/null
>> +++ b/include/configs/kstr-sama5d27.h
>> @@ -0,0 +1,15 @@
>> +/* SPDX-License-Identifier: GPL-2.0+ */
>> +/*
>> + * Copyright (C) 2021-2023 Conclusive Engineering Sp. z o. o.
>> + */
>> +
>> +#ifndef __CONFIG_H
>> +#define __CONFIG_H
>> +
>> +#include "at91-sama5_common.h"
>> +
>> +/* SDRAM */
>> +#define CFG_SYS_SDRAM_BASE           0x20000000
>> +#define CFG_SYS_SDRAM_SIZE           0x10000000
>> +
>> +#endif

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH 2/2] board: Add support for Conclusive KSTR-SAMA5D27
  2023-09-25 19:31     ` Artur Rojek
@ 2023-09-27 20:54       ` Eugen Hristev
  0 siblings, 0 replies; 8+ messages in thread
From: Eugen Hristev @ 2023-09-27 20:54 UTC (permalink / raw)
  To: Artur Rojek; +Cc: jakub, marcin, u-boot, wojciech

On 9/25/23 22:31, Artur Rojek wrote:
> Hey Eugen,
> 
> thanks for the review.
>> Hello,
>>
>> Thank you for your patch,
>>
>> On 9/21/23 18:37, Artur Rojek wrote:
>>> Introduce support for Conclusive KSTR-SAMA5D27 Single Board Computer.
>>>
>>> Co-developed-by: Jakub Klama <jakub@conclusive.pl>
>>> Signed-off-by: Jakub Klama <jakub@conclusive.pl>
>>> Co-developed-by: Marcin Jabrzyk <marcin@conclusive.pl>
>>> Signed-off-by: Marcin Jabrzyk <marcin@conclusive.pl>
>>> Signed-off-by: Artur Rojek <artur@conclusive.pl>
>>> ---
>>>    arch/arm/dts/Makefile                         |   3 +
>>>    arch/arm/dts/at91-kstr-sama5d27.dts           | 310 ++++++++++++++++++
>>>    arch/arm/mach-at91/Kconfig                    |  13 +
>>>    board/conclusive/kstr-sama5d27/Kconfig        |  15 +
>>>    board/conclusive/kstr-sama5d27/MAINTAINERS    |   8 +
>>>    board/conclusive/kstr-sama5d27/Makefile       |   5 +
>>>    .../conclusive/kstr-sama5d27/kstr-sama5d27.c  | 235 +++++++++++++
>>>    configs/kstr_sama5d27_defconfig               |  79 +++++
>>>    include/configs/kstr-sama5d27.h               |  15 +
>>>    9 files changed, 683 insertions(+)
>>>    create mode 100644 arch/arm/dts/at91-kstr-sama5d27.dts
>>>    create mode 100644 board/conclusive/kstr-sama5d27/Kconfig
>>>    create mode 100644 board/conclusive/kstr-sama5d27/MAINTAINERS
>>>    create mode 100644 board/conclusive/kstr-sama5d27/Makefile
>>>    create mode 100644 board/conclusive/kstr-sama5d27/kstr-sama5d27.c
>>>    create mode 100644 configs/kstr_sama5d27_defconfig
>>>    create mode 100644 include/configs/kstr-sama5d27.h
>>>
>>> diff --git a/arch/arm/dts/Makefile b/arch/arm/dts/Makefile
>>> index 85fd5b1157b1..8e4d33c01912 100644
>>> --- a/arch/arm/dts/Makefile
>>> +++ b/arch/arm/dts/Makefile
>>> @@ -1198,6 +1198,9 @@ dtb-$(CONFIG_TARGET_SAMA5D27_SOM1_EK) += \
>>>    dtb-$(CONFIG_TARGET_SAMA5D27_WLSOM1_EK) += \
>>>    	at91-sama5d27_wlsom1_ek.dtb
>>>    
>>> +dtb-$(CONFIG_TARGET_KSTR_SAMA5D27) += \
>>> +	at91-kstr-sama5d27.dtb
>>> +
>>>    dtb-$(CONFIG_TARGET_SAMA5D2_ICP) += \
>>>    	at91-sama5d2_icp.dtb
>>>    
>>> diff --git a/arch/arm/dts/at91-kstr-sama5d27.dts b/arch/arm/dts/at91-kstr-sama5d27.dts
>>> new file mode 100644
>>> index 000000000000..6de918a3c964
>>> --- /dev/null
>>> +++ b/arch/arm/dts/at91-kstr-sama5d27.dts
>>> @@ -0,0 +1,310 @@
>>> +// SPDX-License-Identifier: GPL-2.0+ OR X11
>>> +/*
>>> + * at91-kstr-sama5d27.dts - Device Tree file for Conclusive KSTR-SAMA5D27 board
>>> + *
>>> + *  Copyright (C) 2019-2023 Conclusive Engineering Sp. z o. o.
>>
>> SPDX tag is enough, no need to replicate the license text below
>>
>>> + *
>>> + * This file is dual-licensed: you can use it either under the terms
>>> + * of the GPL or the X11 license, at your option. Note that this dual
>>> + * licensing only applies to this file, and not this project as a
>>> + * whole.
>>> + *
>>> + *  a) This file is free software; you can redistribute it and/or
>>> + *     modify it under the terms of the GNU General Public License as
>>> + *     published by the Free Software Foundation; either version 2 of the
>>> + *     License, or (at your option) any later version.
>>> + *
>>> + *     This file is distributed in the hope that it will be useful,
>>> + *     but WITHOUT ANY WARRANTY; without even the implied warranty of
>>> + *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
>>> + *     GNU General Public License for more details.
>>> + *
>>> + * Or, alternatively,
>>> + *
>>> + *  b) Permission is hereby granted, free of charge, to any person
>>> + *     obtaining a copy of this software and associated documentation
>>> + *     files (the "Software"), to deal in the Software without
>>> + *     restriction, including without limitation the rights to use,
>>> + *     copy, modify, merge, publish, distribute, sublicense, and/or
>>> + *     sell copies of the Software, and to permit persons to whom the
>>> + *     Software is furnished to do so, subject to the following
>>> + *     conditions:
>>> + *
>>> + *     The above copyright notice and this permission notice shall be
>>> + *     included in all copies or substantial portions of the Software.
>>> + *
>>> + *     THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
>>> + *     EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
>>> + *     OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
>>> + *     NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
>>> + *     HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
>>> + *     WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
>>> + *     FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
>>> + *     OTHER DEALINGS IN THE SOFTWARE.
>>> + */
>>> +/dts-v1/;
>>> +
>>> +#include "sama5d2.dtsi"
>>> +#include "sama5d2-pinfunc.h"
>>> +#include <dt-bindings/interrupt-controller/irq.h>
>>> +#include <dt-bindings/gpio/gpio.h>
>>> +
>>> +/ {
>>> +	model = "Conclusive KSTR-SAMA5D27";
>>> +	compatible = "conclusive,kstr-sama5d27", "atmel,sama5d2", "atmel,sama5";
>>> +
>>> +	chosen {
>>> +		bootph-all;
>>> +		stdout-path = &uart1;
>>> +	};
>>> +
>>> +	clocks {
>>> +		main_xtal: main_xtal {
>>> +			clock-frequency = <12000000>;
>>> +		};
>>> +	};
>>> +
>>> +	ahb {
>>> +			usb0: gadget@00300000 {
>>
>> I feel this line is not properly aligned
>>
>>> +			#address-cells = <1>;
>>> +			#size-cells = <0>;
>>> +			compatible = "atmel,sama5d3-udc";
>>> +			reg = <0x00300000 0x100000
>>> +				0xfc02c000 0x400>;
>>> +			interrupts = <42 IRQ_TYPE_LEVEL_HIGH 2>;
>>> +			clocks = <&udphs_clk>, <&utmi>;
>>> +			clock-names = "pclk", "hclk";
>>> +			status = "okay";
>>
>> This gadget appears to be SoC specific, is it not described in
>> sama5d2.dtsi right ? Do you think it would be beneficial to add it as a
>> separate patch to sama5d2.dtsi ?
> It would be beneficial to do that, although, embarrassingly, I just
> noticed that the driver in question (atmel_usba_udc.c) does not use DT
> at all... Instead, it uses hardcoded pdata for endpoint configuration.
> So this entire node will be dropped in v2.
>>
>>> +
>>> +			ep0: endpoint@0 {
>>> +				reg = <0>;
>>> +				atmel,fifo-size = <64>;
>>> +				atmel,nb-banks = <1>;
>>> +			};
>>> +
>>> +			ep1: endpoint@1 {
>>> +				reg = <1>;
>>> +				atmel,fifo-size = <1024>;
>>> +				atmel,nb-banks = <3>;
>>> +				atmel,can-dma;
>>> +				atmel,can-isoc;
>>> +			};
>>> +
>>> +			ep2: endpoint@2 {
>>> +				reg = <2>;
>>> +				atmel,fifo-size = <1024>;
>>> +				atmel,nb-banks = <3>;
>>> +				atmel,can-dma;
>>> +				atmel,can-isoc;
>>> +			};
>>> +
>>> +			ep3: endpoint@3 {
>>> +				reg = <3>;
>>> +				atmel,fifo-size = <1024>;
>>> +				atmel,nb-banks = <2>;
>>> +				atmel,can-dma;
>>> +				atmel,can-isoc;
>>> +			};
>>> +
>>> +			ep4: endpoint@4 {
>>> +				reg = <4>;
>>> +				atmel,fifo-size = <1024>;
>>> +				atmel,nb-banks = <2>;
>>> +				atmel,can-dma;
>>> +				atmel,can-isoc;
>>> +			};
>>> +
>>> +			ep5: endpoint@5 {
>>> +				reg = <5>;
>>> +				atmel,fifo-size = <1024>;
>>> +				atmel,nb-banks = <2>;
>>> +				atmel,can-dma;
>>> +				atmel,can-isoc;
>>> +			};
>>> +
>>> +			ep6: endpoint@6 {
>>> +				reg = <6>;
>>> +				atmel,fifo-size = <1024>;
>>> +				atmel,nb-banks = <2>;
>>> +				atmel,can-dma;
>>> +				atmel,can-isoc;
>>> +			};
>>> +
>>> +			ep7: endpoint@7 {
>>> +				reg = <7>;
>>> +				atmel,fifo-size = <1024>;
>>> +				atmel,nb-banks = <2>;
>>> +				atmel,can-dma;
>>> +				atmel,can-isoc;
>>> +			};
>>> +
>>> +			ep8: endpoint@8 {
>>> +				reg = <8>;
>>> +				atmel,fifo-size = <1024>;
>>> +				atmel,nb-banks = <2>;
>>> +				atmel,can-isoc;
>>> +			};
>>> +
>>> +			ep9: endpoint@9 {
>>> +				reg = <9>;
>>> +				atmel,fifo-size = <1024>;
>>> +				atmel,nb-banks = <2>;
>>> +				atmel,can-isoc;
>>> +			};
>>> +
>>> +			ep10: endpoint@a {
>>> +				reg = <10>;
>>> +				atmel,fifo-size = <1024>;
>>> +				atmel,nb-banks = <2>;
>>> +				atmel,can-isoc;
>>> +			};
>>> +
>>> +			ep11: endpoint@b {
>>> +				reg = <11>;
>>> +				atmel,fifo-size = <1024>;
>>> +				atmel,nb-banks = <2>;
>>> +				atmel,can-isoc;
>>> +			};
>>> +
>>> +			ep12: endpoint@c {
>>> +				reg = <12>;
>>> +				atmel,fifo-size = <1024>;
>>> +				atmel,nb-banks = <2>;
>>> +				atmel,can-isoc;
>>> +			};
>>> +
>>> +			ep13: endpoint@d {
>>> +				reg = <13>;
>>> +				atmel,fifo-size = <1024>;
>>> +				atmel,nb-banks = <2>;
>>> +				atmel,can-isoc;
>>> +			};
>>> +
>>> +			ep14: endpoint@e {
>>> +				reg = <14>;
>>> +				atmel,fifo-size = <1024>;
>>> +				atmel,nb-banks = <2>;
>>> +				atmel,can-isoc;
>>> +			};
>>> +
>>> +			ep15: endpoint@f {
>>> +				reg = <15>;
>>> +				atmel,fifo-size = <1024>;
>>> +				atmel,nb-banks = <2>;
>>> +				atmel,can-isoc;
>>> +			};
>>> +		};
>>> +
>>> +		sdmmc0: sdio-host@a0000000 {
>>> +			bus-width = <4>;
>>> +			pinctrl-names = "default";
>>> +			pinctrl-0 = <&pinctrl_sdmmc0_cmd_dat_default &pinctrl_sdmmc0_ck_cd_default>;
>>> +			status = "okay";
>>> +			bootph-all;
>>> +		};
>>> +
>>> +		apb {
>>> +			uart1: serial@f8020000 {
>>> +				pinctrl-names = "default";
>>> +				pinctrl-0 = <&pinctrl_uart1_default>;
>>> +				status = "okay";
>>> +				bootph-all;
>>> +			};
>>> +
>>> +			macb0: ethernet@f8008000 {
>>> +				pinctrl-names = "default";
>>> +				pinctrl-0 = <&pinctrl_macb0_rmii &pinctrl_macb0_phy_irq>;
>>> +				phy-mode = "rmii";
>>> +				status = "okay";
>>> +
>>> +				ethernet-phy@0 {
>>> +					reg = <0x0>;
>>> +					reset-gpios = <&pioA 44 GPIO_ACTIVE_LOW>;
>>> +				};
>>> +			};
>>> +
>>> +			i2c@fc018000 {
>>
>> I have a feeling this node should also reside in sama5d2.dtsi, and that
>> it's a flexcom in fact (judging by how you hack it later), you should
>> enable the flexcom driver and have this as a child node of the flexcom
>> node (there are some examples done in other sama*.dtsi)
> Indeed. Will be done in v2.
>>
>>> +				compatible = "atmel,sama5d2-i2c";
>>> +				reg = <0xfc018600 0x100>;
>>> +				#address-cells = <1>;
>>> +				#size-cells = <0>;
>>> +				clocks = <&flx4_clk>;
>>> +				clock-names = "i2c2_clk";
>>> +				clock-frequency = <100000>;
>>> +				pinctrl-names = "default";
>>> +				pinctrl-0 = <&pinctrl_flx4_i2c>;
>>> +				status = "okay";
>>> +
>>> +				eeprom: eeprom@50 {
>>> +					compatible = "microchip,24c32", "atmel,24c32";
>>> +					reg = <0x50>;
>>> +					read-only;
>>> +					pagesize = <32>;
>>> +					status = "okay";
>>> +				};
>>> +
>>> +				pmic: pmic@5b {
>>> +					compatible = "active-semi,act8945a";
>>> +					reg = <0x5b>;
>>> +					status = "okay";
>>> +				};
>>> +			};
>>> +
>>> +			pioA: pinctrl@fc038000 {
>>> +				pinctrl {
>>> +					pinctrl_uart1_default: uart1_default {
>>> +						pinmux = <PIN_PD2__URXD1>,
>>> +							 <PIN_PD3__UTXD1>;
>>> +						bias-disable;
>>> +						bootph-all;
>>> +					};
>>> +
>>> +					pinctrl_macb0_phy_irq: macb0_phy_irq {
>>> +						pinmux = <PIN_PB13__GPIO>;
>>> +						bias-disable;
>>> +						bootph-all;
>>> +					};
>>> +
>>> +					pinctrl_macb0_rmii: macb0_rmii {
>>> +						pinmux = <PIN_PB14__GTXCK>,
>>> +							 <PIN_PB15__GTXEN>,
>>> +							 <PIN_PB16__GRXDV>,
>>> +							 <PIN_PB17__GRXER>,
>>> +							 <PIN_PB18__GRX0>,
>>> +							 <PIN_PB19__GRX1>,
>>> +							 <PIN_PB20__GTX0>,
>>> +							 <PIN_PB21__GTX1>,
>>> +							 <PIN_PB22__GMDC>,
>>> +							 <PIN_PB23__GMDIO>;
>>> +						bias-disable;
>>> +						bootph-all;
>>> +					};
>>> +
>>> +					pinctrl_sdmmc0_cmd_dat_default: sdmmc0_cmd_dat_default {
>>> +						pinmux = <PIN_PA1__SDMMC0_CMD>,
>>> +							 <PIN_PA2__SDMMC0_DAT0>,
>>> +							 <PIN_PA3__SDMMC0_DAT1>,
>>> +							 <PIN_PA4__SDMMC0_DAT2>,
>>> +							 <PIN_PA5__SDMMC0_DAT3>;
>>> +						bias-pull-up;
>>> +						bootph-all;
>>> +					};
>>> +
>>> +					pinctrl_sdmmc0_ck_cd_default: sdmmc0_ck_cd_default {
>>> +						pinmux = <PIN_PA0__SDMMC0_CK>,
>>> +							 <PIN_PA11__SDMMC0_VDDSEL>,
>>> +							 <PIN_PA13__SDMMC0_CD>;
>>> +						bias-disable;
>>> +						bootph-all;
>>> +					};
>>> +
>>> +					pinctrl_flx4_i2c: flx4_i2c {
>>> +						pinmux = <PIN_PC28__FLEXCOM4_IO0>,
>>> +							 <PIN_PC29__FLEXCOM4_IO1>;
>>> +						bias-disable;
>>> +					};
>>> +				};
>>> +			};
>>> +		};
>>> +	};
>>> +};
>>> diff --git a/arch/arm/mach-at91/Kconfig b/arch/arm/mach-at91/Kconfig
>>> index 7c2e4ebbdb0f..9ab1a9339ee1 100644
>>> --- a/arch/arm/mach-at91/Kconfig
>>> +++ b/arch/arm/mach-at91/Kconfig
>>> @@ -204,6 +204,18 @@ config TARGET_SAMA5D27_WLSOM1_EK
>>>    	  processor-based SAMA5D2 MPU with 2 Gbit LPDDR2-SDRAM
>>>    	  in a single package.
>>>    
>>> +config TARGET_KSTR_SAMA5D27
>>> +	bool "Conclusive KSTR-SAMA5D27 board"
>>> +	select BOARD_EARLY_INIT_F
>>> +	select SAMA5D2
>>> +	select BOARD_LATE_INIT
>>> +	help
>>> +	  The KSTR-SAMA5D27 embeds SAMA5D27 SoC, together with
>>> +	  256 MiB SDRAM, 10/100 Mbit/s Ethernet, 96 Mbit/s Wi-Fi b/g/n,
>>> +	  Bluetooth 4.1 LE, USB OTG controller w/ type-C USB connector
>>> +	  and stackable GPIO headers in an all-in-one SBC form factor:
>>> +	  https://conclusive.pl/products/kstr-sama5d27-sbc/
>>> +
>>>    config TARGET_SAMA5D2_ICP
>>>    	bool "SAMA5D2 Industrial Connectivity Platform (ICP)"
>>>    	select SAMA5D2
>>> @@ -352,6 +364,7 @@ source "board/atmel/sama5d4_xplained/Kconfig"
>>>    source "board/atmel/sama5d4ek/Kconfig"
>>>    source "board/bluewater/gurnard/Kconfig"
>>>    source "board/calao/usb_a9263/Kconfig"
>>> +source "board/conclusive/kstr-sama5d27/Kconfig"
>>>    source "board/egnite/ethernut5/Kconfig"
>>>    source "board/esd/meesc/Kconfig"
>>>    source "board/gardena/smart-gateway-at91sam/Kconfig"
>>> diff --git a/board/conclusive/kstr-sama5d27/Kconfig b/board/conclusive/kstr-sama5d27/Kconfig
>>> new file mode 100644
>>> index 000000000000..572551cfda98
>>> --- /dev/null
>>> +++ b/board/conclusive/kstr-sama5d27/Kconfig
>>> @@ -0,0 +1,15 @@
>>> +if TARGET_KSTR_SAMA5D27
>>> +
>>> +config SYS_BOARD
>>> +	default "kstr-sama5d27"
>>> +
>>> +config SYS_VENDOR
>>> +	default "conclusive"
>>> +
>>> +config SYS_SOC
>>> +	default "at91"
>>> +
>>> +config SYS_CONFIG_NAME
>>> +	default "kstr-sama5d27"
>>> +
>>> +endif
>>> diff --git a/board/conclusive/kstr-sama5d27/MAINTAINERS b/board/conclusive/kstr-sama5d27/MAINTAINERS
>>> new file mode 100644
>>> index 000000000000..cb1635cdd280
>>> --- /dev/null
>>> +++ b/board/conclusive/kstr-sama5d27/MAINTAINERS
>>> @@ -0,0 +1,8 @@
>>> +CONCLUSIVE KSTR-SAMA5D27 BOARD
>>> +M:	Jakub Klama <jakub@conclusive.pl>
>>> +M:	Artur Rojek <artur@conclusive.pl>
>>> +S:	Maintained
>>> +F:	board/conclusive/kstr-sama5d27
>>> +F:	include/configs/kstr-sama5d27.h
>>> +F:	configs/kstr_sama5d27_defconfig
>>> +F:	arch/arm/dts/at91-kstr-sama5d27.dts
>>> diff --git a/board/conclusive/kstr-sama5d27/Makefile b/board/conclusive/kstr-sama5d27/Makefile
>>> new file mode 100644
>>> index 000000000000..edf7d1c93441
>>> --- /dev/null
>>> +++ b/board/conclusive/kstr-sama5d27/Makefile
>>> @@ -0,0 +1,5 @@
>>> +# SPDX-License-Identifier: GPL-2.0+
>>> +#
>>> +# Copyright (C) 2019-2023 Conclusive Engineering Sp. z o. o.
>>> +
>>> +obj-y += kstr-sama5d27.o
>>> diff --git a/board/conclusive/kstr-sama5d27/kstr-sama5d27.c b/board/conclusive/kstr-sama5d27/kstr-sama5d27.c
>>> new file mode 100644
>>> index 000000000000..e29fd00544bd
>>> --- /dev/null
>>> +++ b/board/conclusive/kstr-sama5d27/kstr-sama5d27.c
>>> @@ -0,0 +1,235 @@
>>> +// SPDX-License-Identifier: GPL-2.0+
>>> +/*
>>> + * kstr-sama5d27.c - Board init file for Conclusive KSTR-SAMA5D27 board
>>> + * Copyright (C) 2021-2023 Conclusive Engineering Sp. z o. o.
>>> + */
>>> +
>>> +#include <common.h>
>>> +#include <debug_uart.h>
>>> +#include <init.h>
>>> +#include <env.h>
>>> +#include <fdt_support.h>
>>> +#include <asm/global_data.h>
>>> +#include <asm/io.h>
>>> +#include <asm/arch/at91_common.h>
>>> +#include <asm/arch/atmel_pio4.h>
>>> +#include <asm/arch/atmel_mpddrc.h>
>>> +#include <asm/arch/atmel_sdhci.h>
>>> +#include <asm/arch/clk.h>
>>> +#include <asm/arch/gpio.h>
>>> +#include <asm/arch/sama5d2.h>
>>> +#include <linux/delay.h>
>>> +
>>> +#ifdef CONFIG_USB_GADGET_ATMEL_USBA
>>> +#include <asm/arch/atmel_usba_udc.h>
>>> +#endif
>>> +
>>> +DECLARE_GLOBAL_DATA_PTR;
>>> +
>>> +#ifdef CONFIG_DEBUG_UART_BOARD_INIT
>>> +static void board_uart1_hw_init(void)
>>> +{
>>> +	/* URXD1 */
>>> +	atmel_pio4_set_a_periph(AT91_PIO_PORTD, 2, ATMEL_PIO_PUEN_MASK);
>>> +	/* UTXD1 */
>>> +	atmel_pio4_set_a_periph(AT91_PIO_PORTD, 3, 0);
>>> +	at91_periph_clk_enable(ATMEL_ID_UART1);
>>> +}
>>> +
>>> +void board_debug_uart_init(void)
>>> +{
>>> +	board_uart1_hw_init();
>>> +}
>>> +#endif
>>> +
>>> +void board_lan8720a_init(void)
>>> +{
>>> +	/* LAN8720A_nRST */
>>> +	atmel_pio4_set_pio_output(AT91_PIO_PORTB, 12, 0);
>>> +	/*
>>> +	 * Force 0 on RXER/PHYAD0. LAN8720A chipset will latch with address 0 on
>>> +	 * MDIO bus.
>>> +	 */
>>> +	atmel_pio4_set_pio_output(AT91_PIO_PORTB, 17, 0);
>>> +	/* Minimal delay of reset signal is 25 ms */
>>> +	mdelay(30);
>>> +	/* LAN8720A_nRST */
>>> +	atmel_pio4_set_pio_output(AT91_PIO_PORTB, 12, 1);
>>> +}
>>> +
>>> +void board_usba_init(void)
>>> +{
>>> +#ifdef CONFIG_USB_GADGET_ATMEL_USBA
>>> +	/* USB device peripheral initialization: sama5d2_devices.c */
>>> +	at91_udp_hw_init();
>>> +	/* USB device controller drivers/usb/gadget/atmel_usba_udc.c */
>>> +	usba_udc_probe(&pdata);
>>
>> Any reason to probe the UDC here and not on-demand lazy probing when
>> it's required ?
> This driver doesn't use U_BOOT_DRIVER style declaration, so the board
> init has to call the probe manually. It would be nice to rewrite it to
> do that, and also to sample platform data from OF, however I'd like to
> avoid doing that in this series (which merely tries to add a new board).
>>
>>> +#endif
>>> +}
>>> +
>>> +#ifdef CONFIG_BOARD_EARLY_INIT_F
>>> +int board_early_init_f(void)
>>> +{
>>> +#ifdef CONFIG_DEBUG_UART
>>> +	debug_uart_init();
>>> +#endif
>>> +	/* Initialize FLEXCOM 4 in TWI(I2C) mode */
>>> +	writel(0x3, 0xfc018000);
>>
>> There is a driver for flexcom, as stated above
>>
>>> +	return 0;
>>> +}
>>> +#endif
>>> +
>>> +int ft_board_setup(void *blob, struct bd_info *bd)
>>> +{
>>> +	char *wlanaddr = env_get("eth1addr");
>>> +
>>> +	if (wlanaddr)
>>> +		do_fixup_by_compat(blob, "brcm,bcm4329-fmac", "local-mac-address",
>>> +				   wlanaddr, strlen(wlanaddr), 1);
>>> +	else
>>> +		printf("Not setting WIFI mac address. Check if EEPROM TLV is correctly set up.\n");
>>> +
>>> +	return 0;
>>> +}
>>> +
>>> +int board_init(void)
>>> +{
>>> +	/* address of boot parameters */
>>> +	gd->bd->bi_boot_params = CFG_SYS_SDRAM_BASE + 0x100;
>>> +
>>> +	board_usba_init();
>>> +	board_lan8720a_init();
>>> +
>>> +	return 0;
>>> +}
>>> +
>>> +#ifdef CONFIG_BOARD_LATE_INIT
>>> +int board_late_init(void)
>>> +{
>>> +	const char *serial_number;
>>> +
>>> +	populate_serial_number(0);
>>> +
>>> +	printf("Conclusive KSTR-SAMA5D27\n");
>>
>> Normally, the board name is printed by U-boot, why duplicate it here ?
> Doesn't happen on our board and I couldn't find a generic mechanism that
> would do that. Did I miss something? Other boards which print their
> names also seem to have custom logic for it.

Have you tried CONFIG_DISPLAY_BOARDINFO ?
> 
> Cheers,
> Artur
>>> +
>>> +	serial_number = env_get("serial#");
>>> +	if (!serial_number)
>>> +		printf("Warning: unknown serial number.\n");
>>> +	else
>>> +		printf("Serial number %s\n", serial_number);
>>> +
>>> +	return 0;
>>> +}
>>> +#endif
>>> +
>>> +#ifdef CONFIG_MISC_INIT_R
>>> +int misc_init_r(void)
>>> +{
>>> +	return 0;
>>> +}
>>> +#endif
>>> +
>>> +int dram_init(void)
>>> +{
>>> +	gd->ram_size = get_ram_size((void *)CFG_SYS_SDRAM_BASE,
>>> +				    CFG_SYS_SDRAM_SIZE);
>>> +	return 0;
>>> +}
>>> +
>>> +/* SPL */
>>> +#ifdef CONFIG_SPL_BUILD
>>> +void spl_board_init(void)
>>> +{
>>> +}
>>> +
>>> +static void ddrc_conf(struct atmel_mpddrc_config *ddrc)
>>> +{
>>> +	ddrc->md = (ATMEL_MPDDRC_MD_DBW_16_BITS | ATMEL_MPDDRC_MD_DDR2_SDRAM);
>>> +
>>> +	ddrc->cr = (ATMEL_MPDDRC_CR_NC_COL_10 |
>>> +		    ATMEL_MPDDRC_CR_NR_ROW_13 |
>>> +		    ATMEL_MPDDRC_CR_CAS_DDR_CAS3 |
>>> +		    ATMEL_MPDDRC_CR_DIC_DS |
>>> +		    ATMEL_MPDDRC_CR_ZQ_LONG |
>>> +		    ATMEL_MPDDRC_CR_NB_8BANKS |
>>> +		    ATMEL_MPDDRC_CR_DECOD_INTERLEAVED |
>>> +		    ATMEL_MPDDRC_CR_UNAL_SUPPORTED);
>>> +
>>> +	ddrc->rtr = 0x511;
>>> +
>>> +	ddrc->tpr0 = ((7 << ATMEL_MPDDRC_TPR0_TRAS_OFFSET) |
>>> +		      (3 << ATMEL_MPDDRC_TPR0_TRCD_OFFSET) |
>>> +		      (3 << ATMEL_MPDDRC_TPR0_TWR_OFFSET) |
>>> +		      (9 << ATMEL_MPDDRC_TPR0_TRC_OFFSET) |
>>> +		      (3 << ATMEL_MPDDRC_TPR0_TRP_OFFSET) |
>>> +		      (4 << ATMEL_MPDDRC_TPR0_TRRD_OFFSET) |
>>> +		      (4 << ATMEL_MPDDRC_TPR0_TWTR_OFFSET) |
>>> +		      (2 << ATMEL_MPDDRC_TPR0_TMRD_OFFSET));
>>> +
>>> +	ddrc->tpr1 = ((22 << ATMEL_MPDDRC_TPR1_TRFC_OFFSET) |
>>> +		      (23 << ATMEL_MPDDRC_TPR1_TXSNR_OFFSET) |
>>> +		      (200 << ATMEL_MPDDRC_TPR1_TXSRD_OFFSET) |
>>> +		      (3 << ATMEL_MPDDRC_TPR1_TXP_OFFSET));
>>> +
>>> +	ddrc->tpr2 = ((2 << ATMEL_MPDDRC_TPR2_TXARD_OFFSET) |
>>> +		      (8 << ATMEL_MPDDRC_TPR2_TXARDS_OFFSET) |
>>> +		      (4 << ATMEL_MPDDRC_TPR2_TRPA_OFFSET) |
>>> +		      (4 << ATMEL_MPDDRC_TPR2_TRTP_OFFSET) |
>>> +		      (8 << ATMEL_MPDDRC_TPR2_TFAW_OFFSET));
>>> +}
>>> +
>>> +void mem_init(void)
>>> +{
>>> +	struct at91_pmc *pmc = (struct at91_pmc *)ATMEL_BASE_PMC;
>>> +	struct atmel_mpddr *mpddrc = (struct atmel_mpddr *)ATMEL_BASE_MPDDRC;
>>> +	struct atmel_mpddrc_config ddrc_config;
>>> +	u32 reg;
>>> +
>>> +	ddrc_conf(&ddrc_config);
>>> +
>>> +	at91_periph_clk_enable(ATMEL_ID_MPDDRC);
>>> +	writel(AT91_PMC_DDR, &pmc->scer);
>>> +
>>> +	reg = readl(&mpddrc->io_calibr);
>>> +	reg &= ~ATMEL_MPDDRC_IO_CALIBR_RDIV;
>>> +	reg |= ATMEL_MPDDRC_IO_CALIBR_DDR3_RZQ_55;
>>> +	reg &= ~ATMEL_MPDDRC_IO_CALIBR_TZQIO;
>>> +	reg |= ATMEL_MPDDRC_IO_CALIBR_TZQIO_(101);
>>> +	writel(reg, &mpddrc->io_calibr);
>>> +
>>> +	writel(ATMEL_MPDDRC_RD_DATA_PATH_SHIFT_ONE_CYCLE,
>>> +	       &mpddrc->rd_data_path);
>>> +
>>> +	ddr3_init(ATMEL_BASE_MPDDRC, ATMEL_BASE_DDRCS, &ddrc_config);
>>> +
>>> +	writel(0x3, &mpddrc->cal_mr4);
>>> +	writel(64, &mpddrc->tim_cal);
>>> +}
>>> +
>>> +void at91_pmc_init(void)
>>> +{
>>> +	u32 tmp;
>>> +
>>> +	/*
>>> +	 * While coming from the ROM code, we run on PLLA @ 492 MHz / 164 MHz,
>>> +	 * so we need to slow down and configure MCKR accordingly.
>>> +	 * This is why we have a special flavor of the switching function.
>>> +	 */
>>> +	tmp = AT91_PMC_MCKR_PLLADIV_2 |
>>> +	      AT91_PMC_MCKR_MDIV_3 |
>>> +	      AT91_PMC_MCKR_CSS_MAIN;
>>> +	at91_mck_init_down(tmp);
>>> +
>>> +	tmp = AT91_PMC_PLLAR_29 |
>>> +	      AT91_PMC_PLLXR_PLLCOUNT(0x3f) |
>>> +	      AT91_PMC_PLLXR_MUL(40) |
>>> +	      AT91_PMC_PLLXR_DIV(1);
>>> +	at91_plla_init(tmp);
>>> +
>>> +	tmp = AT91_PMC_MCKR_H32MXDIV |
>>> +	      AT91_PMC_MCKR_PLLADIV_2 |
>>> +	      AT91_PMC_MCKR_MDIV_3 |
>>> +	      AT91_PMC_MCKR_CSS_PLLA;
>>> +	at91_mck_init(tmp);
>>> +}
>>> +#endif
>>> diff --git a/configs/kstr_sama5d27_defconfig b/configs/kstr_sama5d27_defconfig
>>> new file mode 100644
>>> index 000000000000..a0b8ea79c66b
>>> --- /dev/null
>>> +++ b/configs/kstr_sama5d27_defconfig
>>> @@ -0,0 +1,79 @@
>>> +CONFIG_ARM=y
>>> +CONFIG_ARCH_AT91=y
>>> +CONFIG_TEXT_BASE=0x26f00000
>>> +CONFIG_SYS_LOAD_ADDR=0x24000000
>>> +CONFIG_SYS_MONITOR_LEN=524288
>>> +CONFIG_TARGET_KSTR_SAMA5D27=y
>>> +CONFIG_SYS_MALLOC_F_LEN=0x2000
>>> +CONFIG_HAS_CUSTOM_SYS_INIT_SP_ADDR=y
>>> +CONFIG_CUSTOM_SYS_INIT_SP_ADDR=0x20003ee0
>>> +CONFIG_NR_DRAM_BANKS=1
>>> +CONFIG_DM_GPIO=y
>>> +CONFIG_DEFAULT_DEVICE_TREE="at91-kstr-sama5d27"
>>> +CONFIG_DISTRO_DEFAULTS=y
>>> +CONFIG_FIT=y
>>> +CONFIG_OF_BOARD_SETUP=y
>>> +CONFIG_SYS_EXTRA_OPTIONS="SAMA5D2"
>>> +CONFIG_SD_BOOT=y
>>> +CONFIG_BOOTDELAY=3
>>> +CONFIG_USE_BOOTARGS=y
>>> +CONFIG_BOOTARGS="console=ttyS0,115200 earlyprintk root=/dev/mmcblk0p2 rw rootwait"
>>> +# CONFIG_USE_BOOTCOMMAND is not set
>>> +# CONFIG_DISPLAY_BOARDINFO is not set
>>> +CONFIG_MISC_INIT_R=y
>>> +CONFIG_CMD_TLV_EEPROM=y
>>> +CONFIG_CMD_IMAGE=y
>>> +CONFIG_CMD_DM=y
>>> +CONFIG_CMD_GPIO=y
>>> +CONFIG_CMD_GPT=y
>>> +CONFIG_CMD_I2C=y
>>> +# CONFIG_CMD_LOADS is not set
>>> +CONFIG_CMD_MMC=y
>>> +CONFIG_CMD_USB=y
>>> +CONFIG_CMD_USB_MASS_STORAGE=y
>>> +# CONFIG_ISO_PARTITION is not set
>>> +CONFIG_OF_CONTROL=y
>>> +CONFIG_ENV_OVERWRITE=y
>>> +CONFIG_ENV_IS_IN_FAT=y
>>> +CONFIG_NET_RANDOM_ETHADDR=y
>>> +CONFIG_DM=y
>>> +CONFIG_CLK=y
>>> +CONFIG_CLK_AT91=y
>>> +CONFIG_AT91_UTMI=y
>>> +CONFIG_AT91_H32MX=y
>>> +CONFIG_AT91_GENERIC_CLK=y
>>> +CONFIG_ATMEL_PIO4=y
>>> +CONFIG_DM_I2C=y
>>> +CONFIG_SYS_I2C_AT91=y
>>> +CONFIG_I2C_EEPROM=y
>>> +CONFIG_DM_MMC=y
>>> +CONFIG_MMC_IO_VOLTAGE=y
>>> +CONFIG_MMC_SDHCI=y
>>> +CONFIG_MMC_SDHCI_SDMA=y
>>> +CONFIG_MMC_SDHCI_ATMEL=y
>>> +CONFIG_PHY_MICREL=y
>>> +CONFIG_DM_ETH=y
>>> +CONFIG_MACB=y
>>> +CONFIG_PINCTRL=y
>>> +CONFIG_PINCTRL_AT91PIO4=y
>>> +CONFIG_DM_SERIAL=y
>>> +CONFIG_ATMEL_USART=y
>>> +CONFIG_TEE=y
>>> +CONFIG_OPTEE=y
>>> +CONFIG_SYSRESET=y
>>> +CONFIG_SYSRESET_AT91=y
>>> +CONFIG_DM_RESET=y
>>> +CONFIG_RESET_AT91=y
>>> +CONFIG_TIMER=y
>>> +CONFIG_ATMEL_PIT_TIMER=y
>>> +CONFIG_USB=y
>>> +CONFIG_DM_USB=y
>>> +CONFIG_USB_EHCI_HCD=y
>>> +CONFIG_USB_GADGET=y
>>> +CONFIG_USB_GADGET_VENDOR_NUM=0x16c0
>>> +CONFIG_USB_GADGET_PRODUCT_NUM=0x03e9
>>> +CONFIG_USB_GADGET_ATMEL_USBA=y
>>> +CONFIG_USB_GADGET_DOWNLOAD=y
>>> +CONFIG_OF_LIBFDT_OVERLAY=y
>>> +CONFIG_SPL_OF_LIBFDT=y
>>> +# CONFIG_EFI_LOADER is not set
>>> diff --git a/include/configs/kstr-sama5d27.h b/include/configs/kstr-sama5d27.h
>>> new file mode 100644
>>> index 000000000000..772a073ba209
>>> --- /dev/null
>>> +++ b/include/configs/kstr-sama5d27.h
>>> @@ -0,0 +1,15 @@
>>> +/* SPDX-License-Identifier: GPL-2.0+ */
>>> +/*
>>> + * Copyright (C) 2021-2023 Conclusive Engineering Sp. z o. o.
>>> + */
>>> +
>>> +#ifndef __CONFIG_H
>>> +#define __CONFIG_H
>>> +
>>> +#include "at91-sama5_common.h"
>>> +
>>> +/* SDRAM */
>>> +#define CFG_SYS_SDRAM_BASE           0x20000000
>>> +#define CFG_SYS_SDRAM_SIZE           0x10000000
>>> +
>>> +#endif


^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2023-09-27 20:54 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-09-21 15:37 [PATCH 0/2] Conclusive KSTR-SAMA5D27 support Artur Rojek
2023-09-21 15:37 ` [PATCH 1/2] common: add prototype for populate_serial_number() Artur Rojek
2023-09-21 16:29   ` Simon Glass
2023-09-25 19:07     ` Artur Rojek
2023-09-21 15:37 ` [PATCH 2/2] board: Add support for Conclusive KSTR-SAMA5D27 Artur Rojek
2023-09-22  6:35   ` Eugen Hristev
2023-09-25 19:31     ` Artur Rojek
2023-09-27 20:54       ` Eugen Hristev

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.