[PATCH v2 00/14] OpenSBI Kconfig Support

Heinrich Schuchardt heinrich.schuchardt at canonical.com
Mon Jul 18 23:21:19 PDT 2022


On 7/19/22 06:17, Anup Patel wrote:
> On Tue, Jul 19, 2022 at 9:34 AM Anup Patel <apatel at ventanamicro.com> wrote:
>>
>> +Heinrich
>>
>> On Tue, Jul 19, 2022 at 3:05 AM David Abdurachmanov
>> <david.abdurachmanov at gmail.com> wrote:
>>>
>>> On Mon, Jul 18, 2022 at 8:49 PM Andrew Jones <ajones at ventanamicro.com> wrote:
>>>>
>>>> On Mon, Jul 18, 2022 at 08:25:57PM +0530, Anup Patel wrote:
>>>>> In future, we will see more drivers in OpenSBI for system reset, serial port,
>>>>> power management, etc platform specific devices. We need platform specific
>>>>> compile time configuration to allow users control the size of OpenSBI generic
>>>>> firmware binaries by only enabling desired drivers. In other words, users
>>>>> should be allowed to restrict the set of RISC-V platforms on which OpenSBI
>>>>> generic firmwares built by them can run.
>>>>>
>>>>> To address above, we add Kconfig support for OpenSBI platforms using the
>>>>> kconfig-frontends project which is a standalone kconfig parser.
>>>>>
>>>>> The kconfig-frontends is available as a package/receipe on various distros
>>>>> (such as Debian, UBuntu, OpenSUSE, etc) and Yocto project.
>>>>
>>>> Hi Anup,
>>>>
>>>> It doesn't look like Fedora provides that package. Also, is the source
>>>> for the packages of those other distros maintained? If I found the
>>>> correct source, then it's [1], which hasn't had any attention in five
>>>> years, even though there have been hundreds of commits to Linux's
>>>> scripts/kconfig. I wonder if we shouldn't consider adopting
>>>> scripts/minikconf.py from the QEMU sources and sticking to the kconfig
>>>> language subset that parser supports?
>>>
>>> After spending a bit of time googling about kconfig-frontends it seems
>>> to be a dead project.
>>
>> Yes, the kconfig-frontends project is not being developed but there are
>> forks of this project since quite a few distros and yocto have support for
>> it.

Ubuntu's package is based on 
https://salsa.debian.org/philou/kconfig-frontends which has not seen a 
code update for four years. The upstream project is obviously also dead.

>>
>> Is there a requirement that Fedora only adds packages for active projects ?
>>
>>>
>>> Would kconfiglib work? That seems to be alive. While not directly
>>> available in Fedora too it's on pip.
>>
>> I explored the kconfiglib project. It is only a library and we will endup
>> maintaining our own tools for menuconfig, defconfig, etc in the OpenSBI
>> sources.
> 
> I stand corrected. The kconfiglib project when installed using python-pip
> will install various tools menuconfig, defconfig, etc along with it which is
> very nice.

Securitywise pip is a not recommendable. There is no code review 
required before uploading to the Python package repository.

> 
> If we go with the kconfiglib project then we should expect users to install
> the kconfiglib package before building OpenSBI. Is this a reasonable
> requirement for Fedora and UBuntu ?
> 
> @Heinrich are you okay with this 

Ubuntu provides OpenSBI as a package. So it is package maintainers not 
users that are concerned. kconfig-frontends currently is in the Universe 
repository (community supported). This would have to change since 
OpenSBI is in the main repository (Canonical supported). Putting 
software based on a a dead project into main is not preferred.

Maintaining OpenSBI for a distro is easier with a single version of the 
the software instead of maintaining a package for each board. So I was 
quite happy with PLATFORM=generic ruling them all.

Kconfig is licensed under GPL. It will not be available in BSD 
distributions. Please, include BSD distros in your considerations.

Best regards

Heinrich

> 
> Regards,
> Anup
> 
>>
>> The best thing would be if we can avoid adding more tools and scripts
>> in OpenSBI for kconfig. The kconfig-frontends allows us to do that.
>>
>> If we have to add some tool/script in OpenSBI then I would prefer
>> something (like QEMU scripts/minikconf.py) which is minimalistic
>> and does not add maintenance burden.
>>
>> Regards,
>> Anup
>>
>>>
>>>>
>>>> [1] http://ymorin.is-a-geek.org/projects/kconfig-frontends
>>>>
>>>> Thanks,
>>>> drew
>>>>
>>>>>
>>>>> To try OpenSBI Kconfig support with generic platform, here are few
>>>>> example commands:
>>>>> make PLATFORM=generic             <-- builds OpenSBI using "defconfig"
>>>>> make PLATFORM=generic menuconfig  <-- launches graphical interface for changes
>>>>>
>>>>> These patches can also be found in the kconfig_v2 branch at:
>>>>> https://github.com/avpatel/opensbi.git
>>>>>
>>>>> Changes since v1:
>>>>>   - Fix SPDX license specifier in new Kconfig files
>>>>>
>>>>> Anup Patel (14):
>>>>>    Makefile: Add initial kconfig support for each platform
>>>>>    Makefile: Compile lib/utils sources separately for each platform
>>>>>    lib: utils/serial: Use kconfig for enabling/disabling drivers
>>>>>    lib: utils/reset: Use kconfig for enabling/disabling drivers
>>>>>    lib: utils/sys: Use kconfig for enabling/disabling drivers
>>>>>    lib: utils/timer: Use kconfig for enabling/disabling drivers
>>>>>    lib: utils/ipi: Use kconfig for enabling/disabling drivers
>>>>>    lib: utils/irqchip: Use kconfig for enabling/disabling drivers
>>>>>    lib: utils/i2c: Use kconfig for enabling/disabling drivers
>>>>>    lib: utils/gpio: Use kconfig for enabling/disabling drivers
>>>>>    lib: utils/fdt: Use kconfig for enabling/disabling
>>>>>    platform: generic: Use kconfig for enabling/disabling overrides
>>>>>    platform: Remove redundant config.mk from all platforms
>>>>>    docs: Update documentation for kconfig support
>>>>>
>>>>>   Kconfig                                   |  23 +++++
>>>>>   Makefile                                  | 102 ++++++++++++++++------
>>>>>   README.md                                 |  25 +++++-
>>>>>   docs/firmware/fw_dynamic.md               |   2 +-
>>>>>   docs/firmware/fw_jump.md                  |   4 +-
>>>>>   docs/firmware/fw_payload.md               |   4 +-
>>>>>   docs/library_usage.md                     |   6 +-
>>>>>   docs/platform/platform.md                 |   4 +-
>>>>>   docs/platform_guide.md                    |   9 +-
>>>>>   firmware/Kconfig                          |   1 +
>>>>>   include/sbi_utils/fdt/fdt_domain.h        |   9 ++
>>>>>   include/sbi_utils/fdt/fdt_pmu.h           |  10 +++
>>>>>   include/sbi_utils/ipi/fdt_ipi.h           |   9 ++
>>>>>   include/sbi_utils/irqchip/fdt_irqchip.h   |  10 +++
>>>>>   include/sbi_utils/irqchip/imsic.h         |  10 +++
>>>>>   include/sbi_utils/reset/fdt_reset.h       |  12 +++
>>>>>   include/sbi_utils/serial/fdt_serial.h     |   8 ++
>>>>>   include/sbi_utils/timer/fdt_timer.h       |   9 ++
>>>>>   lib/utils/Kconfig                         |  25 ++++++
>>>>>   lib/utils/fdt/Kconfig                     |  18 ++++
>>>>>   lib/utils/fdt/objects.mk                  |   8 +-
>>>>>   lib/utils/gpio/Kconfig                    |  23 +++++
>>>>>   lib/utils/gpio/objects.mk                 |  10 +--
>>>>>   lib/utils/i2c/Kconfig                     |  23 +++++
>>>>>   lib/utils/i2c/objects.mk                  |  10 +--
>>>>>   lib/utils/ipi/Kconfig                     |  23 +++++
>>>>>   lib/utils/ipi/objects.mk                  |  10 +--
>>>>>   lib/utils/irqchip/Kconfig                 |  41 +++++++++
>>>>>   lib/utils/irqchip/objects.mk              |  22 ++---
>>>>>   lib/utils/libfdt/Kconfig                  |   5 ++
>>>>>   lib/utils/libfdt/objects.mk               |   4 +-
>>>>>   lib/utils/reset/Kconfig                   |  37 ++++++++
>>>>>   lib/utils/reset/objects.mk                |  28 +++---
>>>>>   lib/utils/serial/Kconfig                  |  73 ++++++++++++++++
>>>>>   lib/utils/serial/objects.mk               |  44 +++++-----
>>>>>   lib/utils/sys/Kconfig                     |  13 +++
>>>>>   lib/utils/sys/objects.mk                  |   4 +-
>>>>>   lib/utils/timer/Kconfig                   |  23 +++++
>>>>>   lib/utils/timer/objects.mk                |  10 +--
>>>>>   platform/andes/ae350/Kconfig              |   8 ++
>>>>>   platform/andes/ae350/config.mk            |  36 --------
>>>>>   platform/andes/ae350/configs/defconfig    |   0
>>>>>   platform/andes/ae350/objects.mk           |  29 ++++++
>>>>>   platform/fpga/ariane/Kconfig              |  10 +++
>>>>>   platform/fpga/ariane/config.mk            |  36 --------
>>>>>   platform/fpga/ariane/configs/defconfig    |   0
>>>>>   platform/fpga/ariane/objects.mk           |  35 ++++++++
>>>>>   platform/fpga/openpiton/Kconfig           |  10 +++
>>>>>   platform/fpga/openpiton/config.mk         |  35 --------
>>>>>   platform/fpga/openpiton/configs/defconfig |   0
>>>>>   platform/fpga/openpiton/objects.mk        |  35 ++++++++
>>>>>   platform/generic/Kconfig                  |  26 ++++++
>>>>>   platform/generic/allwinner/objects.mk     |   4 +-
>>>>>   platform/generic/config.mk                |  40 ---------
>>>>>   platform/generic/configs/defconfig        |  29 ++++++
>>>>>   platform/generic/objects.mk               |  33 +++++++
>>>>>   platform/generic/sifive/objects.mk        |   8 +-
>>>>>   platform/kendryte/k210/Kconfig            |  10 +++
>>>>>   platform/kendryte/k210/config.mk          |  19 ----
>>>>>   platform/kendryte/k210/configs/defconfig  |   0
>>>>>   platform/kendryte/k210/objects.mk         |  12 +++
>>>>>   platform/nuclei/ux600/Kconfig             |  10 +++
>>>>>   platform/nuclei/ux600/config.mk           |  30 -------
>>>>>   platform/nuclei/ux600/configs/defconfig   |   0
>>>>>   platform/nuclei/ux600/objects.mk          |  22 +++++
>>>>>   platform/nuclei/ux600/platform.c          |   1 -
>>>>>   platform/template/Kconfig                 |   9 ++
>>>>>   platform/template/config.mk               |  77 ----------------
>>>>>   platform/template/configs/defconfig       |   0
>>>>>   platform/template/objects.mk              |  72 +++++++++++++++
>>>>>   platform/template/platform.c              |   2 +-
>>>>>   scripts/create-binary-archive.sh          |   2 +-
>>>>>   72 files changed, 948 insertions(+), 403 deletions(-)
>>>>>   create mode 100644 Kconfig
>>>>>   create mode 100644 firmware/Kconfig
>>>>>   create mode 100644 lib/utils/Kconfig
>>>>>   create mode 100644 lib/utils/fdt/Kconfig
>>>>>   create mode 100644 lib/utils/gpio/Kconfig
>>>>>   create mode 100644 lib/utils/i2c/Kconfig
>>>>>   create mode 100644 lib/utils/ipi/Kconfig
>>>>>   create mode 100644 lib/utils/irqchip/Kconfig
>>>>>   create mode 100644 lib/utils/libfdt/Kconfig
>>>>>   create mode 100644 lib/utils/reset/Kconfig
>>>>>   create mode 100644 lib/utils/serial/Kconfig
>>>>>   create mode 100644 lib/utils/sys/Kconfig
>>>>>   create mode 100644 lib/utils/timer/Kconfig
>>>>>   create mode 100644 platform/andes/ae350/Kconfig
>>>>>   delete mode 100644 platform/andes/ae350/config.mk
>>>>>   create mode 100644 platform/andes/ae350/configs/defconfig
>>>>>   create mode 100644 platform/fpga/ariane/Kconfig
>>>>>   delete mode 100644 platform/fpga/ariane/config.mk
>>>>>   create mode 100644 platform/fpga/ariane/configs/defconfig
>>>>>   create mode 100644 platform/fpga/openpiton/Kconfig
>>>>>   delete mode 100644 platform/fpga/openpiton/config.mk
>>>>>   create mode 100644 platform/fpga/openpiton/configs/defconfig
>>>>>   create mode 100644 platform/generic/Kconfig
>>>>>   delete mode 100644 platform/generic/config.mk
>>>>>   create mode 100644 platform/generic/configs/defconfig
>>>>>   create mode 100644 platform/kendryte/k210/Kconfig
>>>>>   delete mode 100644 platform/kendryte/k210/config.mk
>>>>>   create mode 100644 platform/kendryte/k210/configs/defconfig
>>>>>   create mode 100644 platform/nuclei/ux600/Kconfig
>>>>>   delete mode 100644 platform/nuclei/ux600/config.mk
>>>>>   create mode 100644 platform/nuclei/ux600/configs/defconfig
>>>>>   create mode 100644 platform/template/Kconfig
>>>>>   delete mode 100644 platform/template/config.mk
>>>>>   create mode 100644 platform/template/configs/defconfig
>>>>>
>>>>> --
>>>>> 2.34.1
>>>>>
>>>>>
>>>>> --
>>>>> opensbi mailing list
>>>>> opensbi at lists.infradead.org
>>>>> http://lists.infradead.org/mailman/listinfo/opensbi
>>>>
>>>> --
>>>> opensbi mailing list
>>>> opensbi at lists.infradead.org
>>>> http://lists.infradead.org/mailman/listinfo/opensbi




More information about the opensbi mailing list