All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v5 0/3] sunxi: Add support for OrangePi 3
@ 2021-01-03 18:36 Jernej Skrabec
  2021-01-03 18:36 ` [PATCH v5 1/3] sunxi: board: extract creating a unique sid into a helper function Jernej Skrabec
                   ` (2 more replies)
  0 siblings, 3 replies; 7+ messages in thread
From: Jernej Skrabec @ 2021-01-03 18:36 UTC (permalink / raw)
  To: u-boot

This is just refreshed v4 from here:
https://patchwork.ozlabs.org/project/uboot/list/?series=156657&state=*

Patches are only rebased, DT updated and defconfig regenerated, so
I kept old tags. Only difference with old version is that this one
does not sync H6 DT files. Becasue of that, this series should be
applied on top of:
https://patchwork.ozlabs.org/project/uboot/list/?series=222516

Please take a look.

Best regards,
Jernej

Andre Heider (3):
  sunxi: board: extract creating a unique sid into a helper function
  arm: sunxi: add a config option to fixup a Bluetooth address
  arm64: dts: sun50i: Add support for Orange Pi 3

 arch/arm/dts/Makefile                 |   1 +
 arch/arm/dts/sun50i-h6-orangepi-3.dts | 345 ++++++++++++++++++++++++++
 arch/arm/mach-sunxi/Kconfig           |  11 +
 board/sunxi/MAINTAINERS               |   5 +
 board/sunxi/board.c                   | 155 ++++++++----
 configs/orangepi_3_defconfig          |  13 +
 6 files changed, 475 insertions(+), 55 deletions(-)
 create mode 100644 arch/arm/dts/sun50i-h6-orangepi-3.dts
 create mode 100644 configs/orangepi_3_defconfig

-- 
2.30.0

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

* [PATCH v5 1/3] sunxi: board: extract creating a unique sid into a helper function
  2021-01-03 18:36 [PATCH v5 0/3] sunxi: Add support for OrangePi 3 Jernej Skrabec
@ 2021-01-03 18:36 ` Jernej Skrabec
  2021-01-07 22:51   ` André Przywara
  2021-01-03 18:36 ` [PATCH v5 2/3] arm: sunxi: add a config option to fixup a Bluetooth address Jernej Skrabec
  2021-01-03 18:36 ` [PATCH v5 3/3] arm64: dts: sun50i: Add support for Orange Pi 3 Jernej Skrabec
  2 siblings, 1 reply; 7+ messages in thread
From: Jernej Skrabec @ 2021-01-03 18:36 UTC (permalink / raw)
  To: u-boot

From: Andre Heider <a.heider@gmail.com>

Refactor setup_environment() so we can use the created sid for a
Bluetooth address too.

Signed-off-by: Andre Heider <a.heider@gmail.com>
Acked-by: Maxime Ripard <mripard@kernel.org>
[rebased]
Signed-off-by: Jernej Skrabec <jernej.skrabec@siol.net>
---
 board/sunxi/board.c | 121 ++++++++++++++++++++++++--------------------
 1 file changed, 66 insertions(+), 55 deletions(-)

diff --git a/board/sunxi/board.c b/board/sunxi/board.c
index 708a27ed78e9..4a29e351141b 100644
--- a/board/sunxi/board.c
+++ b/board/sunxi/board.c
@@ -789,6 +789,38 @@ static void parse_spl_header(const uint32_t spl_addr)
 	env_set_hex("fel_scriptaddr", spl->fel_script_address);
 }
 
+static bool get_unique_sid(unsigned int *sid)
+{
+	if (sunxi_get_sid(sid) != 0)
+		return false;
+
+	if (!sid[0])
+		return false;
+
+	/*
+	 * The single words 1 - 3 of the SID have quite a few bits
+	 * which are the same on many models, so we take a crc32
+	 * of all 3 words, to get a more unique value.
+	 *
+	 * Note we only do this on newer SoCs as we cannot change
+	 * the algorithm on older SoCs since those have been using
+	 * fixed mac-addresses based on only using word 3 for a
+	 * long time and changing a fixed mac-address with an
+	 * u-boot update is not good.
+	 */
+#if !defined(CONFIG_MACH_SUN4I) && !defined(CONFIG_MACH_SUN5I) && \
+    !defined(CONFIG_MACH_SUN6I) && !defined(CONFIG_MACH_SUN7I) && \
+    !defined(CONFIG_MACH_SUN8I_A23) && !defined(CONFIG_MACH_SUN8I_A33)
+	sid[3] = crc32(0, (unsigned char *)&sid[1], 12);
+#endif
+
+	/* Ensure the NIC specific bytes of the mac are not all 0 */
+	if ((sid[3] & 0xffffff) == 0)
+		sid[3] |= 0x800000;
+
+	return true;
+}
+
 /*
  * Note this function gets called multiple times.
  * It must not make any changes to env variables which already exist.
@@ -799,61 +831,40 @@ static void setup_environment(const void *fdt)
 	unsigned int sid[4];
 	uint8_t mac_addr[6];
 	char ethaddr[16];
-	int i, ret;
-
-	ret = sunxi_get_sid(sid);
-	if (ret == 0 && sid[0] != 0) {
-		/*
-		 * The single words 1 - 3 of the SID have quite a few bits
-		 * which are the same on many models, so we take a crc32
-		 * of all 3 words, to get a more unique value.
-		 *
-		 * Note we only do this on newer SoCs as we cannot change
-		 * the algorithm on older SoCs since those have been using
-		 * fixed mac-addresses based on only using word 3 for a
-		 * long time and changing a fixed mac-address with an
-		 * u-boot update is not good.
-		 */
-#if !defined(CONFIG_MACH_SUN4I) && !defined(CONFIG_MACH_SUN5I) && \
-    !defined(CONFIG_MACH_SUN6I) && !defined(CONFIG_MACH_SUN7I) && \
-    !defined(CONFIG_MACH_SUN8I_A23) && !defined(CONFIG_MACH_SUN8I_A33)
-		sid[3] = crc32(0, (unsigned char *)&sid[1], 12);
-#endif
-
-		/* Ensure the NIC specific bytes of the mac are not all 0 */
-		if ((sid[3] & 0xffffff) == 0)
-			sid[3] |= 0x800000;
-
-		for (i = 0; i < 4; i++) {
-			sprintf(ethaddr, "ethernet%d", i);
-			if (!fdt_get_alias(fdt, ethaddr))
-				continue;
-
-			if (i == 0)
-				strcpy(ethaddr, "ethaddr");
-			else
-				sprintf(ethaddr, "eth%daddr", i);
-
-			if (env_get(ethaddr))
-				continue;
-
-			/* Non OUI / registered MAC address */
-			mac_addr[0] = (i << 4) | 0x02;
-			mac_addr[1] = (sid[0] >>  0) & 0xff;
-			mac_addr[2] = (sid[3] >> 24) & 0xff;
-			mac_addr[3] = (sid[3] >> 16) & 0xff;
-			mac_addr[4] = (sid[3] >>  8) & 0xff;
-			mac_addr[5] = (sid[3] >>  0) & 0xff;
-
-			eth_env_set_enetaddr(ethaddr, mac_addr);
-		}
-
-		if (!env_get("serial#")) {
-			snprintf(serial_string, sizeof(serial_string),
-				"%08x%08x", sid[0], sid[3]);
-
-			env_set("serial#", serial_string);
-		}
+	int i;
+
+	if (!get_unique_sid(sid))
+		return;
+
+	for (i = 0; i < 4; i++) {
+		sprintf(ethaddr, "ethernet%d", i);
+		if (!fdt_get_alias(fdt, ethaddr))
+			continue;
+
+		if (i == 0)
+			strcpy(ethaddr, "ethaddr");
+		else
+			sprintf(ethaddr, "eth%daddr", i);
+
+		if (env_get(ethaddr))
+			continue;
+
+		/* Non OUI / registered MAC address */
+		mac_addr[0] = (i << 4) | 0x02;
+		mac_addr[1] = (sid[0] >>  0) & 0xff;
+		mac_addr[2] = (sid[3] >> 24) & 0xff;
+		mac_addr[3] = (sid[3] >> 16) & 0xff;
+		mac_addr[4] = (sid[3] >>  8) & 0xff;
+		mac_addr[5] = (sid[3] >>  0) & 0xff;
+
+		eth_env_set_enetaddr(ethaddr, mac_addr);
+	}
+
+	if (!env_get("serial#")) {
+		snprintf(serial_string, sizeof(serial_string),
+			"%08x%08x", sid[0], sid[3]);
+
+		env_set("serial#", serial_string);
 	}
 }
 
-- 
2.30.0

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

* [PATCH v5 2/3] arm: sunxi: add a config option to fixup a Bluetooth address
  2021-01-03 18:36 [PATCH v5 0/3] sunxi: Add support for OrangePi 3 Jernej Skrabec
  2021-01-03 18:36 ` [PATCH v5 1/3] sunxi: board: extract creating a unique sid into a helper function Jernej Skrabec
@ 2021-01-03 18:36 ` Jernej Skrabec
  2021-01-07 22:51   ` André Przywara
  2021-01-03 18:36 ` [PATCH v5 3/3] arm64: dts: sun50i: Add support for Orange Pi 3 Jernej Skrabec
  2 siblings, 1 reply; 7+ messages in thread
From: Jernej Skrabec @ 2021-01-03 18:36 UTC (permalink / raw)
  To: u-boot

From: Andre Heider <a.heider@gmail.com>

Some Bluetooth controllers, like the BCM4345C5 of the Orange Pi 3,
ship with the controller default address.

Add a config option to fix it up so it can function properly.

Signed-off-by: Andre Heider <a.heider@gmail.com>
Tested-by: Ondrej Jirman <megous@megous.com>
Acked-by: Maxime Ripard <mripard@kernel.org>
[rebased]
Signed-off-by: Jernej Skrabec <jernej.skrabec@siol.net>
---
 arch/arm/mach-sunxi/Kconfig | 11 +++++++++++
 board/sunxi/board.c         | 34 ++++++++++++++++++++++++++++++++++
 2 files changed, 45 insertions(+)

diff --git a/arch/arm/mach-sunxi/Kconfig b/arch/arm/mach-sunxi/Kconfig
index 49ef217f08c0..269aef5f01a1 100644
--- a/arch/arm/mach-sunxi/Kconfig
+++ b/arch/arm/mach-sunxi/Kconfig
@@ -1016,4 +1016,15 @@ config PINEPHONE_DT_SELECTION
 	  Enable this option to automatically select the device tree for the
 	  correct PinePhone hardware revision during boot.
 
+config FIXUP_BDADDR
+	string "Fixup the Bluetooth controller address"
+	default ""
+	help
+	  This option specifies the DT compatible name of the Bluetooth
+	  controller for which to set the "local-bd-address" property.
+	  Set this option if your device ships with the Bluetooth controller
+	  default address.
+	  The used address is "bdaddr" if set, and "ethaddr" with the LSB
+	  flipped elsewise.
+
 endif
diff --git a/board/sunxi/board.c b/board/sunxi/board.c
index 4a29e351141b..d19119b7eb36 100644
--- a/board/sunxi/board.c
+++ b/board/sunxi/board.c
@@ -908,6 +908,38 @@ int misc_init_r(void)
 	return 0;
 }
 
+static void fixup_bd_address(void *blob)
+{
+	/* Some devices ship with a Bluetooth controller default address.
+	 * Set a valid address through the device tree.
+	 */
+	uchar tmp[ETH_ALEN], bdaddr[ETH_ALEN];
+	unsigned int sid[4];
+	int i;
+
+	if (!CONFIG_FIXUP_BDADDR[0])
+		return;
+
+	if (eth_env_get_enetaddr("bdaddr", tmp)) {
+		/* Convert between the binary formats of the corresponding stacks */
+		for (i = 0; i < ETH_ALEN; ++i)
+			bdaddr[i] = tmp[ETH_ALEN - i - 1];
+	} else {
+		if (!get_unique_sid(sid))
+			return;
+
+		bdaddr[0] = ((sid[3] >>  0) & 0xff) ^ 1;
+		bdaddr[1] = (sid[3] >>  8) & 0xff;
+		bdaddr[2] = (sid[3] >> 16) & 0xff;
+		bdaddr[3] = (sid[3] >> 24) & 0xff;
+		bdaddr[4] = (sid[0] >>  0) & 0xff;
+		bdaddr[5] = 0x02;
+	}
+
+	do_fixup_by_compat(blob, CONFIG_FIXUP_BDADDR,
+			   "local-bd-address", bdaddr, ETH_ALEN, 1);
+}
+
 int ft_board_setup(void *blob, struct bd_info *bd)
 {
 	int __maybe_unused r;
@@ -918,6 +950,8 @@ int ft_board_setup(void *blob, struct bd_info *bd)
 	 */
 	setup_environment(blob);
 
+	fixup_bd_address(blob);
+
 #ifdef CONFIG_VIDEO_DT_SIMPLEFB
 	r = sunxi_simplefb_setup(blob);
 	if (r)
-- 
2.30.0

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

* [PATCH v5 3/3] arm64: dts: sun50i: Add support for Orange Pi 3
  2021-01-03 18:36 [PATCH v5 0/3] sunxi: Add support for OrangePi 3 Jernej Skrabec
  2021-01-03 18:36 ` [PATCH v5 1/3] sunxi: board: extract creating a unique sid into a helper function Jernej Skrabec
  2021-01-03 18:36 ` [PATCH v5 2/3] arm: sunxi: add a config option to fixup a Bluetooth address Jernej Skrabec
@ 2021-01-03 18:36 ` Jernej Skrabec
  2021-01-07 22:53   ` André Przywara
  2 siblings, 1 reply; 7+ messages in thread
From: Jernej Skrabec @ 2021-01-03 18:36 UTC (permalink / raw)
  To: u-boot

From: Andre Heider <a.heider@gmail.com>

dts file is taken from Linux 5.11-rc1 tag.

The Bluetooth controller of this device ships with a default address,
use the new CONFIG_FIXUP_BDADDR option to fix it up.

Signed-off-by: Andre Heider <a.heider@gmail.com>
Acked-by: Maxime Ripard <mripard@kernel.org>
[Updated OrangePi 3 DT, rebase and config update]
Signed-off-by: Jernej Skrabec <jernej.skrabec@siol.net>
---
 arch/arm/dts/Makefile                 |   1 +
 arch/arm/dts/sun50i-h6-orangepi-3.dts | 345 ++++++++++++++++++++++++++
 board/sunxi/MAINTAINERS               |   5 +
 configs/orangepi_3_defconfig          |  13 +
 4 files changed, 364 insertions(+)
 create mode 100644 arch/arm/dts/sun50i-h6-orangepi-3.dts
 create mode 100644 configs/orangepi_3_defconfig

diff --git a/arch/arm/dts/Makefile b/arch/arm/dts/Makefile
index e00aed1ec207..607571d04b25 100644
--- a/arch/arm/dts/Makefile
+++ b/arch/arm/dts/Makefile
@@ -605,6 +605,7 @@ dtb-$(CONFIG_MACH_SUN50I_H5) += \
 	sun50i-h5-orangepi-zero-plus2.dtb
 dtb-$(CONFIG_MACH_SUN50I_H6) += \
 	sun50i-h6-beelink-gs1.dtb \
+	sun50i-h6-orangepi-3.dtb \
 	sun50i-h6-orangepi-lite2.dtb \
 	sun50i-h6-orangepi-one-plus.dtb \
 	sun50i-h6-pine-h64.dtb \
diff --git a/arch/arm/dts/sun50i-h6-orangepi-3.dts b/arch/arm/dts/sun50i-h6-orangepi-3.dts
new file mode 100644
index 000000000000..15c9dd8c4479
--- /dev/null
+++ b/arch/arm/dts/sun50i-h6-orangepi-3.dts
@@ -0,0 +1,345 @@
+// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
+// Copyright (C) 2019 Ond?ej Jirman <megous@megous.com>
+
+/dts-v1/;
+
+#include "sun50i-h6.dtsi"
+#include "sun50i-h6-cpu-opp.dtsi"
+
+#include <dt-bindings/gpio/gpio.h>
+
+/ {
+	model = "OrangePi 3";
+	compatible = "xunlong,orangepi-3", "allwinner,sun50i-h6";
+
+	aliases {
+		serial0 = &uart0;
+		serial1 = &uart1;
+	};
+
+	chosen {
+		stdout-path = "serial0:115200n8";
+	};
+
+	connector {
+		compatible = "hdmi-connector";
+		ddc-en-gpios = <&pio 7 2 GPIO_ACTIVE_HIGH>; /* PH2 */
+		type = "a";
+
+		port {
+			hdmi_con_in: endpoint {
+				remote-endpoint = <&hdmi_out_con>;
+			};
+		};
+	};
+
+	ext_osc32k: ext_osc32k_clk {
+		#clock-cells = <0>;
+		compatible = "fixed-clock";
+		clock-frequency = <32768>;
+		clock-output-names = "ext_osc32k";
+	};
+
+	leds {
+		compatible = "gpio-leds";
+
+		power {
+			label = "orangepi:red:power";
+			gpios = <&r_pio 0 4 GPIO_ACTIVE_HIGH>; /* PL4 */
+			default-state = "on";
+		};
+
+		status {
+			label = "orangepi:green:status";
+			gpios = <&r_pio 0 7 GPIO_ACTIVE_HIGH>; /* PL7 */
+		};
+	};
+
+	reg_vcc5v: vcc5v {
+		/* board wide 5V supply directly from the DC jack */
+		compatible = "regulator-fixed";
+		regulator-name = "vcc-5v";
+		regulator-min-microvolt = <5000000>;
+		regulator-max-microvolt = <5000000>;
+		regulator-always-on;
+	};
+
+	reg_vcc33_wifi: vcc33-wifi {
+		/* Always on 3.3V regulator for WiFi and BT */
+		compatible = "regulator-fixed";
+		regulator-name = "vcc33-wifi";
+		regulator-min-microvolt = <3300000>;
+		regulator-max-microvolt = <3300000>;
+		regulator-always-on;
+		vin-supply = <&reg_vcc5v>;
+	};
+
+	reg_vcc_wifi_io: vcc-wifi-io {
+		/* Always on 1.8V/300mA regulator for WiFi and BT IO */
+		compatible = "regulator-fixed";
+		regulator-name = "vcc-wifi-io";
+		regulator-min-microvolt = <1800000>;
+		regulator-max-microvolt = <1800000>;
+		regulator-always-on;
+		vin-supply = <&reg_vcc33_wifi>;
+	};
+
+	wifi_pwrseq: wifi-pwrseq {
+		compatible = "mmc-pwrseq-simple";
+		clocks = <&rtc 1>;
+		clock-names = "ext_clock";
+		reset-gpios = <&r_pio 1 3 GPIO_ACTIVE_LOW>; /* PM3 */
+		post-power-on-delay-ms = <200>;
+	};
+};
+
+&cpu0 {
+	cpu-supply = <&reg_dcdca>;
+};
+
+&de {
+	status = "okay";
+};
+
+&dwc3 {
+	status = "okay";
+};
+
+&ehci0 {
+	status = "okay";
+};
+
+&ehci3 {
+	status = "okay";
+};
+
+&gpu {
+	mali-supply = <&reg_dcdcc>;
+	status = "okay";
+};
+
+&hdmi {
+	status = "okay";
+};
+
+&hdmi_out {
+	hdmi_out_con: endpoint {
+		remote-endpoint = <&hdmi_con_in>;
+	};
+};
+
+&mmc0 {
+	vmmc-supply = <&reg_cldo1>;
+	cd-gpios = <&pio 5 6 GPIO_ACTIVE_LOW>; /* PF6 */
+	bus-width = <4>;
+	status = "okay";
+};
+
+&mmc1 {
+	vmmc-supply = <&reg_vcc33_wifi>;
+	vqmmc-supply = <&reg_vcc_wifi_io>;
+	mmc-pwrseq = <&wifi_pwrseq>;
+	bus-width = <4>;
+	non-removable;
+	status = "okay";
+
+	brcm: sdio-wifi at 1 {
+		reg = <1>;
+		compatible = "brcm,bcm4329-fmac";
+		interrupt-parent = <&r_pio>;
+		interrupts = <1 0 IRQ_TYPE_LEVEL_LOW>; /* PM0 */
+		interrupt-names = "host-wake";
+	};
+};
+
+&mmc2 {
+	vmmc-supply = <&reg_cldo1>;
+	vqmmc-supply = <&reg_bldo2>;
+	cap-mmc-hw-reset;
+	non-removable;
+	bus-width = <8>;
+	status = "okay";
+};
+
+&ohci0 {
+	status = "okay";
+};
+
+&ohci3 {
+	status = "okay";
+};
+
+&pio {
+	vcc-pc-supply = <&reg_bldo2>;
+	vcc-pd-supply = <&reg_cldo1>;
+	vcc-pg-supply = <&reg_vcc_wifi_io>;
+};
+
+&r_i2c {
+	status = "okay";
+
+	axp805: pmic at 36 {
+		compatible = "x-powers,axp805", "x-powers,axp806";
+		reg = <0x36>;
+		interrupt-parent = <&r_intc>;
+		interrupts = <0 IRQ_TYPE_LEVEL_LOW>;
+		interrupt-controller;
+		#interrupt-cells = <1>;
+		x-powers,self-working-mode;
+		vina-supply = <&reg_vcc5v>;
+		vinb-supply = <&reg_vcc5v>;
+		vinc-supply = <&reg_vcc5v>;
+		vind-supply = <&reg_vcc5v>;
+		vine-supply = <&reg_vcc5v>;
+		aldoin-supply = <&reg_vcc5v>;
+		bldoin-supply = <&reg_vcc5v>;
+		cldoin-supply = <&reg_vcc5v>;
+
+		regulators {
+			reg_aldo1: aldo1 {
+				regulator-always-on;
+				regulator-min-microvolt = <3300000>;
+				regulator-max-microvolt = <3300000>;
+				regulator-name = "vcc-pl-led-ir";
+			};
+
+			reg_aldo2: aldo2 {
+				regulator-min-microvolt = <3300000>;
+				regulator-max-microvolt = <3300000>;
+				regulator-name = "vcc33-audio-tv-ephy-mac";
+			};
+
+			/* ALDO3 is shorted to CLDO1 */
+			reg_aldo3: aldo3 {
+				regulator-always-on;
+				regulator-min-microvolt = <3300000>;
+				regulator-max-microvolt = <3300000>;
+				regulator-name = "vcc33-io-pd-emmc-sd-usb-uart-1";
+			};
+
+			reg_bldo1: bldo1 {
+				regulator-always-on;
+				regulator-min-microvolt = <1800000>;
+				regulator-max-microvolt = <1800000>;
+				regulator-name = "vcc18-dram-bias-pll";
+			};
+
+			reg_bldo2: bldo2 {
+				regulator-always-on;
+				regulator-min-microvolt = <1800000>;
+				regulator-max-microvolt = <1800000>;
+				regulator-name = "vcc-efuse-pcie-hdmi-pc";
+			};
+
+			bldo3 {
+				/* unused */
+			};
+
+			bldo4 {
+				/* unused */
+			};
+
+			reg_cldo1: cldo1 {
+				regulator-always-on;
+				regulator-min-microvolt = <3300000>;
+				regulator-max-microvolt = <3300000>;
+				regulator-name = "vcc33-io-pd-emmc-sd-usb-uart-2";
+			};
+
+			cldo2 {
+				/* unused */
+			};
+
+			cldo3 {
+				/* unused */
+			};
+
+			reg_dcdca: dcdca {
+				regulator-always-on;
+				regulator-min-microvolt = <800000>;
+				regulator-max-microvolt = <1160000>;
+				regulator-ramp-delay = <2500>;
+				regulator-name = "vdd-cpu";
+			};
+
+			reg_dcdcc: dcdcc {
+				regulator-enable-ramp-delay = <32000>;
+				regulator-min-microvolt = <810000>;
+				regulator-max-microvolt = <1080000>;
+				regulator-ramp-delay = <2500>;
+				regulator-name = "vdd-gpu";
+			};
+
+			reg_dcdcd: dcdcd {
+				regulator-always-on;
+				regulator-min-microvolt = <960000>;
+				regulator-max-microvolt = <960000>;
+				regulator-name = "vdd-sys";
+			};
+
+			reg_dcdce: dcdce {
+				regulator-always-on;
+				regulator-min-microvolt = <1200000>;
+				regulator-max-microvolt = <1200000>;
+				regulator-name = "vcc-dram";
+			};
+
+			sw {
+				/* unused */
+			};
+		};
+	};
+};
+
+&r_ir {
+	status = "okay";
+};
+
+&rtc {
+	clocks = <&ext_osc32k>;
+};
+
+&uart0 {
+	pinctrl-names = "default";
+	pinctrl-0 = <&uart0_ph_pins>;
+	status = "okay";
+};
+
+/* There's the BT part of the AP6256 connected to that UART */
+&uart1 {
+	pinctrl-names = "default";
+	pinctrl-0 = <&uart1_pins>, <&uart1_rts_cts_pins>;
+	uart-has-rtscts;
+	status = "okay";
+
+	bluetooth {
+		compatible = "brcm,bcm4345c5";
+		clocks = <&rtc 1>;
+		clock-names = "lpo";
+		device-wakeup-gpios = <&r_pio 1 2 GPIO_ACTIVE_HIGH>; /* PM2 */
+		host-wakeup-gpios = <&r_pio 1 1 GPIO_ACTIVE_HIGH>; /* PM1 */
+		shutdown-gpios = <&r_pio 1 4 GPIO_ACTIVE_HIGH>; /* PM4 */
+		max-speed = <1500000>;
+	};
+};
+
+&usb2otg {
+	/*
+	 * This board doesn't have a controllable VBUS even though it
+	 * does have an ID pin. Using it as anything but a USB host is
+	 * unsafe.
+	 */
+	dr_mode = "host";
+	status = "okay";
+};
+
+&usb2phy {
+	usb0_id_det-gpios = <&pio 2 15 GPIO_ACTIVE_HIGH>; /* PC15 */
+	usb0_vbus-supply = <&reg_vcc5v>;
+	usb3_vbus-supply = <&reg_vcc5v>;
+	status = "okay";
+};
+
+&usb3phy {
+	status = "okay";
+};
diff --git a/board/sunxi/MAINTAINERS b/board/sunxi/MAINTAINERS
index 1b37a9899edd..95b4df83e0a9 100644
--- a/board/sunxi/MAINTAINERS
+++ b/board/sunxi/MAINTAINERS
@@ -385,6 +385,11 @@ M:	Icenowy Zheng <icenowy@aosc.io>
 S:	Maintained
 F:	configs/teres_i_defconfig
 
+ORANGEPI 3 BOARD
+M:	Andre Heider <a.heider@gmail.com>
+S:	Maintained
+F:	configs/orangepi_3_defconfig
+
 ORANGEPI LITE2 BOARD
 M:	Jagan Teki <jagan@amarulasolutions.com>
 S:	Maintained
diff --git a/configs/orangepi_3_defconfig b/configs/orangepi_3_defconfig
new file mode 100644
index 000000000000..6a4a11739213
--- /dev/null
+++ b/configs/orangepi_3_defconfig
@@ -0,0 +1,13 @@
+CONFIG_ARM=y
+CONFIG_ARCH_SUNXI=y
+CONFIG_SPL=y
+CONFIG_MACH_SUN50I_H6=y
+CONFIG_SUNXI_DRAM_H6_LPDDR3=y
+CONFIG_MMC0_CD_PIN="PF6"
+CONFIG_MMC_SUNXI_SLOT_EXTRA=2
+CONFIG_FIXUP_BDADDR="brcm,bcm4345c5"
+# CONFIG_PSCI_RESET is not set
+CONFIG_DEFAULT_DEVICE_TREE="sun50i-h6-orangepi-3"
+# CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set
+CONFIG_USB_EHCI_HCD=y
+CONFIG_USB_OHCI_HCD=y
-- 
2.30.0

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

* [PATCH v5 1/3] sunxi: board: extract creating a unique sid into a helper function
  2021-01-03 18:36 ` [PATCH v5 1/3] sunxi: board: extract creating a unique sid into a helper function Jernej Skrabec
@ 2021-01-07 22:51   ` André Przywara
  0 siblings, 0 replies; 7+ messages in thread
From: André Przywara @ 2021-01-07 22:51 UTC (permalink / raw)
  To: u-boot

On 03/01/2021 18:36, Jernej Skrabec wrote:
> From: Andre Heider <a.heider@gmail.com>
> 
> Refactor setup_environment() so we can use the created sid for a
> Bluetooth address too.
> 
> Signed-off-by: Andre Heider <a.heider@gmail.com>
> Acked-by: Maxime Ripard <mripard@kernel.org>
> [rebased]
> Signed-off-by: Jernej Skrabec <jernej.skrabec@siol.net>

Confirmed to be indeed just moving this code out and reversing the check.

Reviewed-by: Andre Przywara <andre.przywara@arm.com>

Cheers,
Andre

> ---
>  board/sunxi/board.c | 121 ++++++++++++++++++++++++--------------------
>  1 file changed, 66 insertions(+), 55 deletions(-)
> 
> diff --git a/board/sunxi/board.c b/board/sunxi/board.c
> index 708a27ed78e9..4a29e351141b 100644
> --- a/board/sunxi/board.c
> +++ b/board/sunxi/board.c
> @@ -789,6 +789,38 @@ static void parse_spl_header(const uint32_t spl_addr)
>  	env_set_hex("fel_scriptaddr", spl->fel_script_address);
>  }
>  
> +static bool get_unique_sid(unsigned int *sid)
> +{
> +	if (sunxi_get_sid(sid) != 0)
> +		return false;
> +
> +	if (!sid[0])
> +		return false;
> +
> +	/*
> +	 * The single words 1 - 3 of the SID have quite a few bits
> +	 * which are the same on many models, so we take a crc32
> +	 * of all 3 words, to get a more unique value.
> +	 *
> +	 * Note we only do this on newer SoCs as we cannot change
> +	 * the algorithm on older SoCs since those have been using
> +	 * fixed mac-addresses based on only using word 3 for a
> +	 * long time and changing a fixed mac-address with an
> +	 * u-boot update is not good.
> +	 */
> +#if !defined(CONFIG_MACH_SUN4I) && !defined(CONFIG_MACH_SUN5I) && \
> +    !defined(CONFIG_MACH_SUN6I) && !defined(CONFIG_MACH_SUN7I) && \
> +    !defined(CONFIG_MACH_SUN8I_A23) && !defined(CONFIG_MACH_SUN8I_A33)
> +	sid[3] = crc32(0, (unsigned char *)&sid[1], 12);
> +#endif
> +
> +	/* Ensure the NIC specific bytes of the mac are not all 0 */
> +	if ((sid[3] & 0xffffff) == 0)
> +		sid[3] |= 0x800000;
> +
> +	return true;
> +}
> +
>  /*
>   * Note this function gets called multiple times.
>   * It must not make any changes to env variables which already exist.
> @@ -799,61 +831,40 @@ static void setup_environment(const void *fdt)
>  	unsigned int sid[4];
>  	uint8_t mac_addr[6];
>  	char ethaddr[16];
> -	int i, ret;
> -
> -	ret = sunxi_get_sid(sid);
> -	if (ret == 0 && sid[0] != 0) {
> -		/*
> -		 * The single words 1 - 3 of the SID have quite a few bits
> -		 * which are the same on many models, so we take a crc32
> -		 * of all 3 words, to get a more unique value.
> -		 *
> -		 * Note we only do this on newer SoCs as we cannot change
> -		 * the algorithm on older SoCs since those have been using
> -		 * fixed mac-addresses based on only using word 3 for a
> -		 * long time and changing a fixed mac-address with an
> -		 * u-boot update is not good.
> -		 */
> -#if !defined(CONFIG_MACH_SUN4I) && !defined(CONFIG_MACH_SUN5I) && \
> -    !defined(CONFIG_MACH_SUN6I) && !defined(CONFIG_MACH_SUN7I) && \
> -    !defined(CONFIG_MACH_SUN8I_A23) && !defined(CONFIG_MACH_SUN8I_A33)
> -		sid[3] = crc32(0, (unsigned char *)&sid[1], 12);
> -#endif
> -
> -		/* Ensure the NIC specific bytes of the mac are not all 0 */
> -		if ((sid[3] & 0xffffff) == 0)
> -			sid[3] |= 0x800000;
> -
> -		for (i = 0; i < 4; i++) {
> -			sprintf(ethaddr, "ethernet%d", i);
> -			if (!fdt_get_alias(fdt, ethaddr))
> -				continue;
> -
> -			if (i == 0)
> -				strcpy(ethaddr, "ethaddr");
> -			else
> -				sprintf(ethaddr, "eth%daddr", i);
> -
> -			if (env_get(ethaddr))
> -				continue;
> -
> -			/* Non OUI / registered MAC address */
> -			mac_addr[0] = (i << 4) | 0x02;
> -			mac_addr[1] = (sid[0] >>  0) & 0xff;
> -			mac_addr[2] = (sid[3] >> 24) & 0xff;
> -			mac_addr[3] = (sid[3] >> 16) & 0xff;
> -			mac_addr[4] = (sid[3] >>  8) & 0xff;
> -			mac_addr[5] = (sid[3] >>  0) & 0xff;
> -
> -			eth_env_set_enetaddr(ethaddr, mac_addr);
> -		}
> -
> -		if (!env_get("serial#")) {
> -			snprintf(serial_string, sizeof(serial_string),
> -				"%08x%08x", sid[0], sid[3]);
> -
> -			env_set("serial#", serial_string);
> -		}
> +	int i;
> +
> +	if (!get_unique_sid(sid))
> +		return;
> +
> +	for (i = 0; i < 4; i++) {
> +		sprintf(ethaddr, "ethernet%d", i);
> +		if (!fdt_get_alias(fdt, ethaddr))
> +			continue;
> +
> +		if (i == 0)
> +			strcpy(ethaddr, "ethaddr");
> +		else
> +			sprintf(ethaddr, "eth%daddr", i);
> +
> +		if (env_get(ethaddr))
> +			continue;
> +
> +		/* Non OUI / registered MAC address */
> +		mac_addr[0] = (i << 4) | 0x02;
> +		mac_addr[1] = (sid[0] >>  0) & 0xff;
> +		mac_addr[2] = (sid[3] >> 24) & 0xff;
> +		mac_addr[3] = (sid[3] >> 16) & 0xff;
> +		mac_addr[4] = (sid[3] >>  8) & 0xff;
> +		mac_addr[5] = (sid[3] >>  0) & 0xff;
> +
> +		eth_env_set_enetaddr(ethaddr, mac_addr);
> +	}
> +
> +	if (!env_get("serial#")) {
> +		snprintf(serial_string, sizeof(serial_string),
> +			"%08x%08x", sid[0], sid[3]);
> +
> +		env_set("serial#", serial_string);
>  	}
>  }
>  
> 

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

* [PATCH v5 2/3] arm: sunxi: add a config option to fixup a Bluetooth address
  2021-01-03 18:36 ` [PATCH v5 2/3] arm: sunxi: add a config option to fixup a Bluetooth address Jernej Skrabec
@ 2021-01-07 22:51   ` André Przywara
  0 siblings, 0 replies; 7+ messages in thread
From: André Przywara @ 2021-01-07 22:51 UTC (permalink / raw)
  To: u-boot

On 03/01/2021 18:36, Jernej Skrabec wrote:

Hi,

> From: Andre Heider <a.heider@gmail.com>
> 
> Some Bluetooth controllers, like the BCM4345C5 of the Orange Pi 3,
> ship with the controller default address.
> 
> Add a config option to fix it up so it can function properly.
> 
> Signed-off-by: Andre Heider <a.heider@gmail.com>
> Tested-by: Ondrej Jirman <megous@megous.com>
> Acked-by: Maxime Ripard <mripard@kernel.org>
> [rebased]
> Signed-off-by: Jernej Skrabec <jernej.skrabec@siol.net>
> ---
>  arch/arm/mach-sunxi/Kconfig | 11 +++++++++++
>  board/sunxi/board.c         | 34 ++++++++++++++++++++++++++++++++++
>  2 files changed, 45 insertions(+)
> 
> diff --git a/arch/arm/mach-sunxi/Kconfig b/arch/arm/mach-sunxi/Kconfig
> index 49ef217f08c0..269aef5f01a1 100644
> --- a/arch/arm/mach-sunxi/Kconfig
> +++ b/arch/arm/mach-sunxi/Kconfig
> @@ -1016,4 +1016,15 @@ config PINEPHONE_DT_SELECTION
>  	  Enable this option to automatically select the device tree for the
>  	  correct PinePhone hardware revision during boot.
>  
> +config FIXUP_BDADDR

This naming is a bit generic, and the BD in there is slightly confusing.
I understand that this is the official term used in Bluetooth land, but
it would be helpful to put this piece of context into the symbol name as
well. Especially since "bd" is used for "board" all over the place in
U-Boot.
Maybe stay closer to the actual content of the symbol, which is the DT
compatible *name*, and *not* an address? BLUETOOTH_DT_DEVICE_FIXUP or
the like?

> +	string "Fixup the Bluetooth controller address"
> +	default ""
> +	help
> +	  This option specifies the DT compatible name of the Bluetooth
> +	  controller for which to set the "local-bd-address" property.
> +	  Set this option if your device ships with the Bluetooth controller
> +	  default address.
> +	  The used address is "bdaddr" if set, and "ethaddr" with the LSB
> +	  flipped elsewise.
> +
>  endif
> diff --git a/board/sunxi/board.c b/board/sunxi/board.c
> index 4a29e351141b..d19119b7eb36 100644
> --- a/board/sunxi/board.c
> +++ b/board/sunxi/board.c
> @@ -908,6 +908,38 @@ int misc_init_r(void)
>  	return 0;
>  }
>  
> +static void fixup_bd_address(void *blob)

similar comment to the naming in this function, to avoid the "bd" in here.

The code itself looks fine, it's really just about the naming.
The variable names inside the function are fine, since the context is clear.

Thanks!
Andre


> +{
> +	/* Some devices ship with a Bluetooth controller default address.
> +	 * Set a valid address through the device tree.
> +	 */
> +	uchar tmp[ETH_ALEN], bdaddr[ETH_ALEN];
> +	unsigned int sid[4];
> +	int i;
> +
> +	if (!CONFIG_FIXUP_BDADDR[0])
> +		return;
> +
> +	if (eth_env_get_enetaddr("bdaddr", tmp)) {
> +		/* Convert between the binary formats of the corresponding stacks */
> +		for (i = 0; i < ETH_ALEN; ++i)
> +			bdaddr[i] = tmp[ETH_ALEN - i - 1];
> +	} else {
> +		if (!get_unique_sid(sid))
> +			return;
> +
> +		bdaddr[0] = ((sid[3] >>  0) & 0xff) ^ 1;
> +		bdaddr[1] = (sid[3] >>  8) & 0xff;
> +		bdaddr[2] = (sid[3] >> 16) & 0xff;
> +		bdaddr[3] = (sid[3] >> 24) & 0xff;
> +		bdaddr[4] = (sid[0] >>  0) & 0xff;
> +		bdaddr[5] = 0x02;
> +	}
> +
> +	do_fixup_by_compat(blob, CONFIG_FIXUP_BDADDR,
> +			   "local-bd-address", bdaddr, ETH_ALEN, 1);
> +}
> +
>  int ft_board_setup(void *blob, struct bd_info *bd)
>  {
>  	int __maybe_unused r;
> @@ -918,6 +950,8 @@ int ft_board_setup(void *blob, struct bd_info *bd)
>  	 */
>  	setup_environment(blob);
>  
> +	fixup_bd_address(blob);
> +
>  #ifdef CONFIG_VIDEO_DT_SIMPLEFB
>  	r = sunxi_simplefb_setup(blob);
>  	if (r)
> 

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

* [PATCH v5 3/3] arm64: dts: sun50i: Add support for Orange Pi 3
  2021-01-03 18:36 ` [PATCH v5 3/3] arm64: dts: sun50i: Add support for Orange Pi 3 Jernej Skrabec
@ 2021-01-07 22:53   ` André Przywara
  0 siblings, 0 replies; 7+ messages in thread
From: André Przywara @ 2021-01-07 22:53 UTC (permalink / raw)
  To: u-boot

On 03/01/2021 18:36, Jernej Skrabec wrote:
> From: Andre Heider <a.heider@gmail.com>

Hi,

> dts file is taken from Linux 5.11-rc1 tag.
> 
> The Bluetooth controller of this device ships with a default address,
> use the new CONFIG_FIXUP_BDADDR option to fix it up.
> 
> Signed-off-by: Andre Heider <a.heider@gmail.com>
> Acked-by: Maxime Ripard <mripard@kernel.org>
> [Updated OrangePi 3 DT, rebase and config update]
> Signed-off-by: Jernej Skrabec <jernej.skrabec@siol.net>

As already mentioned, this CONFIG_PSCI_RESET removal should go.
The rest looks alright, the .dts is identical to the Linux version.

With that removed:

Reviewed-by: Andre Przywara <andre.przywara@arm.com>

Thanks,
Andre


> ---
>  arch/arm/dts/Makefile                 |   1 +
>  arch/arm/dts/sun50i-h6-orangepi-3.dts | 345 ++++++++++++++++++++++++++
>  board/sunxi/MAINTAINERS               |   5 +
>  configs/orangepi_3_defconfig          |  13 +
>  4 files changed, 364 insertions(+)
>  create mode 100644 arch/arm/dts/sun50i-h6-orangepi-3.dts
>  create mode 100644 configs/orangepi_3_defconfig
> 
> diff --git a/arch/arm/dts/Makefile b/arch/arm/dts/Makefile
> index e00aed1ec207..607571d04b25 100644
> --- a/arch/arm/dts/Makefile
> +++ b/arch/arm/dts/Makefile
> @@ -605,6 +605,7 @@ dtb-$(CONFIG_MACH_SUN50I_H5) += \
>  	sun50i-h5-orangepi-zero-plus2.dtb
>  dtb-$(CONFIG_MACH_SUN50I_H6) += \
>  	sun50i-h6-beelink-gs1.dtb \
> +	sun50i-h6-orangepi-3.dtb \
>  	sun50i-h6-orangepi-lite2.dtb \
>  	sun50i-h6-orangepi-one-plus.dtb \
>  	sun50i-h6-pine-h64.dtb \
> diff --git a/arch/arm/dts/sun50i-h6-orangepi-3.dts b/arch/arm/dts/sun50i-h6-orangepi-3.dts
> new file mode 100644
> index 000000000000..15c9dd8c4479
> --- /dev/null
> +++ b/arch/arm/dts/sun50i-h6-orangepi-3.dts
> @@ -0,0 +1,345 @@
> +// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
> +// Copyright (C) 2019 Ond?ej Jirman <megous@megous.com>
> +
> +/dts-v1/;
> +
> +#include "sun50i-h6.dtsi"
> +#include "sun50i-h6-cpu-opp.dtsi"
> +
> +#include <dt-bindings/gpio/gpio.h>
> +
> +/ {
> +	model = "OrangePi 3";
> +	compatible = "xunlong,orangepi-3", "allwinner,sun50i-h6";
> +
> +	aliases {
> +		serial0 = &uart0;
> +		serial1 = &uart1;
> +	};
> +
> +	chosen {
> +		stdout-path = "serial0:115200n8";
> +	};
> +
> +	connector {
> +		compatible = "hdmi-connector";
> +		ddc-en-gpios = <&pio 7 2 GPIO_ACTIVE_HIGH>; /* PH2 */
> +		type = "a";
> +
> +		port {
> +			hdmi_con_in: endpoint {
> +				remote-endpoint = <&hdmi_out_con>;
> +			};
> +		};
> +	};
> +
> +	ext_osc32k: ext_osc32k_clk {
> +		#clock-cells = <0>;
> +		compatible = "fixed-clock";
> +		clock-frequency = <32768>;
> +		clock-output-names = "ext_osc32k";
> +	};
> +
> +	leds {
> +		compatible = "gpio-leds";
> +
> +		power {
> +			label = "orangepi:red:power";
> +			gpios = <&r_pio 0 4 GPIO_ACTIVE_HIGH>; /* PL4 */
> +			default-state = "on";
> +		};
> +
> +		status {
> +			label = "orangepi:green:status";
> +			gpios = <&r_pio 0 7 GPIO_ACTIVE_HIGH>; /* PL7 */
> +		};
> +	};
> +
> +	reg_vcc5v: vcc5v {
> +		/* board wide 5V supply directly from the DC jack */
> +		compatible = "regulator-fixed";
> +		regulator-name = "vcc-5v";
> +		regulator-min-microvolt = <5000000>;
> +		regulator-max-microvolt = <5000000>;
> +		regulator-always-on;
> +	};
> +
> +	reg_vcc33_wifi: vcc33-wifi {
> +		/* Always on 3.3V regulator for WiFi and BT */
> +		compatible = "regulator-fixed";
> +		regulator-name = "vcc33-wifi";
> +		regulator-min-microvolt = <3300000>;
> +		regulator-max-microvolt = <3300000>;
> +		regulator-always-on;
> +		vin-supply = <&reg_vcc5v>;
> +	};
> +
> +	reg_vcc_wifi_io: vcc-wifi-io {
> +		/* Always on 1.8V/300mA regulator for WiFi and BT IO */
> +		compatible = "regulator-fixed";
> +		regulator-name = "vcc-wifi-io";
> +		regulator-min-microvolt = <1800000>;
> +		regulator-max-microvolt = <1800000>;
> +		regulator-always-on;
> +		vin-supply = <&reg_vcc33_wifi>;
> +	};
> +
> +	wifi_pwrseq: wifi-pwrseq {
> +		compatible = "mmc-pwrseq-simple";
> +		clocks = <&rtc 1>;
> +		clock-names = "ext_clock";
> +		reset-gpios = <&r_pio 1 3 GPIO_ACTIVE_LOW>; /* PM3 */
> +		post-power-on-delay-ms = <200>;
> +	};
> +};
> +
> +&cpu0 {
> +	cpu-supply = <&reg_dcdca>;
> +};
> +
> +&de {
> +	status = "okay";
> +};
> +
> +&dwc3 {
> +	status = "okay";
> +};
> +
> +&ehci0 {
> +	status = "okay";
> +};
> +
> +&ehci3 {
> +	status = "okay";
> +};
> +
> +&gpu {
> +	mali-supply = <&reg_dcdcc>;
> +	status = "okay";
> +};
> +
> +&hdmi {
> +	status = "okay";
> +};
> +
> +&hdmi_out {
> +	hdmi_out_con: endpoint {
> +		remote-endpoint = <&hdmi_con_in>;
> +	};
> +};
> +
> +&mmc0 {
> +	vmmc-supply = <&reg_cldo1>;
> +	cd-gpios = <&pio 5 6 GPIO_ACTIVE_LOW>; /* PF6 */
> +	bus-width = <4>;
> +	status = "okay";
> +};
> +
> +&mmc1 {
> +	vmmc-supply = <&reg_vcc33_wifi>;
> +	vqmmc-supply = <&reg_vcc_wifi_io>;
> +	mmc-pwrseq = <&wifi_pwrseq>;
> +	bus-width = <4>;
> +	non-removable;
> +	status = "okay";
> +
> +	brcm: sdio-wifi at 1 {
> +		reg = <1>;
> +		compatible = "brcm,bcm4329-fmac";
> +		interrupt-parent = <&r_pio>;
> +		interrupts = <1 0 IRQ_TYPE_LEVEL_LOW>; /* PM0 */
> +		interrupt-names = "host-wake";
> +	};
> +};
> +
> +&mmc2 {
> +	vmmc-supply = <&reg_cldo1>;
> +	vqmmc-supply = <&reg_bldo2>;
> +	cap-mmc-hw-reset;
> +	non-removable;
> +	bus-width = <8>;
> +	status = "okay";
> +};
> +
> +&ohci0 {
> +	status = "okay";
> +};
> +
> +&ohci3 {
> +	status = "okay";
> +};
> +
> +&pio {
> +	vcc-pc-supply = <&reg_bldo2>;
> +	vcc-pd-supply = <&reg_cldo1>;
> +	vcc-pg-supply = <&reg_vcc_wifi_io>;
> +};
> +
> +&r_i2c {
> +	status = "okay";
> +
> +	axp805: pmic at 36 {
> +		compatible = "x-powers,axp805", "x-powers,axp806";
> +		reg = <0x36>;
> +		interrupt-parent = <&r_intc>;
> +		interrupts = <0 IRQ_TYPE_LEVEL_LOW>;
> +		interrupt-controller;
> +		#interrupt-cells = <1>;
> +		x-powers,self-working-mode;
> +		vina-supply = <&reg_vcc5v>;
> +		vinb-supply = <&reg_vcc5v>;
> +		vinc-supply = <&reg_vcc5v>;
> +		vind-supply = <&reg_vcc5v>;
> +		vine-supply = <&reg_vcc5v>;
> +		aldoin-supply = <&reg_vcc5v>;
> +		bldoin-supply = <&reg_vcc5v>;
> +		cldoin-supply = <&reg_vcc5v>;
> +
> +		regulators {
> +			reg_aldo1: aldo1 {
> +				regulator-always-on;
> +				regulator-min-microvolt = <3300000>;
> +				regulator-max-microvolt = <3300000>;
> +				regulator-name = "vcc-pl-led-ir";
> +			};
> +
> +			reg_aldo2: aldo2 {
> +				regulator-min-microvolt = <3300000>;
> +				regulator-max-microvolt = <3300000>;
> +				regulator-name = "vcc33-audio-tv-ephy-mac";
> +			};
> +
> +			/* ALDO3 is shorted to CLDO1 */
> +			reg_aldo3: aldo3 {
> +				regulator-always-on;
> +				regulator-min-microvolt = <3300000>;
> +				regulator-max-microvolt = <3300000>;
> +				regulator-name = "vcc33-io-pd-emmc-sd-usb-uart-1";
> +			};
> +
> +			reg_bldo1: bldo1 {
> +				regulator-always-on;
> +				regulator-min-microvolt = <1800000>;
> +				regulator-max-microvolt = <1800000>;
> +				regulator-name = "vcc18-dram-bias-pll";
> +			};
> +
> +			reg_bldo2: bldo2 {
> +				regulator-always-on;
> +				regulator-min-microvolt = <1800000>;
> +				regulator-max-microvolt = <1800000>;
> +				regulator-name = "vcc-efuse-pcie-hdmi-pc";
> +			};
> +
> +			bldo3 {
> +				/* unused */
> +			};
> +
> +			bldo4 {
> +				/* unused */
> +			};
> +
> +			reg_cldo1: cldo1 {
> +				regulator-always-on;
> +				regulator-min-microvolt = <3300000>;
> +				regulator-max-microvolt = <3300000>;
> +				regulator-name = "vcc33-io-pd-emmc-sd-usb-uart-2";
> +			};
> +
> +			cldo2 {
> +				/* unused */
> +			};
> +
> +			cldo3 {
> +				/* unused */
> +			};
> +
> +			reg_dcdca: dcdca {
> +				regulator-always-on;
> +				regulator-min-microvolt = <800000>;
> +				regulator-max-microvolt = <1160000>;
> +				regulator-ramp-delay = <2500>;
> +				regulator-name = "vdd-cpu";
> +			};
> +
> +			reg_dcdcc: dcdcc {
> +				regulator-enable-ramp-delay = <32000>;
> +				regulator-min-microvolt = <810000>;
> +				regulator-max-microvolt = <1080000>;
> +				regulator-ramp-delay = <2500>;
> +				regulator-name = "vdd-gpu";
> +			};
> +
> +			reg_dcdcd: dcdcd {
> +				regulator-always-on;
> +				regulator-min-microvolt = <960000>;
> +				regulator-max-microvolt = <960000>;
> +				regulator-name = "vdd-sys";
> +			};
> +
> +			reg_dcdce: dcdce {
> +				regulator-always-on;
> +				regulator-min-microvolt = <1200000>;
> +				regulator-max-microvolt = <1200000>;
> +				regulator-name = "vcc-dram";
> +			};
> +
> +			sw {
> +				/* unused */
> +			};
> +		};
> +	};
> +};
> +
> +&r_ir {
> +	status = "okay";
> +};
> +
> +&rtc {
> +	clocks = <&ext_osc32k>;
> +};
> +
> +&uart0 {
> +	pinctrl-names = "default";
> +	pinctrl-0 = <&uart0_ph_pins>;
> +	status = "okay";
> +};
> +
> +/* There's the BT part of the AP6256 connected to that UART */
> +&uart1 {
> +	pinctrl-names = "default";
> +	pinctrl-0 = <&uart1_pins>, <&uart1_rts_cts_pins>;
> +	uart-has-rtscts;
> +	status = "okay";
> +
> +	bluetooth {
> +		compatible = "brcm,bcm4345c5";
> +		clocks = <&rtc 1>;
> +		clock-names = "lpo";
> +		device-wakeup-gpios = <&r_pio 1 2 GPIO_ACTIVE_HIGH>; /* PM2 */
> +		host-wakeup-gpios = <&r_pio 1 1 GPIO_ACTIVE_HIGH>; /* PM1 */
> +		shutdown-gpios = <&r_pio 1 4 GPIO_ACTIVE_HIGH>; /* PM4 */
> +		max-speed = <1500000>;
> +	};
> +};
> +
> +&usb2otg {
> +	/*
> +	 * This board doesn't have a controllable VBUS even though it
> +	 * does have an ID pin. Using it as anything but a USB host is
> +	 * unsafe.
> +	 */
> +	dr_mode = "host";
> +	status = "okay";
> +};
> +
> +&usb2phy {
> +	usb0_id_det-gpios = <&pio 2 15 GPIO_ACTIVE_HIGH>; /* PC15 */
> +	usb0_vbus-supply = <&reg_vcc5v>;
> +	usb3_vbus-supply = <&reg_vcc5v>;
> +	status = "okay";
> +};
> +
> +&usb3phy {
> +	status = "okay";
> +};
> diff --git a/board/sunxi/MAINTAINERS b/board/sunxi/MAINTAINERS
> index 1b37a9899edd..95b4df83e0a9 100644
> --- a/board/sunxi/MAINTAINERS
> +++ b/board/sunxi/MAINTAINERS
> @@ -385,6 +385,11 @@ M:	Icenowy Zheng <icenowy@aosc.io>
>  S:	Maintained
>  F:	configs/teres_i_defconfig
>  
> +ORANGEPI 3 BOARD
> +M:	Andre Heider <a.heider@gmail.com>
> +S:	Maintained
> +F:	configs/orangepi_3_defconfig
> +
>  ORANGEPI LITE2 BOARD
>  M:	Jagan Teki <jagan@amarulasolutions.com>
>  S:	Maintained
> diff --git a/configs/orangepi_3_defconfig b/configs/orangepi_3_defconfig
> new file mode 100644
> index 000000000000..6a4a11739213
> --- /dev/null
> +++ b/configs/orangepi_3_defconfig
> @@ -0,0 +1,13 @@
> +CONFIG_ARM=y
> +CONFIG_ARCH_SUNXI=y
> +CONFIG_SPL=y
> +CONFIG_MACH_SUN50I_H6=y
> +CONFIG_SUNXI_DRAM_H6_LPDDR3=y
> +CONFIG_MMC0_CD_PIN="PF6"
> +CONFIG_MMC_SUNXI_SLOT_EXTRA=2
> +CONFIG_FIXUP_BDADDR="brcm,bcm4345c5"
> +# CONFIG_PSCI_RESET is not set
> +CONFIG_DEFAULT_DEVICE_TREE="sun50i-h6-orangepi-3"
> +# CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set
> +CONFIG_USB_EHCI_HCD=y
> +CONFIG_USB_OHCI_HCD=y
> 

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

end of thread, other threads:[~2021-01-07 22:53 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-01-03 18:36 [PATCH v5 0/3] sunxi: Add support for OrangePi 3 Jernej Skrabec
2021-01-03 18:36 ` [PATCH v5 1/3] sunxi: board: extract creating a unique sid into a helper function Jernej Skrabec
2021-01-07 22:51   ` André Przywara
2021-01-03 18:36 ` [PATCH v5 2/3] arm: sunxi: add a config option to fixup a Bluetooth address Jernej Skrabec
2021-01-07 22:51   ` André Przywara
2021-01-03 18:36 ` [PATCH v5 3/3] arm64: dts: sun50i: Add support for Orange Pi 3 Jernej Skrabec
2021-01-07 22:53   ` André Przywara

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.