From 7d41c9785f7a67ec01b05b2e533c72108120c5cd Mon Sep 17 00:00:00 2001 From: tuibuilder_pel7x64builder0 Date: Tue, 9 Aug 2022 14:59:40 +0200 Subject: [PATCH] uboot-tools and arm-image-installer added Signed-off-by: tuibuilder_pel7x64builder0 --- SOURCES/aarch64-boards | 86 ++ ...nitial-support-for-the-PinePhone-Pro.patch | 886 ++++++++++++++++++ ...-the-DT-provided-by-the-Raspberry-Pi.patch | 96 ++ ...cm2835_sdhost-firmware-managed-clock.patch | 228 +++++ .../rpi-fallback-to-max-clock-for-mmc.patch | 77 ++ ...DT-from-any-partition-on-boot-device.patch | 84 ++ SPECS/arm-image-installer.spec | 236 +++++ SPECS/uboot-tools.spec | 479 ++++++++++ 8 files changed, 2172 insertions(+) create mode 100644 SOURCES/aarch64-boards create mode 100644 SOURCES/rockchip-Add-initial-support-for-the-PinePhone-Pro.patch create mode 100644 SOURCES/rpi-Enable-using-the-DT-provided-by-the-Raspberry-Pi.patch create mode 100644 SOURCES/rpi-bcm2835_sdhost-firmware-managed-clock.patch create mode 100644 SOURCES/rpi-fallback-to-max-clock-for-mmc.patch create mode 100644 SOURCES/uefi-distro-load-FDT-from-any-partition-on-boot-device.patch create mode 100644 SPECS/arm-image-installer.spec create mode 100644 SPECS/uboot-tools.spec diff --git a/SOURCES/aarch64-boards b/SOURCES/aarch64-boards new file mode 100644 index 0000000..a38107c --- /dev/null +++ b/SOURCES/aarch64-boards @@ -0,0 +1,86 @@ +a64-olinuxino +amarula_a64_relic +apple_m1 +bananapi_m2_plus_h5 +bananapi_m64 +beelink_gs1 +dragonboard410c +dragonboard820c +evb-rk3328 +evb-rk3399 +ficus-rk3399 +firefly-rk3399 +geekbox +hikey +khadas-edge-captain-rk3399 +khadas-edge-rk3399 +khadas-edge-v-rk3399 +khadas-vim +khadas-vim2 +khadas-vim3 +khadas-vim3l +leez-rk3399 +libretech-ac +libretech_all_h3_cc_h5 +libretech_all_h3_it_h5 +libretech_all_h5_cc_h5 +libretech-cc +mvebu_espressobin-88f3720 +mvebu_mcbin-88f8040 +nanopc-t4-rk3399 +nanopi_a64 +nanopi-k2 +nanopi-m4-2gb-rk3399 +nanopi-m4b-rk3399 +nanopi-m4-rk3399 +nanopi_neo2 +nanopi-neo4-rk3399 +nanopi_neo_plus2 +nanopi_r1s_h5 +nanopi-r2s-rk3328 +nanopi-r4s-rk3399 +odroid-c2 +orangepi_3 +orangepi_lite2 +orangepi_one_plus +orangepi_pc2 +orangepi_prime +orangepi-rk3399 +orangepi_win +orangepi_zero2 +orangepi_zero_plus +orangepi_zero_plus2 +p212 +p2371-2180 +p2771-0000-500 +p3450-0000 +pine64-lts +pine64_plus +pinebook +pinebook-pro-rk3399 +pinephone-pro-rk3399 +pine_h64 +pinephone +pinetab +poplar +puma-rk3399 +roc-cc-rk3328 +rock64-rk3328 +rock960-rk3399 +rock-pi-4c-rk3399 +rock-pi-4-rk3399 +rock-pi-e-rk3328 +rock-pi-n10-rk3399pro +rockpro64-rk3399 +roc-pc-mezzanine-rk3399 +roc-pc-rk3399 +rpi_3 +rpi_4 +rpi_arm64 +starqltechn +sopine_baseboard +tanix_tx6 +teres_i +turris_mox +vexpress_aemv8a_juno +xilinx_zynqmp_virt diff --git a/SOURCES/rockchip-Add-initial-support-for-the-PinePhone-Pro.patch b/SOURCES/rockchip-Add-initial-support-for-the-PinePhone-Pro.patch new file mode 100644 index 0000000..3dc7614 --- /dev/null +++ b/SOURCES/rockchip-Add-initial-support-for-the-PinePhone-Pro.patch @@ -0,0 +1,886 @@ +From: Martijn Braam +Subject: [PATCH] rockchip: Add initial support for the PinePhone Pro +Date: Thu, 21 Oct 2021 19:18:43 +0200 + +This is a new device by PINE64 that's very similar to the Pinebook Pro +that's already supported. + +Specification: +- Rockchip RK3399 +- 4GB Dual-Channel LPDDR4 +- 128GB eMMC +- mSD card slot +- AP6255 for 802.11ac WiFi and Bluetooth +- 6 inch 720*1440 DSI display +- Quectel EG25g usb modem +- Type-C port with alt-mode display (DP 1.2) and PD charging. + +Signed-off-by: Martijn Braam +--- + + arch/arm/dts/Makefile | 1 + + arch/arm/dts/rk3399-pinephone-pro-u-boot.dtsi | 44 ++ + arch/arm/dts/rk3399-pinephone-pro.dts | 520 ++++++++++++++++++ + arch/arm/mach-rockchip/rk3399/Kconfig | 8 + + board/pine64/pinephone-pro-rk3399/Kconfig | 15 + + board/pine64/pinephone-pro-rk3399/MAINTAINERS | 8 + + board/pine64/pinephone-pro-rk3399/Makefile | 1 + + .../pinephone-pro-rk3399.c | 57 ++ + configs/pinephone-pro-rk3399_defconfig | 92 ++++ + include/configs/pinephone-pro-rk3399.h | 23 + + 10 files changed, 769 insertions(+) + create mode 100644 arch/arm/dts/rk3399-pinephone-pro-u-boot.dtsi + create mode 100644 arch/arm/dts/rk3399-pinephone-pro.dts + create mode 100644 board/pine64/pinephone-pro-rk3399/Kconfig + create mode 100644 board/pine64/pinephone-pro-rk3399/MAINTAINERS + create mode 100644 board/pine64/pinephone-pro-rk3399/Makefile + create mode 100644 board/pine64/pinephone-pro-rk3399/pinephone-pro-rk3399.c + create mode 100644 configs/pinephone-pro-rk3399_defconfig + create mode 100644 include/configs/pinephone-pro-rk3399.h + +diff --git a/arch/arm/dts/Makefile b/arch/arm/dts/Makefile +index ed3d360bb1..3206370226 100644 +--- a/arch/arm/dts/Makefile ++++ b/arch/arm/dts/Makefile +@@ -137,6 +137,7 @@ dtb-$(CONFIG_ROCKCHIP_RK3399) += \ + rk3399-nanopi-r4s.dtb \ + rk3399-orangepi.dtb \ + rk3399-pinebook-pro.dtb \ ++ rk3399-pinephone-pro.dtb \ + rk3399-puma-haikou.dtb \ + rk3399-roc-pc.dtb \ + rk3399-roc-pc-mezzanine.dtb \ +diff --git a/arch/arm/dts/rk3399-pinephone-pro-u-boot.dtsi b/arch/arm/dts/rk3399-pinephone-pro-u-boot.dtsi +new file mode 100644 +index 0000000000..9d44db5978 +--- /dev/null ++++ b/arch/arm/dts/rk3399-pinephone-pro-u-boot.dtsi +@@ -0,0 +1,44 @@ ++// SPDX-License-Identifier: GPL-2.0+ ++/* ++ * Copyright (C) 2019 Peter Robinson ++ * Copyright (C) 2021 Martijn Braam ++ */ ++ ++#include "rk3399-u-boot.dtsi" ++#include "rk3399-sdram-lpddr4-100.dtsi" ++ ++/ { ++ aliases { ++ spi0 = &spi1; ++ }; ++ ++ chosen { ++ u-boot,spl-boot-order = "same-as-spl", &sdhci, &sdmmc; ++ }; ++ ++ config { ++ u-boot,spl-payload-offset = <0x60000>; /* @ 384KB */ ++ }; ++}; ++ ++&i2c0 { ++ u-boot,dm-pre-reloc; ++}; ++ ++&rk818 { ++ u-boot,dm-pre-reloc; ++}; ++ ++&rng { ++ status = "okay"; ++}; ++ ++&sdhci { ++ max-frequency = <25000000>; ++ u-boot,dm-pre-reloc; ++}; ++ ++&sdmmc { ++ max-frequency = <20000000>; ++ u-boot,dm-pre-reloc; ++}; +diff --git a/arch/arm/dts/rk3399-pinephone-pro.dts b/arch/arm/dts/rk3399-pinephone-pro.dts +new file mode 100644 +index 0000000000..3fe1845ced +--- /dev/null ++++ b/arch/arm/dts/rk3399-pinephone-pro.dts +@@ -0,0 +1,520 @@ ++// SPDX-License-Identifier: (GPL-2.0+ OR MIT) ++/* ++ * Copyright (c) 2021 Martijn Braam ++ */ ++ ++/dts-v1/; ++#include "rk3399.dtsi" ++#include "rk3399-opp.dtsi" ++ ++/ { ++ model = "Pine64 PinePhone Pro"; ++ compatible = "pine64,pinephone-pro", "rockchip,rk3399"; ++ ++ chosen { ++ stdout-path = "serial2:1500000n8"; ++ }; ++ ++ sdio_pwrseq: sdio-pwrseq { ++ compatible = "mmc-pwrseq-simple"; ++ pinctrl-names = "default"; ++ }; ++ ++ /* Power tree */ ++ /* Root power source */ ++ vcc_sysin: vcc-sysin { ++ compatible = "regulator-fixed"; ++ regulator-name = "vcc_sysin"; ++ regulator-always-on; ++ regulator-boot-on; ++ }; ++ ++ /* Main 3.3v supply */ ++ vcc3v3_sys: vcc3v3-sys { ++ compatible = "regulator-fixed"; ++ regulator-name = "vcc3v3_sys"; ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-min-microvolt = <3300000>; ++ regulator-max-microvolt = <3300000>; ++ vin-supply = <&vcc_sysin>; ++ ++ regulator-state-mem { ++ regulator-on-in-suspend; ++ }; ++ }; ++}; ++ ++&cpu_l0 { ++ cpu-supply = <&vdd_cpu_l>; ++}; ++ ++&cpu_l1 { ++ cpu-supply = <&vdd_cpu_l>; ++}; ++ ++&cpu_l2 { ++ cpu-supply = <&vdd_cpu_l>; ++}; ++ ++&cpu_l3 { ++ cpu-supply = <&vdd_cpu_l>; ++}; ++ ++&cpu_b0 { ++ cpu-supply = <&vdd_cpu_b>; ++}; ++ ++&cpu_b1 { ++ cpu-supply = <&vdd_cpu_b>; ++}; ++ ++&emmc_phy { ++ status = "okay"; ++}; ++ ++&gpu { ++ mali-supply = <&vdd_gpu>; ++ status = "okay"; ++}; ++ ++&i2c0 { ++ clock-frequency = <400000>; ++ i2c-scl-rising-time-ns = <168>; ++ i2c-scl-falling-time-ns = <4>; ++ status = "okay"; ++ ++ rk818: pmic@1c { ++ compatible = "rockchip,rk818"; ++ reg = <0x1c>; ++ interrupt-parent = <&gpio1>; ++ interrupts = ; ++ #clock-cells = <1>; ++ clock-output-names = "xin32k", "rk808-clkout2"; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&pmic_int_l>; ++ rockchip,system-power-controller; ++ wakeup-source; ++ ++ vcc1-supply = <&vcc_sysin>; ++ vcc2-supply = <&vcc_sysin>; ++ vcc3-supply = <&vcc_sysin>; ++ vcc4-supply = <&vcc_sysin>; ++ vcc6-supply = <&vcc_sysin>; ++ vcc7-supply = <&vcc3v3_sys>; ++ vcc8-supply = <&vcc_sysin>; ++ vcc9-supply = <&vcc3v3_sys>; ++ ++ regulators { ++ vdd_cpu_l: DCDC_REG1 { ++ regulator-name = "vdd_cpu_1"; ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-min-microvolt = <750000>; ++ regulator-max-microvolt = <1350000>; ++ regulator-ramp-delay = <6001>; ++ regulator-state-mem { ++ regulator-off-in-suspend; ++ }; ++ }; ++ ++ vdd_center: DCDC_REG2 { ++ regulator-name = "vdd_center"; ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-min-microvolt = <800000>; ++ regulator-max-microvolt = <1350000>; ++ regulator-ramp-delay = <6001>; ++ regulator-state-mem { ++ regulator-off-in-suspend; ++ }; ++ }; ++ ++ vcc_ddr: DCDC_REG3 { ++ regulator-name = "vcc_ddr"; ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-state-mem { ++ regulator-on-in-suspend; ++ }; ++ }; ++ ++ vcc_1v8: DCDC_REG4 { ++ regulator-name = "vcc_1v8"; ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-min-microvolt = <1800000>; ++ regulator-max-microvolt = <1800000>; ++ regulator-state-mem { ++ regulator-on-in-suspend; ++ regulator-suspend-microvolt = <1800000>; ++ }; ++ }; ++ ++ vcca3v0_codec: LDO_REG1 { ++ regulator-name = "vcca3v0_codec"; ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-min-microvolt = <3000000>; ++ regulator-max-microvolt = <3000000>; ++ regulator-state-mem { ++ regulator-off-in-suspend; ++ }; ++ }; ++ ++ vcc3v0_touch: LDO_REG2 { ++ regulator-name = "vcc3v0_touch"; ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-min-microvolt = <3000000>; ++ regulator-max-microvolt = <3000000>; ++ regulator-state-mem { ++ regulator-off-in-suspend; ++ }; ++ }; ++ ++ vcca1v8_codec: LDO_REG3 { ++ regulator-name = "vcca1v8_codec"; ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-min-microvolt = <1800000>; ++ regulator-max-microvolt = <1800000>; ++ regulator-state-mem { ++ regulator-off-in-suspend; ++ }; ++ }; ++ ++ vcc_power_on: LDO_REG4 { ++ regulator-name = "vcc_power_on"; ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-min-microvolt = <3300000>; ++ regulator-max-microvolt = <3300000>; ++ regulator-state-mem { ++ regulator-on-in-suspend; ++ regulator-suspend-microvolt = <3300000>; ++ }; ++ }; ++ ++ vcc_3v0: LDO_REG5 { ++ regulator-name = "vcc_3v0"; ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-min-microvolt = <3000000>; ++ regulator-max-microvolt = <3000000>; ++ regulator-state-mem { ++ regulator-on-in-suspend; ++ regulator-suspend-microvolt = <3000000>; ++ }; ++ }; ++ ++ vcc_1v5: LDO_REG6 { ++ regulator-name = "vcc_1v5"; ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-min-microvolt = <1500000>; ++ regulator-max-microvolt = <1500000>; ++ regulator-state-mem { ++ regulator-on-in-suspend; ++ regulator-suspend-microvolt = <1500000>; ++ }; ++ }; ++ ++ vcc1v8_dvp: LDO_REG7 { ++ regulator-name = "vcc1v8_dvp"; ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-min-microvolt = <1800000>; ++ regulator-max-microvolt = <1800000>; ++ regulator-state-mem { ++ regulator-off-in-suspend; ++ }; ++ }; ++ ++ vcc3v3_s3: LDO_REG8 { ++ regulator-name = "vcc3v3_s3"; ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-min-microvolt = <3300000>; ++ regulator-max-microvolt = <3300000>; ++ regulator-state-mem { ++ regulator-off-in-suspend; ++ }; ++ }; ++ ++ vcc_sd: LDO_REG9 { ++ regulator-name = "vcc_sd"; ++ regulator-min-microvolt = <1800000>; ++ regulator-max-microvolt = <3300000>; ++ regulator-state-mem { ++ regulator-on-in-suspend; ++ regulator-suspend-microvolt = <3300000>; ++ }; ++ }; ++ ++ vcc3v3_s0: SWITCH_REG { ++ regulator-name = "vcc3v3_s0"; ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-state-mem { ++ regulator-on-in-suspend; ++ }; ++ }; ++ ++ boost_otg: DCDC_BOOST { ++ regulator-name = "boost_otg"; ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-min-microvolt = <5000000>; ++ regulator-max-microvolt = <5000000>; ++ regulator-state-mem { ++ regulator-on-in-suspend; ++ regulator-suspend-microvolt = <5000000>; ++ }; ++ }; ++ ++ otg_switch: OTG_SWITCH { ++ regulator-name = "otg_switch"; ++ }; ++ }; ++ }; ++ ++ vdd_cpu_b: regulator@40 { ++ compatible = "silergy,syr827"; ++ reg = <0x40>; ++ fcs,suspend-voltage-selector = <1>; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&vsel1_pin>; ++ regulator-name = "vdd_cpu_b"; ++ regulator-min-microvolt = <712500>; ++ regulator-max-microvolt = <1500000>; ++ regulator-ramp-delay = <1000>; ++ regulator-always-on; ++ regulator-boot-on; ++ ++ regulator-state-mem { ++ regulator-off-in-suspend; ++ }; ++ }; ++ ++ vdd_gpu: regulator@41 { ++ compatible = "silergy,syr828"; ++ reg = <0x41>; ++ fcs,suspend-voltage-selector = <1>; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&vsel2_pin>; ++ regulator-name = "vdd_gpu"; ++ regulator-min-microvolt = <712500>; ++ regulator-max-microvolt = <1500000>; ++ regulator-ramp-delay = <1000>; ++ regulator-always-on; ++ regulator-boot-on; ++ ++ regulator-state-mem { ++ regulator-off-in-suspend; ++ }; ++ }; ++}; ++ ++&i2c1 { ++ i2c-scl-rising-time-ns = <300>; ++ i2c-scl-falling-time-ns = <15>; ++ status = "okay"; ++}; ++ ++&i2c3 { ++ i2c-scl-rising-time-ns = <450>; ++ i2c-scl-falling-time-ns = <15>; ++ status = "okay"; ++}; ++ ++&i2c4 { ++ i2c-scl-rising-time-ns = <600>; ++ i2c-scl-falling-time-ns = <20>; ++ status = "okay"; ++ ++ fusb0: typec-portc@22 { ++ compatible = "fcs,fusb302"; ++ reg = <0x22>; ++ interrupt-parent = <&gpio1>; ++ interrupts = ; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&fusb0_int>; ++ status = "okay"; ++ }; ++}; ++ ++&io_domains { ++ status = "okay"; ++ ++ bt656-supply = <&vcc1v8_dvp>; ++ audio-supply = <&vcca1v8_codec>; ++ sdmmc-supply = <&vcc_sd>; ++ gpio1830-supply = <&vcc_3v0>; ++}; ++ ++&pmu_io_domains { ++ pmu1830-supply = <&vcc_3v0>; ++ status = "okay"; ++}; ++ ++&pinctrl { ++ bt { ++ bt_enable_h: bt-enable-h { ++ rockchip,pins = <0 RK_PB1 RK_FUNC_GPIO &pcfg_pull_none>; ++ }; ++ ++ bt_host_wake_l: bt-host-wake-l { ++ rockchip,pins = <0 RK_PA4 RK_FUNC_GPIO &pcfg_pull_down>; ++ }; ++ ++ bt_wake_l: bt-wake-l { ++ rockchip,pins = <2 RK_PD3 RK_FUNC_GPIO &pcfg_pull_none>; ++ }; ++ }; ++ ++ buttons { ++ pwrbtn: pwrbtn { ++ rockchip,pins = <0 RK_PA5 RK_FUNC_GPIO &pcfg_pull_up>; ++ }; ++ }; ++ ++ fusb302x { ++ fusb0_int: fusb0-int { ++ rockchip,pins = <1 RK_PA2 RK_FUNC_GPIO &pcfg_pull_up>; ++ }; ++ }; ++ ++ leds { ++ work_led_pin: work-led-pin { ++ rockchip,pins = <0 RK_PB3 RK_FUNC_GPIO &pcfg_pull_none>; ++ }; ++ ++ diy_led_pin: diy-led-pin { ++ rockchip,pins = <0 RK_PA2 RK_FUNC_GPIO &pcfg_pull_none>; ++ }; ++ }; ++ ++ pcie { ++ pcie_perst: pcie-perst { ++ rockchip,pins = <2 RK_PD4 RK_FUNC_GPIO &pcfg_pull_none>; ++ }; ++ ++ pcie_pwr_en: pcie-pwr-en { ++ rockchip,pins = <1 RK_PD0 RK_FUNC_GPIO &pcfg_pull_none>; ++ }; ++ }; ++ ++ pmic { ++ pmic_int_l: pmic-int-l { ++ rockchip,pins = <1 RK_PC5 RK_FUNC_GPIO &pcfg_pull_up>; ++ }; ++ ++ vsel1_pin: vsel1-pin { ++ rockchip,pins = <1 RK_PC1 RK_FUNC_GPIO &pcfg_pull_down>; ++ }; ++ ++ vsel2_pin: vsel2-pin { ++ rockchip,pins = <1 RK_PB6 RK_FUNC_GPIO &pcfg_pull_down>; ++ }; ++ }; ++ ++ sdcard { ++ sdmmc0_pwr_h: sdmmc0-pwr-h { ++ rockchip,pins = <0 RK_PA1 RK_FUNC_GPIO &pcfg_pull_none>; ++ }; ++ ++ }; ++ ++ sdio-pwrseq { ++ wifi_enable_h: wifi-enable-h { ++ rockchip,pins = <0 RK_PB2 RK_FUNC_GPIO &pcfg_pull_none>; ++ }; ++ }; ++ ++ usb-typec { ++ vcc5v0_typec_en: vcc5v0_typec_en { ++ rockchip,pins = <1 RK_PA3 RK_FUNC_GPIO &pcfg_pull_up>; ++ }; ++ }; ++ ++ usb2 { ++ vcc5v0_host_en: vcc5v0-host-en { ++ rockchip,pins = <4 RK_PD2 RK_FUNC_GPIO &pcfg_pull_none>; ++ }; ++ }; ++}; ++ ++&pwm0 { ++ status = "okay"; ++}; ++ ++&pwm1 { ++ status = "okay"; ++}; ++ ++&pwm2 { ++ status = "okay"; ++}; ++ ++&sdio0 { ++ bus-width = <4>; ++ cap-sd-highspeed; ++ cap-sdio-irq; ++ disable-wp; ++ keep-power-in-suspend; ++ mmc-pwrseq = <&sdio_pwrseq>; ++ non-removable; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&sdio0_bus4 &sdio0_cmd &sdio0_clk>; ++ sd-uhs-sdr104; ++ status = "okay"; ++}; ++ ++&sdmmc { ++ bus-width = <4>; ++ cap-sd-highspeed; ++ cd-gpios = <&gpio0 7 GPIO_ACTIVE_LOW>; ++ disable-wp; ++ max-frequency = <150000000>; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&sdmmc_clk &sdmmc_cmd &sdmmc_bus4>; ++ vmmc-supply = <&vcc3v3_s3>; ++ vqmmc-supply = <&vcc_1v8>; ++ status = "okay"; ++}; ++ ++&sdhci { ++ bus-width = <8>; ++ mmc-hs200-1_8v; ++ non-removable; ++ status = "okay"; ++}; ++ ++&tsadc { ++ /* tshut mode 0:CRU 1:GPIO */ ++ rockchip,hw-tshut-mode = <1>; ++ /* tshut polarity 0:LOW 1:HIGH */ ++ rockchip,hw-tshut-polarity = <1>; ++ status = "okay"; ++}; ++ ++&uart2 { ++ status = "okay"; ++}; ++ ++&vopb { ++ status = "okay"; ++}; ++ ++&vopb_mmu { ++ status = "okay"; ++}; ++ ++&vopl { ++ status = "okay"; ++}; ++ ++&vopl_mmu { ++ status = "okay"; ++}; +diff --git a/arch/arm/mach-rockchip/rk3399/Kconfig b/arch/arm/mach-rockchip/rk3399/Kconfig +index 17628f9171..3ba603ca80 100644 +--- a/arch/arm/mach-rockchip/rk3399/Kconfig ++++ b/arch/arm/mach-rockchip/rk3399/Kconfig +@@ -28,6 +28,13 @@ config TARGET_PINEBOOK_PRO_RK3399 + with 4Gb RAM, onboard eMMC, USB-C, a USB3 and USB2 port, + 1920*1080 screen and all the usual laptop features. + ++config TARGET_PINEPHONE_PRO_RK3399 ++ bool "PinePhone Pro" ++ help ++ PinePhone Pro is a phone based on the Rockchip rk3399 SoC ++ with 4Gb RAM, onboard eMMC, USB-C, a headphone jack, ++ 720x1440 screen and an external Quectel USB modem. ++ + config TARGET_PUMA_RK3399 + bool "Theobroma Systems RK3399-Q7 (Puma)" + help +@@ -154,6 +161,7 @@ endif # BOOTCOUNT_LIMIT + source "board/firefly/roc-pc-rk3399/Kconfig" + source "board/google/gru/Kconfig" + source "board/pine64/pinebook-pro-rk3399/Kconfig" ++source "board/pine64/pinephone-pro-rk3399/Kconfig" + source "board/pine64/rockpro64_rk3399/Kconfig" + source "board/rockchip/evb_rk3399/Kconfig" + source "board/theobroma-systems/puma_rk3399/Kconfig" +diff --git a/board/pine64/pinephone-pro-rk3399/Kconfig b/board/pine64/pinephone-pro-rk3399/Kconfig +new file mode 100644 +index 0000000000..13d6465ae6 +--- /dev/null ++++ b/board/pine64/pinephone-pro-rk3399/Kconfig +@@ -0,0 +1,15 @@ ++if TARGET_PINEPHONE_PRO_RK3399 ++ ++config SYS_BOARD ++ default "pinephone-pro-rk3399" ++ ++config SYS_VENDOR ++ default "pine64" ++ ++config SYS_CONFIG_NAME ++ default "pinephone-pro-rk3399" ++ ++config BOARD_SPECIFIC_OPTIONS ++ def_bool y ++ ++endif +diff --git a/board/pine64/pinephone-pro-rk3399/MAINTAINERS b/board/pine64/pinephone-pro-rk3399/MAINTAINERS +new file mode 100644 +index 0000000000..9ca4fc4cbe +--- /dev/null ++++ b/board/pine64/pinephone-pro-rk3399/MAINTAINERS +@@ -0,0 +1,8 @@ ++PINEPHONE_PRO ++M: Martijn Braam ++S: Maintained ++F: board/pine64/rk3399-pinephone-pro/ ++F: include/configs/rk3399-pinephone-pro.h ++F: arch/arm/dts/rk3399-pinephone-pro.dts ++F: arch/arm/dts/rk3399-pinephone-pro-u-boot.dtsi ++F: configs/pinephone-pro-rk3399_defconfig +diff --git a/board/pine64/pinephone-pro-rk3399/Makefile b/board/pine64/pinephone-pro-rk3399/Makefile +new file mode 100644 +index 0000000000..8d9203053e +--- /dev/null ++++ b/board/pine64/pinephone-pro-rk3399/Makefile +@@ -0,0 +1 @@ ++obj-y += pinephone-pro-rk3399.o +diff --git a/board/pine64/pinephone-pro-rk3399/pinephone-pro-rk3399.c b/board/pine64/pinephone-pro-rk3399/pinephone-pro-rk3399.c +new file mode 100644 +index 0000000000..8efeb6ea3d +--- /dev/null ++++ b/board/pine64/pinephone-pro-rk3399/pinephone-pro-rk3399.c +@@ -0,0 +1,57 @@ ++// SPDX-License-Identifier: GPL-2.0+ ++/* ++ * (C) Copyright 2019 Vasily Khoruzhick ++ * (C) Copyright 2021 Martijn Braam ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#define GRF_IO_VSEL_BT565_SHIFT 0 ++#define PMUGRF_CON0_VSEL_SHIFT 8 ++ ++#ifdef CONFIG_MISC_INIT_R ++static void setup_iodomain(void) ++{ ++ struct rk3399_grf_regs *grf = ++ syscon_get_first_range(ROCKCHIP_SYSCON_GRF); ++ struct rk3399_pmugrf_regs *pmugrf = ++ syscon_get_first_range(ROCKCHIP_SYSCON_PMUGRF); ++ ++ /* BT565 is in 1.8v domain */ ++ rk_setreg(&grf->io_vsel, 1 << GRF_IO_VSEL_BT565_SHIFT); ++ ++ /* Set GPIO1 1.8v/3.0v source select to PMU1830_VOL */ ++ rk_setreg(&pmugrf->soc_con0, 1 << PMUGRF_CON0_VSEL_SHIFT); ++} ++ ++int misc_init_r(void) ++{ ++ const u32 cpuid_offset = 0x7; ++ const u32 cpuid_length = 0x10; ++ u8 cpuid[cpuid_length]; ++ int ret; ++ ++ setup_iodomain(); ++ ++ ret = rockchip_cpuid_from_efuse(cpuid_offset, cpuid_length, cpuid); ++ if (ret) ++ return ret; ++ ++ ret = rockchip_cpuid_set(cpuid, cpuid_length); ++ if (ret) ++ return ret; ++ ++ ret = rockchip_setup_macaddr(); ++ ++ return ret; ++} ++ ++#endif +diff --git a/configs/pinephone-pro-rk3399_defconfig b/configs/pinephone-pro-rk3399_defconfig +new file mode 100644 +index 0000000000..2cf80f7d35 +--- /dev/null ++++ b/configs/pinephone-pro-rk3399_defconfig +@@ -0,0 +1,92 @@ ++CONFIG_ARM=y ++CONFIG_SKIP_LOWLEVEL_INIT=y ++CONFIG_ARCH_ROCKCHIP=y ++CONFIG_SYS_TEXT_BASE=0x00200000 ++CONFIG_NR_DRAM_BANKS=1 ++CONFIG_ENV_SIZE=0x8000 ++CONFIG_ROCKCHIP_RK3399=y ++CONFIG_TARGET_PINEPHONE_PRO_RK3399=y ++CONFIG_DEBUG_UART_BASE=0xFF1A0000 ++CONFIG_DEBUG_UART_CLOCK=24000000 ++CONFIG_SPL_SPI_FLASH_SUPPORT=y ++CONFIG_SPL_SPI_SUPPORT=y ++CONFIG_DEFAULT_DEVICE_TREE="rk3399-pinephone-pro" ++CONFIG_DEBUG_UART=y ++CONFIG_SYS_LOAD_ADDR=0x800800 ++CONFIG_BOOTDELAY=3 ++CONFIG_USE_PREBOOT=y ++CONFIG_DEFAULT_FDT_FILE="rockchip/rk3399-pinephone-pro.dtb" ++CONFIG_DISPLAY_BOARDINFO_LATE=y ++CONFIG_MISC_INIT_R=y ++# CONFIG_SPL_RAW_IMAGE_SUPPORT is not set ++CONFIG_SPL_STACK_R=y ++CONFIG_SPL_STACK_R_MALLOC_SIMPLE_LEN=0x10000 ++CONFIG_SPL_MTD_SUPPORT=y ++CONFIG_SPL_SPI_LOAD=y ++CONFIG_TPL=y ++CONFIG_CMD_BOOTZ=y ++CONFIG_CMD_GPIO=y ++CONFIG_CMD_GPT=y ++CONFIG_CMD_I2C=y ++CONFIG_CMD_MMC=y ++CONFIG_CMD_PCI=y ++CONFIG_CMD_USB=y ++# CONFIG_CMD_SETEXPR is not set ++CONFIG_CMD_TIME=y ++CONFIG_CMD_PMIC=y ++CONFIG_CMD_REGULATOR=y ++CONFIG_SPL_OF_CONTROL=y ++CONFIG_OF_SPL_REMOVE_PROPS="pinctrl-0 pinctrl-names clock-names interrupt-parent assigned-clocks assigned-clock-rates assigned-clock-parents" ++CONFIG_ENV_IS_IN_SPI_FLASH=y ++CONFIG_SYS_RELOC_GD_ENV_ADDR=y ++CONFIG_ROCKCHIP_GPIO=y ++CONFIG_SYS_I2C_ROCKCHIP=y ++CONFIG_DM_KEYBOARD=y ++CONFIG_LED=y ++CONFIG_LED_GPIO=y ++CONFIG_MISC=y ++CONFIG_ROCKCHIP_EFUSE=y ++CONFIG_MMC_DW=y ++CONFIG_MMC_DW_ROCKCHIP=y ++CONFIG_MMC_SDHCI=y ++CONFIG_MMC_SDHCI_SDMA=y ++CONFIG_MMC_SDHCI_ROCKCHIP=y ++CONFIG_SF_DEFAULT_SPEED=20000000 ++CONFIG_SPI_FLASH_GIGADEVICE=y ++CONFIG_SPI_FLASH_WINBOND=y ++CONFIG_DM_ETH=y ++CONFIG_PHY_ROCKCHIP_INNO_USB2=y ++CONFIG_PHY_ROCKCHIP_TYPEC=y ++CONFIG_DM_PMIC_FAN53555=y ++CONFIG_PMIC_RK8XX=y ++CONFIG_REGULATOR_PWM=y ++CONFIG_REGULATOR_RK8XX=y ++CONFIG_PWM_ROCKCHIP=y ++CONFIG_RAM_RK3399_LPDDR4=y ++CONFIG_DM_RESET=y ++CONFIG_DM_RNG=y ++CONFIG_RNG_ROCKCHIP=y ++CONFIG_BAUDRATE=1500000 ++CONFIG_DEBUG_UART_SHIFT=2 ++CONFIG_ROCKCHIP_SPI=y ++CONFIG_SYSRESET=y ++CONFIG_USB=y ++CONFIG_USB_XHCI_HCD=y ++CONFIG_USB_XHCI_DWC3=y ++CONFIG_USB_EHCI_HCD=y ++CONFIG_USB_EHCI_GENERIC=y ++CONFIG_USB_OHCI_HCD=y ++CONFIG_USB_OHCI_GENERIC=y ++CONFIG_USB_DWC3=y ++CONFIG_USB_DWC3_GENERIC=y ++CONFIG_USB_KEYBOARD=y ++CONFIG_SYS_USB_EVENT_POLL_VIA_INT_QUEUE=y ++CONFIG_USB_HOST_ETHER=y ++CONFIG_USB_ETHER_ASIX=y ++CONFIG_USB_ETHER_RTL8152=y ++CONFIG_DM_VIDEO=y ++CONFIG_DISPLAY=y ++CONFIG_VIDEO_ROCKCHIP=y ++CONFIG_DISPLAY_ROCKCHIP_EDP=y ++CONFIG_SPL_TINY_MEMSET=y ++CONFIG_ERRNO_STR=y +diff --git a/include/configs/pinephone-pro-rk3399.h b/include/configs/pinephone-pro-rk3399.h +new file mode 100644 +index 0000000000..fefa793fdd +--- /dev/null ++++ b/include/configs/pinephone-pro-rk3399.h +@@ -0,0 +1,23 @@ ++/* SPDX-License-Identifier: GPL-2.0+ */ ++/* ++ * Copyright (C) 2016 Rockchip Electronics Co., Ltd ++ * Copyright (C) 2020 Peter Robinson ++ * Copyright (C) 2021 Martijn Braam ++ */ ++ ++#ifndef __PINEPHONE_PRO_RK3399_H ++#define __PINEPHONE_PRO_RK3399_H ++ ++#define ROCKCHIP_DEVICE_SETTINGS \ ++ "stdin=serial,usbkbd\0" \ ++ "stdout=serial,vidconsole\0" \ ++ "stderr=serial,vidconsole\0" ++ ++#include ++ ++#define SDRAM_BANK_SIZE (2UL << 30) ++ ++#define CONFIG_USB_OHCI_NEW ++#define CONFIG_SYS_USB_OHCI_MAX_ROOT_PORTS 2 ++ ++#endif diff --git a/SOURCES/rpi-Enable-using-the-DT-provided-by-the-Raspberry-Pi.patch b/SOURCES/rpi-Enable-using-the-DT-provided-by-the-Raspberry-Pi.patch new file mode 100644 index 0000000..c156e4d --- /dev/null +++ b/SOURCES/rpi-Enable-using-the-DT-provided-by-the-Raspberry-Pi.patch @@ -0,0 +1,96 @@ +From f10f94831450671a77f61fe413b4a57459963860 Mon Sep 17 00:00:00 2001 +From: Peter Robinson +Date: Mon, 10 Aug 2020 22:20:29 +0100 +Subject: [PATCH] rpi: Use firmware provided device tree + +Signed-off-by: Peter Robinson +--- + configs/rpi_0_w_defconfig | 2 +- + configs/rpi_2_defconfig | 2 +- + configs/rpi_3_32b_defconfig | 2 +- + configs/rpi_3_b_plus_defconfig | 2 +- + configs/rpi_3_defconfig | 2 +- + configs/rpi_defconfig | 2 +- + 6 files changed, 6 insertions(+), 6 deletions(-) + +diff --git a/configs/rpi_0_w_defconfig b/configs/rpi_0_w_defconfig +index bba5e12b12..0241f4c6d3 100644 +--- a/configs/rpi_0_w_defconfig ++++ b/configs/rpi_0_w_defconfig +@@ -17,7 +17,7 @@ CONFIG_CMD_GPIO=y + CONFIG_CMD_MMC=y + CONFIG_CMD_USB=y + CONFIG_CMD_FS_UUID=y +-CONFIG_OF_EMBED=y ++CONFIG_OF_BOARD=y + CONFIG_ENV_FAT_DEVICE_AND_PART="0:1" + CONFIG_SYS_RELOC_GD_ENV_ADDR=y + CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y +diff --git a/configs/rpi_2_defconfig b/configs/rpi_2_defconfig +index 1c2bbb29ce..9573e475f4 100644 +--- a/configs/rpi_2_defconfig ++++ b/configs/rpi_2_defconfig +@@ -17,7 +17,7 @@ CONFIG_CMD_GPIO=y + CONFIG_CMD_MMC=y + CONFIG_CMD_USB=y + CONFIG_CMD_FS_UUID=y +-CONFIG_OF_EMBED=y ++CONFIG_OF_BOARD=y + CONFIG_ENV_FAT_DEVICE_AND_PART="0:1" + CONFIG_SYS_RELOC_GD_ENV_ADDR=y + CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y +diff --git a/configs/rpi_3_32b_defconfig b/configs/rpi_3_32b_defconfig +index b8a3d17f43..252df994e6 100644 +--- a/configs/rpi_3_32b_defconfig ++++ b/configs/rpi_3_32b_defconfig +@@ -18,7 +18,7 @@ CONFIG_CMD_GPIO=y + CONFIG_CMD_MMC=y + CONFIG_CMD_USB=y + CONFIG_CMD_FS_UUID=y +-CONFIG_OF_EMBED=y ++CONFIG_OF_BOARD=y + CONFIG_ENV_FAT_DEVICE_AND_PART="0:1" + CONFIG_SYS_RELOC_GD_ENV_ADDR=y + CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y +diff --git a/configs/rpi_3_b_plus_defconfig b/configs/rpi_3_b_plus_defconfig +index 4c361438fa..3b2996a2f9 100644 +--- a/configs/rpi_3_b_plus_defconfig ++++ b/configs/rpi_3_b_plus_defconfig +@@ -18,7 +18,7 @@ CONFIG_CMD_GPIO=y + CONFIG_CMD_MMC=y + CONFIG_CMD_USB=y + CONFIG_CMD_FS_UUID=y +-CONFIG_OF_EMBED=y ++CONFIG_OF_BOARD=y + CONFIG_ENV_FAT_DEVICE_AND_PART="0:1" + CONFIG_SYS_RELOC_GD_ENV_ADDR=y + CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y +diff --git a/configs/rpi_3_defconfig b/configs/rpi_3_defconfig +index 9b281a4f15..1e9ee6122e 100644 +--- a/configs/rpi_3_defconfig ++++ b/configs/rpi_3_defconfig +@@ -18,7 +18,7 @@ CONFIG_CMD_GPIO=y + CONFIG_CMD_MMC=y + CONFIG_CMD_USB=y + CONFIG_CMD_FS_UUID=y +-CONFIG_OF_EMBED=y ++CONFIG_OF_BOARD=y + CONFIG_ENV_FAT_DEVICE_AND_PART="0:1" + CONFIG_SYS_RELOC_GD_ENV_ADDR=y + CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y +diff --git a/configs/rpi_defconfig b/configs/rpi_defconfig +index b5ad53c37b..223fc03275 100644 +--- a/configs/rpi_defconfig ++++ b/configs/rpi_defconfig +@@ -17,7 +17,7 @@ CONFIG_CMD_GPIO=y + CONFIG_CMD_MMC=y + CONFIG_CMD_USB=y + CONFIG_CMD_FS_UUID=y +-CONFIG_OF_EMBED=y ++CONFIG_OF_BOARD=y + CONFIG_ENV_FAT_DEVICE_AND_PART="0:1" + CONFIG_SYS_RELOC_GD_ENV_ADDR=y + CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y +-- +2.26.2 + diff --git a/SOURCES/rpi-bcm2835_sdhost-firmware-managed-clock.patch b/SOURCES/rpi-bcm2835_sdhost-firmware-managed-clock.patch new file mode 100644 index 0000000..d1c60e8 --- /dev/null +++ b/SOURCES/rpi-bcm2835_sdhost-firmware-managed-clock.patch @@ -0,0 +1,228 @@ +From f3a870bfa075fb880f5e018a0a5ae6f27ca8be49 Mon Sep 17 00:00:00 2001 +From: Vincent Fazio +Date: Mon, 13 Sep 2021 13:34:45 -0500 +Subject: [PATCH] mmc: bcm2835-host: let firmware manage the clock + +Newer firmware supports managing the sdhost clock divisor, so leverage +this feature if it is available. + +SET_SDHOST_CLOCK is largely undocumented except for its usage within the +Linux kernel, which this change is based on. + +https://github.com/raspberrypi/linux/commit/3cd16c39c718e2dda7885c4ed7a20118aed12524 + +Signed-off-by: Vincent Fazio +--- + arch/arm/mach-bcm283x/include/mach/mbox.h | 18 ++++++++ + arch/arm/mach-bcm283x/include/mach/msg.h | 10 +++++ + arch/arm/mach-bcm283x/msg.c | 30 +++++++++++++ + drivers/mmc/bcm2835_sdhost.c | 53 ++++++++++++++--------- + 4 files changed, 90 insertions(+), 21 deletions(-) + +diff --git a/arch/arm/mach-bcm283x/include/mach/mbox.h b/arch/arm/mach-bcm283x/include/mach/mbox.h +index 7dcac583cc4..9b1943fcfc4 100644 +--- a/arch/arm/mach-bcm283x/include/mach/mbox.h ++++ b/arch/arm/mach-bcm283x/include/mach/mbox.h +@@ -252,6 +252,24 @@ struct bcm2835_mbox_tag_get_clock_rate { + } body; + }; + ++#define BCM2835_MBOX_TAG_SET_SDHOST_CLOCK 0x00038042 ++ ++struct bcm2835_mbox_tag_set_sdhost_clock { ++ struct bcm2835_mbox_tag_hdr tag_hdr; ++ union { ++ struct { ++ u32 rate_hz; ++ u32 rate_1; ++ u32 rate_2; ++ } req; ++ struct { ++ u32 rate_hz; ++ u32 rate_1; ++ u32 rate_2; ++ } resp; ++ } body; ++}; ++ + #define BCM2835_MBOX_TAG_ALLOCATE_BUFFER 0x00040001 + + struct bcm2835_mbox_tag_allocate_buffer { +diff --git a/arch/arm/mach-bcm283x/include/mach/msg.h b/arch/arm/mach-bcm283x/include/mach/msg.h +index e45c1bf010f..ab37abdb6c6 100644 +--- a/arch/arm/mach-bcm283x/include/mach/msg.h ++++ b/arch/arm/mach-bcm283x/include/mach/msg.h +@@ -22,6 +22,16 @@ int bcm2835_power_on_module(u32 module); + */ + int bcm2835_get_mmc_clock(u32 clock_id); + ++/** ++ * bcm2835_set_sdhost_clock() - determine if firmware controls sdhost cdiv ++ * ++ * @rate_hz: Input clock frequency ++ * @rate_1: Returns a clock frequency ++ * @rate_2: Returns a clock frequency ++ * @return 0 of OK, -EIO on error ++ */ ++int bcm2835_set_sdhost_clock(u32 rate_hz, u32 *rate_1, u32 *rate_2); ++ + /** + * bcm2835_get_video_size() - get the current display size + * +diff --git a/arch/arm/mach-bcm283x/msg.c b/arch/arm/mach-bcm283x/msg.c +index e2badfecb09..8c1c36a5f15 100644 +--- a/arch/arm/mach-bcm283x/msg.c ++++ b/arch/arm/mach-bcm283x/msg.c +@@ -21,6 +21,12 @@ struct msg_get_clock_rate { + u32 end_tag; + }; + ++struct msg_set_sdhost_clock { ++ struct bcm2835_mbox_hdr hdr; ++ struct bcm2835_mbox_tag_set_sdhost_clock set_sdhost_clock; ++ u32 end_tag; ++}; ++ + struct msg_query { + struct bcm2835_mbox_hdr hdr; + struct bcm2835_mbox_tag_physical_w_h physical_w_h; +@@ -111,6 +117,30 @@ int bcm2835_get_mmc_clock(u32 clock_id) + return clock_rate; + } + ++int bcm2835_set_sdhost_clock(u32 rate_hz, u32 *rate_1, u32 *rate_2) ++{ ++ ALLOC_CACHE_ALIGN_BUFFER(struct msg_set_sdhost_clock, msg_sdhost_clk, 1); ++ int ret; ++ ++ BCM2835_MBOX_INIT_HDR(msg_sdhost_clk); ++ BCM2835_MBOX_INIT_TAG(&msg_sdhost_clk->set_sdhost_clock, SET_SDHOST_CLOCK); ++ ++ msg_sdhost_clk->set_sdhost_clock.body.req.rate_hz = rate_hz; ++ msg_sdhost_clk->set_sdhost_clock.body.req.rate_1 = *rate_1; ++ msg_sdhost_clk->set_sdhost_clock.body.req.rate_2 = *rate_2; ++ ++ ret = bcm2835_mbox_call_prop(BCM2835_MBOX_PROP_CHAN, &msg_sdhost_clk->hdr); ++ if (ret) { ++ printf("bcm2835: Could not query sdhost clock rate\n"); ++ return -EIO; ++ } ++ ++ *rate_1 = msg_sdhost_clk->set_sdhost_clock.body.resp.rate_1; ++ *rate_2 = msg_sdhost_clk->set_sdhost_clock.body.resp.rate_2; ++ ++ return 0; ++} ++ + int bcm2835_get_video_size(int *widthp, int *heightp) + { + ALLOC_CACHE_ALIGN_BUFFER(struct msg_query, msg_query, 1); +diff --git a/drivers/mmc/bcm2835_sdhost.c b/drivers/mmc/bcm2835_sdhost.c +index 894dbdd6861..3a9cd6f1eb2 100644 +--- a/drivers/mmc/bcm2835_sdhost.c ++++ b/drivers/mmc/bcm2835_sdhost.c +@@ -181,6 +181,7 @@ struct bcm2835_host { + struct udevice *dev; + struct mmc *mmc; + struct bcm2835_plat *plat; ++ unsigned int firmware_sets_cdiv:1; + }; + + static void bcm2835_dumpregs(struct bcm2835_host *host) +@@ -233,7 +234,7 @@ static void bcm2835_reset_internal(struct bcm2835_host *host) + msleep(20); + host->clock = 0; + writel(host->hcfg, host->ioaddr + SDHCFG); +- writel(host->cdiv, host->ioaddr + SDCDIV); ++ writel(SDCDIV_MAX_CDIV, host->ioaddr + SDCDIV); + } + + static int bcm2835_wait_transfer_complete(struct bcm2835_host *host) +@@ -598,6 +599,7 @@ static int bcm2835_transmit(struct bcm2835_host *host) + static void bcm2835_set_clock(struct bcm2835_host *host, unsigned int clock) + { + int div; ++ u32 clock_rate[2] = { 0 }; + + /* The SDCDIV register has 11 bits, and holds (div - 2). But + * in data mode the max is 50MHz wihout a minimum, and only +@@ -620,26 +622,34 @@ static void bcm2835_set_clock(struct bcm2835_host *host, unsigned int clock) + * clock divisor at all times. + */ + +- if (clock < 100000) { +- /* Can't stop the clock, but make it as slow as possible +- * to show willing +- */ +- host->cdiv = SDCDIV_MAX_CDIV; +- writel(host->cdiv, host->ioaddr + SDCDIV); +- return; +- } ++ if (host->firmware_sets_cdiv) { ++ bcm2835_set_sdhost_clock(clock, &clock_rate[0], &clock_rate[1]); ++ clock = max(clock_rate[0], clock_rate[1]); ++ } else { ++ if (clock < 100000) { ++ /* Can't stop the clock, but make it as slow as possible ++ * to show willing ++ */ ++ host->cdiv = SDCDIV_MAX_CDIV; ++ writel(host->cdiv, host->ioaddr + SDCDIV); ++ return; ++ } + +- div = host->max_clk / clock; +- if (div < 2) +- div = 2; +- if ((host->max_clk / div) > clock) +- div++; +- div -= 2; ++ div = host->max_clk / clock; ++ if (div < 2) ++ div = 2; ++ if ((host->max_clk / div) > clock) ++ div++; ++ div -= 2; + +- if (div > SDCDIV_MAX_CDIV) +- div = SDCDIV_MAX_CDIV; ++ if (div > SDCDIV_MAX_CDIV) ++ div = SDCDIV_MAX_CDIV; ++ ++ clock = host->max_clk / (div + 2); ++ host->cdiv = div; ++ writel(host->cdiv, host->ioaddr + SDCDIV); ++ } + +- clock = host->max_clk / (div + 2); + host->mmc->clock = clock; + + /* Calibrate some delays */ +@@ -647,9 +657,6 @@ static void bcm2835_set_clock(struct bcm2835_host *host, unsigned int clock) + host->ns_per_fifo_word = (1000000000 / clock) * + ((host->mmc->card_caps & MMC_MODE_4BIT) ? 8 : 32); + +- host->cdiv = div; +- writel(host->cdiv, host->ioaddr + SDCDIV); +- + /* Set the timeout to 500ms */ + writel(host->mmc->clock / 2, host->ioaddr + SDTOUT); + } +@@ -759,6 +766,7 @@ static int bcm2835_probe(struct udevice *dev) + struct bcm2835_host *host = dev_get_priv(dev); + struct mmc *mmc = mmc_get_mmc_dev(dev); + struct mmc_uclass_priv *upriv = dev_get_uclass_priv(dev); ++ u32 clock_rate[2] = { ~0 }; + + host->dev = dev; + host->mmc = mmc; +@@ -776,6 +784,9 @@ static int bcm2835_probe(struct udevice *dev) + + host->max_clk = bcm2835_get_mmc_clock(BCM2835_MBOX_CLOCK_ID_CORE); + ++ bcm2835_set_sdhost_clock(0, &clock_rate[0], &clock_rate[1]); ++ host->firmware_sets_cdiv = (clock_rate[0] != ~0); ++ + bcm2835_add_host(host); + + dev_dbg(dev, "%s -> OK\n", __func__); diff --git a/SOURCES/rpi-fallback-to-max-clock-for-mmc.patch b/SOURCES/rpi-fallback-to-max-clock-for-mmc.patch new file mode 100644 index 0000000..81ee372 --- /dev/null +++ b/SOURCES/rpi-fallback-to-max-clock-for-mmc.patch @@ -0,0 +1,77 @@ +From 71ba043e5c5575f3d86536acade70dab6599489b Mon Sep 17 00:00:00 2001 +From: Vincent Fazio +Date: Mon, 13 Sep 2021 11:22:30 -0500 +Subject: [PATCH] arm: rpi: fallback to max clock rate for MMC clock + +In rpi-firmware 25e2b597ebfb2495eab4816a276758dcc6ea21f1 and later, +the GET_CLOCK_RATE mailbox property was changed to return the last +value set by SET_CLOCK_RATE. + +https://github.com/raspberrypi/firmware/issues/1619#issuecomment-917025502 + +U-Boot does not call SET_CLOCK_RATE so bcm2835_get_mmc_clock will +return zero and can cause degraded MMC performance. + +Calling SET_CLOCK_RATE fixes the frequency of the clock to a specific +value and disables the firmware's clock scaling so is not an option. + +Instead, fallback to GET_MAX_CLOCK_RATE in bcm2835_get_mmc_clock if +GET_CLOCK_RATE returns zero. + +Signed-off-by: Vincent Fazio +--- + arch/arm/mach-bcm283x/include/mach/mbox.h | 2 ++ + arch/arm/mach-bcm283x/msg.c | 20 +++++++++++++++++++- + 2 files changed, 21 insertions(+), 1 deletion(-) + +diff --git a/arch/arm/mach-bcm283x/include/mach/mbox.h b/arch/arm/mach-bcm283x/include/mach/mbox.h +index 2ae2d3d97c3..7dcac583cc4 100644 +--- a/arch/arm/mach-bcm283x/include/mach/mbox.h ++++ b/arch/arm/mach-bcm283x/include/mach/mbox.h +@@ -224,6 +224,8 @@ struct bcm2835_mbox_tag_set_power_state { + }; + + #define BCM2835_MBOX_TAG_GET_CLOCK_RATE 0x00030002 ++#define BCM2835_MBOX_TAG_GET_MAX_CLOCK_RATE 0x00030004 ++#define BCM2835_MBOX_TAG_GET_MIN_CLOCK_RATE 0x00030007 + + #define BCM2835_MBOX_CLOCK_ID_EMMC 1 + #define BCM2835_MBOX_CLOCK_ID_UART 2 +diff --git a/arch/arm/mach-bcm283x/msg.c b/arch/arm/mach-bcm283x/msg.c +index 347aece3cd8..e2badfecb09 100644 +--- a/arch/arm/mach-bcm283x/msg.c ++++ b/arch/arm/mach-bcm283x/msg.c +@@ -75,6 +75,7 @@ int bcm2835_get_mmc_clock(u32 clock_id) + { + ALLOC_CACHE_ALIGN_BUFFER(struct msg_get_clock_rate, msg_clk, 1); + int ret; ++ u32 clock_rate = 0; + + ret = bcm2835_power_on_module(BCM2835_MBOX_POWER_DEVID_SDHCI); + if (ret) +@@ -90,7 +91,24 @@ int bcm2835_get_mmc_clock(u32 clock_id) + return -EIO; + } + +- return msg_clk->get_clock_rate.body.resp.rate_hz; ++ clock_rate = msg_clk->get_clock_rate.body.resp.rate_hz; ++ ++ if (clock_rate == 0) ++ { ++ BCM2835_MBOX_INIT_HDR(msg_clk); ++ BCM2835_MBOX_INIT_TAG(&msg_clk->get_clock_rate, GET_MAX_CLOCK_RATE); ++ msg_clk->get_clock_rate.body.req.clock_id = clock_id; ++ ++ ret = bcm2835_mbox_call_prop(BCM2835_MBOX_PROP_CHAN, &msg_clk->hdr); ++ if (ret) { ++ printf("bcm2835: Could not query max eMMC clock rate\n"); ++ return -EIO; ++ } ++ ++ clock_rate = msg_clk->get_clock_rate.body.resp.rate_hz; ++ } ++ ++ return clock_rate; + } + + int bcm2835_get_video_size(int *widthp, int *heightp) diff --git a/SOURCES/uefi-distro-load-FDT-from-any-partition-on-boot-device.patch b/SOURCES/uefi-distro-load-FDT-from-any-partition-on-boot-device.patch new file mode 100644 index 0000000..c28fdb0 --- /dev/null +++ b/SOURCES/uefi-distro-load-FDT-from-any-partition-on-boot-device.patch @@ -0,0 +1,84 @@ +From fd3434c754b3b8dddb345352a2434b6b8445343a Mon Sep 17 00:00:00 2001 +From: Peter Robinson +Date: Sun, 18 Apr 2021 14:05:45 +0100 +Subject: [PATCH] distro: load FDT from any partition on boot device + +In the EFI_LOADER boot path, we were only checking the FAT partition +containing the EFI payload for dtb files. But this is somewhat of a +fiction. In reality there will be one small (V)FAT partition containing +grub (or whatever the payload may be), and a second boot partition +containing kernel/initrd/fdt (typically ext4). It is this second +partition where we should be looking for a FDT to load. + +So instead scan all the partitions of the disk containing the EFI +payload. This matches where grub looks for kernel/initrd (barring +custom grub.cfg, in which case the user can use grub's 'devicetree' +command to load the correct FDT). + +The other option is somehow passing the ${fdtfile} to grub so that it +can load the FDT based on selected kernel version location (which grub +knows) and SoC/board specific ${fdtfile} (which grub does not know). + +Signed-off-by: Rob Clark +Signed-off-by: Peter Robinson +--- + include/config_distro_bootcmd.h | 35 ++++++++++++++++++++++----------- + 1 file changed, 23 insertions(+), 12 deletions(-) + +diff --git a/include/config_distro_bootcmd.h b/include/config_distro_bootcmd.h +index 2627c2a6a5..eadd1080b3 100644 +--- a/include/config_distro_bootcmd.h ++++ b/include/config_distro_bootcmd.h +@@ -148,26 +148,37 @@ + "fi\0" \ + \ + "load_efi_dtb=" \ +- "load ${devtype} ${devnum}:${distro_bootpart} " \ +- "${fdt_addr_r} ${prefix}${efi_fdtfile}\0" \ ++ "load ${devtype} ${devnum}:${dtb_devp} " \ ++ "${fdt_addr_r} ${prefix}${efi_fdtfile} && " \ ++ "run boot_efi_binary\0" \ + \ + "efi_dtb_prefixes=/ /dtb/ /dtb/current/\0" \ +- "scan_dev_for_efi=" \ ++ "scan_dev_for_dtb=" \ + "setenv efi_fdtfile ${fdtfile}; " \ + BOOTENV_EFI_SET_FDTFILE_FALLBACK \ +- "for prefix in ${efi_dtb_prefixes}; do " \ +- "if test -e ${devtype} " \ +- "${devnum}:${distro_bootpart} " \ +- "${prefix}${efi_fdtfile}; then " \ +- "run load_efi_dtb; " \ +- "fi;" \ +- "done;" \ +- "run boot_efi_bootmgr;" \ ++ "part list ${devtype} ${devnum} dtb_devplist; " \ ++ "env exists dtb_devplist || setenv dtb_devplist " \ ++ "${distro_bootpart}; " \ ++ "for dtb_devp in ${dtb_devplist}; do " \ ++ "for prefix in ${efi_dtb_prefixes}; do " \ ++ "if test -e ${devtype} " \ ++ "${devnum}:${dtb_devp} " \ ++ "${prefix}${efi_fdtfile};"\ ++ " then " \ ++ "echo Found DTB ${devtype} " \ ++ "${devnum}:${dtb_devp} " \ ++ "${prefix}${efi_fdtfile};"\ ++ "run load_efi_dtb; " \ ++ "fi;" \ ++ "done; " \ ++ "done; " \ ++ "run boot_efi_binary\0" \ ++ "scan_dev_for_efi=" \ + "if test -e ${devtype} ${devnum}:${distro_bootpart} " \ + "efi/boot/"BOOTEFI_NAME"; then " \ + "echo Found EFI removable media binary " \ + "efi/boot/"BOOTEFI_NAME"; " \ +- "run boot_efi_binary; " \ ++ "run scan_dev_for_dtb; " \ + "echo EFI LOAD FAILED: continuing...; " \ + "fi; " \ + "setenv efi_fdtfile\0" +-- +2.31.1 + diff --git a/SPECS/arm-image-installer.spec b/SPECS/arm-image-installer.spec new file mode 100644 index 0000000..cd3b4ba --- /dev/null +++ b/SPECS/arm-image-installer.spec @@ -0,0 +1,236 @@ +# Tarfile created using git +# git clone https://pagure.io/arm-image-installer.git +# git archive --format=tar --prefix=%{name}-%{version}/ %{version} | xz > ~/%{name}-%{version}.tar.xz + +Name: arm-image-installer +Version: 3.6 +Release: 1%{?dist} +Summary: Writes binary image files to any specified block device +License: GPLv2+ +Url: https://pagure.io/arm-image-installer +Source0: %{name}-%{version}.tar.xz + +BuildArch: noarch + +Requires: btrfs-progs +Requires: e2fsprogs +Requires: libselinux-utils +Requires: parted +Requires: sudo +Requires: util-linux +Requires: xfsprogs +Requires: xz + + +%description +Allows one to first select a source image (local or remote). The image must be +a binary file containing: [MBR + Partitions + File Systems + Data]. A +destination block device should then be selected for final installation. + + +%prep +%autosetup + +%build +echo "skipping..." + +%install +install -d %{buildroot}%{_datadir}/arm-image-installer +install -d %{buildroot}%{_datadir}/arm-image-installer/socs.d +install -pm 644 socs.d/* %{buildroot}%{_datadir}/arm-image-installer/socs.d/ +install -d %{buildroot}%{_datadir}/arm-image-installer/boards.d +install -pm 644 boards.d/* %{buildroot}%{_datadir}/arm-image-installer/boards.d/ + +install -d %{buildroot}%{_bindir} +install -pm 0755 update-uboot %{buildroot}%{_bindir}/ +install -pm 0755 arm-image-installer %{buildroot}%{_bindir}/ +install -pm 0755 rpi-uboot-update %{buildroot}%{_bindir}/ +install -pm 0755 spi-flashing-disk %{buildroot}%{_bindir}/ +ln -s /usr/bin/arm-image-installer %{buildroot}%{_bindir}/fedora-arm-image-installer + +%files +%license COPYING +%doc AUTHORS README TODO SUPPORTED-BOARDS +%{_bindir}/arm-image-installer +%{_bindir}/fedora-arm-image-installer +%{_bindir}/update-uboot +%{_bindir}/rpi-uboot-update +%{_bindir}/spi-flashing-disk +%{_datadir}/arm-image-installer/ + +%changelog +* Wed Mar 30 2022 Paul Whalen - 3.6-1 +- Update to 3.6 + +* Wed Jan 19 2022 Fedora Release Engineering - 3.5-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild + +* Fri Nov 12 2021 Paul Whalen - 3.5-1 +- Update to 3.5 + +* Wed Jul 21 2021 Fedora Release Engineering - 3.4-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild + +* Mon Apr 19 2021 Paul Whalen - 3.4-1 +- Update to 3.4 +- Add spi-flashing-disk script + +* Tue Apr 06 2021 Paul Whalen - 3.3-1 +- Update to 3.3 + +* Tue Jan 26 2021 Fedora Release Engineering - 3.1-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild + +* Mon Jan 25 2021 Paul Whalen - 3.1-1 +- Update to 3.1 + +* Wed Oct 07 2020 Paul Whalen - 3.0-1 +- Update to 3.0 + +* Fri Aug 28 2020 Neal Gompa - 2.18-2 +- Add missing dependency for btrfs-progs + +* Wed Aug 12 2020 Paul Whalen - 2.18-1 +- Update to 2.18 + +* Mon Jul 27 2020 Fedora Release Engineering - 2.17-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild + +* Fri May 15 2020 Paul Whalen - 2.17-1 +- Update to 2.17 +- readd rpi-uboot-update + +* Tue Apr 07 2020 Paul Whalen - 2.16-1 +- Update to 2.16 + +* Tue Jan 28 2020 Fedora Release Engineering - 2.15-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild + +* Fri Dec 20 2019 Paul Whalen - 2.15-1 +- Update to 2.15 + +* Thu Dec 19 2019 Paul Whalen - 2.14-1 +- Update to 2.14 + +* Wed Jul 24 2019 Fedora Release Engineering - 2.13-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild + +* Wed Jun 26 2019 Paul Whalen - 2.13-1 +- Update to 2.13 +- Fix BZ#1655329, BZ#1692903 + +* Tue Apr 09 2019 Paul Whalen - 2.11-1 +- Update to 2.11 + +* Thu Jan 31 2019 Fedora Release Engineering - 2.10-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild + +* Tue Dec 04 2018 Paul Whalen - 2.10-1 +- Update to 2.10 + +* Sat Dec 01 2018 Paul Whalen - 2.9-1 +- Update to 2.9 + +* Tue Oct 09 2018 Paul Whalen - 2.8-1 +- Update to 2.8 + +* Tue Aug 28 2018 Paul Whalen - 2.7-1 +- Update to 2.7 + +* Tue Aug 28 2018 Paul Whalen - 2.6-1 +- Update to 2.6 + +* Tue Jul 10 2018 Peter Robinson 2.5-1 +- Update to 2.5 +- Package rename with obsolete/provides + +* Fri Jun 01 2018 Paul Whalen - 2.4-1 +- Update to 2.4 +- Add initial IoT disk image support +- Add lvm support + +* Mon May 28 2018 Peter Robinson 2.3-1 +- Update to 2.3 + +* Thu Apr 12 2018 Peter Robinson 2.2-1 +- Update to 2.2 + +* Wed Feb 07 2018 Fedora Release Engineering - 2.1-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild + +* Tue Nov 28 2017 Peter Robinson 2.1-1 +- Update to 2.1 + +* Thu Nov 23 2017 Peter Robinson 2.0-1 +- Update to 2.0 +- Initial support for aarch64 images and associated SBCs + +* Wed Jul 26 2017 Fedora Release Engineering - 1.99.16-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild + +* Tue May 16 2017 Peter Robinson 1.99.16-1 +- Update to 1.99.16 + +* Wed May 3 2017 Peter Robinson 1.99.15-1 +- Update to 1.99.15 + +* Fri Apr 28 2017 Peter Robinson 1.99.14-1 +- Update to 1.99.14 + +* Fri Feb 10 2017 Fedora Release Engineering - 1.99.13-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild + +* Mon Oct 24 2016 Peter Robinson 1.99.13-1 +- Update to 1.99.13 +- Add basic Raspberry Pi firmware upgrade script + +* Wed Sep 21 2016 Peter Robinson 1.99.12-1 +- Update to 1.99.12 + +* Mon Aug 22 2016 Peter Robinson 1.99.11-1 +- Update to 1.99.11 + +* Wed Aug 17 2016 Peter Robinson 1.99.10-1 +- Update to 1.99.10 +- Added numerous boards + +* Tue Jun 21 2016 Peter Robinson 1.99.9-2 +- Require sudo + +* Wed May 18 2016 Peter Robinson 1.99.9-1 +- Update to 1.99.9 +- Support for ClearFog + +* Mon Mar 7 2016 Peter Robinson 1.99.8-1 +- Update to 1.99.8 + +* Wed Feb 03 2016 Fedora Release Engineering - 1.99.7-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild + +* Tue Jan 19 2016 Peter Robinson 1.99.7-1 +- Minor updates + +* Mon Jan 18 2016 Peter Robinson 1.99.6-2 +- Fix directory of data location + +* Mon Jan 18 2016 Peter Robinson 1.99.6-1 +- Update to 1.99.6 +- Rename binary to arm-image-installer, add compat symlink + +* Sun Aug 2 2015 Peter Robinson 1.99.5-1 +- Update to 1.99.5 + +* Fri Jul 24 2015 Peter Robinson 1.99.4-1 +- Update to 1.99.4 + +* Fri Jul 3 2015 Peter Robinson 1.99.3-1 +- Update to 1.99.3 for u-boot 2015.07 support + +* Wed Jun 17 2015 Fedora Release Engineering - 1.99.2-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild + +* Thu Mar 19 2015 Peter Robinson 1.99.2-1 +- Update to 1.99.2 + +* Wed Mar 18 2015 Peter Robinson 1.99.1-0.1 +- Update to new upstream diff --git a/SPECS/uboot-tools.spec b/SPECS/uboot-tools.spec new file mode 100644 index 0000000..f800c18 --- /dev/null +++ b/SPECS/uboot-tools.spec @@ -0,0 +1,479 @@ +#global candidate rc0 +%bcond_without toolsonly + +Name: uboot-tools +Version: 2022.07 +Release: 1%{?candidate:.%{candidate}}%{?dist} +Summary: U-Boot utilities +License: GPLv2+ BSD LGPL-2.1+ LGPL-2.0+ +URL: http://www.denx.de/wiki/U-Boot + +ExcludeArch: s390x +Source0: https://ftp.denx.de/pub/u-boot/u-boot-%{version}%{?candidate:-%{candidate}}.tar.bz2 +Source1: aarch64-boards + +# Fedoraisms patches +# Needed to find DT on boot partition that's not the first partition +Patch1: uefi-distro-load-FDT-from-any-partition-on-boot-device.patch + +# Board fixes and enablement +# RPi - uses RPI firmware device tree for HAT support +Patch3: rpi-Enable-using-the-DT-provided-by-the-Raspberry-Pi.patch +Patch4: rpi-fallback-to-max-clock-for-mmc.patch +Patch5: rpi-bcm2835_sdhost-firmware-managed-clock.patch +# Rockchips improvements +Patch7: rockchip-Add-initial-support-for-the-PinePhone-Pro.patch + +BuildRequires: bc +BuildRequires: bison +BuildRequires: dtc +BuildRequires: flex +BuildRequires: gcc +BuildRequires: gnutls-devel +BuildRequires: libuuid-devel +BuildRequires: make +BuildRequires: ncurses-devel +BuildRequires: openssl-devel +BuildRequires: perl-interpreter +BuildRequires: python3-devel +BuildRequires: python3-setuptools +BuildRequires: python3-libfdt +BuildRequires: SDL-devel +BuildRequires: swig +%ifarch aarch64 +BuildRequires: arm-trusted-firmware-armv8 +%endif +Requires: dtc + +%description +This package contains a few U-Boot utilities - mkimage for creating boot images +and fw_printenv/fw_setenv for manipulating the boot environment variables. + +%if %{with toolsonly} +%ifarch aarch64 +%package -n uboot-images-armv8 +Summary: U-Boot firmware images for aarch64 boards +BuildArch: noarch + +%description -n uboot-images-armv8 +U-Boot firmware binaries for aarch64 boards +%endif +%endif + +%prep +%autosetup -p1 -n u-boot-%{version}%{?candidate:-%{candidate}} + +cp %SOURCE1 . + +%build +mkdir builds + +%make_build HOSTCC="gcc $RPM_OPT_FLAGS" CROSS_COMPILE="" tools-only_defconfig O=builds/ +%make_build HOSTCC="gcc $RPM_OPT_FLAGS" CROSS_COMPILE="" tools-all O=builds/ + +%if %{with toolsonly} +# U-Boot device firmwares don't currently support LTO +%define _lto_cflags %{nil} + +%ifarch aarch64 +for board in $(cat %{_arch}-boards) +do + echo "Building board: $board" + mkdir builds/$(echo $board)/ + + # ATF selection, needs improving, suggestions of ATF SoC to Board matrix welcome + sun50i=(a64-olinuxino amarula_a64_relic bananapi_m2_plus_h5 bananapi_m64 libretech_all_h3_cc_h5 nanopi_a64 nanopi_neo2 nanopi_neo_plus2 orangepi_pc2 orangepi_prime orangepi_win orangepi_zero_plus orangepi_zero_plus2 pine64-lts pine64_plus pinebook pinephone pinetab sopine_baseboard teres_i) + if [[ " ${sun50i[*]} " == *" $board "* ]]; then + echo "Board: $board using sun50i_a64" + cp /usr/share/arm-trusted-firmware/sun50i_a64/* builds/$(echo $board)/ + fi + sun50h6=(beelink_gs1 orangepi_3 orangepi_lite2 orangepi_one_plus orangepi_zero2 pine_h64 tanix_tx6) + if [[ " ${sun50h6[*]} " == *" $board "* ]]; then + echo "Board: $board using sun50i_h6" + cp /usr/share/arm-trusted-firmware/sun50i_h6/* builds/$(echo $board)/ + fi + rk3328=(evb-rk3328 nanopi-r2s-rk3328 rock64-rk3328 rock-pi-e-rk3328 roc-cc-rk3328) + if [[ " ${rk3328[*]} " == *" $board "* ]]; then + echo "Board: $board using rk3328" + cp /usr/share/arm-trusted-firmware/rk3328/* builds/$(echo $board)/ + fi + rk3399=(evb-rk3399 ficus-rk3399 firefly-rk3399 khadas-edge-captain-rk3399 khadas-edge-rk3399 khadas-edge-v-rk3399 leez-rk3399 nanopc-t4-rk3399 nanopi-m4-2gb-rk3399 nanopi-m4b-rk3399 nanopi-m4-rk3399 nanopi-neo4-rk3399 nanopi-r4s-rk3399 orangepi-rk3399 pinebook-pro-rk3399 pinephone-pro-rk3399 puma-rk3399 rock960-rk3399 rock-pi-4c-rk3399 rock-pi-4-rk3399 rock-pi-n10-rk3399pro rockpro64-rk3399 roc-pc-mezzanine-rk3399 roc-pc-rk3399) + if [[ " ${rk3399[*]} " == *" $board "* ]]; then + echo "Board: $board using rk3399" + cp /usr/share/arm-trusted-firmware/rk3399/* builds/$(echo $board)/ + fi + # End ATF + + make $(echo $board)_defconfig O=builds/$(echo $board)/ + %make_build HOSTCC="gcc $RPM_OPT_FLAGS" CROSS_COMPILE="" O=builds/$(echo $board)/ + + # build spi images for rockchip boards with SPI flash + rkspi=(rock64-rk3328) + if [[ " ${rkspi[*]} " == *" $board "* ]]; then + echo "Board: $board with SPI flash" + builds/$(echo $board)/tools/mkimage -n rk3328 -T rkspi -d builds/$(echo $board)/tpl/u-boot-tpl.bin:builds/$(echo $board)/spl/u-boot-spl.bin builds/$(echo $board)/idbloader.spi + fi + rkspi=(evb-rk3399 khadas-edge-captain-rk3399 khadas-edge-rk3399 khadas-edge-v-rk3399 nanopc-t4-rk3399 pinebook-pro-rk3399 pinephone-pro-rk3399 rockpro64-rk3399 roc-pc-mezzanine-rk3399 roc-pc-rk3399) + if [[ " ${rkspi[*]} " == *" $board "* ]]; then + echo "Board: $board with SPI flash" + builds/$(echo $board)/tools/mkimage -n rk3399 -T rkspi -d builds/$(echo $board)/tpl/u-boot-tpl.bin:builds/$(echo $board)/spl/u-boot-spl.bin builds/$(echo $board)/idbloader.spi + fi +done + +%endif +%endif + +%install +mkdir -p %{buildroot}%{_bindir} +mkdir -p %{buildroot}%{_mandir}/man1 +mkdir -p %{buildroot}%{_datadir}/uboot/ + +%if %{with toolsonly} +%ifarch aarch64 +for board in $(ls builds) +do + mkdir -p %{buildroot}%{_datadir}/uboot/$(echo $board)/ + for file in u-boot.bin u-boot.dtb u-boot.img u-boot-dtb.img u-boot.itb u-boot-sunxi-with-spl.bin u-boot-rockchip.bin idbloader.img idbloader.spi spl/boot.bin spl/sunxi-spl.bin + do + if [ -f builds/$(echo $board)/$(echo $file) ]; then + install -p -m 0644 builds/$(echo $board)/$(echo $file) %{buildroot}%{_datadir}/uboot/$(echo $board)/ + fi + done +done +%endif + +# Bit of a hack to remove binaries we don't use as they're large +%ifarch aarch64 +for board in $(ls builds) +do + rm -f %{buildroot}%{_datadir}/uboot/$(echo $board)/u-boot.dtb + if [ -f %{buildroot}%{_datadir}/uboot/$(echo $board)/u-boot-sunxi-with-spl.bin ]; then + rm -f %{buildroot}%{_datadir}/uboot/$(echo $board)/u-boot{,-dtb}.* + fi + if [ -f %{buildroot}%{_datadir}/uboot/$(echo $board)/MLO ]; then + rm -f %{buildroot}%{_datadir}/uboot/$(echo $board)/u-boot.bin + fi + if [ -f %{buildroot}%{_datadir}/uboot/$(echo $board)/SPL ]; then + rm -f %{buildroot}%{_datadir}/uboot/$(echo $board)/u-boot.bin + fi + if [ -f %{buildroot}%{_datadir}/uboot/$(echo $board)/u-boot.imx ]; then + rm -f %{buildroot}%{_datadir}/uboot/$(echo $board)/u-boot.bin + fi + if [ -f %{buildroot}%{_datadir}/uboot/$(echo $board)/u-boot-spl.kwb ]; then + rm -f %{buildroot}%{_datadir}/uboot/$(echo $board)/u-boot.* + rm -f %{buildroot}%{_datadir}/uboot/$(echo $board)/u-boot-spl.bin + fi + if [ -f %{buildroot}%{_datadir}/uboot/$(echo $board)/idbloader.img ]; then + rm -f %{buildroot}%{_datadir}/uboot/$(echo $board)/u-boot.bin + rm -f %{buildroot}%{_datadir}/uboot/$(echo $board)/u-boot{,-dtb}.img + fi +done +%endif +%endif + +for tool in bmp_logo dumpimage env/fw_printenv fit_check_sign fit_info gdb/gdbcont gdb/gdbsend gen_eth_addr gen_ethaddr_crc img2srec mkenvimage mkimage mksunxiboot ncb proftool sunxi-spl-image-builder ubsha1 xway-swap-bytes kwboot +do +install -p -m 0755 builds/tools/$tool %{buildroot}%{_bindir} +done +install -p -m 0644 doc/mkimage.1 %{buildroot}%{_mandir}/man1 + +install -p -m 0755 builds/tools/env/fw_printenv %{buildroot}%{_bindir} +( cd %{buildroot}%{_bindir}; ln -sf fw_printenv fw_setenv ) + +# Copy some useful docs over +mkdir -p builds/docs +cp -p board/hisilicon/hikey/README builds/docs/README.hikey +cp -p board/rockchip/evb_rk3399/README builds/docs/README.evb_rk3399 +cp -p board/sunxi/README.sunxi64 builds/docs/README.sunxi64 +cp -p board/sunxi/README.nand builds/docs/README.sunxi-nand + +%files +%doc README doc/develop/distro.rst doc/README.gpt +%doc doc/README.rockchip doc/develop/uefi doc/uImage.FIT doc/arch/arm64.rst +%doc builds/docs/* doc/board/amlogic/ doc/board/rockchip/ +%{_bindir}/* +%{_mandir}/man1/mkimage.1* +%dir %{_datadir}/uboot/ + +%if %{with toolsonly} +%ifarch aarch64 +%files -n uboot-images-armv8 +%{_datadir}/uboot/* +%endif +%endif + +%changelog +* Sun Jul 17 2022 Peter Robinson - 2022.07-1 +- Update to 2022.07 GA + +* Mon Jul 04 2022 Peter Robinson - 2022.07-0.6.rc6 +- Update to 2022.07 RC6 + +* Mon Jun 20 2022 Peter Robinson - 2022.07-0.5.rc5 +- Update to 2022.07 RC5 + +* Sun Jun 12 2022 Peter Robinson - 2022.07-0.4.rc4 +- Update to 2022.07 RC4 +- Some minor Rockchips device fixes + +* Wed May 25 2022 Peter Robinson - 2022.07-0.3.rc3 +- Update to 2022.07 RC3 + +* Sat May 14 2022 Peter Robinson - 2022.07-0.2.rc2 +- Update to 2022.07 RC2 + +* Tue Apr 26 2022 Peter Robinson - 2022.07-0.1.rc1 +- Update to 2022.07 RC1 + +* Mon Apr 04 2022 Peter Robinson - 2022.04-1 +- Update to 2022.04 GA + +* Mon Mar 28 2022 Peter Robinson - 2022.04-0.4.rc5 +- Update to 2022.04 RC5 + +* Tue Mar 08 2022 Peter Robinson - 2022.04-0.3.rc3 +- Update to 2022.04 RC3 +- Enable new Rockchip devices + +* Tue Feb 15 2022 Peter Robinson - 2022.04-0.2.rc2 +- Update to 2022.04 RC2 + +* Wed Feb 02 2022 Peter Robinson - 2022.04-0.1.rc1 +- Update to 2022.04 RC1 + +* Sat Jan 22 2022 Fedora Release Engineering - 2022.01-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild + +* Mon Jan 10 2022 Peter Robinson - 2022.01-1 +- Update to 2022.01 + +* Wed Jan 05 2022 Peter Robinson - 2022.01-0.3.rc4 +- Upstream fixes for PHY and UEFI + +* Mon Dec 20 2021 Peter Robinson - 2022.01-0.2.rc4 +- Update to 2022.01 RC4 + +* Mon Nov 15 2021 Peter Robinson - 2022.01-0.1.rc2 +- Update to 2022.01 RC2 + +* Mon Nov 15 2021 Peter Robinson - 2021.10-3 +- Fixes for rk3399 devices + +* Thu Oct 14 2021 Peter Robinson - 2021.10-2 +- Fix booting from MMC for Rockchip 3399 (rhbz #2014182) +- Enable new rk3399 devices (Leez, NanoPi-M4B, NanoPi-4S, NanoPi-T4) (rhbz #2009126) + +* Mon Oct 04 2021 Peter Robinson - 2021.10-1 +- Update to 2021.10 + +* Mon Sep 27 2021 Peter Robinson - 2021.10-0.7.rc5 +- Update to 2021.10 RC5 + +* Wed Sep 15 2021 Peter Robinson - 2021.10-0.6.rc4 +- Update to 2021.10 RC4 +- Proposed fix for RPi MMC clock issue + +* Tue Sep 14 2021 Sahana Prasad - 2021.10-0.6.rc3 +- Rebuilt with OpenSSL 3.0.0 + +* Mon Aug 30 2021 Peter Robinson - 2021.10-0.5.rc3 +- Update to 2021.10 RC3 + +* Tue Aug 24 2021 Peter Robinson - 2021.10-0.4.rc2 +- Fix for Raspberry Pi firmware properties + +* Mon Aug 23 2021 Peter Robinson - 2021.10-0.3.rc2 +- Fix for rockchip SPI + +* Mon Aug 16 2021 Peter Robinson - 2021.10-0.2.rc2 +- Update to 2021.10 RC2 + +* Sun Aug 08 2021 Peter Robinson - 2021.10-0.1.rc1 +- Update to 2021.10 RC1 + +* Thu Jul 22 2021 Peter Robinson - 2021.07-2 +- Fix regression for Rockchip devices running firmware from SPI flash + +* Mon Jul 05 2021 Peter Robinson - 2021.07-1 +- Update to 2021.07 GA + +* Mon Jun 28 2021 Peter Robinson - 2021.07-0.6.rc5 +- Update to 2021.07 RC5 +- Build SPI fash images for ROC-PC-RK3399 + +* Mon Jun 07 2021 Peter Robinson - 2021.07-0.5.rc4 +- Update to 2021.07 RC4 + +* Sat Jun 05 2021 Peter Robinson - 2021.07-0.4.rc3 +- Fix AllWinner devices booting from mSD/MMC + +* Tue May 25 2021 Peter Robinson - 2021.07-0.3.rc3 +- Update to 2021.07 RC3 +- Build against ATF 2.5 GA + +* Thu May 13 2021 Peter Robinson - 2021.07-0.2.rc2 +- Build against new ATF 2.5-rc1 + +* Mon May 10 2021 Peter Robinson - 2021.07-0.1.rc2 +- Update to 2021.07 RC2 + +* Wed Apr 28 2021 Peter Robinson - 2021.04-3 +- Upstream fix for console regression (rhbz 1946278) +- Fix for fallback.efi crash (rhbz 1733817) + +* Wed Apr 21 2021 Peter Robinson - 2021.04-2 +- Revert keyboard console regression change (rhbz 1946278) + +* Sun Apr 18 2021 Peter Robinson - 2021.04-1 +- Update to 2021.04 GA +- Fix DTB load check (rhbz 1946278) +- Build Rockchip SPI support as idbloader.spi +- Fixes for Rockchip devices +- Build Turris Omnia for MMC/SPI/UART + +* Wed Mar 17 2021 Peter Robinson - 2021.04-0.6.rc4 +- Update to 2021.04 RC4 +- Move to upstream fix for SMP on RPi3B and RPi3B+ + +* Sat Mar 13 2021 Peter Robinson - 2021.04-0.5.rc3 +- Fix for SMP on RPi3B and RPi3B+ +- Initial support for Pinephone 3Gb edition + +* Mon Mar 08 2021 Peter Robinson - 2021.04-0.4.rc3 +- Update to 2021.04 RC3 + +* Tue Feb 16 2021 Peter Robinson - 2021.04-0.3.rc2 +- Update to 2021.04 RC2 + +* Mon Feb 15 2021 Dennis Gilmore +- build spi and uart images in addition to mmc for helios4 and clearfog + +* Wed Feb 10 2021 Peter Robinson - 2021.04-0.2.rc1 +- Fixes for network issues on some Allwinner devices + +* Mon Feb 01 2021 Peter Robinson - 2021.04-0.1.rc1 +- Update to 2021.04 RC1 +- Add new upstream devices + +* Wed Jan 27 2021 Fedora Release Engineering - 2021.01-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild + +* Mon Jan 11 2021 Peter Robinson - 2021.01-1 +- Update to 2021.01 GA +- Updates for Raspberry Pi 4 Series of devices + +* Tue Jan 5 2021 Peter Robinson - 2021.01-0.5.rc5 +- Update to 2021.01 RC5 + +* Sun Dec 27 2020 Peter Robinson - 2021.01-0.4.rc4 +- Update to 2021.01 RC4 +- Latest RPi-400/CM4 support patch + +* Tue Dec 15 2020 Peter Robinson - 2021.01-0.3.rc3 +- Update to 2021.01 RC3 +- Latest RPi-400/CM4 support patch +- Re-enable previously disabled device support + +* Mon Dec 14 2020 Javier Martinez Canillas - 2021.01-0.2.rc2 +- Fix a "scan_dev_for_efi" not defined error + +* Sun Nov 22 2020 Peter Robinson - 2021.01-0.1.rc2 +- Update to 2021.01 RC2 +- Latest Pinebook Pro display patches +- Initial RPi-400 support patch +- Update Fedora specific patches + +* Sun Nov 8 2020 Peter Robinson - 2020.10-3 +- Fix SPI on Rockchip devices +- Latest Pinebook Pro display patches +- Fix Keyboard and USB-A ports on Pinebook Pro + +* Wed Oct 28 2020 Peter Robinson - 2020.10-2 +- Fix kernel installs for non EBBR systems +- Fix for wired networks on some Allwinner devices + +* Tue Oct 06 2020 Peter Robinson - 2020.10-1 +- Update to 2020.10 + +* Sun Sep 27 2020 Peter Robinson - 2020.10-0.6.rc5 +- Initial support for display output on Pinebook Pro + +* Tue Sep 22 2020 Peter Robinson - 2020.10-0.5.rc5 +- Update to 2020.10 RC5 + +* Wed Sep 09 2020 Peter Robinson - 2020.10-0.4.rc4 +- Update to 2020.10 RC4 + +* Wed Aug 19 2020 Peter Robinson - 2020.10-0.3.rc2 +- Enable a number of new Rockchip devices + +* Mon Aug 10 2020 Peter Robinson - 2020.10-0.2.rc2 +- Update to 2020.10 RC2 + +* Tue Jul 28 2020 Peter Robinson - 2020.10-0.1.rc1 +- 2020.10 RC1 + +* Tue Jul 14 2020 Tom Stellard - 2020.07-2 +- Use make macros +- https://fedoraproject.org/wiki/Changes/UseMakeBuildInstallMacro + +* Mon Jul 06 2020 Peter Robinson - 2020.07-1 +- 2020.07 GA + +* Tue Jun 23 2020 Peter Robinson - 2020.07-0.5.rc5 +- 2020.07 RC5 + +* Thu Jun 18 2020 Peter Robinson - 2020.07-0.4.rc4 +- Update various patches to latest upstream + +* Wed Jun 10 2020 Peter Robinson - 2020.07-0.3.rc4 +- 2020.07 RC4 +- Minor updates and other fixes + +* Tue May 12 2020 Peter Robinson - 2020.07-0.2.rc2 +- 2020.07 RC2 +- Minor device updates + +* Wed Apr 29 2020 Peter Robinson - 2020.07-0.1.rc1 +- 2020.07 RC1 + +* Tue Apr 21 2020 Peter Robinson - 2020.04-4 +- Initial support for USB on Rasperry Pi 4 + +* Tue Apr 21 2020 Peter Robinson - 2020.04-3 +- Ship u-boot-rockchip.bin for SPI flash + +* Mon Apr 20 2020 Peter Robinson - 2020.04-2 +- Fix ATF for new aarch64 devices +- Fix Wandboard board detection (rhbz 1825247) +- Fix mSD card on RockPro64 +- Enable (inital) Pinebook Pro + +* Tue Apr 14 2020 Peter Robinson - 2020.04-1 +- 2020.04 + +* Tue Apr 7 2020 Peter Robinson 2020.04-0.7-rc5 +- 2020.04 RC5 + +* Tue Mar 31 2020 Peter Robinson 2020.04-0.6-rc4 +- 2020.04 RC4 +- Updates for NVIDIA Jetson platforms +- Support RNG for random seed for KASLR on some Rockchip devices + +* Thu Mar 26 2020 Peter Robinson 2020.04-0.5-rc3 +- Fix ext4 alignment issue seen on some NXP i.MX devices + +* Wed Feb 26 2020 Peter Robinson 2020.04-0.4-rc3 +- 2020.04 RC3 + +* Thu Feb 13 2020 Peter Robinson 2020.04-0.3-rc2 +- 2020.04 RC2 + +* Sun Feb 2 2020 Peter Robinson 2020.04-0.2-rc1 +- Update genet NIC driver + +* Wed Jan 29 2020 Peter Robinson 2020.04-0.1-rc1 +- 2020.04 RC1 + +* Tue Jan 7 2020 Peter Robinson 2020.01-1 +- 2020.01