mail archive of the barebox mailing list
 help / color / mirror / Atom feed
* [PATCH] ARM: AT91: Add skov-arm9cpu board support
@ 2021-04-14 12:21 Sascha Hauer
  2021-04-14 12:45 ` Ahmad Fatoum
  2021-06-19 21:04 ` Sam Ravnborg
  0 siblings, 2 replies; 4+ messages in thread
From: Sascha Hauer @ 2021-04-14 12:21 UTC (permalink / raw)
  To: Barebox List; +Cc: Sam Ravnborg

From: Sam Ravnborg <sam@ravnborg.org>

This adds support for an older SKOV board, the arm9cpu.

Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
Signed-off-by: Ulrich Ölmann <u.oelmann@pengutronix.de>
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
---
 arch/arm/boards/Makefile                |   1 +
 arch/arm/boards/skov-arm9cpu/Makefile   |   2 +
 arch/arm/boards/skov-arm9cpu/board.c    |  84 +++++
 arch/arm/boards/skov-arm9cpu/lowlevel.c | 127 +++++++
 arch/arm/configs/at91_multi_defconfig   |   1 +
 arch/arm/dts/Makefile                   |   1 +
 arch/arm/dts/at91-skov-arm9cpu.dts      | 453 ++++++++++++++++++++++++
 arch/arm/mach-at91/Kconfig              |  11 +
 images/Makefile.at91                    |   5 +
 9 files changed, 685 insertions(+)
 create mode 100644 arch/arm/boards/skov-arm9cpu/Makefile
 create mode 100644 arch/arm/boards/skov-arm9cpu/board.c
 create mode 100644 arch/arm/boards/skov-arm9cpu/lowlevel.c
 create mode 100644 arch/arm/dts/at91-skov-arm9cpu.dts

diff --git a/arch/arm/boards/Makefile b/arch/arm/boards/Makefile
index 9ccb75e27b..dc55d7852c 100644
--- a/arch/arm/boards/Makefile
+++ b/arch/arm/boards/Makefile
@@ -178,3 +178,4 @@ obj-$(CONFIG_MACH_WAGO_PFC_AM35XX)		+= wago-pfc-am35xx/
 obj-$(CONFIG_MACH_LS1046ARDB)			+= ls1046ardb/
 obj-$(CONFIG_MACH_TQMLS1046A)			+= tqmls1046a/
 obj-$(CONFIG_MACH_MNT_REFORM)			+= mnt-reform/
+obj-$(CONFIG_MACH_SKOV_ARM9CPU)			+= skov-arm9cpu/
diff --git a/arch/arm/boards/skov-arm9cpu/Makefile b/arch/arm/boards/skov-arm9cpu/Makefile
new file mode 100644
index 0000000000..01c7a259e9
--- /dev/null
+++ b/arch/arm/boards/skov-arm9cpu/Makefile
@@ -0,0 +1,2 @@
+obj-y += board.o
+lwl-y += lowlevel.o
diff --git a/arch/arm/boards/skov-arm9cpu/board.c b/arch/arm/boards/skov-arm9cpu/board.c
new file mode 100644
index 0000000000..8d5eadbb9a
--- /dev/null
+++ b/arch/arm/boards/skov-arm9cpu/board.c
@@ -0,0 +1,84 @@
+// SPDX-License-Identifier: GPL-2.0+
+// SPDX-FileCopyrightText: 2017 Sam Ravnborg <sam@ravnborg.org>
+
+#include <common.h>
+#include <globalvar.h>
+#include <magicvar.h>
+#include <envfs.h>
+#include <init.h>
+#include <gpio.h>
+
+#include <linux/sizes.h>
+
+#include <mach/at91sam9263_matrix.h>
+#include <mach/at91sam9_sdramc.h>
+#include <mach/at91sam9_smc.h>
+#include <mach/hardware.h>
+#include <mach/iomux.h>
+
+static struct sam9_smc_config ek_nand_smc_config = {
+	.ncs_read_setup		= 0,
+	.nrd_setup		= 1,
+	.ncs_write_setup	= 0,
+	.nwe_setup		= 1,
+
+	.ncs_read_pulse		= 3,
+	.nrd_pulse		= 3,
+	.ncs_write_pulse	= 3,
+	.nwe_pulse		= 3,
+
+	.read_cycle		= 5,
+	.write_cycle		= 5,
+
+	.mode			= AT91_SMC_READMODE | AT91_SMC_WRITEMODE |
+				  AT91_SMC_EXNWMODE_DISABLE,
+	.tdf_cycles		= 2,
+};
+
+BAREBOX_MAGICVAR(board.mem, "The detected memory size in MiB");
+
+static int mem;
+
+/*
+ * Initialize of SMC must come after we
+ * probe the at91sam9_smc_driver.
+ * But is required before we start the other drives.
+ * Use device_initcall() to maintain this order.
+ */
+static int skov_arm9_probe(struct device_d *dev)
+{
+	unsigned long csa;
+
+	add_generic_device("at91sam9-smc", 0, NULL, AT91SAM9263_BASE_SMC0, 0x200,
+			   IORESOURCE_MEM, NULL);
+	add_generic_device("at91sam9-smc", 1, NULL, AT91SAM9263_BASE_SMC1, 0x200,
+			   IORESOURCE_MEM, NULL);
+
+	csa = readl(AT91SAM9263_BASE_MATRIX + AT91SAM9263_MATRIX_EBI0CSA);
+	csa |= AT91SAM9263_MATRIX_EBI0_CS3A_SMC_SMARTMEDIA;
+	writel(csa, AT91SAM9263_BASE_MATRIX + AT91SAM9263_MATRIX_EBI0CSA);
+
+	/* configure chip-select 3 (NAND) */
+	sam9_smc_configure(0, 3, &ek_nand_smc_config);
+
+	mem = at91_get_sdram_size(IOMEM(AT91SAM9263_BASE_SDRAMC0));
+	mem = mem / SZ_1M;
+	globalvar_add_simple_int("board.mem", &mem, "%u");
+
+	return 0;
+}
+
+static __maybe_unused struct of_device_id skov_arm9_ids[] = {
+	{
+		.compatible = "skov,arm9-cpu",
+	}, {
+		/* sentinel */
+	}
+};
+
+static struct driver_d skov_arm9_driver = {
+	.name = "skov-arm9",
+	.probe = skov_arm9_probe,
+	.of_compatible = DRV_OF_COMPAT(skov_arm9_ids),
+};
+device_platform_driver(skov_arm9_driver);
diff --git a/arch/arm/boards/skov-arm9cpu/lowlevel.c b/arch/arm/boards/skov-arm9cpu/lowlevel.c
new file mode 100644
index 0000000000..34f4501927
--- /dev/null
+++ b/arch/arm/boards/skov-arm9cpu/lowlevel.c
@@ -0,0 +1,127 @@
+// SPDX-License-Identifier: GPL-2.0
+// PDX-FileCopyrightText: 2018 Sam Ravnborg <sam@ravnborg.org>
+
+#include <linux/sizes.h>
+
+#include <asm/barebox-arm.h>
+
+#include <mach/at91sam926x_board_init.h>
+#include <mach/at91sam9263_matrix.h>
+
+#define MASTER_PLL_MUL		171
+#define MASTER_PLL_DIV		14
+
+static void __bare_init skovarm9cpu_board_config(struct at91sam926x_board_cfg *cfg)
+{
+	/* Disable Watchdog */
+	cfg->wdt_mr =
+		AT91_WDT_WDIDLEHLT | AT91_WDT_WDDBGHLT |
+		AT91_WDT_WDV |
+		AT91_WDT_WDDIS |
+		AT91_WDT_WDD;
+
+	/* define PDC[31:16] as DATA[31:16] */
+	cfg->ebi_pio_pdr = 0xFFFF0000;
+	/* no pull-up for D[31:16] */
+	cfg->ebi_pio_ppudr = 0xFFFF0000;
+	/* EBI0_CSA, CS1 SDRAM, CS3 NAND Flash, 3.3V memories */
+	cfg->ebi_csa =
+		AT91SAM9263_MATRIX_EBI0_DBPUC | AT91SAM9263_MATRIX_EBI0_VDDIOMSEL_3_3V |
+		AT91SAM9263_MATRIX_EBI0_CS1A_SDRAMC;
+
+	cfg->smc_cs = 0;
+	cfg->smc_mode =
+		AT91_SMC_READMODE | AT91_SMC_WRITEMODE |
+		AT91_SMC_DBW_16 |
+		AT91_SMC_TDFMODE |
+		AT91_SMC_TDF_(6);
+	cfg->smc_cycle =
+		AT91_SMC_NWECYCLE_(22) | AT91_SMC_NRDCYCLE_(22);
+	cfg->smc_pulse =
+		AT91_SMC_NWEPULSE_(11) | AT91_SMC_NCS_WRPULSE_(11) |
+		AT91_SMC_NRDPULSE_(11) | AT91_SMC_NCS_RDPULSE_(11);
+	cfg->smc_setup =
+		AT91_SMC_NWESETUP_(10) | AT91_SMC_NCS_WRSETUP_(10) |
+		AT91_SMC_NRDSETUP_(10) | AT91_SMC_NCS_RDSETUP_(10);
+
+	cfg->pmc_mor =
+		AT91_PMC_MOSCEN |
+		(255 << 8);		/* Main Oscillator Start-up Time */
+	cfg->pmc_pllar =
+		AT91_PMC_PLLA_WR_ERRATA | /* Bit 29 must be 1 when prog */
+		AT91_PMC_OUT |
+		AT91_PMC_PLLCOUNT |	/* PLL Counter */
+		(2 << 28) |		/* PLL Clock Frequency Range */
+		((MASTER_PLL_MUL - 1) << 16) | (MASTER_PLL_DIV);
+	/* PCK/2 = MCK Master Clock from PLLA */
+	cfg->pmc_mckr1 =
+		AT91_PMC_CSS_SLOW |
+		AT91_PMC_PRES_1 |
+		AT91SAM9_PMC_MDIV_2 |
+		AT91_PMC_PDIV_1;
+	/* PCK/2 = MCK Master Clock from PLLA */
+	cfg->pmc_mckr2 =
+		AT91_PMC_CSS_PLLA |
+		AT91_PMC_PRES_1 |
+		AT91SAM9_PMC_MDIV_2 |
+		AT91_PMC_PDIV_1;
+
+	/* SDRAM */
+	/* SDRAMC_TR - Refresh Timer register */
+	cfg->sdrc_tr1 = 0x13C;
+	/* SDRAMC_CR - Configuration register*/
+	cfg->sdrc_cr =
+		AT91_SDRAMC_NC_10 |	/* Assume 128MiB */
+		AT91_SDRAMC_NR_13 |
+		AT91_SDRAMC_NB_4 |
+		AT91_SDRAMC_CAS_3 |
+		AT91_SDRAMC_DBW_32 |
+		(1 <<  8) |		/* Write Recovery Delay */
+		(7 << 12) |		/* Row Cycle Delay */
+		(2 << 16) |		/* Row Precharge Delay */
+		(2 << 20) |		/* Row to Column Delay */
+		(5 << 24) |		/* Active to Precharge Delay */
+		(1 << 28);		/* Exit Self Refresh to Active Delay */
+
+	/* Memory Device Register -> SDRAM */
+	cfg->sdrc_mdr = AT91_SDRAMC_MD_SDRAM;
+	/* SDRAM_TR */
+	cfg->sdrc_tr2 = 1200;
+
+	/* user reset enable */
+	cfg->rstc_rmr =
+		AT91_RSTC_KEY |
+		AT91_RSTC_PROCRST |
+		AT91_RSTC_RSTTYP_WAKEUP |
+		AT91_RSTC_RSTTYP_WATCHDOG;
+}
+
+static void __bare_init skov_arm9cpu_init(void *fdt)
+{
+	struct at91sam926x_board_cfg cfg;
+
+	cfg.pio = IOMEM(AT91SAM9263_BASE_PIOD);
+	cfg.sdramc = IOMEM(AT91SAM9263_BASE_SDRAMC0);
+	cfg.ebi_pio_is_peripha = true;
+	cfg.matrix_csa = IOMEM(AT91SAM9263_BASE_MATRIX + AT91SAM9263_MATRIX_EBI0CSA);
+
+	skovarm9cpu_board_config(&cfg);
+	at91sam9263_board_init(&cfg);
+
+	barebox_arm_entry(AT91_CHIPSELECT_1, at91_get_sdram_size(cfg.sdramc),
+			  fdt);
+}
+
+extern char __dtb_at91_skov_arm9cpu_start[];
+
+ENTRY_FUNCTION(start_skov_arm9cpu, r0, r1, r2)
+{
+	void *fdt;
+
+	arm_cpu_lowlevel_init();
+
+	arm_setup_stack(AT91SAM9263_SRAM0_BASE + AT91SAM9263_SRAM0_SIZE - 16);
+	fdt = __dtb_at91_skov_arm9cpu_start + get_runtime_offset();
+
+	skov_arm9cpu_init(fdt);
+}
diff --git a/arch/arm/configs/at91_multi_defconfig b/arch/arm/configs/at91_multi_defconfig
index e6a554e87f..f0a4812f0c 100644
--- a/arch/arm/configs/at91_multi_defconfig
+++ b/arch/arm/configs/at91_multi_defconfig
@@ -1,4 +1,5 @@
 CONFIG_AT91_MULTI_BOARDS=y
+CONFIG_MACH_SKOV_ARM9CPU=y
 CONFIG_MACH_AT91SAM9263EK=y
 CONFIG_MACH_AT91SAM9X5EK=y
 CONFIG_MACH_MICROCHIP_KSZ9477_EVB=y
diff --git a/arch/arm/dts/Makefile b/arch/arm/dts/Makefile
index d5f61768a5..9ce385d332 100644
--- a/arch/arm/dts/Makefile
+++ b/arch/arm/dts/Makefile
@@ -110,6 +110,7 @@ lwl-$(CONFIG_MACH_SOLIDRUN_CUBOX) += dove-cubox-bb.dtb.o
 lwl-$(CONFIG_MACH_SOLIDRUN_MICROSOM) += imx6dl-hummingboard.dtb.o imx6q-hummingboard.dtb.o \
 				imx6dl-hummingboard2.dtb.o imx6q-hummingboard2.dtb.o \
 				imx6q-h100.dtb.o
+lwl-$(CONFIG_MACH_SKOV_ARM9CPU) += at91-skov-arm9cpu.dtb.o
 lwl-$(CONFIG_MACH_SEEED_ODYSSEY) += stm32mp157c-odyssey.dtb.o
 lwl-$(CONFIG_MACH_STM32MP15XX_DKX) += stm32mp157c-dk2.dtb.o stm32mp157a-dk1.dtb.o
 lwl-$(CONFIG_MACH_LXA_MC1) += stm32mp157c-lxa-mc1.dtb.o
diff --git a/arch/arm/dts/at91-skov-arm9cpu.dts b/arch/arm/dts/at91-skov-arm9cpu.dts
new file mode 100644
index 0000000000..3f1df618d7
--- /dev/null
+++ b/arch/arm/dts/at91-skov-arm9cpu.dts
@@ -0,0 +1,453 @@
+// SPDX-License-Identifier: GPL-2.0
+// SPDX-FileCopyrightText: 2018 Sam Ravnborg <sam@ravnborg.org>
+
+/*
+ * Device Tree file for SKOV ARM9 CPU board with 128 MB RAM and
+ * Logic Technology Display
+ */
+
+/dts-v1/;
+
+#include "arm/at91sam9263.dtsi"
+
+/ {
+	model = "SKOV ARM9 CPU";
+	compatible = "skov,arm9-cpu", "atmel,at91sam9263", "atmel,at91sam9";
+
+	chosen {
+		stdout-path = "serial0:115200n8";
+
+		environment {
+			compatible = "barebox,environment";
+			device-path = &environment_nor;
+		};
+	};
+
+	ahb {
+		apb {
+			pinctrl: pinctrl@fffff200 {
+			};
+
+			watchdog@fffffd40 {
+				status = "okay";
+			};
+		};
+
+		flash: nor_flash@10000000 {
+			compatible = "cfi-flash";
+			reg = <0x10000000 0x4000000>;
+			linux,mtd-name = "physmap-flash.0";
+			bank-width = <2>;
+			#address-cells = <1>;
+			#size-cells = <1>;
+
+			partitions {
+				compatible = "fixed-partitions";
+				#address-cells = <1>;
+				#size-cells = <1>;
+
+				barebox@0 {
+					label = "bootloader";
+					reg = <0x00000 0x80000>;
+				};
+
+				environment_nor: env@80000 {
+					label = "environment";
+					reg = <0x80000 0x20000>;
+				};
+
+				linux@a0000 {
+					label = "linux";
+					reg = <0xa0000 0x2a0000>;
+				};
+
+				rootfs@340000  {
+					label = "rootfs";
+					reg = <0x340000 0x3cc0000>;
+				};
+			};
+		};
+	};
+
+	leds {
+		compatible = "gpio-leds";
+
+		D0 {
+			label = "D0";
+			gpios = <&pioD 0 GPIO_ACTIVE_LOW>;
+			linux,default-trigger = "heartbeat";
+		};
+
+		D1 {
+			label = "D1";
+			gpios = <&pioD 1 GPIO_ACTIVE_LOW>;
+			linux,default-trigger = "mmc0";
+		};
+
+		D2 {
+			label = "D2";
+			gpios = <&pioD 7 GPIO_ACTIVE_LOW>;
+		};
+
+		led_0 {
+			label = "led_0";
+			gpios = <&pioB 14 GPIO_ACTIVE_LOW>;
+		};
+
+		led_1 {
+			label = "led_1";
+			gpios = <&pioB 23 GPIO_ACTIVE_LOW>;
+		};
+
+		led_2 {
+			label = "led_2";
+			gpios = <&pioB 18 GPIO_ACTIVE_LOW>;
+		};
+
+		led_3 {
+			label = "led_3";
+			gpios = <&pioB 22 GPIO_ACTIVE_LOW>;
+		};
+
+		led_4 {
+			label = "led_4";
+			gpios = <&pioA 22 GPIO_ACTIVE_LOW>;
+		};
+
+		led_5 {
+			label = "led_5";
+			gpios = <&pioA 23 GPIO_ACTIVE_LOW>;
+		};
+
+		led_6 {
+			label = "led_6";
+			gpios = <&pioA 24 GPIO_ACTIVE_LOW>;
+		};
+
+		led_7 {
+			label = "led_7";
+			gpios = <&pioA 20 GPIO_ACTIVE_LOW>;
+		};
+	};
+
+	i2c-gpio-0 {
+		status = "okay";
+
+		24c512@50 {
+			compatible = "24c512";
+			reg = <0x50>;
+			pagesize = <128>;
+		};
+	};
+
+	rotary-encoder {
+		compatible = "rotary-encoder";
+		gpios = <&pioB 19 GPIO_ACTIVE_LOW>, <&pioB 20 GPIO_ACTIVE_LOW>;
+		linux,axis = <0>; /* REL_X */
+		rotary-encoder,steps-per-period = <4>;
+		rotary-encoder,relative-axis;
+	};
+
+	gpio-keys {
+		compatible = "gpio-keys";
+		#address-cells = <1>;
+		#size-cells = <0>;
+
+		rotary_button {
+			label = "rotary_button";
+			gpios = <&pioB 15 GPIO_ACTIVE_LOW>;
+			debounce-interval = <10>;
+			linux,code = <28>; /* enter */
+		};
+	};
+
+	matrix-keypad-6x5 {
+		compatible = "gpio-matrix-keypad";
+		debounce-delay-ms = <10>;
+		col-scan-delay-us = <10>;
+
+		row-gpios = <&pioB 25 GPIO_ACTIVE_HIGH    /* 1 */
+			     &pioB 21 GPIO_ACTIVE_HIGH    /* 2 */
+			     &pioB 16 GPIO_ACTIVE_HIGH    /* 3 */
+			     &pioB 24 GPIO_ACTIVE_HIGH    /* 4 */
+			     &pioB 12 GPIO_ACTIVE_HIGH>;  /* 5 */
+
+		col-gpios = <&pioB 13 GPIO_ACTIVE_HIGH    /* 1 */
+			     &pioB 17 GPIO_ACTIVE_HIGH    /* 2 */
+			     &pioA 25 GPIO_ACTIVE_HIGH    /* 3 */
+			     &pioA 21 GPIO_ACTIVE_HIGH    /* 4 */
+			     &pioA 19 GPIO_ACTIVE_HIGH    /* 5 */
+			     &pioA 18 GPIO_ACTIVE_HIGH>;  /* 6 */
+
+
+		linux,keymap = <
+			0x00000011 /* col0 row0 KEY_W */
+			0x01000021 /* col0 row1 KEY_F */
+			0x02000031 /* col0 row2 KEY_N */
+			0x03000041 /* col0 row3 KEY_F7 */
+			0x04000051 /* col0 row4 KEY_KP3 */
+			0x00010012 /* col1 row0 KEY_E */
+			0x01010022 /* col1 row1 KEY_G */
+			0x02010032 /* col1 row2 KEY_M */
+			0x03010042 /* col1 row3 KEY_F8 */
+			0x04010052 /* col1 row4 KEY_KP0 */
+			0x00020013 /* col2 row0 KEY_R */
+			0x01020023 /* col2 row1 KEY_H */
+			0x02020033 /* col2 row2 KEY_COMMA */
+			0x03020043 /* col2 row3 KEY_F9 */
+			0x04020053 /* col2 row4 KEY_F9 */
+			0x00030014 /* col3 row0 KEY_T */
+			0x01030024 /* col3 row1 KEY_J */
+			0x02030034 /* col3 row2 KEY_DOT */
+			0x03030044 /* col3 row3 KEY_NUMLOCK */
+			0x04030054 /* col3 row4 */
+			0x00040015 /* col4 row0 KEY_Y */
+			0x01040025 /* col4 row1 KEY_K */
+			0x02040035 /* col4 row2 KEY_SLASH */
+			0x03040045 /* col4 row3 KEY_NUMLOCK */
+			0x04040055 /* col4 row4 KEY_ZENKAKUHANKAKU */
+			0x00050016 /* col5 row0 KEY_U */
+			0x01050026 /* col5 row1 KEY_L */
+			0x02050036 /* col5 row2 KEY_RIGH_SHIFT */
+			0x03050046 /* col5 row3 KEY_SCROLLLOCK */
+			0x04050056 /* col5 row4 KEY_102ND */
+		>;
+	};
+};
+
+&dbgu {
+	status = "okay";
+};
+
+&fb0 {
+	status = "okay";
+	display = <&display0>;
+	display0: display0 {
+		bits-per-pixel = <16>;
+		atmel,lcdcon-backlight;
+		atmel,dmacon = <0x1>;
+		atmel,lcdcon2 = <0x80008002>;
+		atmel,guard-time = <1>;
+		atmel,lcd-wiring-mode = "BRG";
+		pinctrl-names = "default";
+		pinctrl-0 = <
+			&pinctrl_board_fb
+			&pinctrl_disp_type
+			&pinctrl_logic_type
+		>;
+
+		atmel,power-control-gpio = <&pioA 30 GPIO_ACTIVE_HIGH>;
+
+		display-timings {
+			native-mode = <&l2rt>;
+
+			l2rt: l2rt {
+				/* LTTD800480070-L2RT @ 55 */
+				clock-frequency = <30000000>;
+				hactive = <800>;
+				vactive = <480>;
+				/* Atmel calculation
+				 * Horizontal =
+				 * Hsync + left margin + picture + right_margin + 1
+				 * (3 + 85 + 800 + 0 + 1 = 889)
+				 */
+				hback-porch = <85>;
+				hfront-porch = <1>;
+				hsync-len = <3>;
+				/* Vertical =
+				 * upper margin + picture + lower_margin
+				 * (32 + 480 + 1 = 513) (25MHz / ( 889 * 513 ) = 54,8Hz
+				 */
+				vback-porch = <32>;
+				vfront-porch = <1>;
+				vsync-len = <3>;
+				pixelclk-active = <1>;
+				hsync-active = <0>;
+				vsync-active = <0>;
+				de-active = <1>;
+			};
+
+			l6whrt: l6whrt {
+				clock-frequency = <33000000>;
+				hactive = <800>;
+				vactive = <480>;
+				hback-porch = <43>;
+				hfront-porch = <154>;
+				vback-porch = <20>;
+				vfront-porch = <47>;
+				hsync-len = <3>;
+				vsync-len = <3>;
+				pixelclk-active = <1>;
+				hsync-active = <0>;
+				vsync-active = <0>;
+				de-active = <1>;
+			};
+
+			seiko: seiko {
+				/* 70WVW2AZ0 @ 55 */
+				clock-frequency = <33000000>;
+				hactive = <800>;
+				vactive = <480>;
+				hback-porch = <0>;
+				hfront-porch = <256>;
+				vback-porch = <45>;
+				vfront-porch = <0>;
+				hsync-len = <0>;
+				vsync-len = <0>;
+				pixelclk-active = <1>;
+				hsync-active = <0>;
+				vsync-active = <0>;
+				de-active = <1>;
+			};
+		};
+	};
+};
+
+&macb0 {
+	status = "okay";
+	phy-mode = "rmii";
+	#address-cells = <1>;
+	#size-cells = <0>;
+
+	ethphy0: ethernet-phy@1 {
+		reg = <3>;
+		reset-gpios = <&pioE 17 GPIO_ACTIVE_LOW>;
+		reset-assert-us = <1000>;
+		reset-deassert-us = <100>;
+	};
+};
+
+&main_xtal {
+	clock-frequency = <16000000>;
+};
+
+&mmc1 {
+	status = "okay";
+	pinctrl-0 = <
+		&pinctrl_board_mmc1
+		&pinctrl_mmc1_clk
+		&pinctrl_mmc1_slot0_cmd_dat0
+		&pinctrl_mmc1_slot0_dat1_3>;
+	cd-gpios = <&pioE 18 GPIO_ACTIVE_HIGH>;
+	slot@0 {
+		reg = <0>;
+		bus-width = <4>;
+		cd-gpios = <&pioE 18 GPIO_ACTIVE_HIGH>;
+		wp-gpios = <&pioE 19 GPIO_ACTIVE_HIGH>;
+	};
+};
+
+&pinctrl {
+	mmc1 {
+		pinctrl_board_mmc1: mmc1-board {
+			atmel,pins =
+				<AT91_PIOE 18 AT91_PERIPH_GPIO
+				 AT91_PINCTRL_PULL_UP_DEGLITCH 	/* PE18 gpio CD pin pull up and deglitch */
+				 AT91_PIOE 19 AT91_PERIPH_GPIO AT91_PINCTRL_PULL_UP>;	/* PE19 gpio WP pin pull up */
+		};
+	};
+
+	display_type_inputs {
+		pinctrl_disp_type: disp_type-0 {
+			/* Pull-up (HIGH) if Seiko display, otherwise Logic display */
+			atmel,pins =
+				<AT91_PIOD 2 AT91_PERIPH_GPIO AT91_PINCTRL_PULL_UP>;
+		};
+		pinctrl_logic_type: logic_type-0 {
+			/* Pull-down (LOW) if l6whrt display, otherwise l2rt display */
+			atmel,pins =
+				<AT91_PIOC 28 AT91_PERIPH_GPIO AT91_PINCTRL_PULL_UP>;
+		};
+	};
+
+	fb {
+		pinctrl_board_fb: fb-0 {
+			atmel,pins =
+			       <AT91_PIOC 0  AT91_PERIPH_A AT91_PINCTRL_NONE    /* LCDVSYNC */
+				AT91_PIOC 1  AT91_PERIPH_A AT91_PINCTRL_NONE    /* LCDHSYNC */
+				AT91_PIOC 2  AT91_PERIPH_A AT91_PINCTRL_NONE    /* LCDDOTCK */
+				AT91_PIOC 3  AT91_PERIPH_A AT91_PINCTRL_NONE    /* LCDDEN */
+				AT91_PIOB 9  AT91_PERIPH_B AT91_PINCTRL_NONE    /* LCDCC */
+				AT91_PIOC 6  AT91_PERIPH_A AT91_PINCTRL_NONE    /* LCDD2 */
+				AT91_PIOC 7  AT91_PERIPH_A AT91_PINCTRL_NONE    /* LCDD3 */
+				AT91_PIOC 8  AT91_PERIPH_A AT91_PINCTRL_NONE    /* LCDD4 */
+				AT91_PIOC 9  AT91_PERIPH_A AT91_PINCTRL_NONE    /* LCDD5 */
+				AT91_PIOC 10 AT91_PERIPH_A AT91_PINCTRL_NONE    /* LCDD6 */
+				AT91_PIOC 11 AT91_PERIPH_A AT91_PINCTRL_NONE    /* LCDD7 */
+				AT91_PIOC 14 AT91_PERIPH_A AT91_PINCTRL_NONE    /* LCDD10 */
+				AT91_PIOC 15 AT91_PERIPH_A AT91_PINCTRL_NONE    /* LCDD11 */
+				AT91_PIOC 16 AT91_PERIPH_A AT91_PINCTRL_NONE    /* LCDD12 */
+				AT91_PIOC 12 AT91_PERIPH_B AT91_PINCTRL_NONE    /* LCDD13 */
+				AT91_PIOC 18 AT91_PERIPH_A AT91_PINCTRL_NONE    /* LCDD14 */
+				AT91_PIOC 19 AT91_PERIPH_A AT91_PINCTRL_NONE    /* LCDD15 */
+				AT91_PIOC 22 AT91_PERIPH_A AT91_PINCTRL_NONE    /* LCDD18 */
+				AT91_PIOC 23 AT91_PERIPH_A AT91_PINCTRL_NONE    /* LCDD19 */
+				AT91_PIOC 24 AT91_PERIPH_A AT91_PINCTRL_NONE    /* LCDD20 */
+				AT91_PIOC 17 AT91_PERIPH_B AT91_PINCTRL_NONE    /* LCDD21 */
+				AT91_PIOC 26 AT91_PERIPH_A AT91_PINCTRL_NONE    /* LCDD22 */
+				AT91_PIOC 27 AT91_PERIPH_A AT91_PINCTRL_NONE>;  /* LCDD23 */
+		};
+	};
+
+	pwm0 {
+		pinctrl_pwm0: pwm0_pwm1 {
+			atmel,pins = <AT91_PIOB 8 AT91_PERIPH_B AT91_PINCTRL_NONE>;
+		};
+	};
+};
+
+&pwm0 {
+	status = "okay";
+	pinctrl-names = "default";
+	pinctrl-0 = <&pinctrl_pwm0>;
+};
+
+&slow_xtal {
+	clock-frequency = <32768>;
+};
+
+&spi0 {
+	status = "okay";
+	cs-gpios = <&pioA 3 0>, <&pioB 11 0>;
+
+	mcp3002@0 {
+		compatible = "microchip,mcp3002";
+		reg = <0>;
+		spi-max-frequency = <750000>;
+	};
+
+	tsc2046@1 {
+		compatible = "ti,tsc2046";
+		reg = <1>;
+		interrupts-extended = <&pioA 15 IRQ_TYPE_EDGE_BOTH>;
+		spi-max-frequency = <500000>;
+		pendown-gpio = <&pioA 15 GPIO_ACTIVE_LOW>;
+
+		ti,x-min = /bits/ 16 <800>;
+		ti,x-max = /bits/ 16 <3830>;
+		ti,y-min = /bits/ 16 <500>;
+		ti,y-max = /bits/ 16 <3830>;
+		ti,vref-delay-usecs = /bits/ 16 <300>;
+		ti,x-plate-ohms = /bits/ 16 <642>;
+		ti,y-plate-ohms = /bits/ 16 <295>;
+		ti,pressure-max = /bits/ 16 <1500>;
+		ti,debounce-rep = /bits/ 16 <8>;
+		ti,debounce-tol = /bits/ 16 <(~0)>;
+		ti,debounce-max = /bits/ 16 <100>;
+
+		wakeup-source;
+	};
+};
+
+&usart0 {
+	status = "okay";
+	pinctrl-0 = <
+		&pinctrl_usart0
+		&pinctrl_usart0_rts
+		&pinctrl_usart0_cts>;
+};
+
+&usb0 {
+	status = "okay";
+	num-ports = <2>;
+};
diff --git a/arch/arm/mach-at91/Kconfig b/arch/arm/mach-at91/Kconfig
index 52eefc7361..810c00d495 100644
--- a/arch/arm/mach-at91/Kconfig
+++ b/arch/arm/mach-at91/Kconfig
@@ -577,6 +577,17 @@ config AT91_MULTI_BOARDS
 
 if AT91_MULTI_BOARDS
 
+config MACH_SKOV_ARM9CPU
+	bool "SKOV ARM9 CPU"
+	select SOC_AT91SAM9263
+	select OFDEVICE
+	select COMMON_CLK_OF_PROVIDER
+	select HAVE_AT91_USB_CLK
+	select HAVE_AT91_BOOTSTRAP
+	select AT91SAM926X_BOARD_INIT
+	help
+	  Say y here if you are using SKOV's ARM9 CPU board
+
 config MACH_AT91SAM9263EK
 	bool "Atmel AT91SAM9263-EK"
 	select SOC_AT91SAM9263
diff --git a/images/Makefile.at91 b/images/Makefile.at91
index 00fa4cab27..7ab92edf14 100644
--- a/images/Makefile.at91
+++ b/images/Makefile.at91
@@ -31,3 +31,8 @@ pblb-$(CONFIG_MACH_SAMA5D27_GIANTBOARD) += start_sama5d27_giantboard_xload_mmc
 FILE_barebox-groboards-sama5d27-giantboard-xload-mmc.img = start_sama5d27_giantboard_xload_mmc.pblb
 MAX_PBL_IMAGE_SIZE_start_sama5d27_giantboard_xload_mmc = 0xffff
 image-$(CONFIG_MACH_SAMA5D27_GIANTBOARD) += barebox-groboards-sama5d27-giantboard-xload-mmc.img
+
+pblb-$(CONFIG_MACH_SKOV_ARM9CPU) += start_skov_arm9cpu
+FILE_barebox-skov-arm9cpu.img = start_skov_arm9cpu.pblb
+MAX_PBL_MEMORY_SIZE_start_skov_arm9cpu = 0x12000
+image-$(CONFIG_MACH_SKOV_ARM9CPU) += barebox-skov-arm9cpu.img
-- 
2.29.2


_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

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

* Re: [PATCH] ARM: AT91: Add skov-arm9cpu board support
  2021-04-14 12:21 [PATCH] ARM: AT91: Add skov-arm9cpu board support Sascha Hauer
@ 2021-04-14 12:45 ` Ahmad Fatoum
  2021-04-15 11:36   ` Sascha Hauer
  2021-06-19 21:04 ` Sam Ravnborg
  1 sibling, 1 reply; 4+ messages in thread
From: Ahmad Fatoum @ 2021-04-14 12:45 UTC (permalink / raw)
  To: Sascha Hauer, Barebox List; +Cc: Sam Ravnborg

Hi,

On 14.04.21 14:21, Sascha Hauer wrote:
> From: Sam Ravnborg <sam@ravnborg.org>
> 
> This adds support for an older SKOV board, the arm9cpu.
> 
> Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
> Signed-off-by: Ulrich Ölmann <u.oelmann@pengutronix.de>
> Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
> ---
>  arch/arm/boards/Makefile                |   1 +
>  arch/arm/boards/skov-arm9cpu/Makefile   |   2 +
>  arch/arm/boards/skov-arm9cpu/board.c    |  84 +++++
>  arch/arm/boards/skov-arm9cpu/lowlevel.c | 127 +++++++
>  arch/arm/configs/at91_multi_defconfig   |   1 +
>  arch/arm/dts/Makefile                   |   1 +
>  arch/arm/dts/at91-skov-arm9cpu.dts      | 453 ++++++++++++++++++++++++
>  arch/arm/mach-at91/Kconfig              |  11 +
>  images/Makefile.at91                    |   5 +
>  9 files changed, 685 insertions(+)
>  create mode 100644 arch/arm/boards/skov-arm9cpu/Makefile
>  create mode 100644 arch/arm/boards/skov-arm9cpu/board.c
>  create mode 100644 arch/arm/boards/skov-arm9cpu/lowlevel.c
>  create mode 100644 arch/arm/dts/at91-skov-arm9cpu.dts
> 
> diff --git a/arch/arm/boards/Makefile b/arch/arm/boards/Makefile
> index 9ccb75e27b..dc55d7852c 100644
> --- a/arch/arm/boards/Makefile
> +++ b/arch/arm/boards/Makefile
> @@ -178,3 +178,4 @@ obj-$(CONFIG_MACH_WAGO_PFC_AM35XX)		+= wago-pfc-am35xx/
>  obj-$(CONFIG_MACH_LS1046ARDB)			+= ls1046ardb/
>  obj-$(CONFIG_MACH_TQMLS1046A)			+= tqmls1046a/
>  obj-$(CONFIG_MACH_MNT_REFORM)			+= mnt-reform/
> +obj-$(CONFIG_MACH_SKOV_ARM9CPU)			+= skov-arm9cpu/
> diff --git a/arch/arm/boards/skov-arm9cpu/Makefile b/arch/arm/boards/skov-arm9cpu/Makefile
> new file mode 100644
> index 0000000000..01c7a259e9
> --- /dev/null
> +++ b/arch/arm/boards/skov-arm9cpu/Makefile
> @@ -0,0 +1,2 @@
> +obj-y += board.o
> +lwl-y += lowlevel.o
> diff --git a/arch/arm/boards/skov-arm9cpu/board.c b/arch/arm/boards/skov-arm9cpu/board.c
> new file mode 100644
> index 0000000000..8d5eadbb9a
> --- /dev/null
> +++ b/arch/arm/boards/skov-arm9cpu/board.c
> @@ -0,0 +1,84 @@
> +// SPDX-License-Identifier: GPL-2.0+
> +// SPDX-FileCopyrightText: 2017 Sam Ravnborg <sam@ravnborg.org>
> +
> +#include <common.h>
> +#include <globalvar.h>
> +#include <magicvar.h>
> +#include <envfs.h>
> +#include <init.h>
> +#include <gpio.h>
> +
> +#include <linux/sizes.h>
> +
> +#include <mach/at91sam9263_matrix.h>
> +#include <mach/at91sam9_sdramc.h>
> +#include <mach/at91sam9_smc.h>
> +#include <mach/hardware.h>
> +#include <mach/iomux.h>
> +
> +static struct sam9_smc_config ek_nand_smc_config = {
> +	.ncs_read_setup		= 0,
> +	.nrd_setup		= 1,
> +	.ncs_write_setup	= 0,
> +	.nwe_setup		= 1,
> +
> +	.ncs_read_pulse		= 3,
> +	.nrd_pulse		= 3,
> +	.ncs_write_pulse	= 3,
> +	.nwe_pulse		= 3,
> +
> +	.read_cycle		= 5,
> +	.write_cycle		= 5,
> +
> +	.mode			= AT91_SMC_READMODE | AT91_SMC_WRITEMODE |
> +				  AT91_SMC_EXNWMODE_DISABLE,
> +	.tdf_cycles		= 2,
> +};
> +
> +BAREBOX_MAGICVAR(board.mem, "The detected memory size in MiB");
> +
> +static int mem;
> +
> +/*
> + * Initialize of SMC must come after we
> + * probe the at91sam9_smc_driver.
> + * But is required before we start the other drives.
> + * Use device_initcall() to maintain this order.
> + */
> +static int skov_arm9_probe(struct device_d *dev)
> +{
> +	unsigned long csa;
> +
> +	add_generic_device("at91sam9-smc", 0, NULL, AT91SAM9263_BASE_SMC0, 0x200,
> +			   IORESOURCE_MEM, NULL);
> +	add_generic_device("at91sam9-smc", 1, NULL, AT91SAM9263_BASE_SMC1, 0x200,
> +			   IORESOURCE_MEM, NULL);
> +
> +	csa = readl(AT91SAM9263_BASE_MATRIX + AT91SAM9263_MATRIX_EBI0CSA);
> +	csa |= AT91SAM9263_MATRIX_EBI0_CS3A_SMC_SMARTMEDIA;
> +	writel(csa, AT91SAM9263_BASE_MATRIX + AT91SAM9263_MATRIX_EBI0CSA);
> +
> +	/* configure chip-select 3 (NAND) */
> +	sam9_smc_configure(0, 3, &ek_nand_smc_config);
> +
> +	mem = at91_get_sdram_size(IOMEM(AT91SAM9263_BASE_SDRAMC0));
> +	mem = mem / SZ_1M;
> +	globalvar_add_simple_int("board.mem", &mem, "%u");
> +
> +	return 0;
> +}
> +
> +static __maybe_unused struct of_device_id skov_arm9_ids[] = {
> +	{
> +		.compatible = "skov,arm9-cpu",
> +	}, {
> +		/* sentinel */
> +	}
> +};
> +
> +static struct driver_d skov_arm9_driver = {
> +	.name = "skov-arm9",
> +	.probe = skov_arm9_probe,
> +	.of_compatible = DRV_OF_COMPAT(skov_arm9_ids),
> +};
> +device_platform_driver(skov_arm9_driver);
> diff --git a/arch/arm/boards/skov-arm9cpu/lowlevel.c b/arch/arm/boards/skov-arm9cpu/lowlevel.c
> new file mode 100644
> index 0000000000..34f4501927
> --- /dev/null
> +++ b/arch/arm/boards/skov-arm9cpu/lowlevel.c
> @@ -0,0 +1,127 @@
> +// SPDX-License-Identifier: GPL-2.0
> +// PDX-FileCopyrightText: 2018 Sam Ravnborg <sam@ravnborg.org>
> +
> +#include <linux/sizes.h>
> +
> +#include <asm/barebox-arm.h>
> +
> +#include <mach/at91sam926x_board_init.h>
> +#include <mach/at91sam9263_matrix.h>
> +
> +#define MASTER_PLL_MUL		171
> +#define MASTER_PLL_DIV		14
> +
> +static void __bare_init skovarm9cpu_board_config(struct at91sam926x_board_cfg *cfg)
> +{
> +	/* Disable Watchdog */
> +	cfg->wdt_mr =
> +		AT91_WDT_WDIDLEHLT | AT91_WDT_WDDBGHLT |
> +		AT91_WDT_WDV |
> +		AT91_WDT_WDDIS |
> +		AT91_WDT_WDD;
> +
> +	/* define PDC[31:16] as DATA[31:16] */
> +	cfg->ebi_pio_pdr = 0xFFFF0000;
> +	/* no pull-up for D[31:16] */
> +	cfg->ebi_pio_ppudr = 0xFFFF0000;
> +	/* EBI0_CSA, CS1 SDRAM, CS3 NAND Flash, 3.3V memories */
> +	cfg->ebi_csa =
> +		AT91SAM9263_MATRIX_EBI0_DBPUC | AT91SAM9263_MATRIX_EBI0_VDDIOMSEL_3_3V |
> +		AT91SAM9263_MATRIX_EBI0_CS1A_SDRAMC;
> +
> +	cfg->smc_cs = 0;
> +	cfg->smc_mode =
> +		AT91_SMC_READMODE | AT91_SMC_WRITEMODE |
> +		AT91_SMC_DBW_16 |
> +		AT91_SMC_TDFMODE |
> +		AT91_SMC_TDF_(6);
> +	cfg->smc_cycle =
> +		AT91_SMC_NWECYCLE_(22) | AT91_SMC_NRDCYCLE_(22);
> +	cfg->smc_pulse =
> +		AT91_SMC_NWEPULSE_(11) | AT91_SMC_NCS_WRPULSE_(11) |
> +		AT91_SMC_NRDPULSE_(11) | AT91_SMC_NCS_RDPULSE_(11);
> +	cfg->smc_setup =
> +		AT91_SMC_NWESETUP_(10) | AT91_SMC_NCS_WRSETUP_(10) |
> +		AT91_SMC_NRDSETUP_(10) | AT91_SMC_NCS_RDSETUP_(10);
> +
> +	cfg->pmc_mor =
> +		AT91_PMC_MOSCEN |
> +		(255 << 8);		/* Main Oscillator Start-up Time */
> +	cfg->pmc_pllar =
> +		AT91_PMC_PLLA_WR_ERRATA | /* Bit 29 must be 1 when prog */
> +		AT91_PMC_OUT |
> +		AT91_PMC_PLLCOUNT |	/* PLL Counter */
> +		(2 << 28) |		/* PLL Clock Frequency Range */
> +		((MASTER_PLL_MUL - 1) << 16) | (MASTER_PLL_DIV);
> +	/* PCK/2 = MCK Master Clock from PLLA */
> +	cfg->pmc_mckr1 =
> +		AT91_PMC_CSS_SLOW |
> +		AT91_PMC_PRES_1 |
> +		AT91SAM9_PMC_MDIV_2 |
> +		AT91_PMC_PDIV_1;
> +	/* PCK/2 = MCK Master Clock from PLLA */
> +	cfg->pmc_mckr2 =
> +		AT91_PMC_CSS_PLLA |
> +		AT91_PMC_PRES_1 |
> +		AT91SAM9_PMC_MDIV_2 |
> +		AT91_PMC_PDIV_1;
> +
> +	/* SDRAM */
> +	/* SDRAMC_TR - Refresh Timer register */
> +	cfg->sdrc_tr1 = 0x13C;
> +	/* SDRAMC_CR - Configuration register*/
> +	cfg->sdrc_cr =
> +		AT91_SDRAMC_NC_10 |	/* Assume 128MiB */
> +		AT91_SDRAMC_NR_13 |
> +		AT91_SDRAMC_NB_4 |
> +		AT91_SDRAMC_CAS_3 |
> +		AT91_SDRAMC_DBW_32 |
> +		(1 <<  8) |		/* Write Recovery Delay */
> +		(7 << 12) |		/* Row Cycle Delay */
> +		(2 << 16) |		/* Row Precharge Delay */
> +		(2 << 20) |		/* Row to Column Delay */
> +		(5 << 24) |		/* Active to Precharge Delay */
> +		(1 << 28);		/* Exit Self Refresh to Active Delay */
> +
> +	/* Memory Device Register -> SDRAM */
> +	cfg->sdrc_mdr = AT91_SDRAMC_MD_SDRAM;
> +	/* SDRAM_TR */
> +	cfg->sdrc_tr2 = 1200;
> +
> +	/* user reset enable */
> +	cfg->rstc_rmr =
> +		AT91_RSTC_KEY |
> +		AT91_RSTC_PROCRST |
> +		AT91_RSTC_RSTTYP_WAKEUP |
> +		AT91_RSTC_RSTTYP_WATCHDOG;
> +}
> +
> +static void __bare_init skov_arm9cpu_init(void *fdt)
> +{
> +	struct at91sam926x_board_cfg cfg;
> +
> +	cfg.pio = IOMEM(AT91SAM9263_BASE_PIOD);
> +	cfg.sdramc = IOMEM(AT91SAM9263_BASE_SDRAMC0);
> +	cfg.ebi_pio_is_peripha = true;
> +	cfg.matrix_csa = IOMEM(AT91SAM9263_BASE_MATRIX + AT91SAM9263_MATRIX_EBI0CSA);
> +
> +	skovarm9cpu_board_config(&cfg);
> +	at91sam9263_board_init(&cfg);
> +
> +	barebox_arm_entry(AT91_CHIPSELECT_1, at91_get_sdram_size(cfg.sdramc),
> +			  fdt);
> +}
> +
> +extern char __dtb_at91_skov_arm9cpu_start[];
> +
> +ENTRY_FUNCTION(start_skov_arm9cpu, r0, r1, r2)
> +{
> +	void *fdt;
> +
> +	arm_cpu_lowlevel_init();
> +
> +	arm_setup_stack(AT91SAM9263_SRAM0_BASE + AT91SAM9263_SRAM0_SIZE - 16);

See 6b3dc4abd884e7 ("ARM: Cleanup stack offset cargo cult"). Likely, the - 16
here can go away too.


> +	fdt = __dtb_at91_skov_arm9cpu_start + get_runtime_offset();
> +
> +	skov_arm9cpu_init(fdt);
> +}
> diff --git a/arch/arm/configs/at91_multi_defconfig b/arch/arm/configs/at91_multi_defconfig
> index e6a554e87f..f0a4812f0c 100644
> --- a/arch/arm/configs/at91_multi_defconfig
> +++ b/arch/arm/configs/at91_multi_defconfig
> @@ -1,4 +1,5 @@
>  CONFIG_AT91_MULTI_BOARDS=y
> +CONFIG_MACH_SKOV_ARM9CPU=y
>  CONFIG_MACH_AT91SAM9263EK=y
>  CONFIG_MACH_AT91SAM9X5EK=y
>  CONFIG_MACH_MICROCHIP_KSZ9477_EVB=y
> diff --git a/arch/arm/dts/Makefile b/arch/arm/dts/Makefile
> index d5f61768a5..9ce385d332 100644
> --- a/arch/arm/dts/Makefile
> +++ b/arch/arm/dts/Makefile
> @@ -110,6 +110,7 @@ lwl-$(CONFIG_MACH_SOLIDRUN_CUBOX) += dove-cubox-bb.dtb.o
>  lwl-$(CONFIG_MACH_SOLIDRUN_MICROSOM) += imx6dl-hummingboard.dtb.o imx6q-hummingboard.dtb.o \
>  				imx6dl-hummingboard2.dtb.o imx6q-hummingboard2.dtb.o \
>  				imx6q-h100.dtb.o
> +lwl-$(CONFIG_MACH_SKOV_ARM9CPU) += at91-skov-arm9cpu.dtb.o
>  lwl-$(CONFIG_MACH_SEEED_ODYSSEY) += stm32mp157c-odyssey.dtb.o
>  lwl-$(CONFIG_MACH_STM32MP15XX_DKX) += stm32mp157c-dk2.dtb.o stm32mp157a-dk1.dtb.o
>  lwl-$(CONFIG_MACH_LXA_MC1) += stm32mp157c-lxa-mc1.dtb.o
> diff --git a/arch/arm/dts/at91-skov-arm9cpu.dts b/arch/arm/dts/at91-skov-arm9cpu.dts
> new file mode 100644
> index 0000000000..3f1df618d7
> --- /dev/null
> +++ b/arch/arm/dts/at91-skov-arm9cpu.dts
> @@ -0,0 +1,453 @@
> +// SPDX-License-Identifier: GPL-2.0
> +// SPDX-FileCopyrightText: 2018 Sam Ravnborg <sam@ravnborg.org>
> +
> +/*
> + * Device Tree file for SKOV ARM9 CPU board with 128 MB RAM and
> + * Logic Technology Display
> + */
> +
> +/dts-v1/;
> +
> +#include "arm/at91sam9263.dtsi"
> +
> +/ {
> +	model = "SKOV ARM9 CPU";
> +	compatible = "skov,arm9-cpu", "atmel,at91sam9263", "atmel,at91sam9";
> +
> +	chosen {
> +		stdout-path = "serial0:115200n8";
> +
> +		environment {
> +			compatible = "barebox,environment";
> +			device-path = &environment_nor;
> +		};
> +	};
> +
> +	ahb {
> +		apb {

&{/ahb/apb/...} please. Otherwise, if upstream eventually renames the busses
to generic names (like what's happening to other SoCs), we don't get silently
broken. See https://barebox.org/doc/latest/devicetree/index.html#barebox-device-trees

I know that most at91 device trees look like this, but the trend seems to suggest
that at one time, they will be changed for upstream device trees. (Unless the
maintainers said otherwise?).

> +			pinctrl: pinctrl@fffff200 {
> +			};
> +
> +			watchdog@fffffd40 {
> +				status = "okay";
> +			};
> +		};
> +
> +		flash: nor_flash@10000000 {
> +			compatible = "cfi-flash";
> +			reg = <0x10000000 0x4000000>;
> +			linux,mtd-name = "physmap-flash.0";
> +			bank-width = <2>;
> +			#address-cells = <1>;
> +			#size-cells = <1>;
> +
> +			partitions {
> +				compatible = "fixed-partitions";
> +				#address-cells = <1>;
> +				#size-cells = <1>;
> +
> +				barebox@0 {
> +					label = "bootloader";
> +					reg = <0x00000 0x80000>;
> +				};
> +
> +				environment_nor: env@80000 {
> +					label = "environment";
> +					reg = <0x80000 0x20000>;
> +				};
> +
> +				linux@a0000 {
> +					label = "linux";
> +					reg = <0xa0000 0x2a0000>;
> +				};
> +
> +				rootfs@340000  {
> +					label = "rootfs";
> +					reg = <0x340000 0x3cc0000>;
> +				};
> +			};
> +		};
> +	};
> +
> +	leds {
> +		compatible = "gpio-leds";
> +
> +		D0 {
> +			label = "D0";
> +			gpios = <&pioD 0 GPIO_ACTIVE_LOW>;
> +			linux,default-trigger = "heartbeat";
> +		};
> +
> +		D1 {
> +			label = "D1";
> +			gpios = <&pioD 1 GPIO_ACTIVE_LOW>;
> +			linux,default-trigger = "mmc0";
> +		};
> +
> +		D2 {
> +			label = "D2";
> +			gpios = <&pioD 7 GPIO_ACTIVE_LOW>;
> +		};
> +
> +		led_0 {
> +			label = "led_0";
> +			gpios = <&pioB 14 GPIO_ACTIVE_LOW>;
> +		};
> +
> +		led_1 {
> +			label = "led_1";
> +			gpios = <&pioB 23 GPIO_ACTIVE_LOW>;
> +		};
> +
> +		led_2 {
> +			label = "led_2";
> +			gpios = <&pioB 18 GPIO_ACTIVE_LOW>;
> +		};
> +
> +		led_3 {
> +			label = "led_3";
> +			gpios = <&pioB 22 GPIO_ACTIVE_LOW>;
> +		};
> +
> +		led_4 {
> +			label = "led_4";
> +			gpios = <&pioA 22 GPIO_ACTIVE_LOW>;
> +		};
> +
> +		led_5 {
> +			label = "led_5";
> +			gpios = <&pioA 23 GPIO_ACTIVE_LOW>;
> +		};
> +
> +		led_6 {
> +			label = "led_6";
> +			gpios = <&pioA 24 GPIO_ACTIVE_LOW>;
> +		};
> +
> +		led_7 {
> +			label = "led_7";
> +			gpios = <&pioA 20 GPIO_ACTIVE_LOW>;
> +		};
> +	};
> +
> +	i2c-gpio-0 {
> +		status = "okay";
> +
> +		24c512@50 {
> +			compatible = "24c512";
> +			reg = <0x50>;
> +			pagesize = <128>;
> +		};
> +	};
> +
> +	rotary-encoder {
> +		compatible = "rotary-encoder";
> +		gpios = <&pioB 19 GPIO_ACTIVE_LOW>, <&pioB 20 GPIO_ACTIVE_LOW>;
> +		linux,axis = <0>; /* REL_X */
> +		rotary-encoder,steps-per-period = <4>;
> +		rotary-encoder,relative-axis;
> +	};
> +
> +	gpio-keys {
> +		compatible = "gpio-keys";
> +		#address-cells = <1>;
> +		#size-cells = <0>;
> +
> +		rotary_button {
> +			label = "rotary_button";
> +			gpios = <&pioB 15 GPIO_ACTIVE_LOW>;
> +			debounce-interval = <10>;
> +			linux,code = <28>; /* enter */
> +		};
> +	};
> +
> +	matrix-keypad-6x5 {
> +		compatible = "gpio-matrix-keypad";
> +		debounce-delay-ms = <10>;
> +		col-scan-delay-us = <10>;
> +
> +		row-gpios = <&pioB 25 GPIO_ACTIVE_HIGH    /* 1 */
> +			     &pioB 21 GPIO_ACTIVE_HIGH    /* 2 */
> +			     &pioB 16 GPIO_ACTIVE_HIGH    /* 3 */
> +			     &pioB 24 GPIO_ACTIVE_HIGH    /* 4 */
> +			     &pioB 12 GPIO_ACTIVE_HIGH>;  /* 5 */
> +
> +		col-gpios = <&pioB 13 GPIO_ACTIVE_HIGH    /* 1 */
> +			     &pioB 17 GPIO_ACTIVE_HIGH    /* 2 */
> +			     &pioA 25 GPIO_ACTIVE_HIGH    /* 3 */
> +			     &pioA 21 GPIO_ACTIVE_HIGH    /* 4 */
> +			     &pioA 19 GPIO_ACTIVE_HIGH    /* 5 */
> +			     &pioA 18 GPIO_ACTIVE_HIGH>;  /* 6 */
> +
> +
> +		linux,keymap = <
> +			0x00000011 /* col0 row0 KEY_W */
> +			0x01000021 /* col0 row1 KEY_F */
> +			0x02000031 /* col0 row2 KEY_N */
> +			0x03000041 /* col0 row3 KEY_F7 */
> +			0x04000051 /* col0 row4 KEY_KP3 */
> +			0x00010012 /* col1 row0 KEY_E */
> +			0x01010022 /* col1 row1 KEY_G */
> +			0x02010032 /* col1 row2 KEY_M */
> +			0x03010042 /* col1 row3 KEY_F8 */
> +			0x04010052 /* col1 row4 KEY_KP0 */
> +			0x00020013 /* col2 row0 KEY_R */
> +			0x01020023 /* col2 row1 KEY_H */
> +			0x02020033 /* col2 row2 KEY_COMMA */
> +			0x03020043 /* col2 row3 KEY_F9 */
> +			0x04020053 /* col2 row4 KEY_F9 */
> +			0x00030014 /* col3 row0 KEY_T */
> +			0x01030024 /* col3 row1 KEY_J */
> +			0x02030034 /* col3 row2 KEY_DOT */
> +			0x03030044 /* col3 row3 KEY_NUMLOCK */
> +			0x04030054 /* col3 row4 */
> +			0x00040015 /* col4 row0 KEY_Y */
> +			0x01040025 /* col4 row1 KEY_K */
> +			0x02040035 /* col4 row2 KEY_SLASH */
> +			0x03040045 /* col4 row3 KEY_NUMLOCK */
> +			0x04040055 /* col4 row4 KEY_ZENKAKUHANKAKU */
> +			0x00050016 /* col5 row0 KEY_U */
> +			0x01050026 /* col5 row1 KEY_L */
> +			0x02050036 /* col5 row2 KEY_RIGH_SHIFT */
> +			0x03050046 /* col5 row3 KEY_SCROLLLOCK */
> +			0x04050056 /* col5 row4 KEY_102ND */
> +		>;
> +	};
> +};
> +
> +&dbgu {
> +	status = "okay";
> +};
> +
> +&fb0 {
> +	status = "okay";
> +	display = <&display0>;
> +	display0: display0 {
> +		bits-per-pixel = <16>;
> +		atmel,lcdcon-backlight;
> +		atmel,dmacon = <0x1>;
> +		atmel,lcdcon2 = <0x80008002>;
> +		atmel,guard-time = <1>;
> +		atmel,lcd-wiring-mode = "BRG";
> +		pinctrl-names = "default";
> +		pinctrl-0 = <
> +			&pinctrl_board_fb
> +			&pinctrl_disp_type
> +			&pinctrl_logic_type
> +		>;
> +
> +		atmel,power-control-gpio = <&pioA 30 GPIO_ACTIVE_HIGH>;
> +
> +		display-timings {
> +			native-mode = <&l2rt>;
> +
> +			l2rt: l2rt {
> +				/* LTTD800480070-L2RT @ 55 */
> +				clock-frequency = <30000000>;
> +				hactive = <800>;
> +				vactive = <480>;
> +				/* Atmel calculation
> +				 * Horizontal =
> +				 * Hsync + left margin + picture + right_margin + 1
> +				 * (3 + 85 + 800 + 0 + 1 = 889)
> +				 */
> +				hback-porch = <85>;
> +				hfront-porch = <1>;
> +				hsync-len = <3>;
> +				/* Vertical =
> +				 * upper margin + picture + lower_margin
> +				 * (32 + 480 + 1 = 513) (25MHz / ( 889 * 513 ) = 54,8Hz
> +				 */
> +				vback-porch = <32>;
> +				vfront-porch = <1>;
> +				vsync-len = <3>;
> +				pixelclk-active = <1>;
> +				hsync-active = <0>;
> +				vsync-active = <0>;
> +				de-active = <1>;
> +			};
> +
> +			l6whrt: l6whrt {
> +				clock-frequency = <33000000>;
> +				hactive = <800>;
> +				vactive = <480>;
> +				hback-porch = <43>;
> +				hfront-porch = <154>;
> +				vback-porch = <20>;
> +				vfront-porch = <47>;
> +				hsync-len = <3>;
> +				vsync-len = <3>;
> +				pixelclk-active = <1>;
> +				hsync-active = <0>;
> +				vsync-active = <0>;
> +				de-active = <1>;
> +			};
> +
> +			seiko: seiko {
> +				/* 70WVW2AZ0 @ 55 */
> +				clock-frequency = <33000000>;
> +				hactive = <800>;
> +				vactive = <480>;
> +				hback-porch = <0>;
> +				hfront-porch = <256>;
> +				vback-porch = <45>;
> +				vfront-porch = <0>;
> +				hsync-len = <0>;
> +				vsync-len = <0>;
> +				pixelclk-active = <1>;
> +				hsync-active = <0>;
> +				vsync-active = <0>;
> +				de-active = <1>;
> +			};
> +		};
> +	};
> +};
> +
> +&macb0 {
> +	status = "okay";
> +	phy-mode = "rmii";
> +	#address-cells = <1>;
> +	#size-cells = <0>;
> +
> +	ethphy0: ethernet-phy@1 {
> +		reg = <3>;
> +		reset-gpios = <&pioE 17 GPIO_ACTIVE_LOW>;
> +		reset-assert-us = <1000>;
> +		reset-deassert-us = <100>;
> +	};
> +};
> +
> +&main_xtal {
> +	clock-frequency = <16000000>;
> +};
> +
> +&mmc1 {
> +	status = "okay";
> +	pinctrl-0 = <
> +		&pinctrl_board_mmc1
> +		&pinctrl_mmc1_clk
> +		&pinctrl_mmc1_slot0_cmd_dat0
> +		&pinctrl_mmc1_slot0_dat1_3>;
> +	cd-gpios = <&pioE 18 GPIO_ACTIVE_HIGH>;
> +	slot@0 {
> +		reg = <0>;
> +		bus-width = <4>;
> +		cd-gpios = <&pioE 18 GPIO_ACTIVE_HIGH>;
> +		wp-gpios = <&pioE 19 GPIO_ACTIVE_HIGH>;
> +	};
> +};
> +
> +&pinctrl {
> +	mmc1 {
> +		pinctrl_board_mmc1: mmc1-board {
> +			atmel,pins =
> +				<AT91_PIOE 18 AT91_PERIPH_GPIO
> +				 AT91_PINCTRL_PULL_UP_DEGLITCH 	/* PE18 gpio CD pin pull up and deglitch */
> +				 AT91_PIOE 19 AT91_PERIPH_GPIO AT91_PINCTRL_PULL_UP>;	/* PE19 gpio WP pin pull up */
> +		};
> +	};
> +
> +	display_type_inputs {
> +		pinctrl_disp_type: disp_type-0 {
> +			/* Pull-up (HIGH) if Seiko display, otherwise Logic display */
> +			atmel,pins =
> +				<AT91_PIOD 2 AT91_PERIPH_GPIO AT91_PINCTRL_PULL_UP>;
> +		};
> +		pinctrl_logic_type: logic_type-0 {
> +			/* Pull-down (LOW) if l6whrt display, otherwise l2rt display */
> +			atmel,pins =
> +				<AT91_PIOC 28 AT91_PERIPH_GPIO AT91_PINCTRL_PULL_UP>;
> +		};
> +	};
> +
> +	fb {
> +		pinctrl_board_fb: fb-0 {
> +			atmel,pins =
> +			       <AT91_PIOC 0  AT91_PERIPH_A AT91_PINCTRL_NONE    /* LCDVSYNC */
> +				AT91_PIOC 1  AT91_PERIPH_A AT91_PINCTRL_NONE    /* LCDHSYNC */
> +				AT91_PIOC 2  AT91_PERIPH_A AT91_PINCTRL_NONE    /* LCDDOTCK */
> +				AT91_PIOC 3  AT91_PERIPH_A AT91_PINCTRL_NONE    /* LCDDEN */
> +				AT91_PIOB 9  AT91_PERIPH_B AT91_PINCTRL_NONE    /* LCDCC */
> +				AT91_PIOC 6  AT91_PERIPH_A AT91_PINCTRL_NONE    /* LCDD2 */
> +				AT91_PIOC 7  AT91_PERIPH_A AT91_PINCTRL_NONE    /* LCDD3 */
> +				AT91_PIOC 8  AT91_PERIPH_A AT91_PINCTRL_NONE    /* LCDD4 */
> +				AT91_PIOC 9  AT91_PERIPH_A AT91_PINCTRL_NONE    /* LCDD5 */
> +				AT91_PIOC 10 AT91_PERIPH_A AT91_PINCTRL_NONE    /* LCDD6 */
> +				AT91_PIOC 11 AT91_PERIPH_A AT91_PINCTRL_NONE    /* LCDD7 */
> +				AT91_PIOC 14 AT91_PERIPH_A AT91_PINCTRL_NONE    /* LCDD10 */
> +				AT91_PIOC 15 AT91_PERIPH_A AT91_PINCTRL_NONE    /* LCDD11 */
> +				AT91_PIOC 16 AT91_PERIPH_A AT91_PINCTRL_NONE    /* LCDD12 */
> +				AT91_PIOC 12 AT91_PERIPH_B AT91_PINCTRL_NONE    /* LCDD13 */
> +				AT91_PIOC 18 AT91_PERIPH_A AT91_PINCTRL_NONE    /* LCDD14 */
> +				AT91_PIOC 19 AT91_PERIPH_A AT91_PINCTRL_NONE    /* LCDD15 */
> +				AT91_PIOC 22 AT91_PERIPH_A AT91_PINCTRL_NONE    /* LCDD18 */
> +				AT91_PIOC 23 AT91_PERIPH_A AT91_PINCTRL_NONE    /* LCDD19 */
> +				AT91_PIOC 24 AT91_PERIPH_A AT91_PINCTRL_NONE    /* LCDD20 */
> +				AT91_PIOC 17 AT91_PERIPH_B AT91_PINCTRL_NONE    /* LCDD21 */
> +				AT91_PIOC 26 AT91_PERIPH_A AT91_PINCTRL_NONE    /* LCDD22 */
> +				AT91_PIOC 27 AT91_PERIPH_A AT91_PINCTRL_NONE>;  /* LCDD23 */
> +		};
> +	};
> +
> +	pwm0 {
> +		pinctrl_pwm0: pwm0_pwm1 {
> +			atmel,pins = <AT91_PIOB 8 AT91_PERIPH_B AT91_PINCTRL_NONE>;
> +		};
> +	};
> +};
> +
> +&pwm0 {
> +	status = "okay";
> +	pinctrl-names = "default";
> +	pinctrl-0 = <&pinctrl_pwm0>;
> +};
> +
> +&slow_xtal {
> +	clock-frequency = <32768>;
> +};
> +
> +&spi0 {
> +	status = "okay";
> +	cs-gpios = <&pioA 3 0>, <&pioB 11 0>;
> +
> +	mcp3002@0 {
> +		compatible = "microchip,mcp3002";
> +		reg = <0>;
> +		spi-max-frequency = <750000>;
> +	};
> +
> +	tsc2046@1 {
> +		compatible = "ti,tsc2046";
> +		reg = <1>;
> +		interrupts-extended = <&pioA 15 IRQ_TYPE_EDGE_BOTH>;
> +		spi-max-frequency = <500000>;
> +		pendown-gpio = <&pioA 15 GPIO_ACTIVE_LOW>;
> +
> +		ti,x-min = /bits/ 16 <800>;
> +		ti,x-max = /bits/ 16 <3830>;
> +		ti,y-min = /bits/ 16 <500>;
> +		ti,y-max = /bits/ 16 <3830>;
> +		ti,vref-delay-usecs = /bits/ 16 <300>;
> +		ti,x-plate-ohms = /bits/ 16 <642>;
> +		ti,y-plate-ohms = /bits/ 16 <295>;
> +		ti,pressure-max = /bits/ 16 <1500>;
> +		ti,debounce-rep = /bits/ 16 <8>;
> +		ti,debounce-tol = /bits/ 16 <(~0)>;
> +		ti,debounce-max = /bits/ 16 <100>;
> +
> +		wakeup-source;
> +	};
> +};
> +
> +&usart0 {
> +	status = "okay";
> +	pinctrl-0 = <
> +		&pinctrl_usart0
> +		&pinctrl_usart0_rts
> +		&pinctrl_usart0_cts>;
> +};
> +
> +&usb0 {
> +	status = "okay";
> +	num-ports = <2>;
> +};
> diff --git a/arch/arm/mach-at91/Kconfig b/arch/arm/mach-at91/Kconfig
> index 52eefc7361..810c00d495 100644
> --- a/arch/arm/mach-at91/Kconfig
> +++ b/arch/arm/mach-at91/Kconfig
> @@ -577,6 +577,17 @@ config AT91_MULTI_BOARDS
>  
>  if AT91_MULTI_BOARDS
>  
> +config MACH_SKOV_ARM9CPU
> +	bool "SKOV ARM9 CPU"
> +	select SOC_AT91SAM9263
> +	select OFDEVICE
> +	select COMMON_CLK_OF_PROVIDER
> +	select HAVE_AT91_USB_CLK
> +	select HAVE_AT91_BOOTSTRAP
> +	select AT91SAM926X_BOARD_INIT
> +	help
> +	  Say y here if you are using SKOV's ARM9 CPU board
> +
>  config MACH_AT91SAM9263EK
>  	bool "Atmel AT91SAM9263-EK"
>  	select SOC_AT91SAM9263
> diff --git a/images/Makefile.at91 b/images/Makefile.at91
> index 00fa4cab27..7ab92edf14 100644
> --- a/images/Makefile.at91
> +++ b/images/Makefile.at91
> @@ -31,3 +31,8 @@ pblb-$(CONFIG_MACH_SAMA5D27_GIANTBOARD) += start_sama5d27_giantboard_xload_mmc
>  FILE_barebox-groboards-sama5d27-giantboard-xload-mmc.img = start_sama5d27_giantboard_xload_mmc.pblb
>  MAX_PBL_IMAGE_SIZE_start_sama5d27_giantboard_xload_mmc = 0xffff
>  image-$(CONFIG_MACH_SAMA5D27_GIANTBOARD) += barebox-groboards-sama5d27-giantboard-xload-mmc.img
> +
> +pblb-$(CONFIG_MACH_SKOV_ARM9CPU) += start_skov_arm9cpu
> +FILE_barebox-skov-arm9cpu.img = start_skov_arm9cpu.pblb
> +MAX_PBL_MEMORY_SIZE_start_skov_arm9cpu = 0x12000
> +image-$(CONFIG_MACH_SKOV_ARM9CPU) += barebox-skov-arm9cpu.img
> 

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

_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

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

* Re: [PATCH] ARM: AT91: Add skov-arm9cpu board support
  2021-04-14 12:45 ` Ahmad Fatoum
@ 2021-04-15 11:36   ` Sascha Hauer
  0 siblings, 0 replies; 4+ messages in thread
From: Sascha Hauer @ 2021-04-15 11:36 UTC (permalink / raw)
  To: Ahmad Fatoum; +Cc: Barebox List, Sam Ravnborg

On Wed, Apr 14, 2021 at 02:45:55PM +0200, Ahmad Fatoum wrote:
> Hi,
> 
> > +ENTRY_FUNCTION(start_skov_arm9cpu, r0, r1, r2)
> > +{
> > +	void *fdt;
> > +
> > +	arm_cpu_lowlevel_init();
> > +
> > +	arm_setup_stack(AT91SAM9263_SRAM0_BASE + AT91SAM9263_SRAM0_SIZE - 16);
> 
> See 6b3dc4abd884e7 ("ARM: Cleanup stack offset cargo cult"). Likely, the - 16
> here can go away too.

Fixed.

> > +			device-path = &environment_nor;
> > +		};
> > +	};
> > +
> > +	ahb {
> > +		apb {
> 
> &{/ahb/apb/...} please. Otherwise, if upstream eventually renames the busses
> to generic names (like what's happening to other SoCs), we don't get silently
> broken. See https://barebox.org/doc/latest/devicetree/index.html#barebox-device-trees
> 
> I know that most at91 device trees look like this, but the trend seems to suggest
> that at one time, they will be changed for upstream device trees. (Unless the
> maintainers said otherwise?).

Fixed before applying.

Sascha

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

_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox


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

* Re: [PATCH] ARM: AT91: Add skov-arm9cpu board support
  2021-04-14 12:21 [PATCH] ARM: AT91: Add skov-arm9cpu board support Sascha Hauer
  2021-04-14 12:45 ` Ahmad Fatoum
@ 2021-06-19 21:04 ` Sam Ravnborg
  1 sibling, 0 replies; 4+ messages in thread
From: Sam Ravnborg @ 2021-06-19 21:04 UTC (permalink / raw)
  To: Sascha Hauer; +Cc: Barebox List

Hi Sasha,

On Wed, Apr 14, 2021 at 02:21:43PM +0200, Sascha Hauer wrote:
> From: Sam Ravnborg <sam@ravnborg.org>
> 
> This adds support for an older SKOV board, the arm9cpu.

Thanks for takiing care of this old stuff.
Now I need to dig the board out and check if everything works :-)

	Sam

_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox


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

end of thread, other threads:[~2021-06-19 21:06 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-04-14 12:21 [PATCH] ARM: AT91: Add skov-arm9cpu board support Sascha Hauer
2021-04-14 12:45 ` Ahmad Fatoum
2021-04-15 11:36   ` Sascha Hauer
2021-06-19 21:04 ` Sam Ravnborg

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox