[RFC PATCH 00/17] sunxi: rework pinctrl and add T113s support

Andre Przywara
2022-12-06T00:47:36Z

Hi,

this is some early attempt at supporting the new SoC series that covers
the Allwinner D1 siblings R528 and T113s. They all share the same die,
although the D1 and D1s use RISC-V cores, which requires more plumbing,
to use the sunxi code across two architectures. Getting the R528 support
in should help a bit in sorting out what's new peripheral code and what
is architecture dependent. IIUC, Samuel has that running, although with
some hacks, the number of which this series tries to reduce.

The most interesting part of this is the pincontroller rework, this
tackles two issues:
- For the first time in the history of mainline Allwinner support the
pincontroller changed the register layout. The code here tries to
abstract the differences away, so both variants can share the code
peacefully.
- For the above mentioned reason, the pincontroller code is quite old,
and is mostly spread out across arch/arm, in a pre-DM style, even
though we have real DM support in U-Boot proper. We need the non-DM
version for the (ARM-only?) legacy SPL, so can't get rid of that
completely. This series also tries to modernise that code, and moves
it into board/sunxi/, where it can be more easily shared with RISC-V.

The preliminary MangoPi MQ-R bits on top are mostly for illustration
purposes, and in case someone wants to give it a try. For some probably
stupid reason MMC doesn't work, although the driver loads fine. Also
this omits the DRAM code, although there is some GPLed code out there,
which can be lifted into here, with some extra work.

I would mostly appreciate to have some opinion on the pinctrl patches: I
understand that patch 03/17 isn't strictly necessary, but I always
disliked U-Boot's "use C structs to model MMIO register frames"
approach, so thought now is the time to get rid of that ;-)
Also I am unsure about patch 06/17, which seems like a step back
(spreading per-SoC data over several files), but I actually aim at
getting rid of cpu_sun[x]i.h altogether, since we should not really need
it, except for some exceptions.
The third patch I would like to hear feedback about is patch 08/17.
Finally patch 14/17 would deserve some extra pair of eyes.

Please let me know if you have any opinions!

Cheers,
Andre

P.S. I understand there is some code to support those SoCs out there,
apologies if I just re-implemented some of it. Please point me to
patches that seem upstream-worthy, and I will happily integrate them in
here, potentially replacing some of my patches.

Andre Przywara (15):
sunxi: remove CONFIG_SATAPWR
sunxi: remove CONFIG_MACPWR
pinctrl: sunxi: remove struct sunxi_gpio
pinctrl: sunxi: add GPIO in/out wrappers
pinctrl: sunxi: move pinctrl code and remove GPIO_EXTRA_HEADER
pinctrl: sunxi: move PIO_BASE into sunxi_gpio.h
pinctrl: sunxi: add new D1 pinctrl support
sunxi: introduce NCAT2 generation model
pinctrl: sunxi: add Allwinner D1 pinctrl description
sunxi: clock: D1/R528: Enable PLL LDO during PLL1 setup
sunxi: clock: support D1/R528 PLL6 clock
sunxi: add early Allwinner R528/T113 SoC support
sunxi: refactor serial base addresses to avoid asm/arch/cpu.h
arm: sunxi: add Allwinner T113s devicetree stub
sunxi: add preliminary MangoPi MQ-R board support

Samuel Holland (2):
clk: sunxi: Add support for the D1 CCU
riscv: dts: allwinner: Add the D1/D1s SoC devicetree

arch/arm/Kconfig | 3 +-
arch/arm/cpu/armv7/sunxi/sram.c | 1 +
arch/arm/cpu/armv8/fel_utils.S | 1 +
arch/arm/dts/Makefile | 2 +
arch/arm/dts/sun8i-t113s-mangopi-mq-r.dts | 54 ++
arch/arm/dts/sun8i-t113s.dtsi | 59 ++
arch/arm/include/asm/arch-sunxi/clock.h | 3 +-
.../include/asm/arch-sunxi/clock_sun50i_h6.h | 8 +
arch/arm/include/asm/arch-sunxi/cpu.h | 2 +
arch/arm/include/asm/arch-sunxi/cpu_sun4i.h | 17 -
.../include/asm/arch-sunxi/cpu_sun50i_h6.h | 7 -
arch/arm/include/asm/arch-sunxi/cpu_sun9i.h | 9 -
.../include/asm/arch-sunxi/cpu_sunxi_ncat2.h | 49 +
arch/arm/include/asm/arch-sunxi/mmc.h | 2 +-
arch/arm/include/asm/arch-sunxi/prcm.h | 2 +-
arch/arm/include/asm/arch-sunxi/serial.h | 32 +
arch/arm/include/asm/arch-sunxi/timer.h | 2 +-
arch/arm/mach-sunxi/Kconfig | 51 +-
arch/arm/mach-sunxi/Makefile | 2 +-
arch/arm/mach-sunxi/board.c | 9 +-
arch/arm/mach-sunxi/clock_sun50i_h6.c | 38 +-
arch/arm/mach-sunxi/cpu_info.c | 2 +
arch/arm/mach-sunxi/dram_suniv.c | 2 +-
arch/arm/mach-sunxi/gtbus_sun9i.c | 1 +
arch/arm/mach-sunxi/pinmux.c | 78 --
arch/arm/mach-sunxi/spl_spi_sunxi.c | 1 +
arch/arm/mach-sunxi/timer.c | 1 +
arch/riscv/dts/sun20i-d1.dtsi | 66 ++
arch/riscv/dts/sun20i-d1s.dtsi | 76 ++
arch/riscv/dts/sunxi-d1-t113.dtsi | 15 +
arch/riscv/dts/sunxi-d1s-t113.dtsi | 844 ++++++++++++++++++
board/sunxi/Makefile | 2 +
board/sunxi/board.c | 25 +-
board/sunxi/chip.c | 2 +-
board/sunxi/dram_sun8i_r528.c | 9 +
board/sunxi/pinctrl.c | 94 ++
common/spl/Kconfig | 2 +-
configs/A10-OLinuXino-Lime_defconfig | 1 -
configs/A20-OLinuXino-Lime2-eMMC_defconfig | 1 -
configs/A20-OLinuXino-Lime2_defconfig | 1 -
configs/A20-OLinuXino-Lime_defconfig | 1 -
configs/A20-OLinuXino_MICRO-eMMC_defconfig | 1 -
configs/A20-OLinuXino_MICRO_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/Bananapi_M2_Ultra_defconfig | 1 -
configs/Bananapi_defconfig | 1 -
configs/Bananapro_defconfig | 1 -
configs/Cubieboard2_defconfig | 1 -
configs/Cubieboard_defconfig | 1 -
configs/Cubietruck_defconfig | 1 -
configs/Itead_Ibox_A20_defconfig | 1 -
configs/Lamobo_R1_defconfig | 2 -
configs/Linksprite_pcDuino3_Nano_defconfig | 1 -
configs/Linksprite_pcDuino3_defconfig | 1 -
configs/Mele_A1000_defconfig | 1 -
configs/Orangepi_defconfig | 1 -
configs/Orangepi_mini_defconfig | 1 -
configs/Sinovoip_BPI_M3_defconfig | 1 -
configs/bananapi_m1_plus_defconfig | 1 -
configs/bananapi_m2_plus_h3_defconfig | 1 -
configs/bananapi_m2_plus_h5_defconfig | 1 -
configs/i12-tvbox_defconfig | 1 -
configs/jesurun_q5_defconfig | 1 -
configs/mangopi_mq_r_defconfig | 12 +
configs/mixtile_loftq_defconfig | 1 -
configs/nanopi_m1_plus_defconfig | 1 -
configs/nanopi_neo_plus2_defconfig | 1 -
configs/nanopi_r1s_h5_defconfig | 1 -
configs/orangepi_pc2_defconfig | 1 -
configs/orangepi_plus2e_defconfig | 1 -
configs/orangepi_plus_defconfig | 2 -
configs/orangepi_win_defconfig | 1 -
configs/pine_h64_defconfig | 1 -
configs/zeropi_defconfig | 1 -
drivers/ata/ahci_sunxi.c | 9 +
drivers/clk/sunxi/Kconfig | 6 +
drivers/clk/sunxi/Makefile | 1 +
drivers/clk/sunxi/clk_d1.c | 101 +++
drivers/gpio/axp_gpio.c | 1 +
drivers/gpio/sunxi_gpio.c | 30 +-
drivers/i2c/sun6i_p2wi.c | 2 +-
drivers/i2c/sun8i_rsb.c | 2 +-
drivers/mmc/sunxi_mmc.c | 12 +-
drivers/net/sun8i_emac.c | 9 +-
drivers/net/sunxi_emac.c | 10 +-
drivers/pinctrl/sunxi/Kconfig | 5 +
drivers/pinctrl/sunxi/pinctrl-sunxi.c | 43 +-
drivers/video/hitachi_tx18d42vm_lcd.c | 1 +
drivers/video/ssd2828.c | 1 -
drivers/video/sunxi/sunxi_display.c | 1 +
drivers/video/sunxi/sunxi_lcd.c | 1 +
include/configs/sunxi-common.h | 2 +-
include/dt-bindings/clock/sun20i-d1-ccu.h | 156 ++++
include/dt-bindings/clock/sun20i-d1-r-ccu.h | 19 +
include/dt-bindings/reset/sun20i-d1-ccu.h | 77 ++
include/dt-bindings/reset/sun20i-d1-r-ccu.h | 16 +
.../arch-sunxi/gpio.h => include/sunxi_gpio.h | 102 ++-
99 files changed, 1936 insertions(+), 296 deletions(-)
create mode 100644 arch/arm/dts/sun8i-t113s-mangopi-mq-r.dts
create mode 100644 arch/arm/dts/sun8i-t113s.dtsi
create mode 100644 arch/arm/include/asm/arch-sunxi/cpu_sunxi_ncat2.h
create mode 100644 arch/arm/include/asm/arch-sunxi/serial.h
delete mode 100644 arch/arm/mach-sunxi/pinmux.c
create mode 100644 arch/riscv/dts/sun20i-d1.dtsi
create mode 100644 arch/riscv/dts/sun20i-d1s.dtsi
create mode 100644 arch/riscv/dts/sunxi-d1-t113.dtsi
create mode 100644 arch/riscv/dts/sunxi-d1s-t113.dtsi
create mode 100644 board/sunxi/dram_sun8i_r528.c
create mode 100644 board/sunxi/pinctrl.c
create mode 100644 configs/mangopi_mq_r_defconfig
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/clock/sun20i-d1-r-ccu.h
create mode 100644 include/dt-bindings/reset/sun20i-d1-ccu.h
create mode 100644 include/dt-bindings/reset/sun20i-d1-r-ccu.h
rename arch/arm/include/asm/arch-sunxi/gpio.h => include/sunxi_gpio.h (74%)

--
2.35.5