Re: [PATCH v2 2/2] rockchip: Add initial support for the PINE64 Pinephone Pro

2023-01-03 Thread Simon Glass
Hi Peter,

On Sat, 31 Dec 2022 at 03:24, Peter Robinson  wrote:
>
> The Pinephone Pro is another device by PINE64. It's closely related
> to the Pinebook Pro of which this initial support is derived from.
>
> Specification:
> - A variant of the Rockchip RK3399
> - A 6 inch 720*1440 DSI display
> - Front and rear cameras
> - Type-C interface with alt mode display (DP 1.2) and PD charging
> - 4GB LPDDR4 RAM
> - 128GB eMMC
> - mSD card slot
> - An AP6255 module for 802.11ac WiFi and Bluetooth 5
> - Quectel EG25-G 4G/LTE modem
>
> Signed-off-by: Peter Robinson 
> ---
>  arch/arm/dts/rk3399-pinephone-pro-u-boot.dtsi |  31 ++
>  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|  76 +
>  configs/pinephone-pro-rk3399_defconfig| 104 ++
>  include/configs/pinephone-pro-rk3399.h|  19 
>  8 files changed, 262 insertions(+)
>  create mode 100644 arch/arm/dts/rk3399-pinephone-pro-u-boot.dtsi
>  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
>

Reviewed-by: Simon Glass 

Just a nit below

[..]

> new file mode 100644
> index 000..8d9203053e5
> --- /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 000..eb639cd0d07
> --- /dev/null
> +++ b/board/pine64/pinephone-pro-rk3399/pinephone-pro-rk3399.c
> @@ -0,0 +1,76 @@
> +// SPDX-License-Identifier: GPL-2.0+
> +/*
> + * (C) Copyright 2016 Rockchip Electronics Co., Ltd
> + * (C) Copyright 2022 Peter Robinson 
> + */
> +
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +
> +#define GRF_IO_VSEL_BT565_SHIFT 0
> +#define PMUGRF_CON0_VSEL_SHIFT 8
> +
> +#ifndef CONFIG_SPL_BUILD

You should be able to use C code inside the function

if (spl_phase() == PHASE_SPL) {
..

> +int board_early_init_f(void)
> +{
> +   struct udevice *regulator;
> +   int ret;
> +
> +   ret = regulator_get_by_platname("vcc5v0_usb", ®ulator);
> +   if (ret) {
> +   pr_debug("%s vcc5v0_usb init fail! ret %d\n", __func__, ret);
> +   goto out;
> +   }
> +
> +   ret = regulator_set_enable(regulator, true);
> +   if (ret)
> +   pr_debug("%s vcc5v0-host-en-gpio set fail! ret %d\n", 
> __func__, ret);
> +
> +out:
> +   return 0;
> +}
> +#endif
> +
> +#ifdef CONFIG_MISC_INIT_R

Won't the compiler drop this anyway if it is not needed? Can you drop
the #ifdef ?

> +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;
> +
> +   return ret;
> +}
> +#endif
> diff --git a/configs/pinephone-pro-rk3399_defconfig 
> b/configs/pinephone-pro-rk3399_defconfig
> new file mode 100644
> index 000..eb979f6c051
> --- /dev/null
> +++ b/configs/pinephone-pro-rk3399_defconfig
> @@ -0,0 +1,104 @@
> +CONFIG_ARM=y
> +CONFIG_SKIP_LOWLEVEL_INIT=y
> +CONFIG_COUNTER_FREQUENCY=2400
> +CONFIG_ARCH_ROCKCHIP=y
> +CONFIG_TEXT_BASE=0x0020
> +CONFIG_NR_DRAM_BANKS=1
> +CONFIG_ENV_SIZE=0x8000
> +CONFIG_ENV_OFFSET=0x3F8000
> +CONFIG_DEFAULT_DEVICE_TREE="rk3399-pinephone-pro"
> +CONFIG_ROCKCHIP_RK3399=y
> +CONFIG_TARGET_PINEPHONE_PRO_RK3399=y
> +CONFIG_DEBUG_UART_BASE=0xFF1A
> +CONFIG_DEBUG_UART_CLOCK=2400
> +CONFIG_SPL_SPI_FLASH_SUPPORT=y
> +CONFIG_SPL_SPI=y
> +CONFIG_SYS_LOAD_ADDR=0x800800
> +CONFIG_DEBUG_UART=y
> +CONFIG_HAS_CUSTOM_SYS_INIT_SP_ADDR=y
> +

[PATCH v2 2/2] rockchip: Add initial support for the PINE64 Pinephone Pro

2022-12-31 Thread Peter Robinson
The Pinephone Pro is another device by PINE64. It's closely related
to the Pinebook Pro of which this initial support is derived from.

Specification:
- A variant of the Rockchip RK3399
- A 6 inch 720*1440 DSI display
- Front and rear cameras
- Type-C interface with alt mode display (DP 1.2) and PD charging
- 4GB LPDDR4 RAM
- 128GB eMMC
- mSD card slot
- An AP6255 module for 802.11ac WiFi and Bluetooth 5
- Quectel EG25-G 4G/LTE modem

Signed-off-by: Peter Robinson 
---
 arch/arm/dts/rk3399-pinephone-pro-u-boot.dtsi |  31 ++
 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|  76 +
 configs/pinephone-pro-rk3399_defconfig| 104 ++
 include/configs/pinephone-pro-rk3399.h|  19 
 8 files changed, 262 insertions(+)
 create mode 100644 arch/arm/dts/rk3399-pinephone-pro-u-boot.dtsi
 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/rk3399-pinephone-pro-u-boot.dtsi 
b/arch/arm/dts/rk3399-pinephone-pro-u-boot.dtsi
new file mode 100644
index 000..1dad283ad05
--- /dev/null
+++ b/arch/arm/dts/rk3399-pinephone-pro-u-boot.dtsi
@@ -0,0 +1,31 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * Copyright (C) 2022 Peter Robinson 
+ */
+
+#include "rk3399-u-boot.dtsi"
+#include "rk3399-sdram-lpddr4-100.dtsi"
+
+/ {
+   chosen {
+   u-boot,spl-boot-order = "same-as-spl", &sdhci, &sdmmc;
+   };
+
+   config {
+   u-boot,spl-payload-offset = <0x6>; /* @ 384KB */
+   };
+};
+
+&rng {
+   status = "okay";
+};
+
+&sdhci {
+   max-frequency = <2500>;
+   u-boot,dm-pre-reloc;
+};
+
+&sdmmc {
+   max-frequency = <2000>;
+   u-boot,dm-pre-reloc;
+};
diff --git a/arch/arm/mach-rockchip/rk3399/Kconfig 
b/arch/arm/mach-rockchip/rk3399/Kconfig
index b48feeb3466..d01063ac98b 100644
--- a/arch/arm/mach-rockchip/rk3399/Kconfig
+++ b/arch/arm/mach-rockchip/rk3399/Kconfig
@@ -39,6 +39,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 a variant of the Rockchip
+ rk3399 SoC with 4Gb RAM, onboard eMMC, USB-C, headphone jack,
+ 720x1440 screen and a Quectel 4G/LTE modem.
+
 config TARGET_PUMA_RK3399
bool "Theobroma Systems RK3399-Q7 (Puma)"
help
@@ -165,6 +172,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 000..13d6465ae6e
--- /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 000..c923ff1be32
--- /dev/null
+++ b/board/pine64/pinephone-pro-rk3399/MAINTAINERS
@@ -0,0 +1,8 @@
+PINEPHONE_PRO
+M: Peter Robinson 
+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 000..8d9203053e5
--- /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 000..eb639cd0d07
--- /dev/null
+++ b/board/pine64/pinephone-pro-rk3399/pinephone-pro-rk3399.c
@@ -0,0 +1,76 @@
+// SPDX-License-Identifier: