[U-Boot] [PATCH v5 00/26] clk: Add Allwinner CLK, RESET support

André Przywara andre.przywara at arm.com
Sun Jan 6 13:17:40 UTC 2019


On 31/12/2018 16:59, Jagan Teki wrote:

Hi Jagan,

many thanks for picking this up, I was about to come back to this
myself. I am looking at the pinctrl part at the moment, so good you are
working on the clocks!

TL;DR: I am good with the first patches, but would like to drop the last
five 5 patches from this series, and discuss the whole tree approach (or
at least the patch) further.

> Although the previous version[1] is properly handled the clock gates
> with enable and disable management, but this series is trying to add
> some more complex Allwinner CLK architecture by handling parent clock
> and other CLK attributes.
> 
> Allwinner Clock control unit comprises of parent clocks, gates, multiplexers,
> dividers, multipliers, pre/post dividers and flags etc.
> 
> So, the U-Boot implementation of ccu has divided into gates and tree.
> gates are generic clock configuration of enable/disable bit management
> and these can be handled via ccu_clock_gate, which is almost same as
> previous version changes.

So I like this part very much, all those gates and resets are nicely
readable.
Also the removal of the special sunxi USB drivers is very welcome.
So up until patch including 21/26, except 15/26, I am all in.

> Tree clock has more Allwinner CLK attributes like clock type, fixed clocks,
> misc clocks, mp, nk, nkm, nkmp, pre/post div, flags etc and these can be
> managed via ccu_clock_tree.

Mmmh, this looks quite complex for U-Boot's very limited needs to me.
As far as I can see we basically have a static setup for most devices,
the ones where we actually change the parent clocks are only clock
consumers, namely DE/TCON and MMC. The former chooses a parent once,
based on the calculated clock rate. Only for MMC we switch it from OSC24
(for the initial SPI-like setup phase) to PLL_PERIPH0 at runtime.
But however this does not really affect the tree, and also we never do
re-parenting.
Under this premises, can't we do this somewhat simpler? At the end of
the day this is U-Boot, not a sophisticated kernel, and we got away with
quite simple clock code so far.

Meanwhile I am struggling to understand your approach, which looks
impressive on the first glance, but leave me scratching my head when
looking at details. I will comment on 15/26 for the parts I am wondering
about. I was trying to add MMC support and hit some issues.

On the SPI part:
I am bit puzzled about the last 5 patches dealing with SPI. I see that
they depend on the others, but would like to deal with them separately.

First, patch 25/26 (the sun6i SPI driver) is a bit surprising to find in
here. I guess you want to have an easy user for another clock, but I
believe this should be a separate series. There were other posts already
for a sun6i driver, also I think we should have a unified driver instead
of duplicating most of it again. See Oskari's latest post.

Secondly: I don't think the SPI clocks are correct. You model them as
simple gates only, kind of ignoring the divider settings. This is what
the current sun4i driver does as well, but: it writes 1U << 31 into the
clock register, which explicitly writes 0 to the other bits, setting 24
MHz as the input rate. Your approach would read-modify-write the
register, just setting bit 31 and leaving the other ones as they were
before.
So why isn't that using your new tree approach? Looks like a standard
mux/divider clock to me.

Cheers,
Andre.


> On top of initial clock gates supported from previous version, this 
> series is trying to add support for MP, NK, MISC, FIXED clock types
> with get_rate functionality and that can eventually used by uart driver.
> 
> On the summary, this would be an initial infrasture that can fit into
> remaining clock handle support like set_rate, so the rest of code will
> add on the requirement basics.
> 
> Once this is fine, I will try to add code for other parts especially for
> MMC since we have migration deadline for BLK, MMC, SCSI.
> 
> So, please do let me know if anyone have any inputs.
> 
> All these changes available at u-boot-sunxi/clk-next
> 
> thanks,
> Jagan.
> 
> [1] https://patchwork.ozlabs.org/cover/962226/
> 
> Jagan Teki (26):
>   clk: Add Allwinner A64 CLK driver
>   reset: Add Allwinner RESET driver
>   clk: sunxi: Add Allwinner H3/H5 CLK driver
>   clk: sunxi: Add Allwinner A10/A20 CLK driver
>   clk: sunxi: Add Allwinner A10s/A13 CLK driver
>   clk: sunxi: Add Allwinner A31 CLK driver
>   clk: sunxi: Add Allwinner A23/A33 CLK driver
>   clk: sunxi: Add Allwinner A83T CLK driver
>   clk: sunxi: Add Allwinner R40 CLK driver
>   clk: sunxi: Add Allwinner V3S CLK driver
>   clk: sunxi: Implement UART clocks
>   clk: sunxi: Implement UART resets
>   clk: sunxi: Add Allwinner H6 CLK driver
>   sunxi: A64: Update sun50i-a64-ccu.h
>   clk: sunxi: Add ccu clock tree support
>   sunxi: Enable CLK
>   phy: sun4i-usb: Use CLK and RESET support
>   reset: Add reset valid
>   musb-new: sunxi: Use CLK and RESET support
>   sunxi: usb: Switch to Generic host controllers
>   usb: host: Drop [e-o]hci-sunxi drivers
>   clk: sunxi: Implement SPI clocks
>   spi: sun4i: Add CLK support
>   clk: sunxi: Implement A64 SPI clocks, resets
>   spi: Add Allwinner A31 SPI driver
>   board: sopine: Enable SPI/SPI-FLASH
> 
>  .../sun50i-a64-sopine-baseboard-u-boot.dtsi   |  16 +
>  arch/arm/include/asm/arch-sunxi/ccu.h         | 284 +++++++++++++
>  arch/arm/mach-sunxi/Kconfig                   |  12 +
>  configs/A10-OLinuXino-Lime_defconfig          |   1 +
>  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-OLinuXino-Lime_defconfig          |   1 +
>  configs/A20-Olimex-SOM204-EVB_defconfig       |   1 +
>  configs/Auxtek-T003_defconfig                 |   1 +
>  configs/Auxtek-T004_defconfig                 |   1 +
>  configs/Bananapi_defconfig                    |   1 +
>  configs/Bananapi_m2m_defconfig                |   1 +
>  configs/Bananapro_defconfig                   |   1 +
>  configs/CHIP_defconfig                        |   1 +
>  configs/CHIP_pro_defconfig                    |   1 +
>  configs/CSQ_CS908_defconfig                   |   1 +
>  configs/Colombus_defconfig                    |   1 +
>  configs/Cubieboard2_defconfig                 |   1 +
>  configs/Cubieboard_defconfig                  |   1 +
>  configs/Cubietruck_plus_defconfig             |   1 +
>  configs/Hummingbird_A31_defconfig             |   1 +
>  configs/Itead_Ibox_A20_defconfig              |   1 +
>  configs/Linksprite_pcDuino3_Nano_defconfig    |   1 +
>  configs/Linksprite_pcDuino3_defconfig         |   1 +
>  configs/Linksprite_pcDuino_defconfig          |   1 +
>  configs/MK808C_defconfig                      |   1 +
>  configs/Marsboard_A10_defconfig               |   1 +
>  configs/Mele_A1000G_quad_defconfig            |   1 +
>  configs/Mele_A1000_defconfig                  |   1 +
>  configs/Mele_I7_defconfig                     |   1 +
>  configs/Mele_M3_defconfig                     |   1 +
>  configs/Mele_M5_defconfig                     |   1 +
>  configs/Mele_M9_defconfig                     |   1 +
>  configs/Mini-X_defconfig                      |   1 +
>  configs/Orangepi_defconfig                    |   1 +
>  configs/Orangepi_mini_defconfig               |   1 +
>  configs/Sinlinx_SinA31s_defconfig             |   1 +
>  configs/Sinlinx_SinA33_defconfig              |   1 +
>  configs/Sinovoip_BPI_M2_Plus_defconfig        |   1 +
>  configs/Sinovoip_BPI_M2_defconfig             |   1 +
>  configs/Sinovoip_BPI_M3_defconfig             |   1 +
>  configs/Wexler_TAB7200_defconfig              |   1 +
>  configs/Wobo_i5_defconfig                     |   1 +
>  configs/a64-olinuxino_defconfig               |   1 +
>  configs/ba10_tv_box_defconfig                 |   1 +
>  configs/bananapi_m1_plus_defconfig            |   1 +
>  configs/bananapi_m64_defconfig                |   1 +
>  configs/ga10h_v1_1_defconfig                  |   1 +
>  configs/h8_homlet_v2_defconfig                |   1 +
>  configs/i12-tvbox_defconfig                   |   1 +
>  configs/icnova-a20-swac_defconfig             |   1 +
>  configs/inet1_defconfig                       |   1 +
>  configs/inet_q972_defconfig                   |   1 +
>  configs/jesurun_q5_defconfig                  |   1 +
>  configs/libretech_all_h3_cc_h2_plus_defconfig |   1 +
>  configs/libretech_all_h3_cc_h3_defconfig      |   1 +
>  configs/libretech_all_h3_cc_h5_defconfig      |   1 +
>  configs/mixtile_loftq_defconfig               |   1 +
>  configs/mk802_a10s_defconfig                  |   1 +
>  configs/mk802_defconfig                       |   1 +
>  configs/mk802ii_defconfig                     |   1 +
>  configs/nanopi_a64_defconfig                  |   1 +
>  configs/nanopi_m1_defconfig                   |   1 +
>  configs/nanopi_m1_plus_defconfig              |   1 +
>  configs/nanopi_neo2_defconfig                 |   1 +
>  configs/nanopi_neo_air_defconfig              |   1 +
>  configs/nanopi_neo_defconfig                  |   1 +
>  configs/nanopi_neo_plus2_defconfig            |   1 +
>  configs/orangepi_2_defconfig                  |   1 +
>  configs/orangepi_lite_defconfig               |   1 +
>  configs/orangepi_one_defconfig                |   1 +
>  configs/orangepi_pc2_defconfig                |   1 +
>  configs/orangepi_pc_defconfig                 |   1 +
>  configs/orangepi_pc_plus_defconfig            |   1 +
>  configs/orangepi_plus2e_defconfig             |   1 +
>  configs/orangepi_plus_defconfig               |   1 +
>  configs/orangepi_prime_defconfig              |   1 +
>  configs/orangepi_r1_defconfig                 |   1 +
>  configs/orangepi_win_defconfig                |   1 +
>  configs/orangepi_zero_defconfig               |   1 +
>  configs/orangepi_zero_plus2_defconfig         |   1 +
>  configs/orangepi_zero_plus_defconfig          |   1 +
>  configs/parrot_r16_defconfig                  |   1 +
>  configs/pine64_plus_defconfig                 |   1 +
>  configs/r7-tv-dongle_defconfig                |   1 +
>  configs/sopine_baseboard_defconfig            |   8 +
>  configs/sun8i_a23_evb_defconfig               |   1 +
>  configs/sunxi_Gemei_G9_defconfig              |   1 +
>  configs/tbs_a711_defconfig                    |   1 +
>  drivers/clk/Kconfig                           |   1 +
>  drivers/clk/Makefile                          |   1 +
>  drivers/clk/sunxi/Kconfig                     |  82 ++++
>  drivers/clk/sunxi/Makefile                    |  18 +
>  drivers/clk/sunxi/clk_a10.c                   |  77 ++++
>  drivers/clk/sunxi/clk_a10s.c                  |  68 +++
>  drivers/clk/sunxi/clk_a23.c                   |  75 ++++
>  drivers/clk/sunxi/clk_a31.c                   |  82 ++++
>  drivers/clk/sunxi/clk_a64.c                   | 125 ++++++
>  drivers/clk/sunxi/clk_a83t.c                  |  75 ++++
>  drivers/clk/sunxi/clk_h3.c                    |  89 ++++
>  drivers/clk/sunxi/clk_h6.c                    |  53 +++
>  drivers/clk/sunxi/clk_r40.c                   |  88 ++++
>  drivers/clk/sunxi/clk_sunxi.c                 | 256 +++++++++++
>  drivers/clk/sunxi/clk_v3s.c                   |  59 +++
>  drivers/phy/allwinner/phy-sun4i-usb.c         |  77 +++-
>  drivers/reset/Kconfig                         |   8 +
>  drivers/reset/Makefile                        |   1 +
>  drivers/reset/reset-sunxi.c                   | 125 ++++++
>  drivers/spi/Kconfig                           |   6 +
>  drivers/spi/Makefile                          |   1 +
>  drivers/spi/sun4i_spi.c                       |  46 +-
>  drivers/spi/sun6i_spi.c                       | 398 ++++++++++++++++++
>  drivers/usb/host/Kconfig                      |   2 +
>  drivers/usb/host/Makefile                     |   2 -
>  drivers/usb/host/ehci-sunxi.c                 | 204 ---------
>  drivers/usb/host/ohci-sunxi.c                 | 233 ----------
>  drivers/usb/musb-new/sunxi.c                  |  81 ++--
>  include/configs/sun4i.h                       |   4 -
>  include/configs/sun50i.h                      |   5 -
>  include/configs/sun5i.h                       |   4 -
>  include/configs/sun6i.h                       |   4 -
>  include/configs/sun7i.h                       |   4 -
>  include/configs/sun8i.h                       |   4 -
>  include/configs/sunxi-common.h                |   1 -
>  include/dt-bindings/clock/sun50i-a64-ccu.h    |   2 +
>  include/reset.h                               |  11 +
>  scripts/config_whitelist.txt                  |   2 -
>  130 files changed, 2248 insertions(+), 534 deletions(-)
>  create mode 100644 arch/arm/dts/sun50i-a64-sopine-baseboard-u-boot.dtsi
>  create mode 100644 arch/arm/include/asm/arch-sunxi/ccu.h
>  create mode 100644 drivers/clk/sunxi/Kconfig
>  create mode 100644 drivers/clk/sunxi/Makefile
>  create mode 100644 drivers/clk/sunxi/clk_a10.c
>  create mode 100644 drivers/clk/sunxi/clk_a10s.c
>  create mode 100644 drivers/clk/sunxi/clk_a23.c
>  create mode 100644 drivers/clk/sunxi/clk_a31.c
>  create mode 100644 drivers/clk/sunxi/clk_a64.c
>  create mode 100644 drivers/clk/sunxi/clk_a83t.c
>  create mode 100644 drivers/clk/sunxi/clk_h3.c
>  create mode 100644 drivers/clk/sunxi/clk_h6.c
>  create mode 100644 drivers/clk/sunxi/clk_r40.c
>  create mode 100644 drivers/clk/sunxi/clk_sunxi.c
>  create mode 100644 drivers/clk/sunxi/clk_v3s.c
>  create mode 100644 drivers/reset/reset-sunxi.c
>  create mode 100644 drivers/spi/sun6i_spi.c
>  delete mode 100644 drivers/usb/host/ehci-sunxi.c
>  delete mode 100644 drivers/usb/host/ohci-sunxi.c
> 



More information about the U-Boot mailing list