[PATCH v1] sunxi: Make SYS_VENDOR, SYS_BOARD, SYS_CONFIG_NAME configurable

Andre Przywara andre.przywara at arm.com
Thu Apr 28 02:16:02 CEST 2022


On Wed, 27 Apr 2022 08:42:09 +0800
qianfan <qianfanguijin at 163.com> wrote:

Hi,

> 在 2022/4/26 20:49, Andre Przywara 写道:
> > On Thu, 21 Apr 2022 11:32:11 +0800
> > qianfanguijin at 163.com wrote:
> >
> > Hi,
> >
> >> From: qianfan Zhao <qianfanguijin at 163.com>
> >>
> >> The board is not configurable if use sunxi soc. Add Kconfig items and
> >> make custom board available.
> > What problem does that solve?
> > And apart from that, I am afraid this is broken in several ways:
> > - The actual definition of those symbols is in arch/Kconfig. Having those
> > "config SYS_*" lines here is just to provide the various default values.
> > And changes to the definition should go there (and will be NAKed there).
> > - Those options are NOT meant to be user changeable, that's why their
> > original definition doesn't provide a prompt. The value of those options
> > have implications to the build system, so by just putting *something* in
> > here you will break the build. So any changes to those values would
> > require code and build system changes as well.
> > - The mainline Allwinner port is a bit special (and not in the worst
> > way!), in that it really doesn't use the generic U-Boot notion of "board
> > vendor code", for instance. So every board uses board/sunxi, despite the
>
> Yes, this is the problem I want to slove. All sunxi based board use 
> board/sunxi by default, I don't think it's a good way to adding other
> custom code to board/sunxi.c, so I want create another board and select it
> in Kconfig.

Well, as I hinted above, there really shouldn't be random custom code
for one particular board. There should be a DT based driver for your
hardware, and generic code to handle your tasks.

> > actual board manufacturer. And this makes a lot of sense, since the vast
> > majority of the code is really just SoC dependent, and the differences
> > between boards should be covered by the DT. There are some board specific
> It's better if the dependence can convert to dt, but not all of them.
> On my board there has an gpio watchdog

Have you checked drivers/watchdog/gpio_wdt.c? The DT binding in the
Linux kernel tree explains the options. It looks like the U-Boot driver
could use an update to handle everything the binding promises.
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Documentation/devicetree/bindings/watchdog/gpio-wdt.txt

> and spi lcd. I need add somethings to toggle watchdog,

For the watchdog you should be good with that UCLASS_WDT driver, once
this is enabled in your _defconfig, and the DT node is in, it should
work out of the box.

> prepare spi lcd

There are drivers for some SPI display chips in drivers/video/Kconfig,
maybe one of them can drive your hardware? If not, it would be good to
add some driver for it.

> and draw splash.

I don't know the exact procedure from the top of my head, but a splash
screen is a standard U-Boot feature, with a driver in place it should
work by just providing a bitmap.

If you need to trigger something custom for your board, put that into
your environment, either in a stored version, or through CONFIG symbols.

If you have something very simple (like flipping a GPIO), which is hard
to express otherwise, you could try to add this somewhere in
board/sunxi/board.c, and control this with a Kconfig symbol.
Alternatively you could use the built-in gpio command through some
custom boot script, for instance.

> So I want create a board dir and select it in Kconfig.

So I am very much against a per-board dir, especially given that we
survived with 160 boards without one so far. Having a SoC dir could
actually prove useful, but that won't help in your case.

If you show me more of your code, I could possibly direct you more
specifically.

Cheers,
Andre

> > hacks, which we cover by config options, like CONFIG_PINE64_DT_SELECTION.
> >
> > So I am afraid this is not going anywhere.
> > If this is solving some problem for you, please describe the problem here,
> > and I am sure we will find a much better solution.
> > Adding support for a new board (with the SoC already supported) would just
> > require a defconfig and the .dts file.
> >
> > Cheers,
> > Andre
> >
> >> Signed-off-by: qianfan Zhao <qianfanguijin at 163.com>
> >> ---
> >>   arch/arm/mach-sunxi/Kconfig | 17 +++++++++++++++++
> >>   1 file changed, 17 insertions(+)
> >>
> >> diff --git a/arch/arm/mach-sunxi/Kconfig b/arch/arm/mach-sunxi/Kconfig
> >> index 2c18cf02d1..03460870db 100644
> >> --- a/arch/arm/mach-sunxi/Kconfig
> >> +++ b/arch/arm/mach-sunxi/Kconfig
> >> @@ -598,6 +598,7 @@ config SYS_CLK_FREQ
> >>   	default 1008000000 if MACH_SUN50I_H616
> >>   
> >>   config SYS_CONFIG_NAME
> >> +	string "Board configuration name"
> >>   	default "sun4i" if MACH_SUN4I
> >>   	default "sun5i" if MACH_SUN5I
> >>   	default "sun6i" if MACH_SUN6I
> >> @@ -607,9 +608,25 @@ config SYS_CONFIG_NAME
> >>   	default "sun50i" if MACH_SUN50I
> >>   	default "sun50i" if MACH_SUN50I_H6
> >>   	default "sun50i" if MACH_SUN50I_H616
> >> +	help
> >> +	  This option contains information about board configuration name.
> >> +	  Based on this option include/configs/<CONFIG_SYS_CONFIG_NAME>.h header
> >> +	  will be used for board configuration.
> >>   
> >>   config SYS_BOARD
> >> +	string "Board name"
> >>   	default "sunxi"
> >> +	help
> >> +	  This option contains information about board name.
> >> +	  Based on this option board/<CONFIG_SYS_VENDOR>/<CONFIG_SYS_BOARD> will
> >> +	  be used.
> >> +
> >> +config SYS_VENDOR
> >> +	string "Vendor name"
> >> +	help
> >> +	  This option contains information about board name.
> >> +	  Based on this option board/<CONFIG_SYS_VENDOR>/<CONFIG_SYS_BOARD> will
> >> +	  be used.
> >>   
> >>   config SYS_SOC
> >>   	default "sunxi"
> 



More information about the U-Boot mailing list