Explorar el Código

uboot-d1: update to 2024.01

Update to version 2024.01 to remove upstream patches.
The remaining patches come from this repository:
https://github.com/smaeul/u-boot/tree/d1-wip

[for Dongshan Nezha STU, Nezha D1]
Tested-by: Zoltan HERPAI <[email protected]>
Signed-off-by: Chukun Pan <[email protected]>
Chukun Pan hace 3 meses
padre
commit
a8a0d9c12f
Se han modificado 100 ficheros con 4809 adiciones y 6330 borrados
  1. 2 5
      package/boot/uboot-d1/Makefile
  2. 0 197
      package/boot/uboot-d1/patches/0001-ARM-dts-sun8i-A33-Add-iNet-U70B-REV01.patch
  3. 74 0
      package/boot/uboot-d1/patches/0002-riscv-cpu-Add-skeleton-for-T-HEAD-CPUs.patch
  4. 0 46
      package/boot/uboot-d1/patches/0002-sunxi-Add-iNet_U70B_rev1_defconfig.patch
  5. 0 85
      package/boot/uboot-d1/patches/0003-Adapt-iNet-U70B-REV01-for-development-FEL-serial.patch
  6. 53 0
      package/boot/uboot-d1/patches/0003-riscv-cpu-thead-Add-extension-CSR-definitions.patch
  7. 0 54
      package/boot/uboot-d1/patches/0004-ARM-dts-sun6i-mixtile-loftq-Add-USB1-VBUS-regulator.patch
  8. 72 0
      package/boot/uboot-d1/patches/0004-riscv-cpu-thead-Initialize-extension-CSRs.patch
  9. 0 97
      package/boot/uboot-d1/patches/0005-power-regulator-Add-a-driver-for-the-AXP-USB-power-s.patch
  10. 134 0
      package/boot/uboot-d1/patches/0005-riscv-cpu-thead-Add-CPU-specific-cache-operations.patch
  11. 0 122
      package/boot/uboot-d1/patches/0006-gpio-axp-sunxi-Remove-virtual-VBUS-detection-GPIO.patch
  12. 3 3
      package/boot/uboot-d1/patches/0007-fdt-Fix-bounds-check-in-devfdt_get_addr_index.patch
  13. 21 0
      package/boot/uboot-d1/patches/0008-fdt-Use-correct-parent-in-devfdt_get_addr_index.patch
  14. 0 41
      package/boot/uboot-d1/patches/0008-power-pmic-axp-Probe-the-drivevbus-regulator-from-th.patch
  15. 5 5
      package/boot/uboot-d1/patches/0009-sunxi-Fix-default-enablement-of-USB-host-drivers.patch
  16. 0 58
      package/boot/uboot-d1/patches/0010-sunxi-Remove-obsolete-USBx_VBUS_PIN-Kconfig-symbols.patch
  17. 5 5
      package/boot/uboot-d1/patches/0010-sunxi-Remove-unnecessary-Kconfig-selections.patch
  18. 0 393
      package/boot/uboot-d1/patches/0011-clk-sunxi-Add-support-for-the-D1-CCU.patch
  19. 6 9
      package/boot/uboot-d1/patches/0011-sunxi-Add-missing-dependencies-to-Kconfig-selections.patch
  20. 2 2
      package/boot/uboot-d1/patches/0012-sunxi-Hide-image-type-selection-if-SPL-is-disabled.patch
  21. 0 160
      package/boot/uboot-d1/patches/0013-clk-sunxi-Add-a-driver-for-the-legacy-A31-A23-A33-PR.patch
  22. 5 5
      package/boot/uboot-d1/patches/0013-sunxi-Share-the-board-Kconfig-across-architectures.patch
  23. 0 21
      package/boot/uboot-d1/patches/0014-clk-sunxi-Use-the-right-symbol-in-the-Makefile.patch
  24. 14 16
      package/boot/uboot-d1/patches/0014-sunxi-Move-most-Kconfig-selections-to-the-board-Kcon.patch
  25. 0 100
      package/boot/uboot-d1/patches/0015-net-sun8i-emac-Use-common-syscon-setup-for-R40.patch
  26. 20 21
      package/boot/uboot-d1/patches/0015-sunxi-Globally-enable-SUPPORT_SPL.patch
  27. 4 4
      package/boot/uboot-d1/patches/0016-sunxi-Downgrade-driver-selections-to-implications.patch
  28. 0 92
      package/boot/uboot-d1/patches/0016-sunxi-mmc-ignore-card-detect-in-SPL.patch
  29. 3 3
      package/boot/uboot-d1/patches/0017-sunxi-Enable-the-I2C-driver-by-default.patch
  30. 0 177
      package/boot/uboot-d1/patches/0017-sunxi-mmc-group-non-DM-specific-functions.patch
  31. 20 14
      package/boot/uboot-d1/patches/0018-sunxi-Move-default-values-to-the-board-Kconfig.patch
  32. 0 509
      package/boot/uboot-d1/patches/0018-sunxi-remove-CONFIG_MMC-_CD_PIN.patch
  33. 4 4
      package/boot/uboot-d1/patches/0019-sunxi-Hide-the-SUNXI_MINIMUM_DRAM_MB-symbol.patch
  34. 0 323
      package/boot/uboot-d1/patches/0019-sunxi-mmc-Move-header-to-the-driver-directory.patch
  35. 0 72
      package/boot/uboot-d1/patches/0020-pinctrl-sunxi-Add-support-for-the-D1.patch
  36. 6 5
      package/boot/uboot-d1/patches/0020-sunxi-Clean-up-the-SPL_STACK_R_ADDR-defaults.patch
  37. 4 4
      package/boot/uboot-d1/patches/0021-sunxi-Move-PRE_CON_BUF_ADDR-to-the-board-Kconfig.patch
  38. 3 3
      package/boot/uboot-d1/patches/0022-sunxi-Move-SPL_BSS_START_ADDR-to-the-board-Kconfig.patch
  39. 0 25
      package/boot/uboot-d1/patches/0023-Kconfig-Remove-an-impossible-condition.patch
  40. 5 5
      package/boot/uboot-d1/patches/0023-sunxi-Move-SPL_TEXT_BASE-to-the-board-Kconfig.patch
  41. 0 33
      package/boot/uboot-d1/patches/0024-binman-Prevent-entries-in-a-section-from-overlapping.patch
  42. 4 4
      package/boot/uboot-d1/patches/0024-sunxi-Move-SYS_LOAD_ADDR-to-the-board-Kconfig.patch
  43. 17 17
      package/boot/uboot-d1/patches/0025-sunxi-Move-TEXT_BASE-to-the-board-Kconfig.patch
  44. 0 192
      package/boot/uboot-d1/patches/0025-sunxi-binman-Enable-SPL-FIT-loading-for-32-bit-SoCs.patch
  45. 17 20
      package/boot/uboot-d1/patches/0026-sunxi-Move-most-board-options-to-the-board-Kconfig.patch
  46. 0 51
      package/boot/uboot-d1/patches/0026-sunxi-psci-Avoid-hanging-when-CPU-0-is-hot-unplugged.patch
  47. 0 295
      package/boot/uboot-d1/patches/0027-clk-sunxi-Add-NAND-clocks-and-resets.patch
  48. 8 8
      package/boot/uboot-d1/patches/0027-env-sunxi-Replace-ARCH_SUNXI-with-BOARD_SUNXI.patch
  49. 29 30
      package/boot/uboot-d1/patches/0028-drivers-sunxi-Replace-ARCH_SUNXI-with-BOARD_SUNXI.patch
  50. 0 120
      package/boot/uboot-d1/patches/0028-pinctrl-sunxi-Add-NAND-pinmuxes.patch
  51. 2 2
      package/boot/uboot-d1/patches/0029-disk-sunxi-Replace-ARCH_SUNXI-with-BOARD_SUNXI.patch
  52. 0 32
      package/boot/uboot-d1/patches/0029-mtd-nand-sunxi-Remove-an-unnecessary-check.patch
  53. 0 203
      package/boot/uboot-d1/patches/0030-mtd-nand-sunxi-Convert-from-fdtdec-to-ofnode.patch
  54. 7 7
      package/boot/uboot-d1/patches/0030-spl-sunxi-Replace-ARCH_SUNXI-with-BOARD_SUNXI.patch
  55. 0 172
      package/boot/uboot-d1/patches/0031-mtd-nand-sunxi-Convert-to-the-driver-model.patch
  56. 6 5
      package/boot/uboot-d1/patches/0031-serial-ns16550-Enable-clocks-during-probe.patch
  57. 0 31
      package/boot/uboot-d1/patches/0032-sunxi-DT-H6-Add-USB3-to-Pine-H64-DTS.patch
  58. 102 0
      package/boot/uboot-d1/patches/0032-sunxi-binman-Move-BL31-and-SCP-firmware-addresses-to.patch
  59. 90 0
      package/boot/uboot-d1/patches/0033-sunxi-binman-Support-FIT-generation-for-32-bit-SoCs.patch
  60. 0 441
      package/boot/uboot-d1/patches/0033-tools-mkimage-Add-Allwinner-TOC1-support.patch
  61. 0 33
      package/boot/uboot-d1/patches/0034-phy-sun4i-usb-Do-not-drive-VBUS-with-external-VBUS-p.patch
  62. 38 0
      package/boot/uboot-d1/patches/0034-sunxi-Enable-SPL-FIT-loading-for-32-bit-SoCs.patch
  63. 0 163
      package/boot/uboot-d1/patches/0035-mtd-nand-sunxi-Pass-the-device-to-the-init-function.patch
  64. 34 29
      package/boot/uboot-d1/patches/0035-power-regulator-Add-a-driver-for-the-AXP-PMIC-drivev.patch
  65. 0 120
      package/boot/uboot-d1/patches/0036-sunxi-Enable-PHY_SUN4I_USB-by-default-for-new-SoCs.patch
  66. 222 0
      package/boot/uboot-d1/patches/0036-sunxi-Enable-PMIC-drivevbus-regulator-support-for-US.patch
  67. 11 9
      package/boot/uboot-d1/patches/0037-phy-sun4i-usb-Control-supplies-via-the-regulator-ucl.patch
  68. 0 183
      package/boot/uboot-d1/patches/0037-sunxi-psci-Add-support-for-H3-CPU-0-hotplug.patch
  69. 0 155
      package/boot/uboot-d1/patches/0038-remoteproc-Add-a-driver-for-the-Allwinner-AR100.patch
  70. 1016 0
      package/boot/uboot-d1/patches/0038-sunxi-Remove-obsolete-USBx_VBUS_PIN-Kconfig-symbols.patch
  71. 0 40
      package/boot/uboot-d1/patches/0039-arm-dts-sunxi-h3-Add-nodes-for-AR100-remoteproc.patch
  72. 46 46
      package/boot/uboot-d1/patches/0039-gpio-axp-Remove-virtual-VBUS-enable-GPIO.patch
  73. 0 63
      package/boot/uboot-d1/patches/0040-sunxi-Enable-support-for-SCP-firmware-on-H3.patch
  74. 0 115
      package/boot/uboot-d1/patches/0041-arm-psci-Add-definitions-for-PSCI-v1.1.patch
  75. 0 29
      package/boot/uboot-d1/patches/0042-sunxi-Enable-remoteproc-on-some-H3-boards.patch
  76. 0 497
      package/boot/uboot-d1/patches/0043-sunxi-psci-Delegate-PSCI-to-SCPI.patch
  77. 0 95
      package/boot/uboot-d1/patches/0044-sunxi-Enable-SCP-SCPI-on-A33-as-well.patch
  78. 0 216
      package/boot/uboot-d1/patches/0045-phy-sun4i-usb-Use-DM_GPIO-for-id-vbus_det-GPIOs.patch
  79. 0 45
      package/boot/uboot-d1/patches/0046-ARM-dts-sunxi-Add-AXP221-and-AXP809-GPIO-nodes.patch
  80. 756 0
      package/boot/uboot-d1/patches/0048-phy-sun4i-usb-Use-DM_GPIO-for-id-vbus_det-GPIOs.patch
  81. 5 5
      package/boot/uboot-d1/patches/0049-gpio-axp-Consistently-use-the-axp_gpio-order.patch
  82. 31 31
      package/boot/uboot-d1/patches/0050-gpio-axp-Bind-via-device-tree.patch
  83. 7 7
      package/boot/uboot-d1/patches/0051-gpio-axp-Use-DM_PMIC-functions-for-register-access.patch
  84. 5 4
      package/boot/uboot-d1/patches/0052-gpio-axp-Select-variant-from-compatible-at-runtime.patch
  85. 4 4
      package/boot/uboot-d1/patches/0053-gpio-axp-Add-support-for-getting-the-pin-function.patch
  86. 5 5
      package/boot/uboot-d1/patches/0054-gpio-axp-Add-pull-down-support-for-AXP22x-AXP8xx-var.patch
  87. 3 3
      package/boot/uboot-d1/patches/0055-gpio-axp-Report-the-correct-value-for-outputs.patch
  88. 19 0
      package/boot/uboot-d1/patches/0056-fixup-sunxi-Globally-enable-SUPPORT_SPL.patch
  89. 46 0
      package/boot/uboot-d1/patches/0057-sunxi-Move-SUNXI_GEN_NCAT2-to-the-board-Kconfig.patch
  90. 64 58
      package/boot/uboot-d1/patches/0058-riscv-Add-CONFIG_TARGET_SUN20I.patch
  91. 1374 0
      package/boot/uboot-d1/patches/0059-riscv-dts-Add-Allwinner-D1-devicetrees.patch
  92. 72 0
      package/boot/uboot-d1/patches/0060-clk-sunxi-d1-Set-CPU-frequency-in-SPL.patch
  93. 54 0
      package/boot/uboot-d1/patches/0061-mmc-sunxi-Hack-up-the-driver-for-the-D1.patch
  94. 48 0
      package/boot/uboot-d1/patches/0062-ram-sunxi-Hack-up-the-driver-for-the-D1.patch
  95. 30 0
      package/boot/uboot-d1/patches/0063-regulator-Don-t-fail-when-already-enabled.patch
  96. 2 2
      package/boot/uboot-d1/patches/0064-spi-sunxi-Hack-up-the-driver-for-the-D1.patch
  97. 2 2
      package/boot/uboot-d1/patches/0065-BROKEN-spi-sunxi-Add-support-for-the-D1.patch
  98. 6 6
      package/boot/uboot-d1/patches/0066-usb-musb-new-Hack-up-the-driver-for-the-D1.patch
  99. 11 17
      package/boot/uboot-d1/patches/0067-sunxi-Add-temporary-RISC-V-version-of-board-code.patch
  100. 151 0
      package/boot/uboot-d1/patches/0068-sunxi-riscv-Add-defconfigs-for-several-boards.patch

+ 2 - 5
package/boot/uboot-d1/Makefile

@@ -6,13 +6,10 @@
 include $(TOPDIR)/rules.mk
 include $(TOPDIR)/rules.mk
 include $(INCLUDE_DIR)/kernel.mk
 include $(INCLUDE_DIR)/kernel.mk
 
 
-PKG_VERSION:=2023.01
+PKG_VERSION:=2024.01
 PKG_RELEASE:=1
 PKG_RELEASE:=1
 
 
-PKG_HASH:=69423bad380f89a0916636e89e6dcbd2e4512d584308d922d1039d1e4331950f
-
-include $(INCLUDE_DIR)/u-boot.mk
-include $(INCLUDE_DIR)/package.mk
+PKG_HASH:=b99611f1ed237bf3541bdc8434b68c96a6e05967061f992443cb30aabebef5b3
 
 
 include $(INCLUDE_DIR)/u-boot.mk
 include $(INCLUDE_DIR)/u-boot.mk
 include $(INCLUDE_DIR)/package.mk
 include $(INCLUDE_DIR)/package.mk

+ 0 - 197
package/boot/uboot-d1/patches/0001-ARM-dts-sun8i-A33-Add-iNet-U70B-REV01.patch

@@ -1,197 +0,0 @@
-From d45e64aad18e5e324425b9efbe6a0ec9e1a343da Mon Sep 17 00:00:00 2001
-From: Samuel Holland <[email protected]>
-Date: Sat, 20 Nov 2021 13:19:13 -0600
-Subject: [PATCH 01/90] ARM: dts: sun8i: A33: Add iNet U70B REV01
-
-Signed-off-by: Samuel Holland <[email protected]>
----
- arch/arm/dts/Makefile                     |   1 +
- arch/arm/dts/sun8i-a33-inet-u70b-rev1.dts | 172 ++++++++++++++++++++++
- 2 files changed, 173 insertions(+)
- create mode 100644 arch/arm/dts/sun8i-a33-inet-u70b-rev1.dts
-
---- a/arch/arm/dts/Makefile
-+++ b/arch/arm/dts/Makefile
-@@ -644,6 +644,7 @@ dtb-$(CONFIG_MACH_SUN8I_A33) += \
- 	sun8i-a33-et-q8-v1.6.dtb \
- 	sun8i-a33-ga10h-v1.1.dtb \
- 	sun8i-a33-inet-d978-rev2.dtb \
-+	sun8i-a33-inet-u70b-rev1.dtb \
- 	sun8i-a33-ippo-q8h-v1.2.dtb \
- 	sun8i-a33-olinuxino.dtb \
- 	sun8i-a33-q8-tablet.dtb \
---- /dev/null
-+++ b/arch/arm/dts/sun8i-a33-inet-u70b-rev1.dts
-@@ -0,0 +1,172 @@
-+// SPDX-License-Identifier: (GPL-2.0+ or MIT)
-+
-+/dts-v1/;
-+
-+#include "sun8i-a33.dtsi"
-+#include "sun8i-reference-design-tablet.dtsi"
-+
-+/ {
-+	model = "iNet U70B REV01";
-+	compatible = "inet-tek,inet-u70b-rev01", "allwinner,sun8i-a33";
-+
-+	aliases {
-+		ethernet0 = &rtl8723cs;
-+	};
-+
-+	panel: panel {
-+		compatible = "panel-dpi";
-+		backlight = <&backlight>;
-+		enable-gpios = <&pio 7 7 GPIO_ACTIVE_HIGH>; /* PH7 */
-+		power-supply = <&reg_dc1sw>;
-+
-+		panel-timing {
-+			clock-frequency = <51000000>;
-+			hactive = <1024>;
-+			vactive = <600>;
-+			hfront-porch = <162>;
-+			hback-porch = <158>;
-+			hsync-len = <20>;
-+			vback-porch = <25>;
-+			vfront-porch = <10>;
-+			vsync-len = <3>;
-+			hsync-active = <1>;
-+			vsync-active = <1>;
-+		};
-+
-+		port {
-+			panel_in_tcon0: endpoint {
-+				remote-endpoint = <&tcon0_out_panel>;
-+			};
-+		};
-+	};
-+
-+	speaker_amp: audio-amplifier {
-+		compatible = "simple-audio-amplifier";
-+		enable-gpios = <&pio 7 9 GPIO_ACTIVE_HIGH>; /* PH9 */
-+		sound-name-prefix = "Speaker Amp";
-+	};
-+
-+	wifi_pwrseq: wifi-pwrseq {
-+		compatible = "mmc-pwrseq-simple";
-+		reset-gpios = <&r_pio 0 6 GPIO_ACTIVE_LOW>; /* PL6 */
-+		post-power-on-delay-ms = <200>;
-+	};
-+};
-+
-+&codec {
-+	status = "okay";
-+};
-+
-+&dai {
-+	status = "okay";
-+};
-+
-+&de {
-+	status = "okay";
-+};
-+
-+&i2c1 {
-+	clock-frequency = <400000>;
-+
-+	accelerometer@18 {
-+		compatible = "bosch,bma250";
-+		reg = <0x18>;
-+		interrupt-parent = <&pio>;
-+		interrupts = <7 10 IRQ_TYPE_EDGE_RISING>; /* PH10 / EINT10 */
-+	};
-+};
-+
-+&mmc1 {
-+	pinctrl-0 = <&mmc1_pg_pins>;
-+	pinctrl-names = "default";
-+	bus-width = <4>;
-+	non-removable;
-+	vmmc-supply = <&reg_dldo1>;
-+	vqmmc-supply = <&reg_dldo2>;
-+	status = "okay";
-+
-+	rtl8723cs: wifi@1 {
-+		reg = <1>;
-+		interrupt-parent = <&r_pio>;
-+		interrupts = <0 7 IRQ_TYPE_LEVEL_LOW>; /* PL7 */
-+	};
-+};
-+
-+&nfc {
-+	status = "okay";
-+
-+	nand@0 {
-+		reg = <0>;
-+		allwinner,rb = <0>;
-+		nand-ecc-maximize;
-+	};
-+};
-+
-+&r_uart {
-+	status = "disabled";
-+};
-+
-+&reg_dldo2 {
-+	regulator-min-microvolt = <3300000>;
-+	regulator-max-microvolt = <3300000>;
-+	regulator-name = "vcc-wifi-io";
-+};
-+
-+&simplefb_lcd {
-+	status = "okay";
-+};
-+
-+&sound {
-+	simple-audio-card,aux-devs = <&codec_analog>, <&speaker_amp>;
-+	simple-audio-card,widgets = "Headphone", "Headphone Jack",
-+				    "Microphone", "Internal Microphone",
-+				    "Speaker", "Internal Speaker";
-+	simple-audio-card,routing = "Headphone Jack", "HP",
-+				    "Internal Speaker", "Speaker Amp OUTL",
-+				    "Internal Speaker", "Speaker Amp OUTR",
-+				    "Speaker Amp INL", "HP", /* PHONEOUT ??? */
-+				    "Speaker Amp INR", "HP", /* PHONEOUT ??? */
-+				    "Left DAC", "DACL",
-+				    "Right DAC", "DACR",
-+				    "ADCL", "Left ADC",
-+				    "ADCR", "Right ADC",
-+				    "MIC1", "Internal Microphone",
-+				    "MIC2", "Headset Microphone",
-+				    "Headset Microphone", "HBIAS",
-+				    "Internal Microphone", "MBIAS";
-+	status = "okay";
-+};
-+
-+&tcon0 {
-+	pinctrl-0 = <&lcd_rgb666_pins>;
-+	pinctrl-names = "default";
-+	status = "okay";
-+};
-+
-+&tcon0_out {
-+	tcon0_out_panel: endpoint {
-+		remote-endpoint = <&panel_in_tcon0>;
-+	};
-+};
-+
-+&touchscreen {
-+	reg = <0x40>;
-+	compatible = "silead,gsl1680";
-+	avdd-supply = <&reg_ldo_io1>;
-+	touchscreen-size-x = <1024>;
-+	touchscreen-size-y = <600>;
-+	status = "okay";
-+};
-+
-+&uart1 {
-+	pinctrl-0 = <&uart1_pg_pins>, <&uart1_cts_rts_pg_pins>;
-+	pinctrl-names = "default";
-+	status = "okay";
-+
-+	bluetooth {
-+		compatible = "realtek,rtl8723cs-bt";
-+		device-wake-gpios = <&r_pio 0 10 GPIO_ACTIVE_LOW>; /* PL10 */
-+		enable-gpios = <&r_pio 0 8 GPIO_ACTIVE_HIGH>; /* PL8 */
-+		host-wake-gpios = <&r_pio 0 9 GPIO_ACTIVE_HIGH>; /* PL9 */
-+	};
-+};

+ 74 - 0
package/boot/uboot-d1/patches/0002-riscv-cpu-Add-skeleton-for-T-HEAD-CPUs.patch

@@ -0,0 +1,74 @@
+From ddbe65963dec1e261c23d027602b89d18d90ae63 Mon Sep 17 00:00:00 2001
+From: Samuel Holland <[email protected]>
+Date: Sat, 4 Feb 2023 13:58:20 -0600
+Subject: [PATCH 02/68] riscv: cpu: Add skeleton for T-HEAD CPUs
+
+This is a direct copy of the existing generic CPU code.
+
+Signed-off-by: Samuel Holland <[email protected]>
+---
+ arch/riscv/cpu/thead/Makefile |  4 ++++
+ arch/riscv/cpu/thead/cpu.c    | 22 ++++++++++++++++++++++
+ arch/riscv/cpu/thead/dram.c   | 22 ++++++++++++++++++++++
+ 3 files changed, 48 insertions(+)
+ create mode 100644 arch/riscv/cpu/thead/Makefile
+ create mode 100644 arch/riscv/cpu/thead/cpu.c
+ create mode 100644 arch/riscv/cpu/thead/dram.c
+
+--- /dev/null
++++ b/arch/riscv/cpu/thead/Makefile
+@@ -0,0 +1,4 @@
++# SPDX-License-Identifier: GPL-2.0+
++
++obj-y += cpu.o
++obj-y += dram.o
+--- /dev/null
++++ b/arch/riscv/cpu/thead/cpu.c
+@@ -0,0 +1,22 @@
++// SPDX-License-Identifier: GPL-2.0+
++/*
++ * Copyright (C) 2018, Bin Meng <[email protected]>
++ */
++
++#include <irq_func.h>
++#include <asm/cache.h>
++
++/*
++ * cleanup_before_linux() is called just before we call linux
++ * it prepares the processor for linux
++ *
++ * we disable interrupt and caches.
++ */
++int cleanup_before_linux(void)
++{
++	disable_interrupts();
++
++	cache_flush();
++
++	return 0;
++}
+--- /dev/null
++++ b/arch/riscv/cpu/thead/dram.c
+@@ -0,0 +1,22 @@
++// SPDX-License-Identifier: GPL-2.0+
++/*
++ * Copyright (C) 2018, Bin Meng <[email protected]>
++ */
++
++#include <common.h>
++#include <fdtdec.h>
++#include <init.h>
++#include <asm/global_data.h>
++#include <linux/sizes.h>
++
++DECLARE_GLOBAL_DATA_PTR;
++
++int dram_init(void)
++{
++	return fdtdec_setup_mem_size_base();
++}
++
++int dram_init_banksize(void)
++{
++	return fdtdec_setup_memory_banksize();
++}

+ 0 - 46
package/boot/uboot-d1/patches/0002-sunxi-Add-iNet_U70B_rev1_defconfig.patch

@@ -1,46 +0,0 @@
-From ddb1f06d1c7758c538e286c0c7a9c8545d2af6b1 Mon Sep 17 00:00:00 2001
-From: Samuel Holland <[email protected]>
-Date: Sat, 20 Nov 2021 13:26:36 -0600
-Subject: [PATCH 02/90] sunxi: Add iNet_U70B_rev1_defconfig
-
-Signed-off-by: Samuel Holland <[email protected]>
----
- configs/iNet_U70B_rev1_defconfig | 32 ++++++++++++++++++++++++++++++++
- 1 file changed, 32 insertions(+)
- create mode 100644 configs/iNet_U70B_rev1_defconfig
-
---- /dev/null
-+++ b/configs/iNet_U70B_rev1_defconfig
-@@ -0,0 +1,32 @@
-+CONFIG_ARM=y
-+CONFIG_ARCH_SUNXI=y
-+CONFIG_DEFAULT_DEVICE_TREE="sun8i-a33-inet-u70b-rev1"
-+# CONFIG_SPL_SERIAL is not set
-+CONFIG_SPL=y
-+CONFIG_MACH_SUN8I_A33=y
-+CONFIG_DRAM_CLK=480
-+CONFIG_DRAM_ZQ=31675
-+CONFIG_DRAM_ODT_EN=y
-+CONFIG_MMC0_CD_PIN="PB4"
-+CONFIG_VIDEO_LCD_MODE="x:1024,y:600,depth:18,pclk_khz:51000,le:158,ri:162,up:25,lo:10,hs:20,vs:3,sync:3,vmode:0"
-+CONFIG_VIDEO_LCD_DCLK_PHASE=0
-+CONFIG_VIDEO_LCD_POWER="PH7"
-+CONFIG_VIDEO_LCD_BL_EN="PH6"
-+CONFIG_VIDEO_LCD_BL_PWM="PH0"
-+# CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set
-+CONFIG_CMD_BIND=y
-+CONFIG_CMD_CLK=y
-+CONFIG_CMD_PWM=y
-+CONFIG_CMD_I2C=y
-+CONFIG_CMD_WDT=y
-+CONFIG_CMD_PMIC=y
-+CONFIG_CMD_REGULATOR=y
-+# CONFIG_NET is not set
-+CONFIG_AXP_GPIO=y
-+CONFIG_REGULATOR_AXP=y
-+CONFIG_REGULATOR_AXP_USB_POWER=y
-+CONFIG_AXP_DLDO1_VOLT=3300
-+CONFIG_DM_PWM=y
-+CONFIG_PWM_SUNXI=y
-+# CONFIG_REQUIRE_SERIAL_CONSOLE is not set
-+CONFIG_USB_MUSB_HOST=y

+ 0 - 85
package/boot/uboot-d1/patches/0003-Adapt-iNet-U70B-REV01-for-development-FEL-serial.patch

@@ -1,85 +0,0 @@
-From ef808412055d1ef6fe77ff130d3f5a9432fef2d7 Mon Sep 17 00:00:00 2001
-From: Samuel Holland <[email protected]>
-Date: Tue, 3 May 2022 22:35:12 -0500
-Subject: [PATCH 03/90] Adapt iNet U70B REV01 for development (FEL + serial)
-
-Signed-off-by: Samuel Holland <[email protected]>
----
- arch/arm/dts/sun8i-a33-inet-u70b-rev1.dts | 11 +++++++++++
- configs/iNet_U70B_rev1_defconfig          | 14 +++++---------
- 2 files changed, 16 insertions(+), 9 deletions(-)
-
---- a/arch/arm/dts/sun8i-a33-inet-u70b-rev1.dts
-+++ b/arch/arm/dts/sun8i-a33-inet-u70b-rev1.dts
-@@ -11,6 +11,7 @@
- 
- 	aliases {
- 		ethernet0 = &rtl8723cs;
-+		serial0 = &uart0;
- 	};
- 
- 	panel: panel {
-@@ -76,6 +77,10 @@
- 	};
- };
- 
-+&mmc0 {
-+	status = "disabled";
-+};
-+
- &mmc1 {
- 	pinctrl-0 = <&mmc1_pg_pins>;
- 	pinctrl-names = "default";
-@@ -158,6 +163,12 @@
- 	status = "okay";
- };
- 
-+&uart0 {
-+	pinctrl-0 = <&uart0_pf_pins>;
-+	pinctrl-names = "default";
-+	status = "okay";
-+};
-+
- &uart1 {
- 	pinctrl-0 = <&uart1_pg_pins>, <&uart1_cts_rts_pg_pins>;
- 	pinctrl-names = "default";
---- a/configs/iNet_U70B_rev1_defconfig
-+++ b/configs/iNet_U70B_rev1_defconfig
-@@ -1,12 +1,12 @@
- CONFIG_ARM=y
- CONFIG_ARCH_SUNXI=y
- CONFIG_DEFAULT_DEVICE_TREE="sun8i-a33-inet-u70b-rev1"
--# CONFIG_SPL_SERIAL is not set
- CONFIG_SPL=y
- CONFIG_MACH_SUN8I_A33=y
- CONFIG_DRAM_CLK=480
- CONFIG_DRAM_ZQ=31675
- CONFIG_DRAM_ODT_EN=y
-+CONFIG_UART0_PORT_F=y
- CONFIG_MMC0_CD_PIN="PB4"
- CONFIG_VIDEO_LCD_MODE="x:1024,y:600,depth:18,pclk_khz:51000,le:158,ri:162,up:25,lo:10,hs:20,vs:3,sync:3,vmode:0"
- CONFIG_VIDEO_LCD_DCLK_PHASE=0
-@@ -14,19 +14,15 @@ CONFIG_VIDEO_LCD_POWER="PH7"
- CONFIG_VIDEO_LCD_BL_EN="PH6"
- CONFIG_VIDEO_LCD_BL_PWM="PH0"
- # CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set
--CONFIG_CMD_BIND=y
--CONFIG_CMD_CLK=y
--CONFIG_CMD_PWM=y
--CONFIG_CMD_I2C=y
--CONFIG_CMD_WDT=y
-+CONFIG_PREBOOT="fastboot usb 0"
- CONFIG_CMD_PMIC=y
- CONFIG_CMD_REGULATOR=y
--# CONFIG_NET is not set
- CONFIG_AXP_GPIO=y
- CONFIG_REGULATOR_AXP=y
- CONFIG_REGULATOR_AXP_USB_POWER=y
- CONFIG_AXP_DLDO1_VOLT=3300
- CONFIG_DM_PWM=y
- CONFIG_PWM_SUNXI=y
--# CONFIG_REQUIRE_SERIAL_CONSOLE is not set
--CONFIG_USB_MUSB_HOST=y
-+CONFIG_REMOTEPROC_SUN6I_AR100=y
-+CONFIG_USB_MUSB_GADGET=y
-+CONFIG_WATCHDOG_AUTOSTART=y

+ 53 - 0
package/boot/uboot-d1/patches/0003-riscv-cpu-thead-Add-extension-CSR-definitions.patch

@@ -0,0 +1,53 @@
+From 63ba3ddfaddeb963a959e709aac249d61f51bb3f Mon Sep 17 00:00:00 2001
+From: Samuel Holland <[email protected]>
+Date: Sun, 5 Feb 2023 09:56:34 -0600
+Subject: [PATCH 03/68] riscv: cpu: thead: Add extension CSR definitions
+
+T-HEAD C9xx and E9xx CPUs contain some extra CSRs which control the
+branch predictor and cache-related functionality.
+
+Signed-off-by: Samuel Holland <[email protected]>
+---
+ arch/riscv/cpu/thead/thead_csr.h | 36 ++++++++++++++++++++++++++++++++
+ 1 file changed, 36 insertions(+)
+ create mode 100644 arch/riscv/cpu/thead/thead_csr.h
+
+--- /dev/null
++++ b/arch/riscv/cpu/thead/thead_csr.h
+@@ -0,0 +1,36 @@
++/* SPDX-License-Identifier: GPL-2.0+ */
++
++#ifndef _THEAD_CSR_H_
++#define _THEAD_CSR_H_
++
++#define CSR_MXSTATUS		0x7c0
++#define CSR_MHCR		0x7c1
++#define CSR_MHINT		0x7c5
++
++#define MXSTATUS_THEADISAEE	BIT(22) /* T-HEAD ISA extensions enable */
++#define MXSTATUS_MM		BIT(15) /* misaligned access enable */
++
++#define MHCR_IE			BIT(0)	/* icache enable */
++#define MHCR_DE			BIT(1)	/* dcache enable */
++#define MHCR_WA			BIT(2)	/* dcache write allocate */
++#define MHCR_WB			BIT(3)	/* dcache write back */
++#define MHCR_RS			BIT(4)	/* return stack enable */
++#define MHCR_BPE		BIT(5)	/* branch prediction enable */
++#define MHCR_BTB_C906		BIT(6)	/* branch target prediction enable */
++#define MHCR_WBR		BIT(8)	/* write burst enable */
++#define MHCR_BTB_E906		BIT(12) /* branch target prediction enable */
++
++#define MHINT_DPLD		BIT(2)	/* dcache prefetch enable */
++#define MHINT_AMR_PAGE		(0x0 << 3)
++#define MHINT_AMR_LIMIT_3	(0x1 << 3)
++#define MHINT_AMR_LIMIT_64	(0x2 << 3)
++#define MHINT_AMR_LIMIT_128	(0x3 << 3)
++#define MHINT_IPLD		BIT(8)	/* icache prefetch enable */
++#define MHINT_IWPE		BIT(9)	/* icache way prediction enable */
++#define MHINT_D_DIS_PREFETCH_2	(0x0 << 13)
++#define MHINT_D_DIS_PREFETCH_4	(0x1 << 13)
++#define MHINT_D_DIS_PREFETCH_8	(0x2 << 13)
++#define MHINT_D_DIS_PREFETCH_16	(0x3 << 13)
++#define MHINT_AEE		BIT(20) /* accurate exception enable */
++
++#endif /* _THEAD_CSR_H_ */

+ 0 - 54
package/boot/uboot-d1/patches/0004-ARM-dts-sun6i-mixtile-loftq-Add-USB1-VBUS-regulator.patch

@@ -1,54 +0,0 @@
-From 40a0ec0fdb6a110d69151de5480148772877f267 Mon Sep 17 00:00:00 2001
-From: Samuel Holland <[email protected]>
-Date: Thu, 26 Aug 2021 20:39:33 -0500
-Subject: [PATCH 04/90] ARM: dts: sun6i: mixtile-loftq: Add USB1 VBUS regulator
-
-This board is configured with CONFIG_USB1_VBUS_PIN="PH24", but no
-regulator exists in its device tree. Add the regulator, so USB will
-continue to work when the PHY driver switches to using the regulator
-uclass instead of a GPIO.
-
-Update the device tree here because it does not exist in Linux.
-
-Signed-off-by: Samuel Holland <[email protected]>
----
- arch/arm/dts/sun6i-a31-mixtile-loftq.dts | 17 +++++++++++++++++
- 1 file changed, 17 insertions(+)
-
---- a/arch/arm/dts/sun6i-a31-mixtile-loftq.dts
-+++ b/arch/arm/dts/sun6i-a31-mixtile-loftq.dts
-@@ -6,6 +6,9 @@
-  */
- 
- /dts-v1/;
-+
-+#include <dt-bindings/gpio/gpio.h>
-+
- #include "sun6i-a31.dtsi"
- 
- / {
-@@ -19,6 +22,15 @@
- 	chosen {
- 		stdout-path = "serial0:115200n8";
- 	};
-+
-+	reg_usb1_vbus: usb1-vbus {
-+		compatible = "regulator-fixed";
-+		regulator-name = "usb1-vbus";
-+		regulator-min-microvolt = <5000000>;
-+		regulator-max-microvolt = <5000000>;
-+		enable-active-high;
-+		gpio = <&pio 7 24 GPIO_ACTIVE_HIGH>; /* PH24 */
-+	};
- };
- 
- &ehci0 {
-@@ -56,3 +68,8 @@
- 	pinctrl-0 = <&uart0_ph_pins>;
- 	status = "okay";
- };
-+
-+&usbphy {
-+	usb1_vbus-supply = <&reg_usb1_vbus>;
-+	status = "okay";
-+};

+ 72 - 0
package/boot/uboot-d1/patches/0004-riscv-cpu-thead-Initialize-extension-CSRs.patch

@@ -0,0 +1,72 @@
+From 5159250118c6f58a469fc9185ea4227f852e51d0 Mon Sep 17 00:00:00 2001
+From: Samuel Holland <[email protected]>
+Date: Sun, 5 Feb 2023 09:44:05 -0600
+Subject: [PATCH 04/68] riscv: cpu: thead: Initialize extension CSRs
+
+Enable the T-HEAD ISA extensions, as these are required to use the cache
+maintenance instructions. Enable the branch predictor and BTB to improve
+performance. Some bits are only available on specific CPU models, so
+provide Kconfig symbols for selecting the right model.
+
+Signed-off-by: Samuel Holland <[email protected]>
+---
+ arch/riscv/Kconfig           |  1 +
+ arch/riscv/cpu/thead/Kconfig |  7 +++++++
+ arch/riscv/cpu/thead/cpu.c   | 21 +++++++++++++++++++++
+ 3 files changed, 29 insertions(+)
+ create mode 100644 arch/riscv/cpu/thead/Kconfig
+
+--- a/arch/riscv/Kconfig
++++ b/arch/riscv/Kconfig
+@@ -89,6 +89,7 @@ source "arch/riscv/cpu/fu540/Kconfig"
+ source "arch/riscv/cpu/fu740/Kconfig"
+ source "arch/riscv/cpu/generic/Kconfig"
+ source "arch/riscv/cpu/jh7110/Kconfig"
++source "arch/riscv/cpu/thead/Kconfig"
+ 
+ # architecture-specific options below
+ 
+--- /dev/null
++++ b/arch/riscv/cpu/thead/Kconfig
+@@ -0,0 +1,7 @@
++# SPDX-License-Identifier: GPL-2.0+
++
++config THEAD_C906
++	bool
++
++config THEAD_E906
++	bool
+--- a/arch/riscv/cpu/thead/cpu.c
++++ b/arch/riscv/cpu/thead/cpu.c
+@@ -5,6 +5,10 @@
+ 
+ #include <irq_func.h>
+ #include <asm/cache.h>
++#include <asm/csr.h>
++#include <linux/bitops.h>
++
++#include "thead_csr.h"
+ 
+ /*
+  * cleanup_before_linux() is called just before we call linux
+@@ -20,3 +24,20 @@ int cleanup_before_linux(void)
+ 
+ 	return 0;
+ }
++
++void harts_early_init(void)
++{
++	if (!CONFIG_IS_ENABLED(RISCV_MMODE))
++		return;
++
++	csr_set(CSR_MXSTATUS, MXSTATUS_THEADISAEE | MXSTATUS_MM);
++	if (IS_ENABLED(THEAD_C906)) {
++		csr_set(CSR_MHCR,
++			MHCR_BTB_C906 | MHCR_BPE | MHCR_RS | MHCR_WB | MHCR_WA);
++		csr_set(CSR_MHINT, MHINT_IWPE | MHINT_IPLD | MHINT_IPLD);
++	}
++	if (IS_ENABLED(THEAD_E906)) {
++		csr_set(CSR_MHCR,
++			MHCR_BTB_E906 | MHCR_BPE | MHCR_RS | MHCR_WB | MHCR_WA);
++	}
++}

+ 0 - 97
package/boot/uboot-d1/patches/0005-power-regulator-Add-a-driver-for-the-AXP-USB-power-s.patch

@@ -1,97 +0,0 @@
-From e07c1d516c1a7842510d22a7cf88666d500a9a9a Mon Sep 17 00:00:00 2001
-From: Samuel Holland <[email protected]>
-Date: Sun, 22 Aug 2021 21:35:45 -0500
-Subject: [PATCH 05/90] power: regulator: Add a driver for the AXP USB power
- supply
-
-This driver reports the presence/absence of voltage on the PMIC's USB
-VBUS pin. This information is used by the USB PHY driver. The
-corresponding Linux driver uses the power supply class, which does not
-exist in U-Boot. UCLASS_REGULATOR seems to be the closest match.
-
-Signed-off-by: Samuel Holland <[email protected]>
----
- drivers/power/regulator/Kconfig         |  7 ++++
- drivers/power/regulator/Makefile        |  1 +
- drivers/power/regulator/axp_usb_power.c | 49 +++++++++++++++++++++++++
- 3 files changed, 57 insertions(+)
- create mode 100644 drivers/power/regulator/axp_usb_power.c
-
---- a/drivers/power/regulator/Kconfig
-+++ b/drivers/power/regulator/Kconfig
-@@ -43,6 +43,13 @@ config REGULATOR_AS3722
- 	  but does not yet support change voltages. Currently this must be
- 	  done using direct register writes to the PMIC.
- 
-+config REGULATOR_AXP_USB_POWER
-+	bool "Enable driver for X-Powers AXP PMIC USB power supply"
-+	depends on DM_REGULATOR && PMIC_AXP
-+	help
-+	  Enable support for reading the USB power supply status from
-+	  X-Powers AXP2xx and AXP8xx PMICs.
-+
- config DM_REGULATOR_BD71837
- 	bool "Enable Driver Model for ROHM BD71837/BD71847 regulators"
- 	depends on DM_REGULATOR && DM_PMIC_BD71837
---- a/drivers/power/regulator/Makefile
-+++ b/drivers/power/regulator/Makefile
-@@ -7,6 +7,7 @@
- obj-$(CONFIG_$(SPL_)DM_REGULATOR) += regulator-uclass.o
- obj-$(CONFIG_REGULATOR_ACT8846) += act8846.o
- obj-$(CONFIG_REGULATOR_AS3722)	+= as3722_regulator.o
-+obj-$(CONFIG_$(SPL_)REGULATOR_AXP_USB_POWER) += axp_usb_power.o
- obj-$(CONFIG_$(SPL_)DM_REGULATOR_DA9063) += da9063.o
- obj-$(CONFIG_DM_REGULATOR_MAX77686) += max77686.o
- obj-$(CONFIG_DM_REGULATOR_NPCM8XX) += npcm8xx_regulator.o
---- /dev/null
-+++ b/drivers/power/regulator/axp_usb_power.c
-@@ -0,0 +1,49 @@
-+// SPDX-License-Identifier: GPL-2.0+
-+
-+#include <dm/device.h>
-+#include <errno.h>
-+#include <power/pmic.h>
-+#include <power/regulator.h>
-+
-+#define AXP_POWER_STATUS		0x00
-+#define AXP_POWER_STATUS_VBUS_PRESENT		BIT(5)
-+
-+static int axp_usb_power_get_enable(struct udevice *dev)
-+{
-+	int ret;
-+
-+	ret = pmic_reg_read(dev->parent, AXP_POWER_STATUS);
-+	if (ret < 0)
-+		return ret;
-+
-+	return !!(ret & AXP_POWER_STATUS_VBUS_PRESENT);
-+}
-+
-+static const struct dm_regulator_ops axp_usb_power_ops = {
-+	.get_enable		= axp_usb_power_get_enable,
-+};
-+
-+static int axp_usb_power_probe(struct udevice *dev)
-+{
-+	struct dm_regulator_uclass_plat *uc_plat = dev_get_uclass_plat(dev);
-+
-+	uc_plat->type = REGULATOR_TYPE_FIXED;
-+
-+	return 0;
-+}
-+
-+static const struct udevice_id axp_usb_power_ids[] = {
-+	{ .compatible = "x-powers,axp202-usb-power-supply" },
-+	{ .compatible = "x-powers,axp221-usb-power-supply" },
-+	{ .compatible = "x-powers,axp223-usb-power-supply" },
-+	{ .compatible = "x-powers,axp813-usb-power-supply" },
-+	{ }
-+};
-+
-+U_BOOT_DRIVER(axp_usb_power) = {
-+	.name		= "axp_usb_power",
-+	.id		= UCLASS_REGULATOR,
-+	.of_match	= axp_usb_power_ids,
-+	.probe		= axp_usb_power_probe,
-+	.ops		= &axp_usb_power_ops,
-+};

+ 134 - 0
package/boot/uboot-d1/patches/0005-riscv-cpu-thead-Add-CPU-specific-cache-operations.patch

@@ -0,0 +1,134 @@
+From a2615b3b161929df1ae151585d4638cc4ab09bf9 Mon Sep 17 00:00:00 2001
+From: Samuel Holland <[email protected]>
+Date: Sat, 4 Feb 2023 14:29:20 -0600
+Subject: [PATCH 05/68] riscv: cpu: thead: Add CPU-specific cache operations
+
+Use the vendor CSRs for enabling/disabling the caches, and the ISA
+extension for cache maintenance.
+
+Signed-off-by: Samuel Holland <[email protected]>
+---
+ arch/riscv/cpu/thead/Kconfig  |  2 +
+ arch/riscv/cpu/thead/Makefile |  1 +
+ arch/riscv/cpu/thead/cache.c  | 96 +++++++++++++++++++++++++++++++++++
+ 3 files changed, 99 insertions(+)
+ create mode 100644 arch/riscv/cpu/thead/cache.c
+
+--- a/arch/riscv/cpu/thead/Kconfig
++++ b/arch/riscv/cpu/thead/Kconfig
+@@ -2,6 +2,8 @@
+ 
+ config THEAD_C906
+ 	bool
++	select SYS_CACHE_SHIFT_6
+ 
+ config THEAD_E906
+ 	bool
++	select SYS_CACHE_SHIFT_5
+--- a/arch/riscv/cpu/thead/Makefile
++++ b/arch/riscv/cpu/thead/Makefile
+@@ -1,4 +1,5 @@
+ # SPDX-License-Identifier: GPL-2.0+
+ 
++obj-y += cache.o
+ obj-y += cpu.o
+ obj-y += dram.o
+--- /dev/null
++++ b/arch/riscv/cpu/thead/cache.c
+@@ -0,0 +1,96 @@
++// SPDX-License-Identifier: GPL-2.0+
++
++#include <cpu_func.h>
++#include <asm/cache.h>
++#include <asm/csr.h>
++#include <linux/bitops.h>
++
++#include "thead_csr.h"
++
++#define THEAD_SYNC_I		".long 0x01a0000b"
++#define THEAD_DCACHE_CIALL	".long 0x0030000b"
++#define THEAD_DCACHE_CIPA_A0	".long 0x02b5000b"
++#define THEAD_DCACHE_IALL	".long 0x0020000b"
++#define THEAD_DCACHE_IPA_A0	".long 0x02a5000b"
++#define THEAD_ICACHE_IPA_A0	".long 0x0385000b"
++
++static inline void sync_i(void)
++{
++	asm volatile (THEAD_SYNC_I ::: "memory");
++}
++
++void flush_dcache_all(void)
++{
++	asm volatile (THEAD_DCACHE_CIALL ::: "memory");
++	sync_i();
++}
++
++void flush_dcache_range(unsigned long start, unsigned long end)
++{
++	register ulong addr asm ("a0") = start & -CONFIG_SYS_CACHELINE_SIZE;
++
++	for (; addr < end; addr += CONFIG_SYS_CACHELINE_SIZE)
++		asm volatile (THEAD_DCACHE_CIPA_A0 :: "r" (addr) : "memory");
++	sync_i();
++}
++
++void invalidate_dcache_all(void)
++{
++	asm volatile (THEAD_DCACHE_IALL ::: "memory");
++	sync_i();
++}
++
++void invalidate_dcache_range(unsigned long start, unsigned long end)
++{
++	register ulong addr asm ("a0") = start & -CONFIG_SYS_CACHELINE_SIZE;
++
++	for (; addr < end; addr += CONFIG_SYS_CACHELINE_SIZE)
++		asm volatile (THEAD_DCACHE_IPA_A0 :: "r" (addr) : "memory");
++	sync_i();
++}
++
++void invalidate_icache_range(unsigned long start, unsigned long end)
++{
++	register ulong addr asm ("a0") = start & -CONFIG_SYS_CACHELINE_SIZE;
++
++	for (; addr < end; addr += CONFIG_SYS_CACHELINE_SIZE)
++		asm volatile (THEAD_ICACHE_IPA_A0 :: "r" (addr) : "memory");
++	sync_i();
++}
++
++#if CONFIG_IS_ENABLED(RISCV_MMODE)
++
++void icache_enable(void)
++{
++	invalidate_icache_all();
++	csr_set(CSR_MHCR, MHCR_IE);
++}
++
++void icache_disable(void)
++{
++	csr_clear(CSR_MHCR, MHCR_IE);
++}
++
++int icache_status(void)
++{
++	return csr_read(CSR_MHCR) & MHCR_IE;
++}
++
++void dcache_enable(void)
++{
++	invalidate_dcache_all();
++	csr_set(CSR_MHCR, MHCR_DE);
++}
++
++void dcache_disable(void)
++{
++	flush_dcache_all();
++	csr_clear(CSR_MHCR, MHCR_DE);
++}
++
++int dcache_status(void)
++{
++	return csr_read(CSR_MHCR) & MHCR_DE;
++}
++
++#endif

+ 0 - 122
package/boot/uboot-d1/patches/0006-gpio-axp-sunxi-Remove-virtual-VBUS-detection-GPIO.patch

@@ -1,122 +0,0 @@
-From c750151e1107a8d46ca0f9bd30c1da276b142ec1 Mon Sep 17 00:00:00 2001
-From: Samuel Holland <[email protected]>
-Date: Thu, 26 Aug 2021 18:02:54 -0500
-Subject: [PATCH 06/90] gpio: axp/sunxi: Remove virtual VBUS detection GPIO
-
-Now that this functionality is modeled using the device tree and
-regulator uclass, the named GPIO is not referenced anywhere. Remove it.
-
-Signed-off-by: Samuel Holland <[email protected]>
----
- arch/arm/include/asm/arch-sunxi/gpio.h |  1 -
- drivers/gpio/axp_gpio.c                | 21 ++++-----------------
- drivers/gpio/sunxi_gpio.c              |  6 +-----
- include/axp209.h                       |  1 -
- include/axp221.h                       |  1 -
- include/axp809.h                       |  1 -
- include/axp818.h                       |  1 -
- 7 files changed, 5 insertions(+), 27 deletions(-)
-
---- a/arch/arm/include/asm/arch-sunxi/gpio.h
-+++ b/arch/arm/include/asm/arch-sunxi/gpio.h
-@@ -209,7 +209,6 @@ enum sunxi_gpio_number {
- 
- /* Virtual AXP0 GPIOs */
- #define SUNXI_GPIO_AXP0_PREFIX "AXP0-"
--#define SUNXI_GPIO_AXP0_VBUS_DETECT	4
- #define SUNXI_GPIO_AXP0_VBUS_ENABLE	5
- #define SUNXI_GPIO_AXP0_GPIO_COUNT	6
- 
---- a/drivers/gpio/axp_gpio.c
-+++ b/drivers/gpio/axp_gpio.c
-@@ -36,18 +36,11 @@ static int axp_gpio_direction_input(stru
- {
- 	u8 reg;
- 
--	switch (pin) {
--#ifndef CONFIG_AXP152_POWER /* NA on axp152 */
--	case SUNXI_GPIO_AXP0_VBUS_DETECT:
--		return 0;
--#endif
--	default:
--		reg = axp_get_gpio_ctrl_reg(pin);
--		if (reg == 0)
--			return -EINVAL;
-+	reg = axp_get_gpio_ctrl_reg(pin);
-+	if (reg == 0)
-+		return -EINVAL;
- 
--		return pmic_bus_write(reg, AXP_GPIO_CTRL_INPUT);
--	}
-+	return pmic_bus_write(reg, AXP_GPIO_CTRL_INPUT);
- }
- 
- static int axp_gpio_direction_output(struct udevice *dev, unsigned pin,
-@@ -83,12 +76,6 @@ static int axp_gpio_get_value(struct ude
- 	int ret;
- 
- 	switch (pin) {
--#ifndef CONFIG_AXP152_POWER /* NA on axp152 */
--	case SUNXI_GPIO_AXP0_VBUS_DETECT:
--		ret = pmic_bus_read(AXP_POWER_STATUS, &val);
--		mask = AXP_POWER_STATUS_VBUS_PRESENT;
--		break;
--#endif
- #ifdef AXP_MISC_CTRL_N_VBUSEN_FUNC
- 	/* Only available on later PMICs */
- 	case SUNXI_GPIO_AXP0_VBUS_ENABLE:
---- a/drivers/gpio/sunxi_gpio.c
-+++ b/drivers/gpio/sunxi_gpio.c
-@@ -117,11 +117,7 @@ int sunxi_name_to_gpio(const char *name)
- #if !defined CONFIG_SPL_BUILD && defined CONFIG_AXP_GPIO
- 	char lookup[8];
- 
--	if (strcasecmp(name, "AXP0-VBUS-DETECT") == 0) {
--		sprintf(lookup, SUNXI_GPIO_AXP0_PREFIX "%d",
--			SUNXI_GPIO_AXP0_VBUS_DETECT);
--		name = lookup;
--	} else if (strcasecmp(name, "AXP0-VBUS-ENABLE") == 0) {
-+	if (strcasecmp(name, "AXP0-VBUS-ENABLE") == 0) {
- 		sprintf(lookup, SUNXI_GPIO_AXP0_PREFIX "%d",
- 			SUNXI_GPIO_AXP0_VBUS_ENABLE);
- 		name = lookup;
---- a/include/axp209.h
-+++ b/include/axp209.h
-@@ -77,7 +77,6 @@ enum axp209_reg {
- #ifdef CONFIG_AXP209_POWER
- #define AXP_POWER_STATUS		0x00
- #define AXP_POWER_STATUS_ALDO_IN		BIT(0)
--#define AXP_POWER_STATUS_VBUS_PRESENT		BIT(5)
- #define AXP_GPIO0_CTRL			0x90
- #define AXP_GPIO1_CTRL			0x92
- #define AXP_GPIO2_CTRL			0x93
---- a/include/axp221.h
-+++ b/include/axp221.h
-@@ -53,7 +53,6 @@
- #ifdef CONFIG_AXP221_POWER
- #define AXP_POWER_STATUS		0x00
- #define AXP_POWER_STATUS_ALDO_IN		BIT(0)
--#define AXP_POWER_STATUS_VBUS_PRESENT		BIT(5)
- #define AXP_VBUS_IPSOUT			0x30
- #define AXP_VBUS_IPSOUT_DRIVEBUS		(1 << 2)
- #define AXP_MISC_CTRL			0x8f
---- a/include/axp809.h
-+++ b/include/axp809.h
-@@ -47,7 +47,6 @@
- #ifdef CONFIG_AXP809_POWER
- #define AXP_POWER_STATUS		0x00
- #define AXP_POWER_STATUS_ALDO_IN		BIT(0)
--#define AXP_POWER_STATUS_VBUS_PRESENT		BIT(5)
- #define AXP_VBUS_IPSOUT			0x30
- #define AXP_VBUS_IPSOUT_DRIVEBUS		(1 << 2)
- #define AXP_MISC_CTRL			0x8f
---- a/include/axp818.h
-+++ b/include/axp818.h
-@@ -61,7 +61,6 @@
- #ifdef CONFIG_AXP818_POWER
- #define AXP_POWER_STATUS		0x00
- #define AXP_POWER_STATUS_ALDO_IN		BIT(0)
--#define AXP_POWER_STATUS_VBUS_PRESENT		BIT(5)
- #define AXP_VBUS_IPSOUT			0x30
- #define AXP_VBUS_IPSOUT_DRIVEBUS		(1 << 2)
- #define AXP_MISC_CTRL			0x8f

+ 3 - 3
package/boot/uboot-d1/patches/0022-fdt-Fix-bounds-check-in-devfdt_get_addr_index.patch → package/boot/uboot-d1/patches/0007-fdt-Fix-bounds-check-in-devfdt_get_addr_index.patch

@@ -1,7 +1,7 @@
-From 0e4edc3a01f179337bb0bd0d31855dbce338a23e Mon Sep 17 00:00:00 2001
+From 8d12d6e5730c80503840e3c18fafb9bed4133dc9 Mon Sep 17 00:00:00 2001
 From: Samuel Holland <[email protected]>
 From: Samuel Holland <[email protected]>
 Date: Sun, 30 Oct 2022 14:53:45 -0500
 Date: Sun, 30 Oct 2022 14:53:45 -0500
-Subject: [PATCH 22/90] fdt: Fix bounds check in devfdt_get_addr_index
+Subject: [PATCH 07/68] fdt: Fix bounds check in devfdt_get_addr_index
 
 
 reg must contain enough cells for the entire next address/size pair
 reg must contain enough cells for the entire next address/size pair
 after skipping `index` pairs. The previous code allows an out-of-bounds
 after skipping `index` pairs. The previous code allows an out-of-bounds
@@ -17,7 +17,7 @@ Signed-off-by: Samuel Holland <[email protected]>
 
 
 --- a/drivers/core/fdtaddr.c
 --- a/drivers/core/fdtaddr.c
 +++ b/drivers/core/fdtaddr.c
 +++ b/drivers/core/fdtaddr.c
-@@ -43,7 +43,7 @@ fdt_addr_t devfdt_get_addr_index(const s
+@@ -44,7 +44,7 @@ fdt_addr_t devfdt_get_addr_index(const s
  		}
  		}
  
  
  		reg = fdt_getprop(gd->fdt_blob, offset, "reg", &len);
  		reg = fdt_getprop(gd->fdt_blob, offset, "reg", &len);

+ 21 - 0
package/boot/uboot-d1/patches/0008-fdt-Use-correct-parent-in-devfdt_get_addr_index.patch

@@ -0,0 +1,21 @@
+From 1c5558f39481911fdb730fd686e710c7f696f17f Mon Sep 17 00:00:00 2001
+From: Samuel Holland <[email protected]>
+Date: Thu, 17 Nov 2022 22:08:39 -0600
+Subject: [PATCH 08/68] fdt: Use correct parent in devfdt_get_addr_index
+
+Signed-off-by: Samuel Holland <[email protected]>
+---
+ drivers/core/fdtaddr.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/core/fdtaddr.c
++++ b/drivers/core/fdtaddr.c
+@@ -23,7 +23,7 @@ fdt_addr_t devfdt_get_addr_index(const s
+ {
+ #if CONFIG_IS_ENABLED(OF_REAL)
+ 	int offset = dev_of_offset(dev);
+-	int parent = dev_of_offset(dev->parent);
++	int parent = fdt_parent_offset(gd->fdt_blob, offset);
+ 	fdt_addr_t addr;
+ 
+ 	if (CONFIG_IS_ENABLED(OF_TRANSLATE)) {

+ 0 - 41
package/boot/uboot-d1/patches/0008-power-pmic-axp-Probe-the-drivevbus-regulator-from-th.patch

@@ -1,41 +0,0 @@
-From a588c97f146b67bae47099bc419cf10c02eca169 Mon Sep 17 00:00:00 2001
-From: Samuel Holland <[email protected]>
-Date: Thu, 26 Aug 2021 21:34:33 -0500
-Subject: [PATCH 08/90] power: pmic: axp: Probe the drivevbus regulator from
- the DT
-
-Now that some regulator driver exists for this PMIC, add support for
-probing regulator drivers from the device tree subnodes.
-
-Signed-off-by: Samuel Holland <[email protected]>
----
- drivers/power/pmic/axp.c | 10 ++++++++++
- 1 file changed, 10 insertions(+)
-
---- a/drivers/power/pmic/axp.c
-+++ b/drivers/power/pmic/axp.c
-@@ -45,14 +45,24 @@ static struct dm_pmic_ops axp_pmic_ops =
- 	.write		= dm_i2c_write,
- };
- 
-+static const struct pmic_child_info axp_pmic_child_info[] = {
-+	{ "drivevbus",	"axp_drivevbus"	},
-+	{ }
-+};
-+
- static int axp_pmic_bind(struct udevice *dev)
- {
-+	ofnode regulators_node;
- 	int ret;
- 
- 	ret = dm_scan_fdt_dev(dev);
- 	if (ret)
- 		return ret;
- 
-+	regulators_node = dev_read_subnode(dev, "regulators");
-+	if (ofnode_valid(regulators_node))
-+		pmic_bind_children(dev, regulators_node, axp_pmic_child_info);
-+
- 	if (CONFIG_IS_ENABLED(SYSRESET)) {
- 		ret = device_bind_driver_to_node(dev, "axp_sysreset", "axp_sysreset",
- 						 dev_ofnode(dev), NULL);

+ 5 - 5
package/boot/uboot-d1/patches/0054-sunxi-Fix-default-enablement-of-USB-host-drivers.patch → package/boot/uboot-d1/patches/0009-sunxi-Fix-default-enablement-of-USB-host-drivers.patch

@@ -1,7 +1,7 @@
-From 64de4fd71d35c6154a0f7b4c7c02cb24e978a4ce Mon Sep 17 00:00:00 2001
+From 621a4aa15b1b3afbbb364cd6dddeab5a84e68d32 Mon Sep 17 00:00:00 2001
 From: Samuel Holland <[email protected]>
 From: Samuel Holland <[email protected]>
 Date: Fri, 5 Aug 2022 23:45:19 -0500
 Date: Fri, 5 Aug 2022 23:45:19 -0500
-Subject: [PATCH 54/90] sunxi: Fix default-enablement of USB host drivers
+Subject: [PATCH 09/68] sunxi: Fix default-enablement of USB host drivers
 
 
 We tried to enable USB_EHCI_GENERIC and USB_OHCI_GENERIC by default.
 We tried to enable USB_EHCI_GENERIC and USB_OHCI_GENERIC by default.
 This did not work because those symbols depend on USB_EHCI_HCD and
 This did not work because those symbols depend on USB_EHCI_HCD and
@@ -15,7 +15,7 @@ Signed-off-by: Samuel Holland <[email protected]>
 
 
 --- a/arch/arm/Kconfig
 --- a/arch/arm/Kconfig
 +++ b/arch/arm/Kconfig
 +++ b/arch/arm/Kconfig
-@@ -1142,7 +1142,11 @@ config ARCH_SUNXI
+@@ -1173,7 +1173,11 @@ config ARCH_SUNXI
  	imply SYSRESET
  	imply SYSRESET
  	imply SYSRESET_WATCHDOG
  	imply SYSRESET_WATCHDOG
  	imply SYSRESET_WATCHDOG_AUTO
  	imply SYSRESET_WATCHDOG_AUTO
@@ -29,7 +29,7 @@ Signed-off-by: Samuel Holland <[email protected]>
  config ARCH_U8500
  config ARCH_U8500
 --- a/drivers/usb/host/Kconfig
 --- a/drivers/usb/host/Kconfig
 +++ b/drivers/usb/host/Kconfig
 +++ b/drivers/usb/host/Kconfig
-@@ -281,7 +281,6 @@ config USB_EHCI_ZYNQ
+@@ -293,7 +293,6 @@ config USB_EHCI_ZYNQ
  config USB_EHCI_GENERIC
  config USB_EHCI_GENERIC
  	bool "Support for generic EHCI USB controller"
  	bool "Support for generic EHCI USB controller"
  	depends on DM_USB
  	depends on DM_USB
@@ -37,7 +37,7 @@ Signed-off-by: Samuel Holland <[email protected]>
  	---help---
  	---help---
  	  Enables support for generic EHCI controller.
  	  Enables support for generic EHCI controller.
  
  
-@@ -343,7 +342,6 @@ config USB_OHCI_PCI
+@@ -355,7 +354,6 @@ config USB_OHCI_PCI
  
  
  config USB_OHCI_GENERIC
  config USB_OHCI_GENERIC
  	bool "Support for generic OHCI USB controller"
  	bool "Support for generic OHCI USB controller"

+ 0 - 58
package/boot/uboot-d1/patches/0010-sunxi-Remove-obsolete-USBx_VBUS_PIN-Kconfig-symbols.patch

@@ -1,58 +0,0 @@
-From 649bb7845e30805c66f62fc5725c4dbf350f21cb Mon Sep 17 00:00:00 2001
-From: Samuel Holland <[email protected]>
-Date: Thu, 26 Aug 2021 22:26:40 -0500
-Subject: [PATCH 10/90] sunxi: Remove obsolete USBx_VBUS_PIN Kconfig symbols
-
-Now that the USB PHY driver uses the device tree to get VBUS supply
-regulators, these Kconfig symbols are unused. Remove them.
-
-Signed-off-by: Samuel Holland <[email protected]>
----
- arch/arm/mach-sunxi/Kconfig | 29 -----------------------------
- 1 file changed, 29 deletions(-)
-
---- a/arch/arm/mach-sunxi/Kconfig
-+++ b/arch/arm/mach-sunxi/Kconfig
-@@ -693,13 +693,6 @@ config MMC_SUNXI_SLOT_EXTRA
- 	slot or emmc on mmc1 - mmc3. Setting this to 1, 2 or 3 will enable
- 	support for this.
- 
--config USB0_VBUS_PIN
--	string "Vbus enable pin for usb0 (otg)"
--	default ""
--	---help---
--	Set the Vbus enable pin for usb0 (otg). This takes a string in the
--	format understood by sunxi_name_to_gpio, e.g. PH1 for pin 1 of port H.
--
- config USB0_VBUS_DET
- 	string "Vbus detect pin for usb0 (otg)"
- 	default ""
-@@ -714,28 +707,6 @@ config USB0_ID_DET
- 	Set the ID detect pin for usb0 (otg). This takes a string in the
- 	format understood by sunxi_name_to_gpio, e.g. PH1 for pin 1 of port H.
- 
--config USB1_VBUS_PIN
--	string "Vbus enable pin for usb1 (ehci0)"
--	default "PH6" if MACH_SUN4I || MACH_SUN7I
--	default "PH27" if MACH_SUN6I
--	---help---
--	Set the Vbus enable pin for usb1 (ehci0, usb0 is the otg). This takes
--	a string in the format understood by sunxi_name_to_gpio, e.g.
--	PH1 for pin 1 of port H.
--
--config USB2_VBUS_PIN
--	string "Vbus enable pin for usb2 (ehci1)"
--	default "PH3" if MACH_SUN4I || MACH_SUN7I
--	default "PH24" if MACH_SUN6I
--	---help---
--	See USB1_VBUS_PIN help text.
--
--config USB3_VBUS_PIN
--	string "Vbus enable pin for usb3 (ehci2)"
--	default ""
--	---help---
--	See USB1_VBUS_PIN help text.
--
- config I2C0_ENABLE
- 	bool "Enable I2C/TWI controller 0"
- 	default y if MACH_SUN4I || MACH_SUN5I || MACH_SUN7I || MACH_SUN8I_R40

+ 5 - 5
package/boot/uboot-d1/patches/0055-sunxi-Remove-unnecessary-Kconfig-selections.patch → package/boot/uboot-d1/patches/0010-sunxi-Remove-unnecessary-Kconfig-selections.patch

@@ -1,7 +1,7 @@
-From 891fef47500dbf4aecb16e08c1d8ade3fbc8caec Mon Sep 17 00:00:00 2001
+From 5cde123b1d04da567899fe29e78cb98d6d66b54b Mon Sep 17 00:00:00 2001
 From: Samuel Holland <[email protected]>
 From: Samuel Holland <[email protected]>
 Date: Thu, 4 Aug 2022 23:22:05 -0500
 Date: Thu, 4 Aug 2022 23:22:05 -0500
-Subject: [PATCH 55/90] sunxi: Remove unnecessary Kconfig selections
+Subject: [PATCH 10/68] sunxi: Remove unnecessary Kconfig selections
 
 
 Two of these selections are redundant and have no effect:
 Two of these selections are redundant and have no effect:
  - DM_KEYBOARD is selected by USB_KEYBOARD
  - DM_KEYBOARD is selected by USB_KEYBOARD
@@ -17,7 +17,7 @@ Signed-off-by: Samuel Holland <[email protected]>
 
 
 --- a/arch/arm/Kconfig
 --- a/arch/arm/Kconfig
 +++ b/arch/arm/Kconfig
 +++ b/arch/arm/Kconfig
-@@ -1100,8 +1100,6 @@ config ARCH_SUNXI
+@@ -1131,8 +1131,6 @@ config ARCH_SUNXI
  	select DM_I2C if I2C
  	select DM_I2C if I2C
  	select DM_SPI if SPI
  	select DM_SPI if SPI
  	select DM_SPI_FLASH if SPI
  	select DM_SPI_FLASH if SPI
@@ -25,8 +25,8 @@ Signed-off-by: Samuel Holland <[email protected]>
 -	select DM_MMC if MMC
 -	select DM_MMC if MMC
  	select DM_SCSI if SCSI
  	select DM_SCSI if SCSI
  	select DM_SERIAL
  	select DM_SERIAL
- 	select GPIO_EXTRA_HEADER
-@@ -1119,7 +1117,6 @@ config ARCH_SUNXI
+ 	select OF_BOARD_SETUP
+@@ -1149,7 +1147,6 @@ config ARCH_SUNXI
  	select SYS_THUMB_BUILD if !ARM64
  	select SYS_THUMB_BUILD if !ARM64
  	select USB if DISTRO_DEFAULTS
  	select USB if DISTRO_DEFAULTS
  	select USB_KEYBOARD if DISTRO_DEFAULTS && USB_HOST
  	select USB_KEYBOARD if DISTRO_DEFAULTS && USB_HOST

+ 0 - 393
package/boot/uboot-d1/patches/0011-clk-sunxi-Add-support-for-the-D1-CCU.patch

@@ -1,393 +0,0 @@
-From 73d6c82e34e89cfde880d1948b3e0dc714adead8 Mon Sep 17 00:00:00 2001
-From: Samuel Holland <[email protected]>
-Date: Sat, 30 Apr 2022 22:34:19 -0500
-Subject: [PATCH 11/90] clk: sunxi: Add support for the D1 CCU
-
-Since the D1 CCU binding is defined, we can add support for its
-gates/resets, following the pattern of the existing drivers.
-
-Series-to: sunxi
-
-Signed-off-by: Samuel Holland <[email protected]>
----
- drivers/clk/sunxi/Kconfig                 |   6 +
- drivers/clk/sunxi/Makefile                |   1 +
- drivers/clk/sunxi/clk_d1.c                |  82 ++++++++++++
- drivers/clk/sunxi/clk_sunxi.c             |   5 +
- include/dt-bindings/clock/sun20i-d1-ccu.h | 156 ++++++++++++++++++++++
- include/dt-bindings/reset/sun20i-d1-ccu.h |  77 +++++++++++
- 6 files changed, 327 insertions(+)
- create mode 100644 drivers/clk/sunxi/clk_d1.c
- create mode 100644 include/dt-bindings/clock/sun20i-d1-ccu.h
- create mode 100644 include/dt-bindings/reset/sun20i-d1-ccu.h
-
---- a/drivers/clk/sunxi/Kconfig
-+++ b/drivers/clk/sunxi/Kconfig
-@@ -87,6 +87,12 @@ config CLK_SUN8I_H3
- 	  This enables common clock driver support for platforms based
- 	  on Allwinner H3/H5 SoC.
- 
-+config CLK_SUN20I_D1
-+	bool "Clock driver for Allwinner D1"
-+	help
-+	  This enables common clock driver support for platforms based
-+	  on Allwinner D1 SoC.
-+
- config CLK_SUN50I_H6
- 	bool "Clock driver for Allwinner H6"
- 	default MACH_SUN50I_H6
---- a/drivers/clk/sunxi/Makefile
-+++ b/drivers/clk/sunxi/Makefile
-@@ -19,6 +19,7 @@ obj-$(CONFIG_CLK_SUN8I_R40) += clk_r40.o
- obj-$(CONFIG_CLK_SUN8I_V3S) += clk_v3s.o
- obj-$(CONFIG_CLK_SUN9I_A80) += clk_a80.o
- obj-$(CONFIG_CLK_SUN8I_H3) += clk_h3.o
-+obj-$(CONFIG_CLK_SUN20I_D1) += clk_d1.o
- obj-$(CONFIG_CLK_SUN50I_H6) += clk_h6.o
- obj-$(CONFIG_CLK_SUN50I_H6_R) += clk_h6_r.o
- obj-$(CONFIG_CLK_SUN50I_H616) += clk_h616.o
---- /dev/null
-+++ b/drivers/clk/sunxi/clk_d1.c
-@@ -0,0 +1,82 @@
-+// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
-+/*
-+ * Copyright (C) 2021 Samuel Holland <[email protected]>
-+ */
-+
-+#include <common.h>
-+#include <clk-uclass.h>
-+#include <dm.h>
-+#include <errno.h>
-+#include <clk/sunxi.h>
-+#include <dt-bindings/clock/sun20i-d1-ccu.h>
-+#include <dt-bindings/reset/sun20i-d1-ccu.h>
-+#include <linux/bitops.h>
-+
-+static struct ccu_clk_gate d1_gates[] = {
-+	[CLK_BUS_MMC0]		= GATE(0x84c, BIT(0)),
-+	[CLK_BUS_MMC1]		= GATE(0x84c, BIT(1)),
-+	[CLK_BUS_MMC2]		= GATE(0x84c, BIT(2)),
-+	[CLK_BUS_UART0]		= GATE(0x90c, BIT(0)),
-+	[CLK_BUS_UART1]		= GATE(0x90c, BIT(1)),
-+	[CLK_BUS_UART2]		= GATE(0x90c, BIT(2)),
-+	[CLK_BUS_UART3]		= GATE(0x90c, BIT(3)),
-+	[CLK_BUS_UART4]		= GATE(0x90c, BIT(4)),
-+	[CLK_BUS_UART5]		= GATE(0x90c, BIT(5)),
-+	[CLK_BUS_I2C0]		= GATE(0x91c, BIT(0)),
-+	[CLK_BUS_I2C1]		= GATE(0x91c, BIT(1)),
-+	[CLK_BUS_I2C2]		= GATE(0x91c, BIT(2)),
-+	[CLK_BUS_I2C3]		= GATE(0x91c, BIT(3)),
-+	[CLK_SPI0]		= GATE(0x940, BIT(31)),
-+	[CLK_SPI1]		= GATE(0x944, BIT(31)),
-+	[CLK_BUS_SPI0]		= GATE(0x96c, BIT(0)),
-+	[CLK_BUS_SPI1]		= GATE(0x96c, BIT(1)),
-+
-+	[CLK_BUS_EMAC]		= GATE(0x97c, BIT(0)),
-+
-+	[CLK_USB_OHCI0]		= GATE(0xa70, BIT(31)),
-+	[CLK_USB_OHCI1]		= GATE(0xa74, BIT(31)),
-+	[CLK_BUS_OHCI0]		= GATE(0xa8c, BIT(0)),
-+	[CLK_BUS_OHCI1]		= GATE(0xa8c, BIT(1)),
-+	[CLK_BUS_EHCI0]		= GATE(0xa8c, BIT(4)),
-+	[CLK_BUS_EHCI1]		= GATE(0xa8c, BIT(5)),
-+	[CLK_BUS_OTG]		= GATE(0xa8c, BIT(8)),
-+	[CLK_BUS_LRADC]		= GATE(0xa9c, BIT(0)),
-+
-+	[CLK_RISCV]		= GATE(0xd04, BIT(31)),
-+};
-+
-+static struct ccu_reset d1_resets[] = {
-+	[RST_BUS_MMC0]		= RESET(0x84c, BIT(16)),
-+	[RST_BUS_MMC1]		= RESET(0x84c, BIT(17)),
-+	[RST_BUS_MMC2]		= RESET(0x84c, BIT(18)),
-+	[RST_BUS_UART0]		= RESET(0x90c, BIT(16)),
-+	[RST_BUS_UART1]		= RESET(0x90c, BIT(17)),
-+	[RST_BUS_UART2]		= RESET(0x90c, BIT(18)),
-+	[RST_BUS_UART3]		= RESET(0x90c, BIT(19)),
-+	[RST_BUS_UART4]		= RESET(0x90c, BIT(20)),
-+	[RST_BUS_UART5]		= RESET(0x90c, BIT(21)),
-+	[RST_BUS_I2C0]		= RESET(0x91c, BIT(16)),
-+	[RST_BUS_I2C1]		= RESET(0x91c, BIT(17)),
-+	[RST_BUS_I2C2]		= RESET(0x91c, BIT(18)),
-+	[RST_BUS_I2C3]		= RESET(0x91c, BIT(19)),
-+	[RST_BUS_SPI0]		= RESET(0x96c, BIT(16)),
-+	[RST_BUS_SPI1]		= RESET(0x96c, BIT(17)),
-+
-+	[RST_BUS_EMAC]		= RESET(0x97c, BIT(16)),
-+
-+	[RST_USB_PHY0]		= RESET(0xa70, BIT(30)),
-+	[RST_USB_PHY1]		= RESET(0xa74, BIT(30)),
-+	[RST_BUS_OHCI0]		= RESET(0xa8c, BIT(16)),
-+	[RST_BUS_OHCI1]		= RESET(0xa8c, BIT(17)),
-+	[RST_BUS_EHCI0]		= RESET(0xa8c, BIT(20)),
-+	[RST_BUS_EHCI1]		= RESET(0xa8c, BIT(21)),
-+	[RST_BUS_OTG]		= RESET(0xa8c, BIT(24)),
-+	[RST_BUS_LRADC]		= RESET(0xa9c, BIT(16)),
-+};
-+
-+const struct ccu_desc d1_ccu_desc = {
-+	.gates	= d1_gates,
-+	.resets	= d1_resets,
-+	.num_gates = ARRAY_SIZE(d1_gates),
-+	.num_resets = ARRAY_SIZE(d1_resets),
-+};
---- a/drivers/clk/sunxi/clk_sunxi.c
-+++ b/drivers/clk/sunxi/clk_sunxi.c
-@@ -118,6 +118,7 @@ extern const struct ccu_desc a64_ccu_des
- extern const struct ccu_desc a80_ccu_desc;
- extern const struct ccu_desc a80_mmc_clk_desc;
- extern const struct ccu_desc a83t_ccu_desc;
-+extern const struct ccu_desc d1_ccu_desc;
- extern const struct ccu_desc f1c100s_ccu_desc;
- extern const struct ccu_desc h3_ccu_desc;
- extern const struct ccu_desc h6_ccu_desc;
-@@ -183,6 +184,10 @@ static const struct udevice_id sunxi_clk
- 	{ .compatible = "allwinner,sun9i-a80-mmc-config-clk",
- 	  .data = (ulong)&a80_mmc_clk_desc },
- #endif
-+#ifdef CONFIG_CLK_SUN20I_D1
-+	{ .compatible = "allwinner,sun20i-d1-ccu",
-+	  .data = (ulong)&d1_ccu_desc },
-+#endif
- #ifdef CONFIG_CLK_SUN50I_A64
- 	{ .compatible = "allwinner,sun50i-a64-ccu",
- 	  .data = (ulong)&a64_ccu_desc },
---- /dev/null
-+++ b/include/dt-bindings/clock/sun20i-d1-ccu.h
-@@ -0,0 +1,156 @@
-+/* SPDX-License-Identifier: (GPL-2.0+ or MIT) */
-+/*
-+ * Copyright (C) 2020 [email protected]
-+ * Copyright (C) 2021 Samuel Holland <[email protected]>
-+ */
-+
-+#ifndef _DT_BINDINGS_CLK_SUN20I_D1_CCU_H_
-+#define _DT_BINDINGS_CLK_SUN20I_D1_CCU_H_
-+
-+#define CLK_PLL_CPUX		0
-+#define CLK_PLL_DDR0		1
-+#define CLK_PLL_PERIPH0_4X	2
-+#define CLK_PLL_PERIPH0_2X	3
-+#define CLK_PLL_PERIPH0_800M	4
-+#define CLK_PLL_PERIPH0		5
-+#define CLK_PLL_PERIPH0_DIV3	6
-+#define CLK_PLL_VIDEO0_4X	7
-+#define CLK_PLL_VIDEO0_2X	8
-+#define CLK_PLL_VIDEO0		9
-+#define CLK_PLL_VIDEO1_4X	10
-+#define CLK_PLL_VIDEO1_2X	11
-+#define CLK_PLL_VIDEO1		12
-+#define CLK_PLL_VE		13
-+#define CLK_PLL_AUDIO0_4X	14
-+#define CLK_PLL_AUDIO0_2X	15
-+#define CLK_PLL_AUDIO0		16
-+#define CLK_PLL_AUDIO1		17
-+#define CLK_PLL_AUDIO1_DIV2	18
-+#define CLK_PLL_AUDIO1_DIV5	19
-+#define CLK_CPUX		20
-+#define CLK_CPUX_AXI		21
-+#define CLK_CPUX_APB		22
-+#define CLK_PSI_AHB		23
-+#define CLK_APB0		24
-+#define CLK_APB1		25
-+#define CLK_MBUS		26
-+#define CLK_DE			27
-+#define CLK_BUS_DE		28
-+#define CLK_DI			29
-+#define CLK_BUS_DI		30
-+#define CLK_G2D			31
-+#define CLK_BUS_G2D		32
-+#define CLK_CE			33
-+#define CLK_BUS_CE		34
-+#define CLK_VE			35
-+#define CLK_BUS_VE		36
-+#define CLK_BUS_DMA		37
-+#define CLK_BUS_MSGBOX0		38
-+#define CLK_BUS_MSGBOX1		39
-+#define CLK_BUS_MSGBOX2		40
-+#define CLK_BUS_SPINLOCK	41
-+#define CLK_BUS_HSTIMER		42
-+#define CLK_AVS			43
-+#define CLK_BUS_DBG		44
-+#define CLK_BUS_PWM		45
-+#define CLK_BUS_IOMMU		46
-+#define CLK_DRAM		47
-+#define CLK_MBUS_DMA		48
-+#define CLK_MBUS_VE		49
-+#define CLK_MBUS_CE		50
-+#define CLK_MBUS_TVIN		51
-+#define CLK_MBUS_CSI		52
-+#define CLK_MBUS_G2D		53
-+#define CLK_MBUS_RISCV		54
-+#define CLK_BUS_DRAM		55
-+#define CLK_MMC0		56
-+#define CLK_MMC1		57
-+#define CLK_MMC2		58
-+#define CLK_BUS_MMC0		59
-+#define CLK_BUS_MMC1		60
-+#define CLK_BUS_MMC2		61
-+#define CLK_BUS_UART0		62
-+#define CLK_BUS_UART1		63
-+#define CLK_BUS_UART2		64
-+#define CLK_BUS_UART3		65
-+#define CLK_BUS_UART4		66
-+#define CLK_BUS_UART5		67
-+#define CLK_BUS_I2C0		68
-+#define CLK_BUS_I2C1		69
-+#define CLK_BUS_I2C2		70
-+#define CLK_BUS_I2C3		71
-+#define CLK_SPI0		72
-+#define CLK_SPI1		73
-+#define CLK_BUS_SPI0		74
-+#define CLK_BUS_SPI1		75
-+#define CLK_EMAC_25M		76
-+#define CLK_BUS_EMAC		77
-+#define CLK_IR_TX		78
-+#define CLK_BUS_IR_TX		79
-+#define CLK_BUS_GPADC		80
-+#define CLK_BUS_THS		81
-+#define CLK_I2S0		82
-+#define CLK_I2S1		83
-+#define CLK_I2S2		84
-+#define CLK_I2S2_ASRC		85
-+#define CLK_BUS_I2S0		86
-+#define CLK_BUS_I2S1		87
-+#define CLK_BUS_I2S2		88
-+#define CLK_SPDIF_TX		89
-+#define CLK_SPDIF_RX		90
-+#define CLK_BUS_SPDIF		91
-+#define CLK_DMIC		92
-+#define CLK_BUS_DMIC		93
-+#define CLK_AUDIO_DAC		94
-+#define CLK_AUDIO_ADC		95
-+#define CLK_BUS_AUDIO		96
-+#define CLK_USB_OHCI0		97
-+#define CLK_USB_OHCI1		98
-+#define CLK_BUS_OHCI0		99
-+#define CLK_BUS_OHCI1		100
-+#define CLK_BUS_EHCI0		101
-+#define CLK_BUS_EHCI1		102
-+#define CLK_BUS_OTG		103
-+#define CLK_BUS_LRADC		104
-+#define CLK_BUS_DPSS_TOP	105
-+#define CLK_HDMI_24M		106
-+#define CLK_HDMI_CEC_32K	107
-+#define CLK_HDMI_CEC		108
-+#define CLK_BUS_HDMI		109
-+#define CLK_MIPI_DSI		110
-+#define CLK_BUS_MIPI_DSI	111
-+#define CLK_TCON_LCD0		112
-+#define CLK_BUS_TCON_LCD0	113
-+#define CLK_TCON_TV		114
-+#define CLK_BUS_TCON_TV		115
-+#define CLK_TVE			116
-+#define CLK_BUS_TVE_TOP		117
-+#define CLK_BUS_TVE		118
-+#define CLK_TVD			119
-+#define CLK_BUS_TVD_TOP		120
-+#define CLK_BUS_TVD		121
-+#define CLK_LEDC		122
-+#define CLK_BUS_LEDC		123
-+#define CLK_CSI_TOP		124
-+#define CLK_CSI_MCLK		125
-+#define CLK_BUS_CSI		126
-+#define CLK_TPADC		127
-+#define CLK_BUS_TPADC		128
-+#define CLK_BUS_TZMA		129
-+#define CLK_DSP			130
-+#define CLK_BUS_DSP_CFG		131
-+#define CLK_RISCV		132
-+#define CLK_RISCV_AXI		133
-+#define CLK_BUS_RISCV_CFG	134
-+#define CLK_FANOUT_24M		135
-+#define CLK_FANOUT_12M		136
-+#define CLK_FANOUT_16M		137
-+#define CLK_FANOUT_25M		138
-+#define CLK_FANOUT_32K		139
-+#define CLK_FANOUT_27M		140
-+#define CLK_FANOUT_PCLK		141
-+#define CLK_FANOUT0		142
-+#define CLK_FANOUT1		143
-+#define CLK_FANOUT2		144
-+
-+#endif /* _DT_BINDINGS_CLK_SUN20I_D1_CCU_H_ */
---- /dev/null
-+++ b/include/dt-bindings/reset/sun20i-d1-ccu.h
-@@ -0,0 +1,77 @@
-+/* SPDX-License-Identifier: (GPL-2.0+ or MIT) */
-+/*
-+ * Copyright (c) 2020 [email protected]
-+ * Copyright (C) 2021 Samuel Holland <[email protected]>
-+ */
-+
-+#ifndef _DT_BINDINGS_RST_SUN20I_D1_CCU_H_
-+#define _DT_BINDINGS_RST_SUN20I_D1_CCU_H_
-+
-+#define RST_MBUS		0
-+#define RST_BUS_DE		1
-+#define RST_BUS_DI		2
-+#define RST_BUS_G2D		3
-+#define RST_BUS_CE		4
-+#define RST_BUS_VE		5
-+#define RST_BUS_DMA		6
-+#define RST_BUS_MSGBOX0		7
-+#define RST_BUS_MSGBOX1		8
-+#define RST_BUS_MSGBOX2		9
-+#define RST_BUS_SPINLOCK	10
-+#define RST_BUS_HSTIMER		11
-+#define RST_BUS_DBG		12
-+#define RST_BUS_PWM		13
-+#define RST_BUS_DRAM		14
-+#define RST_BUS_MMC0		15
-+#define RST_BUS_MMC1		16
-+#define RST_BUS_MMC2		17
-+#define RST_BUS_UART0		18
-+#define RST_BUS_UART1		19
-+#define RST_BUS_UART2		20
-+#define RST_BUS_UART3		21
-+#define RST_BUS_UART4		22
-+#define RST_BUS_UART5		23
-+#define RST_BUS_I2C0		24
-+#define RST_BUS_I2C1		25
-+#define RST_BUS_I2C2		26
-+#define RST_BUS_I2C3		27
-+#define RST_BUS_SPI0		28
-+#define RST_BUS_SPI1		29
-+#define RST_BUS_EMAC		30
-+#define RST_BUS_IR_TX		31
-+#define RST_BUS_GPADC		32
-+#define RST_BUS_THS		33
-+#define RST_BUS_I2S0		34
-+#define RST_BUS_I2S1		35
-+#define RST_BUS_I2S2		36
-+#define RST_BUS_SPDIF		37
-+#define RST_BUS_DMIC		38
-+#define RST_BUS_AUDIO		39
-+#define RST_USB_PHY0		40
-+#define RST_USB_PHY1		41
-+#define RST_BUS_OHCI0		42
-+#define RST_BUS_OHCI1		43
-+#define RST_BUS_EHCI0		44
-+#define RST_BUS_EHCI1		45
-+#define RST_BUS_OTG		46
-+#define RST_BUS_LRADC		47
-+#define RST_BUS_DPSS_TOP	48
-+#define RST_BUS_HDMI_SUB	49
-+#define RST_BUS_HDMI_MAIN	50
-+#define RST_BUS_MIPI_DSI	51
-+#define RST_BUS_TCON_LCD0	52
-+#define RST_BUS_TCON_TV		53
-+#define RST_BUS_LVDS0		54
-+#define RST_BUS_TVE		55
-+#define RST_BUS_TVE_TOP		56
-+#define RST_BUS_TVD		57
-+#define RST_BUS_TVD_TOP		58
-+#define RST_BUS_LEDC		59
-+#define RST_BUS_CSI		60
-+#define RST_BUS_TPADC		61
-+#define RST_DSP			62
-+#define RST_BUS_DSP_CFG		63
-+#define RST_BUS_DSP_DBG		64
-+#define RST_BUS_RISCV_CFG	65
-+
-+#endif /* _DT_BINDINGS_RST_SUN20I_D1_CCU_H_ */

+ 6 - 9
package/boot/uboot-d1/patches/0056-sunxi-Add-missing-dependencies-to-Kconfig-selections.patch → package/boot/uboot-d1/patches/0011-sunxi-Add-missing-dependencies-to-Kconfig-selections.patch

@@ -1,7 +1,7 @@
-From 9e12a7fd80276092da3a43b7dbaf572bad294419 Mon Sep 17 00:00:00 2001
+From cfe45b43247eca1f3ca82c76a114dd0201b23b40 Mon Sep 17 00:00:00 2001
 From: Samuel Holland <[email protected]>
 From: Samuel Holland <[email protected]>
 Date: Thu, 4 Aug 2022 23:29:13 -0500
 Date: Thu, 4 Aug 2022 23:29:13 -0500
-Subject: [PATCH 56/90] sunxi: Add missing dependencies to Kconfig selections
+Subject: [PATCH 11/68] sunxi: Add missing dependencies to Kconfig selections
 
 
 Some of the selected symbols have a user-visible dependency. Make the
 Some of the selected symbols have a user-visible dependency. Make the
 selections conditional on that dependency to avoid creating invalid
 selections conditional on that dependency to avoid creating invalid
@@ -9,12 +9,12 @@ configurations.
 
 
 Signed-off-by: Samuel Holland <[email protected]>
 Signed-off-by: Samuel Holland <[email protected]>
 ---
 ---
- arch/arm/Kconfig | 16 ++++++++--------
- 1 file changed, 8 insertions(+), 8 deletions(-)
+ arch/arm/Kconfig | 14 +++++++-------
+ 1 file changed, 7 insertions(+), 7 deletions(-)
 
 
 --- a/arch/arm/Kconfig
 --- a/arch/arm/Kconfig
 +++ b/arch/arm/Kconfig
 +++ b/arch/arm/Kconfig
-@@ -1090,30 +1090,30 @@ config ARCH_SOCFPGA
+@@ -1122,28 +1122,28 @@ config ARCH_SOCFPGA
  config ARCH_SUNXI
  config ARCH_SUNXI
  	bool "Support sunxi (Allwinner) SoCs"
  	bool "Support sunxi (Allwinner) SoCs"
  	select BINMAN
  	select BINMAN
@@ -24,18 +24,15 @@ Signed-off-by: Samuel Holland <[email protected]>
  	select CMD_USB if DISTRO_DEFAULTS && USB_HOST
  	select CMD_USB if DISTRO_DEFAULTS && USB_HOST
  	select CLK
  	select CLK
  	select DM
  	select DM
--	select DM_ETH
 -	select DM_GPIO
 -	select DM_GPIO
-+	select DM_ETH if NET
 +	select DM_GPIO if GPIO
 +	select DM_GPIO if GPIO
  	select DM_I2C if I2C
  	select DM_I2C if I2C
-+	select DM_SCSI if BLK && SCSI
++	select DM_SCSI if SCSI
 +	select DM_SERIAL if SERIAL
 +	select DM_SERIAL if SERIAL
  	select DM_SPI if SPI
  	select DM_SPI if SPI
  	select DM_SPI_FLASH if SPI
  	select DM_SPI_FLASH if SPI
 -	select DM_SCSI if SCSI
 -	select DM_SCSI if SCSI
 -	select DM_SERIAL
 -	select DM_SERIAL
- 	select GPIO_EXTRA_HEADER
  	select OF_BOARD_SETUP
  	select OF_BOARD_SETUP
  	select OF_CONTROL
  	select OF_CONTROL
  	select OF_SEPARATE
  	select OF_SEPARATE

+ 2 - 2
package/boot/uboot-d1/patches/0057-sunxi-Hide-image-type-selection-if-SPL-is-disabled.patch → package/boot/uboot-d1/patches/0012-sunxi-Hide-image-type-selection-if-SPL-is-disabled.patch

@@ -1,7 +1,7 @@
-From 2ba626d36e622f29528ce953618dde9a01bdacd6 Mon Sep 17 00:00:00 2001
+From a80637f9492a79c6e1b6d7a5f1a48aae08a0f004 Mon Sep 17 00:00:00 2001
 From: Samuel Holland <[email protected]>
 From: Samuel Holland <[email protected]>
 Date: Fri, 5 Aug 2022 21:56:43 -0500
 Date: Fri, 5 Aug 2022 21:56:43 -0500
-Subject: [PATCH 57/90] sunxi: Hide image type selection if SPL is disabled
+Subject: [PATCH 12/68] sunxi: Hide image type selection if SPL is disabled
 
 
 This choice is meaningless when SPL is disabled. Hide it to avoid any
 This choice is meaningless when SPL is disabled. Hide it to avoid any
 possible confusion.
 possible confusion.

+ 0 - 160
package/boot/uboot-d1/patches/0013-clk-sunxi-Add-a-driver-for-the-legacy-A31-A23-A33-PR.patch

@@ -1,160 +0,0 @@
-From 5a909f4d4d10f3a7a59b3b75eee502937e166891 Mon Sep 17 00:00:00 2001
-From: Samuel Holland <[email protected]>
-Date: Mon, 2 May 2022 22:00:05 -0500
-Subject: [PATCH 13/90] clk: sunxi: Add a driver for the legacy A31/A23/A33
- PRCM
-
-Signed-off-by: Samuel Holland <[email protected]>
----
- drivers/clk/sunxi/Kconfig        | 13 ++++-
- drivers/clk/sunxi/Makefile       |  1 +
- drivers/clk/sunxi/clk_a31_apb0.c | 97 ++++++++++++++++++++++++++++++++
- include/clk/sunxi.h              |  1 +
- 4 files changed, 110 insertions(+), 2 deletions(-)
- create mode 100644 drivers/clk/sunxi/clk_a31_apb0.c
-
---- a/drivers/clk/sunxi/Kconfig
-+++ b/drivers/clk/sunxi/Kconfig
-@@ -38,12 +38,21 @@ config CLK_SUN6I_A31
- 	  This enables common clock driver support for platforms based
- 	  on Allwinner A31/A31s SoC.
- 
-+config CLK_SUN6I_A31_APB0
-+	bool "Clock driver for Allwinner A31 generation PRCM (legacy)"
-+	default MACH_SUN6I || MACH_SUN8I_A23 || MACH_SUN8I_A33
-+	help
-+	  This enables common clock driver support for the PRCM
-+	  in Allwinner A31/A31s/A23/A33 SoCs using the legacy PRCM
-+	  MFD binding.
-+
- config CLK_SUN6I_A31_R
--	bool "Clock driver for Allwinner A31 generation PRCM"
-+	bool "Clock driver for Allwinner A31 generation PRCM (CCU)"
- 	default SUNXI_GEN_SUN6I
- 	help
- 	  This enables common clock driver support for the PRCM
--	  in Allwinner A31/A31s/A23/A33/A83T/H3/A64/H5 SoCs.
-+	  in Allwinner A31/A31s/A23/A33/A83T/H3/A64/H5 SoCs using
-+	  the new CCU binding.
- 
- config CLK_SUN8I_A23
- 	bool "Clock driver for Allwinner A23/A33"
---- a/drivers/clk/sunxi/Makefile
-+++ b/drivers/clk/sunxi/Makefile
-@@ -12,6 +12,7 @@ obj-$(CONFIG_CLK_SUNIV_F1C100S) += clk_f
- obj-$(CONFIG_CLK_SUN4I_A10) += clk_a10.o
- obj-$(CONFIG_CLK_SUN5I_A10S) += clk_a10s.o
- obj-$(CONFIG_CLK_SUN6I_A31) += clk_a31.o
-+obj-$(CONFIG_CLK_SUN6I_A31_APB0) += clk_a31_apb0.o
- obj-$(CONFIG_CLK_SUN6I_A31_R) += clk_a31_r.o
- obj-$(CONFIG_CLK_SUN8I_A23) += clk_a23.o
- obj-$(CONFIG_CLK_SUN8I_A83T) += clk_a83t.o
---- /dev/null
-+++ b/drivers/clk/sunxi/clk_a31_apb0.c
-@@ -0,0 +1,97 @@
-+// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
-+/*
-+ * Copyright (C) Samuel Holland <[email protected]>
-+ */
-+
-+#include <clk-uclass.h>
-+#include <dm.h>
-+#include <clk/sunxi.h>
-+#include <linux/bitops.h>
-+
-+static struct ccu_clk_gate sun6i_apb0_gates[] = {
-+	[0]	= GATE(0x028, BIT(0)),
-+	[1]	= GATE(0x028, BIT(1)),
-+	[2]	= GATE(0x028, BIT(2)),
-+	[3]	= GATE(0x028, BIT(3)),
-+	[4]	= GATE(0x028, BIT(4)),
-+	[5]	= GATE(0x028, BIT(5)),
-+	[6]	= GATE(0x028, BIT(6)),
-+	[7]	= GATE(0x028, BIT(7)),
-+};
-+
-+static struct ccu_reset sun6i_apb0_resets[] = {
-+	[0]	= RESET(0x0b0, BIT(0)),
-+	[1]	= RESET(0x0b0, BIT(1)),
-+	[2]	= RESET(0x0b0, BIT(2)),
-+	[3]	= RESET(0x0b0, BIT(3)),
-+	[4]	= RESET(0x0b0, BIT(4)),
-+	[5]	= RESET(0x0b0, BIT(5)),
-+	[6]	= RESET(0x0b0, BIT(6)),
-+	[7]	= RESET(0x0b0, BIT(7)),
-+};
-+
-+const struct ccu_desc sun6i_apb0_clk_desc = {
-+	.gates = sun6i_apb0_gates,
-+	.resets = sun6i_apb0_resets,
-+	.num_gates = ARRAY_SIZE(sun6i_apb0_gates),
-+	.num_resets = ARRAY_SIZE(sun6i_apb0_resets),
-+};
-+
-+static int sun6i_apb0_of_to_plat(struct udevice *dev)
-+{
-+	struct ccu_plat *plat = dev_get_plat(dev);
-+
-+	plat->base = dev_read_addr_ptr(dev->parent);
-+	if (!plat->base)
-+		return -ENOMEM;
-+
-+	plat->desc = (const struct ccu_desc *)dev_get_driver_data(dev);
-+	if (!plat->desc)
-+		return -EINVAL;
-+
-+	return 0;
-+}
-+
-+static const struct udevice_id sun6i_apb0_clk_ids[] = {
-+	{ .compatible = "allwinner,sun6i-a31-apb0-gates-clk",
-+	  .data = (ulong)&sun6i_apb0_clk_desc },
-+	{ .compatible = "allwinner,sun8i-a23-apb0-gates-clk",
-+	  .data = (ulong)&sun6i_apb0_clk_desc },
-+	{ }
-+};
-+
-+U_BOOT_DRIVER(sun6i_apb0_clk) = {
-+	.name		= "sun6i_apb0_clk",
-+	.id		= UCLASS_CLK,
-+	.of_match	= sun6i_apb0_clk_ids,
-+	.of_to_plat	= sun6i_apb0_of_to_plat,
-+	.plat_auto	= sizeof(struct ccu_plat),
-+	.ops		= &sunxi_clk_ops,
-+};
-+
-+static const struct udevice_id sun6i_apb0_reset_ids[] = {
-+	{ .compatible = "allwinner,sun6i-a31-clock-reset",
-+	  .data = (ulong)&sun6i_apb0_clk_desc },
-+	{ }
-+};
-+
-+U_BOOT_DRIVER(sun6i_apb0_reset) = {
-+	.name		= "sun6i_apb0_reset",
-+	.id		= UCLASS_RESET,
-+	.of_match	= sun6i_apb0_reset_ids,
-+	.of_to_plat	= sun6i_apb0_of_to_plat,
-+	.plat_auto	= sizeof(struct ccu_plat),
-+	.ops		= &sunxi_reset_ops,
-+};
-+
-+static const struct udevice_id sun6i_prcm_mfd_ids[] = {
-+	{ .compatible = "allwinner,sun6i-a31-prcm" },
-+	{ .compatible = "allwinner,sun8i-a23-prcm" },
-+	{ }
-+};
-+
-+U_BOOT_DRIVER(sun6i_prcm_mfd) = {
-+	.name		= "sun6i_prcm_mfd",
-+	.id		= UCLASS_SIMPLE_BUS,
-+	.of_match	= sun6i_prcm_mfd_ids,
-+};
---- a/include/clk/sunxi.h
-+++ b/include/clk/sunxi.h
-@@ -86,5 +86,6 @@ struct ccu_plat {
- };
- 
- extern struct clk_ops sunxi_clk_ops;
-+extern struct reset_ops sunxi_reset_ops;
- 
- #endif /* _CLK_SUNXI_H */

+ 5 - 5
package/boot/uboot-d1/patches/0058-sunxi-Share-the-board-Kconfig-across-architectures.patch → package/boot/uboot-d1/patches/0013-sunxi-Share-the-board-Kconfig-across-architectures.patch

@@ -1,7 +1,7 @@
-From 5d197433cd54085306e369ac260e09fe6077bfbb Mon Sep 17 00:00:00 2001
+From 64c72d292e8ed6c2aa183d966a5c2a844f76be96 Mon Sep 17 00:00:00 2001
 From: Samuel Holland <[email protected]>
 From: Samuel Holland <[email protected]>
 Date: Thu, 4 Aug 2022 21:30:57 -0500
 Date: Thu, 4 Aug 2022 21:30:57 -0500
-Subject: [PATCH 58/90] sunxi: Share the board Kconfig across architectures
+Subject: [PATCH 13/68] sunxi: Share the board Kconfig across architectures
 
 
 With the introduction of the Allwinner D1, the sunxi board family now
 With the introduction of the Allwinner D1, the sunxi board family now
 spans multiple architectures (ARM and RISC-V). Since ARCH_SUNXI depends
 spans multiple architectures (ARM and RISC-V). Since ARCH_SUNXI depends
@@ -23,7 +23,7 @@ Signed-off-by: Samuel Holland <[email protected]>
 
 
 --- a/arch/Kconfig
 --- a/arch/Kconfig
 +++ b/arch/Kconfig
 +++ b/arch/Kconfig
-@@ -482,6 +482,7 @@ source "arch/Kconfig.nxp"
+@@ -494,6 +494,7 @@ source "arch/Kconfig.nxp"
  endif
  endif
  
  
  source "board/keymile/Kconfig"
  source "board/keymile/Kconfig"
@@ -33,7 +33,7 @@ Signed-off-by: Samuel Holland <[email protected]>
  
  
 --- a/arch/arm/Kconfig
 --- a/arch/arm/Kconfig
 +++ b/arch/arm/Kconfig
 +++ b/arch/arm/Kconfig
-@@ -1090,6 +1090,7 @@ config ARCH_SOCFPGA
+@@ -1122,6 +1122,7 @@ config ARCH_SOCFPGA
  config ARCH_SUNXI
  config ARCH_SUNXI
  	bool "Support sunxi (Allwinner) SoCs"
  	bool "Support sunxi (Allwinner) SoCs"
  	select BINMAN
  	select BINMAN
@@ -43,7 +43,7 @@ Signed-off-by: Samuel Holland <[email protected]>
  	select CMD_USB if DISTRO_DEFAULTS && USB_HOST
  	select CMD_USB if DISTRO_DEFAULTS && USB_HOST
 --- a/arch/arm/mach-sunxi/Kconfig
 --- a/arch/arm/mach-sunxi/Kconfig
 +++ b/arch/arm/mach-sunxi/Kconfig
 +++ b/arch/arm/mach-sunxi/Kconfig
-@@ -959,8 +959,6 @@ config BLUETOOTH_DT_DEVICE_FIXUP
+@@ -1095,8 +1095,6 @@ config BLUETOOTH_DT_DEVICE_FIXUP
  	  The used address is "bdaddr" if set, and "ethaddr" with the LSB
  	  The used address is "bdaddr" if set, and "ethaddr" with the LSB
  	  flipped elsewise.
  	  flipped elsewise.
  
  

+ 0 - 21
package/boot/uboot-d1/patches/0014-clk-sunxi-Use-the-right-symbol-in-the-Makefile.patch

@@ -1,21 +0,0 @@
-From 3d97f99cb173422ee8a15b7ec1df83ff61e68204 Mon Sep 17 00:00:00 2001
-From: Samuel Holland <[email protected]>
-Date: Sun, 30 Oct 2022 14:28:23 -0500
-Subject: [PATCH 14/90] clk: sunxi: Use the right symbol in the Makefile
-
-Signed-off-by: Samuel Holland <[email protected]>
----
- drivers/clk/Makefile | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
---- a/drivers/clk/Makefile
-+++ b/drivers/clk/Makefile
-@@ -25,7 +25,7 @@ obj-$(CONFIG_ARCH_ROCKCHIP) += rockchip/
- obj-$(CONFIG_ARCH_SOCFPGA) += altera/
- obj-$(CONFIG_ARCH_STM32) += stm32/
- obj-$(CONFIG_ARCH_STM32MP) += stm32/
--obj-$(CONFIG_ARCH_SUNXI) += sunxi/
-+obj-$(CONFIG_CLK_SUNXI) += sunxi/
- obj-$(CONFIG_CLK_AT91) += at91/
- obj-$(CONFIG_CLK_BCM6345) += clk_bcm6345.o
- obj-$(CONFIG_CLK_BOSTON) += clk_boston.o

+ 14 - 16
package/boot/uboot-d1/patches/0059-sunxi-Move-most-Kconfig-selections-to-the-board-Kcon.patch → package/boot/uboot-d1/patches/0014-sunxi-Move-most-Kconfig-selections-to-the-board-Kcon.patch

@@ -1,7 +1,7 @@
-From 963331be1cc924ad7c928f88b3ee46bc20a41bcd Mon Sep 17 00:00:00 2001
-From: Zoltan HERPAI <[email protected]>
-Date: Tue, 6 Jun 2023 18:06:20 +0000
-Subject: [PATCH 59/90] sunxi: Move most Kconfig selections to the board
+From 957c017647a8bcd9908fc67dc106c438d79fd6c6 Mon Sep 17 00:00:00 2001
+From: Samuel Holland <[email protected]>
+Date: Thu, 4 Aug 2022 22:42:29 -0500
+Subject: [PATCH 14/68] sunxi: Move most Kconfig selections to the board
  Kconfig
  Kconfig
 
 
 To maintain consistent behavior across architectures, most of the
 To maintain consistent behavior across architectures, most of the
@@ -11,16 +11,14 @@ well. To accomplish this, select them from BOARD_SUNXI instead.
 No functional change here. Lines are only moved and alphabetized.
 No functional change here. Lines are only moved and alphabetized.
 
 
 Signed-off-by: Samuel Holland <[email protected]>
 Signed-off-by: Samuel Holland <[email protected]>
-
-Signed-off-by: Zoltan HERPAI <[email protected]>
 ---
 ---
  arch/arm/Kconfig    | 47 ---------------------------------------------
  arch/arm/Kconfig    | 47 ---------------------------------------------
- board/sunxi/Kconfig | 46 ++++++++++++++++++++++++++++++++++++++++++++
- 2 files changed, 46 insertions(+), 47 deletions(-)
+ board/sunxi/Kconfig | 47 +++++++++++++++++++++++++++++++++++++++++++++
+ 2 files changed, 47 insertions(+), 47 deletions(-)
 
 
 --- a/arch/arm/Kconfig
 --- a/arch/arm/Kconfig
 +++ b/arch/arm/Kconfig
 +++ b/arch/arm/Kconfig
-@@ -1089,63 +1089,16 @@ config ARCH_SOCFPGA
+@@ -1121,62 +1121,15 @@ config ARCH_SOCFPGA
  
  
  config ARCH_SUNXI
  config ARCH_SUNXI
  	bool "Support sunxi (Allwinner) SoCs"
  	bool "Support sunxi (Allwinner) SoCs"
@@ -31,14 +29,12 @@ Signed-off-by: Zoltan HERPAI <[email protected]>
 -	select CMD_USB if DISTRO_DEFAULTS && USB_HOST
 -	select CMD_USB if DISTRO_DEFAULTS && USB_HOST
 -	select CLK
 -	select CLK
 -	select DM
 -	select DM
--	select DM_ETH if NET
 -	select DM_GPIO if GPIO
 -	select DM_GPIO if GPIO
 -	select DM_I2C if I2C
 -	select DM_I2C if I2C
--	select DM_SCSI if BLK && SCSI
+-	select DM_SCSI if SCSI
 -	select DM_SERIAL if SERIAL
 -	select DM_SERIAL if SERIAL
 -	select DM_SPI if SPI
 -	select DM_SPI if SPI
 -	select DM_SPI_FLASH if SPI
 -	select DM_SPI_FLASH if SPI
- 	select GPIO_EXTRA_HEADER
 -	select OF_BOARD_SETUP
 -	select OF_BOARD_SETUP
  	select OF_CONTROL
  	select OF_CONTROL
  	select OF_SEPARATE
  	select OF_SEPARATE
@@ -61,6 +57,8 @@ Signed-off-by: Zoltan HERPAI <[email protected]>
 -	imply CMD_GPT
 -	imply CMD_GPT
 -	imply CMD_UBI if MTD_RAW_NAND
 -	imply CMD_UBI if MTD_RAW_NAND
 -	imply DISTRO_DEFAULTS
 -	imply DISTRO_DEFAULTS
+-	imply DM_REGULATOR
+-	imply DM_REGULATOR_FIXED
 -	imply FAT_WRITE
 -	imply FAT_WRITE
 -	imply FIT
 -	imply FIT
 -	imply OF_LIBFDT_OVERLAY
 -	imply OF_LIBFDT_OVERLAY
@@ -68,7 +66,6 @@ Signed-off-by: Zoltan HERPAI <[email protected]>
 -	imply SPL_GPIO
 -	imply SPL_GPIO
 -	imply SPL_LIBCOMMON_SUPPORT
 -	imply SPL_LIBCOMMON_SUPPORT
 -	imply SPL_LIBGENERIC_SUPPORT
 -	imply SPL_LIBGENERIC_SUPPORT
--	imply SPL_LOAD_FIT
 -	imply SPL_MMC if MMC
 -	imply SPL_MMC if MMC
 -	imply SPL_POWER
 -	imply SPL_POWER
 -	imply SPL_SERIAL
 -	imply SPL_SERIAL
@@ -86,7 +83,7 @@ Signed-off-by: Zoltan HERPAI <[email protected]>
  	bool "ST-Ericsson U8500 Series"
  	bool "ST-Ericsson U8500 Series"
 --- a/board/sunxi/Kconfig
 --- a/board/sunxi/Kconfig
 +++ b/board/sunxi/Kconfig
 +++ b/board/sunxi/Kconfig
-@@ -1,5 +1,51 @@
+@@ -1,5 +1,52 @@
  config BOARD_SUNXI
  config BOARD_SUNXI
  	bool
  	bool
 +	select BINMAN
 +	select BINMAN
@@ -95,10 +92,9 @@ Signed-off-by: Zoltan HERPAI <[email protected]>
 +	select CMD_MMC if MMC
 +	select CMD_MMC if MMC
 +	select CMD_USB if DISTRO_DEFAULTS && USB_HOST
 +	select CMD_USB if DISTRO_DEFAULTS && USB_HOST
 +	select DM
 +	select DM
-+	select DM_ETH if NET
 +	select DM_GPIO if GPIO
 +	select DM_GPIO if GPIO
 +	select DM_I2C if I2C
 +	select DM_I2C if I2C
-+	select DM_SCSI if BLK && SCSI
++	select DM_SCSI if SCSI
 +	select DM_SERIAL if SERIAL
 +	select DM_SERIAL if SERIAL
 +	select DM_SPI if SPI
 +	select DM_SPI if SPI
 +	select DM_SPI_FLASH if SPI
 +	select DM_SPI_FLASH if SPI
@@ -116,6 +112,8 @@ Signed-off-by: Zoltan HERPAI <[email protected]>
 +	imply CMD_GPT
 +	imply CMD_GPT
 +	imply CMD_UBI if MTD_RAW_NAND
 +	imply CMD_UBI if MTD_RAW_NAND
 +	imply DISTRO_DEFAULTS
 +	imply DISTRO_DEFAULTS
++	imply DM_REGULATOR
++	imply DM_REGULATOR_FIXED
 +	imply FAT_WRITE
 +	imply FAT_WRITE
 +	imply FIT
 +	imply FIT
 +	imply OF_LIBFDT_OVERLAY
 +	imply OF_LIBFDT_OVERLAY

+ 0 - 100
package/boot/uboot-d1/patches/0015-net-sun8i-emac-Use-common-syscon-setup-for-R40.patch

@@ -1,100 +0,0 @@
-From 9766169812418aee10dbc8d40aca27c1c576f521 Mon Sep 17 00:00:00 2001
-From: Samuel Holland <[email protected]>
-Date: Thu, 14 Jul 2022 23:39:46 -0500
-Subject: [PATCH 15/90] net: sun8i-emac: Use common syscon setup for R40
-
-While R40 puts the EMAC syscon register at a different address from
-other variants, the relevant portion of the register's layout is the
-same. Factor out the register offset so the same code can be shared
-by all variants. This matches what the Linux driver does.
-
-This change provides two benefits beyond the simplification:
- - R40 boards now respect the RX delays from the devicetree
- - This resolves a warning on architectures where readl/writel
-   expect the address to have a pointer type, not phys_addr_t.
-
-Series-to: sunxi
-
-Cover-letter:
-net: sun8i-emac: Allwinner D1 Support
-D1 is a RISC-V SoC containing an EMAC compatible with the A64 EMAC.
-However, there are a couple of issues with the driver preventing it
-being built for RISC-V. These are resolved by patches 2-3. Patch 1 is
-a general cleanup.
-END
-
-Signed-off-by: Samuel Holland <[email protected]>
----
- drivers/net/sun8i_emac.c | 29 ++++++++++++-----------------
- 1 file changed, 12 insertions(+), 17 deletions(-)
-
---- a/drivers/net/sun8i_emac.c
-+++ b/drivers/net/sun8i_emac.c
-@@ -162,7 +162,7 @@ struct emac_eth_dev {
- 
- 	enum emac_variant variant;
- 	void *mac_reg;
--	phys_addr_t sysctl_reg;
-+	void *sysctl_reg;
- 	struct phy_device *phydev;
- 	struct mii_dev *bus;
- 	struct clk tx_clk;
-@@ -317,18 +317,7 @@ static int sun8i_emac_set_syscon(struct
- {
- 	u32 reg;
- 
--	if (priv->variant == R40_GMAC) {
--		/* Select RGMII for R40 */
--		reg = readl(priv->sysctl_reg + 0x164);
--		reg |= SC_ETCS_INT_GMII |
--		       SC_EPIT |
--		       (CONFIG_GMAC_TX_DELAY << SC_ETXDC_OFFSET);
--
--		writel(reg, priv->sysctl_reg + 0x164);
--		return 0;
--	}
--
--	reg = readl(priv->sysctl_reg + 0x30);
-+	reg = readl(priv->sysctl_reg);
- 
- 	reg = sun8i_emac_set_syscon_ephy(priv, reg);
- 
-@@ -369,7 +358,7 @@ static int sun8i_emac_set_syscon(struct
- 		reg |= ((pdata->rx_delay_ps / 100) << SC_ERXDC_OFFSET)
- 			 & SC_ERXDC_MASK;
- 
--	writel(reg, priv->sysctl_reg + 0x30);
-+	writel(reg, priv->sysctl_reg);
- 
- 	return 0;
- }
-@@ -792,6 +781,7 @@ static int sun8i_emac_eth_of_to_plat(str
- 	struct sun8i_eth_pdata *sun8i_pdata = dev_get_plat(dev);
- 	struct eth_pdata *pdata = &sun8i_pdata->eth_pdata;
- 	struct emac_eth_dev *priv = dev_get_priv(dev);
-+	phys_addr_t syscon_base;
- 	const fdt32_t *reg;
- 	int node = dev_of_offset(dev);
- 	int offset = 0;
-@@ -837,13 +827,18 @@ static int sun8i_emac_eth_of_to_plat(str
- 		      __func__);
- 		return -EINVAL;
- 	}
--	priv->sysctl_reg = fdt_translate_address((void *)gd->fdt_blob,
--						 offset, reg);
--	if (priv->sysctl_reg == FDT_ADDR_T_NONE) {
-+
-+	syscon_base = fdt_translate_address((void *)gd->fdt_blob, offset, reg);
-+	if (syscon_base == FDT_ADDR_T_NONE) {
- 		debug("%s: Cannot find syscon base address\n", __func__);
- 		return -EINVAL;
- 	}
- 
-+	if (priv->variant == R40_GMAC)
-+		priv->sysctl_reg = (void *)syscon_base + 0x164;
-+	else
-+		priv->sysctl_reg = (void *)syscon_base + 0x30;
-+
- 	pdata->phy_interface = -1;
- 	priv->phyaddr = -1;
- 	priv->use_internal_phy = false;

+ 20 - 21
package/boot/uboot-d1/patches/0060-sunxi-Globally-enable-SUPPORT_SPL.patch → package/boot/uboot-d1/patches/0015-sunxi-Globally-enable-SUPPORT_SPL.patch

@@ -1,13 +1,12 @@
-From 5838fd3a53e613312d46ab4cb6015a502c4c45d0 Mon Sep 17 00:00:00 2001
-From: Zoltan HERPAI <[email protected]>
-Date: Tue, 6 Jun 2023 18:07:24 +0000
-Subject: [PATCH 60/90] sunxi: Globally enable SUPPORT_SPL
+From 0c6f608a682d2ba1e28e7d0f54186e78a44916f4 Mon Sep 17 00:00:00 2001
+From: Samuel Holland <[email protected]>
+Date: Fri, 5 Aug 2022 23:31:04 -0500
+Subject: [PATCH 15/68] sunxi: Globally enable SUPPORT_SPL
 
 
 This was already supported by every machine type. It is unlikely that
 This was already supported by every machine type. It is unlikely that
 any new SoC support will be added without SPL support.
 any new SoC support will be added without SPL support.
 
 
 Signed-off-by: Samuel Holland <[email protected]>
 Signed-off-by: Samuel Holland <[email protected]>
-Signed-off-by: Zoltan HERPAI <[email protected]>
 ---
 ---
  arch/arm/mach-sunxi/Kconfig | 14 --------------
  arch/arm/mach-sunxi/Kconfig | 14 --------------
  board/sunxi/Kconfig         |  2 ++
  board/sunxi/Kconfig         |  2 ++
@@ -15,7 +14,7 @@ Signed-off-by: Zoltan HERPAI <[email protected]>
 
 
 --- a/arch/arm/mach-sunxi/Kconfig
 --- a/arch/arm/mach-sunxi/Kconfig
 +++ b/arch/arm/mach-sunxi/Kconfig
 +++ b/arch/arm/mach-sunxi/Kconfig
-@@ -133,7 +133,6 @@ config SUN50I_GEN_H6
+@@ -184,7 +184,6 @@ config SUN50I_GEN_H6
  	select FIT
  	select FIT
  	select SPL_LOAD_FIT
  	select SPL_LOAD_FIT
  	select MMC_SUNXI_HAS_NEW_MODE
  	select MMC_SUNXI_HAS_NEW_MODE
@@ -23,7 +22,7 @@ Signed-off-by: Zoltan HERPAI <[email protected]>
  	---help---
  	---help---
  	Select this for sunxi SoCs which have H6 like peripherals, clocks
  	Select this for sunxi SoCs which have H6 like peripherals, clocks
  	and memory map.
  	and memory map.
-@@ -166,7 +165,6 @@ config MACH_SUNXI_H3_H5
+@@ -225,7 +224,6 @@ config MACH_SUNXI_H3_H5
  	select SUNXI_DRAM_DW
  	select SUNXI_DRAM_DW
  	select SUNXI_DRAM_DW_32BIT
  	select SUNXI_DRAM_DW_32BIT
  	select SUNXI_GEN_SUN6I
  	select SUNXI_GEN_SUN6I
@@ -31,7 +30,7 @@ Signed-off-by: Zoltan HERPAI <[email protected]>
  
  
  # TODO: try out A80's 8GiB DRAM space
  # TODO: try out A80's 8GiB DRAM space
  config SUNXI_DRAM_MAX_SIZE
  config SUNXI_DRAM_MAX_SIZE
-@@ -183,7 +181,6 @@ config MACH_SUNIV
+@@ -242,7 +240,6 @@ config MACH_SUNIV
  	bool "suniv (Allwinner F1C100s/F1C200s/F1C600/R6)"
  	bool "suniv (Allwinner F1C100s/F1C200s/F1C600/R6)"
  	select CPU_ARM926EJS
  	select CPU_ARM926EJS
  	select SUNXI_GEN_SUN6I
  	select SUNXI_GEN_SUN6I
@@ -39,7 +38,7 @@ Signed-off-by: Zoltan HERPAI <[email protected]>
  	select SKIP_LOWLEVEL_INIT_ONLY
  	select SKIP_LOWLEVEL_INIT_ONLY
  	select SPL_SKIP_LOWLEVEL_INIT_ONLY
  	select SPL_SKIP_LOWLEVEL_INIT_ONLY
  
  
-@@ -192,7 +189,6 @@ config MACH_SUN4I
+@@ -251,7 +248,6 @@ config MACH_SUN4I
  	select CPU_V7A
  	select CPU_V7A
  	select DRAM_SUN4I
  	select DRAM_SUN4I
  	select SUNXI_GEN_SUN4I
  	select SUNXI_GEN_SUN4I
@@ -47,7 +46,7 @@ Signed-off-by: Zoltan HERPAI <[email protected]>
  	imply SPL_SYS_I2C_LEGACY
  	imply SPL_SYS_I2C_LEGACY
  	imply SYS_I2C_LEGACY
  	imply SYS_I2C_LEGACY
  
  
-@@ -201,7 +197,6 @@ config MACH_SUN5I
+@@ -260,7 +256,6 @@ config MACH_SUN5I
  	select CPU_V7A
  	select CPU_V7A
  	select DRAM_SUN4I
  	select DRAM_SUN4I
  	select SUNXI_GEN_SUN4I
  	select SUNXI_GEN_SUN4I
@@ -55,7 +54,7 @@ Signed-off-by: Zoltan HERPAI <[email protected]>
  	imply SPL_SYS_I2C_LEGACY
  	imply SPL_SYS_I2C_LEGACY
  	imply SYS_I2C_LEGACY
  	imply SYS_I2C_LEGACY
  
  
-@@ -216,7 +211,6 @@ config MACH_SUN6I
+@@ -275,7 +270,6 @@ config MACH_SUN6I
  	select SPL_I2C
  	select SPL_I2C
  	select SUN6I_PRCM
  	select SUN6I_PRCM
  	select SUNXI_GEN_SUN6I
  	select SUNXI_GEN_SUN6I
@@ -63,7 +62,7 @@ Signed-off-by: Zoltan HERPAI <[email protected]>
  	select SYS_I2C_SUN6I_P2WI
  	select SYS_I2C_SUN6I_P2WI
  	select ARMV7_BOOT_SEC_DEFAULT if OLD_SUNXI_KERNEL_COMPAT
  	select ARMV7_BOOT_SEC_DEFAULT if OLD_SUNXI_KERNEL_COMPAT
  
  
-@@ -229,7 +223,6 @@ config MACH_SUN7I
+@@ -288,7 +282,6 @@ config MACH_SUN7I
  	select SPL_ARMV7_SET_CORTEX_SMPEN
  	select SPL_ARMV7_SET_CORTEX_SMPEN
  	select DRAM_SUN4I
  	select DRAM_SUN4I
  	select SUNXI_GEN_SUN4I
  	select SUNXI_GEN_SUN4I
@@ -71,7 +70,7 @@ Signed-off-by: Zoltan HERPAI <[email protected]>
  	select ARMV7_BOOT_SEC_DEFAULT if OLD_SUNXI_KERNEL_COMPAT
  	select ARMV7_BOOT_SEC_DEFAULT if OLD_SUNXI_KERNEL_COMPAT
  	imply SPL_SYS_I2C_LEGACY
  	imply SPL_SYS_I2C_LEGACY
  	imply SYS_I2C_LEGACY
  	imply SYS_I2C_LEGACY
-@@ -243,7 +236,6 @@ config MACH_SUN8I_A23
+@@ -302,7 +295,6 @@ config MACH_SUN8I_A23
  	select DRAM_SUN8I_A23
  	select DRAM_SUN8I_A23
  	select SPL_I2C
  	select SPL_I2C
  	select SUNXI_GEN_SUN6I
  	select SUNXI_GEN_SUN6I
@@ -79,7 +78,7 @@ Signed-off-by: Zoltan HERPAI <[email protected]>
  	select SYS_I2C_SUN8I_RSB
  	select SYS_I2C_SUN8I_RSB
  	select ARMV7_BOOT_SEC_DEFAULT if OLD_SUNXI_KERNEL_COMPAT
  	select ARMV7_BOOT_SEC_DEFAULT if OLD_SUNXI_KERNEL_COMPAT
  
  
-@@ -256,7 +248,6 @@ config MACH_SUN8I_A33
+@@ -315,7 +307,6 @@ config MACH_SUN8I_A33
  	select DRAM_SUN8I_A33
  	select DRAM_SUN8I_A33
  	select SPL_I2C
  	select SPL_I2C
  	select SUNXI_GEN_SUN6I
  	select SUNXI_GEN_SUN6I
@@ -87,7 +86,7 @@ Signed-off-by: Zoltan HERPAI <[email protected]>
  	select SYS_I2C_SUN8I_RSB
  	select SYS_I2C_SUN8I_RSB
  	select ARMV7_BOOT_SEC_DEFAULT if OLD_SUNXI_KERNEL_COMPAT
  	select ARMV7_BOOT_SEC_DEFAULT if OLD_SUNXI_KERNEL_COMPAT
  
  
-@@ -268,7 +259,6 @@ config MACH_SUN8I_A83T
+@@ -327,7 +318,6 @@ config MACH_SUN8I_A83T
  	select SUNXI_GEN_SUN6I
  	select SUNXI_GEN_SUN6I
  	select MMC_SUNXI_HAS_NEW_MODE
  	select MMC_SUNXI_HAS_NEW_MODE
  	select MMC_SUNXI_HAS_MODE_SWITCH
  	select MMC_SUNXI_HAS_MODE_SWITCH
@@ -95,7 +94,7 @@ Signed-off-by: Zoltan HERPAI <[email protected]>
  	select SYS_I2C_SUN8I_RSB
  	select SYS_I2C_SUN8I_RSB
  
  
  config MACH_SUN8I_H3
  config MACH_SUN8I_H3
-@@ -288,7 +278,6 @@ config MACH_SUN8I_R40
+@@ -347,7 +337,6 @@ config MACH_SUN8I_R40
  	select ARCH_SUPPORT_PSCI
  	select ARCH_SUPPORT_PSCI
  	select SUNXI_GEN_SUN6I
  	select SUNXI_GEN_SUN6I
  	select MMC_SUNXI_HAS_NEW_MODE
  	select MMC_SUNXI_HAS_NEW_MODE
@@ -103,7 +102,7 @@ Signed-off-by: Zoltan HERPAI <[email protected]>
  	select SUNXI_DRAM_DW
  	select SUNXI_DRAM_DW
  	select SUNXI_DRAM_DW_32BIT
  	select SUNXI_DRAM_DW_32BIT
  	imply SPL_SYS_I2C_LEGACY
  	imply SPL_SYS_I2C_LEGACY
-@@ -302,7 +291,6 @@ config MACH_SUN8I_V3S
+@@ -374,7 +363,6 @@ config MACH_SUN8I_V3S
  	select SUNXI_GEN_SUN6I
  	select SUNXI_GEN_SUN6I
  	select SUNXI_DRAM_DW
  	select SUNXI_DRAM_DW
  	select SUNXI_DRAM_DW_16BIT
  	select SUNXI_DRAM_DW_16BIT
@@ -111,7 +110,7 @@ Signed-off-by: Zoltan HERPAI <[email protected]>
  	select ARMV7_BOOT_SEC_DEFAULT if OLD_SUNXI_KERNEL_COMPAT
  	select ARMV7_BOOT_SEC_DEFAULT if OLD_SUNXI_KERNEL_COMPAT
  
  
  config MACH_SUN9I
  config MACH_SUN9I
-@@ -313,7 +301,6 @@ config MACH_SUN9I
+@@ -385,7 +373,6 @@ config MACH_SUN9I
  	select SPL_I2C
  	select SPL_I2C
  	select SUN6I_PRCM
  	select SUN6I_PRCM
  	select SUNXI_GEN_SUN6I
  	select SUNXI_GEN_SUN6I
@@ -119,7 +118,7 @@ Signed-off-by: Zoltan HERPAI <[email protected]>
  
  
  config MACH_SUN50I
  config MACH_SUN50I
  	bool "sun50i (Allwinner A64)"
  	bool "sun50i (Allwinner A64)"
-@@ -322,7 +309,6 @@ config MACH_SUN50I
+@@ -394,7 +381,6 @@ config MACH_SUN50I
  	select SUNXI_DE2
  	select SUNXI_DE2
  	select SUNXI_GEN_SUN6I
  	select SUNXI_GEN_SUN6I
  	select MMC_SUNXI_HAS_NEW_MODE
  	select MMC_SUNXI_HAS_NEW_MODE
@@ -129,7 +128,7 @@ Signed-off-by: Zoltan HERPAI <[email protected]>
  	select FIT
  	select FIT
 --- a/board/sunxi/Kconfig
 --- a/board/sunxi/Kconfig
 +++ b/board/sunxi/Kconfig
 +++ b/board/sunxi/Kconfig
-@@ -18,6 +18,7 @@ config BOARD_SUNXI
+@@ -17,6 +17,7 @@ config BOARD_SUNXI
  	select SPL_SEPARATE_BSS if SPL
  	select SPL_SEPARATE_BSS if SPL
  	select SUNXI_GPIO if GPIO
  	select SUNXI_GPIO if GPIO
  	select SYS_NS16550 if SERIAL
  	select SYS_NS16550 if SERIAL
@@ -137,7 +136,7 @@ Signed-off-by: Zoltan HERPAI <[email protected]>
  	select SYS_RELOC_GD_ENV_ADDR
  	select SYS_RELOC_GD_ENV_ADDR
  	select USB if DISTRO_DEFAULTS
  	select USB if DISTRO_DEFAULTS
  	select USB_KEYBOARD if DISTRO_DEFAULTS && USB_HOST
  	select USB_KEYBOARD if DISTRO_DEFAULTS && USB_HOST
-@@ -31,6 +32,7 @@ config BOARD_SUNXI
+@@ -32,6 +33,7 @@ config BOARD_SUNXI
  	imply FIT
  	imply FIT
  	imply OF_LIBFDT_OVERLAY
  	imply OF_LIBFDT_OVERLAY
  	imply PRE_CONSOLE_BUFFER
  	imply PRE_CONSOLE_BUFFER

+ 4 - 4
package/boot/uboot-d1/patches/0061-sunxi-Downgrade-driver-selections-to-implications.patch → package/boot/uboot-d1/patches/0016-sunxi-Downgrade-driver-selections-to-implications.patch

@@ -1,7 +1,7 @@
-From 6c8707fcd3372015829a1e8b8d5e8030c5806382 Mon Sep 17 00:00:00 2001
+From 3e5ec1535312a3d413ba8300227e5601841d3f6b Mon Sep 17 00:00:00 2001
 From: Samuel Holland <[email protected]>
 From: Samuel Holland <[email protected]>
 Date: Sat, 6 Aug 2022 00:10:46 -0500
 Date: Sat, 6 Aug 2022 00:10:46 -0500
-Subject: [PATCH 61/90] sunxi: Downgrade driver selections to implications
+Subject: [PATCH 16/68] sunxi: Downgrade driver selections to implications
 
 
 While not especially likely, it is plausible that someone wants to build
 While not especially likely, it is plausible that someone wants to build
 U-Boot without GPIO or UART support. Don't force building these drivers.
 U-Boot without GPIO or UART support. Don't force building these drivers.
@@ -13,7 +13,7 @@ Signed-off-by: Samuel Holland <[email protected]>
 
 
 --- a/board/sunxi/Kconfig
 --- a/board/sunxi/Kconfig
 +++ b/board/sunxi/Kconfig
 +++ b/board/sunxi/Kconfig
-@@ -16,8 +16,6 @@ config BOARD_SUNXI
+@@ -15,8 +15,6 @@ config BOARD_SUNXI
  	select OF_BOARD_SETUP
  	select OF_BOARD_SETUP
  	select PINCTRL
  	select PINCTRL
  	select SPL_SEPARATE_BSS if SPL
  	select SPL_SEPARATE_BSS if SPL
@@ -22,7 +22,7 @@ Signed-off-by: Samuel Holland <[email protected]>
  	select SUPPORT_SPL
  	select SUPPORT_SPL
  	select SYS_RELOC_GD_ENV_ADDR
  	select SYS_RELOC_GD_ENV_ADDR
  	select USB if DISTRO_DEFAULTS
  	select USB if DISTRO_DEFAULTS
-@@ -39,6 +37,8 @@ config BOARD_SUNXI
+@@ -40,6 +38,8 @@ config BOARD_SUNXI
  	imply SPL_MMC if MMC
  	imply SPL_MMC if MMC
  	imply SPL_POWER
  	imply SPL_POWER
  	imply SPL_SERIAL
  	imply SPL_SERIAL

+ 0 - 92
package/boot/uboot-d1/patches/0016-sunxi-mmc-ignore-card-detect-in-SPL.patch

@@ -1,92 +0,0 @@
-From 2cde6c8a7c41c13137298c19b4e104e4f5d6851c Mon Sep 17 00:00:00 2001
-From: Andre Przywara <[email protected]>
-Date: Wed, 13 Jul 2022 17:21:43 +0100
-Subject: [PATCH 16/90] sunxi: mmc: ignore card detect in SPL
-
-The sunxi MMC code does not use the DM in the SPL, as we don't have a
-device tree available that early, also no space for it.
-This also means we cannot access the card-detect GPIO information from
-there, so we have Kconfig symbols called CONFIG_MMCx_CD_PIN, which each
-board has to define. This is a burden, also requires extra GPIO code in
-the SPL.
-As the SPL is the natural successor of the BootROM (from which we are
-loaded), we can actually ignore the CD pin completely, as this is what
-the BootROM does as well: CD GPIOs are board specific, but the BootROM
-is not, so accesses the MMC devices anyway.
-
-Remove the card detect code from the non-DM implementation of the sunxi
-MMC driver, to get rid of this unneeded code.
-
-Signed-off-by: Andre Przywara <[email protected]>
----
- drivers/mmc/sunxi_mmc.c | 37 ++-----------------------------------
- 1 file changed, 2 insertions(+), 35 deletions(-)
-
---- a/drivers/mmc/sunxi_mmc.c
-+++ b/drivers/mmc/sunxi_mmc.c
-@@ -44,22 +44,10 @@ struct sunxi_mmc_priv {
- /* support 4 mmc hosts */
- struct sunxi_mmc_priv mmc_host[4];
- 
--static int sunxi_mmc_getcd_gpio(int sdc_no)
--{
--	switch (sdc_no) {
--	case 0: return sunxi_name_to_gpio(CONFIG_MMC0_CD_PIN);
--	case 1: return sunxi_name_to_gpio(CONFIG_MMC1_CD_PIN);
--	case 2: return sunxi_name_to_gpio(CONFIG_MMC2_CD_PIN);
--	case 3: return sunxi_name_to_gpio(CONFIG_MMC3_CD_PIN);
--	}
--	return -EINVAL;
--}
--
- static int mmc_resource_init(int sdc_no)
- {
- 	struct sunxi_mmc_priv *priv = &mmc_host[sdc_no];
- 	struct sunxi_ccm_reg *ccm = (struct sunxi_ccm_reg *)SUNXI_CCM_BASE;
--	int cd_pin, ret = 0;
- 
- 	debug("init mmc %d resource\n", sdc_no);
- 
-@@ -90,16 +78,7 @@ static int mmc_resource_init(int sdc_no)
- 	}
- 	priv->mmc_no = sdc_no;
- 
--	cd_pin = sunxi_mmc_getcd_gpio(sdc_no);
--	if (cd_pin >= 0) {
--		ret = gpio_request(cd_pin, "mmc_cd");
--		if (!ret) {
--			sunxi_gpio_set_pull(cd_pin, SUNXI_GPIO_PULL_UP);
--			ret = gpio_direction_input(cd_pin);
--		}
--	}
--
--	return ret;
-+	return 0;
- }
- #endif
- 
-@@ -523,23 +502,11 @@ static int sunxi_mmc_send_cmd_legacy(str
- 	return sunxi_mmc_send_cmd_common(priv, mmc, cmd, data);
- }
- 
--static int sunxi_mmc_getcd_legacy(struct mmc *mmc)
--{
--	struct sunxi_mmc_priv *priv = mmc->priv;
--	int cd_pin;
--
--	cd_pin = sunxi_mmc_getcd_gpio(priv->mmc_no);
--	if (cd_pin < 0)
--		return 1;
--
--	return !gpio_get_value(cd_pin);
--}
--
-+/* .get_cd is not needed by the SPL */
- static const struct mmc_ops sunxi_mmc_ops = {
- 	.send_cmd	= sunxi_mmc_send_cmd_legacy,
- 	.set_ios	= sunxi_mmc_set_ios_legacy,
- 	.init		= sunxi_mmc_core_init,
--	.getcd		= sunxi_mmc_getcd_legacy,
- };
- 
- struct mmc *sunxi_mmc_init(int sdc_no)

+ 3 - 3
package/boot/uboot-d1/patches/0062-sunxi-Enable-the-I2C-driver-by-default.patch → package/boot/uboot-d1/patches/0017-sunxi-Enable-the-I2C-driver-by-default.patch

@@ -1,7 +1,7 @@
-From ad619478827b825d7b88dce22eb9b5e1c6ea7eb0 Mon Sep 17 00:00:00 2001
+From 0289892858b876c5a11cce944c006ed0fd41e011 Mon Sep 17 00:00:00 2001
 From: Samuel Holland <[email protected]>
 From: Samuel Holland <[email protected]>
 Date: Sat, 6 Aug 2022 00:11:54 -0500
 Date: Sat, 6 Aug 2022 00:11:54 -0500
-Subject: [PATCH 62/90] sunxi: Enable the I2C driver by default
+Subject: [PATCH 17/68] sunxi: Enable the I2C driver by default
 
 
 This is used by quite a large number of boards, for PMIC/regulator or
 This is used by quite a large number of boards, for PMIC/regulator or
 LCD panel control.
 LCD panel control.
@@ -13,7 +13,7 @@ Signed-off-by: Samuel Holland <[email protected]>
 
 
 --- a/board/sunxi/Kconfig
 --- a/board/sunxi/Kconfig
 +++ b/board/sunxi/Kconfig
 +++ b/board/sunxi/Kconfig
-@@ -38,6 +38,7 @@ config BOARD_SUNXI
+@@ -39,6 +39,7 @@ config BOARD_SUNXI
  	imply SPL_POWER
  	imply SPL_POWER
  	imply SPL_SERIAL
  	imply SPL_SERIAL
  	imply SUNXI_GPIO
  	imply SUNXI_GPIO

+ 0 - 177
package/boot/uboot-d1/patches/0017-sunxi-mmc-group-non-DM-specific-functions.patch

@@ -1,177 +0,0 @@
-From 74afc3a4e0ff780eddd859a25de7142e4baeeed5 Mon Sep 17 00:00:00 2001
-From: Andre Przywara <[email protected]>
-Date: Wed, 13 Jul 2022 17:21:44 +0100
-Subject: [PATCH 17/90] sunxi: mmc: group non-DM specific functions
-
-As the SPL code for sunxi boards does not use the driver model, we have
-two mmc_ops structures, one for DM, one for non-DM. The actual hardware
-access code is shared, with the respective callback functions using that
-common code.
-
-To make this more obvious and easier to read, reorder the functions to
-group them: we first have the common code, then the non-DM bits, and
-the proper DM implementation at the end.
-Also document this structure in the comment at the beginning of the file.
-
-No functional change intended.
-
-Signed-off-by: Andre Przywara <[email protected]>
----
- drivers/mmc/sunxi_mmc.c | 117 +++++++++++++++++++++-------------------
- 1 file changed, 61 insertions(+), 56 deletions(-)
-
---- a/drivers/mmc/sunxi_mmc.c
-+++ b/drivers/mmc/sunxi_mmc.c
-@@ -5,6 +5,12 @@
-  * Aaron <[email protected]>
-  *
-  * MMC driver for allwinner sunxi platform.
-+ *
-+ * This driver is used by the (ARM) SPL with the legacy MMC interface, and
-+ * by U-Boot proper using the full DM interface. The actual hardware access
-+ * code is common, and comes first in this file.
-+ * The legacy MMC interface implementation comes next, followed by the
-+ * proper DM_MMC implementation at the end.
-  */
- 
- #include <common.h>
-@@ -40,48 +46,6 @@ struct sunxi_mmc_priv {
- 	struct mmc_config cfg;
- };
- 
--#if !CONFIG_IS_ENABLED(DM_MMC)
--/* support 4 mmc hosts */
--struct sunxi_mmc_priv mmc_host[4];
--
--static int mmc_resource_init(int sdc_no)
--{
--	struct sunxi_mmc_priv *priv = &mmc_host[sdc_no];
--	struct sunxi_ccm_reg *ccm = (struct sunxi_ccm_reg *)SUNXI_CCM_BASE;
--
--	debug("init mmc %d resource\n", sdc_no);
--
--	switch (sdc_no) {
--	case 0:
--		priv->reg = (struct sunxi_mmc *)SUNXI_MMC0_BASE;
--		priv->mclkreg = &ccm->sd0_clk_cfg;
--		break;
--	case 1:
--		priv->reg = (struct sunxi_mmc *)SUNXI_MMC1_BASE;
--		priv->mclkreg = &ccm->sd1_clk_cfg;
--		break;
--#ifdef SUNXI_MMC2_BASE
--	case 2:
--		priv->reg = (struct sunxi_mmc *)SUNXI_MMC2_BASE;
--		priv->mclkreg = &ccm->sd2_clk_cfg;
--		break;
--#endif
--#ifdef SUNXI_MMC3_BASE
--	case 3:
--		priv->reg = (struct sunxi_mmc *)SUNXI_MMC3_BASE;
--		priv->mclkreg = &ccm->sd3_clk_cfg;
--		break;
--#endif
--	default:
--		printf("Wrong mmc number %d\n", sdc_no);
--		return -1;
--	}
--	priv->mmc_no = sdc_no;
--
--	return 0;
--}
--#endif
--
- /*
-  * All A64 and later MMC controllers feature auto-calibration. This would
-  * normally be detected via the compatible string, but we need something
-@@ -269,19 +233,6 @@ static int sunxi_mmc_set_ios_common(stru
- 	return 0;
- }
- 
--#if !CONFIG_IS_ENABLED(DM_MMC)
--static int sunxi_mmc_core_init(struct mmc *mmc)
--{
--	struct sunxi_mmc_priv *priv = mmc->priv;
--
--	/* Reset controller */
--	writel(SUNXI_MMC_GCTRL_RESET, &priv->reg->gctrl);
--	udelay(1000);
--
--	return 0;
--}
--#endif
--
- static int mmc_trans_data_by_cpu(struct sunxi_mmc_priv *priv, struct mmc *mmc,
- 				 struct mmc_data *data)
- {
-@@ -486,7 +437,60 @@ out:
- 	return error;
- }
- 
-+/* non-DM code here is used by the (ARM) SPL only */
-+
- #if !CONFIG_IS_ENABLED(DM_MMC)
-+/* support 4 mmc hosts */
-+struct sunxi_mmc_priv mmc_host[4];
-+
-+static int mmc_resource_init(int sdc_no)
-+{
-+	struct sunxi_mmc_priv *priv = &mmc_host[sdc_no];
-+	struct sunxi_ccm_reg *ccm = (struct sunxi_ccm_reg *)SUNXI_CCM_BASE;
-+
-+	debug("init mmc %d resource\n", sdc_no);
-+
-+	switch (sdc_no) {
-+	case 0:
-+		priv->reg = (struct sunxi_mmc *)SUNXI_MMC0_BASE;
-+		priv->mclkreg = &ccm->sd0_clk_cfg;
-+		break;
-+	case 1:
-+		priv->reg = (struct sunxi_mmc *)SUNXI_MMC1_BASE;
-+		priv->mclkreg = &ccm->sd1_clk_cfg;
-+		break;
-+#ifdef SUNXI_MMC2_BASE
-+	case 2:
-+		priv->reg = (struct sunxi_mmc *)SUNXI_MMC2_BASE;
-+		priv->mclkreg = &ccm->sd2_clk_cfg;
-+		break;
-+#endif
-+#ifdef SUNXI_MMC3_BASE
-+	case 3:
-+		priv->reg = (struct sunxi_mmc *)SUNXI_MMC3_BASE;
-+		priv->mclkreg = &ccm->sd3_clk_cfg;
-+		break;
-+#endif
-+	default:
-+		printf("Wrong mmc number %d\n", sdc_no);
-+		return -1;
-+	}
-+	priv->mmc_no = sdc_no;
-+
-+	return 0;
-+}
-+
-+static int sunxi_mmc_core_init(struct mmc *mmc)
-+{
-+	struct sunxi_mmc_priv *priv = mmc->priv;
-+
-+	/* Reset controller */
-+	writel(SUNXI_MMC_GCTRL_RESET, &priv->reg->gctrl);
-+	udelay(1000);
-+
-+	return 0;
-+}
-+
- static int sunxi_mmc_set_ios_legacy(struct mmc *mmc)
- {
- 	struct sunxi_mmc_priv *priv = mmc->priv;
-@@ -562,7 +566,8 @@ struct mmc *sunxi_mmc_init(int sdc_no)
- 
- 	return mmc_create(cfg, priv);
- }
--#else
-+
-+#else /* CONFIG_DM_MMC code below, as used by U-Boot proper */
- 
- static int sunxi_mmc_set_ios(struct udevice *dev)
- {

+ 20 - 14
package/boot/uboot-d1/patches/0063-sunxi-Move-default-values-to-the-board-Kconfig.patch → package/boot/uboot-d1/patches/0018-sunxi-Move-default-values-to-the-board-Kconfig.patch

@@ -1,7 +1,7 @@
-From fde804c2ece090eb7802a218781e38c7c6d6f00d Mon Sep 17 00:00:00 2001
+From 1cc94e4599cd4ab31afe58cb5e6438b30a4e6a24 Mon Sep 17 00:00:00 2001
 From: Samuel Holland <[email protected]>
 From: Samuel Holland <[email protected]>
 Date: Fri, 5 Aug 2022 23:10:11 -0500
 Date: Fri, 5 Aug 2022 23:10:11 -0500
-Subject: [PATCH 63/90] sunxi: Move default values to the board Kconfig
+Subject: [PATCH 18/68] sunxi: Move default values to the board Kconfig
 
 
 This keeps all of the defaults for sunxi platforms in one place. Most of
 This keeps all of the defaults for sunxi platforms in one place. Most of
 these only depend on architecture-independent features of the SoC (clock
 these only depend on architecture-independent features of the SoC (clock
@@ -11,9 +11,9 @@ No functional change; just some minor help text cleanup.
 
 
 Signed-off-by: Samuel Holland <[email protected]>
 Signed-off-by: Samuel Holland <[email protected]>
 ---
 ---
- arch/arm/mach-sunxi/Kconfig | 67 ------------------------------------
- board/sunxi/Kconfig         | 68 +++++++++++++++++++++++++++++++++++++
- 2 files changed, 68 insertions(+), 67 deletions(-)
+ arch/arm/mach-sunxi/Kconfig | 70 ------------------------------------
+ board/sunxi/Kconfig         | 71 +++++++++++++++++++++++++++++++++++++
+ 2 files changed, 71 insertions(+), 70 deletions(-)
 
 
 --- a/arch/arm/mach-sunxi/Kconfig
 --- a/arch/arm/mach-sunxi/Kconfig
 +++ b/arch/arm/mach-sunxi/Kconfig
 +++ b/arch/arm/mach-sunxi/Kconfig
@@ -26,14 +26,14 @@ Signed-off-by: Samuel Holland <[email protected]>
  config DRAM_SUN4I
  config DRAM_SUN4I
  	bool
  	bool
  	help
  	help
-@@ -99,17 +96,6 @@ config AXP_PMIC_BUS
+@@ -124,17 +121,6 @@ config AXP_PMIC_BUS
  	  Select this PMIC bus access helpers for Sunxi platform PRCM or other
  	  Select this PMIC bus access helpers for Sunxi platform PRCM or other
  	  AXP family PMIC devices.
  	  AXP family PMIC devices.
  
  
 -config SUNXI_SRAM_ADDRESS
 -config SUNXI_SRAM_ADDRESS
 -	hex
 -	hex
 -	default 0x10000 if MACH_SUN9I || MACH_SUN50I || MACH_SUN50I_H5
 -	default 0x10000 if MACH_SUN9I || MACH_SUN50I || MACH_SUN50I_H5
--	default 0x20000 if SUN50I_GEN_H6
+-	default 0x20000 if SUN50I_GEN_H6 || SUNXI_GEN_NCAT2
 -	default 0x0
 -	default 0x0
 -	---help---
 -	---help---
 -	Older Allwinner SoCs have their mask boot ROM mapped just below 4GB,
 -	Older Allwinner SoCs have their mask boot ROM mapped just below 4GB,
@@ -41,10 +41,10 @@ Signed-off-by: Samuel Holland <[email protected]>
 -	Some newer SoCs map the boot ROM at address 0 instead and move the
 -	Some newer SoCs map the boot ROM at address 0 instead and move the
 -	SRAM to a different address.
 -	SRAM to a different address.
 -
 -
- config SUNXI_A64_TIMER_ERRATUM
- 	bool
- 
-@@ -562,48 +548,6 @@ config DRAM_ODT_CORRECTION
+ config SUNXI_RVBAR_ADDRESS
+ 	hex
+ 	depends on ARM64
+@@ -661,50 +647,6 @@ config DRAM_ODT_CORRECTION
  	then the correction is negative. Usually the value for this is 0.
  	then the correction is negative. Usually the value for this is 0.
  endif
  endif
  
  
@@ -59,6 +59,7 @@ Signed-off-by: Samuel Holland <[email protected]>
 -	default 1008000000 if MACH_SUN9I
 -	default 1008000000 if MACH_SUN9I
 -	default 888000000 if MACH_SUN50I_H6
 -	default 888000000 if MACH_SUN50I_H6
 -	default 1008000000 if MACH_SUN50I_H616
 -	default 1008000000 if MACH_SUN50I_H616
+-	default 1008000000 if MACH_SUN8I_R528
 -
 -
 -config SYS_CONFIG_NAME
 -config SYS_CONFIG_NAME
 -	default "suniv" if MACH_SUNIV
 -	default "suniv" if MACH_SUNIV
@@ -67,6 +68,7 @@ Signed-off-by: Samuel Holland <[email protected]>
 -	default "sun6i" if MACH_SUN6I
 -	default "sun6i" if MACH_SUN6I
 -	default "sun7i" if MACH_SUN7I
 -	default "sun7i" if MACH_SUN7I
 -	default "sun8i" if MACH_SUN8I
 -	default "sun8i" if MACH_SUN8I
+-	default "sun8i" if MACH_SUN8I_R528
 -	default "sun9i" if MACH_SUN9I
 -	default "sun9i" if MACH_SUN9I
 -	default "sun50i" if MACH_SUN50I
 -	default "sun50i" if MACH_SUN50I
 -	default "sun50i" if MACH_SUN50I_H6
 -	default "sun50i" if MACH_SUN50I_H6
@@ -93,7 +95,7 @@ Signed-off-by: Samuel Holland <[email protected]>
  config UART0_PORT_F
  config UART0_PORT_F
  	bool "UART0 on MicroSD breakout board"
  	bool "UART0 on MicroSD breakout board"
  	---help---
  	---help---
-@@ -898,17 +842,6 @@ config GMAC_TX_DELAY
+@@ -1033,18 +975,6 @@ config GMAC_TX_DELAY
  	---help---
  	---help---
  	Set the GMAC Transmit Clock Delay Chain value.
  	Set the GMAC Transmit Clock Delay Chain value.
  
  
@@ -107,13 +109,14 @@ Signed-off-by: Samuel Holland <[email protected]>
 -	default 0x2fe00000 if MACH_SUN9I
 -	default 0x2fe00000 if MACH_SUN9I
 -	default 0x4fe00000 if MACH_SUN50I
 -	default 0x4fe00000 if MACH_SUN50I
 -	default 0x4fe00000 if SUN50I_GEN_H6
 -	default 0x4fe00000 if SUN50I_GEN_H6
+-	default 0x4fe00000 if SUNXI_GEN_NCAT2
 -
 -
  config SPL_SPI_SUNXI
  config SPL_SPI_SUNXI
  	bool "Support for SPI Flash on Allwinner SoCs in SPL"
  	bool "Support for SPI Flash on Allwinner SoCs in SPL"
  	depends on MACH_SUN4I || MACH_SUN5I || MACH_SUN7I || MACH_SUNXI_H3_H5 || MACH_SUN50I || MACH_SUN8I_R40 || SUN50I_GEN_H6 || MACH_SUNIV
  	depends on MACH_SUN4I || MACH_SUN5I || MACH_SUN7I || MACH_SUNXI_H3_H5 || MACH_SUN50I || MACH_SUN8I_R40 || SUN50I_GEN_H6 || MACH_SUNIV
 --- a/board/sunxi/Kconfig
 --- a/board/sunxi/Kconfig
 +++ b/board/sunxi/Kconfig
 +++ b/board/sunxi/Kconfig
-@@ -52,6 +52,74 @@ config BOARD_SUNXI
+@@ -53,6 +53,77 @@ config BOARD_SUNXI
  
  
  if BOARD_SUNXI
  if BOARD_SUNXI
  
  
@@ -130,6 +133,7 @@ Signed-off-by: Samuel Holland <[email protected]>
 +	default 0x2fe00000 if MACH_SUN9I
 +	default 0x2fe00000 if MACH_SUN9I
 +	default 0x4fe00000 if MACH_SUN50I
 +	default 0x4fe00000 if MACH_SUN50I
 +	default 0x4fe00000 if SUN50I_GEN_H6
 +	default 0x4fe00000 if SUN50I_GEN_H6
++	default 0x4fe00000 if SUNXI_GEN_NCAT2
 +
 +
 +config SUNXI_MINIMUM_DRAM_MB
 +config SUNXI_MINIMUM_DRAM_MB
 +	int "minimum DRAM size"
 +	int "minimum DRAM size"
@@ -147,7 +151,7 @@ Signed-off-by: Samuel Holland <[email protected]>
 +config SUNXI_SRAM_ADDRESS
 +config SUNXI_SRAM_ADDRESS
 +	hex
 +	hex
 +	default 0x10000 if MACH_SUN9I || MACH_SUN50I || MACH_SUN50I_H5
 +	default 0x10000 if MACH_SUN9I || MACH_SUN50I || MACH_SUN50I_H5
-+	default 0x20000 if SUN50I_GEN_H6
++	default 0x20000 if SUN50I_GEN_H6 || SUNXI_GEN_NCAT2
 +	default 0x0
 +	default 0x0
 +	help
 +	help
 +	  Older Allwinner SoCs have their boot mask ROM mapped just
 +	  Older Allwinner SoCs have their boot mask ROM mapped just
@@ -165,6 +169,7 @@ Signed-off-by: Samuel Holland <[email protected]>
 +	default 1008000000 if MACH_SUN6I
 +	default 1008000000 if MACH_SUN6I
 +	default  912000000 if MACH_SUN7I
 +	default  912000000 if MACH_SUN7I
 +	default 1008000000 if MACH_SUN8I
 +	default 1008000000 if MACH_SUN8I
++	default 1008000000 if MACH_SUN8I_R528
 +	default 1008000000 if MACH_SUN9I
 +	default 1008000000 if MACH_SUN9I
 +	default  816000000 if MACH_SUN50I || MACH_SUN50I_H5
 +	default  816000000 if MACH_SUN50I || MACH_SUN50I_H5
 +	default  888000000 if MACH_SUN50I_H6
 +	default  888000000 if MACH_SUN50I_H6
@@ -177,6 +182,7 @@ Signed-off-by: Samuel Holland <[email protected]>
 +	default "sun6i"  if MACH_SUN6I
 +	default "sun6i"  if MACH_SUN6I
 +	default "sun7i"  if MACH_SUN7I
 +	default "sun7i"  if MACH_SUN7I
 +	default "sun8i"  if MACH_SUN8I
 +	default "sun8i"  if MACH_SUN8I
++	default "sun8i"  if MACH_SUN8I_R528
 +	default "sun9i"  if MACH_SUN9I
 +	default "sun9i"  if MACH_SUN9I
 +	default "sun50i" if MACH_SUN50I
 +	default "sun50i" if MACH_SUN50I
 +	default "sun50i" if MACH_SUN50I_H6
 +	default "sun50i" if MACH_SUN50I_H6

+ 0 - 509
package/boot/uboot-d1/patches/0018-sunxi-remove-CONFIG_MMC-_CD_PIN.patch

@@ -1,509 +0,0 @@
-From bcc2e01668041c146d964ed5f77b819dcc35b3e2 Mon Sep 17 00:00:00 2001
-From: Zoltan HERPAI <[email protected]>
-Date: Tue, 6 Jun 2023 15:07:47 +0000
-Subject: [PATCH 18/90] sunxi: remove CONFIG_MMC?_CD_PIN
-
-For legacy reasons we were defining the card detect GPIO for all sunxi
-boards in each board's defconfig.
-There is actually no need for a card-detect check in the SPL code (which
-consequently has been removed already), and also in U-Boot proper we
-have DM code to query the CD GPIO name from the device tree.
-
-That means we don't have any user of that information left, so can
-remove the definitions from the defconfigs.
-
-Signed-off-by: Andre Przywara <[email protected]>
-Signed-off-by: Zoltan HERPAI <[email protected]>
----
- arch/arm/mach-sunxi/Kconfig                  | 27 --------------------
- configs/A10-OLinuXino-Lime_defconfig         |  1 -
- configs/A10s-OLinuXino-M_defconfig           |  2 --
- configs/A13-OLinuXino_defconfig              |  1 -
- configs/A20-OLinuXino-Lime2-eMMC_defconfig   |  1 -
- configs/A20-OLinuXino-Lime_defconfig         |  1 -
- configs/A20-OLinuXino_MICRO-eMMC_defconfig   |  1 -
- configs/A20-OLinuXino_MICRO_defconfig        |  2 --
- configs/A20-Olimex-SOM-EVB_defconfig         |  2 --
- configs/A20-Olimex-SOM204-EVB-eMMC_defconfig |  1 -
- configs/Bananapi_M2_Ultra_defconfig          |  1 -
- configs/Bananapi_m2m_defconfig               |  1 -
- configs/Cubieboard2_defconfig                |  1 -
- configs/Cubieboard4_defconfig                |  1 -
- configs/Cubieboard_defconfig                 |  1 -
- configs/Itead_Ibox_A20_defconfig             |  1 -
- configs/Lamobo_R1_defconfig                  |  1 -
- configs/Mele_M3_defconfig                    |  1 -
- configs/Mele_M5_defconfig                    |  1 -
- configs/Merrii_A80_Optimus_defconfig         |  1 -
- configs/Orangepi_mini_defconfig              |  2 --
- configs/Sinlinx_SinA31s_defconfig            |  1 -
- configs/Sinlinx_SinA33_defconfig             |  1 -
- configs/Sunchip_CX-A99_defconfig             |  1 -
- configs/UTOO_P66_defconfig                   |  1 -
- configs/Yones_Toptech_BD1078_defconfig       |  2 --
- configs/bananapi_m2_zero_defconfig           |  1 -
- configs/bananapi_m64_defconfig               |  1 -
- configs/beelink_gs1_defconfig                |  1 -
- configs/nanopi_m1_plus_defconfig             |  1 -
- configs/oceanic_5205_5inmfd_defconfig        |  1 -
- configs/orangepi_3_defconfig                 |  1 -
- configs/orangepi_lite2_defconfig             |  1 -
- configs/orangepi_one_plus_defconfig          |  1 -
- configs/orangepi_zero2_defconfig             |  1 -
- configs/orangepi_zero_plus2_defconfig        |  1 -
- configs/orangepi_zero_plus2_h3_defconfig     |  1 -
- configs/parrot_r16_defconfig                 |  1 -
- configs/pine64-lts_defconfig                 |  1 -
- configs/pine_h64_defconfig                   |  1 -
- configs/sopine_baseboard_defconfig           |  1 -
- configs/tanix_tx6_defconfig                  |  1 -
- 42 files changed, 73 deletions(-)
-
---- a/arch/arm/mach-sunxi/Kconfig
-+++ b/arch/arm/mach-sunxi/Kconfig
-@@ -652,33 +652,6 @@ config MACPWR
- 	  Set the pin used to power the MAC. This takes a string in the format
- 	  understood by sunxi_name_to_gpio, e.g. PH1 for pin 1 of port H.
- 
--config MMC0_CD_PIN
--	string "Card detect pin for mmc0"
--	default "PF6" if MACH_SUN8I_A83T || MACH_SUNXI_H3_H5 || MACH_SUN50I
--	default ""
--	---help---
--	Set the card detect pin for mmc0, leave empty to not use cd. This
--	takes a string in the format understood by sunxi_name_to_gpio, e.g.
--	PH1 for pin 1 of port H.
--
--config MMC1_CD_PIN
--	string "Card detect pin for mmc1"
--	default ""
--	---help---
--	See MMC0_CD_PIN help text.
--
--config MMC2_CD_PIN
--	string "Card detect pin for mmc2"
--	default ""
--	---help---
--	See MMC0_CD_PIN help text.
--
--config MMC3_CD_PIN
--	string "Card detect pin for mmc3"
--	default ""
--	---help---
--	See MMC0_CD_PIN help text.
--
- config MMC1_PINS_PH
- 	bool "Pins for mmc1 are on Port H"
- 	depends on MACH_SUN4I || MACH_SUN7I || MACH_SUN8I_R40
---- a/configs/A10-OLinuXino-Lime_defconfig
-+++ b/configs/A10-OLinuXino-Lime_defconfig
-@@ -6,7 +6,6 @@ CONFIG_MACH_SUN4I=y
- CONFIG_DRAM_CLK=480
- CONFIG_DRAM_EMR1=4
- CONFIG_SYS_CLK_FREQ=912000000
--CONFIG_MMC0_CD_PIN="PH1"
- CONFIG_I2C1_ENABLE=y
- CONFIG_SATAPWR="PC3"
- CONFIG_AHCI=y
---- a/configs/A10s-OLinuXino-M_defconfig
-+++ b/configs/A10s-OLinuXino-M_defconfig
-@@ -4,8 +4,6 @@ CONFIG_DEFAULT_DEVICE_TREE="sun5i-a10s-o
- CONFIG_SPL=y
- CONFIG_MACH_SUN5I=y
- CONFIG_DRAM_CLK=432
--CONFIG_MMC0_CD_PIN="PG1"
--CONFIG_MMC1_CD_PIN="PG13"
- CONFIG_MMC_SUNXI_SLOT_EXTRA=1
- CONFIG_USB1_VBUS_PIN="PB10"
- # CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set
---- a/configs/A13-OLinuXino_defconfig
-+++ b/configs/A13-OLinuXino_defconfig
-@@ -5,7 +5,6 @@ CONFIG_SPL=y
- CONFIG_MACH_SUN5I=y
- CONFIG_DRAM_CLK=408
- CONFIG_DRAM_EMR1=0
--CONFIG_MMC0_CD_PIN="PG0"
- CONFIG_USB0_VBUS_DET="PG1"
- CONFIG_USB1_VBUS_PIN="PG11"
- CONFIG_AXP_GPIO=y
---- a/configs/A20-OLinuXino-Lime2-eMMC_defconfig
-+++ b/configs/A20-OLinuXino-Lime2-eMMC_defconfig
-@@ -4,7 +4,6 @@ CONFIG_DEFAULT_DEVICE_TREE="sun7i-a20-ol
- CONFIG_SPL=y
- CONFIG_MACH_SUN7I=y
- CONFIG_DRAM_CLK=384
--CONFIG_MMC0_CD_PIN="PH1"
- CONFIG_MMC_SUNXI_SLOT_EXTRA=2
- CONFIG_USB0_VBUS_PIN="PC17"
- CONFIG_USB0_VBUS_DET="PH5"
---- a/configs/A20-OLinuXino-Lime_defconfig
-+++ b/configs/A20-OLinuXino-Lime_defconfig
-@@ -4,7 +4,6 @@ CONFIG_DEFAULT_DEVICE_TREE="sun7i-a20-ol
- CONFIG_SPL=y
- CONFIG_MACH_SUN7I=y
- CONFIG_DRAM_CLK=384
--CONFIG_MMC0_CD_PIN="PH1"
- CONFIG_I2C1_ENABLE=y
- CONFIG_SATAPWR="PC3"
- CONFIG_AHCI=y
---- a/configs/A20-OLinuXino_MICRO-eMMC_defconfig
-+++ b/configs/A20-OLinuXino_MICRO-eMMC_defconfig
-@@ -4,7 +4,6 @@ CONFIG_DEFAULT_DEVICE_TREE="sun7i-a20-ol
- CONFIG_SPL=y
- CONFIG_MACH_SUN7I=y
- CONFIG_DRAM_CLK=384
--CONFIG_MMC0_CD_PIN="PH1"
- CONFIG_MMC_SUNXI_SLOT_EXTRA=2
- CONFIG_I2C1_ENABLE=y
- CONFIG_VIDEO_VGA=y
---- a/configs/A20-OLinuXino_MICRO_defconfig
-+++ b/configs/A20-OLinuXino_MICRO_defconfig
-@@ -4,8 +4,6 @@ CONFIG_DEFAULT_DEVICE_TREE="sun7i-a20-ol
- CONFIG_SPL=y
- CONFIG_MACH_SUN7I=y
- CONFIG_DRAM_CLK=384
--CONFIG_MMC0_CD_PIN="PH1"
--CONFIG_MMC3_CD_PIN="PH11"
- CONFIG_MMC_SUNXI_SLOT_EXTRA=3
- CONFIG_I2C1_ENABLE=y
- CONFIG_VIDEO_VGA=y
---- a/configs/A20-Olimex-SOM-EVB_defconfig
-+++ b/configs/A20-Olimex-SOM-EVB_defconfig
-@@ -4,8 +4,6 @@ CONFIG_DEFAULT_DEVICE_TREE="sun7i-a20-ol
- CONFIG_SPL=y
- CONFIG_MACH_SUN7I=y
- CONFIG_DRAM_CLK=384
--CONFIG_MMC0_CD_PIN="PH1"
--CONFIG_MMC3_CD_PIN="PH0"
- CONFIG_MMC_SUNXI_SLOT_EXTRA=3
- CONFIG_USB0_VBUS_PIN="PB9"
- CONFIG_USB0_VBUS_DET="PH5"
---- a/configs/A20-Olimex-SOM204-EVB-eMMC_defconfig
-+++ b/configs/A20-Olimex-SOM204-EVB-eMMC_defconfig
-@@ -4,7 +4,6 @@ CONFIG_DEFAULT_DEVICE_TREE="sun7i-a20-ol
- CONFIG_SPL=y
- CONFIG_MACH_SUN7I=y
- CONFIG_DRAM_CLK=384
--CONFIG_MMC0_CD_PIN="PH1"
- CONFIG_MMC_SUNXI_SLOT_EXTRA=2
- CONFIG_USB0_VBUS_PIN="PC17"
- CONFIG_USB0_VBUS_DET="PH5"
---- a/configs/Bananapi_M2_Ultra_defconfig
-+++ b/configs/Bananapi_M2_Ultra_defconfig
-@@ -5,7 +5,6 @@ CONFIG_SPL=y
- CONFIG_MACH_SUN8I_R40=y
- CONFIG_DRAM_CLK=576
- CONFIG_MACPWR="PA17"
--CONFIG_MMC0_CD_PIN="PH13"
- CONFIG_MMC_SUNXI_SLOT_EXTRA=2
- CONFIG_USB1_VBUS_PIN="PH23"
- CONFIG_USB2_VBUS_PIN="PH23"
---- a/configs/Bananapi_m2m_defconfig
-+++ b/configs/Bananapi_m2m_defconfig
-@@ -6,7 +6,6 @@ CONFIG_MACH_SUN8I_A33=y
- CONFIG_DRAM_CLK=600
- CONFIG_DRAM_ZQ=15291
- CONFIG_DRAM_ODT_EN=y
--CONFIG_MMC0_CD_PIN="PB4"
- CONFIG_MMC_SUNXI_SLOT_EXTRA=2
- CONFIG_USB0_ID_DET="PH8"
- # CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set
---- a/configs/Cubieboard2_defconfig
-+++ b/configs/Cubieboard2_defconfig
-@@ -4,7 +4,6 @@ CONFIG_DEFAULT_DEVICE_TREE="sun7i-a20-cu
- CONFIG_SPL=y
- CONFIG_MACH_SUN7I=y
- CONFIG_DRAM_CLK=480
--CONFIG_MMC0_CD_PIN="PH1"
- CONFIG_SATAPWR="PB8"
- CONFIG_AHCI=y
- # CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set
---- a/configs/Cubieboard4_defconfig
-+++ b/configs/Cubieboard4_defconfig
-@@ -4,7 +4,6 @@ CONFIG_DEFAULT_DEVICE_TREE="sun9i-a80-cu
- CONFIG_SPL=y
- CONFIG_MACH_SUN9I=y
- CONFIG_DRAM_CLK=672
--CONFIG_MMC0_CD_PIN="PH18"
- CONFIG_MMC_SUNXI_SLOT_EXTRA=2
- CONFIG_USB0_VBUS_PIN="AXP0-VBUS-ENABLE"
- CONFIG_USB0_VBUS_DET="AXP0-VBUS-DETECT"
---- a/configs/Cubieboard_defconfig
-+++ b/configs/Cubieboard_defconfig
-@@ -4,7 +4,6 @@ CONFIG_DEFAULT_DEVICE_TREE="sun4i-a10-cu
- CONFIG_SPL=y
- CONFIG_MACH_SUN4I=y
- CONFIG_DRAM_CLK=480
--CONFIG_MMC0_CD_PIN="PH1"
- CONFIG_SATAPWR="PB8"
- CONFIG_AHCI=y
- # CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set
---- a/configs/Itead_Ibox_A20_defconfig
-+++ b/configs/Itead_Ibox_A20_defconfig
-@@ -4,7 +4,6 @@ CONFIG_DEFAULT_DEVICE_TREE="sun7i-a20-it
- CONFIG_SPL=y
- CONFIG_MACH_SUN7I=y
- CONFIG_DRAM_CLK=480
--CONFIG_MMC0_CD_PIN="PH1"
- CONFIG_SATAPWR="PB8"
- CONFIG_AHCI=y
- # CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set
---- a/configs/Lamobo_R1_defconfig
-+++ b/configs/Lamobo_R1_defconfig
-@@ -5,7 +5,6 @@ CONFIG_SPL=y
- CONFIG_MACH_SUN7I=y
- CONFIG_DRAM_CLK=432
- CONFIG_MACPWR="PH23"
--CONFIG_MMC0_CD_PIN="PH10"
- CONFIG_SATAPWR="PB3"
- CONFIG_GMAC_TX_DELAY=4
- CONFIG_AHCI=y
---- a/configs/Mele_M3_defconfig
-+++ b/configs/Mele_M3_defconfig
-@@ -4,7 +4,6 @@ CONFIG_DEFAULT_DEVICE_TREE="sun7i-a20-m3
- CONFIG_SPL=y
- CONFIG_MACH_SUN7I=y
- CONFIG_DRAM_CLK=384
--CONFIG_MMC0_CD_PIN="PH1"
- CONFIG_MMC_SUNXI_SLOT_EXTRA=2
- CONFIG_VIDEO_VGA=y
- CONFIG_VIDEO_COMPOSITE=y
---- a/configs/Mele_M5_defconfig
-+++ b/configs/Mele_M5_defconfig
-@@ -5,7 +5,6 @@ CONFIG_SPL=y
- CONFIG_MACH_SUN7I=y
- CONFIG_DRAM_CLK=432
- CONFIG_DRAM_ZQ=122
--CONFIG_MMC0_CD_PIN="PH1"
- CONFIG_VIDEO_COMPOSITE=y
- CONFIG_AHCI=y
- # CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set
---- a/configs/Merrii_A80_Optimus_defconfig
-+++ b/configs/Merrii_A80_Optimus_defconfig
-@@ -4,7 +4,6 @@ CONFIG_DEFAULT_DEVICE_TREE="sun9i-a80-op
- CONFIG_SPL=y
- CONFIG_MACH_SUN9I=y
- CONFIG_DRAM_CLK=672
--CONFIG_MMC0_CD_PIN="PH18"
- CONFIG_MMC_SUNXI_SLOT_EXTRA=2
- CONFIG_USB0_VBUS_PIN="AXP0-VBUS-ENABLE"
- CONFIG_USB0_VBUS_DET="AXP0-VBUS-DETECT"
---- a/configs/Orangepi_mini_defconfig
-+++ b/configs/Orangepi_mini_defconfig
-@@ -5,8 +5,6 @@ CONFIG_SPL=y
- CONFIG_MACH_SUN7I=y
- CONFIG_DRAM_CLK=432
- CONFIG_MACPWR="PH23"
--CONFIG_MMC0_CD_PIN="PH10"
--CONFIG_MMC3_CD_PIN="PH11"
- CONFIG_MMC_SUNXI_SLOT_EXTRA=3
- CONFIG_USB1_VBUS_PIN="PH26"
- CONFIG_USB2_VBUS_PIN="PH22"
---- a/configs/Sinlinx_SinA31s_defconfig
-+++ b/configs/Sinlinx_SinA31s_defconfig
-@@ -5,7 +5,6 @@ CONFIG_SPL=y
- CONFIG_MACH_SUN6I=y
- CONFIG_DRAM_CLK=432
- CONFIG_DRAM_ZQ=251
--CONFIG_MMC0_CD_PIN="PA4"
- CONFIG_MMC_SUNXI_SLOT_EXTRA=3
- CONFIG_USB1_VBUS_PIN=""
- CONFIG_USB2_VBUS_PIN=""
---- a/configs/Sinlinx_SinA33_defconfig
-+++ b/configs/Sinlinx_SinA33_defconfig
-@@ -5,7 +5,6 @@ CONFIG_SPL=y
- CONFIG_MACH_SUN8I_A33=y
- CONFIG_DRAM_CLK=552
- CONFIG_DRAM_ZQ=15291
--CONFIG_MMC0_CD_PIN="PB4"
- CONFIG_MMC_SUNXI_SLOT_EXTRA=2
- CONFIG_USB0_ID_DET="PH8"
- CONFIG_VIDEO_LCD_MODE="x:1024,y:600,depth:18,pclk_khz:66000,le:90,ri:160,up:3,lo:127,hs:70,vs:20,sync:3,vmode:0"
---- a/configs/Sunchip_CX-A99_defconfig
-+++ b/configs/Sunchip_CX-A99_defconfig
-@@ -6,7 +6,6 @@ CONFIG_MACH_SUN9I=y
- CONFIG_DRAM_CLK=600
- CONFIG_DRAM_ZQ=3881915
- CONFIG_DRAM_ODT_EN=y
--CONFIG_MMC0_CD_PIN="PH17"
- CONFIG_MMC_SUNXI_SLOT_EXTRA=2
- CONFIG_USB0_VBUS_PIN="PH15"
- CONFIG_USB1_VBUS_PIN="PL7"
---- a/configs/UTOO_P66_defconfig
-+++ b/configs/UTOO_P66_defconfig
-@@ -5,7 +5,6 @@ CONFIG_SPL=y
- CONFIG_MACH_SUN5I=y
- CONFIG_DRAM_CLK=432
- CONFIG_DRAM_EMR1=0
--CONFIG_MMC0_CD_PIN="PG0"
- CONFIG_MMC_SUNXI_SLOT_EXTRA=2
- CONFIG_USB0_VBUS_PIN="PB04"
- CONFIG_USB0_VBUS_DET="PG01"
---- a/configs/Yones_Toptech_BD1078_defconfig
-+++ b/configs/Yones_Toptech_BD1078_defconfig
-@@ -4,8 +4,6 @@ CONFIG_DEFAULT_DEVICE_TREE="sun7i-a20-yo
- CONFIG_SPL=y
- CONFIG_MACH_SUN7I=y
- CONFIG_DRAM_CLK=408
--CONFIG_MMC0_CD_PIN="PH1"
--CONFIG_MMC1_CD_PIN="PH2"
- CONFIG_MMC1_PINS_PH=y
- CONFIG_MMC_SUNXI_SLOT_EXTRA=1
- CONFIG_USB0_VBUS_PIN="PB9"
---- a/configs/bananapi_m2_zero_defconfig
-+++ b/configs/bananapi_m2_zero_defconfig
-@@ -4,5 +4,4 @@ CONFIG_DEFAULT_DEVICE_TREE="sun8i-h2-plu
- CONFIG_SPL=y
- CONFIG_MACH_SUN8I_H3=y
- CONFIG_DRAM_CLK=408
--CONFIG_MMC0_CD_PIN=""
- # CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set
---- a/configs/bananapi_m64_defconfig
-+++ b/configs/bananapi_m64_defconfig
-@@ -4,7 +4,6 @@ CONFIG_DEFAULT_DEVICE_TREE="sun50i-a64-b
- CONFIG_SPL=y
- CONFIG_MACH_SUN50I=y
- CONFIG_RESERVE_ALLWINNER_BOOT0_HEADER=y
--CONFIG_MMC0_CD_PIN="PH13"
- CONFIG_MMC_SUNXI_SLOT_EXTRA=2
- # CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set
- CONFIG_SUPPORT_EMMC_BOOT=y
---- a/configs/beelink_gs1_defconfig
-+++ b/configs/beelink_gs1_defconfig
-@@ -4,7 +4,6 @@ CONFIG_DEFAULT_DEVICE_TREE="sun50i-h6-be
- 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_PSCI_RESET is not set
- # CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set
---- a/configs/nanopi_m1_plus_defconfig
-+++ b/configs/nanopi_m1_plus_defconfig
-@@ -5,7 +5,6 @@ CONFIG_SPL=y
- CONFIG_MACH_SUN8I_H3=y
- CONFIG_DRAM_CLK=408
- CONFIG_MACPWR="PD6"
--CONFIG_MMC0_CD_PIN="PH13"
- CONFIG_MMC_SUNXI_SLOT_EXTRA=2
- # CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set
- CONFIG_SUN8I_EMAC=y
---- a/configs/oceanic_5205_5inmfd_defconfig
-+++ b/configs/oceanic_5205_5inmfd_defconfig
-@@ -7,7 +7,6 @@ CONFIG_RESERVE_ALLWINNER_BOOT0_HEADER=y
- CONFIG_SUNXI_DRAM_LPDDR3_STOCK=y
- CONFIG_DRAM_CLK=552
- CONFIG_DRAM_ZQ=3881949
--CONFIG_MMC0_CD_PIN=""
- CONFIG_SPL_SPI_SUNXI=y
- # CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set
- CONFIG_SUN8I_EMAC=y
---- a/configs/orangepi_3_defconfig
-+++ b/configs/orangepi_3_defconfig
-@@ -4,7 +4,6 @@ CONFIG_DEFAULT_DEVICE_TREE="sun50i-h6-or
- 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_BLUETOOTH_DT_DEVICE_FIXUP="brcm,bcm4345c5"
- # CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set
---- a/configs/orangepi_lite2_defconfig
-+++ b/configs/orangepi_lite2_defconfig
-@@ -4,7 +4,6 @@ CONFIG_DEFAULT_DEVICE_TREE="sun50i-h6-or
- CONFIG_SPL=y
- CONFIG_MACH_SUN50I_H6=y
- CONFIG_SUNXI_DRAM_H6_LPDDR3=y
--CONFIG_MMC0_CD_PIN="PF6"
- # CONFIG_PSCI_RESET is not set
- # CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set
- CONFIG_USB_EHCI_HCD=y
---- a/configs/orangepi_one_plus_defconfig
-+++ b/configs/orangepi_one_plus_defconfig
-@@ -4,7 +4,6 @@ CONFIG_DEFAULT_DEVICE_TREE="sun50i-h6-or
- CONFIG_SPL=y
- CONFIG_MACH_SUN50I_H6=y
- CONFIG_SUNXI_DRAM_H6_LPDDR3=y
--CONFIG_MMC0_CD_PIN="PF6"
- # CONFIG_PSCI_RESET is not set
- # CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set
- CONFIG_USB_EHCI_HCD=y
---- a/configs/orangepi_zero2_defconfig
-+++ b/configs/orangepi_zero2_defconfig
-@@ -7,7 +7,6 @@ CONFIG_DRAM_SUN50I_H616_READ_CALIBRATION
- CONFIG_DRAM_SUN50I_H616_READ_TRAINING=y
- CONFIG_DRAM_SUN50I_H616_WRITE_TRAINING=y
- CONFIG_MACH_SUN50I_H616=y
--CONFIG_MMC0_CD_PIN="PF6"
- CONFIG_R_I2C_ENABLE=y
- CONFIG_SPL_SPI_SUNXI=y
- # CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set
---- a/configs/orangepi_zero_plus2_defconfig
-+++ b/configs/orangepi_zero_plus2_defconfig
-@@ -6,7 +6,6 @@ CONFIG_MACH_SUN50I_H5=y
- CONFIG_DRAM_CLK=672
- CONFIG_DRAM_ZQ=3881977
- # CONFIG_DRAM_ODT_EN is not set
--CONFIG_MMC0_CD_PIN="PH13"
- CONFIG_MMC_SUNXI_SLOT_EXTRA=2
- # CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set
- CONFIG_SUN8I_EMAC=y
---- a/configs/orangepi_zero_plus2_h3_defconfig
-+++ b/configs/orangepi_zero_plus2_h3_defconfig
-@@ -5,7 +5,6 @@ CONFIG_SPL=y
- CONFIG_MACH_SUN8I_H3=y
- CONFIG_DRAM_CLK=672
- # CONFIG_DRAM_ODT_EN is not set
--CONFIG_MMC0_CD_PIN="PH13"
- CONFIG_MMC_SUNXI_SLOT_EXTRA=2
- # CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set
- CONFIG_SUN8I_EMAC=y
---- a/configs/parrot_r16_defconfig
-+++ b/configs/parrot_r16_defconfig
-@@ -5,7 +5,6 @@ CONFIG_SPL=y
- CONFIG_MACH_SUN8I_A33=y
- CONFIG_DRAM_CLK=600
- CONFIG_DRAM_ZQ=15291
--CONFIG_MMC0_CD_PIN="PD14"
- CONFIG_MMC_SUNXI_SLOT_EXTRA=2
- CONFIG_USB0_ID_DET="PD10"
- CONFIG_USB1_VBUS_PIN="PD12"
---- a/configs/pine64-lts_defconfig
-+++ b/configs/pine64-lts_defconfig
-@@ -6,7 +6,6 @@ CONFIG_MACH_SUN50I=y
- CONFIG_SUNXI_DRAM_LPDDR3_STOCK=y
- CONFIG_DRAM_CLK=552
- CONFIG_DRAM_ZQ=3881949
--CONFIG_MMC0_CD_PIN=""
- CONFIG_MMC_SUNXI_SLOT_EXTRA=2
- CONFIG_SPL_SPI_SUNXI=y
- # CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set
---- a/configs/pine_h64_defconfig
-+++ b/configs/pine_h64_defconfig
-@@ -5,7 +5,6 @@ CONFIG_SPL=y
- CONFIG_MACH_SUN50I_H6=y
- CONFIG_SUNXI_DRAM_H6_LPDDR3=y
- CONFIG_MACPWR="PC16"
--CONFIG_MMC0_CD_PIN="PF6"
- CONFIG_MMC_SUNXI_SLOT_EXTRA=2
- CONFIG_USB3_VBUS_PIN="PL5"
- CONFIG_SPL_SPI_SUNXI=y
---- a/configs/sopine_baseboard_defconfig
-+++ b/configs/sopine_baseboard_defconfig
-@@ -7,7 +7,6 @@ CONFIG_RESERVE_ALLWINNER_BOOT0_HEADER=y
- CONFIG_SUNXI_DRAM_LPDDR3_STOCK=y
- CONFIG_DRAM_CLK=552
- CONFIG_DRAM_ZQ=3881949
--CONFIG_MMC0_CD_PIN=""
- CONFIG_MMC_SUNXI_SLOT_EXTRA=2
- CONFIG_SPL_SPI_SUNXI=y
- # CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set
---- a/configs/tanix_tx6_defconfig
-+++ b/configs/tanix_tx6_defconfig
-@@ -5,6 +5,5 @@ CONFIG_SPL=y
- CONFIG_MACH_SUN50I_H6=y
- CONFIG_SUNXI_DRAM_H6_DDR3_1333=y
- CONFIG_DRAM_CLK=648
--CONFIG_MMC0_CD_PIN="PF6"
- CONFIG_MMC_SUNXI_SLOT_EXTRA=2
- # CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set

+ 4 - 4
package/boot/uboot-d1/patches/0064-sunxi-Hide-the-SUNXI_MINIMUM_DRAM_MB-symbol.patch → package/boot/uboot-d1/patches/0019-sunxi-Hide-the-SUNXI_MINIMUM_DRAM_MB-symbol.patch

@@ -1,7 +1,7 @@
-From 8377aa2162d0a7fda76597eae59725a298dda5e6 Mon Sep 17 00:00:00 2001
+From f79f14a2b777f20150d4ffa9bb0ec1cf77f786f0 Mon Sep 17 00:00:00 2001
 From: Samuel Holland <[email protected]>
 From: Samuel Holland <[email protected]>
 Date: Mon, 31 Oct 2022 22:14:36 -0500
 Date: Mon, 31 Oct 2022 22:14:36 -0500
-Subject: [PATCH 64/90] sunxi: Hide the SUNXI_MINIMUM_DRAM_MB symbol
+Subject: [PATCH 19/68] sunxi: Hide the SUNXI_MINIMUM_DRAM_MB symbol
 
 
 This option affects the ABI between SPL/U-Boot and U-Boot/scripts, so it
 This option affects the ABI between SPL/U-Boot and U-Boot/scripts, so it
 should not normally be changed by the user.
 should not normally be changed by the user.
@@ -13,8 +13,8 @@ Signed-off-by: Samuel Holland <[email protected]>
 
 
 --- a/board/sunxi/Kconfig
 --- a/board/sunxi/Kconfig
 +++ b/board/sunxi/Kconfig
 +++ b/board/sunxi/Kconfig
-@@ -67,7 +67,7 @@ config SPL_STACK_R_ADDR
- 	default 0x4fe00000 if SUN50I_GEN_H6
+@@ -69,7 +69,7 @@ config SPL_STACK_R_ADDR
+ 	default 0x4fe00000 if SUNXI_GEN_NCAT2
  
  
  config SUNXI_MINIMUM_DRAM_MB
  config SUNXI_MINIMUM_DRAM_MB
 -	int "minimum DRAM size"
 -	int "minimum DRAM size"

+ 0 - 323
package/boot/uboot-d1/patches/0019-sunxi-mmc-Move-header-to-the-driver-directory.patch

@@ -1,323 +0,0 @@
-From 4c0c00e7131baf410702555342337c178dd0de98 Mon Sep 17 00:00:00 2001
-From: Samuel Holland <[email protected]>
-Date: Sun, 30 Oct 2022 16:04:47 -0500
-Subject: [PATCH 19/90] sunxi: mmc: Move header to the driver directory
-
-The MMC controller driver is (and ought to be) the only user of these
-register definitions. Put them in a header next to the driver to remove
-the dependency on a specific ARM platform's headers.
-
-Due to the sunxi_mmc_init() prototype, the file was not renamed. None of
-the register definitions were changed.
-
-Signed-off-by: Samuel Holland <[email protected]>
----
- arch/arm/include/asm/arch-sunxi/mmc.h | 139 +-------------------------
- drivers/mmc/sunxi_mmc.c               |   4 +
- drivers/mmc/sunxi_mmc.h               | 138 +++++++++++++++++++++++++
- 3 files changed, 146 insertions(+), 135 deletions(-)
- create mode 100644 drivers/mmc/sunxi_mmc.h
-
---- a/arch/arm/include/asm/arch-sunxi/mmc.h
-+++ b/arch/arm/include/asm/arch-sunxi/mmc.h
-@@ -1,139 +1,8 @@
- /* SPDX-License-Identifier: GPL-2.0+ */
--/*
-- * (C) Copyright 2007-2011
-- * Allwinner Technology Co., Ltd. <www.allwinnertech.com>
-- * Aaron <[email protected]>
-- *
-- * MMC register definition for allwinner sunxi platform.
-- */
- 
--#ifndef _SUNXI_MMC_H
--#define _SUNXI_MMC_H
--
--#include <linux/types.h>
--
--struct sunxi_mmc {
--	u32 gctrl;		/* 0x00 global control */
--	u32 clkcr;		/* 0x04 clock control */
--	u32 timeout;		/* 0x08 time out */
--	u32 width;		/* 0x0c bus width */
--	u32 blksz;		/* 0x10 block size */
--	u32 bytecnt;		/* 0x14 byte count */
--	u32 cmd;		/* 0x18 command */
--	u32 arg;		/* 0x1c argument */
--	u32 resp0;		/* 0x20 response 0 */
--	u32 resp1;		/* 0x24 response 1 */
--	u32 resp2;		/* 0x28 response 2 */
--	u32 resp3;		/* 0x2c response 3 */
--	u32 imask;		/* 0x30 interrupt mask */
--	u32 mint;		/* 0x34 masked interrupt status */
--	u32 rint;		/* 0x38 raw interrupt status */
--	u32 status;		/* 0x3c status */
--	u32 ftrglevel;		/* 0x40 FIFO threshold watermark*/
--	u32 funcsel;		/* 0x44 function select */
--	u32 cbcr;		/* 0x48 CIU byte count */
--	u32 bbcr;		/* 0x4c BIU byte count */
--	u32 dbgc;		/* 0x50 debug enable */
--	u32 res0;		/* 0x54 reserved */
--	u32 a12a;		/* 0x58 Auto command 12 argument */
--	u32 ntsr;		/* 0x5c	New timing set register */
--	u32 res1[8];
--	u32 dmac;		/* 0x80 internal DMA control */
--	u32 dlba;		/* 0x84 internal DMA descr list base address */
--	u32 idst;		/* 0x88 internal DMA status */
--	u32 idie;		/* 0x8c internal DMA interrupt enable */
--	u32 chda;		/* 0x90 */
--	u32 cbda;		/* 0x94 */
--	u32 res2[26];
--#if defined(CONFIG_SUNXI_GEN_SUN6I) || defined(CONFIG_SUN50I_GEN_H6)
--	u32 res3[17];
--	u32 samp_dl;
--	u32 res4[46];
--#endif
--	u32 fifo;		/* 0x100 / 0x200 FIFO access address */
--};
--
--#define SUNXI_MMC_CLK_POWERSAVE		(0x1 << 17)
--#define SUNXI_MMC_CLK_ENABLE		(0x1 << 16)
--#define SUNXI_MMC_CLK_DIVIDER_MASK	(0xff)
--
--#define SUNXI_MMC_GCTRL_SOFT_RESET	(0x1 << 0)
--#define SUNXI_MMC_GCTRL_FIFO_RESET	(0x1 << 1)
--#define SUNXI_MMC_GCTRL_DMA_RESET	(0x1 << 2)
--#define SUNXI_MMC_GCTRL_RESET		(SUNXI_MMC_GCTRL_SOFT_RESET|\
--					 SUNXI_MMC_GCTRL_FIFO_RESET|\
--					 SUNXI_MMC_GCTRL_DMA_RESET)
--#define SUNXI_MMC_GCTRL_DMA_ENABLE	(0x1 << 5)
--#define SUNXI_MMC_GCTRL_ACCESS_BY_AHB   (0x1 << 31)
--
--#define SUNXI_MMC_CMD_RESP_EXPIRE	(0x1 << 6)
--#define SUNXI_MMC_CMD_LONG_RESPONSE	(0x1 << 7)
--#define SUNXI_MMC_CMD_CHK_RESPONSE_CRC	(0x1 << 8)
--#define SUNXI_MMC_CMD_DATA_EXPIRE	(0x1 << 9)
--#define SUNXI_MMC_CMD_WRITE		(0x1 << 10)
--#define SUNXI_MMC_CMD_AUTO_STOP		(0x1 << 12)
--#define SUNXI_MMC_CMD_WAIT_PRE_OVER	(0x1 << 13)
--#define SUNXI_MMC_CMD_SEND_INIT_SEQ	(0x1 << 15)
--#define SUNXI_MMC_CMD_UPCLK_ONLY	(0x1 << 21)
--#define SUNXI_MMC_CMD_START		(0x1 << 31)
--
--#define SUNXI_MMC_RINT_RESP_ERROR		(0x1 << 1)
--#define SUNXI_MMC_RINT_COMMAND_DONE		(0x1 << 2)
--#define SUNXI_MMC_RINT_DATA_OVER		(0x1 << 3)
--#define SUNXI_MMC_RINT_TX_DATA_REQUEST		(0x1 << 4)
--#define SUNXI_MMC_RINT_RX_DATA_REQUEST		(0x1 << 5)
--#define SUNXI_MMC_RINT_RESP_CRC_ERROR		(0x1 << 6)
--#define SUNXI_MMC_RINT_DATA_CRC_ERROR		(0x1 << 7)
--#define SUNXI_MMC_RINT_RESP_TIMEOUT		(0x1 << 8)
--#define SUNXI_MMC_RINT_DATA_TIMEOUT		(0x1 << 9)
--#define SUNXI_MMC_RINT_VOLTAGE_CHANGE_DONE	(0x1 << 10)
--#define SUNXI_MMC_RINT_FIFO_RUN_ERROR		(0x1 << 11)
--#define SUNXI_MMC_RINT_HARD_WARE_LOCKED		(0x1 << 12)
--#define SUNXI_MMC_RINT_START_BIT_ERROR		(0x1 << 13)
--#define SUNXI_MMC_RINT_AUTO_COMMAND_DONE	(0x1 << 14)
--#define SUNXI_MMC_RINT_END_BIT_ERROR		(0x1 << 15)
--#define SUNXI_MMC_RINT_SDIO_INTERRUPT		(0x1 << 16)
--#define SUNXI_MMC_RINT_CARD_INSERT		(0x1 << 30)
--#define SUNXI_MMC_RINT_CARD_REMOVE		(0x1 << 31)
--#define SUNXI_MMC_RINT_INTERRUPT_ERROR_BIT      \
--	(SUNXI_MMC_RINT_RESP_ERROR |		\
--	 SUNXI_MMC_RINT_RESP_CRC_ERROR |	\
--	 SUNXI_MMC_RINT_DATA_CRC_ERROR |	\
--	 SUNXI_MMC_RINT_RESP_TIMEOUT |		\
--	 SUNXI_MMC_RINT_DATA_TIMEOUT |		\
--	 SUNXI_MMC_RINT_VOLTAGE_CHANGE_DONE |	\
--	 SUNXI_MMC_RINT_FIFO_RUN_ERROR |	\
--	 SUNXI_MMC_RINT_HARD_WARE_LOCKED |	\
--	 SUNXI_MMC_RINT_START_BIT_ERROR |	\
--	 SUNXI_MMC_RINT_END_BIT_ERROR) /* 0xbfc2 */
--#define SUNXI_MMC_RINT_INTERRUPT_DONE_BIT	\
--	(SUNXI_MMC_RINT_AUTO_COMMAND_DONE |	\
--	 SUNXI_MMC_RINT_DATA_OVER |		\
--	 SUNXI_MMC_RINT_COMMAND_DONE |		\
--	 SUNXI_MMC_RINT_VOLTAGE_CHANGE_DONE)
--
--#define SUNXI_MMC_STATUS_RXWL_FLAG		(0x1 << 0)
--#define SUNXI_MMC_STATUS_TXWL_FLAG		(0x1 << 1)
--#define SUNXI_MMC_STATUS_FIFO_EMPTY		(0x1 << 2)
--#define SUNXI_MMC_STATUS_FIFO_FULL		(0x1 << 3)
--#define SUNXI_MMC_STATUS_CARD_PRESENT		(0x1 << 8)
--#define SUNXI_MMC_STATUS_CARD_DATA_BUSY		(0x1 << 9)
--#define SUNXI_MMC_STATUS_DATA_FSM_BUSY		(0x1 << 10)
--#define SUNXI_MMC_STATUS_FIFO_LEVEL(reg)	(((reg) >> 17) & 0x3fff)
--
--#define SUNXI_MMC_NTSR_MODE_SEL_NEW		(0x1 << 31)
--
--#define SUNXI_MMC_IDMAC_RESET		(0x1 << 0)
--#define SUNXI_MMC_IDMAC_FIXBURST	(0x1 << 1)
--#define SUNXI_MMC_IDMAC_ENABLE		(0x1 << 7)
--
--#define SUNXI_MMC_IDIE_TXIRQ		(0x1 << 0)
--#define SUNXI_MMC_IDIE_RXIRQ		(0x1 << 1)
--
--#define SUNXI_MMC_COMMON_CLK_GATE		(1 << 16)
--#define SUNXI_MMC_COMMON_RESET			(1 << 18)
--
--#define SUNXI_MMC_CAL_DL_SW_EN		(0x1 << 7)
-+#ifndef _ASM_ARCH_MMC_H_
-+#define _ASM_ARCH_MMC_H_
- 
- struct mmc *sunxi_mmc_init(int sdc_no);
--#endif /* _SUNXI_MMC_H */
-+
-+#endif /* _ASM_ARCH_MMC_H_ */
---- a/drivers/mmc/sunxi_mmc.c
-+++ b/drivers/mmc/sunxi_mmc.c
-@@ -25,9 +25,13 @@
- #include <asm/io.h>
- #include <asm/arch/clock.h>
- #include <asm/arch/cpu.h>
-+#if !CONFIG_IS_ENABLED(DM_MMC)
- #include <asm/arch/mmc.h>
-+#endif
- #include <linux/delay.h>
- 
-+#include "sunxi_mmc.h"
-+
- #ifndef CCM_MMC_CTRL_MODE_SEL_NEW
- #define CCM_MMC_CTRL_MODE_SEL_NEW	0
- #endif
---- /dev/null
-+++ b/drivers/mmc/sunxi_mmc.h
-@@ -0,0 +1,138 @@
-+/* SPDX-License-Identifier: GPL-2.0+ */
-+/*
-+ * (C) Copyright 2007-2011
-+ * Allwinner Technology Co., Ltd. <www.allwinnertech.com>
-+ * Aaron <[email protected]>
-+ *
-+ * MMC register definition for allwinner sunxi platform.
-+ */
-+
-+#ifndef _SUNXI_MMC_H
-+#define _SUNXI_MMC_H
-+
-+#include <linux/types.h>
-+
-+struct sunxi_mmc {
-+	u32 gctrl;		/* 0x00 global control */
-+	u32 clkcr;		/* 0x04 clock control */
-+	u32 timeout;		/* 0x08 time out */
-+	u32 width;		/* 0x0c bus width */
-+	u32 blksz;		/* 0x10 block size */
-+	u32 bytecnt;		/* 0x14 byte count */
-+	u32 cmd;		/* 0x18 command */
-+	u32 arg;		/* 0x1c argument */
-+	u32 resp0;		/* 0x20 response 0 */
-+	u32 resp1;		/* 0x24 response 1 */
-+	u32 resp2;		/* 0x28 response 2 */
-+	u32 resp3;		/* 0x2c response 3 */
-+	u32 imask;		/* 0x30 interrupt mask */
-+	u32 mint;		/* 0x34 masked interrupt status */
-+	u32 rint;		/* 0x38 raw interrupt status */
-+	u32 status;		/* 0x3c status */
-+	u32 ftrglevel;		/* 0x40 FIFO threshold watermark*/
-+	u32 funcsel;		/* 0x44 function select */
-+	u32 cbcr;		/* 0x48 CIU byte count */
-+	u32 bbcr;		/* 0x4c BIU byte count */
-+	u32 dbgc;		/* 0x50 debug enable */
-+	u32 res0;		/* 0x54 reserved */
-+	u32 a12a;		/* 0x58 Auto command 12 argument */
-+	u32 ntsr;		/* 0x5c	New timing set register */
-+	u32 res1[8];
-+	u32 dmac;		/* 0x80 internal DMA control */
-+	u32 dlba;		/* 0x84 internal DMA descr list base address */
-+	u32 idst;		/* 0x88 internal DMA status */
-+	u32 idie;		/* 0x8c internal DMA interrupt enable */
-+	u32 chda;		/* 0x90 */
-+	u32 cbda;		/* 0x94 */
-+	u32 res2[26];
-+#if defined(CONFIG_SUNXI_GEN_SUN6I) || defined(CONFIG_SUN50I_GEN_H6)
-+	u32 res3[17];
-+	u32 samp_dl;
-+	u32 res4[46];
-+#endif
-+	u32 fifo;		/* 0x100 / 0x200 FIFO access address */
-+};
-+
-+#define SUNXI_MMC_CLK_POWERSAVE		(0x1 << 17)
-+#define SUNXI_MMC_CLK_ENABLE		(0x1 << 16)
-+#define SUNXI_MMC_CLK_DIVIDER_MASK	(0xff)
-+
-+#define SUNXI_MMC_GCTRL_SOFT_RESET	(0x1 << 0)
-+#define SUNXI_MMC_GCTRL_FIFO_RESET	(0x1 << 1)
-+#define SUNXI_MMC_GCTRL_DMA_RESET	(0x1 << 2)
-+#define SUNXI_MMC_GCTRL_RESET		(SUNXI_MMC_GCTRL_SOFT_RESET|\
-+					 SUNXI_MMC_GCTRL_FIFO_RESET|\
-+					 SUNXI_MMC_GCTRL_DMA_RESET)
-+#define SUNXI_MMC_GCTRL_DMA_ENABLE	(0x1 << 5)
-+#define SUNXI_MMC_GCTRL_ACCESS_BY_AHB   (0x1 << 31)
-+
-+#define SUNXI_MMC_CMD_RESP_EXPIRE	(0x1 << 6)
-+#define SUNXI_MMC_CMD_LONG_RESPONSE	(0x1 << 7)
-+#define SUNXI_MMC_CMD_CHK_RESPONSE_CRC	(0x1 << 8)
-+#define SUNXI_MMC_CMD_DATA_EXPIRE	(0x1 << 9)
-+#define SUNXI_MMC_CMD_WRITE		(0x1 << 10)
-+#define SUNXI_MMC_CMD_AUTO_STOP		(0x1 << 12)
-+#define SUNXI_MMC_CMD_WAIT_PRE_OVER	(0x1 << 13)
-+#define SUNXI_MMC_CMD_SEND_INIT_SEQ	(0x1 << 15)
-+#define SUNXI_MMC_CMD_UPCLK_ONLY	(0x1 << 21)
-+#define SUNXI_MMC_CMD_START		(0x1 << 31)
-+
-+#define SUNXI_MMC_RINT_RESP_ERROR		(0x1 << 1)
-+#define SUNXI_MMC_RINT_COMMAND_DONE		(0x1 << 2)
-+#define SUNXI_MMC_RINT_DATA_OVER		(0x1 << 3)
-+#define SUNXI_MMC_RINT_TX_DATA_REQUEST		(0x1 << 4)
-+#define SUNXI_MMC_RINT_RX_DATA_REQUEST		(0x1 << 5)
-+#define SUNXI_MMC_RINT_RESP_CRC_ERROR		(0x1 << 6)
-+#define SUNXI_MMC_RINT_DATA_CRC_ERROR		(0x1 << 7)
-+#define SUNXI_MMC_RINT_RESP_TIMEOUT		(0x1 << 8)
-+#define SUNXI_MMC_RINT_DATA_TIMEOUT		(0x1 << 9)
-+#define SUNXI_MMC_RINT_VOLTAGE_CHANGE_DONE	(0x1 << 10)
-+#define SUNXI_MMC_RINT_FIFO_RUN_ERROR		(0x1 << 11)
-+#define SUNXI_MMC_RINT_HARD_WARE_LOCKED		(0x1 << 12)
-+#define SUNXI_MMC_RINT_START_BIT_ERROR		(0x1 << 13)
-+#define SUNXI_MMC_RINT_AUTO_COMMAND_DONE	(0x1 << 14)
-+#define SUNXI_MMC_RINT_END_BIT_ERROR		(0x1 << 15)
-+#define SUNXI_MMC_RINT_SDIO_INTERRUPT		(0x1 << 16)
-+#define SUNXI_MMC_RINT_CARD_INSERT		(0x1 << 30)
-+#define SUNXI_MMC_RINT_CARD_REMOVE		(0x1 << 31)
-+#define SUNXI_MMC_RINT_INTERRUPT_ERROR_BIT      \
-+	(SUNXI_MMC_RINT_RESP_ERROR |		\
-+	 SUNXI_MMC_RINT_RESP_CRC_ERROR |	\
-+	 SUNXI_MMC_RINT_DATA_CRC_ERROR |	\
-+	 SUNXI_MMC_RINT_RESP_TIMEOUT |		\
-+	 SUNXI_MMC_RINT_DATA_TIMEOUT |		\
-+	 SUNXI_MMC_RINT_VOLTAGE_CHANGE_DONE |	\
-+	 SUNXI_MMC_RINT_FIFO_RUN_ERROR |	\
-+	 SUNXI_MMC_RINT_HARD_WARE_LOCKED |	\
-+	 SUNXI_MMC_RINT_START_BIT_ERROR |	\
-+	 SUNXI_MMC_RINT_END_BIT_ERROR) /* 0xbfc2 */
-+#define SUNXI_MMC_RINT_INTERRUPT_DONE_BIT	\
-+	(SUNXI_MMC_RINT_AUTO_COMMAND_DONE |	\
-+	 SUNXI_MMC_RINT_DATA_OVER |		\
-+	 SUNXI_MMC_RINT_COMMAND_DONE |		\
-+	 SUNXI_MMC_RINT_VOLTAGE_CHANGE_DONE)
-+
-+#define SUNXI_MMC_STATUS_RXWL_FLAG		(0x1 << 0)
-+#define SUNXI_MMC_STATUS_TXWL_FLAG		(0x1 << 1)
-+#define SUNXI_MMC_STATUS_FIFO_EMPTY		(0x1 << 2)
-+#define SUNXI_MMC_STATUS_FIFO_FULL		(0x1 << 3)
-+#define SUNXI_MMC_STATUS_CARD_PRESENT		(0x1 << 8)
-+#define SUNXI_MMC_STATUS_CARD_DATA_BUSY		(0x1 << 9)
-+#define SUNXI_MMC_STATUS_DATA_FSM_BUSY		(0x1 << 10)
-+#define SUNXI_MMC_STATUS_FIFO_LEVEL(reg)	(((reg) >> 17) & 0x3fff)
-+
-+#define SUNXI_MMC_NTSR_MODE_SEL_NEW		(0x1 << 31)
-+
-+#define SUNXI_MMC_IDMAC_RESET		(0x1 << 0)
-+#define SUNXI_MMC_IDMAC_FIXBURST	(0x1 << 1)
-+#define SUNXI_MMC_IDMAC_ENABLE		(0x1 << 7)
-+
-+#define SUNXI_MMC_IDIE_TXIRQ		(0x1 << 0)
-+#define SUNXI_MMC_IDIE_RXIRQ		(0x1 << 1)
-+
-+#define SUNXI_MMC_COMMON_CLK_GATE		(1 << 16)
-+#define SUNXI_MMC_COMMON_RESET			(1 << 18)
-+
-+#define SUNXI_MMC_CAL_DL_SW_EN		(0x1 << 7)
-+
-+#endif /* _SUNXI_MMC_H */

+ 0 - 72
package/boot/uboot-d1/patches/0020-pinctrl-sunxi-Add-support-for-the-D1.patch

@@ -1,72 +0,0 @@
-From fdf871a6089ee2f56439880b69d33a7d0d707d15 Mon Sep 17 00:00:00 2001
-From: Samuel Holland <[email protected]>
-Date: Sat, 28 Aug 2021 22:24:28 -0500
-Subject: [PATCH 20/90] pinctrl: sunxi: Add support for the D1
-
-Signed-off-by: Samuel Holland <[email protected]>
----
- drivers/pinctrl/sunxi/Kconfig         |  5 +++++
- drivers/pinctrl/sunxi/pinctrl-sunxi.c | 31 +++++++++++++++++++++++++++
- 2 files changed, 36 insertions(+)
-
---- a/drivers/pinctrl/sunxi/Kconfig
-+++ b/drivers/pinctrl/sunxi/Kconfig
-@@ -89,6 +89,11 @@ config PINCTRL_SUN9I_A80_R
- 	default MACH_SUN9I
- 	select PINCTRL_SUNXI
- 
-+config PINCTRL_SUN20I_D1
-+	bool "Support for the Allwinner D1 PIO"
-+	default TARGET_SUN20I_D1
-+	select PINCTRL_SUNXI
-+
- config PINCTRL_SUN50I_A64
- 	bool "Support for the Allwinner A64 PIO"
- 	default MACH_SUN50I
---- a/drivers/pinctrl/sunxi/pinctrl-sunxi.c
-+++ b/drivers/pinctrl/sunxi/pinctrl-sunxi.c
-@@ -588,6 +588,31 @@ static const struct sunxi_pinctrl_desc _
- 	.num_banks	= 3,
- };
- 
-+static const struct sunxi_pinctrl_function sun20i_d1_pinctrl_functions[] = {
-+	{ "emac",	8 },	/* PE0-PE15 */
-+	{ "gpio_in",	0 },
-+	{ "gpio_out",	1 },
-+	{ "i2c0",	4 },	/* PB10-PB11 */
-+	{ "mmc0",	2 },	/* PF0-PF5 */
-+	{ "mmc1",	2 },	/* PG0-PG5 */
-+	{ "mmc2",	3 },	/* PC2-PC7 */
-+	{ "spi0",	2 },	/* PC2-PC7 */
-+#if IS_ENABLED(CONFIG_UART0_PORT_F)
-+	{ "uart0",	3 },	/* PF2-PF4 */
-+#else
-+	{ "uart0",	6 },	/* PB8-PB9 */
-+#endif
-+	{ "uart1",	2 },	/* PG6-PG7 */
-+	{ "uart2",	7 },	/* PB0-PB1 */
-+};
-+
-+static const struct sunxi_pinctrl_desc __maybe_unused sun20i_d1_pinctrl_desc = {
-+	.functions	= sun20i_d1_pinctrl_functions,
-+	.num_functions	= ARRAY_SIZE(sun20i_d1_pinctrl_functions),
-+	.first_bank	= SUNXI_GPIO_A,
-+	.num_banks	= 7,
-+};
-+
- static const struct sunxi_pinctrl_function sun50i_a64_pinctrl_functions[] = {
- 	{ "emac",	4 },	/* PD8-PD23 */
- 	{ "gpio_in",	0 },
-@@ -849,6 +874,12 @@ static const struct udevice_id sunxi_pin
- 		.data = (ulong)&sun9i_a80_r_pinctrl_desc,
- 	},
- #endif
-+#ifdef CONFIG_PINCTRL_SUN20I_D1
-+	{
-+		.compatible = "allwinner,sun20i-d1-pinctrl",
-+		.data = (ulong)&sun20i_d1_pinctrl_desc,
-+	},
-+#endif
- #ifdef CONFIG_PINCTRL_SUN50I_A64
- 	{
- 		.compatible = "allwinner,sun50i-a64-pinctrl",

+ 6 - 5
package/boot/uboot-d1/patches/0065-sunxi-Clean-up-the-SPL_STACK_R_ADDR-defaults.patch → package/boot/uboot-d1/patches/0020-sunxi-Clean-up-the-SPL_STACK_R_ADDR-defaults.patch

@@ -1,7 +1,7 @@
-From 41e5a94533e9744b8eac718dd2c359eca57573f8 Mon Sep 17 00:00:00 2001
+From b9b70c8a9e9a9bf4971279ec93dac945d415d44a Mon Sep 17 00:00:00 2001
 From: Samuel Holland <[email protected]>
 From: Samuel Holland <[email protected]>
 Date: Fri, 5 Aug 2022 23:25:26 -0500
 Date: Fri, 5 Aug 2022 23:25:26 -0500
-Subject: [PATCH 65/90] sunxi: Clean up the SPL_STACK_R_ADDR defaults
+Subject: [PATCH 20/68] sunxi: Clean up the SPL_STACK_R_ADDR defaults
 
 
 Update this option to be based on SUNXI_MINIMUM_DRAM_MB. This corrects
 Update this option to be based on SUNXI_MINIMUM_DRAM_MB. This corrects
 the value used on V3s, which previously was the MACH_SUN8I default, and
 the value used on V3s, which previously was the MACH_SUN8I default, and
@@ -9,12 +9,12 @@ so relied on addresses wrapping modulo the DRAM size.
 
 
 Signed-off-by: Samuel Holland <[email protected]>
 Signed-off-by: Samuel Holland <[email protected]>
 ---
 ---
- board/sunxi/Kconfig | 9 ++-------
- 1 file changed, 2 insertions(+), 7 deletions(-)
+ board/sunxi/Kconfig | 10 ++--------
+ 1 file changed, 2 insertions(+), 8 deletions(-)
 
 
 --- a/board/sunxi/Kconfig
 --- a/board/sunxi/Kconfig
 +++ b/board/sunxi/Kconfig
 +++ b/board/sunxi/Kconfig
-@@ -57,14 +57,9 @@ config IDENT_STRING
+@@ -58,15 +58,9 @@ config IDENT_STRING
  
  
  config SPL_STACK_R_ADDR
  config SPL_STACK_R_ADDR
  	default 0x81e00000 if MACH_SUNIV
  	default 0x81e00000 if MACH_SUNIV
@@ -26,6 +26,7 @@ Signed-off-by: Samuel Holland <[email protected]>
  	default 0x2fe00000 if MACH_SUN9I
  	default 0x2fe00000 if MACH_SUN9I
 -	default 0x4fe00000 if MACH_SUN50I
 -	default 0x4fe00000 if MACH_SUN50I
 -	default 0x4fe00000 if SUN50I_GEN_H6
 -	default 0x4fe00000 if SUN50I_GEN_H6
+-	default 0x4fe00000 if SUNXI_GEN_NCAT2
 +	default 0x4fe00000 if SUNXI_MINIMUM_DRAM_MB >= 256
 +	default 0x4fe00000 if SUNXI_MINIMUM_DRAM_MB >= 256
 +	default 0x43e00000 if SUNXI_MINIMUM_DRAM_MB >= 64
 +	default 0x43e00000 if SUNXI_MINIMUM_DRAM_MB >= 64
  
  

+ 4 - 4
package/boot/uboot-d1/patches/0066-sunxi-Move-PRE_CON_BUF_ADDR-to-the-board-Kconfig.patch → package/boot/uboot-d1/patches/0021-sunxi-Move-PRE_CON_BUF_ADDR-to-the-board-Kconfig.patch

@@ -1,7 +1,7 @@
-From e947c7377b90897e4c638dad6e64201361dc8a9e Mon Sep 17 00:00:00 2001
+From 6ab5eb744647c9af3204756d2c2ce4180d7a4248 Mon Sep 17 00:00:00 2001
 From: Samuel Holland <[email protected]>
 From: Samuel Holland <[email protected]>
 Date: Sat, 6 Aug 2022 00:45:10 -0500
 Date: Sat, 6 Aug 2022 00:45:10 -0500
-Subject: [PATCH 66/90] sunxi: Move PRE_CON_BUF_ADDR to the board Kconfig
+Subject: [PATCH 21/68] sunxi: Move PRE_CON_BUF_ADDR to the board Kconfig
 
 
 This provides a default value for RISC-V when that is added, and it
 This provides a default value for RISC-V when that is added, and it
 makes sense to put this option next to the other DRAM layout options.
 makes sense to put this option next to the other DRAM layout options.
@@ -16,7 +16,7 @@ Signed-off-by: Samuel Holland <[email protected]>
 
 
 --- a/board/sunxi/Kconfig
 --- a/board/sunxi/Kconfig
 +++ b/board/sunxi/Kconfig
 +++ b/board/sunxi/Kconfig
-@@ -55,6 +55,12 @@ if BOARD_SUNXI
+@@ -56,6 +56,12 @@ if BOARD_SUNXI
  config IDENT_STRING
  config IDENT_STRING
  	default " Allwinner Technology"
  	default " Allwinner Technology"
  
  
@@ -31,7 +31,7 @@ Signed-off-by: Samuel Holland <[email protected]>
  	default 0x2fe00000 if MACH_SUN9I
  	default 0x2fe00000 if MACH_SUN9I
 --- a/common/Kconfig
 --- a/common/Kconfig
 +++ b/common/Kconfig
 +++ b/common/Kconfig
-@@ -195,8 +195,6 @@ config PRE_CON_BUF_SZ
+@@ -205,8 +205,6 @@ config PRE_CON_BUF_SZ
  config PRE_CON_BUF_ADDR
  config PRE_CON_BUF_ADDR
  	hex "Address of the pre-console buffer"
  	hex "Address of the pre-console buffer"
  	depends on PRE_CONSOLE_BUFFER
  	depends on PRE_CONSOLE_BUFFER

+ 3 - 3
package/boot/uboot-d1/patches/0067-sunxi-Move-SPL_BSS_START_ADDR-to-the-board-Kconfig.patch → package/boot/uboot-d1/patches/0022-sunxi-Move-SPL_BSS_START_ADDR-to-the-board-Kconfig.patch

@@ -1,7 +1,7 @@
-From 71796f9d47a6b7e0dd6bb276436950463039c1b8 Mon Sep 17 00:00:00 2001
+From bbb8fa9934270f2a8d63ea4a62612f5f7969dc15 Mon Sep 17 00:00:00 2001
 From: Samuel Holland <[email protected]>
 From: Samuel Holland <[email protected]>
 Date: Mon, 31 Oct 2022 00:08:26 -0500
 Date: Mon, 31 Oct 2022 00:08:26 -0500
-Subject: [PATCH 67/90] sunxi: Move SPL_BSS_START_ADDR to the board Kconfig
+Subject: [PATCH 22/68] sunxi: Move SPL_BSS_START_ADDR to the board Kconfig
 
 
 This provides a default value for RISC-V when that is added, and it
 This provides a default value for RISC-V when that is added, and it
 makes sense to put this option next to the other DRAM layout options.
 makes sense to put this option next to the other DRAM layout options.
@@ -16,7 +16,7 @@ Signed-off-by: Samuel Holland <[email protected]>
 
 
 --- a/board/sunxi/Kconfig
 --- a/board/sunxi/Kconfig
 +++ b/board/sunxi/Kconfig
 +++ b/board/sunxi/Kconfig
-@@ -61,6 +61,12 @@ config PRE_CON_BUF_ADDR
+@@ -62,6 +62,12 @@ config PRE_CON_BUF_ADDR
  	default 0x4f000000 if SUNXI_MINIMUM_DRAM_MB >= 256
  	default 0x4f000000 if SUNXI_MINIMUM_DRAM_MB >= 256
  	default 0x43000000 if SUNXI_MINIMUM_DRAM_MB >= 64
  	default 0x43000000 if SUNXI_MINIMUM_DRAM_MB >= 64
  
  

+ 0 - 25
package/boot/uboot-d1/patches/0023-Kconfig-Remove-an-impossible-condition.patch

@@ -1,25 +0,0 @@
-From 2d85df851c590b454749ac989a778bb226637bfc Mon Sep 17 00:00:00 2001
-From: Zoltan HERPAI <[email protected]>
-Date: Tue, 6 Jun 2023 15:08:39 +0000
-Subject: [PATCH 23/90] Kconfig: Remove an impossible condition
-
-ARCH_SUNXI selects BINMAN, so the condition "!BINMAN && ARCH_SUNXI"
-is impossible to satisfy.
-
-Signed-off-by: Samuel Holland <[email protected]>
-Signed-off-by: Zoltan HERPAI <[email protected]>
----
- Kconfig | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
---- a/Kconfig
-+++ b/Kconfig
-@@ -459,7 +459,7 @@ config BUILD_TARGET
- 	default "u-boot-with-spl.kwb" if ARCH_MVEBU && SPL
- 	default "u-boot-elf.srec" if RCAR_GEN3
- 	default "u-boot.itb" if !BINMAN && SPL_LOAD_FIT && (ARCH_ROCKCHIP || \
--				ARCH_SUNXI || RISCV || ARCH_ZYNQMP)
-+				RISCV || ARCH_ZYNQMP)
- 	default "u-boot.kwb" if ARCH_KIRKWOOD
- 	default "u-boot-with-spl.bin" if ARCH_AT91 && SPL_NAND_SUPPORT
- 	default "u-boot-with-spl.imx" if ARCH_MX6 && SPL

+ 5 - 5
package/boot/uboot-d1/patches/0068-sunxi-Move-SPL_TEXT_BASE-to-the-board-Kconfig.patch → package/boot/uboot-d1/patches/0023-sunxi-Move-SPL_TEXT_BASE-to-the-board-Kconfig.patch

@@ -1,7 +1,7 @@
-From 5d60490d0f0ca0a5d414ba9a4e41ceea8a98b4d2 Mon Sep 17 00:00:00 2001
+From b36106cc8b53c11c21f4fcc398479756cbdc3b07 Mon Sep 17 00:00:00 2001
 From: Samuel Holland <[email protected]>
 From: Samuel Holland <[email protected]>
 Date: Sat, 6 Aug 2022 00:07:47 -0500
 Date: Sat, 6 Aug 2022 00:07:47 -0500
-Subject: [PATCH 68/90] sunxi: Move SPL_TEXT_BASE to the board Kconfig
+Subject: [PATCH 23/68] sunxi: Move SPL_TEXT_BASE to the board Kconfig
 
 
 It makes sense to put this near the definition of SUNXI_SRAM_ADDRESS.
 It makes sense to put this near the definition of SUNXI_SRAM_ADDRESS.
 
 
@@ -13,13 +13,13 @@ Signed-off-by: Samuel Holland <[email protected]>
 
 
 --- a/board/sunxi/Kconfig
 --- a/board/sunxi/Kconfig
 +++ b/board/sunxi/Kconfig
 +++ b/board/sunxi/Kconfig
-@@ -73,6 +73,11 @@ config SPL_STACK_R_ADDR
+@@ -74,6 +74,11 @@ config SPL_STACK_R_ADDR
  	default 0x4fe00000 if SUNXI_MINIMUM_DRAM_MB >= 256
  	default 0x4fe00000 if SUNXI_MINIMUM_DRAM_MB >= 256
  	default 0x43e00000 if SUNXI_MINIMUM_DRAM_MB >= 64
  	default 0x43e00000 if SUNXI_MINIMUM_DRAM_MB >= 64
  
  
 +config SPL_TEXT_BASE
 +config SPL_TEXT_BASE
 +	default 0x10060 if MACH_SUN9I || MACH_SUN50I || MACH_SUN50I_H5
 +	default 0x10060 if MACH_SUN9I || MACH_SUN50I || MACH_SUN50I_H5
-+	default 0x20060 if SUN50I_GEN_H6
++	default 0x20060 if SUN50I_GEN_H6 || SUNXI_GEN_NCAT2
 +	default 0x00060
 +	default 0x00060
 +
 +
  config SUNXI_MINIMUM_DRAM_MB
  config SUNXI_MINIMUM_DRAM_MB
@@ -32,7 +32,7 @@ Signed-off-by: Samuel Holland <[email protected]>
  	default 0x402F0400 if AM33XX
  	default 0x402F0400 if AM33XX
  	default 0x40301350 if OMAP54XX
  	default 0x40301350 if OMAP54XX
 -	default 0x10060 if MACH_SUN50I || MACH_SUN50I_H5 || MACH_SUN9I
 -	default 0x10060 if MACH_SUN50I || MACH_SUN50I_H5 || MACH_SUN9I
--	default 0x20060 if SUN50I_GEN_H6
+-	default 0x20060 if SUN50I_GEN_H6 || SUNXI_GEN_NCAT2
 -	default 0x00060 if ARCH_SUNXI
 -	default 0x00060 if ARCH_SUNXI
  	default 0xfffc0000 if ARCH_ZYNQMP
  	default 0xfffc0000 if ARCH_ZYNQMP
  	default 0x0
  	default 0x0

+ 0 - 33
package/boot/uboot-d1/patches/0024-binman-Prevent-entries-in-a-section-from-overlapping.patch

@@ -1,33 +0,0 @@
-From b7150f7dd885012868c94b29ac4fe6152c065a95 Mon Sep 17 00:00:00 2001
-From: Samuel Holland <[email protected]>
-Date: Sat, 9 Oct 2021 10:43:56 -0500
-Subject: [PATCH 24/90] binman: Prevent entries in a section from overlapping
-
-Currently, if the "offset" property is given for an entry, the section's
-running offset is completely ignored. This causes entries to overlap if
-the provided offset is less than the size of the entries earlier in the
-section. Avoid the overlap by only using the provided offset when it is
-greater than the running offset.
-
-The motivation for this change is the rule used by SPL to find U-Boot on
-sunxi boards: U-Boot starts 32 KiB after the start of SPL, unless SPL is
-larger than 32 KiB, in which case U-Boot immediately follows SPL.
-
-Signed-off-by: Samuel Holland <[email protected]>
----
- tools/binman/entry.py | 4 +++-
- 1 file changed, 3 insertions(+), 1 deletion(-)
-
---- a/tools/binman/entry.py
-+++ b/tools/binman/entry.py
-@@ -483,7 +483,9 @@ class Entry(object):
-             if self.offset_unset:
-                 self.Raise('No offset set with offset-unset: should another '
-                            'entry provide this correct offset?')
--            self.offset = tools.align(offset, self.align)
-+        elif self.offset > offset:
-+            offset = self.offset
-+        self.offset = tools.align(offset, self.align)
-         needed = self.pad_before + self.contents_size + self.pad_after
-         needed = tools.align(needed, self.align_size)
-         size = self.size

+ 4 - 4
package/boot/uboot-d1/patches/0069-sunxi-Move-SYS_LOAD_ADDR-to-the-board-Kconfig.patch → package/boot/uboot-d1/patches/0024-sunxi-Move-SYS_LOAD_ADDR-to-the-board-Kconfig.patch

@@ -1,7 +1,7 @@
-From 03f3ba82e9dfb67f1ae0812f72aea6559aa61bb4 Mon Sep 17 00:00:00 2001
+From ee9d6f9ec6d75a9f38323fa0f957825b6dd27b8b Mon Sep 17 00:00:00 2001
 From: Samuel Holland <[email protected]>
 From: Samuel Holland <[email protected]>
 Date: Fri, 5 Aug 2022 23:23:34 -0500
 Date: Fri, 5 Aug 2022 23:23:34 -0500
-Subject: [PATCH 69/90] sunxi: Move SYS_LOAD_ADDR to the board Kconfig
+Subject: [PATCH 24/68] sunxi: Move SYS_LOAD_ADDR to the board Kconfig
 
 
 This will provide a default value for RISC-V when that is added, and it
 This will provide a default value for RISC-V when that is added, and it
 makes sense to put this option next to the other DRAM layout options.
 makes sense to put this option next to the other DRAM layout options.
@@ -14,7 +14,7 @@ Signed-off-by: Samuel Holland <[email protected]>
 
 
 --- a/Kconfig
 --- a/Kconfig
 +++ b/Kconfig
 +++ b/Kconfig
-@@ -508,9 +508,6 @@ config SYS_LOAD_ADDR
+@@ -536,9 +536,6 @@ config SYS_LOAD_ADDR
  	hex "Address in memory to use by default"
  	hex "Address in memory to use by default"
  	default 0x01000000 if ARCH_SOCFPGA
  	default 0x01000000 if ARCH_SOCFPGA
  	default 0x02000000 if PPC || X86
  	default 0x02000000 if PPC || X86
@@ -26,7 +26,7 @@ Signed-off-by: Samuel Holland <[email protected]>
  	default 0x12000000 if ARCH_MX6 && !(MX6SL || MX6SLL  || MX6SX || MX6UL || MX6ULL)
  	default 0x12000000 if ARCH_MX6 && !(MX6SL || MX6SLL  || MX6SX || MX6UL || MX6ULL)
 --- a/board/sunxi/Kconfig
 --- a/board/sunxi/Kconfig
 +++ b/board/sunxi/Kconfig
 +++ b/board/sunxi/Kconfig
-@@ -129,6 +129,11 @@ config SYS_CONFIG_NAME
+@@ -132,6 +132,11 @@ config SYS_CONFIG_NAME
  	default "sun50i" if MACH_SUN50I_H6
  	default "sun50i" if MACH_SUN50I_H6
  	default "sun50i" if MACH_SUN50I_H616
  	default "sun50i" if MACH_SUN50I_H616
  
  

+ 17 - 17
package/boot/uboot-d1/patches/0070-sunxi-Move-TEXT_BASE-to-the-board-Kconfig.patch → package/boot/uboot-d1/patches/0025-sunxi-Move-TEXT_BASE-to-the-board-Kconfig.patch

@@ -1,20 +1,33 @@
-From 08b45a89c7b25eb7828589360cf4ca2d9910cc59 Mon Sep 17 00:00:00 2001
+From 09c73b7633470574f338a005818dd4942dd0139e Mon Sep 17 00:00:00 2001
 From: Samuel Holland <[email protected]>
 From: Samuel Holland <[email protected]>
 Date: Fri, 5 Aug 2022 21:48:53 -0500
 Date: Fri, 5 Aug 2022 21:48:53 -0500
-Subject: [PATCH 70/90] sunxi: Move TEXT_BASE to the board Kconfig
+Subject: [PATCH 25/68] sunxi: Move TEXT_BASE to the board Kconfig
 
 
 This is how the vast majority of platforms provided TEXT_BASE.
 This is how the vast majority of platforms provided TEXT_BASE.
 sunxi was the exception here.
 sunxi was the exception here.
 
 
 Signed-off-by: Samuel Holland <[email protected]>
 Signed-off-by: Samuel Holland <[email protected]>
 ---
 ---
+ Kconfig             | 4 ----
  board/sunxi/Kconfig | 6 ++++++
  board/sunxi/Kconfig | 6 ++++++
- boot/Kconfig        | 4 ----
  2 files changed, 6 insertions(+), 4 deletions(-)
  2 files changed, 6 insertions(+), 4 deletions(-)
 
 
+--- a/Kconfig
++++ b/Kconfig
+@@ -636,10 +636,6 @@ config TEXT_BASE
+ 	depends on HAVE_TEXT_BASE
+ 	default 0x0 if POSITION_INDEPENDENT
+ 	default 0x80800000 if ARCH_OMAP2PLUS || ARCH_K3
+-	default 0x81700000 if MACH_SUNIV
+-	default 0x2a000000 if MACH_SUN9I
+-	default 0x4a000000 if SUNXI_MINIMUM_DRAM_MB >= 256
+-	default 0x42e00000 if SUNXI_MINIMUM_DRAM_MB >= 64
+ 	hex "Text Base"
+ 	help
+ 	  The address in memory that U-Boot will be copied and executed from
 --- a/board/sunxi/Kconfig
 --- a/board/sunxi/Kconfig
 +++ b/board/sunxi/Kconfig
 +++ b/board/sunxi/Kconfig
-@@ -137,6 +137,12 @@ config SYS_LOAD_ADDR
+@@ -140,6 +140,12 @@ config SYS_LOAD_ADDR
  config SYS_SOC
  config SYS_SOC
  	default "sunxi"
  	default "sunxi"
  
  
@@ -27,16 +40,3 @@ Signed-off-by: Samuel Holland <[email protected]>
  menu "sunxi board options"
  menu "sunxi board options"
  
  
  choice
  choice
---- a/boot/Kconfig
-+++ b/boot/Kconfig
-@@ -633,10 +633,6 @@ config TEXT_BASE
- 	depends on HAVE_TEXT_BASE
- 	default 0x0 if POSITION_INDEPENDENT
- 	default 0x80800000 if ARCH_OMAP2PLUS || ARCH_K3
--	default 0x81700000 if MACH_SUNIV
--	default 0x2a000000 if MACH_SUN9I
--	default 0x4a000000 if SUNXI_MINIMUM_DRAM_MB >= 256
--	default 0x42e00000 if SUNXI_MINIMUM_DRAM_MB >= 64
- 	hex "Text Base"
- 	help
- 	  The address in memory that U-Boot will be running from, initially.

+ 0 - 192
package/boot/uboot-d1/patches/0025-sunxi-binman-Enable-SPL-FIT-loading-for-32-bit-SoCs.patch

@@ -1,192 +0,0 @@
-From b641ca5f4d272b83ef77ebcf5c75678cf139c69a Mon Sep 17 00:00:00 2001
-From: Samuel Holland <[email protected]>
-Date: Sat, 17 Apr 2021 13:33:54 -0500
-Subject: [PATCH 25/90] sunxi: binman: Enable SPL FIT loading for 32-bit SoCs
-
-Now that Crust (SCP firmware) has support for H3, we need a FIT image to
-load it. H3 also needs to load a SoC-specific eGon blob to support CPU 0
-hotplug. Let's first enable FIT support before adding extra firmware.
-
-Update the binman description to work on either 32-bit or 64-bit SoCs:
- - Make BL31 optional, since it is not used on 32-bit SoCs (though BL32
-   may be used in the future).
- - Explicitly set the minimum offset of the FIT to 32 KiB, since SPL on
-   some boards is still only 24 KiB large even with FIT support enabled.
-   CONFIG_SPL_PAD_TO cannot be used because it is not defined for H616.
-
-FIT unlocks more features (signatures, multiple DTBs, etc.), so enable
-it by default. A10 (sun4i) only has 24 KiB of SRAM A1, so it needs
-SPL_FIT_IMAGE_TINY. For simplicity, enable that option everywhere.
-
-Cover-letter:
-sunxi: SPL FIT support for 32-bit sunxi SoCs
-This series makes the necessary changes so 32-bit sunxi SoCs can load
-additional device trees or firmware from SPL along with U-Boot proper.
-
-There was no existing binman entry property that put the FIT at the
-right offset. The minimum offset is 32k, but this matches neither the
-SPL size (which is no more than 24k on some SoCs) nor the FIT alignment
-(which is 512 bytes in practice due to SPL size constraints). So instead
-of adding a new property, I fixed what is arguably a bug in the offset
-property -- though this strategy will not work if someone is
-intentionally creating overlapping entries.
-END
-Series-to: sunxi
-Series-to: sjg
-Signed-off-by: Samuel Holland <[email protected]>
----
- arch/arm/Kconfig               |  1 +
- arch/arm/dts/sunxi-u-boot.dtsi | 46 ++++++++++++++++++++++------------
- common/spl/Kconfig             |  9 +++----
- 3 files changed, 35 insertions(+), 21 deletions(-)
-
---- a/arch/arm/Kconfig
-+++ b/arch/arm/Kconfig
-@@ -1135,6 +1135,7 @@ config ARCH_SUNXI
- 	imply SPL_GPIO
- 	imply SPL_LIBCOMMON_SUPPORT
- 	imply SPL_LIBGENERIC_SUPPORT
-+	imply SPL_LOAD_FIT
- 	imply SPL_MMC if MMC
- 	imply SPL_POWER
- 	imply SPL_SERIAL
---- a/arch/arm/dts/sunxi-u-boot.dtsi
-+++ b/arch/arm/dts/sunxi-u-boot.dtsi
-@@ -1,13 +1,19 @@
- #include <config.h>
- 
--#ifdef CONFIG_MACH_SUN50I_H6
--#define BL31_ADDR 0x104000
--#define  SCP_ADDR 0x114000
--#elif defined(CONFIG_MACH_SUN50I_H616)
--#define BL31_ADDR 0x40000000
-+#ifdef CONFIG_ARM64
-+#define ARCH "arm64"
- #else
--#define BL31_ADDR  0x44000
--#define  SCP_ADDR  0x50000
-+#define ARCH "arm"
-+#endif
-+
-+#if defined(CONFIG_MACH_SUN50I) || defined(CONFIG_MACH_SUN50I_H5)
-+#define BL31_ADDR	0x00044000
-+#define SCP_ADDR	0x00050000
-+#elif defined(CONFIG_MACH_SUN50I_H6)
-+#define BL31_ADDR	0x00104000
-+#define SCP_ADDR	0x00114000
-+#elif defined(CONFIG_MACH_SUN50I_H616)
-+#define BL31_ADDR	0x40000000
- #endif
- 
- / {
-@@ -34,30 +40,33 @@
- 			filename = "spl/sunxi-spl.bin";
- 		};
- 
--#ifdef CONFIG_ARM64
-+#ifdef CONFIG_SPL_LOAD_FIT
- 		fit {
--			description = "Configuration to load ATF before U-Boot";
-+			description = "Configuration to load U-Boot and firmware";
-+			offset = <32768>;
- 			#address-cells = <1>;
- 			fit,fdt-list = "of-list";
- 
- 			images {
- 				uboot {
--					description = "U-Boot (64-bit)";
-+					description = "U-Boot";
- 					type = "standalone";
- 					os = "u-boot";
--					arch = "arm64";
-+					arch = ARCH;
- 					compression = "none";
- 					load = <CONFIG_TEXT_BASE>;
-+					entry = <CONFIG_TEXT_BASE>;
- 
- 					u-boot-nodtb {
- 					};
- 				};
- 
-+#ifdef BL31_ADDR
- 				atf {
- 					description = "ARM Trusted Firmware";
- 					type = "firmware";
- 					os = "arm-trusted-firmware";
--					arch = "arm64";
-+					arch = ARCH;
- 					compression = "none";
- 					load = <BL31_ADDR>;
- 					entry = <BL31_ADDR>;
-@@ -67,6 +76,7 @@
- 						missing-msg = "atf-bl31-sunxi";
- 					};
- 				};
-+#endif
- 
- #ifdef SCP_ADDR
- 				scp {
-@@ -95,19 +105,23 @@
- 
- 				@config-SEQ {
- 					description = "NAME";
-+#ifdef BL31_ADDR
- 					firmware = "atf";
--#ifndef SCP_ADDR
--					loadables = "uboot";
- #else
--					loadables = "scp", "uboot";
-+					firmware = "uboot";
-+#endif
-+					loadables =
-+#ifdef SCP_ADDR
-+						    "scp",
- #endif
-+						    "uboot";
- 					fdt = "fdt-SEQ";
- 				};
- 			};
- 		};
- #else
- 		u-boot-img {
--			offset = <CONFIG_SPL_PAD_TO>;
-+			offset = <32768>;
- 		};
- #endif
- 	};
---- a/common/spl/Kconfig
-+++ b/common/spl/Kconfig
-@@ -76,12 +76,12 @@ config SPL_SIZE_LIMIT_PROVIDE_STACK
- 
- config SPL_MAX_SIZE
- 	hex "Maximum size of the SPL image, excluding BSS"
-+	default 0x37fa0 if MACH_SUN50I_H616
- 	default 0x30000 if ARCH_MX6 && MX6_OCRAM_256KB
-+	default 0x25fa0 if MACH_SUN50I_H6
- 	default 0x1b000 if AM33XX && !TI_SECURE_DEVICE
- 	default 0x10000 if ARCH_MX6 && !MX6_OCRAM_256KB
- 	default 0x7fa0 if SUNXI_SRAM_ADDRESS = 0x10000
--	default 0x7fa0 if SUNXI_SRAM_ADDRESS = 0x20000 && !MACH_SUN50I_H616
--	default 0xbfa0 if MACH_SUN50I_H616
- 	default 0x7000 if RCAR_GEN3
- 	default 0x5fa0 if SUNXI_SRAM_ADDRESS = 0x0
- 	default 0x10000 if ASPEED_AST2600
-@@ -97,7 +97,7 @@ config SPL_PAD_TO
- 	default 0x31000 if ARCH_MX6 && MX6_OCRAM_256KB
- 	default 0x11000 if ARCH_MX7 || (ARCH_MX6 && !MX6_OCRAM_256KB)
- 	default 0x10000 if ARCH_KEYSTONE
--	default 0x8000 if ARCH_SUNXI && !MACH_SUN50I_H616
-+	default 0x0 if ARCH_SUNXI
- 	default 0x0 if ARCH_MTMIPS
- 	default TPL_MAX_SIZE if TPL_MAX_SIZE > SPL_MAX_SIZE
- 	default SPL_MAX_SIZE
-@@ -575,8 +575,7 @@ config SPL_MD5
- config SPL_FIT_IMAGE_TINY
- 	bool "Remove functionality from SPL FIT loading to reduce size"
- 	depends on SPL_FIT
--	default y if MACH_SUN50I || MACH_SUN50I_H5 || SUN50I_GEN_H6
--	default y if ARCH_IMX8M || ARCH_IMX9
-+	default y if ARCH_IMX8M || ARCH_IMX9 || ARCH_SUNXI
- 	help
- 	  Enable this to reduce the size of the FIT image loading code
- 	  in SPL, if space for the SPL binary is very tight.

+ 17 - 20
package/boot/uboot-d1/patches/0071-sunxi-Move-most-board-options-to-the-board-Kconfig.patch → package/boot/uboot-d1/patches/0026-sunxi-Move-most-board-options-to-the-board-Kconfig.patch

@@ -1,7 +1,7 @@
-From 6a1b660a83b262237b6bebed26e44db923a86a6b Mon Sep 17 00:00:00 2001
-From: Zoltan HERPAI <[email protected]>
-Date: Tue, 6 Jun 2023 18:09:19 +0000
-Subject: [PATCH 71/90] sunxi: Move most board options to the board Kconfig
+From 7e7430bd742f4474152c37d96d398936bf6d5a49 Mon Sep 17 00:00:00 2001
+From: Samuel Holland <[email protected]>
+Date: Fri, 5 Aug 2022 23:18:11 -0500
+Subject: [PATCH 26/68] sunxi: Move most board options to the board Kconfig
 
 
 This excludes options that are inherently ARM-specific or are specific
 This excludes options that are inherently ARM-specific or are specific
 to legacy non-DM drivers.
 to legacy non-DM drivers.
@@ -9,15 +9,14 @@ to legacy non-DM drivers.
 Some help text is cleaned up along the way.
 Some help text is cleaned up along the way.
 
 
 Signed-off-by: Samuel Holland <[email protected]>
 Signed-off-by: Samuel Holland <[email protected]>
-Signed-off-by: Zoltan HERPAI <[email protected]>
 ---
 ---
- arch/arm/mach-sunxi/Kconfig | 71 ------------------------------------
+ arch/arm/mach-sunxi/Kconfig | 70 ------------------------------------
  board/sunxi/Kconfig         | 72 +++++++++++++++++++++++++++++++++++++
  board/sunxi/Kconfig         | 72 +++++++++++++++++++++++++++++++++++++
- 2 files changed, 72 insertions(+), 71 deletions(-)
+ 2 files changed, 72 insertions(+), 70 deletions(-)
 
 
 --- a/arch/arm/mach-sunxi/Kconfig
 --- a/arch/arm/mach-sunxi/Kconfig
 +++ b/arch/arm/mach-sunxi/Kconfig
 +++ b/arch/arm/mach-sunxi/Kconfig
-@@ -548,16 +548,6 @@ config DRAM_ODT_CORRECTION
+@@ -647,36 +647,12 @@ config DRAM_ODT_CORRECTION
  	then the correction is negative. Usually the value for this is 0.
  	then the correction is negative. Usually the value for this is 0.
  endif
  endif
  
  
@@ -34,9 +33,8 @@ Signed-off-by: Zoltan HERPAI <[email protected]>
  config OLD_SUNXI_KERNEL_COMPAT
  config OLD_SUNXI_KERNEL_COMPAT
  	bool "Enable workarounds for booting old kernels"
  	bool "Enable workarounds for booting old kernels"
  	---help---
  	---help---
-@@ -571,20 +561,6 @@ config MACPWR
- 	  Set the pin used to power the MAC. This takes a string in the format
- 	  understood by sunxi_name_to_gpio, e.g. PH1 for pin 1 of port H.
+ 	Set this to enable various workarounds for old kernels, this results in
+ 	sub-optimal settings for newer kernels, only enable if needed.
  
  
 -config MMC1_PINS_PH
 -config MMC1_PINS_PH
 -	bool "Pins for mmc1 are on Port H"
 -	bool "Pins for mmc1 are on Port H"
@@ -52,17 +50,16 @@ Signed-off-by: Zoltan HERPAI <[email protected]>
 -	slot or emmc on mmc1 - mmc3. Setting this to 1, 2 or 3 will enable
 -	slot or emmc on mmc1 - mmc3. Setting this to 1, 2 or 3 will enable
 -	support for this.
 -	support for this.
 -
 -
- config I2C0_ENABLE
- 	bool "Enable I2C/TWI controller 0"
- 	default y if MACH_SUN4I || MACH_SUN5I || MACH_SUN7I || MACH_SUN8I_R40
-@@ -612,16 +588,6 @@ config R_I2C_ENABLE
- 	Set this to y to enable the I2C controller which is part of the PRCM.
- endif
+ config USB0_VBUS_PIN
+ 	string "Vbus enable pin for usb0 (otg)"
+ 	default ""
+@@ -753,15 +729,6 @@ config AXP_GPIO
+ 	---help---
+ 	Say Y here to enable support for the gpio pins of the axp PMIC ICs.
  
  
 -config AXP_DISABLE_BOOT_ON_POWERON
 -config AXP_DISABLE_BOOT_ON_POWERON
 -	bool "Disable device boot on power plug-in"
 -	bool "Disable device boot on power plug-in"
 -	depends on AXP209_POWER || AXP221_POWER || AXP809_POWER || AXP818_POWER
 -	depends on AXP209_POWER || AXP221_POWER || AXP809_POWER || AXP818_POWER
--	default n
 -	---help---
 -	---help---
 -	  Say Y here to prevent the device from booting up because of a plug-in
 -	  Say Y here to prevent the device from booting up because of a plug-in
 -	  event. When set, the device will boot into the SPL briefly to
 -	  event. When set, the device will boot into the SPL briefly to
@@ -72,7 +69,7 @@ Signed-off-by: Zoltan HERPAI <[email protected]>
  config VIDEO_SUNXI
  config VIDEO_SUNXI
  	bool "Enable graphical uboot console on HDMI, LCD or VGA"
  	bool "Enable graphical uboot console on HDMI, LCD or VGA"
  	depends on !MACH_SUN8I_A83T
  	depends on !MACH_SUN8I_A83T
-@@ -850,41 +816,4 @@ config SPL_SPI_SUNXI
+@@ -983,41 +950,4 @@ config SPL_SPI_SUNXI
  	  sunxi SPI Flash. It uses the same method as the boot ROM, so does
  	  sunxi SPI Flash. It uses the same method as the boot ROM, so does
  	  not need any extra configuration.
  	  not need any extra configuration.
  
  
@@ -116,7 +113,7 @@ Signed-off-by: Zoltan HERPAI <[email protected]>
 -	select CMD_EXTENSION
 -	select CMD_EXTENSION
 --- a/board/sunxi/Kconfig
 --- a/board/sunxi/Kconfig
 +++ b/board/sunxi/Kconfig
 +++ b/board/sunxi/Kconfig
-@@ -171,6 +171,78 @@ config SPL_IMAGE_TYPE
+@@ -174,6 +174,78 @@ config SPL_IMAGE_TYPE
  	default "sunxi_egon" if SPL_IMAGE_TYPE_SUNXI_EGON
  	default "sunxi_egon" if SPL_IMAGE_TYPE_SUNXI_EGON
  	default "sunxi_toc0" if SPL_IMAGE_TYPE_SUNXI_TOC0
  	default "sunxi_toc0" if SPL_IMAGE_TYPE_SUNXI_TOC0
  
  

+ 0 - 51
package/boot/uboot-d1/patches/0026-sunxi-psci-Avoid-hanging-when-CPU-0-is-hot-unplugged.patch

@@ -1,51 +0,0 @@
-From ca1e6f4491981432c3e88441131c8e25067da95e Mon Sep 17 00:00:00 2001
-From: Samuel Holland <[email protected]>
-Date: Sat, 9 Oct 2021 22:00:22 -0500
-Subject: [PATCH 26/90] sunxi: psci: Avoid hanging when CPU 0 is hot-unplugged
-
-Do not try to send an SGI from CPU 0 to itself. Since FIQs are masked
-when entering monitor mode, this will hang. Plus, CPU 0 cannot fully
-power itself off anyway. Instead, have it turn FIQs back on and continue
-servicing SGIs from other cores.
-
-Signed-off-by: Samuel Holland <[email protected]>
----
- arch/arm/cpu/armv7/sunxi/psci.c | 20 +++++++++++++++++---
- 1 file changed, 17 insertions(+), 3 deletions(-)
-
---- a/arch/arm/cpu/armv7/sunxi/psci.c
-+++ b/arch/arm/cpu/armv7/sunxi/psci.c
-@@ -38,6 +38,15 @@
- #define SUN8I_R40_PWR_CLAMP(cpu)		(0x120 + (cpu) * 0x4)
- #define SUN8I_R40_SRAMC_SOFT_ENTRY_REG0		(0xbc)
- 
-+static inline u32 __secure cp15_read_mpidr(void)
-+{
-+	u32 val;
-+
-+	asm volatile ("mrc p15, 0, %0, c0, c0, 5" : "=r" (val));
-+
-+	return val;
-+}
-+
- static void __secure cp15_write_cntp_tval(u32 tval)
- {
- 	asm volatile ("mcr p15, 0, %0, c14, c2, 0" : : "r" (tval));
-@@ -281,9 +290,14 @@ s32 __secure psci_cpu_off(void)
- {
- 	psci_cpu_off_common();
- 
--	/* Ask CPU0 via SGI15 to pull the rug... */
--	writel(BIT(16) | 15, GICD_BASE + GICD_SGIR);
--	dsb();
-+	if (cp15_read_mpidr() & 3) {
-+		/* Ask CPU0 via SGI15 to pull the rug... */
-+		writel(BIT(16) | 15, GICD_BASE + GICD_SGIR);
-+		dsb();
-+	} else {
-+		/* Unmask FIQs to service SGI15. */
-+		asm volatile ("cpsie f");
-+	}
- 
- 	/* Wait to be turned off */
- 	while (1)

+ 0 - 295
package/boot/uboot-d1/patches/0027-clk-sunxi-Add-NAND-clocks-and-resets.patch

@@ -1,295 +0,0 @@
-From 2f48dfc23d612f6f1798ff761854fd3141d0671f Mon Sep 17 00:00:00 2001
-From: Samuel Holland <[email protected]>
-Date: Sun, 15 May 2022 21:29:22 -0500
-Subject: [PATCH 27/90] clk: sunxi: Add NAND clocks and resets
-
-Currently NAND clock setup is done in board code, both in SPL and in
-U-Boot proper. Add the NAND clocks/resets here so they can be used by
-the "full" NAND driver once it is converted to the driver model.
-
-The bit locations are copied from the Linux CCU drivers.
-
-Signed-off-by: Samuel Holland <[email protected]>
----
- drivers/clk/sunxi/clk_a10.c  | 2 ++
- drivers/clk/sunxi/clk_a10s.c | 2 ++
- drivers/clk/sunxi/clk_a23.c  | 3 +++
- drivers/clk/sunxi/clk_a31.c  | 6 ++++++
- drivers/clk/sunxi/clk_a64.c  | 3 +++
- drivers/clk/sunxi/clk_a80.c  | 8 ++++++++
- drivers/clk/sunxi/clk_a83t.c | 3 +++
- drivers/clk/sunxi/clk_h3.c   | 3 +++
- drivers/clk/sunxi/clk_h6.c   | 6 ++++++
- drivers/clk/sunxi/clk_h616.c | 6 ++++++
- drivers/clk/sunxi/clk_r40.c  | 3 +++
- 11 files changed, 45 insertions(+)
-
---- a/drivers/clk/sunxi/clk_a10.c
-+++ b/drivers/clk/sunxi/clk_a10.c
-@@ -23,6 +23,7 @@ static struct ccu_clk_gate a10_gates[] =
- 	[CLK_AHB_MMC1]		= GATE(0x060, BIT(9)),
- 	[CLK_AHB_MMC2]		= GATE(0x060, BIT(10)),
- 	[CLK_AHB_MMC3]		= GATE(0x060, BIT(11)),
-+	[CLK_AHB_NAND]		= GATE(0x060, BIT(13)),
- 	[CLK_AHB_EMAC]		= GATE(0x060, BIT(17)),
- 	[CLK_AHB_SPI0]		= GATE(0x060, BIT(20)),
- 	[CLK_AHB_SPI1]		= GATE(0x060, BIT(21)),
-@@ -47,6 +48,7 @@ static struct ccu_clk_gate a10_gates[] =
- 	[CLK_APB1_UART6]	= GATE(0x06c, BIT(22)),
- 	[CLK_APB1_UART7]	= GATE(0x06c, BIT(23)),
- 
-+	[CLK_NAND]		= GATE(0x080, BIT(31)),
- 	[CLK_SPI0]		= GATE(0x0a0, BIT(31)),
- 	[CLK_SPI1]		= GATE(0x0a4, BIT(31)),
- 	[CLK_SPI2]		= GATE(0x0a8, BIT(31)),
---- a/drivers/clk/sunxi/clk_a10s.c
-+++ b/drivers/clk/sunxi/clk_a10s.c
-@@ -20,6 +20,7 @@ static struct ccu_clk_gate a10s_gates[]
- 	[CLK_AHB_MMC0]		= GATE(0x060, BIT(8)),
- 	[CLK_AHB_MMC1]		= GATE(0x060, BIT(9)),
- 	[CLK_AHB_MMC2]		= GATE(0x060, BIT(10)),
-+	[CLK_AHB_NAND]		= GATE(0x060, BIT(13)),
- 	[CLK_AHB_EMAC]		= GATE(0x060, BIT(17)),
- 	[CLK_AHB_SPI0]		= GATE(0x060, BIT(20)),
- 	[CLK_AHB_SPI1]		= GATE(0x060, BIT(21)),
-@@ -35,6 +36,7 @@ static struct ccu_clk_gate a10s_gates[]
- 	[CLK_APB1_UART2]	= GATE(0x06c, BIT(18)),
- 	[CLK_APB1_UART3]	= GATE(0x06c, BIT(19)),
- 
-+	[CLK_NAND]		= GATE(0x080, BIT(31)),
- 	[CLK_SPI0]		= GATE(0x0a0, BIT(31)),
- 	[CLK_SPI1]		= GATE(0x0a4, BIT(31)),
- 	[CLK_SPI2]		= GATE(0x0a8, BIT(31)),
---- a/drivers/clk/sunxi/clk_a23.c
-+++ b/drivers/clk/sunxi/clk_a23.c
-@@ -17,6 +17,7 @@ static struct ccu_clk_gate a23_gates[] =
- 	[CLK_BUS_MMC0]		= GATE(0x060, BIT(8)),
- 	[CLK_BUS_MMC1]		= GATE(0x060, BIT(9)),
- 	[CLK_BUS_MMC2]		= GATE(0x060, BIT(10)),
-+	[CLK_BUS_NAND]		= GATE(0x060, BIT(13)),
- 	[CLK_BUS_SPI0]		= GATE(0x060, BIT(20)),
- 	[CLK_BUS_SPI1]		= GATE(0x060, BIT(21)),
- 	[CLK_BUS_OTG]		= GATE(0x060, BIT(24)),
-@@ -34,6 +35,7 @@ static struct ccu_clk_gate a23_gates[] =
- 	[CLK_BUS_UART3]		= GATE(0x06c, BIT(19)),
- 	[CLK_BUS_UART4]		= GATE(0x06c, BIT(20)),
- 
-+	[CLK_NAND]		= GATE(0x080, BIT(31)),
- 	[CLK_SPI0]		= GATE(0x0a0, BIT(31)),
- 	[CLK_SPI1]		= GATE(0x0a4, BIT(31)),
- 
-@@ -52,6 +54,7 @@ static struct ccu_reset a23_resets[] = {
- 	[RST_BUS_MMC0]		= RESET(0x2c0, BIT(8)),
- 	[RST_BUS_MMC1]		= RESET(0x2c0, BIT(9)),
- 	[RST_BUS_MMC2]		= RESET(0x2c0, BIT(10)),
-+	[RST_BUS_NAND]		= RESET(0x2c0, BIT(13)),
- 	[RST_BUS_SPI0]		= RESET(0x2c0, BIT(20)),
- 	[RST_BUS_SPI1]		= RESET(0x2c0, BIT(21)),
- 	[RST_BUS_OTG]		= RESET(0x2c0, BIT(24)),
---- a/drivers/clk/sunxi/clk_a31.c
-+++ b/drivers/clk/sunxi/clk_a31.c
-@@ -18,6 +18,8 @@ static struct ccu_clk_gate a31_gates[] =
- 	[CLK_AHB1_MMC1]		= GATE(0x060, BIT(9)),
- 	[CLK_AHB1_MMC2]		= GATE(0x060, BIT(10)),
- 	[CLK_AHB1_MMC3]		= GATE(0x060, BIT(11)),
-+	[CLK_AHB1_NAND1]	= GATE(0x060, BIT(12)),
-+	[CLK_AHB1_NAND0]	= GATE(0x060, BIT(13)),
- 	[CLK_AHB1_EMAC]		= GATE(0x060, BIT(17)),
- 	[CLK_AHB1_SPI0]		= GATE(0x060, BIT(20)),
- 	[CLK_AHB1_SPI1]		= GATE(0x060, BIT(21)),
-@@ -43,6 +45,8 @@ static struct ccu_clk_gate a31_gates[] =
- 	[CLK_APB2_UART4]	= GATE(0x06c, BIT(20)),
- 	[CLK_APB2_UART5]	= GATE(0x06c, BIT(21)),
- 
-+	[CLK_NAND0]		= GATE(0x080, BIT(31)),
-+	[CLK_NAND1]		= GATE(0x084, BIT(31)),
- 	[CLK_SPI0]		= GATE(0x0a0, BIT(31)),
- 	[CLK_SPI1]		= GATE(0x0a4, BIT(31)),
- 	[CLK_SPI2]		= GATE(0x0a8, BIT(31)),
-@@ -65,6 +69,8 @@ static struct ccu_reset a31_resets[] = {
- 	[RST_AHB1_MMC1]		= RESET(0x2c0, BIT(9)),
- 	[RST_AHB1_MMC2]		= RESET(0x2c0, BIT(10)),
- 	[RST_AHB1_MMC3]		= RESET(0x2c0, BIT(11)),
-+	[RST_AHB1_NAND1]	= RESET(0x2c0, BIT(12)),
-+	[RST_AHB1_NAND0]	= RESET(0x2c0, BIT(13)),
- 	[RST_AHB1_EMAC]		= RESET(0x2c0, BIT(17)),
- 	[RST_AHB1_SPI0]		= RESET(0x2c0, BIT(20)),
- 	[RST_AHB1_SPI1]		= RESET(0x2c0, BIT(21)),
---- a/drivers/clk/sunxi/clk_a64.c
-+++ b/drivers/clk/sunxi/clk_a64.c
-@@ -19,6 +19,7 @@ static const struct ccu_clk_gate a64_gat
- 	[CLK_BUS_MMC0]		= GATE(0x060, BIT(8)),
- 	[CLK_BUS_MMC1]		= GATE(0x060, BIT(9)),
- 	[CLK_BUS_MMC2]		= GATE(0x060, BIT(10)),
-+	[CLK_BUS_NAND]		= GATE(0x060, BIT(13)),
- 	[CLK_BUS_EMAC]		= GATE(0x060, BIT(17)),
- 	[CLK_BUS_SPI0]		= GATE(0x060, BIT(20)),
- 	[CLK_BUS_SPI1]		= GATE(0x060, BIT(21)),
-@@ -39,6 +40,7 @@ static const struct ccu_clk_gate a64_gat
- 	[CLK_BUS_UART3]		= GATE(0x06c, BIT(19)),
- 	[CLK_BUS_UART4]		= GATE(0x06c, BIT(20)),
- 
-+	[CLK_NAND]		= GATE(0x080, BIT(31)),
- 	[CLK_SPI0]		= GATE(0x0a0, BIT(31)),
- 	[CLK_SPI1]		= GATE(0x0a4, BIT(31)),
- 
-@@ -58,6 +60,7 @@ static const struct ccu_reset a64_resets
- 	[RST_BUS_MMC0]		= RESET(0x2c0, BIT(8)),
- 	[RST_BUS_MMC1]		= RESET(0x2c0, BIT(9)),
- 	[RST_BUS_MMC2]		= RESET(0x2c0, BIT(10)),
-+	[RST_BUS_NAND]		= RESET(0x2c0, BIT(13)),
- 	[RST_BUS_EMAC]		= RESET(0x2c0, BIT(17)),
- 	[RST_BUS_SPI0]		= RESET(0x2c0, BIT(20)),
- 	[RST_BUS_SPI1]		= RESET(0x2c0, BIT(21)),
---- a/drivers/clk/sunxi/clk_a80.c
-+++ b/drivers/clk/sunxi/clk_a80.c
-@@ -14,12 +14,18 @@
- #include <linux/bitops.h>
- 
- static const struct ccu_clk_gate a80_gates[] = {
-+	[CLK_NAND0_0]		= GATE(0x400, BIT(31)),
-+	[CLK_NAND0_1]		= GATE(0x404, BIT(31)),
-+	[CLK_NAND1_0]		= GATE(0x408, BIT(31)),
-+	[CLK_NAND1_1]		= GATE(0x40c, BIT(31)),
- 	[CLK_SPI0]		= GATE(0x430, BIT(31)),
- 	[CLK_SPI1]		= GATE(0x434, BIT(31)),
- 	[CLK_SPI2]		= GATE(0x438, BIT(31)),
- 	[CLK_SPI3]		= GATE(0x43c, BIT(31)),
- 
- 	[CLK_BUS_MMC]		= GATE(0x580, BIT(8)),
-+	[CLK_BUS_NAND0]		= GATE(0x580, BIT(12)),
-+	[CLK_BUS_NAND1]		= GATE(0x580, BIT(13)),
- 	[CLK_BUS_SPI0]		= GATE(0x580, BIT(20)),
- 	[CLK_BUS_SPI1]		= GATE(0x580, BIT(21)),
- 	[CLK_BUS_SPI2]		= GATE(0x580, BIT(22)),
-@@ -42,6 +48,8 @@ static const struct ccu_clk_gate a80_gat
- 
- static const struct ccu_reset a80_resets[] = {
- 	[RST_BUS_MMC]		= RESET(0x5a0, BIT(8)),
-+	[RST_BUS_NAND0]		= RESET(0x5a0, BIT(12)),
-+	[RST_BUS_NAND1]		= RESET(0x5a0, BIT(13)),
- 	[RST_BUS_SPI0]		= RESET(0x5a0, BIT(20)),
- 	[RST_BUS_SPI1]		= RESET(0x5a0, BIT(21)),
- 	[RST_BUS_SPI2]		= RESET(0x5a0, BIT(22)),
---- a/drivers/clk/sunxi/clk_a83t.c
-+++ b/drivers/clk/sunxi/clk_a83t.c
-@@ -17,6 +17,7 @@ static struct ccu_clk_gate a83t_gates[]
- 	[CLK_BUS_MMC0]		= GATE(0x060, BIT(8)),
- 	[CLK_BUS_MMC1]		= GATE(0x060, BIT(9)),
- 	[CLK_BUS_MMC2]		= GATE(0x060, BIT(10)),
-+	[CLK_BUS_NAND]		= GATE(0x060, BIT(13)),
- 	[CLK_BUS_EMAC]		= GATE(0x060, BIT(17)),
- 	[CLK_BUS_SPI0]		= GATE(0x060, BIT(20)),
- 	[CLK_BUS_SPI1]		= GATE(0x060, BIT(21)),
-@@ -36,6 +37,7 @@ static struct ccu_clk_gate a83t_gates[]
- 	[CLK_BUS_UART3]		= GATE(0x06c, BIT(19)),
- 	[CLK_BUS_UART4]		= GATE(0x06c, BIT(20)),
- 
-+	[CLK_NAND]		= GATE(0x080, BIT(31)),
- 	[CLK_SPI0]		= GATE(0x0a0, BIT(31)),
- 	[CLK_SPI1]		= GATE(0x0a4, BIT(31)),
- 
-@@ -54,6 +56,7 @@ static struct ccu_reset a83t_resets[] =
- 	[RST_BUS_MMC0]		= RESET(0x2c0, BIT(8)),
- 	[RST_BUS_MMC1]		= RESET(0x2c0, BIT(9)),
- 	[RST_BUS_MMC2]		= RESET(0x2c0, BIT(10)),
-+	[RST_BUS_NAND]		= RESET(0x2c0, BIT(13)),
- 	[RST_BUS_EMAC]		= RESET(0x2c0, BIT(17)),
- 	[RST_BUS_SPI0]		= RESET(0x2c0, BIT(20)),
- 	[RST_BUS_SPI1]		= RESET(0x2c0, BIT(21)),
---- a/drivers/clk/sunxi/clk_h3.c
-+++ b/drivers/clk/sunxi/clk_h3.c
-@@ -19,6 +19,7 @@ static struct ccu_clk_gate h3_gates[] =
- 	[CLK_BUS_MMC0]		= GATE(0x060, BIT(8)),
- 	[CLK_BUS_MMC1]		= GATE(0x060, BIT(9)),
- 	[CLK_BUS_MMC2]		= GATE(0x060, BIT(10)),
-+	[CLK_BUS_NAND]		= GATE(0x060, BIT(13)),
- 	[CLK_BUS_EMAC]		= GATE(0x060, BIT(17)),
- 	[CLK_BUS_SPI0]		= GATE(0x060, BIT(20)),
- 	[CLK_BUS_SPI1]		= GATE(0x060, BIT(21)),
-@@ -44,6 +45,7 @@ static struct ccu_clk_gate h3_gates[] =
- 
- 	[CLK_BUS_EPHY]		= GATE(0x070, BIT(0)),
- 
-+	[CLK_NAND]		= GATE(0x080, BIT(31)),
- 	[CLK_SPI0]		= GATE(0x0a0, BIT(31)),
- 	[CLK_SPI1]		= GATE(0x0a4, BIT(31)),
- 
-@@ -66,6 +68,7 @@ static struct ccu_reset h3_resets[] = {
- 	[RST_BUS_MMC0]		= RESET(0x2c0, BIT(8)),
- 	[RST_BUS_MMC1]		= RESET(0x2c0, BIT(9)),
- 	[RST_BUS_MMC2]		= RESET(0x2c0, BIT(10)),
-+	[RST_BUS_NAND]		= RESET(0x2c0, BIT(13)),
- 	[RST_BUS_EMAC]		= RESET(0x2c0, BIT(17)),
- 	[RST_BUS_SPI0]		= RESET(0x2c0, BIT(20)),
- 	[RST_BUS_SPI1]		= RESET(0x2c0, BIT(21)),
---- a/drivers/clk/sunxi/clk_h6.c
-+++ b/drivers/clk/sunxi/clk_h6.c
-@@ -18,6 +18,10 @@ static struct ccu_clk_gate h6_gates[] =
- 
- 	[CLK_APB1]		= GATE_DUMMY,
- 
-+	[CLK_NAND0]		= GATE(0x810, BIT(31)),
-+	[CLK_NAND1]		= GATE(0x814, BIT(31)),
-+	[CLK_BUS_NAND]		= GATE(0x82c, BIT(0)),
-+
- 	[CLK_BUS_MMC0]		= GATE(0x84c, BIT(0)),
- 	[CLK_BUS_MMC1]		= GATE(0x84c, BIT(1)),
- 	[CLK_BUS_MMC2]		= GATE(0x84c, BIT(2)),
-@@ -58,6 +62,8 @@ static struct ccu_clk_gate h6_gates[] =
- };
- 
- static struct ccu_reset h6_resets[] = {
-+	[RST_BUS_NAND]		= RESET(0x82c, BIT(16)),
-+
- 	[RST_BUS_MMC0]		= RESET(0x84c, BIT(16)),
- 	[RST_BUS_MMC1]		= RESET(0x84c, BIT(17)),
- 	[RST_BUS_MMC2]		= RESET(0x84c, BIT(18)),
---- a/drivers/clk/sunxi/clk_h616.c
-+++ b/drivers/clk/sunxi/clk_h616.c
-@@ -17,6 +17,10 @@ static struct ccu_clk_gate h616_gates[]
- 
- 	[CLK_APB1]		= GATE_DUMMY,
- 
-+	[CLK_NAND0]		= GATE(0x810, BIT(31)),
-+	[CLK_NAND1]		= GATE(0x814, BIT(31)),
-+	[CLK_BUS_NAND]		= GATE(0x82c, BIT(0)),
-+
- 	[CLK_BUS_MMC0]		= GATE(0x84c, BIT(0)),
- 	[CLK_BUS_MMC1]		= GATE(0x84c, BIT(1)),
- 	[CLK_BUS_MMC2]		= GATE(0x84c, BIT(2)),
-@@ -67,6 +71,8 @@ static struct ccu_clk_gate h616_gates[]
- };
- 
- static struct ccu_reset h616_resets[] = {
-+	[RST_BUS_NAND]		= RESET(0x82c, BIT(16)),
-+
- 	[RST_BUS_MMC0]		= RESET(0x84c, BIT(16)),
- 	[RST_BUS_MMC1]		= RESET(0x84c, BIT(17)),
- 	[RST_BUS_MMC2]		= RESET(0x84c, BIT(18)),
---- a/drivers/clk/sunxi/clk_r40.c
-+++ b/drivers/clk/sunxi/clk_r40.c
-@@ -18,6 +18,7 @@ static struct ccu_clk_gate r40_gates[] =
- 	[CLK_BUS_MMC1]		= GATE(0x060, BIT(9)),
- 	[CLK_BUS_MMC2]		= GATE(0x060, BIT(10)),
- 	[CLK_BUS_MMC3]		= GATE(0x060, BIT(11)),
-+	[CLK_BUS_NAND]		= GATE(0x060, BIT(13)),
- 	[CLK_BUS_SPI0]		= GATE(0x060, BIT(20)),
- 	[CLK_BUS_SPI1]		= GATE(0x060, BIT(21)),
- 	[CLK_BUS_SPI2]		= GATE(0x060, BIT(22)),
-@@ -48,6 +49,7 @@ static struct ccu_clk_gate r40_gates[] =
- 	[CLK_BUS_UART6]		= GATE(0x06c, BIT(22)),
- 	[CLK_BUS_UART7]		= GATE(0x06c, BIT(23)),
- 
-+	[CLK_NAND]		= GATE(0x080, BIT(31)),
- 	[CLK_SPI0]		= GATE(0x0a0, BIT(31)),
- 	[CLK_SPI1]		= GATE(0x0a4, BIT(31)),
- 	[CLK_SPI2]		= GATE(0x0a8, BIT(31)),
-@@ -70,6 +72,7 @@ static struct ccu_reset r40_resets[] = {
- 	[RST_BUS_MMC1]		= RESET(0x2c0, BIT(9)),
- 	[RST_BUS_MMC2]		= RESET(0x2c0, BIT(10)),
- 	[RST_BUS_MMC3]		= RESET(0x2c0, BIT(11)),
-+	[RST_BUS_NAND]		= RESET(0x2c0, BIT(13)),
- 	[RST_BUS_SPI0]		= RESET(0x2c0, BIT(20)),
- 	[RST_BUS_SPI1]		= RESET(0x2c0, BIT(21)),
- 	[RST_BUS_SPI2]		= RESET(0x2c0, BIT(22)),

+ 8 - 8
package/boot/uboot-d1/patches/0072-env-sunxi-Replace-ARCH_SUNXI-with-BOARD_SUNXI.patch → package/boot/uboot-d1/patches/0027-env-sunxi-Replace-ARCH_SUNXI-with-BOARD_SUNXI.patch

@@ -1,7 +1,7 @@
-From 27834df51087a005b0330f094492b984cc225f6a Mon Sep 17 00:00:00 2001
+From f82100d7f3b58014b2642be8f9366f7b11b06a73 Mon Sep 17 00:00:00 2001
 From: Samuel Holland <[email protected]>
 From: Samuel Holland <[email protected]>
 Date: Fri, 5 Aug 2022 23:28:54 -0500
 Date: Fri, 5 Aug 2022 23:28:54 -0500
-Subject: [PATCH 72/90] env: sunxi: Replace ARCH_SUNXI with BOARD_SUNXI
+Subject: [PATCH 27/68] env: sunxi: Replace ARCH_SUNXI with BOARD_SUNXI
 
 
 This ensures the same environment layout will be used across all sunxi
 This ensures the same environment layout will be used across all sunxi
 boards, regardless of CPU architecture.
 boards, regardless of CPU architecture.
@@ -13,7 +13,7 @@ Signed-off-by: Samuel Holland <[email protected]>
 
 
 --- a/env/Kconfig
 --- a/env/Kconfig
 +++ b/env/Kconfig
 +++ b/env/Kconfig
-@@ -92,7 +92,7 @@ config ENV_IS_IN_FAT
+@@ -97,7 +97,7 @@ config ENV_IS_IN_FAT
  	bool "Environment is in a FAT filesystem"
  	bool "Environment is in a FAT filesystem"
  	depends on !CHAIN_OF_TRUST
  	depends on !CHAIN_OF_TRUST
  	default y if ARCH_BCM283X
  	default y if ARCH_BCM283X
@@ -22,7 +22,7 @@ Signed-off-by: Samuel Holland <[email protected]>
  	default y if MMC_OMAP_HS && TI_COMMON_CMD_OPTIONS
  	default y if MMC_OMAP_HS && TI_COMMON_CMD_OPTIONS
  	select FS_FAT
  	select FS_FAT
  	select FAT_WRITE
  	select FAT_WRITE
-@@ -338,7 +338,7 @@ config ENV_IS_IN_SPI_FLASH
+@@ -350,7 +350,7 @@ config ENV_IS_IN_SPI_FLASH
  	default y if NORTHBRIDGE_INTEL_IVYBRIDGE
  	default y if NORTHBRIDGE_INTEL_IVYBRIDGE
  	default y if INTEL_QUARK
  	default y if INTEL_QUARK
  	default y if INTEL_QUEENSBAY
  	default y if INTEL_QUEENSBAY
@@ -31,7 +31,7 @@ Signed-off-by: Samuel Holland <[email protected]>
  	help
  	help
  	  Define this if you have a SPI Flash memory device which you
  	  Define this if you have a SPI Flash memory device which you
  	  want to use for the environment.
  	  want to use for the environment.
-@@ -461,7 +461,7 @@ config ENV_FAT_DEVICE_AND_PART
+@@ -473,7 +473,7 @@ config ENV_FAT_DEVICE_AND_PART
  	depends on ENV_IS_IN_FAT
  	depends on ENV_IS_IN_FAT
  	default "0:1" if TI_COMMON_CMD_OPTIONS
  	default "0:1" if TI_COMMON_CMD_OPTIONS
  	default "0:auto" if ARCH_ZYNQ || ARCH_ZYNQMP || ARCH_VERSAL
  	default "0:auto" if ARCH_ZYNQ || ARCH_ZYNQMP || ARCH_VERSAL
@@ -40,7 +40,7 @@ Signed-off-by: Samuel Holland <[email protected]>
  	default "0" if ARCH_AT91
  	default "0" if ARCH_AT91
  	help
  	help
  	  Define this to a string to specify the partition of the device. It can
  	  Define this to a string to specify the partition of the device. It can
-@@ -555,7 +555,7 @@ config ENV_OFFSET
+@@ -567,7 +567,7 @@ config ENV_OFFSET
  		    ENV_IS_IN_SPI_FLASH
  		    ENV_IS_IN_SPI_FLASH
  	default 0x3f8000 if ARCH_ROCKCHIP && ENV_IS_IN_MMC
  	default 0x3f8000 if ARCH_ROCKCHIP && ENV_IS_IN_MMC
  	default 0x140000 if ARCH_ROCKCHIP && ENV_IS_IN_SPI_FLASH
  	default 0x140000 if ARCH_ROCKCHIP && ENV_IS_IN_SPI_FLASH
@@ -49,7 +49,7 @@ Signed-off-by: Samuel Holland <[email protected]>
  	default 0xE0000 if ARCH_ZYNQ
  	default 0xE0000 if ARCH_ZYNQ
  	default 0x1E00000 if ARCH_ZYNQMP
  	default 0x1E00000 if ARCH_ZYNQMP
  	default 0x7F40000 if ARCH_VERSAL || ARCH_VERSAL_NET
  	default 0x7F40000 if ARCH_VERSAL || ARCH_VERSAL_NET
-@@ -580,7 +580,7 @@ config ENV_SIZE
+@@ -602,7 +602,7 @@ config ENV_SIZE
  	hex "Environment Size"
  	hex "Environment Size"
  	default 0x40000 if ENV_IS_IN_SPI_FLASH && ARCH_ZYNQMP
  	default 0x40000 if ENV_IS_IN_SPI_FLASH && ARCH_ZYNQMP
  	default 0x20000 if ARCH_ZYNQ || ARCH_OMAP2PLUS || ARCH_AT91
  	default 0x20000 if ARCH_ZYNQ || ARCH_OMAP2PLUS || ARCH_AT91
@@ -58,7 +58,7 @@ Signed-off-by: Samuel Holland <[email protected]>
  	default 0x8000 if ARCH_ROCKCHIP && ENV_IS_IN_MMC
  	default 0x8000 if ARCH_ROCKCHIP && ENV_IS_IN_MMC
  	default 0x2000 if ARCH_ROCKCHIP && ENV_IS_IN_SPI_FLASH
  	default 0x2000 if ARCH_ROCKCHIP && ENV_IS_IN_SPI_FLASH
  	default 0x8000 if ARCH_ZYNQMP || ARCH_VERSAL || ARCH_VERSAL_NET
  	default 0x8000 if ARCH_ZYNQMP || ARCH_VERSAL || ARCH_VERSAL_NET
-@@ -596,7 +596,7 @@ config ENV_SECT_SIZE
+@@ -618,7 +618,7 @@ config ENV_SECT_SIZE
  	default 0x40000 if ARCH_ZYNQMP || ARCH_VERSAL || ARCH_VERSAL_NET
  	default 0x40000 if ARCH_ZYNQMP || ARCH_VERSAL || ARCH_VERSAL_NET
  	default 0x20000 if ARCH_ZYNQ || ARCH_OMAP2PLUS || ARCH_AT91
  	default 0x20000 if ARCH_ZYNQ || ARCH_OMAP2PLUS || ARCH_AT91
  	default 0x20000 if MICROBLAZE && ENV_IS_IN_SPI_FLASH
  	default 0x20000 if MICROBLAZE && ENV_IS_IN_SPI_FLASH

+ 29 - 30
package/boot/uboot-d1/patches/0073-drivers-sunxi-Replace-ARCH_SUNXI-with-BOARD_SUNXI.patch → package/boot/uboot-d1/patches/0028-drivers-sunxi-Replace-ARCH_SUNXI-with-BOARD_SUNXI.patch

@@ -1,13 +1,12 @@
-From 666d3c2bc058268a976397ec3e258f532edcfeb2 Mon Sep 17 00:00:00 2001
-From: Zoltan HERPAI <[email protected]>
-Date: Tue, 6 Jun 2023 18:12:11 +0000
-Subject: [PATCH 73/90] drivers: sunxi: Replace ARCH_SUNXI with BOARD_SUNXI
+From bb75b5b2a46a87e6582dc1b48062b77812fb53c1 Mon Sep 17 00:00:00 2001
+From: Samuel Holland <[email protected]>
+Date: Fri, 5 Aug 2022 23:53:23 -0500
+Subject: [PATCH 28/68] drivers: sunxi: Replace ARCH_SUNXI with BOARD_SUNXI
 
 
 This provides a unified configuration across all sunxi boards,
 This provides a unified configuration across all sunxi boards,
 regardless of CPU architecture.
 regardless of CPU architecture.
 
 
 Signed-off-by: Samuel Holland <[email protected]>
 Signed-off-by: Samuel Holland <[email protected]>
-Signed-off-by: Zoltan HERPAI <[email protected]>
 ---
 ---
  drivers/clk/sunxi/Kconfig     |  2 +-
  drivers/clk/sunxi/Kconfig     |  2 +-
  drivers/fastboot/Kconfig      | 13 ++++++-------
  drivers/fastboot/Kconfig      | 13 ++++++-------
@@ -37,7 +36,7 @@ Signed-off-by: Zoltan HERPAI <[email protected]>
  	default y
  	default y
 --- a/drivers/fastboot/Kconfig
 --- a/drivers/fastboot/Kconfig
 +++ b/drivers/fastboot/Kconfig
 +++ b/drivers/fastboot/Kconfig
-@@ -8,7 +8,7 @@ config FASTBOOT
+@@ -15,7 +15,7 @@ config FASTBOOT
  config USB_FUNCTION_FASTBOOT
  config USB_FUNCTION_FASTBOOT
  	bool "Enable USB fastboot gadget"
  	bool "Enable USB fastboot gadget"
  	depends on USB_GADGET
  	depends on USB_GADGET
@@ -46,7 +45,7 @@ Signed-off-by: Zoltan HERPAI <[email protected]>
  	select FASTBOOT
  	select FASTBOOT
  	select USB_GADGET_DOWNLOAD
  	select USB_GADGET_DOWNLOAD
  	help
  	help
-@@ -32,10 +32,9 @@ if FASTBOOT
+@@ -46,10 +46,9 @@ if FASTBOOT
  
  
  config FASTBOOT_BUF_ADDR
  config FASTBOOT_BUF_ADDR
  	hex "Define FASTBOOT buffer address"
  	hex "Define FASTBOOT buffer address"
@@ -58,7 +57,7 @@ Signed-off-by: Zoltan HERPAI <[email protected]>
  	default 0x60800800 if ROCKCHIP_RK3036 || ROCKCHIP_RK3188 || \
  	default 0x60800800 if ROCKCHIP_RK3036 || ROCKCHIP_RK3188 || \
  				ROCKCHIP_RK322X
  				ROCKCHIP_RK322X
  	default 0x800800 if ROCKCHIP_RK3288 || ROCKCHIP_RK3329 || \
  	default 0x800800 if ROCKCHIP_RK3288 || ROCKCHIP_RK3329 || \
-@@ -52,7 +51,7 @@ config FASTBOOT_BUF_SIZE
+@@ -66,7 +65,7 @@ config FASTBOOT_BUF_SIZE
  	hex "Define FASTBOOT buffer size"
  	hex "Define FASTBOOT buffer size"
  	default 0x8000000 if ARCH_ROCKCHIP
  	default 0x8000000 if ARCH_ROCKCHIP
  	default 0x6000000 if ARCH_ZYNQMP
  	default 0x6000000 if ARCH_ZYNQMP
@@ -67,7 +66,7 @@ Signed-off-by: Zoltan HERPAI <[email protected]>
  	default 0x8192 if SANDBOX
  	default 0x8192 if SANDBOX
  	default 0x7000000
  	default 0x7000000
  	help
  	help
-@@ -71,7 +70,7 @@ config FASTBOOT_USB_DEV
+@@ -85,7 +84,7 @@ config FASTBOOT_USB_DEV
  
  
  config FASTBOOT_FLASH
  config FASTBOOT_FLASH
  	bool "Enable FASTBOOT FLASH command"
  	bool "Enable FASTBOOT FLASH command"
@@ -76,7 +75,7 @@ Signed-off-by: Zoltan HERPAI <[email protected]>
  	depends on MMC || (MTD_RAW_NAND && CMD_MTDPARTS)
  	depends on MMC || (MTD_RAW_NAND && CMD_MTDPARTS)
  	select IMAGE_SPARSE
  	select IMAGE_SPARSE
  	help
  	help
-@@ -105,8 +104,8 @@ config FASTBOOT_FLASH_MMC_DEV
+@@ -120,8 +119,8 @@ config FASTBOOT_FLASH_MMC_DEV
  	int "Define FASTBOOT MMC FLASH default device"
  	int "Define FASTBOOT MMC FLASH default device"
  	depends on FASTBOOT_FLASH_MMC
  	depends on FASTBOOT_FLASH_MMC
  	default 0 if ARCH_ROCKCHIP
  	default 0 if ARCH_ROCKCHIP
@@ -89,7 +88,7 @@ Signed-off-by: Zoltan HERPAI <[email protected]>
  	  regarding the non-volatile storage device. Define this to
  	  regarding the non-volatile storage device. Define this to
 --- a/drivers/gpio/Kconfig
 --- a/drivers/gpio/Kconfig
 +++ b/drivers/gpio/Kconfig
 +++ b/drivers/gpio/Kconfig
-@@ -370,7 +370,7 @@ config SANDBOX_GPIO_COUNT
+@@ -367,7 +367,7 @@ config SANDBOX_GPIO_COUNT
  
  
  config SUNXI_GPIO
  config SUNXI_GPIO
  	bool "Allwinner GPIO driver"
  	bool "Allwinner GPIO driver"
@@ -100,7 +99,7 @@ Signed-off-by: Zoltan HERPAI <[email protected]>
  	  Support the GPIO device in Allwinner SoCs.
  	  Support the GPIO device in Allwinner SoCs.
 --- a/drivers/mmc/Kconfig
 --- a/drivers/mmc/Kconfig
 +++ b/drivers/mmc/Kconfig
 +++ b/drivers/mmc/Kconfig
-@@ -756,7 +756,7 @@ config ZYNQ_HISPD_BROKEN
+@@ -753,7 +753,7 @@ config ZYNQ_HISPD_BROKEN
  
  
  config MMC_SUNXI
  config MMC_SUNXI
  	bool "Allwinner sunxi SD/MMC Host Controller support"
  	bool "Allwinner sunxi SD/MMC Host Controller support"
@@ -134,11 +133,11 @@ Signed-off-by: Zoltan HERPAI <[email protected]>
  #
  #
  config PHY_SUN4I_USB
  config PHY_SUN4I_USB
  	bool "Allwinner Sun4I USB PHY driver"
  	bool "Allwinner Sun4I USB PHY driver"
--	depends on ARCH_SUNXI && !MACH_SUN9I
-+	depends on depends on BOARD_SUNXI
+-	depends on ARCH_SUNXI
++	depends on BOARD_SUNXI
+ 	depends on !MACH_SUN9I
+ 	default n if MACH_SUN8I_V3S
  	default y
  	default y
- 	select DM_REGULATOR
- 	select PHY
 --- a/drivers/pinctrl/sunxi/Kconfig
 --- a/drivers/pinctrl/sunxi/Kconfig
 +++ b/drivers/pinctrl/sunxi/Kconfig
 +++ b/drivers/pinctrl/sunxi/Kconfig
 @@ -1,6 +1,6 @@
 @@ -1,6 +1,6 @@
@@ -162,7 +161,7 @@ Signed-off-by: Zoltan HERPAI <[email protected]>
  	  This enables support for common reset driver for
  	  This enables support for common reset driver for
 --- a/drivers/spi/Kconfig
 --- a/drivers/spi/Kconfig
 +++ b/drivers/spi/Kconfig
 +++ b/drivers/spi/Kconfig
-@@ -453,7 +453,7 @@ config SOFT_SPI
+@@ -488,7 +488,7 @@ config SPI_SN_F_OSPI
  
  
  config SPI_SUNXI
  config SPI_SUNXI
  	bool "Allwinner SoC SPI controllers"
  	bool "Allwinner SoC SPI controllers"
@@ -173,7 +172,7 @@ Signed-off-by: Zoltan HERPAI <[email protected]>
  
  
 --- a/drivers/usb/Kconfig
 --- a/drivers/usb/Kconfig
 +++ b/drivers/usb/Kconfig
 +++ b/drivers/usb/Kconfig
-@@ -116,7 +116,7 @@ config USB_KEYBOARD_FN_KEYS
+@@ -158,7 +158,7 @@ config USB_KEYBOARD_FN_KEYS
  
  
  choice
  choice
  	prompt "USB keyboard polling"
  	prompt "USB keyboard polling"
@@ -184,34 +183,34 @@ Signed-off-by: Zoltan HERPAI <[email protected]>
  	  Enable a polling mechanism for USB keyboard.
  	  Enable a polling mechanism for USB keyboard.
 --- a/drivers/usb/gadget/Kconfig
 --- a/drivers/usb/gadget/Kconfig
 +++ b/drivers/usb/gadget/Kconfig
 +++ b/drivers/usb/gadget/Kconfig
-@@ -40,7 +40,7 @@ if USB_GADGET
- 
+@@ -47,7 +47,7 @@ if USB_GADGET
  config USB_GADGET_MANUFACTURER
  config USB_GADGET_MANUFACTURER
  	string "Vendor name of the USB device"
  	string "Vendor name of the USB device"
+ 	default "NVIDIA" if ARCH_TEGRA
 -	default "Allwinner Technology" if ARCH_SUNXI
 -	default "Allwinner Technology" if ARCH_SUNXI
 +	default "Allwinner Technology" if BOARD_SUNXI
 +	default "Allwinner Technology" if BOARD_SUNXI
  	default "Rockchip" if ARCH_ROCKCHIP
  	default "Rockchip" if ARCH_ROCKCHIP
  	default "U-Boot"
  	default "U-Boot"
  	help
  	help
-@@ -49,7 +49,7 @@ config USB_GADGET_MANUFACTURER
- 
+@@ -57,7 +57,7 @@ config USB_GADGET_MANUFACTURER
  config USB_GADGET_VENDOR_NUM
  config USB_GADGET_VENDOR_NUM
  	hex "Vendor ID of the USB device"
  	hex "Vendor ID of the USB device"
+ 	default 0x0955 if ARCH_TEGRA
 -	default 0x1f3a if ARCH_SUNXI
 -	default 0x1f3a if ARCH_SUNXI
 +	default 0x1f3a if BOARD_SUNXI
 +	default 0x1f3a if BOARD_SUNXI
  	default 0x2207 if ARCH_ROCKCHIP
  	default 0x2207 if ARCH_ROCKCHIP
  	default 0x0
  	default 0x0
  	help
  	help
-@@ -59,7 +59,7 @@ config USB_GADGET_VENDOR_NUM
- 
+@@ -68,7 +68,7 @@ config USB_GADGET_VENDOR_NUM
  config USB_GADGET_PRODUCT_NUM
  config USB_GADGET_PRODUCT_NUM
  	hex "Product ID of the USB device"
  	hex "Product ID of the USB device"
+ 	default 0x701a if ARCH_TEGRA
 -	default 0x1010 if ARCH_SUNXI
 -	default 0x1010 if ARCH_SUNXI
 +	default 0x1010 if BOARD_SUNXI
 +	default 0x1010 if BOARD_SUNXI
  	default 0x310a if ROCKCHIP_RK3036
  	default 0x310a if ROCKCHIP_RK3036
  	default 0x300a if ROCKCHIP_RK3066
  	default 0x300a if ROCKCHIP_RK3066
  	default 0x310c if ROCKCHIP_RK3128
  	default 0x310c if ROCKCHIP_RK3128
-@@ -202,7 +202,7 @@ endif # USB_GADGET_DOWNLOAD
+@@ -215,7 +215,7 @@ endif # USB_GADGET_DOWNLOAD
  config USB_ETHER
  config USB_ETHER
  	bool "USB Ethernet Gadget"
  	bool "USB Ethernet Gadget"
  	depends on NET
  	depends on NET
@@ -228,12 +227,12 @@ Signed-off-by: Zoltan HERPAI <[email protected]>
  	bool "Enable sunxi OTG / DRC USB controller"
  	bool "Enable sunxi OTG / DRC USB controller"
 -	depends on ARCH_SUNXI
 -	depends on ARCH_SUNXI
 +	depends on BOARD_SUNXI
 +	depends on BOARD_SUNXI
+ 	depends on PHY_SUN4I_USB
  	select USB_MUSB_PIO_ONLY
  	select USB_MUSB_PIO_ONLY
  	default y
  	default y
- 	---help---
 --- a/drivers/video/Kconfig
 --- a/drivers/video/Kconfig
 +++ b/drivers/video/Kconfig
 +++ b/drivers/video/Kconfig
-@@ -183,7 +183,7 @@ config CONSOLE_TRUETYPE_MAX_METRICS
+@@ -217,7 +217,7 @@ config CONSOLE_TRUETYPE_MAX_METRICS
  
  
  config SYS_WHITE_ON_BLACK
  config SYS_WHITE_ON_BLACK
  	bool "Display console as white on a black background"
  	bool "Display console as white on a black background"
@@ -250,10 +249,10 @@ Signed-off-by: Zoltan HERPAI <[email protected]>
  	default 30000 if ARCH_SOCFPGA
  	default 30000 if ARCH_SOCFPGA
 -	default 16000 if ARCH_SUNXI
 -	default 16000 if ARCH_SUNXI
 +	default 16000 if BOARD_SUNXI
 +	default 16000 if BOARD_SUNXI
+ 	default 5376 if ULP_WATCHDOG
+ 	default 15000 if ARCH_BCM283X
  	default 60000
  	default 60000
- 	help
- 	  Watchdog timeout in msec
-@@ -321,7 +321,7 @@ config WDT_STM32MP
+@@ -353,7 +353,7 @@ config WDT_STARFIVE
  
  
  config WDT_SUNXI
  config WDT_SUNXI
  	bool "Allwinner sunxi watchdog timer support"
  	bool "Allwinner sunxi watchdog timer support"

+ 0 - 120
package/boot/uboot-d1/patches/0028-pinctrl-sunxi-Add-NAND-pinmuxes.patch

@@ -1,120 +0,0 @@
-From 7be2405244565973cff0a40196bbed08df90f6a3 Mon Sep 17 00:00:00 2001
-From: Samuel Holland <[email protected]>
-Date: Mon, 16 May 2022 00:31:36 -0500
-Subject: [PATCH 28/90] pinctrl: sunxi: Add NAND pinmuxes
-
-NAND is always at function 2 on port C.
-
-Pin lists and mux values were taken from the Linux drivers.
-
-Signed-off-by: Samuel Holland <[email protected]>
----
- drivers/pinctrl/sunxi/pinctrl-sunxi.c | 13 +++++++++++++
- 1 file changed, 13 insertions(+)
-
---- a/drivers/pinctrl/sunxi/pinctrl-sunxi.c
-+++ b/drivers/pinctrl/sunxi/pinctrl-sunxi.c
-@@ -269,6 +269,7 @@ static const struct sunxi_pinctrl_functi
- #endif
- 	{ "mmc2",	3 },	/* PC6-PC15 */
- 	{ "mmc3",	2 },	/* PI4-PI9 */
-+	{ "nand0",	2 },	/* PC0-PC24 */
- 	{ "spi0",	3 },	/* PC0-PC2, PC23 */
- #if IS_ENABLED(CONFIG_UART0_PORT_F)
- 	{ "uart0",	4 },	/* PF2-PF4 */
-@@ -293,6 +294,7 @@ static const struct sunxi_pinctrl_functi
- 	{ "mmc0",	2 },	/* PF0-PF5 */
- 	{ "mmc1",	2 },	/* PG3-PG8 */
- 	{ "mmc2",	3 },	/* PC6-PC15 */
-+	{ "nand0",	2 },	/* PC0-PC19 */
- 	{ "spi0",	3 },	/* PC0-PC3 */
- #if IS_ENABLED(CONFIG_UART0_PORT_F)
- 	{ "uart0",	4 },	/* PF2-PF4 */
-@@ -319,6 +321,7 @@ static const struct sunxi_pinctrl_functi
- 	{ "mmc1",	2 },	/* PG0-PG5 */
- 	{ "mmc2",	3 },	/* PC6-PC15, PC24 */
- 	{ "mmc3",	4 },	/* PC6-PC15, PC24 */
-+	{ "nand0",	2 },	/* PC0-PC26 */
- 	{ "spi0",	3 },	/* PC0-PC2, PC27 */
- #if IS_ENABLED(CONFIG_UART0_PORT_F)
- 	{ "uart0",	3 },	/* PF2-PF4 */
-@@ -363,6 +366,7 @@ static const struct sunxi_pinctrl_functi
- 	{ "mmc1",	4 },	/* PG0-PG5 */
- #endif
- 	{ "mmc2",	3 },	/* PC5-PC15, PC24 */
-+	{ "nand0",	2 },	/* PC0-PC24 */
- 	{ "spi0",	3 },	/* PC0-PC2, PC23 */
- #if IS_ENABLED(CONFIG_UART0_PORT_F)
- 	{ "uart0",	4 },	/* PF2-PF4 */
-@@ -386,6 +390,7 @@ static const struct sunxi_pinctrl_functi
- 	{ "mmc0",	2 },	/* PF0-PF5 */
- 	{ "mmc1",	2 },	/* PG0-PG5 */
- 	{ "mmc2",	3 },	/* PC5-PC16 */
-+	{ "nand0",	2 },	/* PC0-PC16 */
- 	{ "spi0",	3 },	/* PC0-PC3 */
- #if IS_ENABLED(CONFIG_UART0_PORT_F)
- 	{ "uart0",	3 },	/* PF2-PF4 */
-@@ -424,6 +429,7 @@ static const struct sunxi_pinctrl_functi
- 	{ "mmc0",	2 },	/* PF0-PF5 */
- 	{ "mmc1",	2 },	/* PG0-PG5 */
- 	{ "mmc2",	3 },	/* PC5-PC16 */
-+	{ "nand0",	2 },	/* PC0-PC16 */
- 	{ "spi0",	3 },	/* PC0-PC3 */
- #if IS_ENABLED(CONFIG_UART0_PORT_F)
- 	{ "uart0",	3 },	/* PF2-PF4 */
-@@ -450,6 +456,7 @@ static const struct sunxi_pinctrl_functi
- 	{ "mmc0",	2 },	/* PF0-PF5 */
- 	{ "mmc1",	2 },	/* PG0-PG5 */
- 	{ "mmc2",	3 },	/* PC5-PC16 */
-+	{ "nand0",	2 },	/* PC0-PC18 */
- 	{ "spi0",	3 },	/* PC0-PC3 */
- #if IS_ENABLED(CONFIG_UART0_PORT_F)
- 	{ "uart0",	3 },	/* PF2-PF4 */
-@@ -491,6 +498,7 @@ static const struct sunxi_pinctrl_functi
- 	{ "mmc0",	2 },	/* PF0-PF5 */
- 	{ "mmc1",	2 },	/* PG0-PG5 */
- 	{ "mmc2",	3 },	/* PC5-PC16 */
-+	{ "nand0",	2 },	/* PC0-PC16 */
- 	{ "spi0",	3 },	/* PC0-PC3 */
- #if IS_ENABLED(CONFIG_UART0_PORT_F)
- 	{ "uart0",	3 },	/* PF2-PF4 */
-@@ -557,6 +565,7 @@ static const struct sunxi_pinctrl_functi
- 	{ "mmc0",	2 },	/* PF0-PF5 */
- 	{ "mmc1",	2 },	/* PG0-PG5 */
- 	{ "mmc2",	3 },	/* PC6-PC16 */
-+	{ "nand0",	2 },	/* PC0-PC18 */
- 	{ "spi0",	3 },	/* PC0-PC2, PC19 */
- #if IS_ENABLED(CONFIG_UART0_PORT_F)
- 	{ "uart0",	4 },	/* PF2-PF4 */
-@@ -622,6 +631,7 @@ static const struct sunxi_pinctrl_functi
- 	{ "mmc0",	2 },	/* PF0-PF5 */
- 	{ "mmc1",	2 },	/* PG0-PG5 */
- 	{ "mmc2",	3 },	/* PC1-PC16 */
-+	{ "nand0",	2 },	/* PC0-PC16 */
- 	{ "pwm",	2 },	/* PD22 */
- 	{ "spi0",	4 },	/* PC0-PC3 */
- #if IS_ENABLED(CONFIG_UART0_PORT_F)
-@@ -664,6 +674,7 @@ static const struct sunxi_pinctrl_functi
- 	{ "mmc0",	2 },	/* PF0-PF5 */
- 	{ "mmc1",	2 },	/* PG0-PG5 */
- 	{ "mmc2",	3 },	/* PC1-PC16 */
-+	{ "nand0",	2 },	/* PC0-PC16 */
- 	{ "spi0",	3 },	/* PC0-PC3 */
- #if IS_ENABLED(CONFIG_UART0_PORT_F)
- 	{ "uart0",	3 },	/* PF2-PF4 */
-@@ -690,6 +701,7 @@ static const struct sunxi_pinctrl_functi
- 	{ "mmc0",	2 },	/* PF0-PF5 */
- 	{ "mmc1",	2 },	/* PG0-PG5 */
- 	{ "mmc2",	3 },	/* PC1-PC14 */
-+	{ "nand0",	2 },	/* PC0-PC16 */
- 	{ "spi0",	4 },	/* PC0-PC7 */
- #if IS_ENABLED(CONFIG_UART0_PORT_F)
- 	{ "uart0",	3 },	/* PF2-PF4 */
-@@ -728,6 +740,7 @@ static const struct sunxi_pinctrl_functi
- 	{ "mmc0",	2 },	/* PF0-PF5 */
- 	{ "mmc1",	2 },	/* PG0-PG5 */
- 	{ "mmc2",	3 },	/* PC0-PC16 */
-+	{ "nand0",	2 },	/* PC0-PC16 */
- 	{ "spi0",	4 },	/* PC0-PC7, PC15-PC16 */
- #if IS_ENABLED(CONFIG_UART0_PORT_F)
- 	{ "uart0",	3 },	/* PF2-PF4 */

+ 2 - 2
package/boot/uboot-d1/patches/0074-disk-sunxi-Replace-ARCH_SUNXI-with-BOARD_SUNXI.patch → package/boot/uboot-d1/patches/0029-disk-sunxi-Replace-ARCH_SUNXI-with-BOARD_SUNXI.patch

@@ -1,7 +1,7 @@
-From 98fb93ceb936b375d7f8f2908f0703a93e27fbc4 Mon Sep 17 00:00:00 2001
+From 1cad18bc1db10fe6fad78a0e1261968260722f0c Mon Sep 17 00:00:00 2001
 From: Samuel Holland <[email protected]>
 From: Samuel Holland <[email protected]>
 Date: Sat, 6 Aug 2022 00:05:52 -0500
 Date: Sat, 6 Aug 2022 00:05:52 -0500
-Subject: [PATCH 74/90] disk: sunxi: Replace ARCH_SUNXI with BOARD_SUNXI
+Subject: [PATCH 29/68] disk: sunxi: Replace ARCH_SUNXI with BOARD_SUNXI
 
 
 This provides a unified configuration across all sunxi boards,
 This provides a unified configuration across all sunxi boards,
 regardless of CPU architecture.
 regardless of CPU architecture.

+ 0 - 32
package/boot/uboot-d1/patches/0029-mtd-nand-sunxi-Remove-an-unnecessary-check.patch

@@ -1,32 +0,0 @@
-From 8e793af8598a8429c9dc0f096c72a92adb360a57 Mon Sep 17 00:00:00 2001
-From: Samuel Holland <[email protected]>
-Date: Sun, 15 May 2022 21:51:47 -0500
-Subject: [PATCH 29/90] mtd: nand: sunxi: Remove an unnecessary check
-
-Each chip is required to have a unique CS number ("reg" property) in the
-range 0-7, so there is no need to separately count the number of chips.
-
-Signed-off-by: Samuel Holland <[email protected]>
----
- drivers/mtd/nand/raw/sunxi_nand.c | 10 ----------
- 1 file changed, 10 deletions(-)
-
---- a/drivers/mtd/nand/raw/sunxi_nand.c
-+++ b/drivers/mtd/nand/raw/sunxi_nand.c
-@@ -1767,16 +1767,6 @@ static int sunxi_nand_chips_init(int nod
- 	int ret, i = 0;
- 
- 	for (nand_node = fdt_first_subnode(blob, node); nand_node >= 0;
--	     nand_node = fdt_next_subnode(blob, nand_node))
--		i++;
--
--	if (i > 8) {
--		dev_err(nfc->dev, "too many NAND chips: %d (max = 8)\n", i);
--		return -EINVAL;
--	}
--
--	i = 0;
--	for (nand_node = fdt_first_subnode(blob, node); nand_node >= 0;
- 	     nand_node = fdt_next_subnode(blob, nand_node)) {
- 		ret = sunxi_nand_chip_init(nand_node, nfc, i++);
- 		if (ret)

+ 0 - 203
package/boot/uboot-d1/patches/0030-mtd-nand-sunxi-Convert-from-fdtdec-to-ofnode.patch

@@ -1,203 +0,0 @@
-From 61b63cbb3526e19a0e299f95a3435a237c7c4b4b Mon Sep 17 00:00:00 2001
-From: Samuel Holland <[email protected]>
-Date: Sun, 15 May 2022 21:54:25 -0500
-Subject: [PATCH 30/90] mtd: nand: sunxi: Convert from fdtdec to ofnode
-
-As a first step toward converting this driver to the driver model, use
-the ofnode abstraction to replace direct references to the FDT blob.
-
-Using ofnode_read_u32_index removes an extra pair of loops and makes the
-allwinner,rb property optional, matching the devicetree binding.
-
-Signed-off-by: Samuel Holland <[email protected]>
----
- drivers/mtd/nand/raw/sunxi_nand.c | 73 +++++++++++--------------------
- include/fdtdec.h                  |  1 -
- lib/fdtdec.c                      |  1 -
- 3 files changed, 26 insertions(+), 49 deletions(-)
-
---- a/drivers/mtd/nand/raw/sunxi_nand.c
-+++ b/drivers/mtd/nand/raw/sunxi_nand.c
-@@ -25,11 +25,10 @@
-  */
- 
- #include <common.h>
--#include <fdtdec.h>
-+#include <dm.h>
- #include <malloc.h>
- #include <memalign.h>
- #include <nand.h>
--#include <asm/global_data.h>
- #include <dm/device_compat.h>
- #include <dm/devres.h>
- #include <linux/bitops.h>
-@@ -45,8 +44,6 @@
- #include <asm/gpio.h>
- #include <asm/arch/clock.h>
- 
--DECLARE_GLOBAL_DATA_PTR;
--
- #define NFC_REG_CTL		0x0000
- #define NFC_REG_ST		0x0004
- #define NFC_REG_INT		0x0008
-@@ -1605,19 +1602,18 @@ static int sunxi_nand_ecc_init(struct mt
- 	return 0;
- }
- 
--static int sunxi_nand_chip_init(int node, struct sunxi_nfc *nfc, int devnum)
-+static int sunxi_nand_chip_init(ofnode np, struct sunxi_nfc *nfc, int devnum)
- {
- 	const struct nand_sdr_timings *timings;
--	const void *blob = gd->fdt_blob;
- 	struct sunxi_nand_chip *chip;
- 	struct mtd_info *mtd;
- 	struct nand_chip *nand;
- 	int nsels;
- 	int ret;
- 	int i;
--	u32 cs[8], rb[8];
-+	u32 tmp;
- 
--	if (!fdt_getprop(blob, node, "reg", &nsels))
-+	if (!ofnode_get_property(np, "reg", &nsels))
- 		return -EINVAL;
- 
- 	nsels /= sizeof(u32);
-@@ -1638,25 +1634,12 @@ static int sunxi_nand_chip_init(int node
- 	chip->selected = -1;
- 
- 	for (i = 0; i < nsels; i++) {
--		cs[i] = -1;
--		rb[i] = -1;
--	}
--
--	ret = fdtdec_get_int_array(gd->fdt_blob, node, "reg", cs, nsels);
--	if (ret) {
--		dev_err(nfc->dev, "could not retrieve reg property: %d\n", ret);
--		return ret;
--	}
--
--	ret = fdtdec_get_int_array(gd->fdt_blob, node, "allwinner,rb", rb,
--				   nsels);
--	if (ret) {
--		dev_err(nfc->dev, "could not retrieve reg property: %d\n", ret);
--		return ret;
--	}
--
--	for (i = 0; i < nsels; i++) {
--		int tmp = cs[i];
-+		ret = ofnode_read_u32_index(np, "reg", i, &tmp);
-+		if (ret) {
-+			dev_err(nfc->dev, "could not retrieve reg property: %d\n",
-+				ret);
-+			return ret;
-+		}
- 
- 		if (tmp > NFC_MAX_CS) {
- 			dev_err(nfc->dev,
-@@ -1671,15 +1654,14 @@ static int sunxi_nand_chip_init(int node
- 
- 		chip->sels[i].cs = tmp;
- 
--		tmp = rb[i];
--		if (tmp >= 0 && tmp < 2) {
-+		if (!ofnode_read_u32_index(np, "allwinner,rb", i, &tmp) &&
-+		    tmp < 2) {
- 			chip->sels[i].rb.type = RB_NATIVE;
- 			chip->sels[i].rb.info.nativeid = tmp;
- 		} else {
--			ret = gpio_request_by_name_nodev(offset_to_ofnode(node),
--						"rb-gpios", i,
--						&chip->sels[i].rb.info.gpio,
--						GPIOD_IS_IN);
-+			ret = gpio_request_by_name_nodev(np, "rb-gpios", i,
-+							 &chip->sels[i].rb.info.gpio,
-+							 GPIOD_IS_IN);
- 			if (ret)
- 				chip->sels[i].rb.type = RB_GPIO;
- 			else
-@@ -1711,7 +1693,7 @@ static int sunxi_nand_chip_init(int node
- 	 * in the DT.
- 	 */
- 	nand->ecc.mode = NAND_ECC_HW;
--	nand->flash_node = offset_to_ofnode(node);
-+	nand->flash_node = np;
- 	nand->select_chip = sunxi_nfc_select_chip;
- 	nand->cmd_ctrl = sunxi_nfc_cmd_ctrl;
- 	nand->read_buf = sunxi_nfc_read_buf;
-@@ -1760,15 +1742,13 @@ static int sunxi_nand_chip_init(int node
- 	return 0;
- }
- 
--static int sunxi_nand_chips_init(int node, struct sunxi_nfc *nfc)
-+static int sunxi_nand_chips_init(ofnode node, struct sunxi_nfc *nfc)
- {
--	const void *blob = gd->fdt_blob;
--	int nand_node;
-+	ofnode nand_np;
- 	int ret, i = 0;
- 
--	for (nand_node = fdt_first_subnode(blob, node); nand_node >= 0;
--	     nand_node = fdt_next_subnode(blob, nand_node)) {
--		ret = sunxi_nand_chip_init(nand_node, nfc, i++);
-+	ofnode_for_each_subnode(nand_np, node) {
-+		ret = sunxi_nand_chip_init(nand_np, nfc, i++);
- 		if (ret)
- 			return ret;
- 	}
-@@ -1794,10 +1774,9 @@ static void sunxi_nand_chips_cleanup(str
- 
- void sunxi_nand_init(void)
- {
--	const void *blob = gd->fdt_blob;
- 	struct sunxi_nfc *nfc;
--	fdt_addr_t regs;
--	int node;
-+	phys_addr_t regs;
-+	ofnode node;
- 	int ret;
- 
- 	nfc = kzalloc(sizeof(*nfc), GFP_KERNEL);
-@@ -1808,18 +1787,18 @@ void sunxi_nand_init(void)
- 	init_waitqueue_head(&nfc->controller.wq);
- 	INIT_LIST_HEAD(&nfc->chips);
- 
--	node = fdtdec_next_compatible(blob, 0, COMPAT_SUNXI_NAND);
--	if (node < 0) {
-+	node = ofnode_by_compatible(ofnode_null(), "allwinner,sun4i-a10-nand");
-+	if (!ofnode_valid(node)) {
- 		pr_err("unable to find nfc node in device tree\n");
- 		goto err;
- 	}
- 
--	if (!fdtdec_get_is_enabled(blob, node)) {
-+	if (!ofnode_is_enabled(node)) {
- 		pr_err("nfc disabled in device tree\n");
- 		goto err;
- 	}
- 
--	regs = fdtdec_get_addr(blob, node, "reg");
-+	regs = ofnode_get_addr(node);
- 	if (regs == FDT_ADDR_T_NONE) {
- 		pr_err("unable to find nfc address in device tree\n");
- 		goto err;
---- a/include/fdtdec.h
-+++ b/include/fdtdec.h
-@@ -187,7 +187,6 @@ enum fdt_compat_id {
- 	COMPAT_INTEL_BAYTRAIL_FSP,	/* Intel Bay Trail FSP */
- 	COMPAT_INTEL_BAYTRAIL_FSP_MDP,	/* Intel FSP memory-down params */
- 	COMPAT_INTEL_IVYBRIDGE_FSP,	/* Intel Ivy Bridge FSP */
--	COMPAT_SUNXI_NAND,		/* SUNXI NAND controller */
- 	COMPAT_ALTERA_SOCFPGA_CLK,	/* SoCFPGA Clock initialization */
- 	COMPAT_ALTERA_SOCFPGA_PINCTRL_SINGLE,	/* SoCFPGA pinctrl-single */
- 	COMPAT_ALTERA_SOCFPGA_H2F_BRG,          /* SoCFPGA hps2fpga bridge */
---- a/lib/fdtdec.c
-+++ b/lib/fdtdec.c
-@@ -64,7 +64,6 @@ static const char * const compat_names[C
- 	COMPAT(INTEL_BAYTRAIL_FSP, "intel,baytrail-fsp"),
- 	COMPAT(INTEL_BAYTRAIL_FSP_MDP, "intel,baytrail-fsp-mdp"),
- 	COMPAT(INTEL_IVYBRIDGE_FSP, "intel,ivybridge-fsp"),
--	COMPAT(COMPAT_SUNXI_NAND, "allwinner,sun4i-a10-nand"),
- 	COMPAT(ALTERA_SOCFPGA_CLK, "altr,clk-mgr"),
- 	COMPAT(ALTERA_SOCFPGA_PINCTRL_SINGLE, "pinctrl-single"),
- 	COMPAT(ALTERA_SOCFPGA_H2F_BRG, "altr,socfpga-hps2fpga-bridge"),

+ 7 - 7
package/boot/uboot-d1/patches/0075-spl-sunxi-Replace-ARCH_SUNXI-with-BOARD_SUNXI.patch → package/boot/uboot-d1/patches/0030-spl-sunxi-Replace-ARCH_SUNXI-with-BOARD_SUNXI.patch

@@ -1,7 +1,7 @@
-From 7f06dca4df9302a22a8d27af887da50a67b7dd1d Mon Sep 17 00:00:00 2001
+From c222a0e36919f6529190cfd3e362d25f1c876bf8 Mon Sep 17 00:00:00 2001
 From: Samuel Holland <[email protected]>
 From: Samuel Holland <[email protected]>
 Date: Sat, 6 Aug 2022 00:09:38 -0500
 Date: Sat, 6 Aug 2022 00:09:38 -0500
-Subject: [PATCH 75/90] spl: sunxi: Replace ARCH_SUNXI with BOARD_SUNXI
+Subject: [PATCH 30/68] spl: sunxi: Replace ARCH_SUNXI with BOARD_SUNXI
 
 
 This provides a unified configuration across all sunxi boards,
 This provides a unified configuration across all sunxi boards,
 regardless of CPU architecture.
 regardless of CPU architecture.
@@ -23,7 +23,7 @@ Signed-off-by: Samuel Holland <[email protected]>
  
  
  config SPL_BSS_START_ADDR
  config SPL_BSS_START_ADDR
  	hex "Link address for the BSS within the SPL binary"
  	hex "Link address for the BSS within the SPL binary"
-@@ -335,7 +335,7 @@ config SPL_SYS_MALLOC_SIMPLE
+@@ -349,7 +349,7 @@ config SPL_SYS_MALLOC_SIMPLE
  config SPL_SHARES_INIT_SP_ADDR
  config SPL_SHARES_INIT_SP_ADDR
  	bool "SPL and U-Boot use the same initial stack pointer location"
  	bool "SPL and U-Boot use the same initial stack pointer location"
  	depends on (ARM || ARCH_JZ47XX || MICROBLAZE || RISCV) && SPL_FRAMEWORK
  	depends on (ARM || ARCH_JZ47XX || MICROBLAZE || RISCV) && SPL_FRAMEWORK
@@ -32,7 +32,7 @@ Signed-off-by: Samuel Holland <[email protected]>
  	default y
  	default y
  	help
  	help
  	  In many cases, we can use the same initial stack pointer address for
  	  In many cases, we can use the same initial stack pointer address for
-@@ -453,7 +453,7 @@ config SPL_DISPLAY_PRINT
+@@ -469,7 +469,7 @@ config SPL_DISPLAY_PRINT
  
  
  config SYS_MMCSD_RAW_MODE_U_BOOT_USE_SECTOR
  config SYS_MMCSD_RAW_MODE_U_BOOT_USE_SECTOR
  	bool "MMC raw mode: by sector"
  	bool "MMC raw mode: by sector"
@@ -41,7 +41,7 @@ Signed-off-by: Samuel Holland <[email protected]>
  		     ARCH_MX6 || ARCH_MX7 || \
  		     ARCH_MX6 || ARCH_MX7 || \
  		     ARCH_ROCKCHIP || ARCH_MVEBU ||  ARCH_SOCFPGA || \
  		     ARCH_ROCKCHIP || ARCH_MVEBU ||  ARCH_SOCFPGA || \
  		     ARCH_AT91 || ARCH_ZYNQ || ARCH_KEYSTONE || OMAP34XX || \
  		     ARCH_AT91 || ARCH_ZYNQ || ARCH_KEYSTONE || OMAP34XX || \
-@@ -466,7 +466,7 @@ config SYS_MMCSD_RAW_MODE_U_BOOT_USE_SEC
+@@ -482,7 +482,7 @@ config SYS_MMCSD_RAW_MODE_U_BOOT_USE_SEC
  config SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR
  config SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR
  	hex "Address on the MMC to load U-Boot from"
  	hex "Address on the MMC to load U-Boot from"
  	depends on SYS_MMCSD_RAW_MODE_U_BOOT_USE_SECTOR
  	depends on SYS_MMCSD_RAW_MODE_U_BOOT_USE_SECTOR
@@ -50,7 +50,7 @@ Signed-off-by: Samuel Holland <[email protected]>
  	default 0x75 if ARCH_DAVINCI
  	default 0x75 if ARCH_DAVINCI
  	default 0x8a if ARCH_MX6 || ARCH_MX7
  	default 0x8a if ARCH_MX6 || ARCH_MX7
  	default 0x100 if ARCH_UNIPHIER
  	default 0x100 if ARCH_UNIPHIER
-@@ -483,7 +483,7 @@ config SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR
+@@ -499,7 +499,7 @@ config SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR
  config SYS_MMCSD_RAW_MODE_U_BOOT_DATA_PART_OFFSET
  config SYS_MMCSD_RAW_MODE_U_BOOT_DATA_PART_OFFSET
  	hex "U-Boot main hardware partition image offset"
  	hex "U-Boot main hardware partition image offset"
  	depends on SYS_MMCSD_RAW_MODE_U_BOOT_USE_SECTOR
  	depends on SYS_MMCSD_RAW_MODE_U_BOOT_USE_SECTOR
@@ -59,7 +59,7 @@ Signed-off-by: Samuel Holland <[email protected]>
  	default 0x0
  	default 0x0
  	help
  	help
  	  On some platforms SPL location depends on hardware partition. The ROM
  	  On some platforms SPL location depends on hardware partition. The ROM
-@@ -1308,7 +1308,7 @@ endif # SPL_SPI_FLASH_SUPPORT
+@@ -1344,7 +1344,7 @@ endif # SPL_SPI_FLASH_SUPPORT
  
  
  config SYS_SPI_U_BOOT_OFFS
  config SYS_SPI_U_BOOT_OFFS
  	hex "address of u-boot payload in SPI flash"
  	hex "address of u-boot payload in SPI flash"

+ 0 - 172
package/boot/uboot-d1/patches/0031-mtd-nand-sunxi-Convert-to-the-driver-model.patch

@@ -1,172 +0,0 @@
-From 3411a9a1be9a8d8fef236a81edbce2a1a8218a32 Mon Sep 17 00:00:00 2001
-From: Samuel Holland <[email protected]>
-Date: Mon, 16 May 2022 00:16:48 -0500
-Subject: [PATCH 31/90] mtd: nand: sunxi: Convert to the driver model
-
-Clocks, resets, and pinmuxes are now handled by the driver model, so the
-only thing the "board" code needs to do is load the driver. This matches
-the pattern used by other DM raw NAND drivers (there is no NAND uclass).
-
-The actual board code is now only needed in SPL.
-
-Signed-off-by: Samuel Holland <[email protected]>
----
- board/sunxi/board.c               |  5 +-
- drivers/mtd/nand/raw/sunxi_nand.c | 81 ++++++++++++++++++-------------
- 2 files changed, 49 insertions(+), 37 deletions(-)
-
---- a/board/sunxi/board.c
-+++ b/board/sunxi/board.c
-@@ -311,7 +311,7 @@ int dram_init(void)
- 	return 0;
- }
- 
--#if defined(CONFIG_NAND_SUNXI)
-+#if defined(CONFIG_NAND_SUNXI) && defined(CONFIG_SPL_BUILD)
- static void nand_pinmux_setup(void)
- {
- 	unsigned int pin;
-@@ -347,9 +347,6 @@ void board_nand_init(void)
- {
- 	nand_pinmux_setup();
- 	nand_clock_setup();
--#ifndef CONFIG_SPL_BUILD
--	sunxi_nand_init();
--#endif
- }
- #endif /* CONFIG_NAND_SUNXI */
- 
---- a/drivers/mtd/nand/raw/sunxi_nand.c
-+++ b/drivers/mtd/nand/raw/sunxi_nand.c
-@@ -24,11 +24,13 @@
-  * GNU General Public License for more details.
-  */
- 
-+#include <clk.h>
- #include <common.h>
- #include <dm.h>
- #include <malloc.h>
- #include <memalign.h>
- #include <nand.h>
-+#include <reset.h>
- #include <dm/device_compat.h>
- #include <dm/devres.h>
- #include <linux/bitops.h>
-@@ -260,7 +262,7 @@ static inline struct sunxi_nand_chip *to
-  * NAND Controller structure: stores sunxi NAND controller information
-  *
-  * @controller:		base controller structure
-- * @dev:		parent device (used to print error messages)
-+ * @dev:		DM device (used to print error messages)
-  * @regs:		NAND controller registers
-  * @ahb_clk:		NAND Controller AHB clock
-  * @mod_clk:		NAND Controller mod clock
-@@ -273,7 +275,7 @@ static inline struct sunxi_nand_chip *to
-  */
- struct sunxi_nfc {
- 	struct nand_hw_control controller;
--	struct device *dev;
-+	struct udevice *dev;
- 	void __iomem *regs;
- 	struct clk *ahb_clk;
- 	struct clk *mod_clk;
-@@ -1772,54 +1774,67 @@ static void sunxi_nand_chips_cleanup(str
- }
- #endif /* __UBOOT__ */
- 
--void sunxi_nand_init(void)
-+static int sunxi_nand_probe(struct udevice *dev)
- {
--	struct sunxi_nfc *nfc;
--	phys_addr_t regs;
--	ofnode node;
-+	struct sunxi_nfc *nfc = dev_get_priv(dev);
-+	struct reset_ctl_bulk rst_bulk;
-+	struct clk_bulk clk_bulk;
- 	int ret;
- 
--	nfc = kzalloc(sizeof(*nfc), GFP_KERNEL);
--	if (!nfc)
--		return;
--
-+	nfc->dev = dev;
- 	spin_lock_init(&nfc->controller.lock);
- 	init_waitqueue_head(&nfc->controller.wq);
- 	INIT_LIST_HEAD(&nfc->chips);
- 
--	node = ofnode_by_compatible(ofnode_null(), "allwinner,sun4i-a10-nand");
--	if (!ofnode_valid(node)) {
--		pr_err("unable to find nfc node in device tree\n");
--		goto err;
--	}
--
--	if (!ofnode_is_enabled(node)) {
--		pr_err("nfc disabled in device tree\n");
--		goto err;
--	}
--
--	regs = ofnode_get_addr(node);
--	if (regs == FDT_ADDR_T_NONE) {
--		pr_err("unable to find nfc address in device tree\n");
--		goto err;
--	}
-+	nfc->regs = dev_read_addr_ptr(dev);
-+	if (!nfc->regs)
-+		return -EINVAL;
- 
--	nfc->regs = (void *)regs;
-+	ret = reset_get_bulk(dev, &rst_bulk);
-+	if (!ret)
-+		reset_deassert_bulk(&rst_bulk);
-+
-+	ret = clk_get_bulk(dev, &clk_bulk);
-+	if (!ret)
-+		clk_enable_bulk(&clk_bulk);
- 
- 	ret = sunxi_nfc_rst(nfc);
- 	if (ret)
--		goto err;
-+		return ret;
- 
--	ret = sunxi_nand_chips_init(node, nfc);
-+	ret = sunxi_nand_chips_init(dev_ofnode(dev), nfc);
- 	if (ret) {
--		dev_err(nfc->dev, "failed to init nand chips\n");
--		goto err;
-+		dev_err(dev, "failed to init nand chips\n");
-+		return ret;
- 	}
- 
--	return;
-+	return 0;
-+}
- 
--err:
--	kfree(nfc);
-+static const struct udevice_id sunxi_nand_ids[] = {
-+	{
-+		.compatible = "allwinner,sun4i-a10-nand",
-+	},
-+	{ }
-+};
-+
-+U_BOOT_DRIVER(sunxi_nand) = {
-+	.name		= "sunxi_nand",
-+	.id		= UCLASS_MTD,
-+	.of_match	= sunxi_nand_ids,
-+	.probe		= sunxi_nand_probe,
-+	.priv_auto	= sizeof(struct sunxi_nfc),
-+};
-+
-+void board_nand_init(void)
-+{
-+	struct udevice *dev;
-+	int ret;
-+
-+	ret = uclass_get_device_by_driver(UCLASS_MTD,
-+					  DM_DRIVER_GET(sunxi_nand), &dev);
-+	if (ret && ret != -ENODEV)
-+		pr_err("Failed to initialize sunxi NAND controller: %d\n", ret);
- }
- 
- MODULE_LICENSE("GPL v2");

+ 6 - 5
package/boot/uboot-d1/patches/0021-serial-ns16550-Enable-clocks-during-probe.patch → package/boot/uboot-d1/patches/0031-serial-ns16550-Enable-clocks-during-probe.patch

@@ -1,11 +1,12 @@
-From 8fde85b609273f8389178d4c0d066390a0e0773d Mon Sep 17 00:00:00 2001
+From 0617377a2555031f02a459b3451fa33ce53e9b74 Mon Sep 17 00:00:00 2001
 From: Samuel Holland <[email protected]>
 From: Samuel Holland <[email protected]>
 Date: Sun, 30 Oct 2022 14:56:10 -0500
 Date: Sun, 30 Oct 2022 14:56:10 -0500
-Subject: [PATCH 21/90] serial: ns16550: Enable clocks during probe
+Subject: [PATCH 33/68] serial: ns16550: Enable clocks during probe
 
 
 If the UART bus or baud clock has a gate, it must be enabled before the
 If the UART bus or baud clock has a gate, it must be enabled before the
 UART can be used.
 UART can be used.
 
 
+Reviewed-by: Stefan Roese <[email protected]>
 Signed-off-by: Samuel Holland <[email protected]>
 Signed-off-by: Samuel Holland <[email protected]>
 ---
 ---
  drivers/serial/ns16550.c | 5 +++++
  drivers/serial/ns16550.c | 5 +++++
@@ -13,15 +14,15 @@ Signed-off-by: Samuel Holland <[email protected]>
 
 
 --- a/drivers/serial/ns16550.c
 --- a/drivers/serial/ns16550.c
 +++ b/drivers/serial/ns16550.c
 +++ b/drivers/serial/ns16550.c
-@@ -506,6 +506,7 @@ int ns16550_serial_probe(struct udevice
+@@ -514,6 +514,7 @@ int ns16550_serial_probe(struct udevice
  	struct ns16550_plat *plat = dev_get_plat(dev);
  	struct ns16550_plat *plat = dev_get_plat(dev);
  	struct ns16550 *const com_port = dev_get_priv(dev);
  	struct ns16550 *const com_port = dev_get_priv(dev);
  	struct reset_ctl_bulk reset_bulk;
  	struct reset_ctl_bulk reset_bulk;
 +	struct clk_bulk clk_bulk;
 +	struct clk_bulk clk_bulk;
  	fdt_addr_t addr;
  	fdt_addr_t addr;
+ 	fdt_addr_t size;
  	int ret;
  	int ret;
- 
-@@ -524,6 +525,10 @@ int ns16550_serial_probe(struct udevice
+@@ -533,6 +534,10 @@ int ns16550_serial_probe(struct udevice
  	if (!ret)
  	if (!ret)
  		reset_deassert_bulk(&reset_bulk);
  		reset_deassert_bulk(&reset_bulk);
  
  

+ 0 - 31
package/boot/uboot-d1/patches/0032-sunxi-DT-H6-Add-USB3-to-Pine-H64-DTS.patch

@@ -1,31 +0,0 @@
-From 6fdd7e8d2758f69f5c8e3cb2a0f06da47c1f2cb4 Mon Sep 17 00:00:00 2001
-From: Samuel Holland <[email protected]>
-Date: Sat, 17 Apr 2021 14:21:45 -0500
-Subject: [PATCH 32/90] sunxi: DT: H6: Add USB3 to Pine H64 DTS
-
-Signed-off-by: Samuel Holland <[email protected]>
----
- arch/arm/dts/sun50i-h6-pine-h64.dts | 8 ++++++++
- 1 file changed, 8 insertions(+)
-
---- a/arch/arm/dts/sun50i-h6-pine-h64.dts
-+++ b/arch/arm/dts/sun50i-h6-pine-h64.dts
-@@ -89,6 +89,10 @@
- 	status = "okay";
- };
- 
-+&dwc3 {
-+	status = "okay";
-+};
-+
- &ehci0 {
- 	status = "okay";
- };
-@@ -332,3 +336,7 @@
- 	usb3_vbus-supply = <&reg_usb_vbus>;
- 	status = "okay";
- };
-+
-+&usb3phy {
-+	status = "okay";
-+};

+ 102 - 0
package/boot/uboot-d1/patches/0032-sunxi-binman-Move-BL31-and-SCP-firmware-addresses-to.patch

@@ -0,0 +1,102 @@
+From fa31297e5f79d6eb97aed3cf94326124b308e337 Mon Sep 17 00:00:00 2001
+From: Samuel Holland <[email protected]>
+Date: Sun, 22 Jan 2023 11:46:34 -0600
+Subject: [PATCH 34/68] sunxi: binman: Move BL31 and SCP firmware addresses to
+ Kconfig
+
+This is easier to read than the #ifdef staircase, provides better
+visibility into the memory map (alongside the other Kconfig
+definitions), and allows these addresses to be reused from code.
+
+Reviewed-by: Simon Glass <[email protected]>
+Signed-off-by: Samuel Holland <[email protected]>
+---
+ arch/arm/dts/sunxi-u-boot.dtsi | 24 +++++++-----------------
+ arch/arm/mach-sunxi/Kconfig    | 17 +++++++++++++++++
+ 2 files changed, 24 insertions(+), 17 deletions(-)
+
+--- a/arch/arm/dts/sunxi-u-boot.dtsi
++++ b/arch/arm/dts/sunxi-u-boot.dtsi
+@@ -1,15 +1,5 @@
+ #include <config.h>
+ 
+-#ifdef CONFIG_MACH_SUN50I_H6
+-#define BL31_ADDR 0x104000
+-#define  SCP_ADDR 0x114000
+-#elif defined(CONFIG_MACH_SUN50I_H616)
+-#define BL31_ADDR 0x40000000
+-#else
+-#define BL31_ADDR  0x44000
+-#define  SCP_ADDR  0x50000
+-#endif
+-
+ / {
+ 	aliases {
+ 		mmc0 = &mmc0;
+@@ -69,8 +59,8 @@
+ 					os = "arm-trusted-firmware";
+ 					arch = "arm64";
+ 					compression = "none";
+-					load = <BL31_ADDR>;
+-					entry = <BL31_ADDR>;
++					load = <CONFIG_SUNXI_BL31_BASE>;
++					entry = <CONFIG_SUNXI_BL31_BASE>;
+ 
+ 					atf-bl31 {
+ 						filename = "bl31.bin";
+@@ -78,13 +68,13 @@
+ 					};
+ 				};
+ 
+-#ifdef SCP_ADDR
++#if CONFIG_SUNXI_SCP_BASE
+ 				scp {
+ 					description = "SCP firmware";
+ 					type = "firmware";
+ 					arch = "or1k";
+ 					compression = "none";
+-					load = <SCP_ADDR>;
++					load = <CONFIG_SUNXI_SCP_BASE>;
+ 
+ 					scp {
+ 						filename = "scp.bin";
+@@ -106,10 +96,10 @@
+ 				@config-SEQ {
+ 					description = "NAME";
+ 					firmware = "atf";
+-#ifndef SCP_ADDR
+-					loadables = "uboot";
+-#else
++#if CONFIG_SUNXI_SCP_BASE
+ 					loadables = "scp", "uboot";
++#else
++					loadables = "uboot";
+ #endif
+ 					fdt = "fdt-SEQ";
+ 				};
+--- a/arch/arm/mach-sunxi/Kconfig
++++ b/arch/arm/mach-sunxi/Kconfig
+@@ -147,6 +147,23 @@ config SUNXI_RVBAR_ALTERNATIVE
+ 	for all other SoCs, so the content of the SRAM_VER_REG becomes
+ 	irrelevant there, and we can use the same code.
+ 
++config SUNXI_BL31_BASE
++	hex
++	default 0x00044000 if MACH_SUN50I || MACH_SUN50I_H5
++	default 0x00104000 if MACH_SUN50I_H6
++	default 0x40000000 if MACH_SUN50I_H616
++	default 0x0
++	help
++	  Address where BL31 (TF-A) is loaded, or zero if BL31 is not used.
++
++config SUNXI_SCP_BASE
++	hex
++	default 0x00050000 if MACH_SUN50I || MACH_SUN50I_H5
++	default 0x00114000 if MACH_SUN50I_H6
++	default 0x0
++	help
++	  Address where SCP firmware is loaded, or zero if it is not used.
++
+ config SUNXI_A64_TIMER_ERRATUM
+ 	bool
+ 

+ 90 - 0
package/boot/uboot-d1/patches/0033-sunxi-binman-Support-FIT-generation-for-32-bit-SoCs.patch

@@ -0,0 +1,90 @@
+From 50ec5566a9eb50288c7aca9d85182e152aaf47d9 Mon Sep 17 00:00:00 2001
+From: Samuel Holland <[email protected]>
+Date: Sun, 22 Jan 2023 11:57:42 -0600
+Subject: [PATCH 35/68] sunxi: binman: Support FIT generation for 32-bit SoCs
+
+Some 32-bit SoCs can use SCP firmware to implement additional PSCI
+functionality, such as system suspend. In order to load this firmware
+from SPL, we need to generate and use a FIT instead of a legacy image.
+
+Adjust the binman FIT definition so it does not rely on TF-A BL31, as
+this is not used on 32-bit SoCs. Instead, after loading the firmware,
+U-Boot proper is executed directly.
+
+Signed-off-by: Samuel Holland <[email protected]>
+---
+ arch/arm/dts/sunxi-u-boot.dtsi | 23 ++++++++++++++++++-----
+ 1 file changed, 18 insertions(+), 5 deletions(-)
+
+--- a/arch/arm/dts/sunxi-u-boot.dtsi
++++ b/arch/arm/dts/sunxi-u-boot.dtsi
+@@ -1,5 +1,11 @@
+ #include <config.h>
+ 
++#ifdef CONFIG_ARM64
++#define ARCH "arm64"
++#else
++#define ARCH "arm"
++#endif
++
+ / {
+ 	aliases {
+ 		mmc0 = &mmc0;
+@@ -34,30 +40,32 @@
+ 			filename = "spl/sunxi-spl.bin";
+ 		};
+ 
+-#ifdef CONFIG_ARM64
++#ifdef CONFIG_SPL_LOAD_FIT
+ 		fit {
+-			description = "Configuration to load ATF before U-Boot";
++			description = "Configuration to load U-Boot and firmware";
+ 			#address-cells = <1>;
+ 			fit,fdt-list = "of-list";
+ 
+ 			images {
+ 				uboot {
+-					description = "U-Boot (64-bit)";
++					description = "U-Boot";
+ 					type = "standalone";
+ 					os = "u-boot";
+-					arch = "arm64";
++					arch = ARCH;
+ 					compression = "none";
+ 					load = <CONFIG_TEXT_BASE>;
++					entry = <CONFIG_TEXT_BASE>;
+ 
+ 					u-boot-nodtb {
+ 					};
+ 				};
+ 
++#if CONFIG_SUNXI_BL31_BASE
+ 				atf {
+ 					description = "ARM Trusted Firmware";
+ 					type = "firmware";
+ 					os = "arm-trusted-firmware";
+-					arch = "arm64";
++					arch = ARCH;
+ 					compression = "none";
+ 					load = <CONFIG_SUNXI_BL31_BASE>;
+ 					entry = <CONFIG_SUNXI_BL31_BASE>;
+@@ -67,6 +75,7 @@
+ 						missing-msg = "atf-bl31-sunxi";
+ 					};
+ 				};
++#endif
+ 
+ #if CONFIG_SUNXI_SCP_BASE
+ 				scp {
+@@ -95,7 +104,11 @@
+ 
+ 				@config-SEQ {
+ 					description = "NAME";
++#if CONFIG_SUNXI_BL31_BASE
+ 					firmware = "atf";
++#else
++					firmware = "uboot";
++#endif
+ #if CONFIG_SUNXI_SCP_BASE
+ 					loadables = "scp", "uboot";
+ #else

+ 0 - 441
package/boot/uboot-d1/patches/0033-tools-mkimage-Add-Allwinner-TOC1-support.patch

@@ -1,441 +0,0 @@
-From ff0e952a3a380ba191375d5f68609cdbe026d535 Mon Sep 17 00:00:00 2001
-From: Samuel Holland <[email protected]>
-Date: Sat, 7 Aug 2021 19:55:20 -0500
-Subject: [PATCH 33/90] tools: mkimage: Add Allwinner TOC1 support
-
-TOC1 is an container format used by Allwinner's boot0 that can hold
-multiple images. It supports encryption and signatures, but that
-functionality is not implemented, only the basic "non-secure" subset.
-
-A config file is used to provide the list of data files to include. Its
-path is passed as the argument to "-d". It contains sections of the
-following form:
-
-  [name]
-  file = /path/to/file
-  addr = 0x12345678
-
-Specific well-known names, such as "dtb", "opensbi", and "u-boot", are
-used by the bootloader to distinguish the items inside the image.
-
-Cover-letter:
-tools: mkimage: Add Allwinner TOC1 support
-
-The SPL port for the Allwinner D1 RISC-V SoC will probably take a while
-longer than porting U-Boot proper, as none of the relevant drivers are
-set up for DM in SPL. In the meantime, we are using[1][2] a fork[3] of
-Allwinner's boot0 loader, which they also call "spl" in their BSP. boot0
-uses this TOC1 image format.
-
-The vendor tools for generating TOC1 images require a binary config file
-generated by their FEX compiler. Instead of trying to support that, I
-made up a simple human-readable config file format. I didn't see any
-existing platform-agnostic parser for multi-image containers in mkimage.
-
-I am sending this as RFC because it is only of temporary/limited use.
-It only works with one specific fork of boot0 which was modified to
-"behave" (the the original vendor version monkey-patches a custom header
-inside the U-Boot image during boot). So it will be obsolete once U-Boot
-SPL is ported. And it is Yet Another Image Format. On the other hand, it
-does work, and it is currently being used.
-
-[1]: https://linux-sunxi.org/Allwinner_Nezha#U-Boot
-[2]: https://fedoraproject.org/wiki/Architectures/RISC-V/Allwinner
-[3]: https://github.com/smaeul/sun20i_d1_spl
-END
-Series-prefix: RFC
-Series-to: sunxi
-Signed-off-by: Samuel Holland <[email protected]>
----
- boot/image.c          |   1 +
- include/image.h       |   1 +
- include/sunxi_image.h |  26 ++++
- tools/Makefile        |   1 +
- tools/sunxi_toc1.c    | 318 ++++++++++++++++++++++++++++++++++++++++++
- 5 files changed, 347 insertions(+)
- create mode 100644 tools/sunxi_toc1.c
-
---- a/boot/image.c
-+++ b/boot/image.c
-@@ -180,6 +180,7 @@ static const table_entry_t uimage_type[]
- 	{	IH_TYPE_COPRO, "copro", "Coprocessor Image"},
- 	{	IH_TYPE_SUNXI_EGON, "sunxi_egon",  "Allwinner eGON Boot Image" },
- 	{	IH_TYPE_SUNXI_TOC0, "sunxi_toc0",  "Allwinner TOC0 Boot Image" },
-+	{	IH_TYPE_SUNXI_TOC1, "sunxi_toc1",  "Allwinner TOC1 Boot Image" },
- 	{	-1,		    "",		  "",			},
- };
- 
---- a/include/image.h
-+++ b/include/image.h
-@@ -229,6 +229,7 @@ enum image_type_t {
- 	IH_TYPE_COPRO,			/* Coprocessor Image for remoteproc*/
- 	IH_TYPE_SUNXI_EGON,		/* Allwinner eGON Boot Image */
- 	IH_TYPE_SUNXI_TOC0,		/* Allwinner TOC0 Boot Image */
-+	IH_TYPE_SUNXI_TOC1,		/* Allwinner TOC1 Boot Image */
- 
- 	IH_TYPE_COUNT,			/* Number of image types */
- };
---- a/include/sunxi_image.h
-+++ b/include/sunxi_image.h
-@@ -116,4 +116,30 @@ struct __packed toc0_item_info {
- #define TOC0_ITEM_INFO_NAME_KEY		0x00010303
- #define TOC0_ITEM_INFO_END		"IIE;"
- 
-+struct __packed toc1_main_info {
-+	uint8_t name[16];
-+	__le32  magic;
-+	__le32  checksum;
-+	__le32  serial;
-+	__le32  status;
-+	__le32  num_items;
-+	__le32  length;
-+	__le32	major_version;
-+	__le32	minor_version;
-+	__le32	reserved[3];
-+	uint8_t end[4];
-+};
-+
-+struct __packed toc1_item_info {
-+	uint8_t name[64];
-+	__le32  offset;
-+	__le32  length;
-+	__le32  encryption;
-+	__le32  type;
-+	__le32  load_addr;
-+	__le32  index;
-+	__le32	reserved[69];
-+	uint8_t end[4];
-+};
-+
- #endif
---- a/tools/Makefile
-+++ b/tools/Makefile
-@@ -132,6 +132,7 @@ dumpimage-mkimage-objs := aisimage.o \
- 			$(ROCKCHIP_OBS) \
- 			socfpgaimage.o \
- 			sunxi_egon.o \
-+			sunxi_toc1.o \
- 			lib/crc16-ccitt.o \
- 			lib/hash-checksum.o \
- 			lib/sha1.o \
---- /dev/null
-+++ b/tools/sunxi_toc1.c
-@@ -0,0 +1,318 @@
-+// SPDX-License-Identifier: GPL-2.0+
-+/*
-+ * (C) Copyright 2018 Arm Ltd.
-+ * (C) Copyright 2020-2021 Samuel Holland <[email protected]>
-+ */
-+
-+#include <assert.h>
-+#include <stdint.h>
-+#include <stdio.h>
-+#include <stdlib.h>
-+#include <string.h>
-+
-+#include <image.h>
-+#include <sunxi_image.h>
-+
-+#include "imagetool.h"
-+#include "mkimage.h"
-+
-+#define SECTOR_SIZE			512
-+
-+struct item_desc {
-+	const char	*name;
-+	const char	*file;
-+	unsigned long	addr;
-+	long		length;
-+};
-+
-+static uint32_t toc1_header_length(uint32_t num_items)
-+{
-+	return ALIGN(sizeof(struct toc1_main_info) +
-+		     sizeof(struct toc1_item_info) * num_items, SECTOR_SIZE);
-+}
-+
-+static int toc1_parse_cfg(const char *file, struct item_desc **desc,
-+			  uint32_t *main_length, uint32_t *num_items)
-+{
-+	struct item_desc *descs = NULL;
-+	int ret = EXIT_FAILURE;
-+	FILE *cfg, *fp = NULL;
-+	uint32_t ndescs = 0;
-+	char *line = NULL;
-+	size_t len = 0;
-+
-+	*desc = NULL;
-+	*main_length = 0;
-+	*num_items = 0;
-+
-+	cfg = fopen(file, "r");
-+	if (!cfg)
-+		return ret;
-+
-+	while (getline(&line, &len, cfg) > 0) {
-+		char *end, *s;
-+
-+		if (line[0] == '[') {
-+			s = line + 1;
-+			end = strchr(s, ']');
-+			if (!end || end[1] != '\n')
-+				goto err;
-+			end[0] = '\0';
-+
-+			ndescs++;
-+			descs = reallocarray(descs, ndescs, sizeof(*descs));
-+			if (!descs)
-+				goto err;
-+
-+			descs[ndescs - 1].name = strdup(s);
-+		} else if (line[0] != '#' && line[0] != '\n') {
-+			s = strchr(line, '=');
-+			if (!s)
-+				goto err;
-+			while ((++s)[0] == ' ')
-+				;
-+			end = strchr(s, '\n');
-+			if (!end)
-+				goto err;
-+			end[0] = '\0';
-+
-+			if (!strncmp(line, "file", strlen("file"))) {
-+				fp = fopen(s, "rb");
-+				if (!fp)
-+					goto err;
-+				if (fseek(fp, 0, SEEK_END) < 0)
-+					goto err;
-+				descs[ndescs - 1].file = strdup(s);
-+				descs[ndescs - 1].length = ftell(fp);
-+				*main_length += ALIGN(descs[ndescs - 1].length,
-+						      SECTOR_SIZE);
-+				fclose(fp);
-+				fp = NULL;
-+			} else if (!strncmp(line, "addr", strlen("addr"))) {
-+				descs[ndescs - 1].addr = strtoul(s, NULL, 0);
-+			} else {
-+				goto err;
-+			}
-+		}
-+	}
-+
-+	*desc = descs;
-+	*main_length += toc1_header_length(ndescs);
-+	*num_items = ndescs;
-+
-+	ret = EXIT_SUCCESS;
-+
-+err:
-+	if (fp)
-+		fclose(fp);
-+	if (ret)
-+		free(descs);
-+	free(line);
-+	fclose(cfg);
-+
-+	return ret;
-+}
-+
-+static int toc1_create(uint8_t *buf, uint32_t len,
-+		       const struct item_desc *desc, uint32_t num_items)
-+{
-+	struct toc1_main_info *main = (void *)buf;
-+	struct toc1_item_info *item = (void *)(main + 1);
-+	uint32_t item_offset, item_length;
-+	uint32_t *buf32 = (void *)buf;
-+	int ret = EXIT_FAILURE;
-+	uint32_t checksum = 0;
-+	FILE *fp = NULL;
-+	int i;
-+
-+	/* Create the main TOC1 header. */
-+	main->magic	= cpu_to_le32(TOC0_MAIN_INFO_MAGIC);
-+	main->checksum	= cpu_to_le32(BROM_STAMP_VALUE);
-+	main->num_items	= cpu_to_le32(num_items);
-+	memcpy(main->end, TOC0_MAIN_INFO_END, sizeof(main->end));
-+
-+	item_offset = 0;
-+	item_length = toc1_header_length(num_items);
-+
-+	for (i = 0; i < num_items; ++i, ++item, ++desc) {
-+		item_offset = item_offset + item_length;
-+		item_length = desc->length;
-+
-+		/* Create the item header. */
-+		memcpy(item->name, desc->name,
-+		       strnlen(desc->name, sizeof(item->name)));
-+		item->offset = cpu_to_le32(item_offset);
-+		item->length = cpu_to_le32(item_length);
-+		item->load_addr = cpu_to_le32(desc->addr);
-+		memcpy(item->end, TOC0_ITEM_INFO_END, sizeof(item->end));
-+
-+		/* Read in the data. */
-+		fp = fopen(desc->file, "rb");
-+		if (!fp)
-+			goto err;
-+		if (!fread(buf + item_offset, item_length, 1, fp))
-+			goto err;
-+		fclose(fp);
-+		fp = NULL;
-+
-+		/* Pad the sectors with 0xff to be flash-friendly. */
-+		item_offset = item_offset + item_length;
-+		item_length = ALIGN(item_offset, SECTOR_SIZE) - item_offset;
-+		memset(buf + item_offset, 0xff, item_length);
-+	}
-+
-+	/* Fill in the total padded file length. */
-+	item_offset = item_offset + item_length;
-+	main->length = cpu_to_le32(item_offset);
-+
-+	/* Verify enough space was provided when creating the image. */
-+	assert(len >= item_offset);
-+
-+	/* Calculate the checksum. Yes, it's that simple. */
-+	for (i = 0; i < item_offset / 4; ++i)
-+		checksum += le32_to_cpu(buf32[i]);
-+	main->checksum = cpu_to_le32(checksum);
-+
-+	ret = EXIT_SUCCESS;
-+
-+err:
-+	if (fp)
-+		fclose(fp);
-+
-+	return ret;
-+}
-+
-+static int toc1_verify(const uint8_t *buf, uint32_t len)
-+{
-+	const struct toc1_main_info *main = (void *)buf;
-+	const struct toc1_item_info *item = (void *)(main + 1);
-+	uint32_t checksum = BROM_STAMP_VALUE;
-+	uint32_t main_length, num_items;
-+	uint32_t *buf32 = (void *)buf;
-+	int ret = EXIT_FAILURE;
-+	int i;
-+
-+	num_items   = le32_to_cpu(main->num_items);
-+	main_length = le32_to_cpu(main->length);
-+
-+	if (len < main_length || main_length < toc1_header_length(num_items))
-+		goto err;
-+
-+	/* Verify the main header. */
-+	if (le32_to_cpu(main->magic) != TOC0_MAIN_INFO_MAGIC)
-+		goto err;
-+	/* Verify the checksum without modifying the buffer. */
-+	for (i = 0; i < main_length / 4; ++i)
-+		checksum += le32_to_cpu(buf32[i]);
-+	if (checksum != 2 * le32_to_cpu(main->checksum))
-+		goto err;
-+	/* The length must be at least 512 byte aligned. */
-+	if (main_length % SECTOR_SIZE)
-+		goto err;
-+	if (memcmp(main->end, TOC0_MAIN_INFO_END, sizeof(main->end)))
-+		goto err;
-+
-+	/* Verify each item header. */
-+	for (i = 0; i < num_items; ++i, ++item)
-+		if (memcmp(item->end, TOC0_ITEM_INFO_END, sizeof(item->end)))
-+			goto err;
-+
-+	ret = EXIT_SUCCESS;
-+
-+err:
-+	return ret;
-+}
-+
-+static int toc1_check_params(struct image_tool_params *params)
-+{
-+	if (!params->dflag)
-+		return -EINVAL;
-+
-+	return 0;
-+}
-+
-+static int toc1_verify_header(unsigned char *buf, int image_size,
-+			      struct image_tool_params *params)
-+{
-+	return toc1_verify(buf, image_size);
-+}
-+
-+static void toc1_print_header(const void *buf)
-+{
-+	const struct toc1_main_info *main = buf;
-+	const struct toc1_item_info *item = (void *)(main + 1);
-+	uint32_t head_length, main_length, num_items;
-+	uint32_t item_offset, item_length, item_addr;
-+	int i;
-+
-+	num_items   = le32_to_cpu(main->num_items);
-+	head_length = sizeof(*main) + num_items * sizeof(*item);
-+	main_length = le32_to_cpu(main->length);
-+
-+	printf("Allwinner TOC1 Image\n"
-+	       "Size: %d bytes\n"
-+	       "Contents: %d items\n"
-+	       " 00000000:%08x Headers\n",
-+	       main_length, num_items, head_length);
-+
-+	for (i = 0; i < num_items; ++i, ++item) {
-+		item_offset = le32_to_cpu(item->offset);
-+		item_length = le32_to_cpu(item->length);
-+		item_addr   = le32_to_cpu(item->load_addr);
-+
-+		printf(" %08x:%08x => %08x %s\n",
-+		       item_offset, item_length, item_addr, item->name);
-+	}
-+}
-+
-+static void toc1_set_header(void *buf, struct stat *sbuf, int ifd,
-+			    struct image_tool_params *params)
-+{
-+	/* Image is already written below. */
-+}
-+
-+static int toc1_check_image_type(uint8_t type)
-+{
-+	return type == IH_TYPE_SUNXI_TOC1 ? 0 : 1;
-+}
-+
-+static int toc1_vrec_header(struct image_tool_params *params,
-+			    struct image_type_params *tparams)
-+{
-+	uint32_t main_length, num_items;
-+	struct item_desc *desc;
-+	int ret;
-+
-+	/* This "header" contains the entire image. */
-+	params->skipcpy = 1;
-+
-+	ret = toc1_parse_cfg(params->datafile, &desc, &main_length, &num_items);
-+	if (ret)
-+		exit(ret);
-+
-+	tparams->header_size = main_length;
-+	tparams->hdr = calloc(tparams->header_size, 1);
-+	if (!tparams->hdr)
-+		exit(ret);
-+
-+	ret = toc1_create(tparams->hdr, tparams->header_size, desc, num_items);
-+	if (ret)
-+		exit(ret);
-+
-+	return 0;
-+}
-+
-+U_BOOT_IMAGE_TYPE(
-+	sunxi_toc1,
-+	"Allwinner TOC1 Boot Image support",
-+	0,
-+	NULL,
-+	toc1_check_params,
-+	toc1_verify_header,
-+	toc1_print_header,
-+	toc1_set_header,
-+	NULL,
-+	toc1_check_image_type,
-+	NULL,
-+	toc1_vrec_header
-+);

+ 0 - 33
package/boot/uboot-d1/patches/0034-phy-sun4i-usb-Do-not-drive-VBUS-with-external-VBUS-p.patch

@@ -1,33 +0,0 @@
-From 79f7d883d980beea9989d06f9fba4fcc0430176a Mon Sep 17 00:00:00 2001
-From: Samuel Holland <[email protected]>
-Date: Thu, 14 Jul 2022 22:14:38 -0500
-Subject: [PATCH 34/90] phy: sun4i-usb: Do not drive VBUS with external VBUS
- present
-
-It is possible to use host-side USB with externally-provided VBUS. For
-example, some USB OTG cables have an extra power input which powers
-both the board and the USB peripheral.
-
-To support this setup, skip enabling the VBUS switch/regulator if VBUS
-voltage is already present. This behavior matches the Linux PHY driver.
-
-Signed-off-by: Samuel Holland <[email protected]>
----
- drivers/phy/allwinner/phy-sun4i-usb.c | 6 ++++++
- 1 file changed, 6 insertions(+)
-
---- a/drivers/phy/allwinner/phy-sun4i-usb.c
-+++ b/drivers/phy/allwinner/phy-sun4i-usb.c
-@@ -220,6 +220,12 @@ static int sun4i_usb_phy_power_on(struct
- 		initial_usb_scan_delay = 0;
- 	}
- 
-+	/* For phy0 only turn on Vbus if we don't have an ext. Vbus */
-+	if (phy->id == 0 && sun4i_usb_phy_vbus_detect(phy)) {
-+		dev_warn(phy->dev, "External vbus detected, not enabling our own vbus\n");
-+		return 0;
-+	}
-+
- 	if (usb_phy->vbus) {
- 		ret = regulator_set_enable(usb_phy->vbus, true);
- 		if (ret && ret != -ENOSYS)

+ 38 - 0
package/boot/uboot-d1/patches/0034-sunxi-Enable-SPL-FIT-loading-for-32-bit-SoCs.patch

@@ -0,0 +1,38 @@
+From 11b7f4963a4e87ca2c71a8e9c9767b82b024508b Mon Sep 17 00:00:00 2001
+From: Samuel Holland <[email protected]>
+Date: Sun, 22 Jan 2023 12:19:10 -0600
+Subject: [PATCH 36/68] sunxi: Enable SPL FIT loading for 32-bit SoCs
+
+Now that 32-bit SoCs can load U-Boot proper (and possibly other
+firmware) from a FIT, use this method by default. SPL_FIT_IMAGE_TINY is
+required to stay within the 24 or 32 KiB SPL size limit on early SoCs;
+for consistency, enable it everywhere.
+
+Signed-off-by: Samuel Holland <[email protected]>
+---
+ arch/arm/Kconfig   | 1 +
+ common/spl/Kconfig | 3 +--
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+--- a/board/sunxi/Kconfig
++++ b/board/sunxi/Kconfig
+@@ -35,6 +35,7 @@ config BOARD_SUNXI
+ 	imply SPL_GPIO
+ 	imply SPL_LIBCOMMON_SUPPORT
+ 	imply SPL_LIBGENERIC_SUPPORT
++	imply SPL_LOAD_FIT
+ 	imply SPL_MMC if MMC
+ 	imply SPL_POWER
+ 	imply SPL_SERIAL
+--- a/common/spl/Kconfig
++++ b/common/spl/Kconfig
+@@ -562,8 +562,7 @@ config SYS_MMCSD_RAW_MODE_EMMC_BOOT_PART
+ config SPL_FIT_IMAGE_TINY
+ 	bool "Remove functionality from SPL FIT loading to reduce size"
+ 	depends on SPL_FIT
+-	default y if MACH_SUN50I || MACH_SUN50I_H5 || SUN50I_GEN_H6
+-	default y if ARCH_IMX8M || ARCH_IMX9
++	default y if ARCH_IMX8M || ARCH_IMX9 || ARCH_SUNXI
+ 	help
+ 	  Enable this to reduce the size of the FIT image loading code
+ 	  in SPL, if space for the SPL binary is very tight.

+ 0 - 163
package/boot/uboot-d1/patches/0035-mtd-nand-sunxi-Pass-the-device-to-the-init-function.patch

@@ -1,163 +0,0 @@
-From 4bc5cec5361dd6a2ae3bd044c79a4b5227bb9627 Mon Sep 17 00:00:00 2001
-From: Samuel Holland <[email protected]>
-Date: Mon, 16 May 2022 00:47:32 -0500
-Subject: [PATCH 35/90] mtd: nand: sunxi: Pass the device to the init function
-
-This more closely matches the U-Boot driver to the Linux version.
-
-Series-to: sunxi
-
-Cover-letter:
-mtd: nand: sunxi: Convert to devicetree and the driver model
-This series converts the sunxi NAND driver to get its resources (clocks,
-resets, pins) from the devicetree, and probe using the driver model.
-
-In addition to the immediate cleanup, this allows backporting more
-patches (bugfixes, newer SoC support) from the Linux driver.
-END
-
-Signed-off-by: Samuel Holland <[email protected]>
----
- drivers/mtd/nand/raw/sunxi_nand.c | 39 ++++++++++++++++---------------
- 1 file changed, 20 insertions(+), 19 deletions(-)
-
---- a/drivers/mtd/nand/raw/sunxi_nand.c
-+++ b/drivers/mtd/nand/raw/sunxi_nand.c
-@@ -1604,7 +1604,8 @@ static int sunxi_nand_ecc_init(struct mt
- 	return 0;
- }
- 
--static int sunxi_nand_chip_init(ofnode np, struct sunxi_nfc *nfc, int devnum)
-+static int sunxi_nand_chip_init(struct udevice *dev, struct sunxi_nfc *nfc,
-+				ofnode np, int devnum)
- {
- 	const struct nand_sdr_timings *timings;
- 	struct sunxi_nand_chip *chip;
-@@ -1620,7 +1621,7 @@ static int sunxi_nand_chip_init(ofnode n
- 
- 	nsels /= sizeof(u32);
- 	if (!nsels || nsels > 8) {
--		dev_err(nfc->dev, "invalid reg property size\n");
-+		dev_err(dev, "invalid reg property size\n");
- 		return -EINVAL;
- 	}
- 
-@@ -1628,7 +1629,7 @@ static int sunxi_nand_chip_init(ofnode n
- 		       (nsels * sizeof(struct sunxi_nand_chip_sel)),
- 		       GFP_KERNEL);
- 	if (!chip) {
--		dev_err(nfc->dev, "could not allocate chip\n");
-+		dev_err(dev, "could not allocate chip\n");
- 		return -ENOMEM;
- 	}
- 
-@@ -1638,19 +1639,19 @@ static int sunxi_nand_chip_init(ofnode n
- 	for (i = 0; i < nsels; i++) {
- 		ret = ofnode_read_u32_index(np, "reg", i, &tmp);
- 		if (ret) {
--			dev_err(nfc->dev, "could not retrieve reg property: %d\n",
-+			dev_err(dev, "could not retrieve reg property: %d\n",
- 				ret);
- 			return ret;
- 		}
- 
- 		if (tmp > NFC_MAX_CS) {
--			dev_err(nfc->dev,
-+			dev_err(dev,
- 				"invalid reg value: %u (max CS = 7)\n", tmp);
- 			return -EINVAL;
- 		}
- 
- 		if (test_and_set_bit(tmp, &nfc->assigned_cs)) {
--			dev_err(nfc->dev, "CS %d already assigned\n", tmp);
-+			dev_err(dev, "CS %d already assigned\n", tmp);
- 			return -EINVAL;
- 		}
- 
-@@ -1661,9 +1662,9 @@ static int sunxi_nand_chip_init(ofnode n
- 			chip->sels[i].rb.type = RB_NATIVE;
- 			chip->sels[i].rb.info.nativeid = tmp;
- 		} else {
--			ret = gpio_request_by_name_nodev(np, "rb-gpios", i,
--							 &chip->sels[i].rb.info.gpio,
--							 GPIOD_IS_IN);
-+			ret = gpio_request_by_name(dev, "rb-gpios", i,
-+						   &chip->sels[i].rb.info.gpio,
-+						   GPIOD_IS_IN);
- 			if (ret)
- 				chip->sels[i].rb.type = RB_GPIO;
- 			else
-@@ -1674,7 +1675,7 @@ static int sunxi_nand_chip_init(ofnode n
- 	timings = onfi_async_timing_mode_to_sdr_timings(0);
- 	if (IS_ERR(timings)) {
- 		ret = PTR_ERR(timings);
--		dev_err(nfc->dev,
-+		dev_err(dev,
- 			"could not retrieve timings for ONFI mode 0: %d\n",
- 			ret);
- 		return ret;
-@@ -1682,7 +1683,7 @@ static int sunxi_nand_chip_init(ofnode n
- 
- 	ret = sunxi_nand_chip_set_timings(nfc, chip, timings);
- 	if (ret) {
--		dev_err(nfc->dev, "could not configure chip timings: %d\n", ret);
-+		dev_err(dev, "could not configure chip timings: %d\n", ret);
- 		return ret;
- 	}
- 
-@@ -1717,25 +1718,25 @@ static int sunxi_nand_chip_init(ofnode n
- 
- 	ret = sunxi_nand_chip_init_timings(nfc, chip);
- 	if (ret) {
--		dev_err(nfc->dev, "could not configure chip timings: %d\n", ret);
-+		dev_err(dev, "could not configure chip timings: %d\n", ret);
- 		return ret;
- 	}
- 
- 	ret = sunxi_nand_ecc_init(mtd, &nand->ecc);
- 	if (ret) {
--		dev_err(nfc->dev, "ECC init failed: %d\n", ret);
-+		dev_err(dev, "ECC init failed: %d\n", ret);
- 		return ret;
- 	}
- 
- 	ret = nand_scan_tail(mtd);
- 	if (ret) {
--		dev_err(nfc->dev, "nand_scan_tail failed: %d\n", ret);
-+		dev_err(dev, "nand_scan_tail failed: %d\n", ret);
- 		return ret;
- 	}
- 
- 	ret = nand_register(devnum, mtd);
- 	if (ret) {
--		dev_err(nfc->dev, "failed to register mtd device: %d\n", ret);
-+		dev_err(dev, "failed to register mtd device: %d\n", ret);
- 		return ret;
- 	}
- 
-@@ -1744,13 +1745,13 @@ static int sunxi_nand_chip_init(ofnode n
- 	return 0;
- }
- 
--static int sunxi_nand_chips_init(ofnode node, struct sunxi_nfc *nfc)
-+static int sunxi_nand_chips_init(struct udevice *dev, struct sunxi_nfc *nfc)
- {
- 	ofnode nand_np;
- 	int ret, i = 0;
- 
--	ofnode_for_each_subnode(nand_np, node) {
--		ret = sunxi_nand_chip_init(nand_np, nfc, i++);
-+	dev_for_each_subnode(nand_np, dev) {
-+		ret = sunxi_nand_chip_init(dev, nfc, nand_np, i++);
- 		if (ret)
- 			return ret;
- 	}
-@@ -1802,7 +1803,7 @@ static int sunxi_nand_probe(struct udevi
- 	if (ret)
- 		return ret;
- 
--	ret = sunxi_nand_chips_init(dev_ofnode(dev), nfc);
-+	ret = sunxi_nand_chips_init(dev, nfc);
- 	if (ret) {
- 		dev_err(dev, "failed to init nand chips\n");
- 		return ret;

+ 34 - 29
package/boot/uboot-d1/patches/0007-power-regulator-Add-a-driver-for-the-AXP-PMIC-drivev.patch → package/boot/uboot-d1/patches/0035-power-regulator-Add-a-driver-for-the-AXP-PMIC-drivev.patch

@@ -1,60 +1,65 @@
-From 25434a394705d2de92c50981e31347db4074204a Mon Sep 17 00:00:00 2001
+From 967499870f79fb2f0cfa006186d44ba1330eb2e2 Mon Sep 17 00:00:00 2001
 From: Samuel Holland <[email protected]>
 From: Samuel Holland <[email protected]>
 Date: Thu, 26 Aug 2021 21:32:15 -0500
 Date: Thu, 26 Aug 2021 21:32:15 -0500
-Subject: [PATCH 07/90] power: regulator: Add a driver for the AXP PMIC
+Subject: [PATCH 43/68] power: regulator: Add a driver for the AXP PMIC
  drivevbus
  drivevbus
 
 
-The first AXP regulator converted to use the regulator uclass is the
-drivevbus switch, since it is used by the USB PHY driver.
+AXP PMICs have a pin which can either report the USB VBUS state, or
+driving a regulator that supplies USB VBUS. Add a regulator driver for
+controlling this pin. The selection between input and output is done via
+the x-powers,drive-vbus-en pin on the PMIC (parent) node.
 
 
 Signed-off-by: Samuel Holland <[email protected]>
 Signed-off-by: Samuel Holland <[email protected]>
 ---
 ---
- drivers/power/regulator/Kconfig         | 14 ++++++
+ drivers/power/pmic/axp.c                |  1 +
+ drivers/power/regulator/Kconfig         |  7 +++
  drivers/power/regulator/Makefile        |  1 +
  drivers/power/regulator/Makefile        |  1 +
- drivers/power/regulator/axp_regulator.c | 58 +++++++++++++++++++++++++
- 3 files changed, 73 insertions(+)
- create mode 100644 drivers/power/regulator/axp_regulator.c
+ drivers/power/regulator/axp_drivevbus.c | 57 +++++++++++++++++++++++++
+ 4 files changed, 66 insertions(+)
+ create mode 100644 drivers/power/regulator/axp_drivevbus.c
 
 
+--- a/drivers/power/pmic/axp.c
++++ b/drivers/power/pmic/axp.c
+@@ -51,6 +51,7 @@ static const struct pmic_child_info axp_
+ 	{ "cldo",	"axp_regulator" },
+ 	{ "dc",		"axp_regulator" },
+ 	{ "dldo",	"axp_regulator" },
++	{ "drivevbus",	"axp_drivevbus" },
+ 	{ "eldo",	"axp_regulator" },
+ 	{ "fldo",	"axp_regulator" },
+ 	{ "ldo",	"axp_regulator" },
 --- a/drivers/power/regulator/Kconfig
 --- a/drivers/power/regulator/Kconfig
 +++ b/drivers/power/regulator/Kconfig
 +++ b/drivers/power/regulator/Kconfig
-@@ -43,6 +43,20 @@ config REGULATOR_AS3722
- 	  but does not yet support change voltages. Currently this must be
- 	  done using direct register writes to the PMIC.
+@@ -57,6 +57,13 @@ config SPL_REGULATOR_AXP
+ 	  Enable support in SPL for the regulators (DCDCs, LDOs) in the
+ 	  X-Powers AXP152, AXP2xx, and AXP8xx PMICs.
  
  
-+config REGULATOR_AXP
-+	bool "Enable driver for X-Powers AXP PMIC regulators"
++config REGULATOR_AXP_DRIVEVBUS
++	bool "Enable driver for X-Powers AXP PMIC drivevbus"
 +	depends on DM_REGULATOR && PMIC_AXP
 +	depends on DM_REGULATOR && PMIC_AXP
 +	help
 +	help
-+	  Enable support for the regulators (DCDCs, LDOs) in the
-+	  X-Powers AXP152, AXP2xx, and AXP8xx PMICs.
-+
-+config SPL_REGULATOR_AXP
-+	bool "Enable driver for X-Powers AXP PMIC regulators in SPL"
-+	depends on SPL_DM_REGULATOR && SPL_PMIC_AXP
-+	help
-+	  Enable support in SPL for the regulators (DCDCs, LDOs) in the
-+	  X-Powers AXP152, AXP2xx, and AXP8xx PMICs.
++	  Enable support for sensing or driving the USB VBUS on
++	  X-Powers AXP2xx and AXP8xx PMICs.
 +
 +
  config REGULATOR_AXP_USB_POWER
  config REGULATOR_AXP_USB_POWER
  	bool "Enable driver for X-Powers AXP PMIC USB power supply"
  	bool "Enable driver for X-Powers AXP PMIC USB power supply"
  	depends on DM_REGULATOR && PMIC_AXP
  	depends on DM_REGULATOR && PMIC_AXP
 --- a/drivers/power/regulator/Makefile
 --- a/drivers/power/regulator/Makefile
 +++ b/drivers/power/regulator/Makefile
 +++ b/drivers/power/regulator/Makefile
-@@ -7,6 +7,7 @@
- obj-$(CONFIG_$(SPL_)DM_REGULATOR) += regulator-uclass.o
+@@ -8,6 +8,7 @@ obj-$(CONFIG_$(SPL_)DM_REGULATOR) += reg
  obj-$(CONFIG_REGULATOR_ACT8846) += act8846.o
  obj-$(CONFIG_REGULATOR_ACT8846) += act8846.o
  obj-$(CONFIG_REGULATOR_AS3722)	+= as3722_regulator.o
  obj-$(CONFIG_REGULATOR_AS3722)	+= as3722_regulator.o
-+obj-$(CONFIG_$(SPL_)REGULATOR_AXP) += axp_regulator.o
+ obj-$(CONFIG_$(SPL_)REGULATOR_AXP) += axp_regulator.o
++obj-$(CONFIG_$(SPL_)REGULATOR_AXP_DRIVEVBUS) += axp_drivevbus.o
  obj-$(CONFIG_$(SPL_)REGULATOR_AXP_USB_POWER) += axp_usb_power.o
  obj-$(CONFIG_$(SPL_)REGULATOR_AXP_USB_POWER) += axp_usb_power.o
  obj-$(CONFIG_$(SPL_)DM_REGULATOR_DA9063) += da9063.o
  obj-$(CONFIG_$(SPL_)DM_REGULATOR_DA9063) += da9063.o
- obj-$(CONFIG_DM_REGULATOR_MAX77686) += max77686.o
+ obj-$(CONFIG_$(SPL_)DM_REGULATOR_MAX77663) += max77663_regulator.o
 --- /dev/null
 --- /dev/null
-+++ b/drivers/power/regulator/axp_regulator.c
-@@ -0,0 +1,58 @@
++++ b/drivers/power/regulator/axp_drivevbus.c
+@@ -0,0 +1,57 @@
 +// SPDX-License-Identifier: GPL-2.0+
 +// SPDX-License-Identifier: GPL-2.0+
 +
 +
 +#include <dm.h>
 +#include <dm.h>
-+#include <errno.h>
 +#include <power/pmic.h>
 +#include <power/pmic.h>
 +#include <power/regulator.h>
 +#include <power/regulator.h>
 +
 +

+ 0 - 120
package/boot/uboot-d1/patches/0036-sunxi-Enable-PHY_SUN4I_USB-by-default-for-new-SoCs.patch

@@ -1,120 +0,0 @@
-From b13140a914199dcdd80331fef6f33d47f008f1b4 Mon Sep 17 00:00:00 2001
-From: Samuel Holland <[email protected]>
-Date: Fri, 5 Aug 2022 23:40:22 -0500
-Subject: [PATCH 36/90] sunxi: Enable PHY_SUN4I_USB by default for new SoCs
-
-With one exception (sun9i), all sunxi SoCs released to date use variants
-of the same USB PHY. Instead of requiring each new SoC to duplicate the
-PHY driver selection, enable it by default.
-
-Series-to: Andre Przywara <[email protected]>
-Series-to: Jagan Teki <[email protected]>
-
-Signed-off-by: Samuel Holland <[email protected]>
----
- arch/arm/mach-sunxi/Kconfig   | 11 -----------
- drivers/phy/allwinner/Kconfig |  3 ++-
- 2 files changed, 2 insertions(+), 12 deletions(-)
-
---- a/arch/arm/mach-sunxi/Kconfig
-+++ b/arch/arm/mach-sunxi/Kconfig
-@@ -162,7 +162,6 @@ endif
- 
- config MACH_SUNXI_H3_H5
- 	bool
--	select PHY_SUN4I_USB
- 	select SUNXI_DE2
- 	select SUNXI_DRAM_DW
- 	select SUNXI_DRAM_DW_32BIT
-@@ -191,7 +190,6 @@ config MACH_SUNIV
- config MACH_SUN4I
- 	bool "sun4i (Allwinner A10)"
- 	select CPU_V7A
--	select PHY_SUN4I_USB
- 	select DRAM_SUN4I
- 	select SUNXI_GEN_SUN4I
- 	select SUPPORT_SPL
-@@ -202,7 +200,6 @@ config MACH_SUN5I
- 	bool "sun5i (Allwinner A13)"
- 	select CPU_V7A
- 	select DRAM_SUN4I
--	select PHY_SUN4I_USB
- 	select SUNXI_GEN_SUN4I
- 	select SUPPORT_SPL
- 	imply SPL_SYS_I2C_LEGACY
-@@ -216,7 +213,6 @@ config MACH_SUN6I
- 	select ARCH_SUPPORT_PSCI
- 	select SPL_ARMV7_SET_CORTEX_SMPEN
- 	select DRAM_SUN6I
--	select PHY_SUN4I_USB
- 	select SPL_I2C
- 	select SUN6I_PRCM
- 	select SUNXI_GEN_SUN6I
-@@ -232,7 +228,6 @@ config MACH_SUN7I
- 	select ARCH_SUPPORT_PSCI
- 	select SPL_ARMV7_SET_CORTEX_SMPEN
- 	select DRAM_SUN4I
--	select PHY_SUN4I_USB
- 	select SUNXI_GEN_SUN4I
- 	select SUPPORT_SPL
- 	select ARMV7_BOOT_SEC_DEFAULT if OLD_SUNXI_KERNEL_COMPAT
-@@ -246,7 +241,6 @@ config MACH_SUN8I_A23
- 	select CPU_V7_HAS_VIRT
- 	select ARCH_SUPPORT_PSCI
- 	select DRAM_SUN8I_A23
--	select PHY_SUN4I_USB
- 	select SPL_I2C
- 	select SUNXI_GEN_SUN6I
- 	select SUPPORT_SPL
-@@ -260,7 +254,6 @@ config MACH_SUN8I_A33
- 	select CPU_V7_HAS_VIRT
- 	select ARCH_SUPPORT_PSCI
- 	select DRAM_SUN8I_A33
--	select PHY_SUN4I_USB
- 	select SPL_I2C
- 	select SUNXI_GEN_SUN6I
- 	select SUPPORT_SPL
-@@ -271,7 +264,6 @@ config MACH_SUN8I_A83T
- 	bool "sun8i (Allwinner A83T)"
- 	select CPU_V7A
- 	select DRAM_SUN8I_A83T
--	select PHY_SUN4I_USB
- 	select SPL_I2C
- 	select SUNXI_GEN_SUN6I
- 	select MMC_SUNXI_HAS_NEW_MODE
-@@ -299,7 +291,6 @@ config MACH_SUN8I_R40
- 	select SUPPORT_SPL
- 	select SUNXI_DRAM_DW
- 	select SUNXI_DRAM_DW_32BIT
--	select PHY_SUN4I_USB
- 	imply SPL_SYS_I2C_LEGACY
- 
- config MACH_SUN8I_V3S
-@@ -327,7 +318,6 @@ config MACH_SUN9I
- config MACH_SUN50I
- 	bool "sun50i (Allwinner A64)"
- 	select ARM64
--	select PHY_SUN4I_USB
- 	select SUN6I_PRCM
- 	select SUNXI_DE2
- 	select SUNXI_GEN_SUN6I
-@@ -350,7 +340,6 @@ config MACH_SUN50I_H5
- config MACH_SUN50I_H6
- 	bool "sun50i (Allwinner H6)"
- 	select ARM64
--	select PHY_SUN4I_USB
- 	select DRAM_SUN50I_H6
- 	select SUN50I_GEN_H6
- 
---- a/drivers/phy/allwinner/Kconfig
-+++ b/drivers/phy/allwinner/Kconfig
-@@ -3,7 +3,8 @@
- #
- config PHY_SUN4I_USB
- 	bool "Allwinner Sun4I USB PHY driver"
--	depends on ARCH_SUNXI
-+	depends on ARCH_SUNXI && !MACH_SUN9I
-+	default y
- 	select DM_REGULATOR
- 	select PHY
- 	help

+ 222 - 0
package/boot/uboot-d1/patches/0036-sunxi-Enable-PMIC-drivevbus-regulator-support-for-US.patch

@@ -0,0 +1,222 @@
+From 1c71f4fd1b2b3d7145780dc5516e4d6f38539b1c Mon Sep 17 00:00:00 2001
+From: Samuel Holland <[email protected]>
+Date: Thu, 26 Aug 2021 21:05:33 -0500
+Subject: [PATCH 44/68] sunxi: Enable PMIC drivevbus regulator support for USB
+ supplies
+
+On many boards, the USB ports are powered by the PMIC's "drivevbus"
+regulator. In preparation for switching the USB PHY driver to use the
+regulator uclass instead of a virtual GPIO pin, ensure these boards
+have AXP PMIC regulator support enabled.
+
+Signed-off-by: Samuel Holland <[email protected]>
+---
+ configs/A33-OLinuXino_defconfig           | 1 +
+ configs/Cubieboard4_defconfig             | 1 +
+ configs/Cubietruck_plus_defconfig         | 1 +
+ configs/MSI_Primo81_defconfig             | 1 +
+ configs/Merrii_A80_Optimus_defconfig      | 1 +
+ configs/Sinovoip_BPI_M3_defconfig         | 1 +
+ configs/Yones_Toptech_BS1078_V2_defconfig | 1 +
+ configs/colorfly_e708_q1_defconfig        | 1 +
+ configs/ga10h_v1_1_defconfig              | 1 +
+ configs/gt90h_v4_defconfig                | 1 +
+ configs/iNet_D978_rev2_defconfig          | 1 +
+ configs/inet86dz_defconfig                | 1 +
+ configs/inet_q972_defconfig               | 1 +
+ configs/polaroid_mid2407pxe03_defconfig   | 1 +
+ configs/polaroid_mid2809pxe04_defconfig   | 1 +
+ configs/q8_a23_tablet_800x480_defconfig   | 1 +
+ configs/q8_a33_tablet_1024x600_defconfig  | 1 +
+ configs/q8_a33_tablet_800x480_defconfig   | 1 +
+ configs/tbs_a711_defconfig                | 1 +
+ 19 files changed, 19 insertions(+)
+
+--- a/configs/A33-OLinuXino_defconfig
++++ b/configs/A33-OLinuXino_defconfig
+@@ -14,6 +14,7 @@ CONFIG_VIDEO_LCD_DCLK_PHASE=0
+ CONFIG_VIDEO_LCD_BL_EN="PB2"
+ CONFIG_VIDEO_LCD_BL_PWM="PH0"
+ # CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set
++CONFIG_REGULATOR_AXP_DRIVEVBUS=y
+ CONFIG_REGULATOR_AXP_USB_POWER=y
+ CONFIG_AXP_DCDC1_VOLT=3300
+ CONFIG_USB_MUSB_HOST=y
+--- a/configs/Cubieboard4_defconfig
++++ b/configs/Cubieboard4_defconfig
+@@ -11,5 +11,6 @@ CONFIG_USB1_VBUS_PIN="PH14"
+ CONFIG_USB3_VBUS_PIN="PH15"
+ CONFIG_AXP_GPIO=y
+ CONFIG_SYS_I2C_SUN8I_RSB=y
++CONFIG_REGULATOR_AXP_DRIVEVBUS=y
+ CONFIG_REGULATOR_AXP_USB_POWER=y
+ CONFIG_AXP809_POWER=y
+--- a/configs/Cubietruck_plus_defconfig
++++ b/configs/Cubietruck_plus_defconfig
+@@ -21,6 +21,7 @@ CONFIG_SYS_I2C_SLAVE=0x7f
+ CONFIG_SYS_I2C_SPEED=400000
+ CONFIG_PHY_REALTEK=y
+ CONFIG_SUN8I_EMAC=y
++CONFIG_REGULATOR_AXP_DRIVEVBUS=y
+ CONFIG_REGULATOR_AXP_USB_POWER=y
+ CONFIG_AXP_DLDO3_VOLT=2500
+ CONFIG_AXP_DLDO4_VOLT=3300
+--- a/configs/MSI_Primo81_defconfig
++++ b/configs/MSI_Primo81_defconfig
+@@ -12,6 +12,7 @@ CONFIG_VIDEO_LCD_BL_EN="PA25"
+ CONFIG_VIDEO_LCD_BL_PWM="PH13"
+ CONFIG_VIDEO_LCD_PANEL_MIPI_4_LANE_513_MBPS_VIA_SSD2828=y
+ # CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set
++CONFIG_REGULATOR_AXP_DRIVEVBUS=y
+ CONFIG_REGULATOR_AXP_USB_POWER=y
+ CONFIG_AXP_DLDO1_VOLT=3300
+ # CONFIG_REQUIRE_SERIAL_CONSOLE is not set
+--- a/configs/Merrii_A80_Optimus_defconfig
++++ b/configs/Merrii_A80_Optimus_defconfig
+@@ -11,5 +11,6 @@ CONFIG_USB1_VBUS_PIN="PH4"
+ CONFIG_USB3_VBUS_PIN="PH5"
+ CONFIG_AXP_GPIO=y
+ CONFIG_SYS_I2C_SUN8I_RSB=y
++CONFIG_REGULATOR_AXP_DRIVEVBUS=y
+ CONFIG_REGULATOR_AXP_USB_POWER=y
+ CONFIG_AXP809_POWER=y
+--- a/configs/Sinovoip_BPI_M3_defconfig
++++ b/configs/Sinovoip_BPI_M3_defconfig
+@@ -17,6 +17,7 @@ CONFIG_CONSOLE_MUX=y
+ CONFIG_PHY_REALTEK=y
+ CONFIG_SUN8I_EMAC=y
+ CONFIG_INITIAL_USB_SCAN_DELAY=500
++CONFIG_REGULATOR_AXP_DRIVEVBUS=y
+ CONFIG_REGULATOR_AXP_USB_POWER=y
+ CONFIG_AXP_DCDC5_VOLT=1200
+ CONFIG_AXP_DLDO3_VOLT=3300
+--- a/configs/Yones_Toptech_BS1078_V2_defconfig
++++ b/configs/Yones_Toptech_BS1078_V2_defconfig
+@@ -14,6 +14,7 @@ CONFIG_VIDEO_LCD_BL_EN="PA25"
+ CONFIG_VIDEO_LCD_BL_PWM="PH13"
+ CONFIG_VIDEO_LCD_PANEL_LVDS=y
+ # CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set
++CONFIG_REGULATOR_AXP_DRIVEVBUS=y
+ CONFIG_REGULATOR_AXP_USB_POWER=y
+ CONFIG_AXP_DLDO1_VOLT=3300
+ CONFIG_USB_MUSB_HOST=y
+--- a/configs/colorfly_e708_q1_defconfig
++++ b/configs/colorfly_e708_q1_defconfig
+@@ -14,6 +14,7 @@ CONFIG_VIDEO_LCD_BL_EN="PA25"
+ CONFIG_VIDEO_LCD_BL_PWM="PH13"
+ CONFIG_VIDEO_LCD_PANEL_LVDS=y
+ # CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set
++CONFIG_REGULATOR_AXP_DRIVEVBUS=y
+ CONFIG_REGULATOR_AXP_USB_POWER=y
+ CONFIG_AXP_DLDO1_VOLT=3300
+ CONFIG_AXP_DLDO2_VOLT=1800
+--- a/configs/ga10h_v1_1_defconfig
++++ b/configs/ga10h_v1_1_defconfig
+@@ -16,6 +16,7 @@ CONFIG_VIDEO_LCD_BL_EN="PH6"
+ CONFIG_VIDEO_LCD_BL_PWM="PH0"
+ CONFIG_VIDEO_LCD_PANEL_LVDS=y
+ # CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set
++CONFIG_REGULATOR_AXP_DRIVEVBUS=y
+ CONFIG_REGULATOR_AXP_USB_POWER=y
+ CONFIG_AXP_DLDO1_VOLT=3300
+ CONFIG_CONS_INDEX=5
+--- a/configs/gt90h_v4_defconfig
++++ b/configs/gt90h_v4_defconfig
+@@ -14,6 +14,7 @@ CONFIG_VIDEO_LCD_POWER="PH7"
+ CONFIG_VIDEO_LCD_BL_EN="PH6"
+ CONFIG_VIDEO_LCD_BL_PWM="PH0"
+ # CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set
++CONFIG_REGULATOR_AXP_DRIVEVBUS=y
+ CONFIG_REGULATOR_AXP_USB_POWER=y
+ CONFIG_AXP_DLDO1_VOLT=3300
+ CONFIG_CONS_INDEX=5
+--- a/configs/iNet_D978_rev2_defconfig
++++ b/configs/iNet_D978_rev2_defconfig
+@@ -15,6 +15,7 @@ CONFIG_VIDEO_LCD_BL_EN="PH6"
+ CONFIG_VIDEO_LCD_BL_PWM="PH0"
+ CONFIG_VIDEO_LCD_PANEL_LVDS=y
+ # CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set
++CONFIG_REGULATOR_AXP_DRIVEVBUS=y
+ CONFIG_REGULATOR_AXP_USB_POWER=y
+ CONFIG_AXP_DLDO1_VOLT=3300
+ # CONFIG_REQUIRE_SERIAL_CONSOLE is not set
+--- a/configs/inet86dz_defconfig
++++ b/configs/inet86dz_defconfig
+@@ -14,6 +14,7 @@ CONFIG_VIDEO_LCD_POWER="PH7"
+ CONFIG_VIDEO_LCD_BL_EN="PH6"
+ CONFIG_VIDEO_LCD_BL_PWM="PH0"
+ # CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set
++CONFIG_REGULATOR_AXP_DRIVEVBUS=y
+ CONFIG_REGULATOR_AXP_USB_POWER=y
+ CONFIG_AXP_DLDO1_VOLT=3300
+ CONFIG_CONS_INDEX=5
+--- a/configs/inet_q972_defconfig
++++ b/configs/inet_q972_defconfig
+@@ -13,6 +13,7 @@ CONFIG_VIDEO_LCD_DCLK_PHASE=0
+ CONFIG_VIDEO_LCD_BL_EN="PA25"
+ CONFIG_VIDEO_LCD_BL_PWM="PH13"
+ # CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set
++CONFIG_REGULATOR_AXP_DRIVEVBUS=y
+ CONFIG_REGULATOR_AXP_USB_POWER=y
+ CONFIG_AXP_DLDO1_VOLT=3300
+ CONFIG_USB_EHCI_HCD=y
+--- a/configs/polaroid_mid2407pxe03_defconfig
++++ b/configs/polaroid_mid2407pxe03_defconfig
+@@ -14,6 +14,7 @@ CONFIG_VIDEO_LCD_POWER="PH7"
+ CONFIG_VIDEO_LCD_BL_EN="PH6"
+ CONFIG_VIDEO_LCD_BL_PWM="PH0"
+ # CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set
++CONFIG_REGULATOR_AXP_DRIVEVBUS=y
+ CONFIG_REGULATOR_AXP_USB_POWER=y
+ CONFIG_AXP_DLDO1_VOLT=3300
+ CONFIG_CONS_INDEX=5
+--- a/configs/polaroid_mid2809pxe04_defconfig
++++ b/configs/polaroid_mid2809pxe04_defconfig
+@@ -14,6 +14,7 @@ CONFIG_VIDEO_LCD_POWER="PH7"
+ CONFIG_VIDEO_LCD_BL_EN="PH6"
+ CONFIG_VIDEO_LCD_BL_PWM="PH0"
+ # CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set
++CONFIG_REGULATOR_AXP_DRIVEVBUS=y
+ CONFIG_REGULATOR_AXP_USB_POWER=y
+ CONFIG_AXP_DLDO1_VOLT=3300
+ CONFIG_CONS_INDEX=5
+--- a/configs/q8_a23_tablet_800x480_defconfig
++++ b/configs/q8_a23_tablet_800x480_defconfig
+@@ -14,6 +14,7 @@ CONFIG_VIDEO_LCD_POWER="PH7"
+ CONFIG_VIDEO_LCD_BL_EN="PH6"
+ CONFIG_VIDEO_LCD_BL_PWM="PH0"
+ # CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set
++CONFIG_REGULATOR_AXP_DRIVEVBUS=y
+ CONFIG_REGULATOR_AXP_USB_POWER=y
+ CONFIG_AXP_DLDO1_VOLT=3300
+ CONFIG_CONS_INDEX=5
+--- a/configs/q8_a33_tablet_1024x600_defconfig
++++ b/configs/q8_a33_tablet_1024x600_defconfig
+@@ -14,6 +14,7 @@ CONFIG_VIDEO_LCD_POWER="PH7"
+ CONFIG_VIDEO_LCD_BL_EN="PH6"
+ CONFIG_VIDEO_LCD_BL_PWM="PH0"
+ # CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set
++CONFIG_REGULATOR_AXP_DRIVEVBUS=y
+ CONFIG_REGULATOR_AXP_USB_POWER=y
+ CONFIG_AXP_DLDO1_VOLT=3300
+ CONFIG_CONS_INDEX=5
+--- a/configs/q8_a33_tablet_800x480_defconfig
++++ b/configs/q8_a33_tablet_800x480_defconfig
+@@ -14,6 +14,7 @@ CONFIG_VIDEO_LCD_POWER="PH7"
+ CONFIG_VIDEO_LCD_BL_EN="PH6"
+ CONFIG_VIDEO_LCD_BL_PWM="PH0"
+ # CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set
++CONFIG_REGULATOR_AXP_DRIVEVBUS=y
+ CONFIG_REGULATOR_AXP_USB_POWER=y
+ CONFIG_AXP_DLDO1_VOLT=3300
+ CONFIG_CONS_INDEX=5
+--- a/configs/tbs_a711_defconfig
++++ b/configs/tbs_a711_defconfig
+@@ -13,6 +13,7 @@ CONFIG_USB0_ID_DET="PH11"
+ CONFIG_AXP_GPIO=y
+ # CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set
+ CONFIG_FASTBOOT_CMD_OEM_FORMAT=y
++CONFIG_REGULATOR_AXP_DRIVEVBUS=y
+ CONFIG_REGULATOR_AXP_USB_POWER=y
+ CONFIG_AXP_DCDC5_VOLT=1200
+ CONFIG_USB_EHCI_HCD=y

+ 11 - 9
package/boot/uboot-d1/patches/0009-phy-sun4i-usb-Control-USB-supplies-via-regulator-ucl.patch → package/boot/uboot-d1/patches/0037-phy-sun4i-usb-Control-supplies-via-the-regulator-ucl.patch

@@ -1,7 +1,7 @@
-From e8fb34342dfb79cd2059431dd1a0f03202a244ca Mon Sep 17 00:00:00 2001
+From 5ea3e3e37ec14a1d90a6764879c38d80f4ffe008 Mon Sep 17 00:00:00 2001
 From: Samuel Holland <[email protected]>
 From: Samuel Holland <[email protected]>
 Date: Thu, 26 Aug 2021 22:11:37 -0500
 Date: Thu, 26 Aug 2021 22:11:37 -0500
-Subject: [PATCH 09/90] phy: sun4i-usb: Control USB supplies via regulator
+Subject: [PATCH 45/68] phy: sun4i-usb: Control supplies via the regulator
  uclass
  uclass
 
 
 The device tree binding for the PHY provides VBUS supplies as regulator
 The device tree binding for the PHY provides VBUS supplies as regulator
@@ -53,7 +53,7 @@ Signed-off-by: Samuel Holland <[email protected]>
 
 
 --- a/drivers/phy/allwinner/phy-sun4i-usb.c
 --- a/drivers/phy/allwinner/phy-sun4i-usb.c
 +++ b/drivers/phy/allwinner/phy-sun4i-usb.c
 +++ b/drivers/phy/allwinner/phy-sun4i-usb.c
-@@ -97,27 +97,22 @@ struct sun4i_usb_phy_cfg {
+@@ -87,27 +87,22 @@ struct sun4i_usb_phy_cfg {
  };
  };
  
  
  struct sun4i_usb_phy_info {
  struct sun4i_usb_phy_info {
@@ -81,7 +81,7 @@ Signed-off-by: Samuel Holland <[email protected]>
  		.gpio_vbus_det = NULL,
  		.gpio_vbus_det = NULL,
  		.gpio_id_det = NULL,
  		.gpio_id_det = NULL,
  	},
  	},
-@@ -125,11 +120,11 @@ struct sun4i_usb_phy_info {
+@@ -115,12 +110,12 @@ struct sun4i_usb_phy_info {
  
  
  struct sun4i_usb_phy_plat {
  struct sun4i_usb_phy_plat {
  	void __iomem *pmu;
  	void __iomem *pmu;
@@ -89,12 +89,13 @@ Signed-off-by: Samuel Holland <[email protected]>
  	struct gpio_desc gpio_vbus_det;
  	struct gpio_desc gpio_vbus_det;
  	struct gpio_desc gpio_id_det;
  	struct gpio_desc gpio_id_det;
  	struct clk clocks;
  	struct clk clocks;
+ 	struct clk clk2;
  	struct reset_ctl resets;
  	struct reset_ctl resets;
 +	struct udevice *vbus;
 +	struct udevice *vbus;
  	int id;
  	int id;
  };
  };
  
  
-@@ -218,14 +213,18 @@ static int sun4i_usb_phy_power_on(struct
+@@ -209,6 +204,7 @@ static int sun4i_usb_phy_power_on(struct
  {
  {
  	struct sun4i_usb_phy_data *data = dev_get_priv(phy->dev);
  	struct sun4i_usb_phy_data *data = dev_get_priv(phy->dev);
  	struct sun4i_usb_phy_plat *usb_phy = &data->usb_phy[phy->id];
  	struct sun4i_usb_phy_plat *usb_phy = &data->usb_phy[phy->id];
@@ -102,7 +103,8 @@ Signed-off-by: Samuel Holland <[email protected]>
  
  
  	if (initial_usb_scan_delay) {
  	if (initial_usb_scan_delay) {
  		mdelay(initial_usb_scan_delay);
  		mdelay(initial_usb_scan_delay);
- 		initial_usb_scan_delay = 0;
+@@ -221,8 +217,11 @@ static int sun4i_usb_phy_power_on(struct
+ 		return 0;
  	}
  	}
  
  
 -	if (dm_gpio_is_valid(&usb_phy->gpio_vbus))
 -	if (dm_gpio_is_valid(&usb_phy->gpio_vbus))
@@ -115,7 +117,7 @@ Signed-off-by: Samuel Holland <[email protected]>
  
  
  	return 0;
  	return 0;
  }
  }
-@@ -234,9 +233,13 @@ static int sun4i_usb_phy_power_off(struc
+@@ -231,9 +230,13 @@ static int sun4i_usb_phy_power_off(struc
  {
  {
  	struct sun4i_usb_phy_data *data = dev_get_priv(phy->dev);
  	struct sun4i_usb_phy_data *data = dev_get_priv(phy->dev);
  	struct sun4i_usb_phy_plat *usb_phy = &data->usb_phy[phy->id];
  	struct sun4i_usb_phy_plat *usb_phy = &data->usb_phy[phy->id];
@@ -131,12 +133,12 @@ Signed-off-by: Samuel Holland <[email protected]>
  
  
  	return 0;
  	return 0;
  }
  }
-@@ -450,22 +453,16 @@ static int sun4i_usb_phy_probe(struct ud
+@@ -483,22 +486,16 @@ static int sun4i_usb_phy_probe(struct ud
  	for (i = 0; i < data->cfg->num_phys; i++) {
  	for (i = 0; i < data->cfg->num_phys; i++) {
  		struct sun4i_usb_phy_plat *phy = &plat[i];
  		struct sun4i_usb_phy_plat *phy = &plat[i];
  		struct sun4i_usb_phy_info *info = &phy_info[i];
  		struct sun4i_usb_phy_info *info = &phy_info[i];
 -		char name[16];
 -		char name[16];
-+		char name[20];
++		char name[32];
  
  
  		if (data->cfg->missing_phys & BIT(i))
  		if (data->cfg->missing_phys & BIT(i))
  			continue;
  			continue;

+ 0 - 183
package/boot/uboot-d1/patches/0037-sunxi-psci-Add-support-for-H3-CPU-0-hotplug.patch

@@ -1,183 +0,0 @@
-From d11c5971f60d482c05f807c24f3ccd37cf7d0f70 Mon Sep 17 00:00:00 2001
-From: Samuel Holland <[email protected]>
-Date: Sat, 9 Oct 2021 17:12:57 -0500
-Subject: [PATCH 37/90] sunxi: psci: Add support for H3 CPU 0 hotplug
-
-Due to a bug in the H3 SoC, where the CPU 0 hotplug flag cannot be
-written, resuming CPU 0 requires using the "Super Standby" code path in
-the BROM instead of the hotplug path. This path requires jumping to an
-eGON image in SRAM.
-
-Add support to the build system to generate this eGON image and include
-it in the FIT, and add code to direct the BROM to its location in SRAM.
-
-Since the Super Standby code path in the BROM initializes the CPU and
-AHB1 clocks to 24 MHz, those registers need to be restored after control
-passes back to U-Boot. Furthermore, because the BROM lowers the AHB1
-clock divider to /1 before switching to the lower-frequency parent,
-PLL_PERIPH0 must be bypassed to prevent AHB1 from temporarily running at
-600 MHz. Otherwise, this locks up the SoC.
-
-Signed-off-by: Samuel Holland <[email protected]>
----
- Makefile                        | 17 +++++++++++++++++
- arch/arm/cpu/armv7/sunxi/psci.c | 31 +++++++++++++++++++++++++++++++
- arch/arm/dts/sunxi-u-boot.dtsi  | 23 ++++++++++++++++++++++-
- include/configs/sun8i.h         |  4 ++++
- 4 files changed, 74 insertions(+), 1 deletion(-)
-
---- a/Makefile
-+++ b/Makefile
-@@ -1013,6 +1013,23 @@ INPUTS-y += u-boot.img
- endif
- endif
- 
-+ifeq ($(CONFIG_MACH_SUN8I_H3)$(CONFIG_ARMV7_PSCI),yy)
-+INPUTS-$(CONFIG_ARMV7_PSCI) += u-boot-resume.img
-+
-+MKIMAGEFLAGS_u-boot-resume.img := -B 0x400 -T sunxi_egon
-+
-+u-boot-resume.img: u-boot-resume.bin
-+	$(call if_changed,mkimage)
-+
-+OBJCOPYFLAGS_u-boot-resume.bin := -O binary
-+
-+u-boot-resume.bin: u-boot-resume.o
-+	$(call if_changed,objcopy)
-+
-+u-boot-resume.S: u-boot
-+	@sed -En 's/(0x[[:xdigit:]]+) +psci_cpu_entry/ldr pc, =\1/p' $<.map > $@
-+endif
-+
- INPUTS-$(CONFIG_X86) += u-boot-x86-start16.bin u-boot-x86-reset16.bin \
- 	$(if $(CONFIG_SPL_X86_16BIT_INIT),spl/u-boot-spl.bin) \
- 	$(if $(CONFIG_TPL_X86_16BIT_INIT),tpl/u-boot-tpl.bin)
---- a/arch/arm/cpu/armv7/sunxi/psci.c
-+++ b/arch/arm/cpu/armv7/sunxi/psci.c
-@@ -10,6 +10,7 @@
- #include <common.h>
- #include <asm/cache.h>
- 
-+#include <asm/arch/clock.h>
- #include <asm/arch/cpu.h>
- #include <asm/arch/cpucfg.h>
- #include <asm/arch/prcm.h>
-@@ -141,6 +142,13 @@ static void __secure sunxi_set_entry_add
- 		(struct sunxi_cpucfg_reg *)SUNXI_CPUCFG_BASE;
- 
- 	writel((u32)entry, &cpucfg->priv0);
-+
-+#ifdef CONFIG_MACH_SUN8I_H3
-+	/* Redirect CPU 0 to the secure monitor via the resume shim. */
-+	writel(0x16aaefe8, &cpucfg->super_standy_flag);
-+	writel(0xaa16efe8, &cpucfg->super_standy_flag);
-+	writel(SUNXI_RESUME_BASE, &cpucfg->priv1);
-+#endif
- }
- #endif
- 
-@@ -255,9 +263,12 @@ out:
- int __secure psci_cpu_on(u32 __always_unused unused, u32 mpidr, u32 pc,
- 			 u32 context_id)
- {
-+	struct sunxi_ccm_reg *ccu = (struct sunxi_ccm_reg *)SUNXI_CCM_BASE;
- 	struct sunxi_cpucfg_reg *cpucfg =
- 		(struct sunxi_cpucfg_reg *)SUNXI_CPUCFG_BASE;
- 	u32 cpu = (mpidr & 0x3);
-+	u32 cpu_clk;
-+	u32 bus_clk;
- 
- 	/* store target PC and context id */
- 	psci_save(cpu, pc, context_id);
-@@ -274,12 +285,32 @@ int __secure psci_cpu_on(u32 __always_un
- 	/* Lock CPU (Disable external debug access) */
- 	clrbits_le32(&cpucfg->dbg_ctrl1, BIT(cpu));
- 
-+	if (IS_ENABLED(CONFIG_MACH_SUN8I_H3) && cpu == 0) {
-+		/* Save registers that will be clobbered by the BROM. */
-+		cpu_clk = readl(&ccu->cpu_axi_cfg);
-+		bus_clk = readl(&ccu->ahb1_apb1_div);
-+
-+		/* Bypass PLL_PERIPH0 so AHB1 frequency does not spike. */
-+		setbits_le32(&ccu->pll6_cfg, BIT(25));
-+	}
-+
- 	/* Power up target CPU */
- 	sunxi_cpu_set_power(cpu, true);
- 
- 	/* De-assert reset on target CPU */
- 	writel(BIT(1) | BIT(0), &cpucfg->cpu[cpu].rst);
- 
-+	if (IS_ENABLED(CONFIG_MACH_SUN8I_H3) && cpu == 0) {
-+		/* Spin until the BROM has clobbered the clock registers. */
-+		while (readl(&ccu->ahb1_apb1_div) != 0x00001100);
-+
-+		/* Restore the registers and turn off PLL_PERIPH0 bypass. */
-+		writel(cpu_clk, &ccu->cpu_axi_cfg);
-+		writel(bus_clk, &ccu->ahb1_apb1_div);
-+
-+		clrbits_le32(&ccu->pll6_cfg, BIT(25));
-+	}
-+
- 	/* Unlock CPU (Disable external debug access) */
- 	setbits_le32(&cpucfg->dbg_ctrl1, BIT(cpu));
- 
---- a/arch/arm/dts/sunxi-u-boot.dtsi
-+++ b/arch/arm/dts/sunxi-u-boot.dtsi
-@@ -6,7 +6,11 @@
- #define ARCH "arm"
- #endif
- 
--#if defined(CONFIG_MACH_SUN50I) || defined(CONFIG_MACH_SUN50I_H5)
-+#if defined(CONFIG_MACH_SUN8I_H3)
-+#ifdef CONFIG_ARMV7_PSCI
-+#define RESUME_ADDR	SUNXI_RESUME_BASE
-+#endif
-+#elif defined(CONFIG_MACH_SUN50I) || defined(CONFIG_MACH_SUN50I_H5)
- #define BL31_ADDR	0x00044000
- #define SCP_ADDR	0x00050000
- #elif defined(CONFIG_MACH_SUN50I_H6)
-@@ -78,6 +82,20 @@
- 				};
- #endif
- 
-+#ifdef RESUME_ADDR
-+				resume {
-+					description = "Super Standby resume image";
-+					type = "standalone";
-+					arch = ARCH;
-+					compression = "none";
-+					load = <RESUME_ADDR>;
-+
-+					blob-ext {
-+						filename = "u-boot-resume.img";
-+					};
-+				};
-+#endif
-+
- #ifdef SCP_ADDR
- 				scp {
- 					description = "SCP firmware";
-@@ -111,6 +129,9 @@
- 					firmware = "uboot";
- #endif
- 					loadables =
-+#ifdef RESUME_ADDR
-+						    "resume",
-+#endif
- #ifdef SCP_ADDR
- 						    "scp",
- #endif
---- a/include/configs/sun8i.h
-+++ b/include/configs/sun8i.h
-@@ -8,6 +8,10 @@
- #ifndef __CONFIG_H
- #define __CONFIG_H
- 
-+#define SUNXI_RESUME_BASE		(CONFIG_ARMV7_SECURE_BASE + \
-+					 CONFIG_ARMV7_SECURE_MAX_SIZE)
-+#define SUNXI_RESUME_SIZE		1024
-+
- #include <configs/sunxi-common.h>
- 
- #endif /* __CONFIG_H */

+ 0 - 155
package/boot/uboot-d1/patches/0038-remoteproc-Add-a-driver-for-the-Allwinner-AR100.patch

@@ -1,155 +0,0 @@
-From 7585a12ffec6e42c62222d8ee4085413b3a197f7 Mon Sep 17 00:00:00 2001
-From: Samuel Holland <[email protected]>
-Date: Sat, 9 Oct 2021 14:58:27 -0500
-Subject: [PATCH 38/90] remoteproc: Add a driver for the Allwinner AR100
-
-Signed-off-by: Samuel Holland <[email protected]>
----
- drivers/remoteproc/Kconfig             |   9 ++
- drivers/remoteproc/Makefile            |   1 +
- drivers/remoteproc/sun6i_ar100_rproc.c | 111 +++++++++++++++++++++++++
- 3 files changed, 121 insertions(+)
- create mode 100644 drivers/remoteproc/sun6i_ar100_rproc.c
-
---- a/drivers/remoteproc/Kconfig
-+++ b/drivers/remoteproc/Kconfig
-@@ -41,6 +41,15 @@ config REMOTEPROC_STM32_COPRO
- 	  Say 'y' here to add support for STM32 Cortex-M4 coprocessors via the
- 	  remoteproc framework.
- 
-+config REMOTEPROC_SUN6I_AR100
-+	bool "Support for Allwinner AR100 SCP"
-+	select REMOTEPROC
-+	depends on ARCH_SUNXI
-+	help
-+	  Say 'y' here to support Allwinner's AR100 System Control Processor
-+	  (SCP), found in various sun6i/sun8i/sun50i family SoCs, through the
-+	  remoteproc framework.
-+
- config REMOTEPROC_TI_K3_ARM64
- 	bool "Support for TI's K3 based ARM64 remoteproc driver"
- 	select REMOTEPROC
---- a/drivers/remoteproc/Makefile
-+++ b/drivers/remoteproc/Makefile
-@@ -10,6 +10,7 @@ obj-$(CONFIG_$(SPL_)REMOTEPROC) += rproc
- obj-$(CONFIG_K3_SYSTEM_CONTROLLER) += k3_system_controller.o
- obj-$(CONFIG_REMOTEPROC_SANDBOX) += sandbox_testproc.o
- obj-$(CONFIG_REMOTEPROC_STM32_COPRO) += stm32_copro.o
-+obj-$(CONFIG_REMOTEPROC_SUN6I_AR100) += sun6i_ar100_rproc.o
- obj-$(CONFIG_REMOTEPROC_TI_K3_ARM64) += ti_k3_arm64_rproc.o
- obj-$(CONFIG_REMOTEPROC_TI_K3_DSP) += ti_k3_dsp_rproc.o
- obj-$(CONFIG_REMOTEPROC_TI_K3_R5F) += ti_k3_r5f_rproc.o
---- /dev/null
-+++ b/drivers/remoteproc/sun6i_ar100_rproc.c
-@@ -0,0 +1,111 @@
-+// SPDX-License-Identifier: GPL-2.0
-+
-+#include <dm.h>
-+#include <errno.h>
-+#include <remoteproc.h>
-+#include <asm/io.h>
-+
-+#define SUNXI_SCP_MAGIC			0xb4400012
-+
-+#define OR1K_VEC_FIRST			0x01
-+#define OR1K_VEC_LAST			0x0e
-+#define OR1K_VEC_ADDR(n)		(0x100 * (n))
-+
-+struct sun6i_ar100_rproc_priv {
-+	void	*cfg_base;
-+	ulong	sram_base;
-+};
-+
-+static int sun6i_ar100_rproc_load(struct udevice *dev, ulong addr, ulong size)
-+{
-+	struct sun6i_ar100_rproc_priv *priv = dev_get_priv(dev);
-+
-+	/* Check for a valid SCP firmware. */
-+	if (readl_relaxed(addr) != SUNXI_SCP_MAGIC)
-+		return -ENOENT;
-+
-+	/* Program exception vectors to the firmware entry point. */
-+	for (u32 i = OR1K_VEC_FIRST; i <= OR1K_VEC_LAST; ++i) {
-+		ulong vector = priv->sram_base + OR1K_VEC_ADDR(i);
-+		ulong offset = addr - vector;
-+
-+		writel_relaxed(offset >> 2, vector);
-+	}
-+
-+	return 0;
-+}
-+
-+static int sun6i_ar100_rproc_start(struct udevice *dev)
-+{
-+	struct sun6i_ar100_rproc_priv *priv = dev_get_priv(dev);
-+
-+	setbits_le32(priv->cfg_base, BIT(0));
-+
-+	return 0;
-+}
-+
-+static int sun6i_ar100_rproc_stop(struct udevice *dev)
-+{
-+	struct sun6i_ar100_rproc_priv *priv = dev_get_priv(dev);
-+
-+	clrbits_le32(priv->cfg_base, BIT(0));
-+
-+	return 0;
-+}
-+
-+static int sun6i_ar100_rproc_reset(struct udevice *dev)
-+{
-+	int ret;
-+
-+	ret = sun6i_ar100_rproc_stop(dev);
-+	if (ret)
-+		return ret;
-+
-+	return sun6i_ar100_rproc_start(dev);
-+}
-+
-+static int sun6i_ar100_rproc_is_running(struct udevice *dev)
-+{
-+	struct sun6i_ar100_rproc_priv *priv = dev_get_priv(dev);
-+
-+	return !(readl_relaxed(priv->cfg_base) & BIT(0));
-+}
-+
-+static const struct dm_rproc_ops sun6i_ar100_rproc_ops = {
-+	.load		= sun6i_ar100_rproc_load,
-+	.start		= sun6i_ar100_rproc_start,
-+	.stop		= sun6i_ar100_rproc_stop,
-+	.reset		= sun6i_ar100_rproc_reset,
-+	.is_running	= sun6i_ar100_rproc_is_running,
-+};
-+
-+static int sun6i_ar100_rproc_probe(struct udevice *dev)
-+{
-+	struct sun6i_ar100_rproc_priv *priv = dev_get_priv(dev);
-+	struct ofnode_phandle_args sram_handle;
-+	int ret;
-+
-+	priv->cfg_base = dev_read_addr_ptr(dev);
-+
-+	ret = dev_read_phandle_with_args(dev, "sram", NULL, 0, 0, &sram_handle);
-+	if (ret)
-+		return ret;
-+
-+	priv->sram_base = ofnode_get_addr(sram_handle.node);
-+
-+	return 0;
-+}
-+
-+static const struct udevice_id sun6i_ar100_rproc_ids[] = {
-+	{ .compatible = "allwinner,sun6i-a31-ar100" },
-+	{ }
-+};
-+
-+U_BOOT_DRIVER(sun6i_ar100_rproc) = {
-+	.name		= "sun6i_ar100_rproc",
-+	.id		= UCLASS_REMOTEPROC,
-+	.of_match	= sun6i_ar100_rproc_ids,
-+	.probe		= sun6i_ar100_rproc_probe,
-+	.priv_auto	= sizeof(struct sun6i_ar100_rproc_priv),
-+	.ops		= &sun6i_ar100_rproc_ops,
-+};

+ 1016 - 0
package/boot/uboot-d1/patches/0038-sunxi-Remove-obsolete-USBx_VBUS_PIN-Kconfig-symbols.patch

@@ -0,0 +1,1016 @@
+From 5d491a7f747337702d5b67ce4e946ae4957b026c Mon Sep 17 00:00:00 2001
+From: Samuel Holland <[email protected]>
+Date: Thu, 26 Aug 2021 22:26:40 -0500
+Subject: [PATCH 46/68] sunxi: Remove obsolete USBx_VBUS_PIN Kconfig symbols
+
+Now that the USB PHY driver uses the device tree to get VBUS supply
+regulators, these Kconfig symbols are unused. Remove them.
+
+Signed-off-by: Samuel Holland <[email protected]>
+---
+ arch/arm/mach-sunxi/Kconfig                  | 29 --------------------
+ configs/A10s-OLinuXino-M_defconfig           |  1 -
+ configs/A13-OLinuXinoM_defconfig             |  1 -
+ configs/A13-OLinuXino_defconfig              |  1 -
+ configs/A20-OLinuXino-Lime2-eMMC_defconfig   |  1 -
+ configs/A20-OLinuXino-Lime2_defconfig        |  1 -
+ configs/A20-Olimex-SOM-EVB_defconfig         |  1 -
+ configs/A20-Olimex-SOM204-EVB-eMMC_defconfig |  1 -
+ configs/A20-Olimex-SOM204-EVB_defconfig      |  1 -
+ configs/A33-OLinuXino_defconfig              |  1 -
+ configs/Ainol_AW1_defconfig                  |  1 -
+ configs/Ampe_A76_defconfig                   |  1 -
+ configs/Auxtek-T003_defconfig                |  1 -
+ configs/Auxtek-T004_defconfig                |  1 -
+ configs/Bananapi_M2_Ultra_defconfig          |  2 --
+ configs/Bananapro_defconfig                  |  2 --
+ configs/CHIP_defconfig                       |  1 -
+ configs/CHIP_pro_defconfig                   |  1 -
+ configs/CSQ_CS908_defconfig                  |  2 --
+ configs/Chuwi_V7_CW0825_defconfig            |  1 -
+ configs/Colombus_defconfig                   |  1 -
+ configs/Cubieboard4_defconfig                |  3 --
+ configs/Cubietruck_defconfig                 |  1 -
+ configs/Cubietruck_plus_defconfig            |  3 --
+ configs/Empire_electronix_d709_defconfig     |  1 -
+ configs/Empire_electronix_m712_defconfig     |  1 -
+ configs/Hummingbird_A31_defconfig            |  2 --
+ configs/Hyundai_A7HD_defconfig               |  3 --
+ configs/Linksprite_pcDuino3_Nano_defconfig   |  1 -
+ configs/Linksprite_pcDuino_defconfig         |  2 --
+ configs/MSI_Primo81_defconfig                |  1 -
+ configs/Mele_A1000G_quad_defconfig           |  2 --
+ configs/Mele_I7_defconfig                    |  2 --
+ configs/Mele_M9_defconfig                    |  2 --
+ configs/Merrii_A80_Optimus_defconfig         |  3 --
+ configs/Mini-X_defconfig                     |  1 -
+ configs/Orangepi_defconfig                   |  2 --
+ configs/Orangepi_mini_defconfig              |  2 --
+ configs/Sinlinx_SinA31s_defconfig            |  2 --
+ configs/Sinovoip_BPI_M2_defconfig            |  2 --
+ configs/Sinovoip_BPI_M3_defconfig            |  2 --
+ configs/Sunchip_CX-A99_defconfig             |  3 --
+ configs/UTOO_P66_defconfig                   |  1 -
+ configs/Wexler_TAB7200_defconfig             |  1 -
+ configs/Wobo_i5_defconfig                    |  1 -
+ configs/Yones_Toptech_BD1078_defconfig       |  1 -
+ configs/Yones_Toptech_BS1078_V2_defconfig    |  1 -
+ configs/ba10_tv_box_defconfig                |  2 --
+ configs/bananapi_m2_berry_defconfig          |  1 -
+ configs/colorfly_e708_q1_defconfig           |  1 -
+ configs/difrnce_dit4350_defconfig            |  1 -
+ configs/dserve_dsrv9703c_defconfig           |  1 -
+ configs/ga10h_v1_1_defconfig                 |  1 -
+ configs/gt90h_v4_defconfig                   |  1 -
+ configs/h8_homlet_v2_defconfig               |  2 --
+ configs/iNet_3F_defconfig                    |  1 -
+ configs/iNet_3W_defconfig                    |  1 -
+ configs/iNet_86VS_defconfig                  |  1 -
+ configs/iNet_D978_rev2_defconfig             |  1 -
+ configs/icnova-a20-swac_defconfig            |  2 --
+ configs/inet1_defconfig                      |  1 -
+ configs/inet86dz_defconfig                   |  1 -
+ configs/inet97fv2_defconfig                  |  1 -
+ configs/inet98v_rev2_defconfig               |  1 -
+ configs/inet9f_rev03_defconfig               |  1 -
+ configs/inet_q972_defconfig                  |  1 -
+ configs/jesurun_q5_defconfig                 |  1 -
+ configs/mixtile_loftq_defconfig              |  2 --
+ configs/mk802_a10s_defconfig                 |  1 -
+ configs/mk802_defconfig                      |  1 -
+ configs/orangepi_2_defconfig                 |  1 -
+ configs/orangepi_plus_defconfig              |  2 --
+ configs/parrot_r16_defconfig                 |  1 -
+ configs/pine_h64_defconfig                   |  1 -
+ configs/polaroid_mid2407pxe03_defconfig      |  1 -
+ configs/polaroid_mid2809pxe04_defconfig      |  1 -
+ configs/pov_protab2_ips9_defconfig           |  1 -
+ configs/q8_a13_tablet_defconfig              |  1 -
+ configs/q8_a23_tablet_800x480_defconfig      |  1 -
+ configs/q8_a33_tablet_1024x600_defconfig     |  1 -
+ configs/q8_a33_tablet_800x480_defconfig      |  1 -
+ configs/r7-tv-dongle_defconfig               |  1 -
+ configs/sun8i_a23_evb_defconfig              |  2 --
+ configs/tbs_a711_defconfig                   |  1 -
+ configs/teres_i_defconfig                    |  1 -
+ 85 files changed, 142 deletions(-)
+
+--- a/arch/arm/mach-sunxi/Kconfig
++++ b/arch/arm/mach-sunxi/Kconfig
+@@ -670,13 +670,6 @@ config OLD_SUNXI_KERNEL_COMPAT
+ 	Set this to enable various workarounds for old kernels, this results in
+ 	sub-optimal settings for newer kernels, only enable if needed.
+ 
+-config USB0_VBUS_PIN
+-	string "Vbus enable pin for usb0 (otg)"
+-	default ""
+-	---help---
+-	Set the Vbus enable pin for usb0 (otg). This takes a string in the
+-	format understood by sunxi_name_to_gpio, e.g. PH1 for pin 1 of port H.
+-
+ config USB0_VBUS_DET
+ 	string "Vbus detect pin for usb0 (otg)"
+ 	default ""
+@@ -691,28 +684,6 @@ config USB0_ID_DET
+ 	Set the ID detect pin for usb0 (otg). This takes a string in the
+ 	format understood by sunxi_name_to_gpio, e.g. PH1 for pin 1 of port H.
+ 
+-config USB1_VBUS_PIN
+-	string "Vbus enable pin for usb1 (ehci0)"
+-	default "PH6" if MACH_SUN4I || MACH_SUN7I
+-	default "PH27" if MACH_SUN6I
+-	---help---
+-	Set the Vbus enable pin for usb1 (ehci0, usb0 is the otg). This takes
+-	a string in the format understood by sunxi_name_to_gpio, e.g.
+-	PH1 for pin 1 of port H.
+-
+-config USB2_VBUS_PIN
+-	string "Vbus enable pin for usb2 (ehci1)"
+-	default "PH3" if MACH_SUN4I || MACH_SUN7I
+-	default "PH24" if MACH_SUN6I
+-	---help---
+-	See USB1_VBUS_PIN help text.
+-
+-config USB3_VBUS_PIN
+-	string "Vbus enable pin for usb3 (ehci2)"
+-	default ""
+-	---help---
+-	See USB1_VBUS_PIN help text.
+-
+ config I2C0_ENABLE
+ 	bool "Enable I2C/TWI controller 0"
+ 	default y if MACH_SUN4I || MACH_SUN5I || MACH_SUN7I || MACH_SUN8I_R40
+--- a/configs/A10s-OLinuXino-M_defconfig
++++ b/configs/A10s-OLinuXino-M_defconfig
+@@ -5,7 +5,6 @@ CONFIG_SPL=y
+ CONFIG_MACH_SUN5I=y
+ CONFIG_DRAM_CLK=432
+ CONFIG_MMC_SUNXI_SLOT_EXTRA=1
+-CONFIG_USB1_VBUS_PIN="PB10"
+ # CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set
+ CONFIG_SPL_I2C=y
+ CONFIG_SYS_I2C_MVTWSI=y
+--- a/configs/A13-OLinuXinoM_defconfig
++++ b/configs/A13-OLinuXinoM_defconfig
+@@ -5,7 +5,6 @@ CONFIG_SPL=y
+ CONFIG_MACH_SUN5I=y
+ CONFIG_DRAM_CLK=408
+ CONFIG_DRAM_EMR1=0
+-CONFIG_USB1_VBUS_PIN="PG11"
+ # CONFIG_VIDEO_HDMI is not set
+ CONFIG_VIDEO_VGA_VIA_LCD=y
+ CONFIG_VIDEO_VGA_VIA_LCD_FORCE_SYNC_ACTIVE_HIGH=y
+--- a/configs/A13-OLinuXino_defconfig
++++ b/configs/A13-OLinuXino_defconfig
+@@ -6,7 +6,6 @@ CONFIG_MACH_SUN5I=y
+ CONFIG_DRAM_CLK=408
+ CONFIG_DRAM_EMR1=0
+ CONFIG_USB0_VBUS_DET="PG1"
+-CONFIG_USB1_VBUS_PIN="PG11"
+ CONFIG_AXP_GPIO=y
+ # CONFIG_VIDEO_HDMI is not set
+ CONFIG_VIDEO_VGA_VIA_LCD=y
+--- a/configs/A20-OLinuXino-Lime2-eMMC_defconfig
++++ b/configs/A20-OLinuXino-Lime2-eMMC_defconfig
+@@ -5,7 +5,6 @@ CONFIG_SPL=y
+ CONFIG_MACH_SUN7I=y
+ CONFIG_DRAM_CLK=384
+ CONFIG_MMC_SUNXI_SLOT_EXTRA=2
+-CONFIG_USB0_VBUS_PIN="PC17"
+ CONFIG_USB0_VBUS_DET="PH5"
+ CONFIG_I2C1_ENABLE=y
+ CONFIG_SPL_SPI_SUNXI=y
+--- a/configs/A20-OLinuXino-Lime2_defconfig
++++ b/configs/A20-OLinuXino-Lime2_defconfig
+@@ -4,7 +4,6 @@ CONFIG_DEFAULT_DEVICE_TREE="sun7i-a20-ol
+ CONFIG_SPL=y
+ CONFIG_MACH_SUN7I=y
+ CONFIG_DRAM_CLK=384
+-CONFIG_USB0_VBUS_PIN="PC17"
+ CONFIG_USB0_VBUS_DET="PH5"
+ CONFIG_I2C1_ENABLE=y
+ CONFIG_AHCI=y
+--- a/configs/A20-Olimex-SOM-EVB_defconfig
++++ b/configs/A20-Olimex-SOM-EVB_defconfig
+@@ -5,7 +5,6 @@ CONFIG_SPL=y
+ CONFIG_MACH_SUN7I=y
+ CONFIG_DRAM_CLK=384
+ CONFIG_MMC_SUNXI_SLOT_EXTRA=3
+-CONFIG_USB0_VBUS_PIN="PB9"
+ CONFIG_USB0_VBUS_DET="PH5"
+ CONFIG_AHCI=y
+ # CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set
+--- a/configs/A20-Olimex-SOM204-EVB-eMMC_defconfig
++++ b/configs/A20-Olimex-SOM204-EVB-eMMC_defconfig
+@@ -5,7 +5,6 @@ CONFIG_SPL=y
+ CONFIG_MACH_SUN7I=y
+ CONFIG_DRAM_CLK=384
+ CONFIG_MMC_SUNXI_SLOT_EXTRA=2
+-CONFIG_USB0_VBUS_PIN="PC17"
+ CONFIG_USB0_VBUS_DET="PH5"
+ CONFIG_I2C1_ENABLE=y
+ CONFIG_GMAC_TX_DELAY=4
+--- a/configs/A20-Olimex-SOM204-EVB_defconfig
++++ b/configs/A20-Olimex-SOM204-EVB_defconfig
+@@ -4,7 +4,6 @@ CONFIG_DEFAULT_DEVICE_TREE="sun7i-a20-ol
+ CONFIG_SPL=y
+ CONFIG_MACH_SUN7I=y
+ CONFIG_DRAM_CLK=384
+-CONFIG_USB0_VBUS_PIN="PC17"
+ CONFIG_USB0_VBUS_DET="PH5"
+ CONFIG_I2C1_ENABLE=y
+ CONFIG_GMAC_TX_DELAY=4
+--- a/configs/A33-OLinuXino_defconfig
++++ b/configs/A33-OLinuXino_defconfig
+@@ -6,7 +6,6 @@ CONFIG_MACH_SUN8I_A33=y
+ CONFIG_DRAM_CLK=432
+ CONFIG_DRAM_ZQ=15291
+ CONFIG_DRAM_ODT_EN=y
+-CONFIG_USB0_VBUS_PIN="AXP0-VBUS-ENABLE"
+ CONFIG_USB0_ID_DET="PB3"
+ CONFIG_AXP_GPIO=y
+ CONFIG_VIDEO_LCD_MODE="x:800,y:480,depth:18,pclk_khz:33000,le:16,ri:209,up:22,lo:22,hs:30,vs:1,sync:3,vmode:0"
+--- a/configs/Ainol_AW1_defconfig
++++ b/configs/Ainol_AW1_defconfig
+@@ -5,7 +5,6 @@ CONFIG_SPL=y
+ CONFIG_MACH_SUN7I=y
+ CONFIG_DRAM_CLK=432
+ CONFIG_DRAM_ZQ=123
+-CONFIG_USB0_VBUS_PIN="PB9"
+ CONFIG_AXP_GPIO=y
+ CONFIG_VIDEO_LCD_MODE="x:800,y:480,depth:18,pclk_khz:40000,le:87,ri:112,up:38,lo:141,hs:1,vs:1,sync:3,vmode:0"
+ CONFIG_VIDEO_LCD_POWER="PH8"
+--- a/configs/Ampe_A76_defconfig
++++ b/configs/Ampe_A76_defconfig
+@@ -4,7 +4,6 @@ CONFIG_DEFAULT_DEVICE_TREE="sun5i-a13-am
+ CONFIG_SPL=y
+ CONFIG_MACH_SUN5I=y
+ CONFIG_DRAM_CLK=432
+-CONFIG_USB0_VBUS_PIN="PG12"
+ CONFIG_USB0_VBUS_DET="PG1"
+ CONFIG_USB0_ID_DET="PG2"
+ CONFIG_AXP_GPIO=y
+--- a/configs/Auxtek-T003_defconfig
++++ b/configs/Auxtek-T003_defconfig
+@@ -5,7 +5,6 @@ CONFIG_SPL=y
+ CONFIG_MACH_SUN5I=y
+ CONFIG_DRAM_CLK=408
+ CONFIG_DRAM_EMR1=0
+-CONFIG_USB1_VBUS_PIN="PB10"
+ CONFIG_VIDEO_COMPOSITE=y
+ # CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set
+ CONFIG_SPL_I2C=y
+--- a/configs/Auxtek-T004_defconfig
++++ b/configs/Auxtek-T004_defconfig
+@@ -4,7 +4,6 @@ CONFIG_DEFAULT_DEVICE_TREE="sun5i-a10s-a
+ CONFIG_SPL=y
+ CONFIG_MACH_SUN5I=y
+ CONFIG_DRAM_CLK=432
+-CONFIG_USB1_VBUS_PIN="PG13"
+ # CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set
+ CONFIG_SPL_I2C=y
+ CONFIG_SYS_I2C_MVTWSI=y
+--- a/configs/Bananapi_M2_Ultra_defconfig
++++ b/configs/Bananapi_M2_Ultra_defconfig
+@@ -5,8 +5,6 @@ CONFIG_SPL=y
+ CONFIG_MACH_SUN8I_R40=y
+ CONFIG_DRAM_CLK=576
+ CONFIG_MMC_SUNXI_SLOT_EXTRA=2
+-CONFIG_USB1_VBUS_PIN="PH23"
+-CONFIG_USB2_VBUS_PIN="PH23"
+ # CONFIG_HAS_ARMV7_SECURE_BASE is not set
+ CONFIG_AHCI=y
+ # CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set
+--- a/configs/Bananapro_defconfig
++++ b/configs/Bananapro_defconfig
+@@ -4,8 +4,6 @@ CONFIG_DEFAULT_DEVICE_TREE="sun7i-a20-ba
+ CONFIG_SPL=y
+ CONFIG_MACH_SUN7I=y
+ CONFIG_DRAM_CLK=432
+-CONFIG_USB1_VBUS_PIN="PH0"
+-CONFIG_USB2_VBUS_PIN="PH1"
+ CONFIG_VIDEO_COMPOSITE=y
+ CONFIG_GMAC_TX_DELAY=3
+ CONFIG_AHCI=y
+--- a/configs/CHIP_defconfig
++++ b/configs/CHIP_defconfig
+@@ -4,7 +4,6 @@ CONFIG_DEFAULT_DEVICE_TREE="sun5i-r8-chi
+ CONFIG_SPL=y
+ CONFIG_MACH_SUN5I=y
+ CONFIG_DRAM_TIMINGS_DDR3_800E_1066G_1333J=y
+-CONFIG_USB0_VBUS_PIN="PB10"
+ CONFIG_VIDEO_COMPOSITE=y
+ CONFIG_CHIP_DIP_SCAN=y
+ CONFIG_SPL_I2C=y
+--- a/configs/CHIP_pro_defconfig
++++ b/configs/CHIP_pro_defconfig
+@@ -4,7 +4,6 @@ CONFIG_DEFAULT_DEVICE_TREE="sun5i-gr8-ch
+ CONFIG_SPL=y
+ CONFIG_MACH_SUN5I=y
+ CONFIG_DRAM_TIMINGS_DDR3_800E_1066G_1333J=y
+-CONFIG_USB0_VBUS_PIN="PB10"
+ CONFIG_SPL_I2C=y
+ # CONFIG_CMD_FLASH is not set
+ CONFIG_CMD_MTDPARTS=y
+--- a/configs/CSQ_CS908_defconfig
++++ b/configs/CSQ_CS908_defconfig
+@@ -4,8 +4,6 @@ CONFIG_DEFAULT_DEVICE_TREE="sun6i-a31s-c
+ CONFIG_SPL=y
+ CONFIG_MACH_SUN6I=y
+ CONFIG_DRAM_CLK=432
+-CONFIG_USB1_VBUS_PIN=""
+-CONFIG_USB2_VBUS_PIN=""
+ # CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set
+ CONFIG_PHY_REALTEK=y
+ CONFIG_ETH_DESIGNWARE=y
+--- a/configs/Chuwi_V7_CW0825_defconfig
++++ b/configs/Chuwi_V7_CW0825_defconfig
+@@ -5,7 +5,6 @@ CONFIG_SPL=y
+ CONFIG_MACH_SUN4I=y
+ CONFIG_DRAM_CLK=408
+ CONFIG_DRAM_EMR1=4
+-CONFIG_USB0_VBUS_PIN="PB9"
+ CONFIG_USB0_VBUS_DET="PH5"
+ CONFIG_USB0_ID_DET="PH4"
+ CONFIG_VIDEO_LCD_MODE="x:1024,y:768,depth:24,pclk_khz:51000,le:19,ri:300,up:6,lo:31,hs:1,vs:1,sync:3,vmode:0"
+--- a/configs/Colombus_defconfig
++++ b/configs/Colombus_defconfig
+@@ -5,7 +5,6 @@ CONFIG_SPL=y
+ CONFIG_MACH_SUN6I=y
+ CONFIG_DRAM_CLK=240
+ CONFIG_DRAM_ZQ=251
+-CONFIG_USB1_VBUS_PIN=""
+ CONFIG_I2C0_ENABLE=y
+ CONFIG_AXP_GPIO=y
+ CONFIG_VIDEO_LCD_MODE="x:2048,y:1536,depth:24,pclk_khz:208000,le:5,ri:150,up:9,lo:24,hs:5,vs:1,sync:3,vmode:0"
+--- a/configs/Cubieboard4_defconfig
++++ b/configs/Cubieboard4_defconfig
+@@ -5,10 +5,7 @@ CONFIG_SPL=y
+ CONFIG_MACH_SUN9I=y
+ CONFIG_DRAM_CLK=672
+ CONFIG_MMC_SUNXI_SLOT_EXTRA=2
+-CONFIG_USB0_VBUS_PIN="AXP0-VBUS-ENABLE"
+ CONFIG_USB0_ID_DET="PH16"
+-CONFIG_USB1_VBUS_PIN="PH14"
+-CONFIG_USB3_VBUS_PIN="PH15"
+ CONFIG_AXP_GPIO=y
+ CONFIG_SYS_I2C_SUN8I_RSB=y
+ CONFIG_REGULATOR_AXP_DRIVEVBUS=y
+--- a/configs/Cubietruck_defconfig
++++ b/configs/Cubietruck_defconfig
+@@ -4,7 +4,6 @@ CONFIG_DEFAULT_DEVICE_TREE="sun7i-a20-cu
+ CONFIG_SPL=y
+ CONFIG_MACH_SUN7I=y
+ CONFIG_DRAM_CLK=432
+-CONFIG_USB0_VBUS_PIN="PH17"
+ CONFIG_USB0_VBUS_DET="PH22"
+ CONFIG_USB0_ID_DET="PH19"
+ CONFIG_VIDEO_VGA=y
+--- a/configs/Cubietruck_plus_defconfig
++++ b/configs/Cubietruck_plus_defconfig
+@@ -7,10 +7,7 @@ CONFIG_DRAM_CLK=672
+ CONFIG_DRAM_ZQ=15355
+ CONFIG_DRAM_ODT_EN=y
+ CONFIG_MMC_SUNXI_SLOT_EXTRA=2
+-CONFIG_USB0_VBUS_PIN="AXP0-VBUS-ENABLE"
+ CONFIG_USB0_ID_DET="PH11"
+-CONFIG_USB1_VBUS_PIN="PD29"
+-CONFIG_USB2_VBUS_PIN="PL6"
+ CONFIG_I2C0_ENABLE=y
+ CONFIG_AXP_GPIO=y
+ # CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set
+--- a/configs/Empire_electronix_d709_defconfig
++++ b/configs/Empire_electronix_d709_defconfig
+@@ -5,7 +5,6 @@ CONFIG_SPL=y
+ CONFIG_MACH_SUN5I=y
+ CONFIG_DRAM_CLK=432
+ CONFIG_DRAM_EMR1=0
+-CONFIG_USB0_VBUS_PIN="PG12"
+ CONFIG_USB0_VBUS_DET="PG1"
+ CONFIG_USB0_ID_DET="PG2"
+ CONFIG_AXP_GPIO=y
+--- a/configs/Empire_electronix_m712_defconfig
++++ b/configs/Empire_electronix_m712_defconfig
+@@ -4,7 +4,6 @@ CONFIG_DEFAULT_DEVICE_TREE="sun5i-a13-em
+ CONFIG_SPL=y
+ CONFIG_MACH_SUN5I=y
+ CONFIG_DRAM_CLK=408
+-CONFIG_USB0_VBUS_PIN="PG12"
+ CONFIG_USB0_VBUS_DET="PG1"
+ CONFIG_USB0_ID_DET="PG2"
+ CONFIG_AXP_GPIO=y
+--- a/configs/Hummingbird_A31_defconfig
++++ b/configs/Hummingbird_A31_defconfig
+@@ -4,8 +4,6 @@ CONFIG_DEFAULT_DEVICE_TREE="sun6i-a31-hu
+ CONFIG_SPL=y
+ CONFIG_MACH_SUN6I=y
+ CONFIG_DRAM_ZQ=251
+-CONFIG_USB1_VBUS_PIN="PH24"
+-CONFIG_USB2_VBUS_PIN=""
+ CONFIG_VIDEO_VGA_VIA_LCD=y
+ CONFIG_VIDEO_VGA_EXTERNAL_DAC_EN="PH25"
+ # CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set
+--- a/configs/Hyundai_A7HD_defconfig
++++ b/configs/Hyundai_A7HD_defconfig
+@@ -4,10 +4,7 @@ CONFIG_DEFAULT_DEVICE_TREE="sun4i-a10-hy
+ CONFIG_SPL=y
+ CONFIG_MACH_SUN4I=y
+ CONFIG_DRAM_EMR1=4
+-CONFIG_USB0_VBUS_PIN="PB09"
+ CONFIG_USB0_VBUS_DET="PH5"
+-CONFIG_USB1_VBUS_PIN=""
+-CONFIG_USB2_VBUS_PIN="PH6"
+ CONFIG_VIDEO_LCD_MODE="x:1024,y:600,depth:18,pclk_khz:51000,le:45,ri:274,up:22,lo:12,hs:1,vs:1,sync:3,vmode:0"
+ CONFIG_VIDEO_LCD_POWER="PH2"
+ CONFIG_VIDEO_LCD_BL_EN="PH9"
+--- a/configs/Linksprite_pcDuino3_Nano_defconfig
++++ b/configs/Linksprite_pcDuino3_Nano_defconfig
+@@ -5,7 +5,6 @@ CONFIG_SPL=y
+ CONFIG_MACH_SUN7I=y
+ CONFIG_DRAM_CLK=408
+ CONFIG_DRAM_ZQ=122
+-CONFIG_USB1_VBUS_PIN="PH11"
+ CONFIG_GMAC_TX_DELAY=3
+ CONFIG_AHCI=y
+ # CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set
+--- a/configs/Linksprite_pcDuino_defconfig
++++ b/configs/Linksprite_pcDuino_defconfig
+@@ -3,8 +3,6 @@ CONFIG_ARCH_SUNXI=y
+ CONFIG_DEFAULT_DEVICE_TREE="sun4i-a10-pcduino"
+ CONFIG_SPL=y
+ CONFIG_MACH_SUN4I=y
+-CONFIG_USB1_VBUS_PIN=""
+-CONFIG_USB2_VBUS_PIN=""
+ # CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set
+ CONFIG_SPL_I2C=y
+ CONFIG_SYS_I2C_MVTWSI=y
+--- a/configs/MSI_Primo81_defconfig
++++ b/configs/MSI_Primo81_defconfig
+@@ -5,7 +5,6 @@ CONFIG_SPL=y
+ CONFIG_MACH_SUN6I=y
+ CONFIG_DRAM_CLK=360
+ CONFIG_DRAM_ZQ=122
+-CONFIG_USB0_VBUS_PIN="AXP0-VBUS-ENABLE"
+ CONFIG_AXP_GPIO=y
+ CONFIG_VIDEO_LCD_MODE="x:768,y:1024,depth:18,pclk_khz:66000,le:56,ri:60,up:30,lo:36,hs:64,vs:50,sync:3,vmode:0"
+ CONFIG_VIDEO_LCD_BL_EN="PA25"
+--- a/configs/Mele_A1000G_quad_defconfig
++++ b/configs/Mele_A1000G_quad_defconfig
+@@ -4,8 +4,6 @@ CONFIG_DEFAULT_DEVICE_TREE="sun6i-a31-me
+ CONFIG_SPL=y
+ CONFIG_MACH_SUN6I=y
+ CONFIG_DRAM_ZQ=120
+-CONFIG_USB1_VBUS_PIN="PC27"
+-CONFIG_USB2_VBUS_PIN=""
+ # CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set
+ CONFIG_PHY_REALTEK=y
+ CONFIG_ETH_DESIGNWARE=y
+--- a/configs/Mele_I7_defconfig
++++ b/configs/Mele_I7_defconfig
+@@ -4,8 +4,6 @@ CONFIG_DEFAULT_DEVICE_TREE="sun6i-a31-i7
+ CONFIG_SPL=y
+ CONFIG_MACH_SUN6I=y
+ CONFIG_DRAM_ZQ=120
+-CONFIG_USB1_VBUS_PIN="PC27"
+-CONFIG_USB2_VBUS_PIN=""
+ # CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set
+ CONFIG_PHY_REALTEK=y
+ CONFIG_ETH_DESIGNWARE=y
+--- a/configs/Mele_M9_defconfig
++++ b/configs/Mele_M9_defconfig
+@@ -4,8 +4,6 @@ CONFIG_DEFAULT_DEVICE_TREE="sun6i-a31-m9
+ CONFIG_SPL=y
+ CONFIG_MACH_SUN6I=y
+ CONFIG_DRAM_ZQ=120
+-CONFIG_USB1_VBUS_PIN="PC27"
+-CONFIG_USB2_VBUS_PIN=""
+ # CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set
+ CONFIG_PHY_REALTEK=y
+ CONFIG_ETH_DESIGNWARE=y
+--- a/configs/Merrii_A80_Optimus_defconfig
++++ b/configs/Merrii_A80_Optimus_defconfig
+@@ -5,10 +5,7 @@ CONFIG_SPL=y
+ CONFIG_MACH_SUN9I=y
+ CONFIG_DRAM_CLK=672
+ CONFIG_MMC_SUNXI_SLOT_EXTRA=2
+-CONFIG_USB0_VBUS_PIN="AXP0-VBUS-ENABLE"
+ CONFIG_USB0_ID_DET="PH3"
+-CONFIG_USB1_VBUS_PIN="PH4"
+-CONFIG_USB3_VBUS_PIN="PH5"
+ CONFIG_AXP_GPIO=y
+ CONFIG_SYS_I2C_SUN8I_RSB=y
+ CONFIG_REGULATOR_AXP_DRIVEVBUS=y
+--- a/configs/Mini-X_defconfig
++++ b/configs/Mini-X_defconfig
+@@ -3,7 +3,6 @@ CONFIG_ARCH_SUNXI=y
+ CONFIG_DEFAULT_DEVICE_TREE="sun4i-a10-mini-xplus"
+ CONFIG_SPL=y
+ CONFIG_MACH_SUN4I=y
+-CONFIG_USB0_VBUS_PIN="PB9"
+ CONFIG_VIDEO_COMPOSITE=y
+ # CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set
+ CONFIG_SPL_I2C=y
+--- a/configs/Orangepi_defconfig
++++ b/configs/Orangepi_defconfig
+@@ -4,8 +4,6 @@ CONFIG_DEFAULT_DEVICE_TREE="sun7i-a20-or
+ CONFIG_SPL=y
+ CONFIG_MACH_SUN7I=y
+ CONFIG_DRAM_CLK=432
+-CONFIG_USB1_VBUS_PIN="PH26"
+-CONFIG_USB2_VBUS_PIN="PH22"
+ CONFIG_VIDEO_VGA=y
+ CONFIG_VIDEO_COMPOSITE=y
+ CONFIG_GMAC_TX_DELAY=3
+--- a/configs/Orangepi_mini_defconfig
++++ b/configs/Orangepi_mini_defconfig
+@@ -5,8 +5,6 @@ CONFIG_SPL=y
+ CONFIG_MACH_SUN7I=y
+ CONFIG_DRAM_CLK=432
+ CONFIG_MMC_SUNXI_SLOT_EXTRA=3
+-CONFIG_USB1_VBUS_PIN="PH26"
+-CONFIG_USB2_VBUS_PIN="PH22"
+ CONFIG_VIDEO_COMPOSITE=y
+ CONFIG_GMAC_TX_DELAY=3
+ CONFIG_AHCI=y
+--- a/configs/Sinlinx_SinA31s_defconfig
++++ b/configs/Sinlinx_SinA31s_defconfig
+@@ -6,8 +6,6 @@ CONFIG_MACH_SUN6I=y
+ CONFIG_DRAM_CLK=432
+ CONFIG_DRAM_ZQ=251
+ CONFIG_MMC_SUNXI_SLOT_EXTRA=3
+-CONFIG_USB1_VBUS_PIN=""
+-CONFIG_USB2_VBUS_PIN=""
+ # CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set
+ CONFIG_PHY_REALTEK=y
+ CONFIG_ETH_DESIGNWARE=y
+--- a/configs/Sinovoip_BPI_M2_defconfig
++++ b/configs/Sinovoip_BPI_M2_defconfig
+@@ -4,8 +4,6 @@ CONFIG_DEFAULT_DEVICE_TREE="sun6i-a31s-s
+ CONFIG_SPL=y
+ CONFIG_MACH_SUN6I=y
+ CONFIG_DRAM_CLK=432
+-CONFIG_USB1_VBUS_PIN=""
+-CONFIG_USB2_VBUS_PIN=""
+ # CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set
+ CONFIG_PHY_REALTEK=y
+ CONFIG_ETH_DESIGNWARE=y
+--- a/configs/Sinovoip_BPI_M3_defconfig
++++ b/configs/Sinovoip_BPI_M3_defconfig
+@@ -8,9 +8,7 @@ CONFIG_DRAM_CLK=480
+ CONFIG_DRAM_ZQ=15355
+ CONFIG_DRAM_ODT_EN=y
+ CONFIG_MMC_SUNXI_SLOT_EXTRA=2
+-CONFIG_USB0_VBUS_PIN="AXP0-VBUS-ENABLE"
+ CONFIG_USB0_ID_DET="PH11"
+-CONFIG_USB1_VBUS_PIN="PD24"
+ CONFIG_AXP_GPIO=y
+ # CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set
+ CONFIG_CONSOLE_MUX=y
+--- a/configs/Sunchip_CX-A99_defconfig
++++ b/configs/Sunchip_CX-A99_defconfig
+@@ -7,7 +7,4 @@ CONFIG_DRAM_CLK=600
+ CONFIG_DRAM_ZQ=3881915
+ CONFIG_DRAM_ODT_EN=y
+ CONFIG_MMC_SUNXI_SLOT_EXTRA=2
+-CONFIG_USB0_VBUS_PIN="PH15"
+-CONFIG_USB1_VBUS_PIN="PL7"
+-CONFIG_USB3_VBUS_PIN="PL8"
+ # CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set
+--- a/configs/UTOO_P66_defconfig
++++ b/configs/UTOO_P66_defconfig
+@@ -6,7 +6,6 @@ CONFIG_MACH_SUN5I=y
+ CONFIG_DRAM_CLK=432
+ CONFIG_DRAM_EMR1=0
+ CONFIG_MMC_SUNXI_SLOT_EXTRA=2
+-CONFIG_USB0_VBUS_PIN="PB04"
+ CONFIG_USB0_VBUS_DET="PG01"
+ CONFIG_USB0_ID_DET="PG2"
+ CONFIG_AXP_GPIO=y
+--- a/configs/Wexler_TAB7200_defconfig
++++ b/configs/Wexler_TAB7200_defconfig
+@@ -4,7 +4,6 @@ CONFIG_DEFAULT_DEVICE_TREE="sun7i-a20-we
+ CONFIG_SPL=y
+ CONFIG_MACH_SUN7I=y
+ CONFIG_DRAM_CLK=384
+-CONFIG_USB0_VBUS_PIN="PB9"
+ CONFIG_USB0_ID_DET="PH4"
+ CONFIG_AXP_GPIO=y
+ CONFIG_VIDEO_LCD_MODE="x:800,y:480,depth:24,pclk_khz:33000,le:45,ri:210,up:22,lo:22,hs:1,vs:1,sync:3,vmode:0"
+--- a/configs/Wobo_i5_defconfig
++++ b/configs/Wobo_i5_defconfig
+@@ -4,7 +4,6 @@ CONFIG_DEFAULT_DEVICE_TREE="sun5i-a10s-w
+ CONFIG_SPL=y
+ CONFIG_MACH_SUN5I=y
+ CONFIG_DRAM_CLK=432
+-CONFIG_USB1_VBUS_PIN="PG12"
+ # CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set
+ CONFIG_SPL_I2C=y
+ CONFIG_SYS_I2C_MVTWSI=y
+--- a/configs/Yones_Toptech_BD1078_defconfig
++++ b/configs/Yones_Toptech_BD1078_defconfig
+@@ -6,7 +6,6 @@ CONFIG_MACH_SUN7I=y
+ CONFIG_DRAM_CLK=408
+ CONFIG_MMC1_PINS_PH=y
+ CONFIG_MMC_SUNXI_SLOT_EXTRA=1
+-CONFIG_USB0_VBUS_PIN="PB9"
+ CONFIG_AXP_GPIO=y
+ CONFIG_VIDEO_LCD_MODE="x:1024,y:600,depth:24,pclk_khz:63000,le:32,ri:287,up:22,lo:12,hs:1,vs:1,sync:3,vmode:0"
+ CONFIG_VIDEO_LCD_DCLK_PHASE=0
+--- a/configs/Yones_Toptech_BS1078_V2_defconfig
++++ b/configs/Yones_Toptech_BS1078_V2_defconfig
+@@ -5,7 +5,6 @@ CONFIG_SPL=y
+ CONFIG_MACH_SUN6I=y
+ CONFIG_DRAM_CLK=420
+ CONFIG_DRAM_ZQ=251
+-CONFIG_USB0_VBUS_PIN="AXP0-VBUS-ENABLE"
+ CONFIG_USB0_ID_DET="PA15"
+ CONFIG_AXP_GPIO=y
+ CONFIG_VIDEO_LCD_MODE="x:1024,y:600,depth:24,pclk_khz:70000,le:120,ri:180,up:17,lo:15,hs:20,vs:3,sync:3,vmode:0"
+--- a/configs/ba10_tv_box_defconfig
++++ b/configs/ba10_tv_box_defconfig
+@@ -5,8 +5,6 @@ CONFIG_SPL=y
+ CONFIG_MACH_SUN4I=y
+ CONFIG_DRAM_CLK=384
+ CONFIG_DRAM_EMR1=4
+-CONFIG_USB0_VBUS_PIN="PB9"
+-CONFIG_USB2_VBUS_PIN="PH12"
+ CONFIG_VIDEO_COMPOSITE=y
+ # CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set
+ CONFIG_SPL_I2C=y
+--- a/configs/bananapi_m2_berry_defconfig
++++ b/configs/bananapi_m2_berry_defconfig
+@@ -4,7 +4,6 @@ CONFIG_DEFAULT_DEVICE_TREE="sun8i-v40-ba
+ CONFIG_SPL=y
+ CONFIG_MACH_SUN8I_R40=y
+ CONFIG_DRAM_CLK=576
+-CONFIG_USB1_VBUS_PIN="PH23"
+ # CONFIG_HAS_ARMV7_SECURE_BASE is not set
+ CONFIG_AHCI=y
+ # CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set
+--- a/configs/colorfly_e708_q1_defconfig
++++ b/configs/colorfly_e708_q1_defconfig
+@@ -5,7 +5,6 @@ CONFIG_SPL=y
+ CONFIG_MACH_SUN6I=y
+ CONFIG_DRAM_CLK=432
+ CONFIG_DRAM_ZQ=251
+-CONFIG_USB0_VBUS_PIN="AXP0-VBUS-ENABLE"
+ CONFIG_USB0_ID_DET="PA15"
+ CONFIG_AXP_GPIO=y
+ CONFIG_VIDEO_LCD_MODE="x:800,y:1280,depth:24,pclk_khz:64000,le:20,ri:34,up:1,lo:16,hs:10,vs:1,sync:3,vmode:0"
+--- a/configs/difrnce_dit4350_defconfig
++++ b/configs/difrnce_dit4350_defconfig
+@@ -4,7 +4,6 @@ CONFIG_DEFAULT_DEVICE_TREE="sun5i-a13-di
+ CONFIG_SPL=y
+ CONFIG_MACH_SUN5I=y
+ CONFIG_DRAM_CLK=408
+-CONFIG_USB0_VBUS_PIN="PG12"
+ CONFIG_USB0_VBUS_DET="PG1"
+ CONFIG_USB0_ID_DET="PG2"
+ CONFIG_AXP_GPIO=y
+--- a/configs/dserve_dsrv9703c_defconfig
++++ b/configs/dserve_dsrv9703c_defconfig
+@@ -3,7 +3,6 @@ CONFIG_ARCH_SUNXI=y
+ CONFIG_DEFAULT_DEVICE_TREE="sun4i-a10-dserve-dsrv9703c"
+ CONFIG_SPL=y
+ CONFIG_MACH_SUN4I=y
+-CONFIG_USB0_VBUS_PIN="PB9"
+ CONFIG_USB0_VBUS_DET="PH5"
+ CONFIG_USB0_ID_DET="PH4"
+ CONFIG_VIDEO_LCD_MODE="x:1024,y:768,depth:18,pclk_khz:80000,le:479,ri:544,up:5,lo:26,hs:1,vs:1,sync:3,vmode:0"
+--- a/configs/ga10h_v1_1_defconfig
++++ b/configs/ga10h_v1_1_defconfig
+@@ -6,7 +6,6 @@ CONFIG_MACH_SUN8I_A33=y
+ CONFIG_DRAM_CLK=432
+ CONFIG_DRAM_ZQ=15291
+ CONFIG_DRAM_ODT_EN=y
+-CONFIG_USB0_VBUS_PIN="AXP0-VBUS-ENABLE"
+ CONFIG_USB0_ID_DET="PH8"
+ CONFIG_AXP_GPIO=y
+ CONFIG_VIDEO_LCD_MODE="x:1024,y:600,depth:18,pclk_khz:52000,le:138,ri:162,up:22,lo:10,hs:20,vs:3,sync:3,vmode:0"
+--- a/configs/gt90h_v4_defconfig
++++ b/configs/gt90h_v4_defconfig
+@@ -5,7 +5,6 @@ CONFIG_SPL=y
+ CONFIG_MACH_SUN8I_A23=y
+ CONFIG_DRAM_CLK=480
+ CONFIG_DRAM_ZQ=32767
+-CONFIG_USB0_VBUS_PIN="AXP0-VBUS-ENABLE"
+ CONFIG_USB0_ID_DET="PH8"
+ CONFIG_AXP_GPIO=y
+ CONFIG_VIDEO_LCD_MODE="x:1024,y:600,depth:18,pclk_khz:55000,le:159,ri:160,up:22,lo:12,hs:1,vs:1,sync:3,vmode:0"
+--- a/configs/h8_homlet_v2_defconfig
++++ b/configs/h8_homlet_v2_defconfig
+@@ -6,8 +6,6 @@ CONFIG_MACH_SUN8I_A83T=y
+ CONFIG_DRAM_CLK=480
+ CONFIG_DRAM_ZQ=15355
+ CONFIG_DRAM_ODT_EN=y
+-CONFIG_USB0_VBUS_PIN="PL5"
+-CONFIG_USB1_VBUS_PIN="PL6"
+ CONFIG_AXP_GPIO=y
+ # CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set
+ CONFIG_CONSOLE_MUX=y
+--- a/configs/iNet_3F_defconfig
++++ b/configs/iNet_3F_defconfig
+@@ -5,7 +5,6 @@ CONFIG_SPL=y
+ CONFIG_MACH_SUN4I=y
+ CONFIG_DRAM_CLK=432
+ CONFIG_DRAM_EMR1=4
+-CONFIG_USB0_VBUS_PIN="PB9"
+ CONFIG_USB0_VBUS_DET="PH5"
+ CONFIG_VIDEO_LCD_MODE="x:1024,y:768,depth:18,pclk_khz:100000,le:799,ri:260,up:15,lo:16,hs:1,vs:1,sync:3,vmode:0"
+ CONFIG_VIDEO_LCD_POWER="PH8"
+--- a/configs/iNet_3W_defconfig
++++ b/configs/iNet_3W_defconfig
+@@ -6,7 +6,6 @@ CONFIG_MACH_SUN4I=y
+ CONFIG_DRAM_CLK=408
+ CONFIG_DRAM_ZQ=127
+ CONFIG_DRAM_EMR1=4
+-CONFIG_USB0_VBUS_PIN="PB9"
+ CONFIG_USB0_VBUS_DET="PH5"
+ CONFIG_VIDEO_LCD_MODE="x:1024,y:768,depth:24,pclk_khz:65000,le:159,ri:160,up:22,lo:15,hs:1,vs:1,sync:3,vmode:0"
+ CONFIG_VIDEO_LCD_POWER="PH8"
+--- a/configs/iNet_86VS_defconfig
++++ b/configs/iNet_86VS_defconfig
+@@ -4,7 +4,6 @@ CONFIG_DEFAULT_DEVICE_TREE="sun5i-a13-in
+ CONFIG_SPL=y
+ CONFIG_MACH_SUN5I=y
+ CONFIG_DRAM_CLK=408
+-CONFIG_USB0_VBUS_PIN="PG12"
+ CONFIG_USB0_VBUS_DET="PG1"
+ CONFIG_AXP_GPIO=y
+ # CONFIG_VIDEO_HDMI is not set
+--- a/configs/iNet_D978_rev2_defconfig
++++ b/configs/iNet_D978_rev2_defconfig
+@@ -5,7 +5,6 @@ CONFIG_SPL=y
+ CONFIG_MACH_SUN8I_A33=y
+ CONFIG_DRAM_CLK=456
+ CONFIG_DRAM_ZQ=15291
+-CONFIG_USB0_VBUS_PIN="AXP0-VBUS-ENABLE"
+ CONFIG_USB0_ID_DET="PH8"
+ CONFIG_AXP_GPIO=y
+ CONFIG_VIDEO_LCD_MODE="x:1024,y:768,depth:18,pclk_khz:65000,le:120,ri:180,up:22,lo:13,hs:20,vs:3,sync:3,vmode:0"
+--- a/configs/icnova-a20-swac_defconfig
++++ b/configs/icnova-a20-swac_defconfig
+@@ -9,9 +9,7 @@ CONFIG_SPL=y
+ CONFIG_MACH_SUN7I=y
+ CONFIG_DRAM_CLK=384
+ CONFIG_OLD_SUNXI_KERNEL_COMPAT=y
+-CONFIG_USB0_VBUS_PIN="PG11"
+ CONFIG_USB0_VBUS_DET="PH7"
+-CONFIG_USB1_VBUS_PIN="PG10"
+ CONFIG_VIDEO_LCD_MODE="x:800,y:480,depth:24,pclk_khz:33000,le:45,ri:209,up:22,lo:22,hs:1,vs:1,sync:3,vmode:0"
+ CONFIG_VIDEO_LCD_POWER="PH22"
+ CONFIG_VIDEO_LCD_PANEL_LVDS=y
+--- a/configs/inet1_defconfig
++++ b/configs/inet1_defconfig
+@@ -5,7 +5,6 @@ CONFIG_SPL=y
+ CONFIG_MACH_SUN4I=y
+ CONFIG_DRAM_CLK=432
+ CONFIG_DRAM_EMR1=4
+-CONFIG_USB0_VBUS_PIN="PB9"
+ CONFIG_USB0_VBUS_DET="PH5"
+ CONFIG_USB0_ID_DET="PH4"
+ CONFIG_VIDEO_LCD_MODE="x:1024,y:600,depth:24,pclk_khz:52000,le:32,ri:287,up:22,lo:12,hs:1,vs:1,sync:3,vmode:0"
+--- a/configs/inet86dz_defconfig
++++ b/configs/inet86dz_defconfig
+@@ -5,7 +5,6 @@ CONFIG_SPL=y
+ CONFIG_MACH_SUN8I_A23=y
+ CONFIG_DRAM_CLK=552
+ CONFIG_DRAM_ZQ=63351
+-CONFIG_USB0_VBUS_PIN="AXP0-VBUS-ENABLE"
+ CONFIG_USB0_ID_DET="PH8"
+ CONFIG_AXP_GPIO=y
+ CONFIG_VIDEO_LCD_MODE="x:1024,y:600,depth:18,pclk_khz:51000,le:138,ri:162,up:22,lo:10,hs:20,vs:3,sync:3,vmode:0"
+--- a/configs/inet97fv2_defconfig
++++ b/configs/inet97fv2_defconfig
+@@ -5,7 +5,6 @@ CONFIG_SPL=y
+ CONFIG_MACH_SUN4I=y
+ CONFIG_DRAM_CLK=408
+ CONFIG_DRAM_EMR1=4
+-CONFIG_USB0_VBUS_PIN="PB9"
+ CONFIG_USB0_VBUS_DET="PH5"
+ CONFIG_USB0_ID_DET="PH4"
+ CONFIG_VIDEO_LCD_MODE="x:800,y:480,depth:24,pclk_khz:33000,le:45,ri:209,up:22,lo:22,hs:1,vs:1,sync:3,vmode:0"
+--- a/configs/inet98v_rev2_defconfig
++++ b/configs/inet98v_rev2_defconfig
+@@ -4,7 +4,6 @@ CONFIG_DEFAULT_DEVICE_TREE="sun5i-a13-in
+ CONFIG_SPL=y
+ CONFIG_MACH_SUN5I=y
+ CONFIG_DRAM_CLK=432
+-CONFIG_USB0_VBUS_PIN="PG12"
+ CONFIG_USB0_VBUS_DET="PG1"
+ CONFIG_USB0_ID_DET="PG2"
+ CONFIG_AXP_GPIO=y
+--- a/configs/inet9f_rev03_defconfig
++++ b/configs/inet9f_rev03_defconfig
+@@ -5,7 +5,6 @@ CONFIG_SPL=y
+ CONFIG_MACH_SUN4I=y
+ CONFIG_DRAM_CLK=408
+ CONFIG_DRAM_EMR1=4
+-CONFIG_USB0_VBUS_PIN="PB9"
+ CONFIG_USB0_VBUS_DET="PH5"
+ CONFIG_USB0_ID_DET="PH4"
+ CONFIG_VIDEO_LCD_MODE="x:800,y:480,depth:24,pclk_khz:33000,le:45,ri:209,up:22,lo:22,hs:1,vs:1,sync:3,vmode:0"
+--- a/configs/inet_q972_defconfig
++++ b/configs/inet_q972_defconfig
+@@ -5,7 +5,6 @@ CONFIG_SPL=y
+ CONFIG_MACH_SUN6I=y
+ CONFIG_DRAM_CLK=384
+ CONFIG_DRAM_ZQ=251
+-CONFIG_USB0_VBUS_PIN="AXP0-VBUS-ENABLE"
+ CONFIG_USB0_ID_DET="PA15"
+ CONFIG_AXP_GPIO=y
+ CONFIG_VIDEO_LCD_MODE="x:1024,y:768,depth:18,pclk_khz:65000,le:280,ri:20,up:22,lo:8,hs:20,vs:8,sync:3,vmode:0"
+--- a/configs/jesurun_q5_defconfig
++++ b/configs/jesurun_q5_defconfig
+@@ -4,7 +4,6 @@ CONFIG_DEFAULT_DEVICE_TREE="sun4i-a10-je
+ CONFIG_SPL=y
+ CONFIG_MACH_SUN4I=y
+ CONFIG_DRAM_CLK=312
+-CONFIG_USB0_VBUS_PIN="PB9"
+ CONFIG_VIDEO_COMPOSITE=y
+ # CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set
+ CONFIG_SPL_I2C=y
+--- a/configs/mixtile_loftq_defconfig
++++ b/configs/mixtile_loftq_defconfig
+@@ -5,8 +5,6 @@ CONFIG_SPL=y
+ CONFIG_MACH_SUN6I=y
+ CONFIG_DRAM_ZQ=251
+ CONFIG_MMC_SUNXI_SLOT_EXTRA=2
+-CONFIG_USB1_VBUS_PIN="PH24"
+-CONFIG_USB2_VBUS_PIN=""
+ # CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set
+ CONFIG_PHY_REALTEK=y
+ CONFIG_ETH_DESIGNWARE=y
+--- a/configs/mk802_a10s_defconfig
++++ b/configs/mk802_a10s_defconfig
+@@ -5,7 +5,6 @@ CONFIG_SPL=y
+ CONFIG_MACH_SUN5I=y
+ CONFIG_DRAM_CLK=432
+ CONFIG_DRAM_EMR1=0
+-CONFIG_USB1_VBUS_PIN="PB10"
+ # CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set
+ CONFIG_SPL_I2C=y
+ CONFIG_SYS_I2C_MVTWSI=y
+--- a/configs/mk802_defconfig
++++ b/configs/mk802_defconfig
+@@ -3,7 +3,6 @@ CONFIG_ARCH_SUNXI=y
+ CONFIG_DEFAULT_DEVICE_TREE="sun4i-a10-mk802"
+ CONFIG_SPL=y
+ CONFIG_MACH_SUN4I=y
+-CONFIG_USB2_VBUS_PIN="PH12"
+ # CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set
+ CONFIG_SYS_I2C_MVTWSI=y
+ CONFIG_SYS_I2C_SLAVE=0x7f
+--- a/configs/orangepi_2_defconfig
++++ b/configs/orangepi_2_defconfig
+@@ -5,7 +5,6 @@ CONFIG_DEFAULT_DEVICE_TREE="sun8i-h3-ora
+ CONFIG_SPL=y
+ CONFIG_MACH_SUN8I_H3=y
+ CONFIG_DRAM_CLK=672
+-CONFIG_USB1_VBUS_PIN="PG13"
+ # CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set
+ CONFIG_SPL_I2C=y
+ CONFIG_SPL_SYS_I2C_LEGACY=y
+--- a/configs/orangepi_plus_defconfig
++++ b/configs/orangepi_plus_defconfig
+@@ -5,8 +5,6 @@ CONFIG_SPL=y
+ CONFIG_MACH_SUN8I_H3=y
+ CONFIG_DRAM_CLK=672
+ CONFIG_MMC_SUNXI_SLOT_EXTRA=2
+-CONFIG_USB1_VBUS_PIN="PG13"
+-CONFIG_USB3_VBUS_PIN="PG11"
+ # CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set
+ CONFIG_SPL_I2C=y
+ CONFIG_SPL_SYS_I2C_LEGACY=y
+--- a/configs/parrot_r16_defconfig
++++ b/configs/parrot_r16_defconfig
+@@ -7,7 +7,6 @@ CONFIG_DRAM_CLK=600
+ CONFIG_DRAM_ZQ=15291
+ CONFIG_MMC_SUNXI_SLOT_EXTRA=2
+ CONFIG_USB0_ID_DET="PD10"
+-CONFIG_USB1_VBUS_PIN="PD12"
+ CONFIG_AXP_GPIO=y
+ # CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set
+ CONFIG_FASTBOOT_CMD_OEM_FORMAT=y
+--- a/configs/pine_h64_defconfig
++++ b/configs/pine_h64_defconfig
+@@ -5,7 +5,6 @@ CONFIG_SPL=y
+ CONFIG_MACH_SUN50I_H6=y
+ CONFIG_SUNXI_DRAM_H6_LPDDR3=y
+ CONFIG_MMC_SUNXI_SLOT_EXTRA=2
+-CONFIG_USB3_VBUS_PIN="PL5"
+ CONFIG_SPL_SPI_SUNXI=y
+ # CONFIG_PSCI_RESET is not set
+ # CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set
+--- a/configs/polaroid_mid2407pxe03_defconfig
++++ b/configs/polaroid_mid2407pxe03_defconfig
+@@ -5,7 +5,6 @@ CONFIG_SPL=y
+ CONFIG_MACH_SUN8I_A23=y
+ CONFIG_DRAM_CLK=432
+ CONFIG_DRAM_ZQ=63351
+-CONFIG_USB0_VBUS_PIN="AXP0-VBUS-ENABLE"
+ CONFIG_USB0_ID_DET="PH8"
+ CONFIG_AXP_GPIO=y
+ CONFIG_VIDEO_LCD_MODE="x:800,y:480,depth:18,pclk_khz:33000,le:87,ri:40,up:31,lo:13,hs:1,vs:1,sync:3,vmode:0"
+--- a/configs/polaroid_mid2809pxe04_defconfig
++++ b/configs/polaroid_mid2809pxe04_defconfig
+@@ -5,7 +5,6 @@ CONFIG_SPL=y
+ CONFIG_MACH_SUN8I_A23=y
+ CONFIG_DRAM_CLK=432
+ CONFIG_DRAM_ZQ=63351
+-CONFIG_USB0_VBUS_PIN="AXP0-VBUS-ENABLE"
+ CONFIG_USB0_ID_DET="PH8"
+ CONFIG_AXP_GPIO=y
+ CONFIG_VIDEO_LCD_MODE="x:800,y:480,depth:18,pclk_khz:33000,le:36,ri:210,up:18,lo:22,hs:10,vs:5,sync:3,vmode:0"
+--- a/configs/pov_protab2_ips9_defconfig
++++ b/configs/pov_protab2_ips9_defconfig
+@@ -4,7 +4,6 @@ CONFIG_DEFAULT_DEVICE_TREE="sun4i-a10-po
+ CONFIG_SPL=y
+ CONFIG_MACH_SUN4I=y
+ CONFIG_DRAM_CLK=432
+-CONFIG_USB0_VBUS_PIN="PB9"
+ CONFIG_USB0_VBUS_DET="PH5"
+ CONFIG_USB0_ID_DET="PH4"
+ CONFIG_VIDEO_LCD_MODE="x:1024,y:768,depth:18,pclk_khz:100000,le:480,ri:260,up:6,lo:16,hs:320,vs:10,sync:3,vmode:0"
+--- a/configs/q8_a13_tablet_defconfig
++++ b/configs/q8_a13_tablet_defconfig
+@@ -4,7 +4,6 @@ CONFIG_DEFAULT_DEVICE_TREE="sun5i-a13-q8
+ CONFIG_SPL=y
+ CONFIG_MACH_SUN5I=y
+ CONFIG_DRAM_CLK=384
+-CONFIG_USB0_VBUS_PIN="PG12"
+ CONFIG_USB0_VBUS_DET="PG1"
+ CONFIG_USB0_ID_DET="PG2"
+ CONFIG_AXP_GPIO=y
+--- a/configs/q8_a23_tablet_800x480_defconfig
++++ b/configs/q8_a23_tablet_800x480_defconfig
+@@ -5,7 +5,6 @@ CONFIG_SPL=y
+ CONFIG_MACH_SUN8I_A23=y
+ CONFIG_DRAM_CLK=432
+ CONFIG_DRAM_ZQ=63306
+-CONFIG_USB0_VBUS_PIN="AXP0-VBUS-ENABLE"
+ CONFIG_USB0_ID_DET="PH8"
+ CONFIG_AXP_GPIO=y
+ CONFIG_VIDEO_LCD_MODE="x:800,y:480,depth:18,pclk_khz:33000,le:36,ri:210,up:18,lo:22,hs:10,vs:5,sync:3,vmode:0"
+--- a/configs/q8_a33_tablet_1024x600_defconfig
++++ b/configs/q8_a33_tablet_1024x600_defconfig
+@@ -5,7 +5,6 @@ CONFIG_SPL=y
+ CONFIG_MACH_SUN8I_A33=y
+ CONFIG_DRAM_CLK=456
+ CONFIG_DRAM_ZQ=15291
+-CONFIG_USB0_VBUS_PIN="AXP0-VBUS-ENABLE"
+ CONFIG_USB0_ID_DET="PH8"
+ CONFIG_AXP_GPIO=y
+ CONFIG_VIDEO_LCD_MODE="x:1024,y:600,depth:18,pclk_khz:51000,le:159,ri:160,up:22,lo:12,hs:1,vs:1,sync:3,vmode:0"
+--- a/configs/q8_a33_tablet_800x480_defconfig
++++ b/configs/q8_a33_tablet_800x480_defconfig
+@@ -5,7 +5,6 @@ CONFIG_SPL=y
+ CONFIG_MACH_SUN8I_A33=y
+ CONFIG_DRAM_CLK=456
+ CONFIG_DRAM_ZQ=15291
+-CONFIG_USB0_VBUS_PIN="AXP0-VBUS-ENABLE"
+ CONFIG_USB0_ID_DET="PH8"
+ CONFIG_AXP_GPIO=y
+ CONFIG_VIDEO_LCD_MODE="x:800,y:480,depth:18,pclk_khz:33000,le:87,ri:167,up:31,lo:13,hs:1,vs:1,sync:3,vmode:0"
+--- a/configs/r7-tv-dongle_defconfig
++++ b/configs/r7-tv-dongle_defconfig
+@@ -4,7 +4,6 @@ CONFIG_DEFAULT_DEVICE_TREE="sun5i-a10s-r
+ CONFIG_SPL=y
+ CONFIG_MACH_SUN5I=y
+ CONFIG_DRAM_CLK=384
+-CONFIG_USB1_VBUS_PIN="PG13"
+ # CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set
+ CONFIG_SPL_I2C=y
+ CONFIG_SYS_I2C_MVTWSI=y
+--- a/configs/sun8i_a23_evb_defconfig
++++ b/configs/sun8i_a23_evb_defconfig
+@@ -5,9 +5,7 @@ CONFIG_SPL=y
+ CONFIG_MACH_SUN8I_A23=y
+ CONFIG_DRAM_CLK=552
+ CONFIG_DRAM_ZQ=63351
+-CONFIG_USB0_VBUS_PIN="axp_drivebus"
+ CONFIG_USB0_VBUS_DET="axp_vbus_detect"
+-CONFIG_USB1_VBUS_PIN="PH7"
+ # CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set
+ CONFIG_CONS_INDEX=5
+ CONFIG_USB_EHCI_HCD=y
+--- a/configs/tbs_a711_defconfig
++++ b/configs/tbs_a711_defconfig
+@@ -8,7 +8,6 @@ CONFIG_DRAM_CLK=552
+ CONFIG_DRAM_ZQ=15355
+ CONFIG_DRAM_ODT_EN=y
+ CONFIG_MMC_SUNXI_SLOT_EXTRA=2
+-CONFIG_USB0_VBUS_PIN="AXP0-VBUS-ENABLE"
+ CONFIG_USB0_ID_DET="PH11"
+ CONFIG_AXP_GPIO=y
+ # CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set
+--- a/configs/teres_i_defconfig
++++ b/configs/teres_i_defconfig
+@@ -6,7 +6,6 @@ CONFIG_MACH_SUN50I=y
+ CONFIG_DRAM_CLK=552
+ CONFIG_DRAM_ZQ=3881949
+ CONFIG_MMC_SUNXI_SLOT_EXTRA=2
+-CONFIG_USB1_VBUS_PIN="PL7"
+ CONFIG_I2C0_ENABLE=y
+ CONFIG_PREBOOT="setenv usb_pgood_delay 2000; usb start"
+ CONFIG_SPL_SYS_I2C_LEGACY=y

+ 0 - 40
package/boot/uboot-d1/patches/0039-arm-dts-sunxi-h3-Add-nodes-for-AR100-remoteproc.patch

@@ -1,40 +0,0 @@
-From 2fdd94449c2668b4ff69326ff8d5daabdf2c9f00 Mon Sep 17 00:00:00 2001
-From: Samuel Holland <[email protected]>
-Date: Sat, 9 Oct 2021 15:04:16 -0500
-Subject: [PATCH 39/90] arm: dts: sunxi: h3: Add nodes for AR100 remoteproc
-
-Signed-off-by: Samuel Holland <[email protected]>
----
- arch/arm/dts/sun8i-h3.dtsi | 14 ++++++++++++++
- 1 file changed, 14 insertions(+)
-
---- a/arch/arm/dts/sun8i-h3.dtsi
-+++ b/arch/arm/dts/sun8i-h3.dtsi
-@@ -170,6 +170,14 @@
- 			#size-cells = <1>;
- 			ranges;
- 
-+			sram_a2: sram@40000 {
-+				compatible = "mmio-sram";
-+				reg = <0x00040000 0xc000>;
-+				#address-cells = <1>;
-+				#size-cells = <1>;
-+				ranges = <0 0x00040000 0xc000>;
-+			};
-+
- 			sram_c: sram@1d00000 {
- 				compatible = "mmio-sram";
- 				reg = <0x01d00000 0x80000>;
-@@ -239,6 +247,12 @@
- 			nvmem-cell-names = "calibration";
- 			#thermal-sensor-cells = <0>;
- 		};
-+
-+		remoteproc@1f01c00 {
-+			compatible = "allwinner,sun6i-a31-ar100";
-+			reg = <0x01f01c00 0x400>;
-+			sram = <&sram_a2>;
-+		};
- 	};
- 
- 	thermal-zones {

+ 46 - 46
package/boot/uboot-d1/patches/0012-gpio-axp-Remove-virtual-VBUS-enable-GPIO.patch → package/boot/uboot-d1/patches/0039-gpio-axp-Remove-virtual-VBUS-enable-GPIO.patch

@@ -1,7 +1,7 @@
-From cbb281e0ec847b9de41970e470348b3534bb9a9f Mon Sep 17 00:00:00 2001
+From 9882140622a7e95e5bf398b3582066fa04931472 Mon Sep 17 00:00:00 2001
 From: Samuel Holland <[email protected]>
 From: Samuel Holland <[email protected]>
 Date: Thu, 26 Aug 2021 18:02:54 -0500
 Date: Thu, 26 Aug 2021 18:02:54 -0500
-Subject: [PATCH 12/90] gpio: axp: Remove virtual VBUS enable GPIO
+Subject: [PATCH 47/68] gpio: axp: Remove virtual VBUS enable GPIO
 
 
 Now that this functionality is modeled using the device tree and
 Now that this functionality is modeled using the device tree and
 regulator uclass, the named GPIO is not referenced anywhere. Remove
 regulator uclass, the named GPIO is not referenced anywhere. Remove
@@ -9,50 +9,19 @@ it, along with the rest of the support for AXP virtual GPIOs.
 
 
 Signed-off-by: Samuel Holland <[email protected]>
 Signed-off-by: Samuel Holland <[email protected]>
 ---
 ---
- arch/arm/include/asm/arch-sunxi/gpio.h |  8 ---
- drivers/gpio/axp_gpio.c                | 75 ++++++++------------------
- drivers/gpio/sunxi_gpio.c              |  8 ---
- include/axp221.h                       |  4 --
- include/axp809.h                       |  4 --
- include/axp818.h                       |  4 --
+ drivers/gpio/axp_gpio.c   | 75 +++++++++++----------------------------
+ drivers/gpio/sunxi_gpio.c |  8 -----
+ include/axp221.h          |  4 ---
+ include/axp809.h          |  4 ---
+ include/axp818.h          |  4 ---
+ include/sunxi_gpio.h      |  8 -----
  6 files changed, 21 insertions(+), 82 deletions(-)
  6 files changed, 21 insertions(+), 82 deletions(-)
 
 
---- a/arch/arm/include/asm/arch-sunxi/gpio.h
-+++ b/arch/arm/include/asm/arch-sunxi/gpio.h
-@@ -111,7 +111,6 @@ enum sunxi_gpio_number {
- 	SUNXI_GPIO_L_START = 352,
- 	SUNXI_GPIO_M_START = SUNXI_GPIO_NEXT(SUNXI_GPIO_L),
- 	SUNXI_GPIO_N_START = SUNXI_GPIO_NEXT(SUNXI_GPIO_M),
--	SUNXI_GPIO_AXP0_START = 1024,
- };
- 
- /* SUNXI GPIO number definitions */
-@@ -128,8 +127,6 @@ enum sunxi_gpio_number {
- #define SUNXI_GPM(_nr)	(SUNXI_GPIO_M_START + (_nr))
- #define SUNXI_GPN(_nr)	(SUNXI_GPIO_N_START + (_nr))
- 
--#define SUNXI_GPAXP0(_nr)	(SUNXI_GPIO_AXP0_START + (_nr))
--
- /* GPIO pin function config */
- #define SUNXI_GPIO_INPUT	0
- #define SUNXI_GPIO_OUTPUT	1
-@@ -207,11 +204,6 @@ enum sunxi_gpio_number {
- #define SUNXI_GPIO_PULL_UP	1
- #define SUNXI_GPIO_PULL_DOWN	2
- 
--/* Virtual AXP0 GPIOs */
--#define SUNXI_GPIO_AXP0_PREFIX "AXP0-"
--#define SUNXI_GPIO_AXP0_VBUS_ENABLE	5
--#define SUNXI_GPIO_AXP0_GPIO_COUNT	6
--
- struct sunxi_gpio_plat {
- 	struct sunxi_gpio	*regs;
- 	char			bank_name[3];
 --- a/drivers/gpio/axp_gpio.c
 --- a/drivers/gpio/axp_gpio.c
 +++ b/drivers/gpio/axp_gpio.c
 +++ b/drivers/gpio/axp_gpio.c
-@@ -15,6 +15,9 @@
- #include <dm/root.h>
+@@ -16,6 +16,9 @@
  #include <errno.h>
  #include <errno.h>
+ #include <sunxi_gpio.h>
  
  
 +#define AXP_GPIO_PREFIX			"AXP0-"
 +#define AXP_GPIO_PREFIX			"AXP0-"
 +#define AXP_GPIO_COUNT			4
 +#define AXP_GPIO_COUNT			4
@@ -60,7 +29,7 @@ Signed-off-by: Samuel Holland <[email protected]>
  static int axp_gpio_set_value(struct udevice *dev, unsigned pin, int val);
  static int axp_gpio_set_value(struct udevice *dev, unsigned pin, int val);
  
  
  static u8 axp_get_gpio_ctrl_reg(unsigned pin)
  static u8 axp_get_gpio_ctrl_reg(unsigned pin)
-@@ -46,28 +49,14 @@ static int axp_gpio_direction_input(stru
+@@ -47,28 +50,14 @@ static int axp_gpio_direction_input(stru
  static int axp_gpio_direction_output(struct udevice *dev, unsigned pin,
  static int axp_gpio_direction_output(struct udevice *dev, unsigned pin,
  				     int val)
  				     int val)
  {
  {
@@ -94,7 +63,7 @@ Signed-off-by: Samuel Holland <[email protected]>
  }
  }
  
  
  static int axp_gpio_get_value(struct udevice *dev, unsigned pin)
  static int axp_gpio_get_value(struct udevice *dev, unsigned pin)
-@@ -75,25 +64,16 @@ static int axp_gpio_get_value(struct ude
+@@ -76,25 +65,16 @@ static int axp_gpio_get_value(struct ude
  	u8 reg, val, mask;
  	u8 reg, val, mask;
  	int ret;
  	int ret;
  
  
@@ -126,7 +95,7 @@ Signed-off-by: Samuel Holland <[email protected]>
  	return (val & mask) ? 1 : 0;
  	return (val & mask) ? 1 : 0;
  }
  }
  
  
-@@ -101,25 +81,12 @@ static int axp_gpio_set_value(struct ude
+@@ -102,25 +82,12 @@ static int axp_gpio_set_value(struct ude
  {
  {
  	u8 reg;
  	u8 reg;
  
  
@@ -157,7 +126,7 @@ Signed-off-by: Samuel Holland <[email protected]>
  }
  }
  
  
  static const struct dm_gpio_ops gpio_axp_ops = {
  static const struct dm_gpio_ops gpio_axp_ops = {
-@@ -134,8 +101,8 @@ static int gpio_axp_probe(struct udevice
+@@ -135,8 +102,8 @@ static int gpio_axp_probe(struct udevice
  	struct gpio_dev_priv *uc_priv = dev_get_uclass_priv(dev);
  	struct gpio_dev_priv *uc_priv = dev_get_uclass_priv(dev);
  
  
  	/* Tell the uclass how many GPIOs we have */
  	/* Tell the uclass how many GPIOs we have */
@@ -170,7 +139,7 @@ Signed-off-by: Samuel Holland <[email protected]>
  }
  }
 --- a/drivers/gpio/sunxi_gpio.c
 --- a/drivers/gpio/sunxi_gpio.c
 +++ b/drivers/gpio/sunxi_gpio.c
 +++ b/drivers/gpio/sunxi_gpio.c
-@@ -114,15 +114,7 @@ int sunxi_name_to_gpio(const char *name)
+@@ -247,15 +247,7 @@ int sunxi_name_to_gpio(const char *name)
  {
  {
  	unsigned int gpio;
  	unsigned int gpio;
  	int ret;
  	int ret;
@@ -225,3 +194,34 @@ Signed-off-by: Samuel Holland <[email protected]>
  #define AXP_GPIO0_CTRL			0x90
  #define AXP_GPIO0_CTRL			0x90
  #define AXP_GPIO1_CTRL			0x92
  #define AXP_GPIO1_CTRL			0x92
  #define AXP_GPIO_CTRL_OUTPUT_LOW	0x00 /* Drive pin low */
  #define AXP_GPIO_CTRL_OUTPUT_LOW	0x00 /* Drive pin low */
+--- a/include/sunxi_gpio.h
++++ b/include/sunxi_gpio.h
+@@ -82,7 +82,6 @@ enum sunxi_gpio_number {
+ 	SUNXI_GPIO_L_START = 352,
+ 	SUNXI_GPIO_M_START = SUNXI_GPIO_NEXT(SUNXI_GPIO_L),
+ 	SUNXI_GPIO_N_START = SUNXI_GPIO_NEXT(SUNXI_GPIO_M),
+-	SUNXI_GPIO_AXP0_START = 1024,
+ };
+ 
+ /* SUNXI GPIO number definitions */
+@@ -99,8 +98,6 @@ enum sunxi_gpio_number {
+ #define SUNXI_GPM(_nr)	(SUNXI_GPIO_M_START + (_nr))
+ #define SUNXI_GPN(_nr)	(SUNXI_GPIO_N_START + (_nr))
+ 
+-#define SUNXI_GPAXP0(_nr)	(SUNXI_GPIO_AXP0_START + (_nr))
+-
+ /* GPIO pin function config */
+ #define SUNXI_GPIO_INPUT	0
+ #define SUNXI_GPIO_OUTPUT	1
+@@ -185,11 +182,6 @@ enum sunxi_gpio_number {
+ #define SUNXI_GPIO_PULL_UP	1
+ #define SUNXI_GPIO_PULL_DOWN	2
+ 
+-/* Virtual AXP0 GPIOs */
+-#define SUNXI_GPIO_AXP0_PREFIX "AXP0-"
+-#define SUNXI_GPIO_AXP0_VBUS_ENABLE	5
+-#define SUNXI_GPIO_AXP0_GPIO_COUNT	6
+-
+ struct sunxi_gpio_plat {
+ 	void			*regs;
+ 	char			bank_name[3];

+ 0 - 63
package/boot/uboot-d1/patches/0040-sunxi-Enable-support-for-SCP-firmware-on-H3.patch

@@ -1,63 +0,0 @@
-From aefe751d6f23c9d526bca447c6c28da97e45e528 Mon Sep 17 00:00:00 2001
-From: Samuel Holland <[email protected]>
-Date: Sat, 17 Apr 2021 13:33:54 -0500
-Subject: [PATCH 40/90] sunxi: Enable support for SCP firmware on H3
-
-Now that issues with the BROM have been sorted out, we can implement
-PSCI system suspend on H3 by delegating to SCP firmware. Let's start by
-including the firmware in the FIT image and starting the coprocessor if
-valid firmware is loaded.
-
-Signed-off-by: Samuel Holland <[email protected]>
----
- arch/arm/dts/sunxi-u-boot.dtsi | 1 +
- board/sunxi/board.c            | 8 ++++++++
- include/configs/sun8i.h        | 3 +++
- 3 files changed, 12 insertions(+)
-
---- a/arch/arm/dts/sunxi-u-boot.dtsi
-+++ b/arch/arm/dts/sunxi-u-boot.dtsi
-@@ -9,6 +9,7 @@
- #if defined(CONFIG_MACH_SUN8I_H3)
- #ifdef CONFIG_ARMV7_PSCI
- #define RESUME_ADDR	SUNXI_RESUME_BASE
-+#define SCP_ADDR	SUNXI_SCP_BASE
- #endif
- #elif defined(CONFIG_MACH_SUN50I) || defined(CONFIG_MACH_SUN50I_H5)
- #define BL31_ADDR	0x00044000
---- a/board/sunxi/board.c
-+++ b/board/sunxi/board.c
-@@ -19,6 +19,7 @@
- #include <init.h>
- #include <log.h>
- #include <mmc.h>
-+#include <remoteproc.h>
- #include <axp_pmic.h>
- #include <generic-phy.h>
- #include <phy-sun4i-usb.h>
-@@ -867,6 +868,13 @@ int board_late_init(void)
- 	usb_ether_init();
- #endif
- 
-+#ifdef CONFIG_REMOTEPROC_SUN6I_AR100
-+	if (!rproc_load(0, SUNXI_SCP_BASE, SUNXI_SCP_MAX_SIZE)) {
-+		puts("Starting SCP...\n");
-+		rproc_start(0);
-+	}
-+#endif
-+
- 	return 0;
- }
- 
---- a/include/configs/sun8i.h
-+++ b/include/configs/sun8i.h
-@@ -12,6 +12,9 @@
- 					 CONFIG_ARMV7_SECURE_MAX_SIZE)
- #define SUNXI_RESUME_SIZE		1024
- 
-+#define SUNXI_SCP_BASE			(SUNXI_RESUME_BASE + SUNXI_RESUME_SIZE)
-+#define SUNXI_SCP_MAX_SIZE		(16 * 1024)
-+
- #include <configs/sunxi-common.h>
- 
- #endif /* __CONFIG_H */

+ 0 - 115
package/boot/uboot-d1/patches/0041-arm-psci-Add-definitions-for-PSCI-v1.1.patch

@@ -1,115 +0,0 @@
-From f73116f62647c74eb0f06f0d8c29e5993d961d82 Mon Sep 17 00:00:00 2001
-From: Samuel Holland <[email protected]>
-Date: Sat, 9 Oct 2021 22:43:26 -0500
-Subject: [PATCH 41/90] arm: psci: Add definitions for PSCI v1.1
-
-Add the new option, function IDs, and prototypes for PSCI v1.1
-implementations. In the process, fix some issues with the existing
-definitions:
- - Fix the incorrectly-named ARM_PSCI_0_2_FN64_SYSTEM_RESET2.
- - Replace the deprecated "affinity_level" naming with "power_level".
-
-Signed-off-by: Samuel Holland <[email protected]>
----
- arch/arm/cpu/armv7/Kconfig    |  3 +++
- arch/arm/cpu/armv8/fwcall.c   |  2 +-
- arch/arm/include/asm/psci.h   |  9 +++++++--
- arch/arm/include/asm/system.h | 14 +++++++++-----
- arch/arm/lib/psci-dt.c        |  2 ++
- 5 files changed, 22 insertions(+), 8 deletions(-)
-
---- a/arch/arm/cpu/armv7/Kconfig
-+++ b/arch/arm/cpu/armv7/Kconfig
-@@ -80,6 +80,9 @@ choice
- 	help
- 	  Select the supported PSCI version.
- 
-+config ARMV7_PSCI_1_1
-+	bool "PSCI V1.1"
-+
- config ARMV7_PSCI_1_0
- 	bool "PSCI V1.0"
- 
---- a/arch/arm/cpu/armv8/fwcall.c
-+++ b/arch/arm/cpu/armv8/fwcall.c
-@@ -103,7 +103,7 @@ void __noreturn psci_system_reset2(u32 r
- {
- 	struct pt_regs regs;
- 
--	regs.regs[0] = ARM_PSCI_0_2_FN64_SYSTEM_RESET2;
-+	regs.regs[0] = ARM_PSCI_1_1_FN64_SYSTEM_RESET2;
- 	regs.regs[1] = PSCI_RESET2_TYPE_VENDOR | reset_level;
- 	regs.regs[2] = cookie;
- 	if (use_smc_for_psci)
---- a/arch/arm/include/asm/psci.h
-+++ b/arch/arm/include/asm/psci.h
-@@ -22,8 +22,9 @@
- #include <linux/bitops.h>
- #endif
- 
--#define ARM_PSCI_VER_1_0		(0x00010000)
- #define ARM_PSCI_VER_0_2		(0x00000002)
-+#define ARM_PSCI_VER_1_0		(0x00010000)
-+#define ARM_PSCI_VER_1_1		(0x00010001)
- 
- /* PSCI 0.1 interface */
- #define ARM_PSCI_FN_BASE		0x95c1ba5e
-@@ -68,7 +69,6 @@
- #define ARM_PSCI_0_2_FN64_AFFINITY_INFO		ARM_PSCI_0_2_FN64(4)
- #define ARM_PSCI_0_2_FN64_MIGRATE		ARM_PSCI_0_2_FN64(5)
- #define ARM_PSCI_0_2_FN64_MIGRATE_INFO_UP_CPU	ARM_PSCI_0_2_FN64(7)
--#define ARM_PSCI_0_2_FN64_SYSTEM_RESET2		ARM_PSCI_0_2_FN64(18)
- 
- /* PSCI 1.0 interface */
- #define ARM_PSCI_1_0_FN_PSCI_FEATURES		ARM_PSCI_0_2_FN(10)
-@@ -86,6 +86,11 @@
- #define ARM_PSCI_1_0_FN64_STAT_RESIDENCY	ARM_PSCI_0_2_FN64(16)
- #define ARM_PSCI_1_0_FN64_STAT_COUNT		ARM_PSCI_0_2_FN64(17)
- 
-+/* PSCI 1.1 interface */
-+#define ARM_PSCI_1_1_FN_SYSTEM_RESET2		ARM_PSCI_0_2_FN(18)
-+
-+#define ARM_PSCI_1_1_FN64_SYSTEM_RESET2		ARM_PSCI_0_2_FN64(18)
-+
- /* 1KB stack per core */
- #define ARM_PSCI_STACK_SHIFT	10
- #define ARM_PSCI_STACK_SIZE	(1 << ARM_PSCI_STACK_SHIFT)
---- a/arch/arm/include/asm/system.h
-+++ b/arch/arm/include/asm/system.h
-@@ -557,16 +557,20 @@ void mmu_page_table_flush(unsigned long
- #ifdef CONFIG_ARMV7_PSCI
- void psci_arch_cpu_entry(void);
- void psci_arch_init(void);
-+
- u32 psci_version(void);
--s32 psci_features(u32 function_id, u32 psci_fid);
-+s32 psci_cpu_suspend(u32 function_id, u32 power_state, u32 pc, u32 context_id);
- s32 psci_cpu_off(void);
--s32 psci_cpu_on(u32 function_id, u32 target_cpu, u32 pc,
--		u32 context_id);
--s32 psci_affinity_info(u32 function_id, u32 target_affinity,
--		       u32  lowest_affinity_level);
-+s32 psci_cpu_on(u32 function_id, u32 target_cpu, u32 pc, u32 context_id);
-+s32 psci_affinity_info(u32 function_id, u32 target_affinity, u32 power_level);
- u32 psci_migrate_info_type(void);
- void psci_system_off(void);
- void psci_system_reset(void);
-+s32 psci_features(u32 function_id, u32 psci_fid);
-+s32 psci_cpu_default_suspend(u32 function_id, u32 pc, u32 context_id);
-+s32 psci_node_hw_state(u32 function_id, u32 target_cpu, u32 power_level);
-+s32 psci_system_suspend(u32 function_id, u32 pc, u32 context_id);
-+s32 psci_system_reset2(u32 function_id, u32 reset_type, u32 cookie);
- #endif
- 
- #endif /* __ASSEMBLY__ */
---- a/arch/arm/lib/psci-dt.c
-+++ b/arch/arm/lib/psci-dt.c
-@@ -66,6 +66,8 @@ int fdt_psci(void *fdt)
- init_psci_node:
- #if CONFIG_IS_ENABLED(ARMV8_SEC_FIRMWARE_SUPPORT)
- 	psci_ver = sec_firmware_support_psci_version();
-+#elif defined(CONFIG_ARMV7_PSCI_1_1)
-+	psci_ver = ARM_PSCI_VER_1_1;
- #elif defined(CONFIG_ARMV7_PSCI_1_0) || defined(CONFIG_ARMV8_PSCI)
- 	psci_ver = ARM_PSCI_VER_1_0;
- #elif defined(CONFIG_ARMV7_PSCI_0_2)

+ 0 - 29
package/boot/uboot-d1/patches/0042-sunxi-Enable-remoteproc-on-some-H3-boards.patch

@@ -1,29 +0,0 @@
-From 6dc0da83dba9570740365d0f1b32f91ae8ba0998 Mon Sep 17 00:00:00 2001
-From: Samuel Holland <[email protected]>
-Date: Mon, 11 Oct 2021 03:20:28 -0500
-Subject: [PATCH 42/90] sunxi: Enable remoteproc on some H3 boards
-
-Signed-off-by: Samuel Holland <[email protected]>
----
- configs/orangepi_one_defconfig    | 1 +
- configs/orangepi_plus2e_defconfig | 1 +
- 2 files changed, 2 insertions(+)
-
---- a/configs/orangepi_one_defconfig
-+++ b/configs/orangepi_one_defconfig
-@@ -6,5 +6,6 @@ CONFIG_MACH_SUN8I_H3=y
- CONFIG_DRAM_CLK=672
- # CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set
- CONFIG_SUN8I_EMAC=y
-+CONFIG_REMOTEPROC_SUN6I_AR100=y
- CONFIG_USB_EHCI_HCD=y
- CONFIG_USB_OHCI_HCD=y
---- a/configs/orangepi_plus2e_defconfig
-+++ b/configs/orangepi_plus2e_defconfig
-@@ -12,5 +12,6 @@ CONFIG_SPL_SYS_I2C_LEGACY=y
- CONFIG_SYS_I2C_MVTWSI=y
- CONFIG_SUN8I_EMAC=y
- CONFIG_SY8106A_POWER=y
-+CONFIG_REMOTEPROC_SUN6I_AR100=y
- CONFIG_USB_EHCI_HCD=y
- CONFIG_USB_OHCI_HCD=y

+ 0 - 497
package/boot/uboot-d1/patches/0043-sunxi-psci-Delegate-PSCI-to-SCPI.patch

@@ -1,497 +0,0 @@
-From 650fab5c589a883b139b4164527101f9c849f1a5 Mon Sep 17 00:00:00 2001
-From: Samuel Holland <[email protected]>
-Date: Sat, 9 Oct 2021 23:01:05 -0500
-Subject: [PATCH 43/90] sunxi: psci: Delegate PSCI to SCPI
-
-This adds a new PSCI implementation which communicates with SCP firmware
-running on the AR100 using the SCPI protocol. This allows it to support
-the full set of PSCI v1.1 features, including CPU idle states, system
-suspend, and multiple reset methods.
-
-Signed-off-by: Samuel Holland <[email protected]>
----
- arch/arm/cpu/armv7/Kconfig           |   1 +
- arch/arm/cpu/armv7/sunxi/Makefile    |   4 +
- arch/arm/cpu/armv7/sunxi/psci-scpi.c | 451 +++++++++++++++++++++++++++
- 3 files changed, 456 insertions(+)
- create mode 100644 arch/arm/cpu/armv7/sunxi/psci-scpi.c
-
---- a/arch/arm/cpu/armv7/Kconfig
-+++ b/arch/arm/cpu/armv7/Kconfig
-@@ -75,6 +75,7 @@ config ARMV7_PSCI
- choice
- 	prompt "Supported PSCI version"
- 	depends on ARMV7_PSCI
-+	default ARMV7_PSCI_1_1 if MACH_SUN8I_H3
- 	default ARMV7_PSCI_0_1 if ARCH_SUNXI
- 	default ARMV7_PSCI_1_0
- 	help
---- a/arch/arm/cpu/armv7/sunxi/Makefile
-+++ b/arch/arm/cpu/armv7/sunxi/Makefile
-@@ -13,8 +13,12 @@ obj-$(CONFIG_MACH_SUN6I)	+= sram.o
- obj-$(CONFIG_MACH_SUN8I)	+= sram.o
- 
- ifndef CONFIG_SPL_BUILD
-+ifdef CONFIG_MACH_SUN8I_H3
-+obj-$(CONFIG_ARMV7_PSCI)	+= psci-scpi.o
-+else
- obj-$(CONFIG_ARMV7_PSCI)	+= psci.o
- endif
-+endif
- 
- ifdef CONFIG_SPL_BUILD
- obj-y	+= fel_utils.o
---- /dev/null
-+++ b/arch/arm/cpu/armv7/sunxi/psci-scpi.c
-@@ -0,0 +1,451 @@
-+// SPDX-License-Identifier: GPL-2.0
-+/*
-+ * Copyright (C) 2016 Chen-Yu Tsai <[email protected]>
-+ * Copyright (C) 2018-2021 Samuel Holland <[email protected]>
-+ */
-+
-+#include <common.h>
-+#include <asm/arch/cpu.h>
-+#include <asm/arch/cpucfg.h>
-+#include <asm/armv7.h>
-+#include <asm/gic.h>
-+#include <asm/io.h>
-+#include <asm/psci.h>
-+#include <asm/secure.h>
-+#include <asm/system.h>
-+
-+#define	GICD_BASE		(SUNXI_GIC400_BASE + GIC_DIST_OFFSET)
-+#define	GICC_BASE		(SUNXI_GIC400_BASE + GIC_CPU_OFFSET_A15)
-+
-+#define HW_ON			0
-+#define HW_OFF			1
-+#define HW_STANDBY		2
-+
-+#define MPIDR_AFFLVL0(mpidr)	(mpidr & 0xf)
-+#define MPIDR_AFFLVL1(mpidr)	(mpidr >> 8 & 0xf)
-+
-+#define SCPI_SHMEM_BASE		0x0004be00
-+#define SCPI_SHMEM		((struct scpi_shmem *)SCPI_SHMEM_BASE)
-+
-+#define SCPI_RX_CHANNEL		1
-+#define SCPI_TX_CHANNEL		0
-+#define SCPI_VIRTUAL_CHANNEL	BIT(0)
-+
-+#define SCPI_MESSAGE_SIZE	0x100
-+#define SCPI_PAYLOAD_SIZE	(SCPI_MESSAGE_SIZE - sizeof(struct scpi_header))
-+
-+#define SUNXI_MSGBOX_BASE	0x01c17000
-+#define REMOTE_IRQ_STAT_REG	(SUNXI_MSGBOX_BASE + 0x0050)
-+#define LOCAL_IRQ_STAT_REG	(SUNXI_MSGBOX_BASE + 0x0070)
-+#define MSG_STAT_REG(n)		(SUNXI_MSGBOX_BASE + 0x0140 + 0x4 * (n))
-+#define MSG_DATA_REG(n)		(SUNXI_MSGBOX_BASE + 0x0180 + 0x4 * (n))
-+
-+#define RX_IRQ(n)		BIT(0 + 2 * (n))
-+#define TX_IRQ(n)		BIT(1 + 2 * (n))
-+
-+enum {
-+	CORE_POWER_LEVEL		= 0,
-+	CLUSTER_POWER_LEVEL		= 1,
-+	CSS_POWER_LEVEL			= 2,
-+};
-+
-+enum {
-+	SCPI_CMD_SCP_READY		= 0x01,
-+	SCPI_CMD_SET_CSS_POWER_STATE	= 0x03,
-+	SCPI_CMD_GET_CSS_POWER_STATE	= 0x04,
-+	SCPI_CMD_SET_SYS_POWER_STATE	= 0x05,
-+};
-+
-+enum {
-+	SCPI_E_OK			= 0,
-+	SCPI_E_PARAM			= 1,
-+	SCPI_E_ALIGN			= 2,
-+	SCPI_E_SIZE			= 3,
-+	SCPI_E_HANDLER			= 4,
-+	SCPI_E_ACCESS			= 5,
-+	SCPI_E_RANGE			= 6,
-+	SCPI_E_TIMEOUT			= 7,
-+	SCPI_E_NOMEM			= 8,
-+	SCPI_E_PWRSTATE			= 9,
-+	SCPI_E_SUPPORT			= 10,
-+	SCPI_E_DEVICE			= 11,
-+	SCPI_E_BUSY			= 12,
-+	SCPI_E_OS			= 13,
-+	SCPI_E_DATA			= 14,
-+	SCPI_E_STATE			= 15,
-+};
-+
-+enum {
-+	SCPI_POWER_ON			= 0x00,
-+	SCPI_POWER_RETENTION		= 0x01,
-+	SCPI_POWER_OFF			= 0x03,
-+};
-+
-+enum {
-+	SCPI_SYSTEM_SHUTDOWN		= 0x00,
-+	SCPI_SYSTEM_REBOOT		= 0x01,
-+	SCPI_SYSTEM_RESET		= 0x02,
-+};
-+
-+struct scpi_header {
-+	u8			command;
-+	u8			sender;
-+	u16			size;
-+	u32			status;
-+};
-+
-+struct scpi_message {
-+	struct scpi_header	header;
-+	u8			payload[SCPI_PAYLOAD_SIZE];
-+};
-+
-+struct scpi_shmem {
-+	struct scpi_message	rx;
-+	struct scpi_message	tx;
-+};
-+
-+static bool __secure_data gic_dist_init;
-+
-+static u32 __secure_data lock;
-+
-+static inline u32 __secure read_mpidr(void)
-+{
-+	u32 val;
-+
-+	asm volatile ("mrc p15, 0, %0, c0, c0, 5" : "=r" (val));
-+
-+	return val;
-+}
-+
-+static void __secure scpi_begin_command(void)
-+{
-+	u32 mpidr = read_mpidr();
-+
-+	do {
-+		while (readl(&lock));
-+		writel(mpidr, &lock);
-+		dsb();
-+	} while (readl(&lock) != mpidr);
-+	while (readl(REMOTE_IRQ_STAT_REG) & RX_IRQ(SCPI_TX_CHANNEL));
-+}
-+
-+static void __secure scpi_send_command(void)
-+{
-+	writel(SCPI_VIRTUAL_CHANNEL, MSG_DATA_REG(SCPI_TX_CHANNEL));
-+}
-+
-+static void __secure scpi_wait_response(void)
-+{
-+	while (!readl(MSG_STAT_REG(SCPI_RX_CHANNEL)));
-+}
-+
-+static void __secure scpi_end_command(void)
-+{
-+	while (readl(MSG_STAT_REG(SCPI_RX_CHANNEL)))
-+		readl(MSG_DATA_REG(SCPI_RX_CHANNEL));
-+	writel(RX_IRQ(SCPI_RX_CHANNEL), LOCAL_IRQ_STAT_REG);
-+	writel(0, &lock);
-+}
-+
-+static void __secure scpi_set_css_power_state(u32 target_cpu, u32 core_state,
-+					      u32 cluster_state, u32 css_state)
-+{
-+	struct scpi_shmem *shmem = SCPI_SHMEM;
-+
-+	scpi_begin_command();
-+
-+	shmem->tx.header.command = SCPI_CMD_SET_CSS_POWER_STATE;
-+	shmem->tx.header.size = 4;
-+
-+	shmem->tx.payload[0] = target_cpu    >> 4 | target_cpu;
-+	shmem->tx.payload[1] = cluster_state << 4 | core_state;
-+	shmem->tx.payload[2] = css_state;
-+	shmem->tx.payload[3] = 0;
-+
-+	scpi_send_command();
-+	scpi_end_command();
-+}
-+
-+static s32 __secure scpi_get_css_power_state(u32 target_cpu, u8 *core_states,
-+					     u8 *cluster_state)
-+{
-+	struct scpi_shmem *shmem = SCPI_SHMEM;
-+	u32 cluster = MPIDR_AFFLVL1(target_cpu);
-+	u32 offset;
-+	s32 ret;
-+
-+	scpi_begin_command();
-+
-+	shmem->tx.header.command = SCPI_CMD_GET_CSS_POWER_STATE;
-+	shmem->tx.header.size = 0;
-+
-+	scpi_send_command();
-+	scpi_wait_response();
-+
-+	for (offset = 0; offset < shmem->rx.header.size; offset += 2) {
-+		if ((shmem->rx.payload[offset] & 0xf) == cluster) {
-+			*cluster_state = shmem->rx.payload[offset+0] >> 4;
-+			*core_states   = shmem->rx.payload[offset+1];
-+
-+			break;
-+		}
-+	}
-+
-+	ret = shmem->rx.header.status;
-+
-+	scpi_end_command();
-+
-+	return ret;
-+}
-+
-+static s32 __secure scpi_set_sys_power_state(u32 sys_state)
-+{
-+	struct scpi_shmem *shmem = SCPI_SHMEM;
-+	s32 ret;
-+
-+	scpi_begin_command();
-+
-+	shmem->tx.header.command = SCPI_CMD_SET_SYS_POWER_STATE;
-+	shmem->tx.header.size = 1;
-+
-+	shmem->tx.payload[0] = sys_state;
-+
-+	scpi_send_command();
-+	scpi_wait_response();
-+
-+	ret = shmem->rx.header.status;
-+
-+	scpi_end_command();
-+
-+	return ret;
-+}
-+
-+void psci_enable_smp(void);
-+
-+static s32 __secure psci_suspend_common(u32 pc, u32 context_id, u32 core_state,
-+					u32 cluster_state, u32 css_state)
-+
-+{
-+	u32 target_cpu = read_mpidr();
-+
-+	if (core_state == SCPI_POWER_OFF)
-+		psci_save(MPIDR_AFFLVL0(target_cpu), pc, context_id);
-+	if (css_state == SCPI_POWER_OFF)
-+		gic_dist_init = true;
-+
-+	scpi_set_css_power_state(target_cpu, core_state,
-+				 cluster_state, css_state);
-+
-+	psci_cpu_off_common();
-+
-+	wfi();
-+
-+	psci_enable_smp();
-+
-+	return ARM_PSCI_RET_SUCCESS;
-+}
-+
-+u32 __secure psci_version(void)
-+{
-+	return ARM_PSCI_VER_1_1;
-+}
-+
-+s32 __secure psci_cpu_suspend(u32 __always_unused function_id,
-+			      u32 power_state, u32 pc, u32 context_id)
-+{
-+	return psci_suspend_common(pc, context_id,
-+				   power_state >> 0 & 0xf,
-+				   power_state >> 4 & 0xf,
-+				   power_state >> 8 & 0xf);
-+}
-+
-+s32 __secure psci_cpu_off(void)
-+{
-+	u32 pc = 0, context_id = 0;
-+
-+	return psci_suspend_common(pc, context_id, SCPI_POWER_OFF,
-+				   SCPI_POWER_OFF, SCPI_POWER_ON);
-+}
-+
-+s32 __secure psci_cpu_on(u32 __always_unused function_id,
-+			 u32 target_cpu, u32 pc, u32 context_id)
-+{
-+	psci_save(MPIDR_AFFLVL0(target_cpu), pc, context_id);
-+
-+	scpi_set_css_power_state(target_cpu, SCPI_POWER_ON,
-+				 SCPI_POWER_ON, SCPI_POWER_ON);
-+
-+	return ARM_PSCI_RET_SUCCESS;
-+}
-+
-+s32 __secure psci_affinity_info(u32 function_id,
-+				u32 target_cpu, u32 power_level)
-+{
-+	if (power_level != CORE_POWER_LEVEL)
-+		return ARM_PSCI_RET_INVAL;
-+
-+	/* This happens to have the same HW_ON/HW_OFF encoding. */
-+	return psci_node_hw_state(function_id, target_cpu, power_level);
-+}
-+
-+void __secure psci_system_off(void)
-+{
-+	scpi_set_sys_power_state(SCPI_SYSTEM_SHUTDOWN);
-+
-+	/* Wait to be turned off. */
-+	for (;;) wfi();
-+}
-+
-+void __secure psci_system_reset(void)
-+{
-+	scpi_set_sys_power_state(SCPI_SYSTEM_REBOOT);
-+
-+	/* Wait to be turned off. */
-+	for (;;) wfi();
-+}
-+
-+s32 __secure psci_features(u32 __always_unused function_id,
-+			   u32 psci_fid)
-+{
-+	switch (psci_fid) {
-+	case ARM_PSCI_0_2_FN_PSCI_VERSION:
-+	case ARM_PSCI_0_2_FN_CPU_SUSPEND:
-+	case ARM_PSCI_0_2_FN_CPU_OFF:
-+	case ARM_PSCI_0_2_FN_CPU_ON:
-+	case ARM_PSCI_0_2_FN_AFFINITY_INFO:
-+	case ARM_PSCI_0_2_FN_SYSTEM_OFF:
-+	case ARM_PSCI_0_2_FN_SYSTEM_RESET:
-+	case ARM_PSCI_1_0_FN_PSCI_FEATURES:
-+	case ARM_PSCI_1_0_FN_CPU_DEFAULT_SUSPEND:
-+	case ARM_PSCI_1_0_FN_NODE_HW_STATE:
-+	case ARM_PSCI_1_0_FN_SYSTEM_SUSPEND:
-+	case ARM_PSCI_1_1_FN_SYSTEM_RESET2:
-+		return ARM_PSCI_RET_SUCCESS;
-+	default:
-+		return ARM_PSCI_RET_NI;
-+	}
-+}
-+
-+s32 __secure psci_cpu_default_suspend(u32 __always_unused function_id,
-+				      u32 pc, u32 context_id)
-+{
-+	return psci_suspend_common(pc, context_id, SCPI_POWER_OFF,
-+				   SCPI_POWER_OFF, SCPI_POWER_RETENTION);
-+}
-+
-+s32 __secure psci_node_hw_state(u32 __always_unused function_id,
-+				u32 target_cpu, u32 power_level)
-+{
-+	u32 core = MPIDR_AFFLVL0(target_cpu);
-+	u8 core_states, cluster_state;
-+
-+	if (power_level >= CSS_POWER_LEVEL)
-+		return HW_ON;
-+	if (scpi_get_css_power_state(target_cpu, &core_states, &cluster_state))
-+		return ARM_PSCI_RET_NI;
-+	if (power_level == CLUSTER_POWER_LEVEL) {
-+		if (cluster_state == SCPI_POWER_ON)
-+			return HW_ON;
-+		if (cluster_state < SCPI_POWER_OFF)
-+			return HW_STANDBY;
-+		return HW_OFF;
-+	}
-+
-+	return (core_states & BIT(core)) ? HW_ON : HW_OFF;
-+}
-+
-+s32 __secure psci_system_suspend(u32 __always_unused function_id,
-+				 u32 pc, u32 context_id)
-+{
-+	return psci_suspend_common(pc, context_id, SCPI_POWER_OFF,
-+				   SCPI_POWER_OFF, SCPI_POWER_OFF);
-+}
-+
-+s32 __secure psci_system_reset2(u32 __always_unused function_id,
-+				u32 reset_type, u32 cookie)
-+{
-+	s32 ret;
-+
-+	if (reset_type)
-+		return ARM_PSCI_RET_INVAL;
-+
-+	ret = scpi_set_sys_power_state(SCPI_SYSTEM_RESET);
-+	if (ret)
-+		return ARM_PSCI_RET_INVAL;
-+
-+	/* Wait to be turned off. */
-+	for (;;) wfi();
-+}
-+
-+/*
-+ * R40 is different from other single cluster SoCs. The secondary core
-+ * entry address register is in the SRAM controller address range.
-+ */
-+#define SUN8I_R40_SRAMC_SOFT_ENTRY_REG0		(0xbc)
-+
-+#ifdef CONFIG_MACH_SUN8I_R40
-+/* secondary core entry address is programmed differently on R40 */
-+static void __secure sunxi_set_entry_address(void *entry)
-+{
-+	writel((u32)entry,
-+	       SUNXI_SRAMC_BASE + SUN8I_R40_SRAMC_SOFT_ENTRY_REG0);
-+}
-+#else
-+static void __secure sunxi_set_entry_address(void *entry)
-+{
-+	struct sunxi_cpucfg_reg *cpucfg =
-+		(struct sunxi_cpucfg_reg *)SUNXI_CPUCFG_BASE;
-+
-+	writel((u32)entry, &cpucfg->priv0);
-+
-+#ifdef CONFIG_MACH_SUN8I_H3
-+	/* Redirect CPU 0 to the secure monitor via the resume shim. */
-+	writel(0x16aaefe8, &cpucfg->super_standy_flag);
-+	writel(0xaa16efe8, &cpucfg->super_standy_flag);
-+	writel(SUNXI_RESUME_BASE, &cpucfg->priv1);
-+#endif
-+}
-+#endif
-+
-+void __secure psci_arch_init(void)
-+{
-+	static bool __secure_data one_time_init = true;
-+
-+	if (one_time_init) {
-+		/* Set secondary core power-on PC. */
-+		sunxi_set_entry_address(psci_cpu_entry);
-+
-+		/* Wait for the SCP firmware to boot. */
-+		scpi_begin_command();
-+		scpi_wait_response();
-+		scpi_end_command();
-+
-+		one_time_init = false;
-+	}
-+
-+	/*
-+	 * Copied from arch/arm/cpu/armv7/virt-v7.c
-+	 * See also gic_resume() in arch/arm/mach-imx/mx7/psci-mx7.c
-+	 */
-+	if (gic_dist_init) {
-+		u32 i, itlinesnr;
-+
-+		/* enable the GIC distributor */
-+		writel(readl(GICD_BASE + GICD_CTLR) | 0x03, GICD_BASE + GICD_CTLR);
-+
-+		/* TYPER[4:0] contains an encoded number of available interrupts */
-+		itlinesnr = readl(GICD_BASE + GICD_TYPER) & 0x1f;
-+
-+		/* set all bits in the GIC group registers to one to allow access
-+		 * from non-secure state. The first 32 interrupts are private per
-+		 * CPU and will be set later when enabling the GIC for each core
-+		 */
-+		for (i = 1; i <= itlinesnr; i++)
-+			writel((unsigned)-1, GICD_BASE + GICD_IGROUPRn + 4 * i);
-+
-+		gic_dist_init = false;
-+	}
-+
-+	/* Be cool with non-secure. */
-+	writel(0xff, GICC_BASE + GICC_PMR);
-+}

+ 0 - 95
package/boot/uboot-d1/patches/0044-sunxi-Enable-SCP-SCPI-on-A33-as-well.patch

@@ -1,95 +0,0 @@
-From 5a7a91bf9a78a3a73e26d6de975261e62f9fb127 Mon Sep 17 00:00:00 2001
-From: Samuel Holland <[email protected]>
-Date: Wed, 8 Jun 2022 07:55:54 -0500
-Subject: [PATCH 44/90] sunxi: Enable SCP/SCPI on A33 as well
-
-Signed-off-by: Samuel Holland <[email protected]>
----
- arch/arm/cpu/armv7/Kconfig           |  2 +-
- arch/arm/cpu/armv7/sunxi/Makefile    |  2 +-
- arch/arm/cpu/armv7/sunxi/psci-scpi.c |  4 ++++
- arch/arm/dts/sun8i-a23-a33.dtsi      | 14 ++++++++++++++
- arch/arm/dts/sunxi-u-boot.dtsi       |  4 ++--
- 5 files changed, 22 insertions(+), 4 deletions(-)
-
---- a/arch/arm/cpu/armv7/Kconfig
-+++ b/arch/arm/cpu/armv7/Kconfig
-@@ -75,7 +75,7 @@ config ARMV7_PSCI
- choice
- 	prompt "Supported PSCI version"
- 	depends on ARMV7_PSCI
--	default ARMV7_PSCI_1_1 if MACH_SUN8I_H3
-+	default ARMV7_PSCI_1_1 if MACH_SUN8I_A33 || MACH_SUN8I_H3
- 	default ARMV7_PSCI_0_1 if ARCH_SUNXI
- 	default ARMV7_PSCI_1_0
- 	help
---- a/arch/arm/cpu/armv7/sunxi/Makefile
-+++ b/arch/arm/cpu/armv7/sunxi/Makefile
-@@ -13,7 +13,7 @@ obj-$(CONFIG_MACH_SUN6I)	+= sram.o
- obj-$(CONFIG_MACH_SUN8I)	+= sram.o
- 
- ifndef CONFIG_SPL_BUILD
--ifdef CONFIG_MACH_SUN8I_H3
-+ifneq ($(CONFIG_MACH_SUN8I_A33)$(CONFIG_MACH_SUN8I_H3),)
- obj-$(CONFIG_ARMV7_PSCI)	+= psci-scpi.o
- else
- obj-$(CONFIG_ARMV7_PSCI)	+= psci.o
---- a/arch/arm/cpu/armv7/sunxi/psci-scpi.c
-+++ b/arch/arm/cpu/armv7/sunxi/psci-scpi.c
-@@ -24,7 +24,11 @@
- #define MPIDR_AFFLVL0(mpidr)	(mpidr & 0xf)
- #define MPIDR_AFFLVL1(mpidr)	(mpidr >> 8 & 0xf)
- 
-+#if defined(CONFIG_MACH_SUN8I_H3)
- #define SCPI_SHMEM_BASE		0x0004be00
-+#else
-+#define SCPI_SHMEM_BASE		0x00053e00
-+#endif
- #define SCPI_SHMEM		((struct scpi_shmem *)SCPI_SHMEM_BASE)
- 
- #define SCPI_RX_CHANNEL		1
---- a/arch/arm/dts/sun8i-a23-a33.dtsi
-+++ b/arch/arm/dts/sun8i-a23-a33.dtsi
-@@ -138,6 +138,14 @@
- 			#size-cells = <1>;
- 			ranges;
- 
-+			sram_a2: sram@40000 {
-+				compatible = "mmio-sram";
-+				reg = <0x00040000 0x14000>;
-+				#address-cells = <1>;
-+				#size-cells = <1>;
-+				ranges = <0 0x00040000 0x14000>;
-+			};
-+
- 			sram_c: sram@1d00000 {
- 				compatible = "mmio-sram";
- 				reg = <0x01d00000 0x80000>;
-@@ -847,5 +855,11 @@
- 			#address-cells = <1>;
- 			#size-cells = <0>;
- 		};
-+
-+		remoteproc@1f01c00 {
-+			compatible = "allwinner,sun6i-a31-ar100";
-+			reg = <0x01f01c00 0x400>;
-+			sram = <&sram_a2>;
-+		};
- 	};
- };
---- a/arch/arm/dts/sunxi-u-boot.dtsi
-+++ b/arch/arm/dts/sunxi-u-boot.dtsi
-@@ -6,11 +6,11 @@
- #define ARCH "arm"
- #endif
- 
-+#if defined(CONFIG_ARMV7_PSCI) && (defined(CONFIG_MACH_SUN8I_A33) || defined(CONFIG_MACH_SUN8I_H3))
- #if defined(CONFIG_MACH_SUN8I_H3)
--#ifdef CONFIG_ARMV7_PSCI
- #define RESUME_ADDR	SUNXI_RESUME_BASE
--#define SCP_ADDR	SUNXI_SCP_BASE
- #endif
-+#define SCP_ADDR	SUNXI_SCP_BASE
- #elif defined(CONFIG_MACH_SUN50I) || defined(CONFIG_MACH_SUN50I_H5)
- #define BL31_ADDR	0x00044000
- #define SCP_ADDR	0x00050000

+ 0 - 216
package/boot/uboot-d1/patches/0045-phy-sun4i-usb-Use-DM_GPIO-for-id-vbus_det-GPIOs.patch

@@ -1,216 +0,0 @@
-From afa281decfbb174f57341897e0ad50ee9ad3564f Mon Sep 17 00:00:00 2001
-From: Zoltan HERPAI <[email protected]>
-Date: Tue, 6 Jun 2023 17:59:24 +0000
-Subject: [PATCH 45/90] phy: sun4i-usb: Use DM_GPIO for id/vbus_det GPIOs
-
-Now that the sunxi_gpio driver handles pull-up/down via the driver
-model, we can switch to DM_GPIO for these pins with no loss in
-functionality. Since the driver now gets its pin configuration from
-the device tree, we can remove the Kconfig symbols.
-
-Signed-off-by: Samuel Holland <[email protected]>
-
-Signed-off-by: Zoltan HERPAI <[email protected]>
----
- arch/arm/dts/sun5i-a13-ampe-a76.dts           |  6 ++
- .../sun6i-a31s-yones-toptech-bs1078-v2.dts    |  1 +
- arch/arm/dts/sun8i-a33-sinlinx-sina33.dts     |  1 +
- arch/arm/mach-sunxi/Kconfig                   | 14 ----
- drivers/phy/allwinner/phy-sun4i-usb.c         | 71 ++++---------------
- 5 files changed, 22 insertions(+), 71 deletions(-)
-
---- a/arch/arm/dts/sun5i-a13-ampe-a76.dts
-+++ b/arch/arm/dts/sun5i-a13-ampe-a76.dts
-@@ -8,6 +8,8 @@
- /dts-v1/;
- #include "sun5i-a13.dtsi"
- 
-+#include <dt-bindings/gpio/gpio.h>
-+
- / {
- 	model = "Ampe A76";
- 	compatible = "ampe,a76", "allwinner,sun5i-a13";
-@@ -26,3 +28,7 @@
- 	pinctrl-0 = <&uart1_pg_pins>;
- 	status = "okay";
- };
-+
-+&usbphy {
-+	usb0_id_det-gpios = <&pio 6 2 GPIO_ACTIVE_HIGH>; /* PG2 */
-+};
---- a/arch/arm/dts/sun6i-a31s-yones-toptech-bs1078-v2.dts
-+++ b/arch/arm/dts/sun6i-a31s-yones-toptech-bs1078-v2.dts
-@@ -176,6 +176,7 @@
- };
- 
- &usbphy {
-+	usb0_id_det-gpios = <&pio 0 15 GPIO_ACTIVE_HIGH>; /* PA15 */
- 	usb1_vbus-supply = <&reg_dldo1>;
- 	usb2_vbus-supply = <&reg_dc1sw>;
- 	status = "okay";
---- a/arch/arm/dts/sun8i-a33-sinlinx-sina33.dts
-+++ b/arch/arm/dts/sun8i-a33-sinlinx-sina33.dts
-@@ -271,5 +271,6 @@
- 
- &usbphy {
- 	status = "okay";
-+	usb0_id_det-gpios = <&pio 7 8 GPIO_ACTIVE_HIGH>; /* PH8 */
- 	usb1_vbus-supply = <&reg_vcc5v0>; /* USB1 VBUS is always on */
- };
---- a/arch/arm/mach-sunxi/Kconfig
-+++ b/arch/arm/mach-sunxi/Kconfig
-@@ -655,20 +655,6 @@ config MMC_SUNXI_SLOT_EXTRA
- 	slot or emmc on mmc1 - mmc3. Setting this to 1, 2 or 3 will enable
- 	support for this.
- 
--config USB0_VBUS_DET
--	string "Vbus detect pin for usb0 (otg)"
--	default ""
--	---help---
--	Set the Vbus detect pin for usb0 (otg). This takes a string in the
--	format understood by sunxi_name_to_gpio, e.g. PH1 for pin 1 of port H.
--
--config USB0_ID_DET
--	string "ID detect pin for usb0 (otg)"
--	default ""
--	---help---
--	Set the ID detect pin for usb0 (otg). This takes a string in the
--	format understood by sunxi_name_to_gpio, e.g. PH1 for pin 1 of port H.
--
- config I2C0_ENABLE
- 	bool "Enable I2C/TWI controller 0"
- 	default y if MACH_SUN4I || MACH_SUN5I || MACH_SUN7I || MACH_SUN8I_R40
---- a/drivers/phy/allwinner/phy-sun4i-usb.c
-+++ b/drivers/phy/allwinner/phy-sun4i-usb.c
-@@ -96,32 +96,8 @@ struct sun4i_usb_phy_cfg {
- 	int missing_phys;
- };
- 
--struct sun4i_usb_phy_info {
--	const char *gpio_vbus_det;
--	const char *gpio_id_det;
--} phy_info[] = {
--	{
--		.gpio_vbus_det = CONFIG_USB0_VBUS_DET,
--		.gpio_id_det = CONFIG_USB0_ID_DET,
--	},
--	{
--		.gpio_vbus_det = NULL,
--		.gpio_id_det = NULL,
--	},
--	{
--		.gpio_vbus_det = NULL,
--		.gpio_id_det = NULL,
--	},
--	{
--		.gpio_vbus_det = NULL,
--		.gpio_id_det = NULL,
--	},
--};
--
- struct sun4i_usb_phy_plat {
- 	void __iomem *pmu;
--	struct gpio_desc gpio_vbus_det;
--	struct gpio_desc gpio_id_det;
- 	struct clk clocks;
- 	struct reset_ctl resets;
- 	struct udevice *vbus;
-@@ -132,6 +108,8 @@ struct sun4i_usb_phy_data {
- 	void __iomem *base;
- 	const struct sun4i_usb_phy_cfg *cfg;
- 	struct sun4i_usb_phy_plat *usb_phy;
-+	struct gpio_desc id_det_gpio;
-+	struct gpio_desc vbus_det_gpio;
- 	struct udevice *vbus_power_supply;
- };
- 
-@@ -393,11 +371,10 @@ static int sun4i_usb_phy_xlate(struct ph
- int sun4i_usb_phy_vbus_detect(struct phy *phy)
- {
- 	struct sun4i_usb_phy_data *data = dev_get_priv(phy->dev);
--	struct sun4i_usb_phy_plat *usb_phy = &data->usb_phy[phy->id];
- 	int err = 1, retries = 3;
- 
--	if (dm_gpio_is_valid(&usb_phy->gpio_vbus_det)) {
--		err = dm_gpio_get_value(&usb_phy->gpio_vbus_det);
-+	if (dm_gpio_is_valid(&data->vbus_det_gpio)) {
-+		err = dm_gpio_get_value(&data->vbus_det_gpio);
- 		/*
- 		 * Vbus may have been provided by the board and just turned off
- 		 * some milliseconds ago on reset. What we're measuring then is
-@@ -405,7 +382,7 @@ int sun4i_usb_phy_vbus_detect(struct phy
- 		 */
- 		while (err > 0 && retries--) {
- 			mdelay(100);
--			err = dm_gpio_get_value(&usb_phy->gpio_vbus_det);
-+			err = dm_gpio_get_value(&data->vbus_det_gpio);
- 		}
- 	} else if (data->vbus_power_supply) {
- 		err = regulator_get_enable(data->vbus_power_supply);
-@@ -417,12 +394,11 @@ int sun4i_usb_phy_vbus_detect(struct phy
- int sun4i_usb_phy_id_detect(struct phy *phy)
- {
- 	struct sun4i_usb_phy_data *data = dev_get_priv(phy->dev);
--	struct sun4i_usb_phy_plat *usb_phy = &data->usb_phy[phy->id];
- 
--	if (!dm_gpio_is_valid(&usb_phy->gpio_id_det))
--		return -1;
-+	if (!dm_gpio_is_valid(&data->id_det_gpio))
-+		return -EOPNOTSUPP;
- 
--	return dm_gpio_get_value(&usb_phy->gpio_id_det);
-+	return dm_gpio_get_value(&data->id_det_gpio);
- }
- 
- void sun4i_usb_phy_set_squelch_detect(struct phy *phy, bool enabled)
-@@ -452,13 +428,18 @@ static int sun4i_usb_phy_probe(struct ud
- 	if (IS_ERR(data->base))
- 		return PTR_ERR(data->base);
- 
-+	gpio_request_by_name(dev, "usb0_id_det-gpios", 0, &data->id_det_gpio,
-+			     GPIOD_IS_IN | GPIOD_PULL_UP);
-+
-+	gpio_request_by_name(dev, "usb0_vbus_det-gpios", 0, &data->vbus_det_gpio,
-+			     GPIOD_IS_IN);
-+
- 	device_get_supply_regulator(dev, "usb0_vbus_power-supply",
- 				    &data->vbus_power_supply);
- 
- 	data->usb_phy = plat;
- 	for (i = 0; i < data->cfg->num_phys; i++) {
- 		struct sun4i_usb_phy_plat *phy = &plat[i];
--		struct sun4i_usb_phy_info *info = &phy_info[i];
- 		char name[20];
- 
- 		if (data->cfg->missing_phys & BIT(i))
-@@ -472,30 +453,6 @@ static int sun4i_usb_phy_probe(struct ud
- 				return ret;
- 		}
- 
--		ret = dm_gpio_lookup_name(info->gpio_vbus_det,
--					  &phy->gpio_vbus_det);
--		if (ret == 0) {
--			ret = dm_gpio_request(&phy->gpio_vbus_det,
--					      "usb_vbus_det");
--			if (ret)
--				return ret;
--			ret = dm_gpio_set_dir_flags(&phy->gpio_vbus_det,
--						    GPIOD_IS_IN);
--			if (ret)
--				return ret;
--		}
--
--		ret = dm_gpio_lookup_name(info->gpio_id_det, &phy->gpio_id_det);
--		if (ret == 0) {
--			ret = dm_gpio_request(&phy->gpio_id_det, "usb_id_det");
--			if (ret)
--				return ret;
--			ret = dm_gpio_set_dir_flags(&phy->gpio_id_det,
--						GPIOD_IS_IN | GPIOD_PULL_UP);
--			if (ret)
--				return ret;
--		}
--
- 		if (data->cfg->dedicated_clocks)
- 			snprintf(name, sizeof(name), "usb%d_phy", i);
- 		else

+ 0 - 45
package/boot/uboot-d1/patches/0046-ARM-dts-sunxi-Add-AXP221-and-AXP809-GPIO-nodes.patch

@@ -1,45 +0,0 @@
-From 9e34036e651528df9575c2ffb38d78ae1f613481 Mon Sep 17 00:00:00 2001
-From: Samuel Holland <[email protected]>
-Date: Sat, 21 Aug 2021 17:11:54 -0500
-Subject: [PATCH 46/90] ARM: dts: sunxi: Add AXP221 and AXP809 GPIO nodes
-
-These PMICs each have two GPIO pins, and are supported by the axp_gpio
-driver. In order to convert the axp_gpio driver to probe using the
-device tree, the corresponding device tree nodes must be present. Add
-them, following the same binding as the AXP209 and AXP813.
-
-Signed-off-by: Samuel Holland <[email protected]>
----
- arch/arm/dts/axp22x.dtsi | 6 ++++++
- arch/arm/dts/axp809.dtsi | 7 +++++++
- 2 files changed, 13 insertions(+)
-
---- a/arch/arm/dts/axp22x.dtsi
-+++ b/arch/arm/dts/axp22x.dtsi
-@@ -67,6 +67,12 @@
- 		status = "disabled";
- 	};
- 
-+	axp_gpio: gpio {
-+		compatible = "x-powers,axp221-gpio";
-+		gpio-controller;
-+		#gpio-cells = <2>;
-+	};
-+
- 	regulators {
- 		/* Default work frequency for buck regulators */
- 		x-powers,dcdc-freq = <3000>;
---- a/arch/arm/dts/axp809.dtsi
-+++ b/arch/arm/dts/axp809.dtsi
-@@ -50,4 +50,11 @@
- 	compatible = "x-powers,axp809";
- 	interrupt-controller;
- 	#interrupt-cells = <1>;
-+
-+	axp_gpio: gpio {
-+		compatible = "x-powers,axp809-gpio",
-+			     "x-powers,axp221-gpio";
-+		gpio-controller;
-+		#gpio-cells = <2>;
-+	};
- };

+ 756 - 0
package/boot/uboot-d1/patches/0048-phy-sun4i-usb-Use-DM_GPIO-for-id-vbus_det-GPIOs.patch

@@ -0,0 +1,756 @@
+From 5d44510d79a06c579cddc7596508848840188fb8 Mon Sep 17 00:00:00 2001
+From: Samuel Holland <[email protected]>
+Date: Mon, 16 Aug 2021 22:08:20 -0500
+Subject: [PATCH 48/68] phy: sun4i-usb: Use DM_GPIO for id/vbus_det GPIOs
+
+Now that the sunxi_gpio driver handles pull-up/down via the driver
+model, we can switch to DM_GPIO for these pins with no loss in
+functionality. Since the driver now gets its pin configuration from
+the device tree, we can remove the Kconfig symbols.
+
+Signed-off-by: Samuel Holland <[email protected]>
+---
+ arch/arm/dts/sun5i-a13-ampe-a76.dts           |  6 ++
+ .../sun6i-a31s-yones-toptech-bs1078-v2.dts    |  1 +
+ arch/arm/dts/sun8i-a33-sinlinx-sina33.dts     |  1 +
+ arch/arm/mach-sunxi/Kconfig                   | 14 ----
+ configs/A13-OLinuXino_defconfig               |  1 -
+ configs/A20-OLinuXino-Lime2-eMMC_defconfig    |  1 -
+ configs/A20-OLinuXino-Lime2_defconfig         |  1 -
+ configs/A20-Olimex-SOM-EVB_defconfig          |  1 -
+ configs/A20-Olimex-SOM204-EVB-eMMC_defconfig  |  1 -
+ configs/A20-Olimex-SOM204-EVB_defconfig       |  1 -
+ configs/A33-OLinuXino_defconfig               |  1 -
+ configs/Ampe_A76_defconfig                    |  2 -
+ configs/Bananapi_m2m_defconfig                |  1 -
+ configs/Chuwi_V7_CW0825_defconfig             |  2 -
+ configs/Cubieboard4_defconfig                 |  1 -
+ configs/Cubietruck_defconfig                  |  2 -
+ configs/Cubietruck_plus_defconfig             |  1 -
+ configs/Empire_electronix_d709_defconfig      |  2 -
+ configs/Empire_electronix_m712_defconfig      |  2 -
+ configs/Hyundai_A7HD_defconfig                |  1 -
+ configs/Merrii_A80_Optimus_defconfig          |  1 -
+ configs/Sinlinx_SinA33_defconfig              |  1 -
+ configs/Sinovoip_BPI_M3_defconfig             |  1 -
+ configs/UTOO_P66_defconfig                    |  2 -
+ configs/Wexler_TAB7200_defconfig              |  1 -
+ configs/Yones_Toptech_BS1078_V2_defconfig     |  1 -
+ configs/colorfly_e708_q1_defconfig            |  1 -
+ configs/difrnce_dit4350_defconfig             |  2 -
+ configs/dserve_dsrv9703c_defconfig            |  2 -
+ configs/ga10h_v1_1_defconfig                  |  1 -
+ configs/gt90h_v4_defconfig                    |  1 -
+ configs/iNet_3F_defconfig                     |  1 -
+ configs/iNet_3W_defconfig                     |  1 -
+ configs/iNet_86VS_defconfig                   |  1 -
+ configs/iNet_D978_rev2_defconfig              |  1 -
+ configs/icnova-a20-swac_defconfig             |  1 -
+ configs/inet1_defconfig                       |  2 -
+ configs/inet86dz_defconfig                    |  1 -
+ configs/inet97fv2_defconfig                   |  2 -
+ configs/inet98v_rev2_defconfig                |  2 -
+ configs/inet9f_rev03_defconfig                |  2 -
+ configs/inet_q972_defconfig                   |  1 -
+ configs/parrot_r16_defconfig                  |  1 -
+ configs/polaroid_mid2407pxe03_defconfig       |  1 -
+ configs/polaroid_mid2809pxe04_defconfig       |  1 -
+ configs/pov_protab2_ips9_defconfig            |  2 -
+ configs/q8_a13_tablet_defconfig               |  2 -
+ configs/q8_a23_tablet_800x480_defconfig       |  1 -
+ configs/q8_a33_tablet_1024x600_defconfig      |  1 -
+ configs/q8_a33_tablet_800x480_defconfig       |  1 -
+ configs/sun8i_a23_evb_defconfig               |  1 -
+ configs/tbs_a711_defconfig                    |  1 -
+ drivers/phy/allwinner/phy-sun4i-usb.c         | 71 ++++---------------
+ 53 files changed, 22 insertions(+), 133 deletions(-)
+
+--- a/arch/arm/dts/sun5i-a13-ampe-a76.dts
++++ b/arch/arm/dts/sun5i-a13-ampe-a76.dts
+@@ -8,6 +8,8 @@
+ /dts-v1/;
+ #include "sun5i-a13.dtsi"
+ 
++#include <dt-bindings/gpio/gpio.h>
++
+ / {
+ 	model = "Ampe A76";
+ 	compatible = "ampe,a76", "allwinner,sun5i-a13";
+@@ -26,3 +28,7 @@
+ 	pinctrl-0 = <&uart1_pg_pins>;
+ 	status = "okay";
+ };
++
++&usbphy {
++	usb0_id_det-gpios = <&pio 6 2 GPIO_ACTIVE_HIGH>; /* PG2 */
++};
+--- a/arch/arm/dts/sun6i-a31s-yones-toptech-bs1078-v2.dts
++++ b/arch/arm/dts/sun6i-a31s-yones-toptech-bs1078-v2.dts
+@@ -176,6 +176,7 @@
+ };
+ 
+ &usbphy {
++	usb0_id_det-gpios = <&pio 0 15 GPIO_ACTIVE_HIGH>; /* PA15 */
+ 	usb1_vbus-supply = <&reg_dldo1>;
+ 	usb2_vbus-supply = <&reg_dc1sw>;
+ 	status = "okay";
+--- a/arch/arm/dts/sun8i-a33-sinlinx-sina33.dts
++++ b/arch/arm/dts/sun8i-a33-sinlinx-sina33.dts
+@@ -271,5 +271,6 @@
+ 
+ &usbphy {
+ 	status = "okay";
++	usb0_id_det-gpios = <&pio 7 8 GPIO_ACTIVE_HIGH>; /* PH8 */
+ 	usb1_vbus-supply = <&reg_vcc5v0>; /* USB1 VBUS is always on */
+ };
+--- a/arch/arm/mach-sunxi/Kconfig
++++ b/arch/arm/mach-sunxi/Kconfig
+@@ -670,20 +670,6 @@ config OLD_SUNXI_KERNEL_COMPAT
+ 	Set this to enable various workarounds for old kernels, this results in
+ 	sub-optimal settings for newer kernels, only enable if needed.
+ 
+-config USB0_VBUS_DET
+-	string "Vbus detect pin for usb0 (otg)"
+-	default ""
+-	---help---
+-	Set the Vbus detect pin for usb0 (otg). This takes a string in the
+-	format understood by sunxi_name_to_gpio, e.g. PH1 for pin 1 of port H.
+-
+-config USB0_ID_DET
+-	string "ID detect pin for usb0 (otg)"
+-	default ""
+-	---help---
+-	Set the ID detect pin for usb0 (otg). This takes a string in the
+-	format understood by sunxi_name_to_gpio, e.g. PH1 for pin 1 of port H.
+-
+ config I2C0_ENABLE
+ 	bool "Enable I2C/TWI controller 0"
+ 	default y if MACH_SUN4I || MACH_SUN5I || MACH_SUN7I || MACH_SUN8I_R40
+--- a/configs/A13-OLinuXino_defconfig
++++ b/configs/A13-OLinuXino_defconfig
+@@ -5,7 +5,6 @@ CONFIG_SPL=y
+ CONFIG_MACH_SUN5I=y
+ CONFIG_DRAM_CLK=408
+ CONFIG_DRAM_EMR1=0
+-CONFIG_USB0_VBUS_DET="PG1"
+ CONFIG_AXP_GPIO=y
+ # CONFIG_VIDEO_HDMI is not set
+ CONFIG_VIDEO_VGA_VIA_LCD=y
+--- a/configs/A20-OLinuXino-Lime2-eMMC_defconfig
++++ b/configs/A20-OLinuXino-Lime2-eMMC_defconfig
+@@ -5,7 +5,6 @@ CONFIG_SPL=y
+ CONFIG_MACH_SUN7I=y
+ CONFIG_DRAM_CLK=384
+ CONFIG_MMC_SUNXI_SLOT_EXTRA=2
+-CONFIG_USB0_VBUS_DET="PH5"
+ CONFIG_I2C1_ENABLE=y
+ CONFIG_SPL_SPI_SUNXI=y
+ CONFIG_AHCI=y
+--- a/configs/A20-OLinuXino-Lime2_defconfig
++++ b/configs/A20-OLinuXino-Lime2_defconfig
+@@ -4,7 +4,6 @@ CONFIG_DEFAULT_DEVICE_TREE="sun7i-a20-ol
+ CONFIG_SPL=y
+ CONFIG_MACH_SUN7I=y
+ CONFIG_DRAM_CLK=384
+-CONFIG_USB0_VBUS_DET="PH5"
+ CONFIG_I2C1_ENABLE=y
+ CONFIG_AHCI=y
+ # CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set
+--- a/configs/A20-Olimex-SOM-EVB_defconfig
++++ b/configs/A20-Olimex-SOM-EVB_defconfig
+@@ -5,7 +5,6 @@ CONFIG_SPL=y
+ CONFIG_MACH_SUN7I=y
+ CONFIG_DRAM_CLK=384
+ CONFIG_MMC_SUNXI_SLOT_EXTRA=3
+-CONFIG_USB0_VBUS_DET="PH5"
+ CONFIG_AHCI=y
+ # CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set
+ CONFIG_SPL_I2C=y
+--- a/configs/A20-Olimex-SOM204-EVB-eMMC_defconfig
++++ b/configs/A20-Olimex-SOM204-EVB-eMMC_defconfig
+@@ -5,7 +5,6 @@ CONFIG_SPL=y
+ CONFIG_MACH_SUN7I=y
+ CONFIG_DRAM_CLK=384
+ CONFIG_MMC_SUNXI_SLOT_EXTRA=2
+-CONFIG_USB0_VBUS_DET="PH5"
+ CONFIG_I2C1_ENABLE=y
+ CONFIG_GMAC_TX_DELAY=4
+ CONFIG_AHCI=y
+--- a/configs/A20-Olimex-SOM204-EVB_defconfig
++++ b/configs/A20-Olimex-SOM204-EVB_defconfig
+@@ -4,7 +4,6 @@ CONFIG_DEFAULT_DEVICE_TREE="sun7i-a20-ol
+ CONFIG_SPL=y
+ CONFIG_MACH_SUN7I=y
+ CONFIG_DRAM_CLK=384
+-CONFIG_USB0_VBUS_DET="PH5"
+ CONFIG_I2C1_ENABLE=y
+ CONFIG_GMAC_TX_DELAY=4
+ CONFIG_AHCI=y
+--- a/configs/A33-OLinuXino_defconfig
++++ b/configs/A33-OLinuXino_defconfig
+@@ -6,7 +6,6 @@ CONFIG_MACH_SUN8I_A33=y
+ CONFIG_DRAM_CLK=432
+ CONFIG_DRAM_ZQ=15291
+ CONFIG_DRAM_ODT_EN=y
+-CONFIG_USB0_ID_DET="PB3"
+ CONFIG_AXP_GPIO=y
+ CONFIG_VIDEO_LCD_MODE="x:800,y:480,depth:18,pclk_khz:33000,le:16,ri:209,up:22,lo:22,hs:30,vs:1,sync:3,vmode:0"
+ CONFIG_VIDEO_LCD_DCLK_PHASE=0
+--- a/configs/Ampe_A76_defconfig
++++ b/configs/Ampe_A76_defconfig
+@@ -4,8 +4,6 @@ CONFIG_DEFAULT_DEVICE_TREE="sun5i-a13-am
+ CONFIG_SPL=y
+ CONFIG_MACH_SUN5I=y
+ CONFIG_DRAM_CLK=432
+-CONFIG_USB0_VBUS_DET="PG1"
+-CONFIG_USB0_ID_DET="PG2"
+ CONFIG_AXP_GPIO=y
+ # CONFIG_VIDEO_HDMI is not set
+ CONFIG_VIDEO_LCD_MODE="x:800,y:480,depth:18,pclk_khz:33000,le:45,ri:82,up:22,lo:22,hs:1,vs:1,sync:3,vmode:0"
+--- a/configs/Bananapi_m2m_defconfig
++++ b/configs/Bananapi_m2m_defconfig
+@@ -7,7 +7,6 @@ CONFIG_DRAM_CLK=600
+ CONFIG_DRAM_ZQ=15291
+ CONFIG_DRAM_ODT_EN=y
+ CONFIG_MMC_SUNXI_SLOT_EXTRA=2
+-CONFIG_USB0_ID_DET="PH8"
+ # CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set
+ CONFIG_FASTBOOT_CMD_OEM_FORMAT=y
+ CONFIG_USB_EHCI_HCD=y
+--- a/configs/Chuwi_V7_CW0825_defconfig
++++ b/configs/Chuwi_V7_CW0825_defconfig
+@@ -5,8 +5,6 @@ CONFIG_SPL=y
+ CONFIG_MACH_SUN4I=y
+ CONFIG_DRAM_CLK=408
+ CONFIG_DRAM_EMR1=4
+-CONFIG_USB0_VBUS_DET="PH5"
+-CONFIG_USB0_ID_DET="PH4"
+ CONFIG_VIDEO_LCD_MODE="x:1024,y:768,depth:24,pclk_khz:51000,le:19,ri:300,up:6,lo:31,hs:1,vs:1,sync:3,vmode:0"
+ CONFIG_VIDEO_LCD_POWER="PH8"
+ CONFIG_VIDEO_LCD_BL_EN="PH7"
+--- a/configs/Cubieboard4_defconfig
++++ b/configs/Cubieboard4_defconfig
+@@ -5,7 +5,6 @@ CONFIG_SPL=y
+ CONFIG_MACH_SUN9I=y
+ CONFIG_DRAM_CLK=672
+ CONFIG_MMC_SUNXI_SLOT_EXTRA=2
+-CONFIG_USB0_ID_DET="PH16"
+ CONFIG_AXP_GPIO=y
+ CONFIG_SYS_I2C_SUN8I_RSB=y
+ CONFIG_REGULATOR_AXP_DRIVEVBUS=y
+--- a/configs/Cubietruck_defconfig
++++ b/configs/Cubietruck_defconfig
+@@ -4,8 +4,6 @@ CONFIG_DEFAULT_DEVICE_TREE="sun7i-a20-cu
+ CONFIG_SPL=y
+ CONFIG_MACH_SUN7I=y
+ CONFIG_DRAM_CLK=432
+-CONFIG_USB0_VBUS_DET="PH22"
+-CONFIG_USB0_ID_DET="PH19"
+ CONFIG_VIDEO_VGA=y
+ CONFIG_GMAC_TX_DELAY=1
+ CONFIG_AHCI=y
+--- a/configs/Cubietruck_plus_defconfig
++++ b/configs/Cubietruck_plus_defconfig
+@@ -7,7 +7,6 @@ CONFIG_DRAM_CLK=672
+ CONFIG_DRAM_ZQ=15355
+ CONFIG_DRAM_ODT_EN=y
+ CONFIG_MMC_SUNXI_SLOT_EXTRA=2
+-CONFIG_USB0_ID_DET="PH11"
+ CONFIG_I2C0_ENABLE=y
+ CONFIG_AXP_GPIO=y
+ # CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set
+--- a/configs/Empire_electronix_d709_defconfig
++++ b/configs/Empire_electronix_d709_defconfig
+@@ -5,8 +5,6 @@ CONFIG_SPL=y
+ CONFIG_MACH_SUN5I=y
+ CONFIG_DRAM_CLK=432
+ CONFIG_DRAM_EMR1=0
+-CONFIG_USB0_VBUS_DET="PG1"
+-CONFIG_USB0_ID_DET="PG2"
+ CONFIG_AXP_GPIO=y
+ # CONFIG_VIDEO_HDMI is not set
+ CONFIG_VIDEO_LCD_MODE="x:800,y:480,depth:18,pclk_khz:33000,le:45,ri:210,up:22,lo:22,hs:1,vs:1,sync:3,vmode:0"
+--- a/configs/Empire_electronix_m712_defconfig
++++ b/configs/Empire_electronix_m712_defconfig
+@@ -4,8 +4,6 @@ CONFIG_DEFAULT_DEVICE_TREE="sun5i-a13-em
+ CONFIG_SPL=y
+ CONFIG_MACH_SUN5I=y
+ CONFIG_DRAM_CLK=408
+-CONFIG_USB0_VBUS_DET="PG1"
+-CONFIG_USB0_ID_DET="PG2"
+ CONFIG_AXP_GPIO=y
+ # CONFIG_VIDEO_HDMI is not set
+ CONFIG_VIDEO_LCD_MODE="x:800,y:480,depth:18,pclk_khz:33000,le:45,ri:82,up:22,lo:22,hs:1,vs:1,sync:3,vmode:0"
+--- a/configs/Hyundai_A7HD_defconfig
++++ b/configs/Hyundai_A7HD_defconfig
+@@ -4,7 +4,6 @@ CONFIG_DEFAULT_DEVICE_TREE="sun4i-a10-hy
+ CONFIG_SPL=y
+ CONFIG_MACH_SUN4I=y
+ CONFIG_DRAM_EMR1=4
+-CONFIG_USB0_VBUS_DET="PH5"
+ CONFIG_VIDEO_LCD_MODE="x:1024,y:600,depth:18,pclk_khz:51000,le:45,ri:274,up:22,lo:12,hs:1,vs:1,sync:3,vmode:0"
+ CONFIG_VIDEO_LCD_POWER="PH2"
+ CONFIG_VIDEO_LCD_BL_EN="PH9"
+--- a/configs/Merrii_A80_Optimus_defconfig
++++ b/configs/Merrii_A80_Optimus_defconfig
+@@ -5,7 +5,6 @@ CONFIG_SPL=y
+ CONFIG_MACH_SUN9I=y
+ CONFIG_DRAM_CLK=672
+ CONFIG_MMC_SUNXI_SLOT_EXTRA=2
+-CONFIG_USB0_ID_DET="PH3"
+ CONFIG_AXP_GPIO=y
+ CONFIG_SYS_I2C_SUN8I_RSB=y
+ CONFIG_REGULATOR_AXP_DRIVEVBUS=y
+--- a/configs/Sinlinx_SinA33_defconfig
++++ b/configs/Sinlinx_SinA33_defconfig
+@@ -6,7 +6,6 @@ CONFIG_MACH_SUN8I_A33=y
+ CONFIG_DRAM_CLK=552
+ CONFIG_DRAM_ZQ=15291
+ CONFIG_MMC_SUNXI_SLOT_EXTRA=2
+-CONFIG_USB0_ID_DET="PH8"
+ CONFIG_VIDEO_LCD_MODE="x:1024,y:600,depth:18,pclk_khz:66000,le:90,ri:160,up:3,lo:127,hs:70,vs:20,sync:3,vmode:0"
+ CONFIG_VIDEO_LCD_DCLK_PHASE=0
+ CONFIG_VIDEO_LCD_BL_EN="PH6"
+--- a/configs/Sinovoip_BPI_M3_defconfig
++++ b/configs/Sinovoip_BPI_M3_defconfig
+@@ -8,7 +8,6 @@ CONFIG_DRAM_CLK=480
+ CONFIG_DRAM_ZQ=15355
+ CONFIG_DRAM_ODT_EN=y
+ CONFIG_MMC_SUNXI_SLOT_EXTRA=2
+-CONFIG_USB0_ID_DET="PH11"
+ CONFIG_AXP_GPIO=y
+ # CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set
+ CONFIG_CONSOLE_MUX=y
+--- a/configs/UTOO_P66_defconfig
++++ b/configs/UTOO_P66_defconfig
+@@ -6,8 +6,6 @@ CONFIG_MACH_SUN5I=y
+ CONFIG_DRAM_CLK=432
+ CONFIG_DRAM_EMR1=0
+ CONFIG_MMC_SUNXI_SLOT_EXTRA=2
+-CONFIG_USB0_VBUS_DET="PG01"
+-CONFIG_USB0_ID_DET="PG2"
+ CONFIG_AXP_GPIO=y
+ # CONFIG_VIDEO_HDMI is not set
+ CONFIG_VIDEO_LCD_MODE="x:480,y:800,depth:18,pclk_khz:25000,le:2,ri:93,up:2,lo:93,hs:1,vs:1,sync:3,vmode:0"
+--- a/configs/Wexler_TAB7200_defconfig
++++ b/configs/Wexler_TAB7200_defconfig
+@@ -4,7 +4,6 @@ CONFIG_DEFAULT_DEVICE_TREE="sun7i-a20-we
+ CONFIG_SPL=y
+ CONFIG_MACH_SUN7I=y
+ CONFIG_DRAM_CLK=384
+-CONFIG_USB0_ID_DET="PH4"
+ CONFIG_AXP_GPIO=y
+ CONFIG_VIDEO_LCD_MODE="x:800,y:480,depth:24,pclk_khz:33000,le:45,ri:210,up:22,lo:22,hs:1,vs:1,sync:3,vmode:0"
+ CONFIG_VIDEO_LCD_POWER="PH8"
+--- a/configs/Yones_Toptech_BS1078_V2_defconfig
++++ b/configs/Yones_Toptech_BS1078_V2_defconfig
+@@ -5,7 +5,6 @@ CONFIG_SPL=y
+ CONFIG_MACH_SUN6I=y
+ CONFIG_DRAM_CLK=420
+ CONFIG_DRAM_ZQ=251
+-CONFIG_USB0_ID_DET="PA15"
+ CONFIG_AXP_GPIO=y
+ CONFIG_VIDEO_LCD_MODE="x:1024,y:600,depth:24,pclk_khz:70000,le:120,ri:180,up:17,lo:15,hs:20,vs:3,sync:3,vmode:0"
+ CONFIG_VIDEO_LCD_DCLK_PHASE=0
+--- a/configs/colorfly_e708_q1_defconfig
++++ b/configs/colorfly_e708_q1_defconfig
+@@ -5,7 +5,6 @@ CONFIG_SPL=y
+ CONFIG_MACH_SUN6I=y
+ CONFIG_DRAM_CLK=432
+ CONFIG_DRAM_ZQ=251
+-CONFIG_USB0_ID_DET="PA15"
+ CONFIG_AXP_GPIO=y
+ CONFIG_VIDEO_LCD_MODE="x:800,y:1280,depth:24,pclk_khz:64000,le:20,ri:34,up:1,lo:16,hs:10,vs:1,sync:3,vmode:0"
+ CONFIG_VIDEO_LCD_DCLK_PHASE=0
+--- a/configs/difrnce_dit4350_defconfig
++++ b/configs/difrnce_dit4350_defconfig
+@@ -4,8 +4,6 @@ CONFIG_DEFAULT_DEVICE_TREE="sun5i-a13-di
+ CONFIG_SPL=y
+ CONFIG_MACH_SUN5I=y
+ CONFIG_DRAM_CLK=408
+-CONFIG_USB0_VBUS_DET="PG1"
+-CONFIG_USB0_ID_DET="PG2"
+ CONFIG_AXP_GPIO=y
+ # CONFIG_VIDEO_HDMI is not set
+ CONFIG_VIDEO_LCD_MODE="x:480,y:272,depth:18,pclk_khz:12000,le:1,ri:43,up:1,lo:12,hs:1,vs:1,sync:3,vmode:0"
+--- a/configs/dserve_dsrv9703c_defconfig
++++ b/configs/dserve_dsrv9703c_defconfig
+@@ -3,8 +3,6 @@ CONFIG_ARCH_SUNXI=y
+ CONFIG_DEFAULT_DEVICE_TREE="sun4i-a10-dserve-dsrv9703c"
+ CONFIG_SPL=y
+ CONFIG_MACH_SUN4I=y
+-CONFIG_USB0_VBUS_DET="PH5"
+-CONFIG_USB0_ID_DET="PH4"
+ CONFIG_VIDEO_LCD_MODE="x:1024,y:768,depth:18,pclk_khz:80000,le:479,ri:544,up:5,lo:26,hs:1,vs:1,sync:3,vmode:0"
+ CONFIG_VIDEO_LCD_DCLK_PHASE=0
+ CONFIG_VIDEO_LCD_POWER="PH8"
+--- a/configs/ga10h_v1_1_defconfig
++++ b/configs/ga10h_v1_1_defconfig
+@@ -6,7 +6,6 @@ CONFIG_MACH_SUN8I_A33=y
+ CONFIG_DRAM_CLK=432
+ CONFIG_DRAM_ZQ=15291
+ CONFIG_DRAM_ODT_EN=y
+-CONFIG_USB0_ID_DET="PH8"
+ CONFIG_AXP_GPIO=y
+ CONFIG_VIDEO_LCD_MODE="x:1024,y:600,depth:18,pclk_khz:52000,le:138,ri:162,up:22,lo:10,hs:20,vs:3,sync:3,vmode:0"
+ CONFIG_VIDEO_LCD_DCLK_PHASE=0
+--- a/configs/gt90h_v4_defconfig
++++ b/configs/gt90h_v4_defconfig
+@@ -5,7 +5,6 @@ CONFIG_SPL=y
+ CONFIG_MACH_SUN8I_A23=y
+ CONFIG_DRAM_CLK=480
+ CONFIG_DRAM_ZQ=32767
+-CONFIG_USB0_ID_DET="PH8"
+ CONFIG_AXP_GPIO=y
+ CONFIG_VIDEO_LCD_MODE="x:1024,y:600,depth:18,pclk_khz:55000,le:159,ri:160,up:22,lo:12,hs:1,vs:1,sync:3,vmode:0"
+ CONFIG_VIDEO_LCD_DCLK_PHASE=0
+--- a/configs/iNet_3F_defconfig
++++ b/configs/iNet_3F_defconfig
+@@ -5,7 +5,6 @@ CONFIG_SPL=y
+ CONFIG_MACH_SUN4I=y
+ CONFIG_DRAM_CLK=432
+ CONFIG_DRAM_EMR1=4
+-CONFIG_USB0_VBUS_DET="PH5"
+ CONFIG_VIDEO_LCD_MODE="x:1024,y:768,depth:18,pclk_khz:100000,le:799,ri:260,up:15,lo:16,hs:1,vs:1,sync:3,vmode:0"
+ CONFIG_VIDEO_LCD_POWER="PH8"
+ CONFIG_VIDEO_LCD_BL_EN="PH7"
+--- a/configs/iNet_3W_defconfig
++++ b/configs/iNet_3W_defconfig
+@@ -6,7 +6,6 @@ CONFIG_MACH_SUN4I=y
+ CONFIG_DRAM_CLK=408
+ CONFIG_DRAM_ZQ=127
+ CONFIG_DRAM_EMR1=4
+-CONFIG_USB0_VBUS_DET="PH5"
+ CONFIG_VIDEO_LCD_MODE="x:1024,y:768,depth:24,pclk_khz:65000,le:159,ri:160,up:22,lo:15,hs:1,vs:1,sync:3,vmode:0"
+ CONFIG_VIDEO_LCD_POWER="PH8"
+ CONFIG_VIDEO_LCD_BL_EN="PH7"
+--- a/configs/iNet_86VS_defconfig
++++ b/configs/iNet_86VS_defconfig
+@@ -4,7 +4,6 @@ CONFIG_DEFAULT_DEVICE_TREE="sun5i-a13-in
+ CONFIG_SPL=y
+ CONFIG_MACH_SUN5I=y
+ CONFIG_DRAM_CLK=408
+-CONFIG_USB0_VBUS_DET="PG1"
+ CONFIG_AXP_GPIO=y
+ # CONFIG_VIDEO_HDMI is not set
+ CONFIG_VIDEO_LCD_MODE="x:800,y:480,depth:18,pclk_khz:33000,le:45,ri:209,up:22,lo:22,hs:1,vs:1,sync:3,vmode:0"
+--- a/configs/iNet_D978_rev2_defconfig
++++ b/configs/iNet_D978_rev2_defconfig
+@@ -5,7 +5,6 @@ CONFIG_SPL=y
+ CONFIG_MACH_SUN8I_A33=y
+ CONFIG_DRAM_CLK=456
+ CONFIG_DRAM_ZQ=15291
+-CONFIG_USB0_ID_DET="PH8"
+ CONFIG_AXP_GPIO=y
+ CONFIG_VIDEO_LCD_MODE="x:1024,y:768,depth:18,pclk_khz:65000,le:120,ri:180,up:22,lo:13,hs:20,vs:3,sync:3,vmode:0"
+ CONFIG_VIDEO_LCD_DCLK_PHASE=0
+--- a/configs/icnova-a20-swac_defconfig
++++ b/configs/icnova-a20-swac_defconfig
+@@ -9,7 +9,6 @@ CONFIG_SPL=y
+ CONFIG_MACH_SUN7I=y
+ CONFIG_DRAM_CLK=384
+ CONFIG_OLD_SUNXI_KERNEL_COMPAT=y
+-CONFIG_USB0_VBUS_DET="PH7"
+ CONFIG_VIDEO_LCD_MODE="x:800,y:480,depth:24,pclk_khz:33000,le:45,ri:209,up:22,lo:22,hs:1,vs:1,sync:3,vmode:0"
+ CONFIG_VIDEO_LCD_POWER="PH22"
+ CONFIG_VIDEO_LCD_PANEL_LVDS=y
+--- a/configs/inet1_defconfig
++++ b/configs/inet1_defconfig
+@@ -5,8 +5,6 @@ CONFIG_SPL=y
+ CONFIG_MACH_SUN4I=y
+ CONFIG_DRAM_CLK=432
+ CONFIG_DRAM_EMR1=4
+-CONFIG_USB0_VBUS_DET="PH5"
+-CONFIG_USB0_ID_DET="PH4"
+ CONFIG_VIDEO_LCD_MODE="x:1024,y:600,depth:24,pclk_khz:52000,le:32,ri:287,up:22,lo:12,hs:1,vs:1,sync:3,vmode:0"
+ CONFIG_VIDEO_LCD_POWER="PH8"
+ CONFIG_VIDEO_LCD_BL_EN="PH7"
+--- a/configs/inet86dz_defconfig
++++ b/configs/inet86dz_defconfig
+@@ -5,7 +5,6 @@ CONFIG_SPL=y
+ CONFIG_MACH_SUN8I_A23=y
+ CONFIG_DRAM_CLK=552
+ CONFIG_DRAM_ZQ=63351
+-CONFIG_USB0_ID_DET="PH8"
+ CONFIG_AXP_GPIO=y
+ CONFIG_VIDEO_LCD_MODE="x:1024,y:600,depth:18,pclk_khz:51000,le:138,ri:162,up:22,lo:10,hs:20,vs:3,sync:3,vmode:0"
+ CONFIG_VIDEO_LCD_DCLK_PHASE=0
+--- a/configs/inet97fv2_defconfig
++++ b/configs/inet97fv2_defconfig
+@@ -5,8 +5,6 @@ CONFIG_SPL=y
+ CONFIG_MACH_SUN4I=y
+ CONFIG_DRAM_CLK=408
+ CONFIG_DRAM_EMR1=4
+-CONFIG_USB0_VBUS_DET="PH5"
+-CONFIG_USB0_ID_DET="PH4"
+ CONFIG_VIDEO_LCD_MODE="x:800,y:480,depth:24,pclk_khz:33000,le:45,ri:209,up:22,lo:22,hs:1,vs:1,sync:3,vmode:0"
+ CONFIG_VIDEO_LCD_POWER="PH8"
+ CONFIG_VIDEO_LCD_BL_EN="PH7"
+--- a/configs/inet98v_rev2_defconfig
++++ b/configs/inet98v_rev2_defconfig
+@@ -4,8 +4,6 @@ CONFIG_DEFAULT_DEVICE_TREE="sun5i-a13-in
+ CONFIG_SPL=y
+ CONFIG_MACH_SUN5I=y
+ CONFIG_DRAM_CLK=432
+-CONFIG_USB0_VBUS_DET="PG1"
+-CONFIG_USB0_ID_DET="PG2"
+ CONFIG_AXP_GPIO=y
+ # CONFIG_VIDEO_HDMI is not set
+ CONFIG_VIDEO_LCD_MODE="x:800,y:480,depth:18,pclk_khz:33000,le:45,ri:209,up:22,lo:22,hs:1,vs:1,sync:3,vmode:0"
+--- a/configs/inet9f_rev03_defconfig
++++ b/configs/inet9f_rev03_defconfig
+@@ -5,8 +5,6 @@ CONFIG_SPL=y
+ CONFIG_MACH_SUN4I=y
+ CONFIG_DRAM_CLK=408
+ CONFIG_DRAM_EMR1=4
+-CONFIG_USB0_VBUS_DET="PH5"
+-CONFIG_USB0_ID_DET="PH4"
+ CONFIG_VIDEO_LCD_MODE="x:800,y:480,depth:24,pclk_khz:33000,le:45,ri:209,up:22,lo:22,hs:1,vs:1,sync:3,vmode:0"
+ CONFIG_VIDEO_LCD_POWER="PH8"
+ CONFIG_VIDEO_LCD_BL_EN="PH7"
+--- a/configs/inet_q972_defconfig
++++ b/configs/inet_q972_defconfig
+@@ -5,7 +5,6 @@ CONFIG_SPL=y
+ CONFIG_MACH_SUN6I=y
+ CONFIG_DRAM_CLK=384
+ CONFIG_DRAM_ZQ=251
+-CONFIG_USB0_ID_DET="PA15"
+ CONFIG_AXP_GPIO=y
+ CONFIG_VIDEO_LCD_MODE="x:1024,y:768,depth:18,pclk_khz:65000,le:280,ri:20,up:22,lo:8,hs:20,vs:8,sync:3,vmode:0"
+ CONFIG_VIDEO_LCD_DCLK_PHASE=0
+--- a/configs/parrot_r16_defconfig
++++ b/configs/parrot_r16_defconfig
+@@ -6,7 +6,6 @@ CONFIG_MACH_SUN8I_A33=y
+ CONFIG_DRAM_CLK=600
+ CONFIG_DRAM_ZQ=15291
+ CONFIG_MMC_SUNXI_SLOT_EXTRA=2
+-CONFIG_USB0_ID_DET="PD10"
+ CONFIG_AXP_GPIO=y
+ # CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set
+ CONFIG_FASTBOOT_CMD_OEM_FORMAT=y
+--- a/configs/polaroid_mid2407pxe03_defconfig
++++ b/configs/polaroid_mid2407pxe03_defconfig
+@@ -5,7 +5,6 @@ CONFIG_SPL=y
+ CONFIG_MACH_SUN8I_A23=y
+ CONFIG_DRAM_CLK=432
+ CONFIG_DRAM_ZQ=63351
+-CONFIG_USB0_ID_DET="PH8"
+ CONFIG_AXP_GPIO=y
+ CONFIG_VIDEO_LCD_MODE="x:800,y:480,depth:18,pclk_khz:33000,le:87,ri:40,up:31,lo:13,hs:1,vs:1,sync:3,vmode:0"
+ CONFIG_VIDEO_LCD_DCLK_PHASE=0
+--- a/configs/polaroid_mid2809pxe04_defconfig
++++ b/configs/polaroid_mid2809pxe04_defconfig
+@@ -5,7 +5,6 @@ CONFIG_SPL=y
+ CONFIG_MACH_SUN8I_A23=y
+ CONFIG_DRAM_CLK=432
+ CONFIG_DRAM_ZQ=63351
+-CONFIG_USB0_ID_DET="PH8"
+ CONFIG_AXP_GPIO=y
+ CONFIG_VIDEO_LCD_MODE="x:800,y:480,depth:18,pclk_khz:33000,le:36,ri:210,up:18,lo:22,hs:10,vs:5,sync:3,vmode:0"
+ CONFIG_VIDEO_LCD_DCLK_PHASE=0
+--- a/configs/pov_protab2_ips9_defconfig
++++ b/configs/pov_protab2_ips9_defconfig
+@@ -4,8 +4,6 @@ CONFIG_DEFAULT_DEVICE_TREE="sun4i-a10-po
+ CONFIG_SPL=y
+ CONFIG_MACH_SUN4I=y
+ CONFIG_DRAM_CLK=432
+-CONFIG_USB0_VBUS_DET="PH5"
+-CONFIG_USB0_ID_DET="PH4"
+ CONFIG_VIDEO_LCD_MODE="x:1024,y:768,depth:18,pclk_khz:100000,le:480,ri:260,up:6,lo:16,hs:320,vs:10,sync:3,vmode:0"
+ CONFIG_VIDEO_LCD_DCLK_PHASE=0
+ CONFIG_VIDEO_LCD_POWER="PH8"
+--- a/configs/q8_a13_tablet_defconfig
++++ b/configs/q8_a13_tablet_defconfig
+@@ -4,8 +4,6 @@ CONFIG_DEFAULT_DEVICE_TREE="sun5i-a13-q8
+ CONFIG_SPL=y
+ CONFIG_MACH_SUN5I=y
+ CONFIG_DRAM_CLK=384
+-CONFIG_USB0_VBUS_DET="PG1"
+-CONFIG_USB0_ID_DET="PG2"
+ CONFIG_AXP_GPIO=y
+ # CONFIG_VIDEO_HDMI is not set
+ CONFIG_VIDEO_LCD_MODE="x:800,y:480,depth:18,pclk_khz:33000,le:87,ri:40,up:31,lo:13,hs:1,vs:1,sync:3,vmode:0"
+--- a/configs/q8_a23_tablet_800x480_defconfig
++++ b/configs/q8_a23_tablet_800x480_defconfig
+@@ -5,7 +5,6 @@ CONFIG_SPL=y
+ CONFIG_MACH_SUN8I_A23=y
+ CONFIG_DRAM_CLK=432
+ CONFIG_DRAM_ZQ=63306
+-CONFIG_USB0_ID_DET="PH8"
+ CONFIG_AXP_GPIO=y
+ CONFIG_VIDEO_LCD_MODE="x:800,y:480,depth:18,pclk_khz:33000,le:36,ri:210,up:18,lo:22,hs:10,vs:5,sync:3,vmode:0"
+ CONFIG_VIDEO_LCD_DCLK_PHASE=0
+--- a/configs/q8_a33_tablet_1024x600_defconfig
++++ b/configs/q8_a33_tablet_1024x600_defconfig
+@@ -5,7 +5,6 @@ CONFIG_SPL=y
+ CONFIG_MACH_SUN8I_A33=y
+ CONFIG_DRAM_CLK=456
+ CONFIG_DRAM_ZQ=15291
+-CONFIG_USB0_ID_DET="PH8"
+ CONFIG_AXP_GPIO=y
+ CONFIG_VIDEO_LCD_MODE="x:1024,y:600,depth:18,pclk_khz:51000,le:159,ri:160,up:22,lo:12,hs:1,vs:1,sync:3,vmode:0"
+ CONFIG_VIDEO_LCD_DCLK_PHASE=0
+--- a/configs/q8_a33_tablet_800x480_defconfig
++++ b/configs/q8_a33_tablet_800x480_defconfig
+@@ -5,7 +5,6 @@ CONFIG_SPL=y
+ CONFIG_MACH_SUN8I_A33=y
+ CONFIG_DRAM_CLK=456
+ CONFIG_DRAM_ZQ=15291
+-CONFIG_USB0_ID_DET="PH8"
+ CONFIG_AXP_GPIO=y
+ CONFIG_VIDEO_LCD_MODE="x:800,y:480,depth:18,pclk_khz:33000,le:87,ri:167,up:31,lo:13,hs:1,vs:1,sync:3,vmode:0"
+ CONFIG_VIDEO_LCD_DCLK_PHASE=0
+--- a/configs/sun8i_a23_evb_defconfig
++++ b/configs/sun8i_a23_evb_defconfig
+@@ -5,7 +5,6 @@ CONFIG_SPL=y
+ CONFIG_MACH_SUN8I_A23=y
+ CONFIG_DRAM_CLK=552
+ CONFIG_DRAM_ZQ=63351
+-CONFIG_USB0_VBUS_DET="axp_vbus_detect"
+ # CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set
+ CONFIG_CONS_INDEX=5
+ CONFIG_USB_EHCI_HCD=y
+--- a/configs/tbs_a711_defconfig
++++ b/configs/tbs_a711_defconfig
+@@ -8,7 +8,6 @@ CONFIG_DRAM_CLK=552
+ CONFIG_DRAM_ZQ=15355
+ CONFIG_DRAM_ODT_EN=y
+ CONFIG_MMC_SUNXI_SLOT_EXTRA=2
+-CONFIG_USB0_ID_DET="PH11"
+ CONFIG_AXP_GPIO=y
+ # CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set
+ CONFIG_FASTBOOT_CMD_OEM_FORMAT=y
+--- a/drivers/phy/allwinner/phy-sun4i-usb.c
++++ b/drivers/phy/allwinner/phy-sun4i-usb.c
+@@ -86,32 +86,8 @@ struct sun4i_usb_phy_cfg {
+ 	int missing_phys;
+ };
+ 
+-struct sun4i_usb_phy_info {
+-	const char *gpio_vbus_det;
+-	const char *gpio_id_det;
+-} phy_info[] = {
+-	{
+-		.gpio_vbus_det = CONFIG_USB0_VBUS_DET,
+-		.gpio_id_det = CONFIG_USB0_ID_DET,
+-	},
+-	{
+-		.gpio_vbus_det = NULL,
+-		.gpio_id_det = NULL,
+-	},
+-	{
+-		.gpio_vbus_det = NULL,
+-		.gpio_id_det = NULL,
+-	},
+-	{
+-		.gpio_vbus_det = NULL,
+-		.gpio_id_det = NULL,
+-	},
+-};
+-
+ struct sun4i_usb_phy_plat {
+ 	void __iomem *pmu;
+-	struct gpio_desc gpio_vbus_det;
+-	struct gpio_desc gpio_id_det;
+ 	struct clk clocks;
+ 	struct clk clk2;
+ 	struct reset_ctl resets;
+@@ -123,6 +99,8 @@ struct sun4i_usb_phy_data {
+ 	void __iomem *base;
+ 	const struct sun4i_usb_phy_cfg *cfg;
+ 	struct sun4i_usb_phy_plat *usb_phy;
++	struct gpio_desc id_det_gpio;
++	struct gpio_desc vbus_det_gpio;
+ 	struct udevice *vbus_power_supply;
+ };
+ 
+@@ -420,11 +398,10 @@ static int sun4i_usb_phy_xlate(struct ph
+ int sun4i_usb_phy_vbus_detect(struct phy *phy)
+ {
+ 	struct sun4i_usb_phy_data *data = dev_get_priv(phy->dev);
+-	struct sun4i_usb_phy_plat *usb_phy = &data->usb_phy[phy->id];
+ 	int err = 1, retries = 3;
+ 
+-	if (dm_gpio_is_valid(&usb_phy->gpio_vbus_det)) {
+-		err = dm_gpio_get_value(&usb_phy->gpio_vbus_det);
++	if (dm_gpio_is_valid(&data->vbus_det_gpio)) {
++		err = dm_gpio_get_value(&data->vbus_det_gpio);
+ 		/*
+ 		 * Vbus may have been provided by the board and just turned off
+ 		 * some milliseconds ago on reset. What we're measuring then is
+@@ -432,7 +409,7 @@ int sun4i_usb_phy_vbus_detect(struct phy
+ 		 */
+ 		while (err > 0 && retries--) {
+ 			mdelay(100);
+-			err = dm_gpio_get_value(&usb_phy->gpio_vbus_det);
++			err = dm_gpio_get_value(&data->vbus_det_gpio);
+ 		}
+ 	} else if (data->vbus_power_supply) {
+ 		err = regulator_get_enable(data->vbus_power_supply);
+@@ -444,12 +421,11 @@ int sun4i_usb_phy_vbus_detect(struct phy
+ int sun4i_usb_phy_id_detect(struct phy *phy)
+ {
+ 	struct sun4i_usb_phy_data *data = dev_get_priv(phy->dev);
+-	struct sun4i_usb_phy_plat *usb_phy = &data->usb_phy[phy->id];
+ 
+-	if (!dm_gpio_is_valid(&usb_phy->gpio_id_det))
+-		return -1;
++	if (!dm_gpio_is_valid(&data->id_det_gpio))
++		return -EOPNOTSUPP;
+ 
+-	return dm_gpio_get_value(&usb_phy->gpio_id_det);
++	return dm_gpio_get_value(&data->id_det_gpio);
+ }
+ 
+ void sun4i_usb_phy_set_squelch_detect(struct phy *phy, bool enabled)
+@@ -479,13 +455,18 @@ static int sun4i_usb_phy_probe(struct ud
+ 	if (!data->base)
+ 		return -EINVAL;
+ 
++	gpio_request_by_name(dev, "usb0_id_det-gpios", 0, &data->id_det_gpio,
++			     GPIOD_IS_IN | GPIOD_PULL_UP);
++
++	gpio_request_by_name(dev, "usb0_vbus_det-gpios", 0, &data->vbus_det_gpio,
++			     GPIOD_IS_IN);
++
+ 	device_get_supply_regulator(dev, "usb0_vbus_power-supply",
+ 				    &data->vbus_power_supply);
+ 
+ 	data->usb_phy = plat;
+ 	for (i = 0; i < data->cfg->num_phys; i++) {
+ 		struct sun4i_usb_phy_plat *phy = &plat[i];
+-		struct sun4i_usb_phy_info *info = &phy_info[i];
+ 		char name[32];
+ 
+ 		if (data->cfg->missing_phys & BIT(i))
+@@ -499,30 +480,6 @@ static int sun4i_usb_phy_probe(struct ud
+ 				return ret;
+ 		}
+ 
+-		ret = dm_gpio_lookup_name(info->gpio_vbus_det,
+-					  &phy->gpio_vbus_det);
+-		if (ret == 0) {
+-			ret = dm_gpio_request(&phy->gpio_vbus_det,
+-					      "usb_vbus_det");
+-			if (ret)
+-				return ret;
+-			ret = dm_gpio_set_dir_flags(&phy->gpio_vbus_det,
+-						    GPIOD_IS_IN);
+-			if (ret)
+-				return ret;
+-		}
+-
+-		ret = dm_gpio_lookup_name(info->gpio_id_det, &phy->gpio_id_det);
+-		if (ret == 0) {
+-			ret = dm_gpio_request(&phy->gpio_id_det, "usb_id_det");
+-			if (ret)
+-				return ret;
+-			ret = dm_gpio_set_dir_flags(&phy->gpio_id_det,
+-						GPIOD_IS_IN | GPIOD_PULL_UP);
+-			if (ret)
+-				return ret;
+-		}
+-
+ 		if (data->cfg->dedicated_clocks)
+ 			snprintf(name, sizeof(name), "usb%d_phy", i);
+ 		else

+ 5 - 5
package/boot/uboot-d1/patches/0047-gpio-axp-Consistently-use-the-axp_gpio-order.patch → package/boot/uboot-d1/patches/0049-gpio-axp-Consistently-use-the-axp_gpio-order.patch

@@ -1,7 +1,7 @@
-From 7e85c2d6516e47b537b27132d1946d1eab3b8923 Mon Sep 17 00:00:00 2001
+From 7186c1a56fb2aebbc6d2a90a1ee9f8150dabbf5b Mon Sep 17 00:00:00 2001
 From: Samuel Holland <[email protected]>
 From: Samuel Holland <[email protected]>
 Date: Fri, 27 Aug 2021 17:39:36 -0500
 Date: Fri, 27 Aug 2021 17:39:36 -0500
-Subject: [PATCH 47/90] gpio: axp: Consistently use the "axp_gpio" order
+Subject: [PATCH 49/68] gpio: axp: Consistently use the "axp_gpio" order
 
 
 This is less confusing than half of the driver using "axp_gpio" and the
 This is less confusing than half of the driver using "axp_gpio" and the
 other half using "gpio_axp".
 other half using "gpio_axp".
@@ -13,7 +13,7 @@ Signed-off-by: Samuel Holland <[email protected]>
 
 
 --- a/drivers/gpio/axp_gpio.c
 --- a/drivers/gpio/axp_gpio.c
 +++ b/drivers/gpio/axp_gpio.c
 +++ b/drivers/gpio/axp_gpio.c
-@@ -89,14 +89,14 @@ static int axp_gpio_set_value(struct ude
+@@ -90,14 +90,14 @@ static int axp_gpio_set_value(struct ude
  					 AXP_GPIO_CTRL_OUTPUT_LOW);
  					 AXP_GPIO_CTRL_OUTPUT_LOW);
  }
  }
  
  
@@ -30,7 +30,7 @@ Signed-off-by: Samuel Holland <[email protected]>
  {
  {
  	struct gpio_dev_priv *uc_priv = dev_get_uclass_priv(dev);
  	struct gpio_dev_priv *uc_priv = dev_get_uclass_priv(dev);
  
  
-@@ -107,11 +107,11 @@ static int gpio_axp_probe(struct udevice
+@@ -108,11 +108,11 @@ static int gpio_axp_probe(struct udevice
  	return 0;
  	return 0;
  }
  }
  
  
@@ -47,7 +47,7 @@ Signed-off-by: Samuel Holland <[email protected]>
  };
  };
  
  
  int axp_gpio_init(void)
  int axp_gpio_init(void)
-@@ -124,7 +124,7 @@ int axp_gpio_init(void)
+@@ -125,7 +125,7 @@ int axp_gpio_init(void)
  		return ret;
  		return ret;
  
  
  	/* There is no devicetree support for the axp yet, so bind directly */
  	/* There is no devicetree support for the axp yet, so bind directly */

+ 31 - 31
package/boot/uboot-d1/patches/0048-gpio-axp-Bind-via-device-tree.patch → package/boot/uboot-d1/patches/0050-gpio-axp-Bind-via-device-tree.patch

@@ -1,7 +1,7 @@
-From a39b1bd1ad0babb355a5cb6f6a3bd8e378433b54 Mon Sep 17 00:00:00 2001
+From eb95c5ff29e37573d7d0d776c5d9df4a44039c42 Mon Sep 17 00:00:00 2001
 From: Samuel Holland <[email protected]>
 From: Samuel Holland <[email protected]>
 Date: Fri, 27 Aug 2021 21:43:19 -0500
 Date: Fri, 27 Aug 2021 21:43:19 -0500
-Subject: [PATCH 48/90] gpio: axp: Bind via device tree
+Subject: [PATCH 50/68] gpio: axp: Bind via device tree
 
 
 Now that the PMIC has a DM driver and binds device tree subnodes, the
 Now that the PMIC has a DM driver and binds device tree subnodes, the
 GPIO device can be bound that way, instead of from inside board code.
 GPIO device can be bound that way, instead of from inside board code.
@@ -12,29 +12,16 @@ the supported compatibles.
 
 
 Signed-off-by: Samuel Holland <[email protected]>
 Signed-off-by: Samuel Holland <[email protected]>
 ---
 ---
- arch/arm/include/asm/arch-sunxi/gpio.h |  6 -----
- arch/arm/mach-sunxi/Kconfig            |  6 -----
- board/sunxi/board.c                    |  4 ---
- drivers/gpio/Kconfig                   |  8 ++++++
- drivers/gpio/axp_gpio.c                | 34 +++++++++++---------------
+ arch/arm/mach-sunxi/Kconfig |  6 ------
+ board/sunxi/board.c         |  4 ----
+ drivers/gpio/Kconfig        |  8 ++++++++
+ drivers/gpio/axp_gpio.c     | 34 ++++++++++++++--------------------
+ include/sunxi_gpio.h        |  6 ------
  5 files changed, 22 insertions(+), 36 deletions(-)
  5 files changed, 22 insertions(+), 36 deletions(-)
 
 
---- a/arch/arm/include/asm/arch-sunxi/gpio.h
-+++ b/arch/arm/include/asm/arch-sunxi/gpio.h
-@@ -219,10 +219,4 @@ void sunxi_gpio_set_pull(u32 pin, u32 va
- void sunxi_gpio_set_pull_bank(struct sunxi_gpio *pio, int bank_offset, u32 val);
- int sunxi_name_to_gpio(const char *name);
- 
--#if !defined CONFIG_SPL_BUILD && defined CONFIG_AXP_GPIO
--int axp_gpio_init(void);
--#else
--static inline int axp_gpio_init(void) { return 0; }
--#endif
--
- #endif /* _SUNXI_GPIO_H */
 --- a/arch/arm/mach-sunxi/Kconfig
 --- a/arch/arm/mach-sunxi/Kconfig
 +++ b/arch/arm/mach-sunxi/Kconfig
 +++ b/arch/arm/mach-sunxi/Kconfig
-@@ -682,12 +682,6 @@ config R_I2C_ENABLE
+@@ -697,12 +697,6 @@ config R_I2C_ENABLE
  	Set this to y to enable the I2C controller which is part of the PRCM.
  	Set this to y to enable the I2C controller which is part of the PRCM.
  endif
  endif
  
  
@@ -44,12 +31,12 @@ Signed-off-by: Samuel Holland <[email protected]>
 -	---help---
 -	---help---
 -	Say Y here to enable support for the gpio pins of the axp PMIC ICs.
 -	Say Y here to enable support for the gpio pins of the axp PMIC ICs.
 -
 -
- config AXP_DISABLE_BOOT_ON_POWERON
- 	bool "Disable device boot on power plug-in"
- 	depends on AXP209_POWER || AXP221_POWER || AXP809_POWER || AXP818_POWER
+ config VIDEO_SUNXI
+ 	bool "Enable graphical uboot console on HDMI, LCD or VGA"
+ 	depends on !MACH_SUN8I_A83T
 --- a/board/sunxi/board.c
 --- a/board/sunxi/board.c
 +++ b/board/sunxi/board.c
 +++ b/board/sunxi/board.c
-@@ -221,10 +221,6 @@ int board_init(void)
+@@ -222,10 +222,6 @@ int board_init(void)
  	}
  	}
  #endif /* !CONFIG_ARM64 && !CONFIG_MACH_SUNIV */
  #endif /* !CONFIG_ARM64 && !CONFIG_MACH_SUNIV */
  
  
@@ -57,9 +44,9 @@ Signed-off-by: Samuel Holland <[email protected]>
 -	if (ret)
 -	if (ret)
 -		return ret;
 -		return ret;
 -
 -
- 	/* strcmp() would look better, but doesn't get optimised away. */
- 	if (CONFIG_SATAPWR[0]) {
- 		satapwr_pin = sunxi_name_to_gpio(CONFIG_SATAPWR);
+ #if CONFIG_IS_ENABLED(DM_I2C)
+ 	/*
+ 	 * Temporary workaround for enabling I2C clocks until proper sunxi DM
 --- a/drivers/gpio/Kconfig
 --- a/drivers/gpio/Kconfig
 +++ b/drivers/gpio/Kconfig
 +++ b/drivers/gpio/Kconfig
 @@ -104,6 +104,14 @@ config ALTERA_PIO
 @@ -104,6 +104,14 @@ config ALTERA_PIO
@@ -87,9 +74,9 @@ Signed-off-by: Samuel Holland <[email protected]>
 -#include <dm/lists.h>
 -#include <dm/lists.h>
 -#include <dm/root.h>
 -#include <dm/root.h>
  #include <errno.h>
  #include <errno.h>
+ #include <sunxi_gpio.h>
  
  
- #define AXP_GPIO_PREFIX			"AXP0-"
-@@ -99,6 +96,11 @@ static const struct dm_gpio_ops axp_gpio
+@@ -100,6 +97,11 @@ static const struct dm_gpio_ops axp_gpio
  static int axp_gpio_probe(struct udevice *dev)
  static int axp_gpio_probe(struct udevice *dev)
  {
  {
  	struct gpio_dev_priv *uc_priv = dev_get_uclass_priv(dev);
  	struct gpio_dev_priv *uc_priv = dev_get_uclass_priv(dev);
@@ -101,7 +88,7 @@ Signed-off-by: Samuel Holland <[email protected]>
  
  
  	/* Tell the uclass how many GPIOs we have */
  	/* Tell the uclass how many GPIOs we have */
  	uc_priv->bank_name = AXP_GPIO_PREFIX;
  	uc_priv->bank_name = AXP_GPIO_PREFIX;
-@@ -107,26 +109,18 @@ static int axp_gpio_probe(struct udevice
+@@ -108,26 +110,18 @@ static int axp_gpio_probe(struct udevice
  	return 0;
  	return 0;
  }
  }
  
  
@@ -137,3 +124,16 @@ Signed-off-by: Samuel Holland <[email protected]>
 -
 -
 -	return 0;
 -	return 0;
 -}
 -}
+--- a/include/sunxi_gpio.h
++++ b/include/sunxi_gpio.h
+@@ -198,10 +198,4 @@ void sunxi_gpio_set_pull(u32 pin, u32 va
+ void sunxi_gpio_set_pull_bank(void *bank_base, int pin_offset, u32 val);
+ int sunxi_name_to_gpio(const char *name);
+ 
+-#if !defined CONFIG_SPL_BUILD && defined CONFIG_AXP_GPIO
+-int axp_gpio_init(void);
+-#else
+-static inline int axp_gpio_init(void) { return 0; }
+-#endif
+-
+ #endif /* _SUNXI_GPIO_H */

+ 7 - 7
package/boot/uboot-d1/patches/0049-gpio-axp-Use-DM_PMIC-functions-for-register-access.patch → package/boot/uboot-d1/patches/0051-gpio-axp-Use-DM_PMIC-functions-for-register-access.patch

@@ -1,7 +1,7 @@
-From 532b81ac600b6a70a1421f86503cb6d8543edf1b Mon Sep 17 00:00:00 2001
+From 45f64fb2e3eb715cbbae64ee4eef209e5af4222d Mon Sep 17 00:00:00 2001
 From: Samuel Holland <[email protected]>
 From: Samuel Holland <[email protected]>
 Date: Tue, 17 Aug 2021 20:01:55 -0500
 Date: Tue, 17 Aug 2021 20:01:55 -0500
-Subject: [PATCH 49/90] gpio: axp: Use DM_PMIC functions for register access
+Subject: [PATCH 51/68] gpio: axp: Use DM_PMIC functions for register access
 
 
 Now that the PMIC driver implements the DM_PMIC uclass, those functions
 Now that the PMIC driver implements the DM_PMIC uclass, those functions
 can be used instead of the platform-specific "pmic_bus" functions.
 can be used instead of the platform-specific "pmic_bus" functions.
@@ -27,10 +27,10 @@ Signed-off-by: Samuel Holland <[email protected]>
  #include <dm.h>
  #include <dm.h>
  #include <errno.h>
  #include <errno.h>
 +#include <power/pmic.h>
 +#include <power/pmic.h>
+ #include <sunxi_gpio.h>
  
  
  #define AXP_GPIO_PREFIX			"AXP0-"
  #define AXP_GPIO_PREFIX			"AXP0-"
- #define AXP_GPIO_COUNT			4
-@@ -40,7 +40,7 @@ static int axp_gpio_direction_input(stru
+@@ -41,7 +41,7 @@ static int axp_gpio_direction_input(stru
  	if (reg == 0)
  	if (reg == 0)
  		return -EINVAL;
  		return -EINVAL;
  
  
@@ -39,7 +39,7 @@ Signed-off-by: Samuel Holland <[email protected]>
  }
  }
  
  
  static int axp_gpio_direction_output(struct udevice *dev, unsigned pin,
  static int axp_gpio_direction_output(struct udevice *dev, unsigned pin,
-@@ -52,26 +52,27 @@ static int axp_gpio_direction_output(str
+@@ -53,26 +53,27 @@ static int axp_gpio_direction_output(str
  	if (reg == 0)
  	if (reg == 0)
  		return -EINVAL;
  		return -EINVAL;
  
  
@@ -73,7 +73,7 @@ Signed-off-by: Samuel Holland <[email protected]>
  }
  }
  
  
  static int axp_gpio_set_value(struct udevice *dev, unsigned pin, int val)
  static int axp_gpio_set_value(struct udevice *dev, unsigned pin, int val)
-@@ -82,8 +83,9 @@ static int axp_gpio_set_value(struct ude
+@@ -83,8 +84,9 @@ static int axp_gpio_set_value(struct ude
  	if (reg == 0)
  	if (reg == 0)
  		return -EINVAL;
  		return -EINVAL;
  
  
@@ -85,7 +85,7 @@ Signed-off-by: Samuel Holland <[email protected]>
  }
  }
  
  
  static const struct dm_gpio_ops axp_gpio_ops = {
  static const struct dm_gpio_ops axp_gpio_ops = {
-@@ -96,11 +98,6 @@ static const struct dm_gpio_ops axp_gpio
+@@ -97,11 +99,6 @@ static const struct dm_gpio_ops axp_gpio
  static int axp_gpio_probe(struct udevice *dev)
  static int axp_gpio_probe(struct udevice *dev)
  {
  {
  	struct gpio_dev_priv *uc_priv = dev_get_uclass_priv(dev);
  	struct gpio_dev_priv *uc_priv = dev_get_uclass_priv(dev);

+ 5 - 4
package/boot/uboot-d1/patches/0050-gpio-axp-Select-variant-from-compatible-at-runtime.patch → package/boot/uboot-d1/patches/0052-gpio-axp-Select-variant-from-compatible-at-runtime.patch

@@ -1,7 +1,7 @@
-From 697eb56ed8c9b3814ddbd87ae0c6e749ccafc9e3 Mon Sep 17 00:00:00 2001
+From eb5333ba3d1529c76372566584ad5bf1052f95c3 Mon Sep 17 00:00:00 2001
 From: Samuel Holland <[email protected]>
 From: Samuel Holland <[email protected]>
 Date: Sat, 28 Aug 2021 00:27:19 -0500
 Date: Sat, 28 Aug 2021 00:27:19 -0500
-Subject: [PATCH 50/90] gpio: axp: Select variant from compatible at runtime
+Subject: [PATCH 52/68] gpio: axp: Select variant from compatible at runtime
 
 
 There are three major variants of the AXP PMIC GPIO functionality (plus
 There are three major variants of the AXP PMIC GPIO functionality (plus
 PMICs with no GPIOs at all). Except for GPIO3 on the AXP209, which uses
 PMICs with no GPIOs at all). Except for GPIO3 on the AXP209, which uses
@@ -35,7 +35,7 @@ Signed-off-by: Samuel Holland <[email protected]>
  	  X-Powers AXP152, AXP2xx, and AXP8xx PMICs.
  	  X-Powers AXP152, AXP2xx, and AXP8xx PMICs.
 --- a/drivers/gpio/axp_gpio.c
 --- a/drivers/gpio/axp_gpio.c
 +++ b/drivers/gpio/axp_gpio.c
 +++ b/drivers/gpio/axp_gpio.c
-@@ -7,110 +7,117 @@
+@@ -7,8 +7,8 @@
  
  
  #include <common.h>
  #include <common.h>
  #include <asm/gpio.h>
  #include <asm/gpio.h>
@@ -44,7 +44,8 @@ Signed-off-by: Samuel Holland <[email protected]>
 +#include <dm/device-internal.h>
 +#include <dm/device-internal.h>
  #include <errno.h>
  #include <errno.h>
  #include <power/pmic.h>
  #include <power/pmic.h>
- 
+ #include <sunxi_gpio.h>
+@@ -16,102 +16,109 @@
  #define AXP_GPIO_PREFIX			"AXP0-"
  #define AXP_GPIO_PREFIX			"AXP0-"
  #define AXP_GPIO_COUNT			4
  #define AXP_GPIO_COUNT			4
  
  

+ 4 - 4
package/boot/uboot-d1/patches/0051-gpio-axp-Add-support-for-getting-the-pin-function.patch → package/boot/uboot-d1/patches/0053-gpio-axp-Add-support-for-getting-the-pin-function.patch

@@ -1,7 +1,7 @@
-From 37e19d9b8a23c88413dd845dbb3dd58dd3636a6d Mon Sep 17 00:00:00 2001
+From 071d04bb86626c56a094430e25b079126a7c4d77 Mon Sep 17 00:00:00 2001
 From: Samuel Holland <[email protected]>
 From: Samuel Holland <[email protected]>
 Date: Sat, 28 Aug 2021 00:36:33 -0500
 Date: Sat, 28 Aug 2021 00:36:33 -0500
-Subject: [PATCH 51/90] gpio: axp: Add support for getting the pin function
+Subject: [PATCH 53/68] gpio: axp: Add support for getting the pin function
 
 
 Implement the .get_function operation, so the gpio command can report
 Implement the .get_function operation, so the gpio command can report
 the current function. Since the GPIOF_FUNC (versus GPIOF_UNUSED) mux
 the current function. Since the GPIOF_FUNC (versus GPIOF_UNUSED) mux
@@ -14,7 +14,7 @@ Signed-off-by: Samuel Holland <[email protected]>
 
 
 --- a/drivers/gpio/axp_gpio.c
 --- a/drivers/gpio/axp_gpio.c
 +++ b/drivers/gpio/axp_gpio.c
 +++ b/drivers/gpio/axp_gpio.c
-@@ -39,6 +39,24 @@ static int axp_gpio_get_value(struct ude
+@@ -40,6 +40,24 @@ static int axp_gpio_get_value(struct ude
  	return !!(ret & BIT(desc->status_offset + pin));
  	return !!(ret & BIT(desc->status_offset + pin));
  }
  }
  
  
@@ -39,7 +39,7 @@ Signed-off-by: Samuel Holland <[email protected]>
  static int axp_gpio_set_flags(struct udevice *dev, unsigned pin, ulong flags)
  static int axp_gpio_set_flags(struct udevice *dev, unsigned pin, ulong flags)
  {
  {
  	const struct axp_gpio_desc *desc = dev_get_priv(dev);
  	const struct axp_gpio_desc *desc = dev_get_priv(dev);
-@@ -60,6 +78,7 @@ static int axp_gpio_set_flags(struct ude
+@@ -61,6 +79,7 @@ static int axp_gpio_set_flags(struct ude
  
  
  static const struct dm_gpio_ops axp_gpio_ops = {
  static const struct dm_gpio_ops axp_gpio_ops = {
  	.get_value		= axp_gpio_get_value,
  	.get_value		= axp_gpio_get_value,

+ 5 - 5
package/boot/uboot-d1/patches/0052-gpio-axp-Add-pull-down-support-for-AXP22x-AXP8xx-var.patch → package/boot/uboot-d1/patches/0054-gpio-axp-Add-pull-down-support-for-AXP22x-AXP8xx-var.patch

@@ -1,7 +1,7 @@
-From 4be9f9082b0a2ac2626ae20b7e07006139827442 Mon Sep 17 00:00:00 2001
+From 0c91ce4c05f9ad477b0b95d8798475ead2cbf0b7 Mon Sep 17 00:00:00 2001
 From: Samuel Holland <[email protected]>
 From: Samuel Holland <[email protected]>
 Date: Sat, 28 Aug 2021 00:34:54 -0500
 Date: Sat, 28 Aug 2021 00:34:54 -0500
-Subject: [PATCH 52/90] gpio: axp: Add pull-down support for AXP22x/AXP8xx
+Subject: [PATCH 54/68] gpio: axp: Add pull-down support for AXP22x/AXP8xx
  variant
  variant
 
 
 The AXP221 and newer PMICs support a pull-down function on their GPIOs.
 The AXP221 and newer PMICs support a pull-down function on their GPIOs.
@@ -14,7 +14,7 @@ Signed-off-by: Samuel Holland <[email protected]>
 
 
 --- a/drivers/gpio/axp_gpio.c
 --- a/drivers/gpio/axp_gpio.c
 +++ b/drivers/gpio/axp_gpio.c
 +++ b/drivers/gpio/axp_gpio.c
-@@ -24,6 +24,7 @@ struct axp_gpio_desc {
+@@ -25,6 +25,7 @@ struct axp_gpio_desc {
  	u8		npins;
  	u8		npins;
  	u8		status_reg;
  	u8		status_reg;
  	u8		status_offset;
  	u8		status_offset;
@@ -22,7 +22,7 @@ Signed-off-by: Samuel Holland <[email protected]>
  	u8		input_mux;
  	u8		input_mux;
  };
  };
  
  
-@@ -60,11 +61,22 @@ static int axp_gpio_get_function(struct
+@@ -61,11 +62,22 @@ static int axp_gpio_get_function(struct
  static int axp_gpio_set_flags(struct udevice *dev, unsigned pin, ulong flags)
  static int axp_gpio_set_flags(struct udevice *dev, unsigned pin, ulong flags)
  {
  {
  	const struct axp_gpio_desc *desc = dev_get_priv(dev);
  	const struct axp_gpio_desc *desc = dev_get_priv(dev);
@@ -46,7 +46,7 @@ Signed-off-by: Samuel Holland <[email protected]>
  	if (flags & GPIOD_IS_IN)
  	if (flags & GPIOD_IS_IN)
  		mux = desc->input_mux;
  		mux = desc->input_mux;
  	else if (flags & GPIOD_IS_OUT_ACTIVE)
  	else if (flags & GPIOD_IS_OUT_ACTIVE)
-@@ -129,6 +141,7 @@ static const struct axp_gpio_desc axp221
+@@ -130,6 +142,7 @@ static const struct axp_gpio_desc axp221
  	.pins		= axp221_gpio_pins,
  	.pins		= axp221_gpio_pins,
  	.npins		= ARRAY_SIZE(axp221_gpio_pins),
  	.npins		= ARRAY_SIZE(axp221_gpio_pins),
  	.status_reg	= 0x94,
  	.status_reg	= 0x94,

+ 3 - 3
package/boot/uboot-d1/patches/0053-gpio-axp-Report-the-correct-value-for-outputs.patch → package/boot/uboot-d1/patches/0055-gpio-axp-Report-the-correct-value-for-outputs.patch

@@ -1,7 +1,7 @@
-From 52c172782d659750b447572281cd11835d1edf58 Mon Sep 17 00:00:00 2001
+From 0ffa433ea68440c3d54e5cf8cb2de58c60a8f85b Mon Sep 17 00:00:00 2001
 From: Samuel Holland <[email protected]>
 From: Samuel Holland <[email protected]>
 Date: Sun, 31 Jul 2022 18:19:39 -0500
 Date: Sun, 31 Jul 2022 18:19:39 -0500
-Subject: [PATCH 53/90] gpio: axp: Report the correct value for outputs
+Subject: [PATCH 55/68] gpio: axp: Report the correct value for outputs
 
 
 Signed-off-by: Samuel Holland <[email protected]>
 Signed-off-by: Samuel Holland <[email protected]>
 ---
 ---
@@ -10,7 +10,7 @@ Signed-off-by: Samuel Holland <[email protected]>
 
 
 --- a/drivers/gpio/axp_gpio.c
 --- a/drivers/gpio/axp_gpio.c
 +++ b/drivers/gpio/axp_gpio.c
 +++ b/drivers/gpio/axp_gpio.c
-@@ -33,6 +33,15 @@ static int axp_gpio_get_value(struct ude
+@@ -34,6 +34,15 @@ static int axp_gpio_get_value(struct ude
  	const struct axp_gpio_desc *desc = dev_get_priv(dev);
  	const struct axp_gpio_desc *desc = dev_get_priv(dev);
  	int ret;
  	int ret;
  
  

+ 19 - 0
package/boot/uboot-d1/patches/0056-fixup-sunxi-Globally-enable-SUPPORT_SPL.patch

@@ -0,0 +1,19 @@
+From ba648449b01373768ecbf16b1610fcc071c4099c Mon Sep 17 00:00:00 2001
+From: Samuel Holland <[email protected]>
+Date: Tue, 31 Oct 2023 02:30:52 -0500
+Subject: [PATCH 56/68] fixup! sunxi: Globally enable SUPPORT_SPL
+
+---
+ arch/arm/mach-sunxi/Kconfig | 1 -
+ 1 file changed, 1 deletion(-)
+
+--- a/arch/arm/mach-sunxi/Kconfig
++++ b/arch/arm/mach-sunxi/Kconfig
+@@ -354,7 +354,6 @@ config MACH_SUN8I_R528
+ 	select SUNXI_GEN_NCAT2
+ 	select SUNXI_NEW_PINCTRL
+ 	select MMC_SUNXI_HAS_NEW_MODE
+-	select SUPPORT_SPL
+ 	select DRAM_SUN20I_D1
+ 
+ config MACH_SUN8I_V3S

+ 46 - 0
package/boot/uboot-d1/patches/0057-sunxi-Move-SUNXI_GEN_NCAT2-to-the-board-Kconfig.patch

@@ -0,0 +1,46 @@
+From 260b52e2ca14c6fe87748bcbe260924e0b6e448e Mon Sep 17 00:00:00 2001
+From: Samuel Holland <[email protected]>
+Date: Tue, 31 Oct 2023 02:31:47 -0500
+Subject: [PATCH 57/68] sunxi: Move SUNXI_GEN_NCAT2 to the board Kconfig
+
+Generation options mostly deal with peripherals, not the CPU
+architecture.
+
+Signed-off-by: Samuel Holland <[email protected]>
+---
+ arch/arm/mach-sunxi/Kconfig | 8 --------
+ board/sunxi/Kconfig         | 6 ++++++
+ 2 files changed, 6 insertions(+), 8 deletions(-)
+
+--- a/arch/arm/mach-sunxi/Kconfig
++++ b/arch/arm/mach-sunxi/Kconfig
+@@ -191,14 +191,6 @@ config SUN50I_GEN_H6
+ 	Select this for sunxi SoCs which have H6 like peripherals, clocks
+ 	and memory map.
+ 
+-config SUNXI_GEN_NCAT2
+-	bool
+-	select MMC_SUNXI_HAS_NEW_MODE
+-	select SUPPORT_SPL
+-	---help---
+-	Select this for sunxi SoCs which have D1 like peripherals, clocks
+-	and memory map.
+-
+ config SUNXI_DRAM_DW
+ 	bool
+ 	---help---
+--- a/board/sunxi/Kconfig
++++ b/board/sunxi/Kconfig
+@@ -80,6 +80,12 @@ config SPL_TEXT_BASE
+ 	default 0x20060 if SUN50I_GEN_H6 || SUNXI_GEN_NCAT2
+ 	default 0x00060
+ 
++config SUNXI_GEN_NCAT2
++	bool
++	help
++	  Select this for sunxi SoCs which have D1-like peripherals,
++	  clocks and memory map.
++
+ config SUNXI_MINIMUM_DRAM_MB
+ 	int
+ 	default 32 if MACH_SUNIV

+ 64 - 58
package/boot/uboot-d1/patches/0079-riscv-Add-CONFIG_TARGET_SUN20I_D1.patch → package/boot/uboot-d1/patches/0058-riscv-Add-CONFIG_TARGET_SUN20I.patch

@@ -1,40 +1,44 @@
-From 6b0c83a5c7b9189fb1c5cf56145ec4882d9e5588 Mon Sep 17 00:00:00 2001
-From: Zoltan HERPAI <[email protected]>
-Date: Tue, 6 Jun 2023 18:13:34 +0000
-Subject: [PATCH 79/90] riscv: Add CONFIG_TARGET_SUN20I_D1
+From 08bf21e4b04621152ae91c3ac622030a4fa8764c Mon Sep 17 00:00:00 2001
+From: Samuel Holland <[email protected]>
+Date: Sat, 6 Aug 2022 00:46:21 -0500
+Subject: [PATCH 58/68] riscv: Add CONFIG_TARGET_SUN20I
+
+This target is used for Allwinner's sun20i series of RISC-V SoCs,
+starting with the Allwinner D1 and D1s.
 
 
 Signed-off-by: Samuel Holland <[email protected]>
 Signed-off-by: Samuel Holland <[email protected]>
-Signed-off-by: Zoltan HERPAI <[email protected]>
 ---
 ---
- arch/riscv/Kconfig        |  5 +++++
- board/sunxi/Kconfig       | 30 +++++++++++++++++++++++++++---
- common/spl/Kconfig        |  1 +
- drivers/clk/sunxi/Kconfig |  1 +
- include/configs/sun20i.h  | 11 +++++++++++
- 5 files changed, 45 insertions(+), 3 deletions(-)
+ arch/riscv/Kconfig            |  9 +++++++++
+ board/sunxi/Kconfig           | 24 +++++++++++++++++++++++-
+ common/spl/Kconfig            |  1 +
+ drivers/clk/sunxi/Kconfig     |  2 +-
+ drivers/pinctrl/sunxi/Kconfig | 10 +++++-----
+ include/configs/sun20i.h      | 11 +++++++++++
+ 6 files changed, 50 insertions(+), 7 deletions(-)
  create mode 100644 include/configs/sun20i.h
  create mode 100644 include/configs/sun20i.h
 
 
 --- a/arch/riscv/Kconfig
 --- a/arch/riscv/Kconfig
 +++ b/arch/riscv/Kconfig
 +++ b/arch/riscv/Kconfig
-@@ -31,6 +31,11 @@ config TARGET_SIPEED_MAIX
+@@ -31,6 +31,15 @@ config TARGET_SIPEED_MAIX
  	bool "Support Sipeed Maix Board"
  	bool "Support Sipeed Maix Board"
  	select SYS_CACHE_SHIFT_6
  	select SYS_CACHE_SHIFT_6
  
  
 +config TARGET_SUN20I_D1
 +config TARGET_SUN20I_D1
 +	bool "Support Allwinner D1 Boards"
 +	bool "Support Allwinner D1 Boards"
 +	select BOARD_SUNXI
 +	select BOARD_SUNXI
-+	select SYS_CACHE_SHIFT_6
++	select GENERIC_RISCV
++	select MMC_SUNXI_HAS_NEW_MODE
++	select SUNXI_GEN_NCAT2
++	select SUNXI_NEW_PINCTRL
++	select THEAD_C906
 +
 +
- endchoice
- 
- config SYS_ICACHE_OFF
+ config TARGET_STARFIVE_VISIONFIVE2
+ 	bool "Support StarFive VisionFive2 Board"
+ 	select BOARD_LATE_INIT
 --- a/board/sunxi/Kconfig
 --- a/board/sunxi/Kconfig
 +++ b/board/sunxi/Kconfig
 +++ b/board/sunxi/Kconfig
-@@ -13,8 +13,18 @@ config BOARD_SUNXI
- 	select DM_SERIAL if SERIAL
- 	select DM_SPI if SPI
+@@ -14,6 +14,15 @@ config BOARD_SUNXI
  	select DM_SPI_FLASH if SPI
  	select DM_SPI_FLASH if SPI
-+	select GENERIC_RISCV if RISCV
  	select OF_BOARD_SETUP
  	select OF_BOARD_SETUP
  	select PINCTRL
  	select PINCTRL
 +	select RAM if SPL_DM
 +	select RAM if SPL_DM
@@ -49,22 +53,15 @@ Signed-off-by: Zoltan HERPAI <[email protected]>
  	select SPL_SEPARATE_BSS if SPL
  	select SPL_SEPARATE_BSS if SPL
  	select SUPPORT_SPL
  	select SUPPORT_SPL
  	select SYS_RELOC_GD_ENV_ADDR
  	select SYS_RELOC_GD_ENV_ADDR
-@@ -28,12 +38,14 @@ config BOARD_SUNXI
- 	imply DISTRO_DEFAULTS
+@@ -29,6 +38,7 @@ config BOARD_SUNXI
+ 	imply DM_REGULATOR_FIXED
  	imply FAT_WRITE
  	imply FAT_WRITE
  	imply FIT
  	imply FIT
 +	imply MMC
 +	imply MMC
  	imply OF_LIBFDT_OVERLAY
  	imply OF_LIBFDT_OVERLAY
  	imply PRE_CONSOLE_BUFFER
  	imply PRE_CONSOLE_BUFFER
  	imply SPL
  	imply SPL
- 	imply SPL_GPIO
- 	imply SPL_LIBCOMMON_SUPPORT
- 	imply SPL_LIBGENERIC_SUPPORT
-+	imply SPL_LOAD_FIT
- 	imply SPL_MMC if MMC
- 	imply SPL_POWER
- 	imply SPL_SERIAL
-@@ -41,6 +53,7 @@ config BOARD_SUNXI
+@@ -43,6 +53,7 @@ config BOARD_SUNXI
  	imply SYS_I2C_MVTWSI
  	imply SYS_I2C_MVTWSI
  	imply SYS_NS16550
  	imply SYS_NS16550
  	imply SYSRESET
  	imply SYSRESET
@@ -72,7 +69,7 @@ Signed-off-by: Zoltan HERPAI <[email protected]>
  	imply SYSRESET_WATCHDOG
  	imply SYSRESET_WATCHDOG
  	imply SYSRESET_WATCHDOG_AUTO
  	imply SYSRESET_WATCHDOG_AUTO
  	imply USB_EHCI_GENERIC
  	imply USB_EHCI_GENERIC
-@@ -67,6 +80,12 @@ config SPL_BSS_START_ADDR
+@@ -69,6 +80,12 @@ config SPL_BSS_START_ADDR
  	default 0x4ff80000 if SUNXI_MINIMUM_DRAM_MB >= 256
  	default 0x4ff80000 if SUNXI_MINIMUM_DRAM_MB >= 256
  	default 0x43f80000 if SUNXI_MINIMUM_DRAM_MB >= 64
  	default 0x43f80000 if SUNXI_MINIMUM_DRAM_MB >= 64
  
  
@@ -85,14 +82,7 @@ Signed-off-by: Zoltan HERPAI <[email protected]>
  config SPL_STACK_R_ADDR
  config SPL_STACK_R_ADDR
  	default 0x81e00000 if MACH_SUNIV
  	default 0x81e00000 if MACH_SUNIV
  	default 0x2fe00000 if MACH_SUN9I
  	default 0x2fe00000 if MACH_SUN9I
-@@ -75,13 +94,13 @@ config SPL_STACK_R_ADDR
- 
- config SPL_TEXT_BASE
- 	default 0x10060 if MACH_SUN9I || MACH_SUN50I || MACH_SUN50I_H5
--	default 0x20060 if SUN50I_GEN_H6
-+	default 0x20060 if SUN50I_GEN_H6 || TARGET_SUN20I_D1
- 	default 0x00060
- 
+@@ -89,7 +106,7 @@ config SUNXI_GEN_NCAT2
  config SUNXI_MINIMUM_DRAM_MB
  config SUNXI_MINIMUM_DRAM_MB
  	int
  	int
  	default 32 if MACH_SUNIV
  	default 32 if MACH_SUNIV
@@ -101,26 +91,17 @@ Signed-off-by: Zoltan HERPAI <[email protected]>
  	default 256
  	default 256
  	help
  	help
  	  Minimum DRAM size expected on the board. Traditionally we
  	  Minimum DRAM size expected on the board. Traditionally we
-@@ -94,7 +113,7 @@ config SUNXI_MINIMUM_DRAM_MB
- config SUNXI_SRAM_ADDRESS
- 	hex
- 	default 0x10000 if MACH_SUN9I || MACH_SUN50I || MACH_SUN50I_H5
--	default 0x20000 if SUN50I_GEN_H6
-+	default 0x20000 if SUN50I_GEN_H6 || TARGET_SUN20I_D1
- 	default 0x0
- 	help
- 	  Older Allwinner SoCs have their boot mask ROM mapped just
-@@ -113,6 +132,7 @@ config SYS_CLK_FREQ
- 	default  912000000 if MACH_SUN7I
+@@ -122,6 +139,7 @@ config SYS_CLK_FREQ
  	default 1008000000 if MACH_SUN8I
  	default 1008000000 if MACH_SUN8I
+ 	default 1008000000 if MACH_SUN8I_R528
  	default 1008000000 if MACH_SUN9I
  	default 1008000000 if MACH_SUN9I
 +	default 1008000000 if TARGET_SUN20I_D1
 +	default 1008000000 if TARGET_SUN20I_D1
  	default  816000000 if MACH_SUN50I || MACH_SUN50I_H5
  	default  816000000 if MACH_SUN50I || MACH_SUN50I_H5
  	default  888000000 if MACH_SUN50I_H6
  	default  888000000 if MACH_SUN50I_H6
  	default 1008000000 if MACH_SUN50I_H616
  	default 1008000000 if MACH_SUN50I_H616
-@@ -125,10 +145,14 @@ config SYS_CONFIG_NAME
- 	default "sun7i"  if MACH_SUN7I
+@@ -135,10 +153,14 @@ config SYS_CONFIG_NAME
  	default "sun8i"  if MACH_SUN8I
  	default "sun8i"  if MACH_SUN8I
+ 	default "sun8i"  if MACH_SUN8I_R528
  	default "sun9i"  if MACH_SUN9I
  	default "sun9i"  if MACH_SUN9I
 +	default "sun20i" if TARGET_SUN20I_D1
 +	default "sun20i" if TARGET_SUN20I_D1
  	default "sun50i" if MACH_SUN50I
  	default "sun50i" if MACH_SUN50I
@@ -128,31 +109,56 @@ Signed-off-by: Zoltan HERPAI <[email protected]>
  	default "sun50i" if MACH_SUN50I_H616
  	default "sun50i" if MACH_SUN50I_H616
  
  
 +config SYS_CPU
 +config SYS_CPU
-+	default "generic" if TARGET_SUN20I_D1
++	default "thead" if TARGET_SUN20I_D1
 +
 +
  config SYS_LOAD_ADDR
  config SYS_LOAD_ADDR
  	default 0x81000000 if MACH_SUNIV
  	default 0x81000000 if MACH_SUNIV
  	default 0x22000000 if MACH_SUN9I
  	default 0x22000000 if MACH_SUN9I
 --- a/common/spl/Kconfig
 --- a/common/spl/Kconfig
 +++ b/common/spl/Kconfig
 +++ b/common/spl/Kconfig
-@@ -78,6 +78,7 @@ config SPL_MAX_SIZE
+@@ -77,6 +77,7 @@ config SPL_SIZE_LIMIT_PROVIDE_STACK
+ config SPL_MAX_SIZE
  	hex "Maximum size of the SPL image, excluding BSS"
  	hex "Maximum size of the SPL image, excluding BSS"
- 	default 0x37fa0 if MACH_SUN50I_H616
  	default 0x30000 if ARCH_MX6 && MX6_OCRAM_256KB
  	default 0x30000 if ARCH_MX6 && MX6_OCRAM_256KB
 +	default 0x27fa0 if TARGET_SUN20I_D1
 +	default 0x27fa0 if TARGET_SUN20I_D1
- 	default 0x25fa0 if MACH_SUN50I_H6
  	default 0x1b000 if AM33XX && !TI_SECURE_DEVICE
  	default 0x1b000 if AM33XX && !TI_SECURE_DEVICE
  	default 0x10000 if ARCH_MX6 && !MX6_OCRAM_256KB
  	default 0x10000 if ARCH_MX6 && !MX6_OCRAM_256KB
+ 	default 0x7fa0 if SUNXI_SRAM_ADDRESS = 0x10000
 --- a/drivers/clk/sunxi/Kconfig
 --- a/drivers/clk/sunxi/Kconfig
 +++ b/drivers/clk/sunxi/Kconfig
 +++ b/drivers/clk/sunxi/Kconfig
-@@ -98,6 +98,7 @@ config CLK_SUN8I_H3
+@@ -89,7 +89,7 @@ config CLK_SUN8I_H3
  
  
  config CLK_SUN20I_D1
  config CLK_SUN20I_D1
  	bool "Clock driver for Allwinner D1"
  	bool "Clock driver for Allwinner D1"
-+	default TARGET_SUN20I_D1
+-	default MACH_SUN8I_R528
++	default MACH_SUN8I_R528 || TARGET_SUN20I_D1
  	help
  	help
  	  This enables common clock driver support for platforms based
  	  This enables common clock driver support for platforms based
  	  on Allwinner D1 SoC.
  	  on Allwinner D1 SoC.
+--- a/drivers/pinctrl/sunxi/Kconfig
++++ b/drivers/pinctrl/sunxi/Kconfig
+@@ -89,6 +89,11 @@ config PINCTRL_SUN9I_A80_R
+ 	default MACH_SUN9I
+ 	select PINCTRL_SUNXI
+ 
++config PINCTRL_SUN20I_D1
++	bool "Support for the Allwinner D1/R528 PIO"
++	default MACH_SUN8I_R528 || TARGET_SUN20I_D1
++	select PINCTRL_SUNXI
++
+ config PINCTRL_SUN50I_A64
+ 	bool "Support for the Allwinner A64 PIO"
+ 	default MACH_SUN50I
+@@ -124,9 +129,4 @@ config PINCTRL_SUN50I_H616_R
+ 	default MACH_SUN50I_H616
+ 	select PINCTRL_SUNXI
+ 
+-config PINCTRL_SUN20I_D1
+-	bool "Support for the Allwinner D1/R528 PIO"
+-	default MACH_SUN8I_R528
+-	select PINCTRL_SUNXI
+-
+ endif
 --- /dev/null
 --- /dev/null
 +++ b/include/configs/sun20i.h
 +++ b/include/configs/sun20i.h
 @@ -0,0 +1,11 @@
 @@ -0,0 +1,11 @@

+ 1374 - 0
package/boot/uboot-d1/patches/0059-riscv-dts-Add-Allwinner-D1-devicetrees.patch

@@ -0,0 +1,1374 @@
+From cf5606cc190e1335c87722d6175818349968816f Mon Sep 17 00:00:00 2001
+From: Samuel Holland <[email protected]>
+Date: Thu, 4 Aug 2022 23:35:09 -0500
+Subject: [PATCH 59/68] riscv: dts: Add Allwinner D1 devicetrees
+
+This includes the U-boot overlay needed for binman and SPL.
+
+Signed-off-by: Samuel Holland <[email protected]>
+---
+ arch/riscv/dts/Makefile                       |   9 +
+ arch/riscv/dts/sun20i-common-regulators.dtsi  |  28 +++
+ .../dts/sun20i-d1-dongshan-nezha-stu.dts      | 117 +++++++++
+ .../dts/sun20i-d1-lichee-rv-86-panel-480p.dts |  29 +++
+ .../dts/sun20i-d1-lichee-rv-86-panel-720p.dts |  10 +
+ .../dts/sun20i-d1-lichee-rv-86-panel.dtsi     | 119 +++++++++
+ arch/riscv/dts/sun20i-d1-lichee-rv-dock.dts   |  97 +++++++
+ arch/riscv/dts/sun20i-d1-lichee-rv.dts        |  87 +++++++
+ arch/riscv/dts/sun20i-d1-mangopi-mq-pro.dts   | 142 +++++++++++
+ arch/riscv/dts/sun20i-d1-nezha.dts            | 238 ++++++++++++++++++
+ arch/riscv/dts/sun20i-d1.dtsi                 |  66 +++++
+ arch/riscv/dts/sun20i-d1s-mangopi-mq.dts      | 128 ++++++++++
+ arch/riscv/dts/sun20i-d1s.dtsi                | 117 +++++++++
+ arch/riscv/dts/sunxi-d1-t113.dtsi             |   2 +-
+ arch/riscv/dts/sunxi-d1s-t113.dtsi            |   2 +-
+ arch/riscv/dts/sunxi-u-boot.dtsi              |  81 ++++++
+ 16 files changed, 1270 insertions(+), 2 deletions(-)
+ create mode 100644 arch/riscv/dts/sun20i-common-regulators.dtsi
+ create mode 100644 arch/riscv/dts/sun20i-d1-dongshan-nezha-stu.dts
+ create mode 100644 arch/riscv/dts/sun20i-d1-lichee-rv-86-panel-480p.dts
+ create mode 100644 arch/riscv/dts/sun20i-d1-lichee-rv-86-panel-720p.dts
+ create mode 100644 arch/riscv/dts/sun20i-d1-lichee-rv-86-panel.dtsi
+ create mode 100644 arch/riscv/dts/sun20i-d1-lichee-rv-dock.dts
+ create mode 100644 arch/riscv/dts/sun20i-d1-lichee-rv.dts
+ create mode 100644 arch/riscv/dts/sun20i-d1-mangopi-mq-pro.dts
+ create mode 100644 arch/riscv/dts/sun20i-d1-nezha.dts
+ create mode 100644 arch/riscv/dts/sun20i-d1.dtsi
+ create mode 100644 arch/riscv/dts/sun20i-d1s-mangopi-mq.dts
+ create mode 100644 arch/riscv/dts/sun20i-d1s.dtsi
+ create mode 100644 arch/riscv/dts/sunxi-u-boot.dtsi
+
+--- a/arch/riscv/dts/Makefile
++++ b/arch/riscv/dts/Makefile
+@@ -7,8 +7,17 @@ dtb-$(CONFIG_TARGET_OPENPITON_RISCV64) +
+ dtb-$(CONFIG_TARGET_SIFIVE_UNLEASHED) += hifive-unleashed-a00.dtb
+ dtb-$(CONFIG_TARGET_SIFIVE_UNMATCHED) += hifive-unmatched-a00.dtb
+ dtb-$(CONFIG_TARGET_SIPEED_MAIX) += k210-maix-bit.dtb
++dtb-$(CONFIG_TARGET_SUN20I_D1) += sun20i-d1-dongshan-nezha-stu.dtb
++dtb-$(CONFIG_TARGET_SUN20I_D1) += sun20i-d1-lichee-rv-86-panel-480p.dtb
++dtb-$(CONFIG_TARGET_SUN20I_D1) += sun20i-d1-lichee-rv-86-panel-720p.dtb
++dtb-$(CONFIG_TARGET_SUN20I_D1) += sun20i-d1-lichee-rv-dock.dtb
++dtb-$(CONFIG_TARGET_SUN20I_D1) += sun20i-d1-lichee-rv.dtb
++dtb-$(CONFIG_TARGET_SUN20I_D1) += sun20i-d1-mangopi-mq-pro.dtb
++dtb-$(CONFIG_TARGET_SUN20I_D1) += sun20i-d1-nezha.dtb
++dtb-$(CONFIG_TARGET_SUN20I_D1) += sun20i-d1s-mangopi-mq.dtb
+ dtb-$(CONFIG_TARGET_STARFIVE_VISIONFIVE2) += jh7110-starfive-visionfive-2.dtb
+ dtb-$(CONFIG_TARGET_TH1520_LPI4A) += th1520-lichee-pi-4a.dtb
++
+ include $(srctree)/scripts/Makefile.dts
+ 
+ targets += $(dtb-y)
+--- /dev/null
++++ b/arch/riscv/dts/sun20i-common-regulators.dtsi
+@@ -0,0 +1,28 @@
++// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
++// Copyright (C) 2021-2022 Samuel Holland <[email protected]>
++
++/ {
++	reg_vcc: vcc {
++		compatible = "regulator-fixed";
++		regulator-name = "vcc";
++		regulator-min-microvolt = <5000000>;
++		regulator-max-microvolt = <5000000>;
++	};
++
++	reg_vcc_3v3: vcc-3v3 {
++		compatible = "regulator-fixed";
++		regulator-name = "vcc-3v3";
++		regulator-min-microvolt = <3300000>;
++		regulator-max-microvolt = <3300000>;
++		vin-supply = <&reg_vcc>;
++	};
++};
++
++&pio {
++	vcc-pb-supply = <&reg_vcc_3v3>;
++	vcc-pc-supply = <&reg_vcc_3v3>;
++	vcc-pd-supply = <&reg_vcc_3v3>;
++	vcc-pe-supply = <&reg_vcc_3v3>;
++	vcc-pf-supply = <&reg_vcc_3v3>;
++	vcc-pg-supply = <&reg_vcc_3v3>;
++};
+--- /dev/null
++++ b/arch/riscv/dts/sun20i-d1-dongshan-nezha-stu.dts
+@@ -0,0 +1,117 @@
++// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
++// Copyright (C) 2022 Samuel Holland <[email protected]>
++
++#include <dt-bindings/gpio/gpio.h>
++#include <dt-bindings/leds/common.h>
++
++/dts-v1/;
++
++#include "sun20i-d1.dtsi"
++#include "sun20i-common-regulators.dtsi"
++
++/ {
++	model = "Dongshan Nezha STU";
++	compatible = "100ask,dongshan-nezha-stu", "allwinner,sun20i-d1";
++
++	aliases {
++		ethernet0 = &emac;
++		serial0 = &uart0;
++	};
++
++	chosen {
++		stdout-path = "serial0:115200n8";
++	};
++
++	leds {
++		compatible = "gpio-leds";
++
++		led-0 {
++			color = <LED_COLOR_ID_GREEN>;
++			function = LED_FUNCTION_STATUS;
++			gpios = <&pio 2 1 GPIO_ACTIVE_HIGH>; /* PC1 */
++		};
++	};
++
++	reg_usbvbus: usbvbus {
++		compatible = "regulator-fixed";
++		regulator-name = "usbvbus";
++		regulator-min-microvolt = <5000000>;
++		regulator-max-microvolt = <5000000>;
++		gpio = <&pio 3 19 GPIO_ACTIVE_HIGH>; /* PD19 */
++		enable-active-high;
++		vin-supply = <&reg_vcc>;
++	};
++
++	/*
++	 * This regulator is PWM-controlled, but the PWM controller is not
++	 * yet supported, so fix the regulator to its default voltage.
++	 */
++	reg_vdd_cpu: vdd-cpu {
++		compatible = "regulator-fixed";
++		regulator-name = "vdd-cpu";
++		regulator-min-microvolt = <1100000>;
++		regulator-max-microvolt = <1100000>;
++		vin-supply = <&reg_vcc>;
++	};
++};
++
++&cpu0 {
++	cpu-supply = <&reg_vdd_cpu>;
++};
++
++&dcxo {
++	clock-frequency = <24000000>;
++};
++
++&ehci0 {
++	status = "okay";
++};
++
++&emac {
++	pinctrl-0 = <&rgmii_pe_pins>;
++	pinctrl-names = "default";
++	phy-handle = <&ext_rgmii_phy>;
++	phy-mode = "rgmii-id";
++	phy-supply = <&reg_vcc_3v3>;
++	status = "okay";
++};
++
++&mdio {
++	ext_rgmii_phy: ethernet-phy@1 {
++		compatible = "ethernet-phy-ieee802.3-c22";
++		reg = <1>;
++	};
++};
++
++&mmc0 {
++	broken-cd;
++	bus-width = <4>;
++	disable-wp;
++	vmmc-supply = <&reg_vcc_3v3>;
++	vqmmc-supply = <&reg_vcc_3v3>;
++	pinctrl-0 = <&mmc0_pins>;
++	pinctrl-names = "default";
++	status = "okay";
++};
++
++&ohci0 {
++	status = "okay";
++};
++
++&uart0 {
++	pinctrl-0 = <&uart0_pb8_pins>;
++	pinctrl-names = "default";
++	status = "okay";
++};
++
++&usb_otg {
++	dr_mode = "otg";
++	status = "okay";
++};
++
++&usbphy {
++	usb0_id_det-gpios = <&pio 3 21 GPIO_ACTIVE_HIGH>; /* PD21 */
++	usb0_vbus_det-gpios = <&pio 3 20 GPIO_ACTIVE_HIGH>; /* PD20 */
++	usb0_vbus-supply = <&reg_usbvbus>;
++	status = "okay";
++};
+--- /dev/null
++++ b/arch/riscv/dts/sun20i-d1-lichee-rv-86-panel-480p.dts
+@@ -0,0 +1,29 @@
++// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
++// Copyright (C) 2022 Samuel Holland <[email protected]>
++
++#include "sun20i-d1-lichee-rv-86-panel.dtsi"
++
++/ {
++	model = "Sipeed Lichee RV 86 Panel (480p)";
++	compatible = "sipeed,lichee-rv-86-panel-480p", "sipeed,lichee-rv",
++		     "allwinner,sun20i-d1";
++};
++
++&i2c2 {
++	pinctrl-0 = <&i2c2_pb0_pins>;
++	pinctrl-names = "default";
++	status = "okay";
++
++	touchscreen@48 {
++		compatible = "focaltech,ft6236";
++		reg = <0x48>;
++		interrupt-parent = <&pio>;
++		interrupts = <6 14 IRQ_TYPE_LEVEL_LOW>; /* PG14 */
++		iovcc-supply = <&reg_vcc_3v3>;
++		reset-gpios = <&pio 6 15 GPIO_ACTIVE_LOW>; /* PG15 */
++		touchscreen-size-x = <480>;
++		touchscreen-size-y = <480>;
++		vcc-supply = <&reg_vcc_3v3>;
++		wakeup-source;
++	};
++};
+--- /dev/null
++++ b/arch/riscv/dts/sun20i-d1-lichee-rv-86-panel-720p.dts
+@@ -0,0 +1,10 @@
++// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
++// Copyright (C) 2022 Samuel Holland <[email protected]>
++
++#include "sun20i-d1-lichee-rv-86-panel.dtsi"
++
++/ {
++	model = "Sipeed Lichee RV 86 Panel (720p)";
++	compatible = "sipeed,lichee-rv-86-panel-720p", "sipeed,lichee-rv",
++		     "allwinner,sun20i-d1";
++};
+--- /dev/null
++++ b/arch/riscv/dts/sun20i-d1-lichee-rv-86-panel.dtsi
+@@ -0,0 +1,119 @@
++// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
++// Copyright (C) 2022 Samuel Holland <[email protected]>
++
++#include "sun20i-d1-lichee-rv.dts"
++
++/ {
++	aliases {
++		ethernet0 = &emac;
++		ethernet1 = &xr829;
++	};
++
++	dmic_codec: dmic-codec {
++		compatible = "dmic-codec";
++		num-channels = <2>;
++		#sound-dai-cells = <0>;
++	};
++
++	dmic-sound {
++		compatible = "simple-audio-card";
++		simple-audio-card,name = "DMIC";
++		#address-cells = <1>;
++		#size-cells = <0>;
++
++		simple-audio-card,dai-link@0 {
++			reg = <0>;
++			format = "pdm";
++			frame-master = <&link0_cpu>;
++			bitclock-master = <&link0_cpu>;
++
++			link0_cpu: cpu {
++				sound-dai = <&dmic>;
++			};
++
++			link0_codec: codec {
++				sound-dai = <&dmic_codec>;
++			};
++		};
++	};
++
++	/* PC1 is repurposed as BT_WAKE_AP */
++	/delete-node/ leds;
++
++	wifi_pwrseq: wifi-pwrseq {
++		compatible = "mmc-pwrseq-simple";
++		clocks = <&ccu CLK_FANOUT1>;
++		clock-names = "ext_clock";
++		reset-gpios = <&pio 6 12 GPIO_ACTIVE_LOW>; /* PG12 */
++		assigned-clocks = <&ccu CLK_FANOUT1>;
++		assigned-clock-rates = <32768>;
++		pinctrl-0 = <&clk_pg11_pin>;
++		pinctrl-names = "default";
++	};
++};
++
++&dmic {
++	pinctrl-0 = <&dmic_pb11_d0_pin>, <&dmic_pe17_clk_pin>;
++	pinctrl-names = "default";
++	status = "okay";
++};
++
++&ehci1 {
++	status = "okay";
++};
++
++&emac {
++	pinctrl-0 = <&rmii_pe_pins>;
++	pinctrl-names = "default";
++	phy-handle = <&ext_rmii_phy>;
++	phy-mode = "rmii";
++	phy-supply = <&reg_vcc_3v3>;
++	status = "okay";
++};
++
++&mdio {
++	ext_rmii_phy: ethernet-phy@1 {
++		compatible = "ethernet-phy-ieee802.3-c22";
++		reg = <1>;
++		reset-gpios = <&pio 4 16 GPIO_ACTIVE_LOW>; /* PE16 */
++	};
++};
++
++&mmc1 {
++	bus-width = <4>;
++	mmc-pwrseq = <&wifi_pwrseq>;
++	non-removable;
++	vmmc-supply = <&reg_vcc_3v3>;
++	vqmmc-supply = <&reg_vcc_3v3>;
++	pinctrl-0 = <&mmc1_pins>;
++	pinctrl-names = "default";
++	status = "okay";
++
++	xr829: wifi@1 {
++		reg = <1>;
++	};
++};
++
++&ohci1 {
++	status = "okay";
++};
++
++&uart1 {
++	uart-has-rtscts;
++	pinctrl-0 = <&uart1_pg6_pins>, <&uart1_pg8_rts_cts_pins>;
++	pinctrl-names = "default";
++	status = "okay";
++
++	/* XR829 bluetooth is connected here */
++};
++
++&usb_otg {
++	status = "disabled";
++};
++
++&usbphy {
++	/* PD20 and PD21 are repurposed for the LCD panel */
++	/delete-property/ usb0_id_det-gpios;
++	/delete-property/ usb0_vbus_det-gpios;
++	usb1_vbus-supply = <&reg_vcc>;
++};
+--- /dev/null
++++ b/arch/riscv/dts/sun20i-d1-lichee-rv-dock.dts
+@@ -0,0 +1,97 @@
++// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
++// Copyright (C) 2022 Jisheng Zhang <[email protected]>
++// Copyright (C) 2022 Samuel Holland <[email protected]>
++
++#include <dt-bindings/input/input.h>
++
++#include "sun20i-d1-lichee-rv.dts"
++
++/ {
++	model = "Sipeed Lichee RV Dock";
++	compatible = "sipeed,lichee-rv-dock", "sipeed,lichee-rv",
++		     "allwinner,sun20i-d1";
++
++	aliases {
++		ethernet1 = &rtl8723ds;
++	};
++
++	dmic_codec: dmic-codec {
++		compatible = "dmic-codec";
++		num-channels = <2>;
++		#sound-dai-cells = <0>;
++	};
++
++	dmic-sound {
++		compatible = "simple-audio-card";
++		simple-audio-card,name = "DMIC";
++		#address-cells = <1>;
++		#size-cells = <0>;
++
++		simple-audio-card,dai-link@0 {
++			reg = <0>;
++			format = "pdm";
++			frame-master = <&link0_cpu>;
++			bitclock-master = <&link0_cpu>;
++
++			link0_cpu: cpu {
++				sound-dai = <&dmic>;
++			};
++
++			link0_codec: codec {
++				sound-dai = <&dmic_codec>;
++			};
++		};
++	};
++
++	wifi_pwrseq: wifi-pwrseq {
++		compatible = "mmc-pwrseq-simple";
++		reset-gpios = <&pio 6 12 GPIO_ACTIVE_LOW>; /* PG12 */
++	};
++};
++
++&dmic {
++	pinctrl-0 = <&dmic_pb11_d0_pin>, <&dmic_pe17_clk_pin>;
++	pinctrl-names = "default";
++	status = "okay";
++};
++
++&ehci1 {
++	status = "okay";
++};
++
++&mmc1 {
++	bus-width = <4>;
++	mmc-pwrseq = <&wifi_pwrseq>;
++	non-removable;
++	vmmc-supply = <&reg_vcc_3v3>;
++	vqmmc-supply = <&reg_vcc_3v3>;
++	pinctrl-0 = <&mmc1_pins>;
++	pinctrl-names = "default";
++	status = "okay";
++
++	rtl8723ds: wifi@1 {
++		reg = <1>;
++	};
++};
++
++&ohci1 {
++	status = "okay";
++};
++
++&uart1 {
++	uart-has-rtscts;
++	pinctrl-0 = <&uart1_pg6_pins>, <&uart1_pg8_rts_cts_pins>;
++	pinctrl-names = "default";
++	status = "okay";
++
++	bluetooth {
++		compatible = "realtek,rtl8723ds-bt";
++		device-wake-gpios = <&pio 6 15 GPIO_ACTIVE_HIGH>; /* PG16 */
++		enable-gpios = <&pio 6 18 GPIO_ACTIVE_HIGH>; /* PG18 */
++		host-wake-gpios = <&pio 6 17 GPIO_ACTIVE_HIGH>; /* PG17 */
++	};
++};
++
++&usbphy {
++	usb1_vbus-supply = <&reg_vcc>;
++};
+--- /dev/null
++++ b/arch/riscv/dts/sun20i-d1-lichee-rv.dts
+@@ -0,0 +1,87 @@
++// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
++// Copyright (C) 2022 Jisheng Zhang <[email protected]>
++// Copyright (C) 2022 Samuel Holland <[email protected]>
++
++#include <dt-bindings/gpio/gpio.h>
++#include <dt-bindings/leds/common.h>
++
++/dts-v1/;
++
++#include "sun20i-d1.dtsi"
++#include "sun20i-common-regulators.dtsi"
++
++/ {
++	model = "Sipeed Lichee RV";
++	compatible = "sipeed,lichee-rv", "allwinner,sun20i-d1";
++
++	aliases {
++		serial0 = &uart0;
++	};
++
++	chosen {
++		stdout-path = "serial0:115200n8";
++	};
++
++	leds {
++		compatible = "gpio-leds";
++
++		led-0 {
++			color = <LED_COLOR_ID_GREEN>;
++			function = LED_FUNCTION_STATUS;
++			gpios = <&pio 2 1 GPIO_ACTIVE_HIGH>; /* PC1 */
++		};
++	};
++
++	reg_vdd_cpu: vdd-cpu {
++		compatible = "regulator-fixed";
++		regulator-name = "vdd-cpu";
++		regulator-min-microvolt = <900000>;
++		regulator-max-microvolt = <900000>;
++		vin-supply = <&reg_vcc>;
++	};
++};
++
++&cpu0 {
++	cpu-supply = <&reg_vdd_cpu>;
++};
++
++&dcxo {
++	clock-frequency = <24000000>;
++};
++
++&ehci0 {
++	status = "okay";
++};
++
++&mmc0 {
++	broken-cd;
++	bus-width = <4>;
++	disable-wp;
++	vmmc-supply = <&reg_vcc_3v3>;
++	vqmmc-supply = <&reg_vcc_3v3>;
++	pinctrl-0 = <&mmc0_pins>;
++	pinctrl-names = "default";
++	status = "okay";
++};
++
++&ohci0 {
++	status = "okay";
++};
++
++&uart0 {
++	pinctrl-0 = <&uart0_pb8_pins>;
++	pinctrl-names = "default";
++	status = "okay";
++};
++
++&usb_otg {
++	dr_mode = "otg";
++	status = "okay";
++};
++
++&usbphy {
++	usb0_id_det-gpios = <&pio 3 21 GPIO_ACTIVE_HIGH>; /* PD21 */
++	usb0_vbus_det-gpios = <&pio 3 20 GPIO_ACTIVE_HIGH>; /* PD20 */
++	usb0_vbus-supply = <&reg_vcc>;
++	status = "okay";
++};
+--- /dev/null
++++ b/arch/riscv/dts/sun20i-d1-mangopi-mq-pro.dts
+@@ -0,0 +1,142 @@
++// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
++// Copyright (C) 2022 Samuel Holland <[email protected]>
++
++#include <dt-bindings/gpio/gpio.h>
++#include <dt-bindings/leds/common.h>
++
++/dts-v1/;
++
++#include "sun20i-d1.dtsi"
++#include "sun20i-common-regulators.dtsi"
++
++/ {
++	model = "MangoPi MQ Pro";
++	compatible = "widora,mangopi-mq-pro", "allwinner,sun20i-d1";
++
++	aliases {
++		ethernet0 = &rtl8723ds;
++		serial0 = &uart0;
++	};
++
++	chosen {
++		stdout-path = "serial0:115200n8";
++	};
++
++	leds {
++		compatible = "gpio-leds";
++
++		led-0 {
++			color = <LED_COLOR_ID_BLUE>;
++			function = LED_FUNCTION_STATUS;
++			gpios = <&pio 3 18 GPIO_ACTIVE_HIGH>; /* PD18 */
++		};
++	};
++
++	reg_avdd2v8: avdd2v8 {
++		compatible = "regulator-fixed";
++		regulator-name = "avdd2v8";
++		regulator-min-microvolt = <2800000>;
++		regulator-max-microvolt = <2800000>;
++		vin-supply = <&reg_vcc_3v3>;
++	};
++
++	reg_dvdd: dvdd {
++		compatible = "regulator-fixed";
++		regulator-name = "dvdd";
++		regulator-min-microvolt = <1200000>;
++		regulator-max-microvolt = <1200000>;
++		vin-supply = <&reg_vcc_3v3>;
++	};
++
++	reg_vdd_cpu: vdd-cpu {
++		compatible = "regulator-fixed";
++		regulator-name = "vdd-cpu";
++		regulator-min-microvolt = <1100000>;
++		regulator-max-microvolt = <1100000>;
++		vin-supply = <&reg_vcc>;
++	};
++
++	wifi_pwrseq: wifi-pwrseq {
++		compatible = "mmc-pwrseq-simple";
++		reset-gpios = <&pio 6 17 GPIO_ACTIVE_LOW>; /* PG17 */
++	};
++};
++
++&cpu0 {
++	cpu-supply = <&reg_vdd_cpu>;
++};
++
++&dcxo {
++	clock-frequency = <24000000>;
++};
++
++&ehci1 {
++	status = "okay";
++};
++
++&mmc0 {
++	bus-width = <4>;
++	cd-gpios = <&pio 5 6 GPIO_ACTIVE_HIGH>; /* PF6 */
++	disable-wp;
++	vmmc-supply = <&reg_vcc_3v3>;
++	vqmmc-supply = <&reg_vcc_3v3>;
++	pinctrl-0 = <&mmc0_pins>;
++	pinctrl-names = "default";
++	status = "okay";
++};
++
++&mmc1 {
++	bus-width = <4>;
++	mmc-pwrseq = <&wifi_pwrseq>;
++	non-removable;
++	vmmc-supply = <&reg_vcc_3v3>;
++	vqmmc-supply = <&reg_vcc_3v3>;
++	pinctrl-0 = <&mmc1_pins>;
++	pinctrl-names = "default";
++	status = "okay";
++
++	rtl8723ds: wifi@1 {
++		reg = <1>;
++		interrupt-parent = <&pio>;
++		interrupts = <6 10 IRQ_TYPE_LEVEL_LOW>; /* PG10 */
++		interrupt-names = "host-wake";
++	};
++};
++
++&ohci1 {
++	status = "okay";
++};
++
++&pio {
++	vcc-pe-supply = <&reg_avdd2v8>;
++};
++
++&uart0 {
++	pinctrl-0 = <&uart0_pb8_pins>;
++	pinctrl-names = "default";
++	status = "okay";
++};
++
++&uart1 {
++	uart-has-rtscts;
++	pinctrl-0 = <&uart1_pg6_pins>, <&uart1_pg8_rts_cts_pins>;
++	pinctrl-names = "default";
++	status = "okay";
++
++	bluetooth {
++		compatible = "realtek,rtl8723ds-bt";
++		device-wake-gpios = <&pio 6 18 GPIO_ACTIVE_HIGH>; /* PG18 */
++		enable-gpios = <&pio 6 15 GPIO_ACTIVE_HIGH>; /* PG15 */
++		host-wake-gpios = <&pio 6 14 GPIO_ACTIVE_HIGH>; /* PG14 */
++	};
++};
++
++&usb_otg {
++	dr_mode = "peripheral";
++	status = "okay";
++};
++
++&usbphy {
++	usb1_vbus-supply = <&reg_vcc>;
++	status = "okay";
++};
+--- /dev/null
++++ b/arch/riscv/dts/sun20i-d1-nezha.dts
+@@ -0,0 +1,238 @@
++// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
++// Copyright (C) 2021-2022 Samuel Holland <[email protected]>
++
++/*
++ * gpio line names
++ *
++ * The Nezha-D1 has a 40-pin IO header. Some of these pins are routed
++ * directly to pads on the SoC, others come from an 8-bit pcf857x IO
++ * expander. Therefore, these line names are specified in two places:
++ * one set for the pcf857x, and one set for the pio controller.
++ *
++ * Lines which are routed to the 40-pin header are named as follows:
++ *	<pin#> [<pin name>]
++ * where:
++ *	<pin#>		is the actual pin number of the 40-pin header
++ *	<pin name>	is the name of the pin by function/gpio#
++ *
++ * For details regarding pin numbers and names see the schematics (under
++ * "IO EXPAND"):
++ * http://dl.linux-sunxi.org/D1/D1_Nezha_development_board_schematic_diagram_20210224.pdf
++ */
++
++#include <dt-bindings/gpio/gpio.h>
++#include <dt-bindings/input/input.h>
++
++/dts-v1/;
++
++#include "sun20i-d1.dtsi"
++#include "sun20i-common-regulators.dtsi"
++
++/ {
++	model = "Allwinner D1 Nezha";
++	compatible = "allwinner,d1-nezha", "allwinner,sun20i-d1";
++
++	aliases {
++		ethernet0 = &emac;
++		ethernet1 = &xr829;
++		serial0 = &uart0;
++	};
++
++	chosen {
++		stdout-path = "serial0:115200n8";
++	};
++
++	reg_usbvbus: usbvbus {
++		compatible = "regulator-fixed";
++		regulator-name = "usbvbus";
++		regulator-min-microvolt = <5000000>;
++		regulator-max-microvolt = <5000000>;
++		gpio = <&pio 3 19 GPIO_ACTIVE_HIGH>; /* PD19 */
++		enable-active-high;
++		vin-supply = <&reg_vcc>;
++	};
++
++	/*
++	 * This regulator is PWM-controlled, but the PWM controller is not
++	 * yet supported, so fix the regulator to its default voltage.
++	 */
++	reg_vdd_cpu: vdd-cpu {
++		compatible = "regulator-fixed";
++		regulator-name = "vdd-cpu";
++		regulator-min-microvolt = <1100000>;
++		regulator-max-microvolt = <1100000>;
++		vin-supply = <&reg_vcc>;
++	};
++
++	wifi_pwrseq: wifi-pwrseq {
++		compatible = "mmc-pwrseq-simple";
++		reset-gpios = <&pio 6 12 GPIO_ACTIVE_LOW>; /* PG12 */
++	};
++};
++
++&cpu0 {
++	cpu-supply = <&reg_vdd_cpu>;
++};
++
++&dcxo {
++	clock-frequency = <24000000>;
++};
++
++&ehci0 {
++	status = "okay";
++};
++
++&ehci1 {
++	status = "okay";
++};
++
++&emac {
++	pinctrl-0 = <&rgmii_pe_pins>;
++	pinctrl-names = "default";
++	phy-handle = <&ext_rgmii_phy>;
++	phy-mode = "rgmii-id";
++	phy-supply = <&reg_vcc_3v3>;
++	status = "okay";
++};
++
++&i2c2 {
++	pinctrl-0 = <&i2c2_pb0_pins>;
++	pinctrl-names = "default";
++	status = "okay";
++
++	pcf8574a: gpio@38 {
++		compatible = "nxp,pcf8574a";
++		reg = <0x38>;
++		interrupt-parent = <&pio>;
++		interrupts = <1 2 IRQ_TYPE_LEVEL_LOW>; /* PB2 */
++		interrupt-controller;
++		gpio-controller;
++		#gpio-cells = <2>;
++		#interrupt-cells = <2>;
++		gpio-line-names =
++			"pin13 [gpio8]",
++			"pin16 [gpio10]",
++			"pin18 [gpio11]",
++			"pin26 [gpio17]",
++			"pin22 [gpio14]",
++			"pin28 [gpio19]",
++			"pin37 [gpio23]",
++			"pin11 [gpio6]";
++	};
++};
++
++&mdio {
++	ext_rgmii_phy: ethernet-phy@1 {
++		compatible = "ethernet-phy-ieee802.3-c22";
++		reg = <1>;
++	};
++};
++
++&mmc0 {
++	bus-width = <4>;
++	cd-gpios = <&pio 5 6 GPIO_ACTIVE_HIGH>; /* PF6 */
++	disable-wp;
++	vmmc-supply = <&reg_vcc_3v3>;
++	vqmmc-supply = <&reg_vcc_3v3>;
++	pinctrl-0 = <&mmc0_pins>;
++	pinctrl-names = "default";
++	status = "okay";
++};
++
++&mmc1 {
++	bus-width = <4>;
++	mmc-pwrseq = <&wifi_pwrseq>;
++	non-removable;
++	vmmc-supply = <&reg_vcc_3v3>;
++	vqmmc-supply = <&reg_vcc_3v3>;
++	pinctrl-0 = <&mmc1_pins>;
++	pinctrl-names = "default";
++	status = "okay";
++
++	xr829: wifi@1 {
++		reg = <1>;
++		interrupt-parent = <&pio>;
++		interrupts = <6 10 IRQ_TYPE_LEVEL_LOW>; /* PG10 */
++		interrupt-names = "host-wake";
++	};
++};
++
++&ohci0 {
++	status = "okay";
++};
++
++&ohci1 {
++	status = "okay";
++};
++
++&uart0 {
++	pinctrl-0 = <&uart0_pb8_pins>;
++	pinctrl-names = "default";
++	status = "okay";
++};
++
++&uart1 {
++	uart-has-rtscts;
++	pinctrl-0 = <&uart1_pg6_pins>, <&uart1_pg8_rts_cts_pins>;
++	pinctrl-names = "default";
++	status = "okay";
++
++	/* XR829 bluetooth is connected here */
++};
++
++&usb_otg {
++	dr_mode = "otg";
++	status = "okay";
++};
++
++&usbphy {
++	usb0_id_det-gpios = <&pio 3 21 GPIO_ACTIVE_HIGH>; /* PD21 */
++	usb0_vbus_det-gpios = <&pio 3 20 GPIO_ACTIVE_HIGH>; /* PD20 */
++	usb0_vbus-supply = <&reg_usbvbus>;
++	usb1_vbus-supply = <&reg_vcc>;
++	status = "okay";
++};
++
++&pio {
++	gpio-line-names =
++		/* Port A */
++		"", "", "", "", "", "", "", "",
++		"", "", "", "", "", "", "", "",
++		"", "", "", "", "", "", "", "",
++		"", "", "", "", "", "", "", "",
++		/* Port B */
++		"pin5 [gpio2/twi2-sck]",
++		"pin3 [gpio1/twi2-sda]",
++		"",
++		"pin38 [gpio24/i2s2-din]",
++		"pin40 [gpio25/i2s2-dout]",
++		"pin12 [gpio7/i2s-clk]",
++		"pin35 [gpio22/i2s2-lrck]",
++		"",
++		"pin8 [gpio4/uart0-txd]",
++		"pin10 [gpio5/uart0-rxd]",
++		"",
++		"",
++		"pin15 [gpio9]",
++		"", "", "", "",
++		"", "", "", "", "", "", "", "",
++		"", "", "", "", "", "", "", "",
++		/* Port C */
++		"",
++		"pin31 [gpio21]",
++		"", "", "", "", "", "",
++		"", "", "", "", "", "", "", "",
++		"", "", "", "", "", "", "", "",
++		"", "", "", "", "", "", "", "",
++		/* Port D */
++		"", "", "", "", "", "", "", "",
++		"", "",
++		"pin24 [gpio16/spi1-ce0]",
++		"pin23 [gpio15/spi1-clk]",
++		"pin19 [gpio12/spi1-mosi]",
++		"pin21 [gpio13/spi1-miso]",
++		"pin27 [gpio18/spi1-hold]",
++		"pin29 [gpio20/spi1-wp]",
++		"", "", "", "", "", "",
++		"pin7 [gpio3/pwm]";
++};
+--- /dev/null
++++ b/arch/riscv/dts/sun20i-d1.dtsi
+@@ -0,0 +1,66 @@
++// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
++// Copyright (C) 2021-2022 Samuel Holland <[email protected]>
++
++#include "sun20i-d1s.dtsi"
++#include "sunxi-d1-t113.dtsi"
++
++/ {
++	soc {
++		lradc: keys@2009800 {
++			compatible = "allwinner,sun20i-d1-lradc",
++				     "allwinner,sun50i-r329-lradc";
++			reg = <0x2009800 0x400>;
++			interrupts = <SOC_PERIPHERAL_IRQ(61) IRQ_TYPE_LEVEL_HIGH>;
++			clocks = <&ccu CLK_BUS_LRADC>;
++			resets = <&ccu RST_BUS_LRADC>;
++			status = "disabled";
++		};
++
++		i2s0: i2s@2032000 {
++			compatible = "allwinner,sun20i-d1-i2s",
++				     "allwinner,sun50i-r329-i2s";
++			reg = <0x2032000 0x1000>;
++			interrupts = <SOC_PERIPHERAL_IRQ(26) IRQ_TYPE_LEVEL_HIGH>;
++			clocks = <&ccu CLK_BUS_I2S0>,
++				 <&ccu CLK_I2S0>;
++			clock-names = "apb", "mod";
++			resets = <&ccu RST_BUS_I2S0>;
++			dmas = <&dma 3>, <&dma 3>;
++			dma-names = "rx", "tx";
++			status = "disabled";
++			#sound-dai-cells = <0>;
++		};
++	};
++};
++
++&pio {
++	/omit-if-no-ref/
++	dmic_pb11_d0_pin: dmic-pb11-d0-pin {
++		pins = "PB11";
++		function = "dmic";
++	};
++
++	/omit-if-no-ref/
++	dmic_pe17_clk_pin: dmic-pe17-clk-pin {
++		pins = "PE17";
++		function = "dmic";
++	};
++
++	/omit-if-no-ref/
++	i2c0_pb10_pins: i2c0-pb10-pins {
++		pins = "PB10", "PB11";
++		function = "i2c0";
++	};
++
++	/omit-if-no-ref/
++	i2c2_pb0_pins: i2c2-pb0-pins {
++		pins = "PB0", "PB1";
++		function = "i2c2";
++	};
++
++	/omit-if-no-ref/
++	uart0_pb8_pins: uart0-pb8-pins {
++		pins = "PB8", "PB9";
++		function = "uart0";
++	};
++};
+--- /dev/null
++++ b/arch/riscv/dts/sun20i-d1s-mangopi-mq.dts
+@@ -0,0 +1,128 @@
++// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
++// Copyright (C) 2022 Samuel Holland <[email protected]>
++
++#include <dt-bindings/gpio/gpio.h>
++#include <dt-bindings/leds/common.h>
++
++/dts-v1/;
++
++#include "sun20i-d1s.dtsi"
++#include "sun20i-common-regulators.dtsi"
++
++/ {
++	model = "MangoPi MQ";
++	compatible = "widora,mangopi-mq", "allwinner,sun20i-d1s";
++
++	aliases {
++		ethernet0 = &rtl8189ftv;
++		serial3 = &uart3;
++	};
++
++	chosen {
++		stdout-path = "serial3:115200n8";
++	};
++
++	leds {
++		compatible = "gpio-leds";
++
++		led-0 {
++			color = <LED_COLOR_ID_BLUE>;
++			function = LED_FUNCTION_STATUS;
++			gpios = <&pio 3 22 GPIO_ACTIVE_LOW>; /* PD22 */
++		};
++	};
++
++	reg_avdd2v8: avdd2v8 {
++		compatible = "regulator-fixed";
++		regulator-name = "avdd2v8";
++		regulator-min-microvolt = <2800000>;
++		regulator-max-microvolt = <2800000>;
++		vin-supply = <&reg_vcc_3v3>;
++	};
++
++	reg_dvdd: dvdd {
++		compatible = "regulator-fixed";
++		regulator-name = "dvdd";
++		regulator-min-microvolt = <1200000>;
++		regulator-max-microvolt = <1200000>;
++		vin-supply = <&reg_vcc_3v3>;
++	};
++
++	reg_vcc_core: vcc-core {
++		compatible = "regulator-fixed";
++		regulator-name = "vcc-core";
++		regulator-min-microvolt = <900000>;
++		regulator-max-microvolt = <900000>;
++		vin-supply = <&reg_vcc>;
++	};
++
++	wifi_pwrseq: wifi-pwrseq {
++		compatible = "mmc-pwrseq-simple";
++		reset-gpios = <&pio 6 12 GPIO_ACTIVE_LOW>; /* PG12 */
++	};
++};
++
++&cpu0 {
++	cpu-supply = <&reg_vcc_core>;
++};
++
++&dcxo {
++	clock-frequency = <24000000>;
++};
++
++&ehci1 {
++	status = "okay";
++};
++
++&mmc0 {
++	bus-width = <4>;
++	cd-gpios = <&pio 5 6 GPIO_ACTIVE_LOW>; /* PF6 */
++	disable-wp;
++	vmmc-supply = <&reg_vcc_3v3>;
++	vqmmc-supply = <&reg_vcc_3v3>;
++	pinctrl-0 = <&mmc0_pins>;
++	pinctrl-names = "default";
++	status = "okay";
++};
++
++&mmc1 {
++	bus-width = <4>;
++	mmc-pwrseq = <&wifi_pwrseq>;
++	non-removable;
++	vmmc-supply = <&reg_vcc_3v3>;
++	vqmmc-supply = <&reg_vcc_3v3>;
++	pinctrl-0 = <&mmc1_pins>;
++	pinctrl-names = "default";
++	status = "okay";
++
++	rtl8189ftv: wifi@1 {
++		reg = <1>;
++		interrupt-parent = <&pio>;
++		interrupts = <6 10 IRQ_TYPE_LEVEL_LOW>; /* PG10 */
++		interrupt-names = "host-wake";
++	};
++};
++
++&ohci1 {
++	status = "okay";
++};
++
++&pio {
++	vcc-pe-supply = <&reg_avdd2v8>;
++};
++
++&uart3 {
++	pinctrl-0 = <&uart3_pb_pins>;
++	pinctrl-names = "default";
++	status = "okay";
++};
++
++&usb_otg {
++	dr_mode = "peripheral";
++	status = "okay";
++};
++
++&usbphy {
++	usb1_vbus-supply = <&reg_vcc>;
++	status = "okay";
++};
+--- /dev/null
++++ b/arch/riscv/dts/sun20i-d1s.dtsi
+@@ -0,0 +1,117 @@
++// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
++// Copyright (C) 2021-2022 Samuel Holland <[email protected]>
++
++#define SOC_PERIPHERAL_IRQ(nr)	(nr + 16)
++
++#include "sunxi-d1s-t113.dtsi"
++
++/ {
++	cpus {
++		timebase-frequency = <24000000>;
++		#address-cells = <1>;
++		#size-cells = <0>;
++
++		cpu0: cpu@0 {
++			compatible = "thead,c906", "riscv";
++			device_type = "cpu";
++			reg = <0>;
++			clocks = <&ccu CLK_RISCV>;
++			d-cache-block-size = <64>;
++			d-cache-sets = <256>;
++			d-cache-size = <32768>;
++			i-cache-block-size = <64>;
++			i-cache-sets = <128>;
++			i-cache-size = <32768>;
++			mmu-type = "riscv,sv39";
++			operating-points-v2 = <&opp_table_cpu>;
++			riscv,isa = "rv64imafdc";
++			riscv,isa-base = "rv64i";
++			riscv,isa-extensions = "i", "m", "a", "f", "d", "c", "zicntr", "zicsr",
++					       "zifencei", "zihpm";
++			#cooling-cells = <2>;
++
++			cpu0_intc: interrupt-controller {
++				compatible = "riscv,cpu-intc";
++				interrupt-controller;
++				#interrupt-cells = <1>;
++			};
++		};
++	};
++
++	opp_table_cpu: opp-table-cpu {
++		compatible = "operating-points-v2";
++
++		opp-408000000 {
++			opp-hz = /bits/ 64 <408000000>;
++			opp-microvolt = <900000 900000 1100000>;
++		};
++
++		opp-1080000000 {
++			opp-hz = /bits/ 64 <1008000000>;
++			opp-microvolt = <900000 900000 1100000>;
++		};
++	};
++
++	soc {
++		interrupt-parent = <&plic>;
++
++		riscv_wdt: watchdog@6011000 {
++			compatible = "allwinner,sun20i-d1-wdt";
++			reg = <0x6011000 0x20>;
++			interrupts = <SOC_PERIPHERAL_IRQ(131) IRQ_TYPE_LEVEL_HIGH>;
++			clocks = <&dcxo>, <&rtc CLK_OSC32K>;
++			clock-names = "hosc", "losc";
++		};
++
++		plic: interrupt-controller@10000000 {
++			compatible = "allwinner,sun20i-d1-plic",
++				     "thead,c900-plic";
++			reg = <0x10000000 0x4000000>;
++			interrupts-extended = <&cpu0_intc 11>,
++					      <&cpu0_intc 9>;
++			interrupt-controller;
++			riscv,ndev = <175>;
++			#address-cells = <0>;
++			#interrupt-cells = <2>;
++		};
++	};
++
++	pmu {
++		compatible = "riscv,pmu";
++		riscv,event-to-mhpmcounters =
++			<0x00003 0x00003 0x00000008>,
++			<0x00004 0x00004 0x00000010>,
++			<0x00005 0x00005 0x00000200>,
++			<0x00006 0x00006 0x00000100>,
++			<0x10000 0x10000 0x00004000>,
++			<0x10001 0x10001 0x00008000>,
++			<0x10002 0x10002 0x00010000>,
++			<0x10003 0x10003 0x00020000>,
++			<0x10019 0x10019 0x00000040>,
++			<0x10021 0x10021 0x00000020>;
++		riscv,event-to-mhpmevent =
++			<0x00003 0x00000000 0x00000001>,
++			<0x00004 0x00000000 0x00000002>,
++			<0x00005 0x00000000 0x00000007>,
++			<0x00006 0x00000000 0x00000006>,
++			<0x10000 0x00000000 0x0000000c>,
++			<0x10001 0x00000000 0x0000000d>,
++			<0x10002 0x00000000 0x0000000e>,
++			<0x10003 0x00000000 0x0000000f>,
++			<0x10019 0x00000000 0x00000004>,
++			<0x10021 0x00000000 0x00000003>;
++		riscv,raw-event-to-mhpmcounters =
++			<0x00000000 0x00000001 0xffffffff 0xffffffff 0x00000008>,
++			<0x00000000 0x00000002 0xffffffff 0xffffffff 0x00000010>,
++			<0x00000000 0x00000003 0xffffffff 0xffffffff 0x00000020>,
++			<0x00000000 0x00000004 0xffffffff 0xffffffff 0x00000040>,
++			<0x00000000 0x00000005 0xffffffff 0xffffffff 0x00000080>,
++			<0x00000000 0x00000006 0xffffffff 0xffffffff 0x00000100>,
++			<0x00000000 0x00000007 0xffffffff 0xffffffff 0x00000200>,
++			<0x00000000 0x0000000b 0xffffffff 0xffffffff 0x00002000>,
++			<0x00000000 0x0000000c 0xffffffff 0xffffffff 0x00004000>,
++			<0x00000000 0x0000000d 0xffffffff 0xffffffff 0x00008000>,
++			<0x00000000 0x0000000e 0xffffffff 0xffffffff 0x00010000>,
++			<0x00000000 0x0000000f 0xffffffff 0xffffffff 0x00020000>;
++	};
++};
+--- a/arch/riscv/dts/sunxi-d1-t113.dtsi
++++ b/arch/riscv/dts/sunxi-d1-t113.dtsi
+@@ -1,4 +1,4 @@
+-// SPDX-License-Identifier: (GPL-2.0+ or MIT)
++// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
+ // Copyright (C) 2021-2022 Samuel Holland <[email protected]>
+ 
+ / {
+--- a/arch/riscv/dts/sunxi-d1s-t113.dtsi
++++ b/arch/riscv/dts/sunxi-d1s-t113.dtsi
+@@ -1,4 +1,4 @@
+-// SPDX-License-Identifier: (GPL-2.0+ or MIT)
++// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
+ // Copyright (C) 2021-2022 Samuel Holland <[email protected]>
+ 
+ #include <dt-bindings/clock/sun6i-rtc.h>
+--- /dev/null
++++ b/arch/riscv/dts/sunxi-u-boot.dtsi
+@@ -0,0 +1,81 @@
++// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
++
++#include "binman.dtsi"
++
++/ {
++	cpus {
++		bootph-all;
++	};
++
++	soc {
++		bootph-all;
++	};
++};
++
++&binman {
++	u-boot-sunxi-with-spl {
++		filename = "u-boot-sunxi-with-spl.bin";
++		pad-byte = <0xff>;
++
++		blob@0 {
++			/*
++			 * This value matches SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR
++			 * and SYS_SPI_U_BOOT_OFFS if those are defined.
++			 */
++			min-size = <0x8000>;
++			filename = "spl/sunxi-spl.bin";
++		};
++
++		blob@1 {
++			filename = "u-boot.itb";
++		};
++	};
++};
++
++&ccu {
++	bootph-all;
++};
++
++&cpu0 {
++	bootph-all;
++};
++
++&dcxo {
++	bootph-all;
++};
++
++&mbus {
++	bootph-all;
++};
++
++&mmc0 {
++	bootph-all;
++};
++
++&mmc0_pins {
++	bootph-all;
++};
++
++&pio {
++	bootph-all;
++
++	uart0-pb8-pins {
++		bootph-all;
++	};
++
++	uart3-pb-pins {
++		bootph-all;
++	};
++};
++
++&rtc {
++	bootph-all;
++};
++
++&uart0 {
++	bootph-all;
++};
++
++&uart3 {
++	bootph-all;
++};

+ 72 - 0
package/boot/uboot-d1/patches/0060-clk-sunxi-d1-Set-CPU-frequency-in-SPL.patch

@@ -0,0 +1,72 @@
+From b1107c0e34d152e4f4cfc44b33a65128cff8bbf8 Mon Sep 17 00:00:00 2001
+From: Samuel Holland <[email protected]>
+Date: Thu, 24 Nov 2022 11:04:52 -0600
+Subject: [PATCH 60/68] clk: sunxi: d1: Set CPU frequency in SPL
+
+Signed-off-by: Samuel Holland <[email protected]>
+---
+ drivers/clk/sunxi/clk_d1.c    | 11 ++++++++++-
+ drivers/clk/sunxi/clk_sunxi.c |  4 ++++
+ include/clk/sunxi.h           |  1 +
+ 3 files changed, 15 insertions(+), 1 deletion(-)
+
+--- a/drivers/clk/sunxi/clk_d1.c
++++ b/drivers/clk/sunxi/clk_d1.c
+@@ -6,7 +6,7 @@
+ #include <common.h>
+ #include <clk-uclass.h>
+ #include <dm.h>
+-#include <errno.h>
++#include <asm/io.h>
+ #include <clk/sunxi.h>
+ #include <dt-bindings/clock/sun20i-d1-ccu.h>
+ #include <dt-bindings/reset/sun20i-d1-ccu.h>
+@@ -76,9 +76,18 @@ static struct ccu_reset d1_resets[] = {
+ 	[RST_BUS_LRADC]		= RESET(0xa9c, BIT(16)),
+ };
+ 
++static void d1_ccu_init(struct udevice *dev)
++{
++	struct ccu_plat *plat = dev_get_plat(dev);
++
++	/* Set PLL_CPUX to 1008 MHz. */
++	clrsetbits_le32(plat->base + 0x000, 0xff << 8, 0x29 << 8);
++}
++
+ const struct ccu_desc d1_ccu_desc = {
+ 	.gates	= d1_gates,
+ 	.resets	= d1_resets,
+ 	.num_gates = ARRAY_SIZE(d1_gates),
+ 	.num_resets = ARRAY_SIZE(d1_resets),
++	.init = d1_ccu_init,
+ };
+--- a/drivers/clk/sunxi/clk_sunxi.c
++++ b/drivers/clk/sunxi/clk_sunxi.c
+@@ -79,6 +79,7 @@ static int sunxi_clk_bind(struct udevice
+ 
+ static int sunxi_clk_probe(struct udevice *dev)
+ {
++	struct ccu_plat *plat = dev_get_plat(dev);
+ 	struct clk_bulk clk_bulk;
+ 	struct reset_ctl_bulk rst_bulk;
+ 	int ret;
+@@ -91,6 +92,9 @@ static int sunxi_clk_probe(struct udevic
+ 	if (!ret)
+ 		reset_deassert_bulk(&rst_bulk);
+ 
++	if (IS_ENABLED(CONFIG_SPL_BUILD) && plat->desc->init)
++		plat->desc->init(dev);
++
+ 	return 0;
+ }
+ 
+--- a/include/clk/sunxi.h
++++ b/include/clk/sunxi.h
+@@ -72,6 +72,7 @@ struct ccu_desc {
+ 	const struct ccu_reset *resets;
+ 	u8 num_gates;
+ 	u8 num_resets;
++	void (*init)(struct udevice *dev);
+ };
+ 
+ /**

+ 54 - 0
package/boot/uboot-d1/patches/0061-mmc-sunxi-Hack-up-the-driver-for-the-D1.patch

@@ -0,0 +1,54 @@
+From 120219bb05c64fc37d42b6bdf376ceea38282d2c Mon Sep 17 00:00:00 2001
+From: Samuel Holland <[email protected]>
+Date: Sun, 8 Aug 2021 19:31:20 -0500
+Subject: [PATCH 61/68] mmc: sunxi: Hack up the driver for the D1
+
+Signed-off-by: Samuel Holland <[email protected]>
+---
+ arch/riscv/include/asm/io.h |  1 +
+ drivers/mmc/sunxi_mmc.c     | 18 +++++++++++++++++-
+ 2 files changed, 18 insertions(+), 1 deletion(-)
+
+--- a/drivers/mmc/sunxi_mmc.c
++++ b/drivers/mmc/sunxi_mmc.c
+@@ -23,9 +23,9 @@
+ #include <reset.h>
+ #include <asm/gpio.h>
+ #include <asm/io.h>
++#if !CONFIG_IS_ENABLED(DM_MMC)
+ #include <asm/arch/clock.h>
+ #include <asm/arch/cpu.h>
+-#if !CONFIG_IS_ENABLED(DM_MMC)
+ #include <asm/arch/mmc.h>
+ #endif
+ #include <linux/delay.h>
+@@ -37,6 +37,21 @@
+ #define CCM_MMC_CTRL_MODE_SEL_NEW	0
+ #endif
+ 
++#include "../../arch/arm/include/asm/arch-sunxi/clock_sun50i_h6.h"
++
++unsigned int clock_get_pll6(void)
++{
++	uint32_t rval = readl((void *)0x2001020);
++
++	int n = ((rval & CCM_PLL6_CTRL_N_MASK) >> CCM_PLL6_CTRL_N_SHIFT) + 1;
++	int m = ((rval >> 1) & 0x1) + 1;
++	int p0 = ((rval >> 16) & 0x7) + 1;
++	/* The register defines PLL6-2X, not plain PLL6 */
++	uint32_t freq = 24000000UL * n / m / p0;
++
++	return freq;
++}
++
+ struct sunxi_mmc_plat {
+ 	struct mmc_config cfg;
+ 	struct mmc mmc;
+@@ -664,6 +679,7 @@ static int sunxi_mmc_probe(struct udevic
+ 		return ret;
+ 	ccu_reg = (u32 *)(uintptr_t)ofnode_get_addr(args.node);
+ 
++#define SUNXI_MMC0_BASE 0x4020000
+ 	priv->mmc_no = ((uintptr_t)priv->reg - SUNXI_MMC0_BASE) / 0x1000;
+ 	priv->mclkreg = (void *)ccu_reg + get_mclk_offset() + priv->mmc_no * 4;
+ 

+ 48 - 0
package/boot/uboot-d1/patches/0062-ram-sunxi-Hack-up-the-driver-for-the-D1.patch

@@ -0,0 +1,48 @@
+From a037e04e78b7ca3155dc47427408e453bb1b4d84 Mon Sep 17 00:00:00 2001
+From: Samuel Holland <[email protected]>
+Date: Tue, 31 Oct 2023 02:40:12 -0500
+Subject: [PATCH 62/68] ram: sunxi: Hack up the driver for the D1
+
+Signed-off-by: Samuel Holland <[email protected]>
+---
+ drivers/ram/sunxi/Kconfig          |  4 ++--
+ drivers/ram/sunxi/dram_sun20i_d1.c | 16 ++++++++++++++++
+ 2 files changed, 18 insertions(+), 2 deletions(-)
+
+--- a/drivers/ram/sunxi/Kconfig
++++ b/drivers/ram/sunxi/Kconfig
+@@ -1,6 +1,6 @@
+ config DRAM_SUN20I_D1
+-	bool
+-	depends on ARCH_SUNXI
++	bool "DRAM driver support for Allwinner R528/T113s"
++	depends on BOARD_SUNXI
+ 	help
+ 	  This enables support for the DRAM controller driver covering
+ 	  the Allwinner D1/R528/T113s SoCs.
+--- a/drivers/ram/sunxi/dram_sun20i_d1.c
++++ b/drivers/ram/sunxi/dram_sun20i_d1.c
+@@ -12,7 +12,23 @@
+  * [1] https://github.com/szemzoa/awboot.git
+  */
+ 
++#ifndef CONFIG_DRAM_CLK
++#define CONFIG_DRAM_CLK 792
++#endif
++
++#ifndef CONFIG_DRAM_ZQ
++#define CONFIG_DRAM_ZQ 0x007b7bfb
++#endif
++
++#define readl rv_readl
++#define writel rv_writel
+ #include <asm/io.h>
++#undef readl
++#undef writel
++
++#define readl(x)       rv_readl((const volatile void __iomem *)(u64)(x))
++#define writel(v, x)   rv_writel(v, (volatile void __iomem *)(u64)(x))
++
+ #include <common.h>
+ #ifdef CONFIG_RAM
+   #include <dm.h>

+ 30 - 0
package/boot/uboot-d1/patches/0063-regulator-Don-t-fail-when-already-enabled.patch

@@ -0,0 +1,30 @@
+From 9e824a4cf12362c38a995cf4751d15b2e281a5e1 Mon Sep 17 00:00:00 2001
+From: Samuel Holland <[email protected]>
+Date: Tue, 31 Oct 2023 03:40:19 -0500
+Subject: [PATCH 63/68] regulator: Don't fail when already enabled
+
+Signed-off-by: Samuel Holland <[email protected]>
+---
+ drivers/power/regulator/regulator_common.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+--- a/drivers/power/regulator/regulator_common.c
++++ b/drivers/power/regulator/regulator_common.c
+@@ -77,7 +77,7 @@ int regulator_common_set_enable(const st
+ 	/* If previously enabled, increase count */
+ 	if (enable && plat->enable_count > 0) {
+ 		plat->enable_count++;
+-		return -EALREADY;
++		return 0;
+ 	}
+ 
+ 	if (!enable) {
+@@ -87,7 +87,7 @@ int regulator_common_set_enable(const st
+ 			return -EBUSY;
+ 		} else if (!plat->enable_count) {
+ 			/* If already disabled, do nothing */
+-			return -EALREADY;
++			return 0;
+ 		}
+ 	}
+ 

+ 2 - 2
package/boot/uboot-d1/patches/0084-spi-sunxi-Hack-up-the-driver-for-the-D1.patch → package/boot/uboot-d1/patches/0064-spi-sunxi-Hack-up-the-driver-for-the-D1.patch

@@ -1,7 +1,7 @@
-From 46f73ce33478734dabd5a93d425f7148b60198e1 Mon Sep 17 00:00:00 2001
+From 7c32c667288d0268fadb42e7199e2dd36e445f8c Mon Sep 17 00:00:00 2001
 From: Samuel Holland <[email protected]>
 From: Samuel Holland <[email protected]>
 Date: Wed, 8 Sep 2021 21:31:06 -0500
 Date: Wed, 8 Sep 2021 21:31:06 -0500
-Subject: [PATCH 84/90] spi: sunxi: Hack up the driver for the D1
+Subject: [PATCH 64/68] spi: sunxi: Hack up the driver for the D1
 
 
 Signed-off-by: Samuel Holland <[email protected]>
 Signed-off-by: Samuel Holland <[email protected]>
 ---
 ---

+ 2 - 2
package/boot/uboot-d1/patches/0085-spi-sunxi-Add-support-for-the-D1.patch → package/boot/uboot-d1/patches/0065-BROKEN-spi-sunxi-Add-support-for-the-D1.patch

@@ -1,7 +1,7 @@
-From 4993c31d314d5c7ebad1d08e3e3f79694dca8738 Mon Sep 17 00:00:00 2001
+From ecba5c5d2deddd762e8265c479bab88bc6c5fea8 Mon Sep 17 00:00:00 2001
 From: Samuel Holland <[email protected]>
 From: Samuel Holland <[email protected]>
 Date: Sat, 11 Sep 2021 23:12:06 -0500
 Date: Sat, 11 Sep 2021 23:12:06 -0500
-Subject: [PATCH 85/90] spi: sunxi: Add support for the D1
+Subject: [PATCH 65/68] [BROKEN] spi: sunxi: Add support for the D1
 
 
 Signed-off-by: Samuel Holland <[email protected]>
 Signed-off-by: Samuel Holland <[email protected]>
 ---
 ---

+ 6 - 6
package/boot/uboot-d1/patches/0086-usb-musb-new-Hack-up-the-driver-for-the-D1.patch → package/boot/uboot-d1/patches/0066-usb-musb-new-Hack-up-the-driver-for-the-D1.patch

@@ -1,7 +1,7 @@
-From eb0cf5922cf0656a7e9f96d6b83397469a26825a Mon Sep 17 00:00:00 2001
+From 8d0a9492ae27b30beaaebb9f258c3362f256ccdd Mon Sep 17 00:00:00 2001
 From: Samuel Holland <[email protected]>
 From: Samuel Holland <[email protected]>
 Date: Sat, 11 Sep 2021 10:12:24 -0500
 Date: Sat, 11 Sep 2021 10:12:24 -0500
-Subject: [PATCH 86/90] usb: musb-new: Hack up the driver for the D1
+Subject: [PATCH 66/68] usb: musb-new: Hack up the driver for the D1
 
 
 Signed-off-by: Samuel Holland <[email protected]>
 Signed-off-by: Samuel Holland <[email protected]>
 ---
 ---
@@ -24,7 +24,7 @@ Signed-off-by: Samuel Holland <[email protected]>
  	int mask, retval;
  	int mask, retval;
 --- a/arch/riscv/include/asm/io.h
 --- a/arch/riscv/include/asm/io.h
 +++ b/arch/riscv/include/asm/io.h
 +++ b/arch/riscv/include/asm/io.h
-@@ -218,6 +218,7 @@ static inline u64 readq(const volatile v
+@@ -217,6 +217,7 @@ static inline u64 readq(const volatile v
  #define insb(p, d, l)			readsb(__io(p), d, l)
  #define insb(p, d, l)			readsb(__io(p), d, l)
  #define insw(p, d, l)			readsw(__io(p), d, l)
  #define insw(p, d, l)			readsw(__io(p), d, l)
  #define insl(p, d, l)			readsl(__io(p), d, l)
  #define insl(p, d, l)			readsl(__io(p), d, l)
@@ -32,7 +32,7 @@ Signed-off-by: Samuel Holland <[email protected]>
  
  
  static inline void readsb(unsigned int *addr, void *data, int bytelen)
  static inline void readsb(unsigned int *addr, void *data, int bytelen)
  {
  {
-@@ -308,7 +309,6 @@ static inline void writesl(unsigned int
+@@ -307,7 +308,6 @@ static inline void writesl(unsigned int
  		longlen--;
  		longlen--;
  	}
  	}
  }
  }
@@ -73,7 +73,7 @@ Signed-off-by: Samuel Holland <[email protected]>
  #include <dm/device_compat.h>
  #include <dm/device_compat.h>
  #include <dm/lists.h>
  #include <dm/lists.h>
  #include <dm/root.h>
  #include <dm/root.h>
-@@ -174,6 +174,7 @@ static void USBC_ForceVbusValidToHigh(__
+@@ -173,6 +173,7 @@ static void USBC_ForceVbusValidToHigh(__
  
  
  static void USBC_ConfigFIFO_Base(void)
  static void USBC_ConfigFIFO_Base(void)
  {
  {
@@ -81,7 +81,7 @@ Signed-off-by: Samuel Holland <[email protected]>
  	u32 reg_value;
  	u32 reg_value;
  
  
  	/* config usb fifo, 8kb mode */
  	/* config usb fifo, 8kb mode */
-@@ -181,6 +182,7 @@ static void USBC_ConfigFIFO_Base(void)
+@@ -180,6 +181,7 @@ static void USBC_ConfigFIFO_Base(void)
  	reg_value &= ~(0x03 << 0);
  	reg_value &= ~(0x03 << 0);
  	reg_value |= BIT(0);
  	reg_value |= BIT(0);
  	writel(reg_value, SUNXI_SRAMC_BASE + 0x04);
  	writel(reg_value, SUNXI_SRAMC_BASE + 0x04);

+ 11 - 17
package/boot/uboot-d1/patches/0087-sunxi-Add-temporary-RISC-V-version-of-board-code.patch → package/boot/uboot-d1/patches/0067-sunxi-Add-temporary-RISC-V-version-of-board-code.patch

@@ -1,14 +1,13 @@
-From e3152c690732fb141500379f32fbe2203fa47059 Mon Sep 17 00:00:00 2001
+From 22f9745805f28bc2d501ca12be47362b6544e31f Mon Sep 17 00:00:00 2001
 From: Samuel Holland <[email protected]>
 From: Samuel Holland <[email protected]>
 Date: Sat, 6 Aug 2022 00:48:38 -0500
 Date: Sat, 6 Aug 2022 00:48:38 -0500
-Subject: [PATCH 87/90] sunxi: Add temporary RISC-V version of board code
+Subject: [PATCH 67/68] sunxi: Add temporary RISC-V version of board code
 
 
 Signed-off-by: Samuel Holland <[email protected]>
 Signed-off-by: Samuel Holland <[email protected]>
 ---
 ---
- board/sunxi/Makefile           |   3 +-
- board/sunxi/board-riscv.c      | 687 +++++++++++++++++++++++++++++++++
- include/configs/sunxi-common.h |   1 -
- 3 files changed, 689 insertions(+), 2 deletions(-)
+ board/sunxi/Makefile      |   3 +-
+ board/sunxi/board-riscv.c | 692 ++++++++++++++++++++++++++++++++++++++
+ 2 files changed, 694 insertions(+), 1 deletion(-)
  create mode 100644 board/sunxi/board-riscv.c
  create mode 100644 board/sunxi/board-riscv.c
 
 
 --- a/board/sunxi/Makefile
 --- a/board/sunxi/Makefile
@@ -25,7 +24,7 @@ Signed-off-by: Samuel Holland <[email protected]>
  obj-$(CONFIG_MACH_SUN5I)	+= dram_sun5i_auto.o
  obj-$(CONFIG_MACH_SUN5I)	+= dram_sun5i_auto.o
 --- /dev/null
 --- /dev/null
 +++ b/board/sunxi/board-riscv.c
 +++ b/board/sunxi/board-riscv.c
-@@ -0,0 +1,687 @@
+@@ -0,0 +1,692 @@
 +// SPDX-License-Identifier: GPL-2.0+
 +// SPDX-License-Identifier: GPL-2.0+
 +/*
 +/*
 + * (C) Copyright 2012-2013 Henrik Nordstrom <[email protected]>
 + * (C) Copyright 2012-2013 Henrik Nordstrom <[email protected]>
@@ -216,6 +215,11 @@ Signed-off-by: Samuel Holland <[email protected]>
 +	int ret;
 +	int ret;
 +	struct udevice *dev;
 +	struct udevice *dev;
 +
 +
++	ret = cpu_probe_all();
++	if (ret) {
++		debug("CPU init failed: %d\n", ret);
++	}
++
 +	/* DDR init */
 +	/* DDR init */
 +	ret = uclass_get_device(UCLASS_RAM, 0, &dev);
 +	ret = uclass_get_device(UCLASS_RAM, 0, &dev);
 +	if (ret) {
 +	if (ret) {
@@ -713,13 +717,3 @@ Signed-off-by: Samuel Holland <[email protected]>
 +	return ret;
 +	return ret;
 +}
 +}
 +#endif
 +#endif
---- a/include/configs/sunxi-common.h
-+++ b/include/configs/sunxi-common.h
-@@ -12,7 +12,6 @@
- #ifndef _SUNXI_COMMON_CONFIG_H
- #define _SUNXI_COMMON_CONFIG_H
- 
--#include <asm/arch/cpu.h>
- #include <linux/stringify.h>
- 
- /* Serial & console */

+ 151 - 0
package/boot/uboot-d1/patches/0068-sunxi-riscv-Add-defconfigs-for-several-boards.patch

@@ -0,0 +1,151 @@
+From 2e89b706f5c956a70c989cd31665f1429e9a0b48 Mon Sep 17 00:00:00 2001
+From: Samuel Holland <[email protected]>
+Date: Mon, 31 Oct 2022 23:27:08 -0500
+Subject: [PATCH 68/68] sunxi: riscv: Add defconfigs for several boards
+
+Signed-off-by: Samuel Holland <[email protected]>
+---
+ configs/devterm_r_01_defconfig       | 17 +++++++++++++++++
+ configs/dongshan_nezha_stu_defconfig | 20 ++++++++++++++++++++
+ configs/lichee_rv_86_panel_defconfig | 20 ++++++++++++++++++++
+ configs/lichee_rv_dock_defconfig     | 17 +++++++++++++++++
+ configs/mangopi_mq_pro_defconfig     | 17 +++++++++++++++++
+ configs/nezha_defconfig              | 21 +++++++++++++++++++++
+ 6 files changed, 112 insertions(+)
+ create mode 100644 configs/devterm_r_01_defconfig
+ create mode 100644 configs/dongshan_nezha_stu_defconfig
+ create mode 100644 configs/lichee_rv_86_panel_defconfig
+ create mode 100644 configs/lichee_rv_dock_defconfig
+ create mode 100644 configs/mangopi_mq_pro_defconfig
+ create mode 100644 configs/nezha_defconfig
+
+--- /dev/null
++++ b/configs/devterm_r_01_defconfig
+@@ -0,0 +1,17 @@
++CONFIG_RISCV=y
++CONFIG_HAS_CUSTOM_SYS_INIT_SP_ADDR=y
++CONFIG_CUSTOM_SYS_INIT_SP_ADDR=0x43e00000
++CONFIG_DEFAULT_DEVICE_TREE="sun20i-d1-devterm-v3.14"
++CONFIG_TARGET_SUN20I_D1=y
++CONFIG_ARCH_RV64I=y
++CONFIG_RISCV_SMODE=y
++# CONFIG_SPL_SMP is not set
++CONFIG_SPL_SYS_MALLOC=y
++CONFIG_SPL_OPENSBI_SCRATCH_OPTIONS=0x0
++# CONFIG_SYS_I2C_MVTWSI is not set
++CONFIG_DRAM_SUN20I_D1=y
++CONFIG_DRAM_SUNXI_ODT_EN=0x1
++CONFIG_DRAM_SUNXI_TPR0=0x004a2195
++CONFIG_DRAM_SUNXI_TPR11=0x00870000
++CONFIG_DRAM_SUNXI_TPR12=0x00000024
++CONFIG_DRAM_SUNXI_TPR13=0x34050100
+--- /dev/null
++++ b/configs/dongshan_nezha_stu_defconfig
+@@ -0,0 +1,20 @@
++CONFIG_RISCV=y
++CONFIG_HAS_CUSTOM_SYS_INIT_SP_ADDR=y
++CONFIG_CUSTOM_SYS_INIT_SP_ADDR=0x43e00000
++CONFIG_DEFAULT_DEVICE_TREE="sun20i-d1-dongshan-nezha-stu"
++CONFIG_TARGET_SUN20I_D1=y
++CONFIG_ARCH_RV64I=y
++CONFIG_RISCV_SMODE=y
++# CONFIG_SPL_SMP is not set
++CONFIG_SPL_SYS_MALLOC=y
++CONFIG_SPL_OPENSBI_SCRATCH_OPTIONS=0x0
++CONFIG_NET_RANDOM_ETHADDR=y
++# CONFIG_SYS_I2C_MVTWSI is not set
++CONFIG_PHY_REALTEK=y
++CONFIG_SUN8I_EMAC=y
++CONFIG_DRAM_SUN20I_D1=y
++CONFIG_DRAM_SUNXI_ODT_EN=0x1
++CONFIG_DRAM_SUNXI_TPR0=0x004a2195
++CONFIG_DRAM_SUNXI_TPR11=0x00870000
++CONFIG_DRAM_SUNXI_TPR12=0x00000024
++CONFIG_DRAM_SUNXI_TPR13=0x34050100
+--- /dev/null
++++ b/configs/lichee_rv_86_panel_defconfig
+@@ -0,0 +1,20 @@
++CONFIG_RISCV=y
++CONFIG_HAS_CUSTOM_SYS_INIT_SP_ADDR=y
++CONFIG_CUSTOM_SYS_INIT_SP_ADDR=0x43e00000
++CONFIG_DEFAULT_DEVICE_TREE="sun20i-d1-lichee-rv-86-panel-480p"
++CONFIG_TARGET_SUN20I_D1=y
++CONFIG_ARCH_RV64I=y
++CONFIG_RISCV_SMODE=y
++# CONFIG_SPL_SMP is not set
++CONFIG_SPL_SYS_MALLOC=y
++CONFIG_SPL_OPENSBI_SCRATCH_OPTIONS=0x0
++CONFIG_NET_RANDOM_ETHADDR=y
++# CONFIG_SYS_I2C_MVTWSI is not set
++CONFIG_PHY_REALTEK=y
++CONFIG_SUN8I_EMAC=y
++CONFIG_DRAM_SUN20I_D1=y
++CONFIG_DRAM_SUNXI_ODT_EN=0x1
++CONFIG_DRAM_SUNXI_TPR0=0x004a2195
++CONFIG_DRAM_SUNXI_TPR11=0x00870000
++CONFIG_DRAM_SUNXI_TPR12=0x00000024
++CONFIG_DRAM_SUNXI_TPR13=0x34050100
+--- /dev/null
++++ b/configs/lichee_rv_dock_defconfig
+@@ -0,0 +1,17 @@
++CONFIG_RISCV=y
++CONFIG_HAS_CUSTOM_SYS_INIT_SP_ADDR=y
++CONFIG_CUSTOM_SYS_INIT_SP_ADDR=0x43e00000
++CONFIG_DEFAULT_DEVICE_TREE="sun20i-d1-lichee-rv-dock"
++CONFIG_TARGET_SUN20I_D1=y
++CONFIG_ARCH_RV64I=y
++CONFIG_RISCV_SMODE=y
++# CONFIG_SPL_SMP is not set
++CONFIG_SPL_SYS_MALLOC=y
++CONFIG_SPL_OPENSBI_SCRATCH_OPTIONS=0x0
++# CONFIG_SYS_I2C_MVTWSI is not set
++CONFIG_DRAM_SUN20I_D1=y
++CONFIG_DRAM_SUNXI_ODT_EN=0x1
++CONFIG_DRAM_SUNXI_TPR0=0x004a2195
++CONFIG_DRAM_SUNXI_TPR11=0x00870000
++CONFIG_DRAM_SUNXI_TPR12=0x00000024
++CONFIG_DRAM_SUNXI_TPR13=0x34050100
+--- /dev/null
++++ b/configs/mangopi_mq_pro_defconfig
+@@ -0,0 +1,17 @@
++CONFIG_RISCV=y
++CONFIG_HAS_CUSTOM_SYS_INIT_SP_ADDR=y
++CONFIG_CUSTOM_SYS_INIT_SP_ADDR=0x43e00000
++CONFIG_DEFAULT_DEVICE_TREE="sun20i-d1-mangopi-mq-pro"
++CONFIG_TARGET_SUN20I_D1=y
++CONFIG_ARCH_RV64I=y
++CONFIG_RISCV_SMODE=y
++# CONFIG_SPL_SMP is not set
++CONFIG_SPL_SYS_MALLOC=y
++CONFIG_SPL_OPENSBI_SCRATCH_OPTIONS=0x0
++# CONFIG_SYS_I2C_MVTWSI is not set
++CONFIG_DRAM_SUN20I_D1=y
++CONFIG_DRAM_SUNXI_ODT_EN=0x1
++CONFIG_DRAM_SUNXI_TPR0=0x004a2195
++CONFIG_DRAM_SUNXI_TPR11=0x00870000
++CONFIG_DRAM_SUNXI_TPR12=0x00000024
++CONFIG_DRAM_SUNXI_TPR13=0x34050100
+--- /dev/null
++++ b/configs/nezha_defconfig
+@@ -0,0 +1,21 @@
++CONFIG_RISCV=y
++CONFIG_HAS_CUSTOM_SYS_INIT_SP_ADDR=y
++CONFIG_CUSTOM_SYS_INIT_SP_ADDR=0x43e00000
++CONFIG_DEFAULT_DEVICE_TREE="sun20i-d1-nezha"
++CONFIG_TARGET_SUN20I_D1=y
++CONFIG_ARCH_RV64I=y
++CONFIG_RISCV_SMODE=y
++# CONFIG_SPL_SMP is not set
++CONFIG_SPL_SYS_MALLOC=y
++CONFIG_SPL_OPENSBI_SCRATCH_OPTIONS=0x0
++CONFIG_NET_RANDOM_ETHADDR=y
++# CONFIG_SYS_I2C_MVTWSI is not set
++CONFIG_PHY_REALTEK=y
++CONFIG_SUN8I_EMAC=y
++CONFIG_DRAM_SUN20I_D1=y
++CONFIG_DRAM_SUNXI_ODT_EN=0x1
++CONFIG_DRAM_SUNXI_TPR0=0x004a2195
++CONFIG_DRAM_SUNXI_TPR11=0x00870000
++CONFIG_DRAM_SUNXI_TPR12=0x00000024
++CONFIG_DRAM_SUNXI_TPR13=0x34050100
++CONFIG_VIDEO=y

Algunos archivos no se mostraron porque demasiados archivos cambiaron en este cambio