All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2 00/14] OpenSBI Kconfig Support
@ 2022-07-18 14:55 Anup Patel
  2022-07-18 14:55 ` [PATCH v2 01/14] Makefile: Add initial kconfig support for each platform Anup Patel
                   ` (14 more replies)
  0 siblings, 15 replies; 26+ messages in thread
From: Anup Patel @ 2022-07-18 14:55 UTC (permalink / raw)
  To: opensbi

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.

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



^ permalink raw reply	[flat|nested] 26+ messages in thread

* [PATCH v2 01/14] Makefile: Add initial kconfig support for each platform
  2022-07-18 14:55 [PATCH v2 00/14] OpenSBI Kconfig Support Anup Patel
@ 2022-07-18 14:55 ` Anup Patel
  2022-07-18 14:55 ` [PATCH v2 02/14] Makefile: Compile lib/utils sources separately " Anup Patel
                   ` (13 subsequent siblings)
  14 siblings, 0 replies; 26+ messages in thread
From: Anup Patel @ 2022-07-18 14:55 UTC (permalink / raw)
  To: opensbi

We extend the top-level makefile to allow kconfig based configuration
for each platform where each platform has it's own set of configs with
"defconfig" being the default config.

Signed-off-by: Anup Patel <apatel@ventanamicro.com>
---
 Kconfig                                   | 23 ++++++++++
 Makefile                                  | 54 +++++++++++++++++++++--
 firmware/Kconfig                          |  1 +
 lib/utils/Kconfig                         |  1 +
 platform/andes/ae350/Kconfig              |  5 +++
 platform/andes/ae350/configs/defconfig    |  0
 platform/fpga/ariane/Kconfig              |  5 +++
 platform/fpga/ariane/configs/defconfig    |  0
 platform/fpga/openpiton/Kconfig           |  5 +++
 platform/fpga/openpiton/configs/defconfig |  0
 platform/generic/Kconfig                  |  5 +++
 platform/generic/configs/defconfig        |  0
 platform/kendryte/k210/Kconfig            |  5 +++
 platform/kendryte/k210/configs/defconfig  |  0
 platform/nuclei/ux600/Kconfig             |  5 +++
 platform/nuclei/ux600/configs/defconfig   |  0
 platform/template/Kconfig                 |  5 +++
 platform/template/configs/defconfig       |  0
 18 files changed, 111 insertions(+), 3 deletions(-)
 create mode 100644 Kconfig
 create mode 100644 firmware/Kconfig
 create mode 100644 lib/utils/Kconfig
 create mode 100644 platform/andes/ae350/Kconfig
 create mode 100644 platform/andes/ae350/configs/defconfig
 create mode 100644 platform/fpga/ariane/Kconfig
 create mode 100644 platform/fpga/ariane/configs/defconfig
 create mode 100644 platform/fpga/openpiton/Kconfig
 create mode 100644 platform/fpga/openpiton/configs/defconfig
 create mode 100644 platform/generic/Kconfig
 create mode 100644 platform/generic/configs/defconfig
 create mode 100644 platform/kendryte/k210/Kconfig
 create mode 100644 platform/kendryte/k210/configs/defconfig
 create mode 100644 platform/nuclei/ux600/Kconfig
 create mode 100644 platform/nuclei/ux600/configs/defconfig
 create mode 100644 platform/template/Kconfig
 create mode 100644 platform/template/configs/defconfig

diff --git a/Kconfig b/Kconfig
new file mode 100644
index 0000000..b1e253c
--- /dev/null
+++ b/Kconfig
@@ -0,0 +1,23 @@
+# SPDX-License-Identifier: BSD-2-Clause
+
+mainmenu "OpenSBI $OPENSBI_PLATFORM Configuration"
+
+config OPENSBI_SRC_DIR
+	string
+	option env="OPENSBI_SRC_DIR"
+
+config OPENSBI_PLATFORM
+	string
+	option env="OPENSBI_PLATFORM"
+
+config OPENSBI_PLATFORM_SRC_DIR
+	string
+	option env="OPENSBI_PLATFORM_SRC_DIR"
+
+menu "Platform Options"
+source "$OPENSBI_PLATFORM_SRC_DIR/Kconfig"
+endmenu
+
+source "$OPENSBI_SRC_DIR/lib/utils/Kconfig"
+
+source "$OPENSBI_SRC_DIR/firmware/Kconfig"
diff --git a/Makefile b/Makefile
index f619ef7..46c7c1c 100644
--- a/Makefile
+++ b/Makefile
@@ -52,6 +52,9 @@ ifdef PLATFORM_DIR
 else
  platform_parent_dir=$(src_dir)/platform
 endif
+ifndef PLATFORM_DEFCONFIG
+PLATFORM_DEFCONFIG=defconfig
+endif
 
 # Check if verbosity is ON for build process
 CMD_PREFIX_DEFAULT := @
@@ -70,6 +73,19 @@ export libsbi_dir=$(CURDIR)/lib/sbi
 export libsbiutils_dir=$(CURDIR)/lib/utils
 export firmware_dir=$(CURDIR)/firmware
 
+# Setup variables for kconfig-frontends
+ifdef PLATFORM
+export KCONFIG_CONFIG=$(platform_build_dir)/.config
+export KCONFIG_AUTOCONFIG=$(platform_build_dir)/auto.conf
+export KCONFIG_TRISTATE=$(platform_build_dir)/tristate.conf
+export KCONFIG_AUTOHEADER=$(platform_build_dir)/autoconf.h
+export KCONFIG_AUTOCONF_CMD=$(platform_build_dir)/include/config/auto.conf.cmd
+# Additional exports for include paths in Kconfig files
+export OPENSBI_SRC_DIR=$(src_dir)
+export OPENSBI_PLATFORM=$(PLATFORM)
+export OPENSBI_PLATFORM_SRC_DIR=$(platform_src_dir)
+endif
+
 # Find library version
 OPENSBI_VERSION_MAJOR=`grep "define OPENSBI_VERSION_MAJOR" $(include_dir)/sbi/sbi_version.h | sed 's/.*MAJOR.*\([0-9][0-9]*\)/\1/'`
 OPENSBI_VERSION_MINOR=`grep "define OPENSBI_VERSION_MINOR" $(include_dir)/sbi/sbi_version.h | sed 's/.*MINOR.*\([0-9][0-9]*\)/\1/'`
@@ -183,8 +199,34 @@ libsbi-object-mks=$(shell if [ -d $(libsbi_dir) ]; then find $(libsbi_dir) -inam
 libsbiutils-object-mks=$(shell if [ -d $(libsbiutils_dir) ]; then find $(libsbiutils_dir) -iname "objects.mk" | sort -r; fi)
 firmware-object-mks=$(shell if [ -d $(firmware_dir) ]; then find $(firmware_dir) -iname "objects.mk" | sort -r; fi)
 
-# Include platform specifig config.mk
+# The "make all" rule should always be first rule
+.PHONY: all
+all:
+
+# Include platform specific .config and config.mk
 ifdef PLATFORM
+.PHONY: menuconfig
+menuconfig: $(platform_src_dir)/Kconfig $(src_dir)/Kconfig
+	$(CMD_PREFIX)mkdir -p `dirname $(KCONFIG_CONFIG)`
+	$(CMD_PREFIX)mkdir -p `dirname $(KCONFIG_AUTOCONF_CMD)`
+	$(CMD_PREFIX)kconfig-mconf $(src_dir)/Kconfig
+	$(CMD_PREFIX)cd $(platform_build_dir) && kconfig-conf --silentoldconfig $(src_dir)/Kconfig
+
+.PHONY: savedefconfig
+savedefconfig: $(platform_src_dir)/Kconfig $(src_dir)/Kconfig
+	$(CMD_PREFIX)mkdir -p `dirname $(KCONFIG_CONFIG)`
+	$(CMD_PREFIX)mkdir -p `dirname $(KCONFIG_AUTOCONF_CMD)`
+	$(CMD_PREFIX)kconfig-conf --savedefconfig `dirname $(KCONFIG_CONFIG)`/defconfig $(src_dir)/Kconfig
+
+$(KCONFIG_CONFIG): $(platform_src_dir)/configs/$(PLATFORM_DEFCONFIG) $(platform_src_dir)/Kconfig $(src_dir)/Kconfig
+	$(CMD_PREFIX)mkdir -p `dirname $(KCONFIG_CONFIG)`
+	$(CMD_PREFIX)mkdir -p `dirname $(KCONFIG_AUTOCONF_CMD)`
+	$(CMD_PREFIX)cp -f $(platform_src_dir)/configs/$(PLATFORM_DEFCONFIG) $(KCONFIG_CONFIG)
+	$(CMD_PREFIX)cd $(platform_build_dir) && kconfig-conf --silentoldconfig --olddefconfig $(src_dir)/Kconfig
+$(KCONFIG_AUTOCONF_CMD): $(KCONFIG_CONFIG)
+include $(KCONFIG_CONFIG)
+include $(KCONFIG_AUTOCONF_CMD)
+
 include $(platform_src_dir)/config.mk
 endif
 
@@ -280,6 +322,9 @@ ifeq ($(BUILD_INFO),y)
 GENFLAGS	+=	-DOPENSBI_BUILD_TIME_STAMP="\"$(OPENSBI_BUILD_TIME_STAMP)\""
 GENFLAGS	+=	-DOPENSBI_BUILD_COMPILER_VERSION="\"$(OPENSBI_BUILD_COMPILER_VERSION)\""
 endif
+ifdef PLATFORM
+GENFLAGS	+=	-include $(KCONFIG_AUTOHEADER)
+endif
 GENFLAGS	+=	$(libsbiutils-genflags-y)
 GENFLAGS	+=	$(platform-genflags-y)
 GENFLAGS	+=	$(firmware-genflags-y)
@@ -419,7 +464,7 @@ targets-y += $(platform_build_dir)/lib/libplatsbi.a
 endif
 targets-y += $(firmware-bins-path-y)
 
-# Default rule "make" should always be first rule
+# The default "make all" rule
 .PHONY: all
 all: $(targets-y)
 
@@ -456,7 +501,7 @@ $(build_dir)/%.o: $(src_dir)/%.S
 	$(call compile_as,$@,$<)
 
 $(build_dir)/%.dep: $(src_dir)/%.carray
-	$(call compile_gen_dep,$@,.c,$<)
+	$(call compile_gen_dep,$@,.c,$< $(KCONFIG_CONFIG))
 	$(call compile_gen_dep,$@,.o,$(@:.dep=.c))
 
 $(build_dir)/%.c: $(src_dir)/%.carray
@@ -523,6 +568,9 @@ docs: $(build_dir)/docs/latex/refman.pdf
 # They should not be included for any "xxxconfig" or "xxxclean" rule
 all-deps-1 = $(if $(findstring config,$(MAKECMDGOALS)),,$(deps-y))
 all-deps-2 = $(if $(findstring clean,$(MAKECMDGOALS)),,$(all-deps-1))
+ifdef PLATFORM
+$(all-deps-2): | $(KCONFIG_CONFIG)
+endif
 -include $(all-deps-2)
 
 # Include external dependency of firmwares after default Makefile rules
diff --git a/firmware/Kconfig b/firmware/Kconfig
new file mode 100644
index 0000000..d6e0506
--- /dev/null
+++ b/firmware/Kconfig
@@ -0,0 +1 @@
+# SPDX-License-Identifier: BSD-2-Clause
diff --git a/lib/utils/Kconfig b/lib/utils/Kconfig
new file mode 100644
index 0000000..d6e0506
--- /dev/null
+++ b/lib/utils/Kconfig
@@ -0,0 +1 @@
+# SPDX-License-Identifier: BSD-2-Clause
diff --git a/platform/andes/ae350/Kconfig b/platform/andes/ae350/Kconfig
new file mode 100644
index 0000000..4b73c76
--- /dev/null
+++ b/platform/andes/ae350/Kconfig
@@ -0,0 +1,5 @@
+# SPDX-License-Identifier: BSD-2-Clause
+
+config PLATFORM_ANDES_AE350
+	bool
+	default y
diff --git a/platform/andes/ae350/configs/defconfig b/platform/andes/ae350/configs/defconfig
new file mode 100644
index 0000000..e69de29
diff --git a/platform/fpga/ariane/Kconfig b/platform/fpga/ariane/Kconfig
new file mode 100644
index 0000000..70d2004
--- /dev/null
+++ b/platform/fpga/ariane/Kconfig
@@ -0,0 +1,5 @@
+# SPDX-License-Identifier: BSD-2-Clause
+
+config PLATFORM_ARIANE_FPGA
+	bool
+	default y
diff --git a/platform/fpga/ariane/configs/defconfig b/platform/fpga/ariane/configs/defconfig
new file mode 100644
index 0000000..e69de29
diff --git a/platform/fpga/openpiton/Kconfig b/platform/fpga/openpiton/Kconfig
new file mode 100644
index 0000000..81e4b76
--- /dev/null
+++ b/platform/fpga/openpiton/Kconfig
@@ -0,0 +1,5 @@
+# SPDX-License-Identifier: BSD-2-Clause
+
+config PLATFORM_OPENPITON_FPGA
+	bool
+	default y
diff --git a/platform/fpga/openpiton/configs/defconfig b/platform/fpga/openpiton/configs/defconfig
new file mode 100644
index 0000000..e69de29
diff --git a/platform/generic/Kconfig b/platform/generic/Kconfig
new file mode 100644
index 0000000..3eab282
--- /dev/null
+++ b/platform/generic/Kconfig
@@ -0,0 +1,5 @@
+# SPDX-License-Identifier: BSD-2-Clause
+
+config PLATFORM_GENERIC
+	bool
+	default y
diff --git a/platform/generic/configs/defconfig b/platform/generic/configs/defconfig
new file mode 100644
index 0000000..e69de29
diff --git a/platform/kendryte/k210/Kconfig b/platform/kendryte/k210/Kconfig
new file mode 100644
index 0000000..889f16b
--- /dev/null
+++ b/platform/kendryte/k210/Kconfig
@@ -0,0 +1,5 @@
+# SPDX-License-Identifier: BSD-2-Clause
+
+config PLATFORM_KENDRYTE_K210
+	bool
+	default y
diff --git a/platform/kendryte/k210/configs/defconfig b/platform/kendryte/k210/configs/defconfig
new file mode 100644
index 0000000..e69de29
diff --git a/platform/nuclei/ux600/Kconfig b/platform/nuclei/ux600/Kconfig
new file mode 100644
index 0000000..c368ef4
--- /dev/null
+++ b/platform/nuclei/ux600/Kconfig
@@ -0,0 +1,5 @@
+# SPDX-License-Identifier: BSD-2-Clause
+
+config PLATFORM_NUCLEI_UX600
+	bool
+	default y
diff --git a/platform/nuclei/ux600/configs/defconfig b/platform/nuclei/ux600/configs/defconfig
new file mode 100644
index 0000000..e69de29
diff --git a/platform/template/Kconfig b/platform/template/Kconfig
new file mode 100644
index 0000000..b9c4350
--- /dev/null
+++ b/platform/template/Kconfig
@@ -0,0 +1,5 @@
+# SPDX-License-Identifier: BSD-2-Clause
+
+config PLATFORM_TEMPLATE
+	bool
+	default y
diff --git a/platform/template/configs/defconfig b/platform/template/configs/defconfig
new file mode 100644
index 0000000..e69de29
-- 
2.34.1



^ permalink raw reply related	[flat|nested] 26+ messages in thread

* [PATCH v2 02/14] Makefile: Compile lib/utils sources separately for each platform
  2022-07-18 14:55 [PATCH v2 00/14] OpenSBI Kconfig Support Anup Patel
  2022-07-18 14:55 ` [PATCH v2 01/14] Makefile: Add initial kconfig support for each platform Anup Patel
@ 2022-07-18 14:55 ` Anup Patel
  2022-07-18 14:56 ` [PATCH v2 03/14] lib: utils/serial: Use kconfig for enabling/disabling drivers Anup Patel
                   ` (12 subsequent siblings)
  14 siblings, 0 replies; 26+ messages in thread
From: Anup Patel @ 2022-07-18 14:55 UTC (permalink / raw)
  To: opensbi

Currently, if same build directory is used to compile two different
platforms then lib/utils objects are shared for these platforms.

We will be having platform specific configs to enable/disable drivers
in lib/utils and select compile time options for lib/utils sources.
This means lib/utils sources will now be compiled in a platform
specific way.

To tackle above, we update top-level Makefile as follows:
1) Don't create libsbiutils.a anymore because this can't be shared
   between platforms.
2) Compile lib/utils sources separately for each platform.
3) Add comments showing which make rules are for lib/sbi, lib/utils,
   firmware, and platform sources.

Signed-off-by: Anup Patel <apatel@ventanamicro.com>
---
 Makefile                         | 48 ++++++++++++++++----------------
 docs/library_usage.md            |  6 +---
 scripts/create-binary-archive.sh |  2 +-
 3 files changed, 26 insertions(+), 30 deletions(-)

diff --git a/Makefile b/Makefile
index 46c7c1c..5fc67db 100644
--- a/Makefile
+++ b/Makefile
@@ -240,8 +240,8 @@ include $(firmware-object-mks)
 
 # Setup list of objects
 libsbi-objs-path-y=$(foreach obj,$(libsbi-objs-y),$(build_dir)/lib/sbi/$(obj))
-libsbiutils-objs-path-y=$(foreach obj,$(libsbiutils-objs-y),$(build_dir)/lib/utils/$(obj))
 ifdef PLATFORM
+libsbiutils-objs-path-y=$(foreach obj,$(libsbiutils-objs-y),$(platform_build_dir)/lib/utils/$(obj))
 platform-objs-path-y=$(foreach obj,$(platform-objs-y),$(platform_build_dir)/$(obj))
 firmware-bins-path-y=$(foreach bin,$(firmware-bins-y),$(platform_build_dir)/firmware/$(bin))
 endif
@@ -458,7 +458,6 @@ compile_gen_dep = $(CMD_PREFIX)mkdir -p `dirname $(1)`; \
 	     echo "$(1:.dep=$(2)): $(3)" >> $(1)
 
 targets-y  = $(build_dir)/lib/libsbi.a
-targets-y  += $(build_dir)/lib/libsbiutils.a
 ifdef PLATFORM
 targets-y += $(platform_build_dir)/lib/libplatsbi.a
 endif
@@ -471,12 +470,10 @@ all: $(targets-y)
 # Preserve all intermediate files
 .SECONDARY:
 
+# Rules for lib/sbi sources
 $(build_dir)/lib/libsbi.a: $(libsbi-objs-path-y)
 	$(call compile_ar,$@,$^)
 
-$(build_dir)/lib/libsbiutils.a: $(libsbi-objs-path-y) $(libsbiutils-objs-path-y)
-	$(call compile_ar,$@,$^)
-
 $(platform_build_dir)/lib/libplatsbi.a: $(libsbi-objs-path-y) $(libsbiutils-objs-path-y) $(platform-objs-path-y)
 	$(call compile_ar,$@,$^)
 
@@ -500,22 +497,14 @@ $(build_dir)/%.dep: $(src_dir)/%.S
 $(build_dir)/%.o: $(src_dir)/%.S
 	$(call compile_as,$@,$<)
 
-$(build_dir)/%.dep: $(src_dir)/%.carray
+# Rules for platform sources
+$(platform_build_dir)/%.dep: $(platform_src_dir)/%.carray
 	$(call compile_gen_dep,$@,.c,$< $(KCONFIG_CONFIG))
 	$(call compile_gen_dep,$@,.o,$(@:.dep=.c))
 
-$(build_dir)/%.c: $(src_dir)/%.carray
+$(platform_build_dir)/%.c: $(platform_src_dir)/%.carray
 	$(call compile_carray,$@,$<)
 
-$(platform_build_dir)/%.bin: $(platform_build_dir)/%.elf
-	$(call compile_objcopy,$@,$<)
-
-$(platform_build_dir)/%.elf: $(platform_build_dir)/%.o $(platform_build_dir)/%.elf.ld $(platform_build_dir)/lib/libplatsbi.a
-	$(call compile_elf,$@,$@.ld,$< $(platform_build_dir)/lib/libplatsbi.a)
-
-$(platform_build_dir)/%.ld: $(src_dir)/%.ldS
-	$(call compile_cpp,$@,$<)
-
 $(platform_build_dir)/%.dep: $(platform_src_dir)/%.c
 	$(call compile_cc_dep,$@,$<)
 
@@ -539,6 +528,23 @@ $(platform_build_dir)/%.c: $(platform_build_dir)/%.dtb
 $(platform_build_dir)/%.dtb: $(platform_src_dir)/%.dts
 	$(call compile_dts,$@,$<)
 
+# Rules for lib/utils and firmware sources
+$(platform_build_dir)/%.bin: $(platform_build_dir)/%.elf
+	$(call compile_objcopy,$@,$<)
+
+$(platform_build_dir)/%.elf: $(platform_build_dir)/%.o $(platform_build_dir)/%.elf.ld $(platform_build_dir)/lib/libplatsbi.a
+	$(call compile_elf,$@,$@.ld,$< $(platform_build_dir)/lib/libplatsbi.a)
+
+$(platform_build_dir)/%.ld: $(src_dir)/%.ldS
+	$(call compile_cpp,$@,$<)
+
+$(platform_build_dir)/%.dep: $(src_dir)/%.carray
+	$(call compile_gen_dep,$@,.c,$< $(KCONFIG_CONFIG))
+	$(call compile_gen_dep,$@,.o,$(@:.dep=.c))
+
+$(platform_build_dir)/%.c: $(src_dir)/%.carray
+	$(call compile_carray,$@,$<)
+
 $(platform_build_dir)/%.dep: $(src_dir)/%.c
 	$(call compile_cc_dep,$@,$<)
 
@@ -592,7 +598,6 @@ endif
 endif
 
 install_targets-y  = install_libsbi
-install_targets-y  += install_libsbiutils
 ifdef PLATFORM
 install_targets-y += install_libplatsbi
 install_targets-y += install_firmwares
@@ -607,17 +612,12 @@ install_libsbi: $(build_dir)/lib/libsbi.a
 	$(call inst_header_dir,$(install_root_dir)/$(install_include_path),$(include_dir)/sbi)
 	$(call inst_file,$(install_root_dir)/$(install_lib_path)/libsbi.a,$(build_dir)/lib/libsbi.a)
 
-.PHONY: install_libsbiutils
-install_libsbiutils: $(build_dir)/lib/libsbiutils.a
-	$(call inst_header_dir,$(install_root_dir)/$(install_include_path),$(include_dir)/sbi_utils)
-	$(call inst_file,$(install_root_dir)/$(install_lib_path)/libsbiutils.a,$(build_dir)/lib/libsbiutils.a)
-
 .PHONY: install_libplatsbi
-install_libplatsbi: $(platform_build_dir)/lib/libplatsbi.a $(build_dir)/lib/libsbi.a $(build_dir)/lib/libsbiutils.a
+install_libplatsbi: $(platform_build_dir)/lib/libplatsbi.a $(build_dir)/lib/libsbi.a
 	$(call inst_file,$(install_root_dir)/$(install_lib_path)/opensbi/$(platform_subdir)/lib/libplatsbi.a,$(platform_build_dir)/lib/libplatsbi.a)
 
 .PHONY: install_firmwares
-install_firmwares: $(platform_build_dir)/lib/libplatsbi.a $(build_dir)/lib/libsbi.a $(build_dir)/lib/libsbiutils.a $(firmware-bins-path-y)
+install_firmwares: $(platform_build_dir)/lib/libplatsbi.a $(build_dir)/lib/libsbi.a $(firmware-bins-path-y)
 	$(call inst_file_list,$(install_root_dir),$(build_dir),$(install_firmware_path)/$(platform_subdir)/firmware,$(firmware-elfs-path-y))
 	$(call inst_file_list,$(install_root_dir),$(build_dir),$(install_firmware_path)/$(platform_subdir)/firmware,$(firmware-bins-path-y))
 
diff --git a/docs/library_usage.md b/docs/library_usage.md
index ff99801..d5d2ba9 100644
--- a/docs/library_usage.md
+++ b/docs/library_usage.md
@@ -8,11 +8,7 @@ OpenSBI provides two types of static libraries:
    hooks for the execution of this interface must be provided by the firmware or
    bootloader linking with this library. This library is installed as
    *<install_directory>/lib/libsbi.a*
-2. *libsbiutils.a* - A static library that will contain all common code required
-   by any platform supported in OpenSBI. It will be built by default and included
-   in libplatsbi.a. This library is installed as
-   *<install_directory>/lib/libsbiutils.a*.
-3. *libplatsbi.a* - An example platform-specific static library integrating
+2. *libplatsbi.a* - An example platform-specific static library integrating
    *libsbi.a* with platform-specific hooks. This library is available only for
    the platforms supported by OpenSBI. This library is installed as
    *<install_directory>/platform/<platform_subdir>/lib/libplatsbi.a*
diff --git a/scripts/create-binary-archive.sh b/scripts/create-binary-archive.sh
index 43c5452..261a45a 100755
--- a/scripts/create-binary-archive.sh
+++ b/scripts/create-binary-archive.sh
@@ -118,7 +118,7 @@ build_opensbi() {
 	# Build and install generic library
 	echo "Build and install generic library XLEN=${BUILD_RISCV_XLEN}"
 	echo ""
-	make -C "${BUILD_OPENSBI_SOURCE_PATH}" O="${BUILD_OUTPUT_PATH}/${BUILD_NAME}" I="${BUILD_OUTPUT_PATH}/${BUILD_ARCHIVE_NAME}" PLATFORM_RISCV_XLEN="${BUILD_RISCV_XLEN}" install_libsbi install_libsbiutils -j "${BUILD_NUM_THREADS}"
+	make -C "${BUILD_OPENSBI_SOURCE_PATH}" O="${BUILD_OUTPUT_PATH}/${BUILD_NAME}" I="${BUILD_OUTPUT_PATH}/${BUILD_ARCHIVE_NAME}" PLATFORM_RISCV_XLEN="${BUILD_RISCV_XLEN}" install_libsbi -j "${BUILD_NUM_THREADS}"
 	echo ""
 
 	# Build and install relevant platforms
-- 
2.34.1



^ permalink raw reply related	[flat|nested] 26+ messages in thread

* [PATCH v2 03/14] lib: utils/serial: Use kconfig for enabling/disabling drivers
  2022-07-18 14:55 [PATCH v2 00/14] OpenSBI Kconfig Support Anup Patel
  2022-07-18 14:55 ` [PATCH v2 01/14] Makefile: Add initial kconfig support for each platform Anup Patel
  2022-07-18 14:55 ` [PATCH v2 02/14] Makefile: Compile lib/utils sources separately " Anup Patel
@ 2022-07-18 14:56 ` Anup Patel
  2022-07-18 14:56 ` [PATCH v2 04/14] lib: utils/reset: " Anup Patel
                   ` (11 subsequent siblings)
  14 siblings, 0 replies; 26+ messages in thread
From: Anup Patel @ 2022-07-18 14:56 UTC (permalink / raw)
  To: opensbi

We update serial drivers makefile to use kconfig for enabling/disabling
drivers. To avoid compile errors, we also enable appropriate serial
drivers for each platform.

Signed-off-by: Anup Patel <apatel@ventanamicro.com>
---
 include/sbi_utils/serial/fdt_serial.h |  8 +++
 lib/utils/Kconfig                     |  6 +++
 lib/utils/serial/Kconfig              | 71 +++++++++++++++++++++++++++
 lib/utils/serial/objects.mk           | 44 ++++++++---------
 platform/andes/ae350/Kconfig          |  1 +
 platform/fpga/ariane/Kconfig          |  1 +
 platform/fpga/openpiton/Kconfig       |  1 +
 platform/generic/configs/defconfig    |  8 +++
 platform/kendryte/k210/Kconfig        |  1 +
 platform/nuclei/ux600/Kconfig         |  1 +
 platform/template/Kconfig             |  1 +
 11 files changed, 121 insertions(+), 22 deletions(-)
 create mode 100644 lib/utils/serial/Kconfig

diff --git a/include/sbi_utils/serial/fdt_serial.h b/include/sbi_utils/serial/fdt_serial.h
index 6451c23..daa2e4f 100644
--- a/include/sbi_utils/serial/fdt_serial.h
+++ b/include/sbi_utils/serial/fdt_serial.h
@@ -12,6 +12,8 @@
 
 #include <sbi/sbi_types.h>
 
+#ifdef CONFIG_FDT_SERIAL
+
 struct fdt_serial {
 	const struct fdt_match *match_table;
 	int (*init)(void *fdt, int nodeoff, const struct fdt_match *match);
@@ -19,4 +21,10 @@ struct fdt_serial {
 
 int fdt_serial_init(void);
 
+#else
+
+static inline int fdt_serial_init(void) { return 0; }
+
+#endif
+
 #endif
diff --git a/lib/utils/Kconfig b/lib/utils/Kconfig
index d6e0506..0341fa7 100644
--- a/lib/utils/Kconfig
+++ b/lib/utils/Kconfig
@@ -1 +1,7 @@
 # SPDX-License-Identifier: BSD-2-Clause
+
+menu "Utils and Drivers Support"
+
+source "$OPENSBI_SRC_DIR/lib/utils/serial/Kconfig"
+
+endmenu
diff --git a/lib/utils/serial/Kconfig b/lib/utils/serial/Kconfig
new file mode 100644
index 0000000..e114f26
--- /dev/null
+++ b/lib/utils/serial/Kconfig
@@ -0,0 +1,71 @@
+# SPDX-License-Identifier: BSD-2-Clause
+
+menu "Serial Device Support"
+
+config FDT_SERIAL
+	bool "FDT based serial drivers"
+	default n
+
+if FDT_SERIAL
+
+config FDT_SERIAL_GAISLER
+	bool "Gaisler UART FDT driver"
+	select SERIAL_GAISLER
+	default n
+
+config FDT_SERIAL_HTIF
+	bool "Host transfer interface (HTIF) UART FDT driver"
+	default n
+
+config FDT_SERIAL_SHAKTI
+	bool "Shakti UART FDT driver"
+	select SERIAL_SHAKTI
+	default n
+
+config FDT_SERIAL_SIFIVE
+	bool "SiFive UART FDT driver"
+	select SERIAL_SIFIVE
+	default n
+
+config FDT_SERIAL_LITEX
+	bool "LiteX UART FDT driver"
+	select SERIAL_LITEX
+	default n
+
+config FDT_SERIAL_UART8250
+	bool "8250 UART FDT driver"
+	select SERIAL_UART8250
+	default n
+
+config FDT_SERIAL_XILINX_UARTLITE
+	bool "Xilinx UART Lite FDT driver"
+	select SERIAL_XILINX_UARTLITE
+	default n
+
+endif
+
+config SERIAL_GAISLER
+	bool "Gaisler UART support"
+	default n
+
+config SERIAL_SHAKTI
+	bool "Shakti UART support"
+	default n
+
+config SERIAL_SIFIVE
+	bool "SiFive UART support"
+	default n
+
+config SERIAL_LITEX
+	bool "LiteX UART support"
+	default n
+
+config SERIAL_UART8250
+	bool "8250 UART support"
+	default n
+
+config SERIAL_XILINX_UARTLITE
+	bool "Xilinx UART Lite support"
+	default n
+
+endmenu
diff --git a/lib/utils/serial/objects.mk b/lib/utils/serial/objects.mk
index d26a74e..fa9f5a3 100644
--- a/lib/utils/serial/objects.mk
+++ b/lib/utils/serial/objects.mk
@@ -7,33 +7,33 @@
 #   Anup Patel <anup.patel@wdc.com>
 #
 
-libsbiutils-objs-y += serial/fdt_serial.o
-libsbiutils-objs-y += serial/fdt_serial_drivers.o
+libsbiutils-objs-$(CONFIG_FDT_SERIAL) += serial/fdt_serial.o
+libsbiutils-objs-$(CONFIG_FDT_SERIAL) += serial/fdt_serial_drivers.o
 
-carray-fdt_serial_drivers-y += fdt_serial_gaisler
-libsbiutils-objs-y += serial/fdt_serial_gaisler.o
+carray-fdt_serial_drivers-$(CONFIG_FDT_SERIAL_GAISLER) += fdt_serial_gaisler
+libsbiutils-objs-$(CONFIG_FDT_SERIAL_GAISLER) += serial/fdt_serial_gaisler.o
 
-carray-fdt_serial_drivers-y += fdt_serial_htif
-libsbiutils-objs-y += serial/fdt_serial_htif.o
+carray-fdt_serial_drivers-$(CONFIG_FDT_SERIAL_HTIF) += fdt_serial_htif
+libsbiutils-objs-$(CONFIG_FDT_SERIAL_HTIF) += serial/fdt_serial_htif.o
 
-carray-fdt_serial_drivers-y += fdt_serial_shakti
-libsbiutils-objs-y += serial/fdt_serial_shakti.o
+carray-fdt_serial_drivers-$(CONFIG_FDT_SERIAL_SHAKTI) += fdt_serial_shakti
+libsbiutils-objs-$(CONFIG_FDT_SERIAL_SHAKTI) += serial/fdt_serial_shakti.o
 
-carray-fdt_serial_drivers-y += fdt_serial_sifive
-libsbiutils-objs-y += serial/fdt_serial_sifive.o
+carray-fdt_serial_drivers-$(CONFIG_FDT_SERIAL_SIFIVE) += fdt_serial_sifive
+libsbiutils-objs-$(CONFIG_FDT_SERIAL_SIFIVE) += serial/fdt_serial_sifive.o
 
-carray-fdt_serial_drivers-y += fdt_serial_litex
-libsbiutils-objs-y += serial/fdt_serial_litex.o
+carray-fdt_serial_drivers-$(CONFIG_FDT_SERIAL_LITEX) += fdt_serial_litex
+libsbiutils-objs-$(CONFIG_FDT_SERIAL_LITEX) += serial/fdt_serial_litex.o
 
-carray-fdt_serial_drivers-y += fdt_serial_uart8250
-libsbiutils-objs-y += serial/fdt_serial_uart8250.o
+carray-fdt_serial_drivers-$(CONFIG_FDT_SERIAL_UART8250) += fdt_serial_uart8250
+libsbiutils-objs-$(CONFIG_FDT_SERIAL_UART8250) += serial/fdt_serial_uart8250.o
 
-carray-fdt_serial_drivers-y += fdt_serial_xlnx_uartlite
-libsbiutils-objs-y += serial/fdt_serial_xlnx_uartlite.o
+carray-fdt_serial_drivers-$(CONFIG_FDT_SERIAL_XILINX_UARTLITE) += fdt_serial_xlnx_uartlite
+libsbiutils-objs-$(CONFIG_FDT_SERIAL_XILINX_UARTLITE) += serial/fdt_serial_xlnx_uartlite.o
 
-libsbiutils-objs-y += serial/gaisler-uart.o
-libsbiutils-objs-y += serial/shakti-uart.o
-libsbiutils-objs-y += serial/sifive-uart.o
-libsbiutils-objs-y += serial/litex-uart.o
-libsbiutils-objs-y += serial/uart8250.o
-libsbiutils-objs-y += serial/xlnx-uartlite.o
+libsbiutils-objs-$(CONFIG_SERIAL_GAISLER) += serial/gaisler-uart.o
+libsbiutils-objs-$(CONFIG_SERIAL_SHAKTI) += serial/shakti-uart.o
+libsbiutils-objs-$(CONFIG_SERIAL_SIFIVE) += serial/sifive-uart.o
+libsbiutils-objs-$(CONFIG_SERIAL_LITEX) += serial/litex-uart.o
+libsbiutils-objs-$(CONFIG_SERIAL_UART8250) += serial/uart8250.o
+libsbiutils-objs-$(CONFIG_SERIAL_XILINX_UARTLITE) += serial/xlnx-uartlite.o
diff --git a/platform/andes/ae350/Kconfig b/platform/andes/ae350/Kconfig
index 4b73c76..162d19c 100644
--- a/platform/andes/ae350/Kconfig
+++ b/platform/andes/ae350/Kconfig
@@ -2,4 +2,5 @@
 
 config PLATFORM_ANDES_AE350
 	bool
+	select SERIAL_UART8250
 	default y
diff --git a/platform/fpga/ariane/Kconfig b/platform/fpga/ariane/Kconfig
index 70d2004..3ce0ec1 100644
--- a/platform/fpga/ariane/Kconfig
+++ b/platform/fpga/ariane/Kconfig
@@ -2,4 +2,5 @@
 
 config PLATFORM_ARIANE_FPGA
 	bool
+	select SERIAL_UART8250
 	default y
diff --git a/platform/fpga/openpiton/Kconfig b/platform/fpga/openpiton/Kconfig
index 81e4b76..4dd752d 100644
--- a/platform/fpga/openpiton/Kconfig
+++ b/platform/fpga/openpiton/Kconfig
@@ -2,4 +2,5 @@
 
 config PLATFORM_OPENPITON_FPGA
 	bool
+	select SERIAL_UART8250
 	default y
diff --git a/platform/generic/configs/defconfig b/platform/generic/configs/defconfig
index e69de29..ce70c59 100644
--- a/platform/generic/configs/defconfig
+++ b/platform/generic/configs/defconfig
@@ -0,0 +1,8 @@
+CONFIG_FDT_SERIAL=y
+CONFIG_FDT_SERIAL_GAISLER=y
+CONFIG_FDT_SERIAL_HTIF=y
+CONFIG_FDT_SERIAL_SHAKTI=y
+CONFIG_FDT_SERIAL_SIFIVE=y
+CONFIG_FDT_SERIAL_LITEX=y
+CONFIG_FDT_SERIAL_UART8250=y
+CONFIG_FDT_SERIAL_XILINX_UARTLITE=y
diff --git a/platform/kendryte/k210/Kconfig b/platform/kendryte/k210/Kconfig
index 889f16b..adc7613 100644
--- a/platform/kendryte/k210/Kconfig
+++ b/platform/kendryte/k210/Kconfig
@@ -2,4 +2,5 @@
 
 config PLATFORM_KENDRYTE_K210
 	bool
+	select SERIAL_SIFIVE
 	default y
diff --git a/platform/nuclei/ux600/Kconfig b/platform/nuclei/ux600/Kconfig
index c368ef4..69fe8f8 100644
--- a/platform/nuclei/ux600/Kconfig
+++ b/platform/nuclei/ux600/Kconfig
@@ -2,4 +2,5 @@
 
 config PLATFORM_NUCLEI_UX600
 	bool
+	select SERIAL_SIFIVE
 	default y
diff --git a/platform/template/Kconfig b/platform/template/Kconfig
index b9c4350..5a5472b 100644
--- a/platform/template/Kconfig
+++ b/platform/template/Kconfig
@@ -2,4 +2,5 @@
 
 config PLATFORM_TEMPLATE
 	bool
+	select SERIAL_UART8250
 	default y
-- 
2.34.1



^ permalink raw reply related	[flat|nested] 26+ messages in thread

* [PATCH v2 04/14] lib: utils/reset: Use kconfig for enabling/disabling drivers
  2022-07-18 14:55 [PATCH v2 00/14] OpenSBI Kconfig Support Anup Patel
                   ` (2 preceding siblings ...)
  2022-07-18 14:56 ` [PATCH v2 03/14] lib: utils/serial: Use kconfig for enabling/disabling drivers Anup Patel
@ 2022-07-18 14:56 ` Anup Patel
  2022-07-18 14:56 ` [PATCH v2 05/14] lib: utils/sys: " Anup Patel
                   ` (10 subsequent siblings)
  14 siblings, 0 replies; 26+ messages in thread
From: Anup Patel @ 2022-07-18 14:56 UTC (permalink / raw)
  To: opensbi

We update reset drivers makefile to use kconfig for enabling/disabling
drivers. To avoid compile errors, we also enable appropriate reset
drivers for each platform.

Signed-off-by: Anup Patel <apatel@ventanamicro.com>
---
 include/sbi_utils/reset/fdt_reset.h | 12 +++++++++++
 lib/utils/Kconfig                   |  2 ++
 lib/utils/reset/Kconfig             | 33 +++++++++++++++++++++++++++++
 lib/utils/reset/objects.mk          | 28 ++++++++++++------------
 platform/generic/configs/defconfig  |  6 ++++++
 5 files changed, 67 insertions(+), 14 deletions(-)
 create mode 100644 lib/utils/reset/Kconfig

diff --git a/include/sbi_utils/reset/fdt_reset.h b/include/sbi_utils/reset/fdt_reset.h
index e7f7350..ea8063b 100644
--- a/include/sbi_utils/reset/fdt_reset.h
+++ b/include/sbi_utils/reset/fdt_reset.h
@@ -17,6 +17,8 @@ struct fdt_reset {
 	int (*init)(void *fdt, int nodeoff, const struct fdt_match *match);
 };
 
+#ifdef CONFIG_FDT_RESET
+
 /**
  * fdt_reset_driver_init() - initialize reset driver based on the device-tree
  */
@@ -29,4 +31,14 @@ int fdt_reset_driver_init(void *fdt, struct fdt_reset *drv);
  */
 void fdt_reset_init(void);
 
+#else
+
+static inline int fdt_reset_driver_init(void *fdt, struct fdt_reset *drv)
+{
+	return 0;
+}
+static inline void fdt_reset_init(void) { }
+
+#endif
+
 #endif
diff --git a/lib/utils/Kconfig b/lib/utils/Kconfig
index 0341fa7..3a6389b 100644
--- a/lib/utils/Kconfig
+++ b/lib/utils/Kconfig
@@ -2,6 +2,8 @@
 
 menu "Utils and Drivers Support"
 
+source "$OPENSBI_SRC_DIR/lib/utils/reset/Kconfig"
+
 source "$OPENSBI_SRC_DIR/lib/utils/serial/Kconfig"
 
 endmenu
diff --git a/lib/utils/reset/Kconfig b/lib/utils/reset/Kconfig
new file mode 100644
index 0000000..845a1ae
--- /dev/null
+++ b/lib/utils/reset/Kconfig
@@ -0,0 +1,33 @@
+# SPDX-License-Identifier: BSD-2-Clause
+
+menu "System Reset Support"
+
+config FDT_RESET
+	bool "FDT based reset drivers"
+	default n
+
+if FDT_RESET
+
+config FDT_RESET_GPIO
+	bool "GPIO FDT reset driver"
+	default n
+
+config FDT_RESET_HTIF
+	bool "Host transfer interface (HTIF) FDT reset driver"
+	default n
+
+config FDT_RESET_SIFIVE_TEST
+	bool "SiFive Test FDT reset driver"
+	default n
+
+config FDT_RESET_SUNXI_WDT
+	bool "Sunxi WDT FDT reset driver"
+	default n
+
+config FDT_RESET_THEAD
+	bool "T-HEAD FDT reset driver"
+	default n
+
+endif
+
+endmenu
diff --git a/lib/utils/reset/objects.mk b/lib/utils/reset/objects.mk
index 8cddcdf..8a50dd0 100644
--- a/lib/utils/reset/objects.mk
+++ b/lib/utils/reset/objects.mk
@@ -7,22 +7,22 @@
 #   Anup Patel <anup.patel@wdc.com>
 #
 
-libsbiutils-objs-y += reset/fdt_reset.o
-libsbiutils-objs-y += reset/fdt_reset_drivers.o
+libsbiutils-objs-$(CONFIG_FDT_RESET) += reset/fdt_reset.o
+libsbiutils-objs-$(CONFIG_FDT_RESET) += reset/fdt_reset_drivers.o
 
-carray-fdt_reset_drivers-y += fdt_poweroff_gpio
-carray-fdt_reset_drivers-y += fdt_reset_gpio
-libsbiutils-objs-y += reset/fdt_reset_gpio.o
+carray-fdt_reset_drivers-$(CONFIG_FDT_RESET_GPIO) += fdt_poweroff_gpio
+carray-fdt_reset_drivers-$(CONFIG_FDT_RESET_GPIO) += fdt_reset_gpio
+libsbiutils-objs-$(CONFIG_FDT_RESET_GPIO) += reset/fdt_reset_gpio.o
 
-carray-fdt_reset_drivers-y += fdt_reset_htif
-libsbiutils-objs-y += reset/fdt_reset_htif.o
+carray-fdt_reset_drivers-$(CONFIG_FDT_RESET_HTIF) += fdt_reset_htif
+libsbiutils-objs-$(CONFIG_FDT_RESET_HTIF) += reset/fdt_reset_htif.o
 
-carray-fdt_reset_drivers-y += fdt_reset_sifive_test
-libsbiutils-objs-y += reset/fdt_reset_sifive_test.o
+carray-fdt_reset_drivers-$(CONFIG_FDT_RESET_SIFIVE_TEST) += fdt_reset_sifive_test
+libsbiutils-objs-$(CONFIG_FDT_RESET_SIFIVE_TEST) += reset/fdt_reset_sifive_test.o
 
-carray-fdt_reset_drivers-y += fdt_reset_sunxi_wdt
-libsbiutils-objs-y += reset/fdt_reset_sunxi_wdt.o
+carray-fdt_reset_drivers-$(CONFIG_FDT_RESET_SUNXI_WDT) += fdt_reset_sunxi_wdt
+libsbiutils-objs-$(CONFIG_FDT_RESET_SUNXI_WDT) += reset/fdt_reset_sunxi_wdt.o
 
-carray-fdt_reset_drivers-y += fdt_reset_thead
-libsbiutils-objs-y += reset/fdt_reset_thead.o
-libsbiutils-objs-y += reset/fdt_reset_thead_asm.o
+carray-fdt_reset_drivers-$(CONFIG_FDT_RESET_THEAD) += fdt_reset_thead
+libsbiutils-objs-$(CONFIG_FDT_RESET_THEAD) += reset/fdt_reset_thead.o
+libsbiutils-objs-$(CONFIG_FDT_RESET_THEAD) += reset/fdt_reset_thead_asm.o
diff --git a/platform/generic/configs/defconfig b/platform/generic/configs/defconfig
index ce70c59..9778665 100644
--- a/platform/generic/configs/defconfig
+++ b/platform/generic/configs/defconfig
@@ -1,3 +1,9 @@
+CONFIG_FDT_RESET=y
+CONFIG_FDT_RESET_GPIO=y
+CONFIG_FDT_RESET_HTIF=y
+CONFIG_FDT_RESET_SIFIVE_TEST=y
+CONFIG_FDT_RESET_SUNXI_WDT=y
+CONFIG_FDT_RESET_THEAD=y
 CONFIG_FDT_SERIAL=y
 CONFIG_FDT_SERIAL_GAISLER=y
 CONFIG_FDT_SERIAL_HTIF=y
-- 
2.34.1



^ permalink raw reply related	[flat|nested] 26+ messages in thread

* [PATCH v2 05/14] lib: utils/sys: Use kconfig for enabling/disabling drivers
  2022-07-18 14:55 [PATCH v2 00/14] OpenSBI Kconfig Support Anup Patel
                   ` (3 preceding siblings ...)
  2022-07-18 14:56 ` [PATCH v2 04/14] lib: utils/reset: " Anup Patel
@ 2022-07-18 14:56 ` Anup Patel
  2022-07-18 14:56 ` [PATCH v2 06/14] lib: utils/timer: " Anup Patel
                   ` (9 subsequent siblings)
  14 siblings, 0 replies; 26+ messages in thread
From: Anup Patel @ 2022-07-18 14:56 UTC (permalink / raw)
  To: opensbi

We update system drivers makefile to use kconfig for enabling/disabling
drivers. To avoid compile errors, we also enable appropriate system
drivers for each platform.

Signed-off-by: Anup Patel <apatel@ventanamicro.com>
---
 lib/utils/Kconfig        |  2 ++
 lib/utils/reset/Kconfig  |  2 ++
 lib/utils/serial/Kconfig |  1 +
 lib/utils/sys/Kconfig    | 13 +++++++++++++
 lib/utils/sys/objects.mk |  4 ++--
 5 files changed, 20 insertions(+), 2 deletions(-)
 create mode 100644 lib/utils/sys/Kconfig

diff --git a/lib/utils/Kconfig b/lib/utils/Kconfig
index 3a6389b..97e73bb 100644
--- a/lib/utils/Kconfig
+++ b/lib/utils/Kconfig
@@ -6,4 +6,6 @@ source "$OPENSBI_SRC_DIR/lib/utils/reset/Kconfig"
 
 source "$OPENSBI_SRC_DIR/lib/utils/serial/Kconfig"
 
+source "$OPENSBI_SRC_DIR/lib/utils/sys/Kconfig"
+
 endmenu
diff --git a/lib/utils/reset/Kconfig b/lib/utils/reset/Kconfig
index 845a1ae..e7a71e3 100644
--- a/lib/utils/reset/Kconfig
+++ b/lib/utils/reset/Kconfig
@@ -14,10 +14,12 @@ config FDT_RESET_GPIO
 
 config FDT_RESET_HTIF
 	bool "Host transfer interface (HTIF) FDT reset driver"
+	select SYS_HTIF
 	default n
 
 config FDT_RESET_SIFIVE_TEST
 	bool "SiFive Test FDT reset driver"
+	select SYS_SIFIVE_TEST
 	default n
 
 config FDT_RESET_SUNXI_WDT
diff --git a/lib/utils/serial/Kconfig b/lib/utils/serial/Kconfig
index e114f26..bf37e34 100644
--- a/lib/utils/serial/Kconfig
+++ b/lib/utils/serial/Kconfig
@@ -15,6 +15,7 @@ config FDT_SERIAL_GAISLER
 
 config FDT_SERIAL_HTIF
 	bool "Host transfer interface (HTIF) UART FDT driver"
+	select SYS_HTIF
 	default n
 
 config FDT_SERIAL_SHAKTI
diff --git a/lib/utils/sys/Kconfig b/lib/utils/sys/Kconfig
new file mode 100644
index 0000000..ee85b1a
--- /dev/null
+++ b/lib/utils/sys/Kconfig
@@ -0,0 +1,13 @@
+# SPDX-License-Identifier: BSD-2-Clause
+
+menu "System Device Support"
+
+config SYS_HTIF
+	bool "Host transfere interface (HTIF) support"
+	default n
+
+config SYS_SIFIVE_TEST
+	bool "SiFive test support"
+	default n
+
+endmenu
diff --git a/lib/utils/sys/objects.mk b/lib/utils/sys/objects.mk
index 06be322..9f67aee 100644
--- a/lib/utils/sys/objects.mk
+++ b/lib/utils/sys/objects.mk
@@ -7,5 +7,5 @@
 #   Anup Patel <anup.patel@wdc.com>
 #
 
-libsbiutils-objs-y += sys/htif.o
-libsbiutils-objs-y += sys/sifive_test.o
+libsbiutils-objs-$(CONFIG_SYS_HTIF) += sys/htif.o
+libsbiutils-objs-$(CONFIG_SYS_SIFIVE_TEST) += sys/sifive_test.o
-- 
2.34.1



^ permalink raw reply related	[flat|nested] 26+ messages in thread

* [PATCH v2 06/14] lib: utils/timer: Use kconfig for enabling/disabling drivers
  2022-07-18 14:55 [PATCH v2 00/14] OpenSBI Kconfig Support Anup Patel
                   ` (4 preceding siblings ...)
  2022-07-18 14:56 ` [PATCH v2 05/14] lib: utils/sys: " Anup Patel
@ 2022-07-18 14:56 ` Anup Patel
  2022-07-18 14:56 ` [PATCH v2 07/14] lib: utils/ipi: " Anup Patel
                   ` (8 subsequent siblings)
  14 siblings, 0 replies; 26+ messages in thread
From: Anup Patel @ 2022-07-18 14:56 UTC (permalink / raw)
  To: opensbi

We update timer drivers makefile to use kconfig for enabling/disabling
drivers. To avoid compile errors, we also enable appropriate timer
drivers for each platform.

Signed-off-by: Anup Patel <apatel@ventanamicro.com>
---
 include/sbi_utils/timer/fdt_timer.h |  9 +++++++++
 lib/utils/Kconfig                   |  2 ++
 lib/utils/timer/Kconfig             | 22 ++++++++++++++++++++++
 lib/utils/timer/objects.mk          | 10 +++++-----
 platform/fpga/ariane/Kconfig        |  1 +
 platform/fpga/openpiton/Kconfig     |  1 +
 platform/generic/configs/defconfig  |  2 ++
 platform/kendryte/k210/Kconfig      |  1 +
 platform/nuclei/ux600/Kconfig       |  1 +
 platform/template/Kconfig           |  1 +
 10 files changed, 45 insertions(+), 5 deletions(-)
 create mode 100644 lib/utils/timer/Kconfig

diff --git a/include/sbi_utils/timer/fdt_timer.h b/include/sbi_utils/timer/fdt_timer.h
index 36202a4..cf105fe 100644
--- a/include/sbi_utils/timer/fdt_timer.h
+++ b/include/sbi_utils/timer/fdt_timer.h
@@ -12,6 +12,8 @@
 
 #include <sbi/sbi_types.h>
 
+#ifdef CONFIG_FDT_TIMER
+
 struct fdt_timer {
 	const struct fdt_match *match_table;
 	int (*cold_init)(void *fdt, int nodeoff, const struct fdt_match *match);
@@ -23,4 +25,11 @@ void fdt_timer_exit(void);
 
 int fdt_timer_init(bool cold_boot);
 
+#else
+
+static inline void fdt_timer_exit(void) { }
+static inline int fdt_timer_init(bool cold_boot) { return 0; }
+
+#endif
+
 #endif
diff --git a/lib/utils/Kconfig b/lib/utils/Kconfig
index 97e73bb..5798a5c 100644
--- a/lib/utils/Kconfig
+++ b/lib/utils/Kconfig
@@ -8,4 +8,6 @@ source "$OPENSBI_SRC_DIR/lib/utils/serial/Kconfig"
 
 source "$OPENSBI_SRC_DIR/lib/utils/sys/Kconfig"
 
+source "$OPENSBI_SRC_DIR/lib/utils/timer/Kconfig"
+
 endmenu
diff --git a/lib/utils/timer/Kconfig b/lib/utils/timer/Kconfig
new file mode 100644
index 0000000..0a1c727
--- /dev/null
+++ b/lib/utils/timer/Kconfig
@@ -0,0 +1,22 @@
+# SPDX-License-Identifier: BSD-2-Clause
+
+menu "Timer Device Support"
+
+config FDT_TIMER
+	bool "FDT based timer drivers"
+	default n
+
+if FDT_TIMER
+
+config FDT_TIMER_MTIMER
+	bool "ACLINT MTIMER FDT driver"
+	select TIMER_MTIMER
+	default n
+
+endif
+
+config TIMER_MTIMER
+	bool "ACLINT MTIMER support"
+	default n
+
+endmenu
diff --git a/lib/utils/timer/objects.mk b/lib/utils/timer/objects.mk
index bc4073d..7f5f3ce 100644
--- a/lib/utils/timer/objects.mk
+++ b/lib/utils/timer/objects.mk
@@ -7,10 +7,10 @@
 #   Anup Patel <anup.patel@wdc.com>
 #
 
-libsbiutils-objs-y += timer/aclint_mtimer.o
+libsbiutils-objs-$(CONFIG_TIMER_MTIMER) += timer/aclint_mtimer.o
 
-libsbiutils-objs-y += timer/fdt_timer.o
-libsbiutils-objs-y += timer/fdt_timer_drivers.o
+libsbiutils-objs-$(CONFIG_FDT_TIMER) += timer/fdt_timer.o
+libsbiutils-objs-$(CONFIG_FDT_TIMER) += timer/fdt_timer_drivers.o
 
-carray-fdt_timer_drivers-y += fdt_timer_mtimer
-libsbiutils-objs-y += timer/fdt_timer_mtimer.o
+carray-fdt_timer_drivers-$(CONFIG_FDT_TIMER_MTIMER) += fdt_timer_mtimer
+libsbiutils-objs-$(CONFIG_FDT_TIMER_MTIMER) += timer/fdt_timer_mtimer.o
diff --git a/platform/fpga/ariane/Kconfig b/platform/fpga/ariane/Kconfig
index 3ce0ec1..a7fd758 100644
--- a/platform/fpga/ariane/Kconfig
+++ b/platform/fpga/ariane/Kconfig
@@ -3,4 +3,5 @@
 config PLATFORM_ARIANE_FPGA
 	bool
 	select SERIAL_UART8250
+	select TIMER_MTIMER
 	default y
diff --git a/platform/fpga/openpiton/Kconfig b/platform/fpga/openpiton/Kconfig
index 4dd752d..a7f09e4 100644
--- a/platform/fpga/openpiton/Kconfig
+++ b/platform/fpga/openpiton/Kconfig
@@ -3,4 +3,5 @@
 config PLATFORM_OPENPITON_FPGA
 	bool
 	select SERIAL_UART8250
+	select TIMER_MTIMER
 	default y
diff --git a/platform/generic/configs/defconfig b/platform/generic/configs/defconfig
index 9778665..9b96a4f 100644
--- a/platform/generic/configs/defconfig
+++ b/platform/generic/configs/defconfig
@@ -12,3 +12,5 @@ CONFIG_FDT_SERIAL_SIFIVE=y
 CONFIG_FDT_SERIAL_LITEX=y
 CONFIG_FDT_SERIAL_UART8250=y
 CONFIG_FDT_SERIAL_XILINX_UARTLITE=y
+CONFIG_FDT_TIMER=y
+CONFIG_FDT_TIMER_MTIMER=y
diff --git a/platform/kendryte/k210/Kconfig b/platform/kendryte/k210/Kconfig
index adc7613..90db649 100644
--- a/platform/kendryte/k210/Kconfig
+++ b/platform/kendryte/k210/Kconfig
@@ -3,4 +3,5 @@
 config PLATFORM_KENDRYTE_K210
 	bool
 	select SERIAL_SIFIVE
+	select TIMER_MTIMER
 	default y
diff --git a/platform/nuclei/ux600/Kconfig b/platform/nuclei/ux600/Kconfig
index 69fe8f8..dec2654 100644
--- a/platform/nuclei/ux600/Kconfig
+++ b/platform/nuclei/ux600/Kconfig
@@ -3,4 +3,5 @@
 config PLATFORM_NUCLEI_UX600
 	bool
 	select SERIAL_SIFIVE
+	select TIMER_MTIMER
 	default y
diff --git a/platform/template/Kconfig b/platform/template/Kconfig
index 5a5472b..ce463ea 100644
--- a/platform/template/Kconfig
+++ b/platform/template/Kconfig
@@ -3,4 +3,5 @@
 config PLATFORM_TEMPLATE
 	bool
 	select SERIAL_UART8250
+	select TIMER_MTIMER
 	default y
-- 
2.34.1



^ permalink raw reply related	[flat|nested] 26+ messages in thread

* [PATCH v2 07/14] lib: utils/ipi: Use kconfig for enabling/disabling drivers
  2022-07-18 14:55 [PATCH v2 00/14] OpenSBI Kconfig Support Anup Patel
                   ` (5 preceding siblings ...)
  2022-07-18 14:56 ` [PATCH v2 06/14] lib: utils/timer: " Anup Patel
@ 2022-07-18 14:56 ` Anup Patel
  2022-07-18 14:56 ` [PATCH v2 08/14] lib: utils/irqchip: " Anup Patel
                   ` (7 subsequent siblings)
  14 siblings, 0 replies; 26+ messages in thread
From: Anup Patel @ 2022-07-18 14:56 UTC (permalink / raw)
  To: opensbi

We update ipi drivers makefile to use kconfig for enabling/disabling
drivers. To avoid compile errors, we also enable appropriate ipi
drivers for each platform.

Signed-off-by: Anup Patel <apatel@ventanamicro.com>
---
 include/sbi_utils/ipi/fdt_ipi.h    |  9 +++++++++
 lib/utils/Kconfig                  |  2 ++
 lib/utils/ipi/Kconfig              | 22 ++++++++++++++++++++++
 lib/utils/ipi/objects.mk           | 10 +++++-----
 platform/fpga/ariane/Kconfig       |  1 +
 platform/fpga/openpiton/Kconfig    |  1 +
 platform/generic/configs/defconfig |  2 ++
 platform/kendryte/k210/Kconfig     |  1 +
 platform/nuclei/ux600/Kconfig      |  1 +
 platform/template/Kconfig          |  1 +
 10 files changed, 45 insertions(+), 5 deletions(-)
 create mode 100644 lib/utils/ipi/Kconfig

diff --git a/include/sbi_utils/ipi/fdt_ipi.h b/include/sbi_utils/ipi/fdt_ipi.h
index 9337353..1dd9062 100644
--- a/include/sbi_utils/ipi/fdt_ipi.h
+++ b/include/sbi_utils/ipi/fdt_ipi.h
@@ -12,6 +12,8 @@
 
 #include <sbi/sbi_types.h>
 
+#ifdef CONFIG_FDT_IPI
+
 struct fdt_ipi {
 	const struct fdt_match *match_table;
 	int (*cold_init)(void *fdt, int nodeoff, const struct fdt_match *match);
@@ -23,4 +25,11 @@ void fdt_ipi_exit(void);
 
 int fdt_ipi_init(bool cold_boot);
 
+#else
+
+static inline void fdt_ipi_exit(void) { }
+static inline int fdt_ipi_init(bool cold_boot) { return 0; }
+
+#endif
+
 #endif
diff --git a/lib/utils/Kconfig b/lib/utils/Kconfig
index 5798a5c..43e9547 100644
--- a/lib/utils/Kconfig
+++ b/lib/utils/Kconfig
@@ -2,6 +2,8 @@
 
 menu "Utils and Drivers Support"
 
+source "$OPENSBI_SRC_DIR/lib/utils/ipi/Kconfig"
+
 source "$OPENSBI_SRC_DIR/lib/utils/reset/Kconfig"
 
 source "$OPENSBI_SRC_DIR/lib/utils/serial/Kconfig"
diff --git a/lib/utils/ipi/Kconfig b/lib/utils/ipi/Kconfig
new file mode 100644
index 0000000..c0634d3
--- /dev/null
+++ b/lib/utils/ipi/Kconfig
@@ -0,0 +1,22 @@
+# SPDX-License-Identifier: BSD-2-Clause
+
+menu "IPI Device Support"
+
+config FDT_IPI
+	bool "FDT based ipi drivers"
+	default n
+
+if FDT_IPI
+
+config FDT_IPI_MSWI
+	bool "ACLINT MSWI FDT driver"
+	select IPI_MSWI
+	default n
+
+endif
+
+config IPI_MSWI
+	bool "ACLINT MSWI support"
+	default n
+
+endmenu
diff --git a/lib/utils/ipi/objects.mk b/lib/utils/ipi/objects.mk
index 0b0bc2d..0600cac 100644
--- a/lib/utils/ipi/objects.mk
+++ b/lib/utils/ipi/objects.mk
@@ -7,10 +7,10 @@
 #   Anup Patel <anup.patel@wdc.com>
 #
 
-libsbiutils-objs-y += ipi/aclint_mswi.o
+libsbiutils-objs-$(CONFIG_IPI_MSWI) += ipi/aclint_mswi.o
 
-libsbiutils-objs-y += ipi/fdt_ipi.o
-libsbiutils-objs-y += ipi/fdt_ipi_drivers.o
+libsbiutils-objs-$(CONFIG_FDT_IPI) += ipi/fdt_ipi.o
+libsbiutils-objs-$(CONFIG_FDT_IPI) += ipi/fdt_ipi_drivers.o
 
-carray-fdt_ipi_drivers-y += fdt_ipi_mswi
-libsbiutils-objs-y += ipi/fdt_ipi_mswi.o
+carray-fdt_ipi_drivers-$(CONFIG_FDT_IPI_MSWI) += fdt_ipi_mswi
+libsbiutils-objs-$(CONFIG_FDT_IPI_MSWI) += ipi/fdt_ipi_mswi.o
diff --git a/platform/fpga/ariane/Kconfig b/platform/fpga/ariane/Kconfig
index a7fd758..0bc1597 100644
--- a/platform/fpga/ariane/Kconfig
+++ b/platform/fpga/ariane/Kconfig
@@ -2,6 +2,7 @@
 
 config PLATFORM_ARIANE_FPGA
 	bool
+	select IPI_MSWI
 	select SERIAL_UART8250
 	select TIMER_MTIMER
 	default y
diff --git a/platform/fpga/openpiton/Kconfig b/platform/fpga/openpiton/Kconfig
index a7f09e4..0e4e3ba 100644
--- a/platform/fpga/openpiton/Kconfig
+++ b/platform/fpga/openpiton/Kconfig
@@ -2,6 +2,7 @@
 
 config PLATFORM_OPENPITON_FPGA
 	bool
+	select IPI_MSWI
 	select SERIAL_UART8250
 	select TIMER_MTIMER
 	default y
diff --git a/platform/generic/configs/defconfig b/platform/generic/configs/defconfig
index 9b96a4f..e218c32 100644
--- a/platform/generic/configs/defconfig
+++ b/platform/generic/configs/defconfig
@@ -1,3 +1,5 @@
+CONFIG_FDT_IPI=y
+CONFIG_FDT_IPI_MSWI=y
 CONFIG_FDT_RESET=y
 CONFIG_FDT_RESET_GPIO=y
 CONFIG_FDT_RESET_HTIF=y
diff --git a/platform/kendryte/k210/Kconfig b/platform/kendryte/k210/Kconfig
index 90db649..685a5cd 100644
--- a/platform/kendryte/k210/Kconfig
+++ b/platform/kendryte/k210/Kconfig
@@ -2,6 +2,7 @@
 
 config PLATFORM_KENDRYTE_K210
 	bool
+	select IPI_MSWI
 	select SERIAL_SIFIVE
 	select TIMER_MTIMER
 	default y
diff --git a/platform/nuclei/ux600/Kconfig b/platform/nuclei/ux600/Kconfig
index dec2654..cd995a3 100644
--- a/platform/nuclei/ux600/Kconfig
+++ b/platform/nuclei/ux600/Kconfig
@@ -2,6 +2,7 @@
 
 config PLATFORM_NUCLEI_UX600
 	bool
+	select IPI_MSWI
 	select SERIAL_SIFIVE
 	select TIMER_MTIMER
 	default y
diff --git a/platform/template/Kconfig b/platform/template/Kconfig
index ce463ea..672b6e7 100644
--- a/platform/template/Kconfig
+++ b/platform/template/Kconfig
@@ -2,6 +2,7 @@
 
 config PLATFORM_TEMPLATE
 	bool
+	select IPI_MSWI
 	select SERIAL_UART8250
 	select TIMER_MTIMER
 	default y
-- 
2.34.1



^ permalink raw reply related	[flat|nested] 26+ messages in thread

* [PATCH v2 08/14] lib: utils/irqchip: Use kconfig for enabling/disabling drivers
  2022-07-18 14:55 [PATCH v2 00/14] OpenSBI Kconfig Support Anup Patel
                   ` (6 preceding siblings ...)
  2022-07-18 14:56 ` [PATCH v2 07/14] lib: utils/ipi: " Anup Patel
@ 2022-07-18 14:56 ` Anup Patel
  2022-07-18 14:56 ` [PATCH v2 09/14] lib: utils/i2c: " Anup Patel
                   ` (6 subsequent siblings)
  14 siblings, 0 replies; 26+ messages in thread
From: Anup Patel @ 2022-07-18 14:56 UTC (permalink / raw)
  To: opensbi

We update irqchip drivers makefile to use kconfig for enabling/disabling
drivers. To avoid compile errors, we also enable appropriate irqchip
drivers for each platform.

Signed-off-by: Anup Patel <apatel@ventanamicro.com>
---
 include/sbi_utils/irqchip/fdt_irqchip.h | 10 +++++++
 include/sbi_utils/irqchip/imsic.h       | 10 +++++++
 lib/utils/Kconfig                       |  2 ++
 lib/utils/irqchip/Kconfig               | 40 +++++++++++++++++++++++++
 lib/utils/irqchip/objects.mk            | 22 +++++++-------
 platform/andes/ae350/Kconfig            |  1 +
 platform/fpga/ariane/Kconfig            |  1 +
 platform/fpga/openpiton/Kconfig         |  1 +
 platform/generic/configs/defconfig      |  4 +++
 platform/kendryte/k210/Kconfig          |  1 +
 platform/nuclei/ux600/Kconfig           |  1 +
 platform/template/Kconfig               |  1 +
 12 files changed, 83 insertions(+), 11 deletions(-)
 create mode 100644 lib/utils/irqchip/Kconfig

diff --git a/include/sbi_utils/irqchip/fdt_irqchip.h b/include/sbi_utils/irqchip/fdt_irqchip.h
index 13ef6f7..63e9fd9 100644
--- a/include/sbi_utils/irqchip/fdt_irqchip.h
+++ b/include/sbi_utils/irqchip/fdt_irqchip.h
@@ -12,6 +12,8 @@
 
 #include <sbi/sbi_types.h>
 
+#ifdef CONFIG_FDT_IRQCHIP
+
 struct fdt_irqchip {
 	const struct fdt_match *match_table;
 	int (*cold_init)(void *fdt, int nodeoff, const struct fdt_match *match);
@@ -23,4 +25,12 @@ void fdt_irqchip_exit(void);
 
 int fdt_irqchip_init(bool cold_boot);
 
+#else
+
+static inline void fdt_irqchip_exit(void) { }
+
+static inline int fdt_irqchip_init(bool cold_boot) { return 0; }
+
+#endif
+
 #endif
diff --git a/include/sbi_utils/irqchip/imsic.h b/include/sbi_utils/irqchip/imsic.h
index cffcb5a..e295771 100644
--- a/include/sbi_utils/irqchip/imsic.h
+++ b/include/sbi_utils/irqchip/imsic.h
@@ -33,6 +33,8 @@ struct imsic_data {
 	struct imsic_regs regs[IMSIC_MAX_REGS];
 };
 
+#ifdef CONFIG_IRQCHIP_IMSIC
+
 int imsic_map_hartid_to_data(u32 hartid, struct imsic_data *imsic, int file);
 
 struct imsic_data *imsic_get_data(u32 hartid);
@@ -47,4 +49,12 @@ int imsic_data_check(struct imsic_data *imsic);
 
 int imsic_cold_irqchip_init(struct imsic_data *imsic);
 
+#else
+
+static inline void imsic_local_irqchip_init(void) { }
+
+static inline int imsic_data_check(struct imsic_data *imsic) { return 0; }
+
+#endif
+
 #endif
diff --git a/lib/utils/Kconfig b/lib/utils/Kconfig
index 43e9547..18e06d5 100644
--- a/lib/utils/Kconfig
+++ b/lib/utils/Kconfig
@@ -4,6 +4,8 @@ menu "Utils and Drivers Support"
 
 source "$OPENSBI_SRC_DIR/lib/utils/ipi/Kconfig"
 
+source "$OPENSBI_SRC_DIR/lib/utils/irqchip/Kconfig"
+
 source "$OPENSBI_SRC_DIR/lib/utils/reset/Kconfig"
 
 source "$OPENSBI_SRC_DIR/lib/utils/serial/Kconfig"
diff --git a/lib/utils/irqchip/Kconfig b/lib/utils/irqchip/Kconfig
new file mode 100644
index 0000000..6a7e297
--- /dev/null
+++ b/lib/utils/irqchip/Kconfig
@@ -0,0 +1,40 @@
+# SPDX-License-Identifier: BSD-2-Clause
+
+menu "Interrupt Controller Support"
+
+config FDT_IRQCHIP
+	bool "FDT based interrupt controller drivers"
+	default n
+
+if FDT_IRQCHIP
+
+config FDT_IRQCHIP_APLIC
+	bool "Advanced Platform Level Interrupt Controller (APLIC) FDT driver"
+	select IRQCHIP_APLIC
+	default n
+
+config FDT_IRQCHIP_IMSIC
+	bool "Incoming Message Signalled Interrupt Controller (IMSIC) FDT driver"
+	select IRQCHIP_IMSIC
+	default n
+
+config FDT_IRQCHIP_PLIC
+	bool "Platform Level Interrupt Controller (PLIC) FDT driver"
+	select IRQCHIP_PLIC
+	default n
+
+endif
+
+config IRQCHIP_APLIC
+	bool "Advanced Platform Level Interrupt Controller (APLIC) support"
+	default n
+
+config IRQCHIP_IMSIC
+	bool "Incoming Message Signalled Interrupt Controller (IMSIC) support"
+	default n
+
+config IRQCHIP_PLIC
+	bool "Platform Level Interrupt Controller (PLIC) support"
+	default n
+
+endmenu
diff --git a/lib/utils/irqchip/objects.mk b/lib/utils/irqchip/objects.mk
index 7775bc4..e458891 100644
--- a/lib/utils/irqchip/objects.mk
+++ b/lib/utils/irqchip/objects.mk
@@ -7,18 +7,18 @@
 #   Anup Patel <anup.patel@wdc.com>
 #
 
-libsbiutils-objs-y += irqchip/fdt_irqchip.o
-libsbiutils-objs-y += irqchip/fdt_irqchip_drivers.o
+libsbiutils-objs-$(CONFIG_FDT_IRQCHIP) += irqchip/fdt_irqchip.o
+libsbiutils-objs-$(CONFIG_FDT_IRQCHIP) += irqchip/fdt_irqchip_drivers.o
 
-carray-fdt_irqchip_drivers-y += fdt_irqchip_aplic
-libsbiutils-objs-y += irqchip/fdt_irqchip_aplic.o
+carray-fdt_irqchip_drivers-$(CONFIG_FDT_IRQCHIP_APLIC) += fdt_irqchip_aplic
+libsbiutils-objs-$(CONFIG_FDT_IRQCHIP_APLIC) += irqchip/fdt_irqchip_aplic.o
 
-carray-fdt_irqchip_drivers-y += fdt_irqchip_imsic
-libsbiutils-objs-y += irqchip/fdt_irqchip_imsic.o
+carray-fdt_irqchip_drivers-$(CONFIG_FDT_IRQCHIP_IMSIC) += fdt_irqchip_imsic
+libsbiutils-objs-$(CONFIG_FDT_IRQCHIP_IMSIC) += irqchip/fdt_irqchip_imsic.o
 
-carray-fdt_irqchip_drivers-y += fdt_irqchip_plic
-libsbiutils-objs-y += irqchip/fdt_irqchip_plic.o
+carray-fdt_irqchip_drivers-$(CONFIG_FDT_IRQCHIP_PLIC) += fdt_irqchip_plic
+libsbiutils-objs-$(CONFIG_FDT_IRQCHIP_PLIC) += irqchip/fdt_irqchip_plic.o
 
-libsbiutils-objs-y += irqchip/aplic.o
-libsbiutils-objs-y += irqchip/imsic.o
-libsbiutils-objs-y += irqchip/plic.o
+libsbiutils-objs-$(CONFIG_IRQCHIP_APLIC) += irqchip/aplic.o
+libsbiutils-objs-$(CONFIG_IRQCHIP_IMSIC) += irqchip/imsic.o
+libsbiutils-objs-$(CONFIG_IRQCHIP_PLIC) += irqchip/plic.o
diff --git a/platform/andes/ae350/Kconfig b/platform/andes/ae350/Kconfig
index 162d19c..87deab0 100644
--- a/platform/andes/ae350/Kconfig
+++ b/platform/andes/ae350/Kconfig
@@ -2,5 +2,6 @@
 
 config PLATFORM_ANDES_AE350
 	bool
+	select IRQCHIP_PLIC
 	select SERIAL_UART8250
 	default y
diff --git a/platform/fpga/ariane/Kconfig b/platform/fpga/ariane/Kconfig
index 0bc1597..5a720d9 100644
--- a/platform/fpga/ariane/Kconfig
+++ b/platform/fpga/ariane/Kconfig
@@ -3,6 +3,7 @@
 config PLATFORM_ARIANE_FPGA
 	bool
 	select IPI_MSWI
+	select IRQCHIP_PLIC
 	select SERIAL_UART8250
 	select TIMER_MTIMER
 	default y
diff --git a/platform/fpga/openpiton/Kconfig b/platform/fpga/openpiton/Kconfig
index 0e4e3ba..973906e 100644
--- a/platform/fpga/openpiton/Kconfig
+++ b/platform/fpga/openpiton/Kconfig
@@ -3,6 +3,7 @@
 config PLATFORM_OPENPITON_FPGA
 	bool
 	select IPI_MSWI
+	select IRQCHIP_PLIC
 	select SERIAL_UART8250
 	select TIMER_MTIMER
 	default y
diff --git a/platform/generic/configs/defconfig b/platform/generic/configs/defconfig
index e218c32..ad66a63 100644
--- a/platform/generic/configs/defconfig
+++ b/platform/generic/configs/defconfig
@@ -1,5 +1,9 @@
 CONFIG_FDT_IPI=y
 CONFIG_FDT_IPI_MSWI=y
+CONFIG_FDT_IRQCHIP=y
+CONFIG_FDT_IRQCHIP_APLIC=y
+CONFIG_FDT_IRQCHIP_IMSIC=y
+CONFIG_FDT_IRQCHIP_PLIC=y
 CONFIG_FDT_RESET=y
 CONFIG_FDT_RESET_GPIO=y
 CONFIG_FDT_RESET_HTIF=y
diff --git a/platform/kendryte/k210/Kconfig b/platform/kendryte/k210/Kconfig
index 685a5cd..2a1daaa 100644
--- a/platform/kendryte/k210/Kconfig
+++ b/platform/kendryte/k210/Kconfig
@@ -3,6 +3,7 @@
 config PLATFORM_KENDRYTE_K210
 	bool
 	select IPI_MSWI
+	select IRQCHIP_PLIC
 	select SERIAL_SIFIVE
 	select TIMER_MTIMER
 	default y
diff --git a/platform/nuclei/ux600/Kconfig b/platform/nuclei/ux600/Kconfig
index cd995a3..464802e 100644
--- a/platform/nuclei/ux600/Kconfig
+++ b/platform/nuclei/ux600/Kconfig
@@ -3,6 +3,7 @@
 config PLATFORM_NUCLEI_UX600
 	bool
 	select IPI_MSWI
+	select IRQCHIP_PLIC
 	select SERIAL_SIFIVE
 	select TIMER_MTIMER
 	default y
diff --git a/platform/template/Kconfig b/platform/template/Kconfig
index 672b6e7..8338425 100644
--- a/platform/template/Kconfig
+++ b/platform/template/Kconfig
@@ -3,6 +3,7 @@
 config PLATFORM_TEMPLATE
 	bool
 	select IPI_MSWI
+	select IRQCHIP_PLIC
 	select SERIAL_UART8250
 	select TIMER_MTIMER
 	default y
-- 
2.34.1



^ permalink raw reply related	[flat|nested] 26+ messages in thread

* [PATCH v2 09/14] lib: utils/i2c: Use kconfig for enabling/disabling drivers
  2022-07-18 14:55 [PATCH v2 00/14] OpenSBI Kconfig Support Anup Patel
                   ` (7 preceding siblings ...)
  2022-07-18 14:56 ` [PATCH v2 08/14] lib: utils/irqchip: " Anup Patel
@ 2022-07-18 14:56 ` Anup Patel
  2022-07-18 14:56 ` [PATCH v2 10/14] lib: utils/gpio: " Anup Patel
                   ` (5 subsequent siblings)
  14 siblings, 0 replies; 26+ messages in thread
From: Anup Patel @ 2022-07-18 14:56 UTC (permalink / raw)
  To: opensbi

We update i2c drivers makefile to use kconfig for enabling/disabling
drivers. To avoid compile errors, we also enable appropriate i2c
drivers for each platform.

Signed-off-by: Anup Patel <apatel@ventanamicro.com>
---
 lib/utils/Kconfig                  |  2 ++
 lib/utils/i2c/Kconfig              | 22 ++++++++++++++++++++++
 lib/utils/i2c/objects.mk           | 10 +++++-----
 platform/generic/configs/defconfig |  2 ++
 4 files changed, 31 insertions(+), 5 deletions(-)
 create mode 100644 lib/utils/i2c/Kconfig

diff --git a/lib/utils/Kconfig b/lib/utils/Kconfig
index 18e06d5..52f28da 100644
--- a/lib/utils/Kconfig
+++ b/lib/utils/Kconfig
@@ -2,6 +2,8 @@
 
 menu "Utils and Drivers Support"
 
+source "$OPENSBI_SRC_DIR/lib/utils/i2c/Kconfig"
+
 source "$OPENSBI_SRC_DIR/lib/utils/ipi/Kconfig"
 
 source "$OPENSBI_SRC_DIR/lib/utils/irqchip/Kconfig"
diff --git a/lib/utils/i2c/Kconfig b/lib/utils/i2c/Kconfig
new file mode 100644
index 0000000..16c4453
--- /dev/null
+++ b/lib/utils/i2c/Kconfig
@@ -0,0 +1,22 @@
+# SPDX-License-Identifier: BSD-2-Clause
+
+menu "I2C Support"
+
+config FDT_I2C
+	bool "FDT based I2C drivers"
+	select I2C
+	default n
+
+if FDT_I2C
+
+config FDT_I2C_SIFIVE
+	bool "SiFive I2C FDT driver"
+	default n
+
+endif
+
+config I2C
+	bool "I2C support"
+	default n
+
+endmenu
diff --git a/lib/utils/i2c/objects.mk b/lib/utils/i2c/objects.mk
index bb0d6d5..a0fbbb5 100644
--- a/lib/utils/i2c/objects.mk
+++ b/lib/utils/i2c/objects.mk
@@ -7,10 +7,10 @@
 #   Nikita Shubin <n.shubin@yadro.com>
 #
 
-libsbiutils-objs-y += i2c/i2c.o
+libsbiutils-objs-$(CONFIG_I2C) += i2c/i2c.o
 
-libsbiutils-objs-y += i2c/fdt_i2c.o
-libsbiutils-objs-y += i2c/fdt_i2c_adapter_drivers.o
+libsbiutils-objs-$(CONFIG_FDT_I2C) += i2c/fdt_i2c.o
+libsbiutils-objs-$(CONFIG_FDT_I2C) += i2c/fdt_i2c_adapter_drivers.o
 
-carray-fdt_i2c_adapter_drivers-y += fdt_i2c_adapter_sifive
-libsbiutils-objs-y += i2c/fdt_i2c_sifive.o
+carray-fdt_i2c_adapter_drivers-$(CONFIG_FDT_I2C_SIFIVE) += fdt_i2c_adapter_sifive
+libsbiutils-objs-$(CONFIG_FDT_I2C_SIFIVE) += i2c/fdt_i2c_sifive.o
diff --git a/platform/generic/configs/defconfig b/platform/generic/configs/defconfig
index ad66a63..c9c221e 100644
--- a/platform/generic/configs/defconfig
+++ b/platform/generic/configs/defconfig
@@ -1,3 +1,5 @@
+CONFIG_FDT_I2C=y
+CONFIG_FDT_I2C_SIFIVE=y
 CONFIG_FDT_IPI=y
 CONFIG_FDT_IPI_MSWI=y
 CONFIG_FDT_IRQCHIP=y
-- 
2.34.1



^ permalink raw reply related	[flat|nested] 26+ messages in thread

* [PATCH v2 10/14] lib: utils/gpio: Use kconfig for enabling/disabling drivers
  2022-07-18 14:55 [PATCH v2 00/14] OpenSBI Kconfig Support Anup Patel
                   ` (8 preceding siblings ...)
  2022-07-18 14:56 ` [PATCH v2 09/14] lib: utils/i2c: " Anup Patel
@ 2022-07-18 14:56 ` Anup Patel
  2022-07-18 14:56 ` [PATCH v2 11/14] lib: utils/fdt: Use kconfig for enabling/disabling Anup Patel
                   ` (4 subsequent siblings)
  14 siblings, 0 replies; 26+ messages in thread
From: Anup Patel @ 2022-07-18 14:56 UTC (permalink / raw)
  To: opensbi

We update gpio drivers makefile to use kconfig for enabling/disabling
drivers. To avoid compile errors, we also enable appropriate gpio
drivers for each platform.

Signed-off-by: Anup Patel <apatel@ventanamicro.com>
---
 lib/utils/Kconfig                  |  2 ++
 lib/utils/gpio/Kconfig             | 22 ++++++++++++++++++++++
 lib/utils/gpio/objects.mk          | 10 +++++-----
 lib/utils/reset/Kconfig            |  1 +
 platform/generic/configs/defconfig |  2 ++
 5 files changed, 32 insertions(+), 5 deletions(-)
 create mode 100644 lib/utils/gpio/Kconfig

diff --git a/lib/utils/Kconfig b/lib/utils/Kconfig
index 52f28da..79b9c2c 100644
--- a/lib/utils/Kconfig
+++ b/lib/utils/Kconfig
@@ -2,6 +2,8 @@
 
 menu "Utils and Drivers Support"
 
+source "$OPENSBI_SRC_DIR/lib/utils/gpio/Kconfig"
+
 source "$OPENSBI_SRC_DIR/lib/utils/i2c/Kconfig"
 
 source "$OPENSBI_SRC_DIR/lib/utils/ipi/Kconfig"
diff --git a/lib/utils/gpio/Kconfig b/lib/utils/gpio/Kconfig
new file mode 100644
index 0000000..daf7f91
--- /dev/null
+++ b/lib/utils/gpio/Kconfig
@@ -0,0 +1,22 @@
+# SPDX-License-Identifier: BSD-2-Clause
+
+menu "GPIO Support"
+
+config FDT_GPIO
+	bool "FDT based GPIO drivers"
+	select GPIO
+	default n
+
+if FDT_GPIO
+
+config FDT_GPIO_SIFIVE
+	bool "SiFive GPIO FDT driver"
+	default n
+
+endif
+
+config GPIO
+	bool "GPIO support"
+	default n
+
+endmenu
diff --git a/lib/utils/gpio/objects.mk b/lib/utils/gpio/objects.mk
index a5e131b..eedd699 100644
--- a/lib/utils/gpio/objects.mk
+++ b/lib/utils/gpio/objects.mk
@@ -7,10 +7,10 @@
 #   Anup Patel <anup.patel@wdc.com>
 #
 
-libsbiutils-objs-y += gpio/fdt_gpio.o
-libsbiutils-objs-y += gpio/fdt_gpio_drivers.o
+libsbiutils-objs-$(CONFIG_FDT_GPIO) += gpio/fdt_gpio.o
+libsbiutils-objs-$(CONFIG_FDT_GPIO) += gpio/fdt_gpio_drivers.o
 
-carray-fdt_gpio_drivers-y += fdt_gpio_sifive
-libsbiutils-objs-y += gpio/fdt_gpio_sifive.o
+carray-fdt_gpio_drivers-$(CONFIG_FDT_GPIO_SIFIVE) += fdt_gpio_sifive
+libsbiutils-objs-$(CONFIG_FDT_GPIO_SIFIVE) += gpio/fdt_gpio_sifive.o
 
-libsbiutils-objs-y += gpio/gpio.o
+libsbiutils-objs-$(CONFIG_GPIO) += gpio/gpio.o
diff --git a/lib/utils/reset/Kconfig b/lib/utils/reset/Kconfig
index e7a71e3..71996cb 100644
--- a/lib/utils/reset/Kconfig
+++ b/lib/utils/reset/Kconfig
@@ -10,6 +10,7 @@ if FDT_RESET
 
 config FDT_RESET_GPIO
 	bool "GPIO FDT reset driver"
+	depends on FDT_GPIO
 	default n
 
 config FDT_RESET_HTIF
diff --git a/platform/generic/configs/defconfig b/platform/generic/configs/defconfig
index c9c221e..d56cef2 100644
--- a/platform/generic/configs/defconfig
+++ b/platform/generic/configs/defconfig
@@ -1,3 +1,5 @@
+CONFIG_FDT_GPIO=y
+CONFIG_FDT_GPIO_SIFIVE=y
 CONFIG_FDT_I2C=y
 CONFIG_FDT_I2C_SIFIVE=y
 CONFIG_FDT_IPI=y
-- 
2.34.1



^ permalink raw reply related	[flat|nested] 26+ messages in thread

* [PATCH v2 11/14] lib: utils/fdt: Use kconfig for enabling/disabling
  2022-07-18 14:55 [PATCH v2 00/14] OpenSBI Kconfig Support Anup Patel
                   ` (9 preceding siblings ...)
  2022-07-18 14:56 ` [PATCH v2 10/14] lib: utils/gpio: " Anup Patel
@ 2022-07-18 14:56 ` Anup Patel
  2022-07-18 14:56 ` [PATCH v2 12/14] platform: generic: Use kconfig for enabling/disabling overrides Anup Patel
                   ` (3 subsequent siblings)
  14 siblings, 0 replies; 26+ messages in thread
From: Anup Patel @ 2022-07-18 14:56 UTC (permalink / raw)
  To: opensbi

We update FDT support makefile to use kconfig for enabling/disabling.
To avoid compilation errors, we also enable FDT for each platform.

Signed-off-by: Anup Patel <apatel@ventanamicro.com>
---
 include/sbi_utils/fdt/fdt_domain.h             |  9 +++++++++
 include/sbi_utils/fdt/fdt_pmu.h                | 10 ++++++++++
 lib/utils/Kconfig                              |  4 ++++
 lib/utils/fdt/Kconfig                          | 18 ++++++++++++++++++
 lib/utils/fdt/objects.mk                       |  8 ++++----
 lib/utils/gpio/Kconfig                         |  1 +
 lib/utils/i2c/Kconfig                          |  1 +
 lib/utils/ipi/Kconfig                          |  1 +
 lib/utils/irqchip/Kconfig                      |  1 +
 {platform/generic => lib/utils/libfdt}/Kconfig |  4 ++--
 lib/utils/libfdt/objects.mk                    |  4 ++--
 lib/utils/reset/Kconfig                        |  1 +
 lib/utils/serial/Kconfig                       |  1 +
 lib/utils/timer/Kconfig                        |  1 +
 platform/andes/ae350/Kconfig                   |  1 +
 platform/fpga/ariane/Kconfig                   |  1 +
 platform/fpga/openpiton/Kconfig                |  1 +
 platform/generic/Kconfig                       |  3 +++
 platform/kendryte/k210/Kconfig                 |  1 +
 platform/nuclei/ux600/Kconfig                  |  1 +
 platform/nuclei/ux600/platform.c               |  1 -
 21 files changed, 64 insertions(+), 9 deletions(-)
 create mode 100644 lib/utils/fdt/Kconfig
 copy {platform/generic => lib/utils/libfdt}/Kconfig (57%)

diff --git a/include/sbi_utils/fdt/fdt_domain.h b/include/sbi_utils/fdt/fdt_domain.h
index 5448eb4..ee09d1b 100644
--- a/include/sbi_utils/fdt/fdt_domain.h
+++ b/include/sbi_utils/fdt/fdt_domain.h
@@ -13,6 +13,8 @@
 
 #include <sbi/sbi_types.h>
 
+#ifdef CONFIG_FDT_DOMAIN
+
 struct sbi_domain;
 
 /**
@@ -70,4 +72,11 @@ void fdt_domain_fixup(void *fdt);
  */
 int fdt_domains_populate(void *fdt);
 
+#else
+
+static inline void fdt_domain_fixup(void *fdt) { }
+static inline int fdt_domains_populate(void *fdt) { return 0; }
+
+#endif
+
 #endif /* __FDT_DOMAIN_H__ */
diff --git a/include/sbi_utils/fdt/fdt_pmu.h b/include/sbi_utils/fdt/fdt_pmu.h
index 2fa01ed..c65cad7 100644
--- a/include/sbi_utils/fdt/fdt_pmu.h
+++ b/include/sbi_utils/fdt/fdt_pmu.h
@@ -13,6 +13,8 @@
 
 #include <sbi/sbi_types.h>
 
+#ifdef CONFIG_FDT_PMU
+
 /**
  * Fix up the PMU node in the device tree
  *
@@ -43,4 +45,12 @@ int fdt_pmu_setup(void *fdt);
  */
 uint64_t fdt_pmu_get_select_value(uint32_t event_idx);
 
+#else
+
+static inline void fdt_pmu_fixup(void *fdt) { }
+static inline int fdt_pmu_setup(void *fdt) { return 0; }
+static inline uint64_t fdt_pmu_get_select_value(uint32_t event_idx) { return 0; }
+
+#endif
+
 #endif
diff --git a/lib/utils/Kconfig b/lib/utils/Kconfig
index 79b9c2c..a6e93e4 100644
--- a/lib/utils/Kconfig
+++ b/lib/utils/Kconfig
@@ -2,6 +2,8 @@
 
 menu "Utils and Drivers Support"
 
+source "$OPENSBI_SRC_DIR/lib/utils/fdt/Kconfig"
+
 source "$OPENSBI_SRC_DIR/lib/utils/gpio/Kconfig"
 
 source "$OPENSBI_SRC_DIR/lib/utils/i2c/Kconfig"
@@ -10,6 +12,8 @@ source "$OPENSBI_SRC_DIR/lib/utils/ipi/Kconfig"
 
 source "$OPENSBI_SRC_DIR/lib/utils/irqchip/Kconfig"
 
+source "$OPENSBI_SRC_DIR/lib/utils/libfdt/Kconfig"
+
 source "$OPENSBI_SRC_DIR/lib/utils/reset/Kconfig"
 
 source "$OPENSBI_SRC_DIR/lib/utils/serial/Kconfig"
diff --git a/lib/utils/fdt/Kconfig b/lib/utils/fdt/Kconfig
new file mode 100644
index 0000000..23b003b
--- /dev/null
+++ b/lib/utils/fdt/Kconfig
@@ -0,0 +1,18 @@
+# SPDX-License-Identifier: BSD-2-Clause
+
+menuconfig FDT
+	bool "Flattened Device Tree (FDT) support"
+	select LIBFDT
+	default n
+
+if FDT
+
+config FDT_DOMAIN
+	bool "FDT domain support"
+	default n
+
+config FDT_PMU
+	bool "FDT performance monitoring unit (PMU) support"
+	default n
+
+endif
diff --git a/lib/utils/fdt/objects.mk b/lib/utils/fdt/objects.mk
index 03800f9..5cede81 100644
--- a/lib/utils/fdt/objects.mk
+++ b/lib/utils/fdt/objects.mk
@@ -4,7 +4,7 @@
 # Copyright (C) 2020 Bin Meng <bmeng.cn@gmail.com>
 #
 
-libsbiutils-objs-y += fdt/fdt_domain.o
-libsbiutils-objs-y += fdt/fdt_pmu.o
-libsbiutils-objs-y += fdt/fdt_helper.o
-libsbiutils-objs-y += fdt/fdt_fixup.o
+libsbiutils-objs-$(CONFIG_FDT_DOMAIN) += fdt/fdt_domain.o
+libsbiutils-objs-$(CONFIG_FDT_PMU) += fdt/fdt_pmu.o
+libsbiutils-objs-$(CONFIG_FDT) += fdt/fdt_helper.o
+libsbiutils-objs-$(CONFIG_FDT) += fdt/fdt_fixup.o
diff --git a/lib/utils/gpio/Kconfig b/lib/utils/gpio/Kconfig
index daf7f91..38a9d75 100644
--- a/lib/utils/gpio/Kconfig
+++ b/lib/utils/gpio/Kconfig
@@ -4,6 +4,7 @@ menu "GPIO Support"
 
 config FDT_GPIO
 	bool "FDT based GPIO drivers"
+	depends on FDT
 	select GPIO
 	default n
 
diff --git a/lib/utils/i2c/Kconfig b/lib/utils/i2c/Kconfig
index 16c4453..46a3454 100644
--- a/lib/utils/i2c/Kconfig
+++ b/lib/utils/i2c/Kconfig
@@ -4,6 +4,7 @@ menu "I2C Support"
 
 config FDT_I2C
 	bool "FDT based I2C drivers"
+	depends on FDT
 	select I2C
 	default n
 
diff --git a/lib/utils/ipi/Kconfig b/lib/utils/ipi/Kconfig
index c0634d3..efc8960 100644
--- a/lib/utils/ipi/Kconfig
+++ b/lib/utils/ipi/Kconfig
@@ -4,6 +4,7 @@ menu "IPI Device Support"
 
 config FDT_IPI
 	bool "FDT based ipi drivers"
+	depends on FDT
 	default n
 
 if FDT_IPI
diff --git a/lib/utils/irqchip/Kconfig b/lib/utils/irqchip/Kconfig
index 6a7e297..7a71388 100644
--- a/lib/utils/irqchip/Kconfig
+++ b/lib/utils/irqchip/Kconfig
@@ -4,6 +4,7 @@ menu "Interrupt Controller Support"
 
 config FDT_IRQCHIP
 	bool "FDT based interrupt controller drivers"
+	depends on FDT
 	default n
 
 if FDT_IRQCHIP
diff --git a/platform/generic/Kconfig b/lib/utils/libfdt/Kconfig
similarity index 57%
copy from platform/generic/Kconfig
copy to lib/utils/libfdt/Kconfig
index 3eab282..d1cecf8 100644
--- a/platform/generic/Kconfig
+++ b/lib/utils/libfdt/Kconfig
@@ -1,5 +1,5 @@
 # SPDX-License-Identifier: BSD-2-Clause
 
-config PLATFORM_GENERIC
+config LIBFDT
 	bool
-	default y
+	default n
diff --git a/lib/utils/libfdt/objects.mk b/lib/utils/libfdt/objects.mk
index 8c060df..a5b4001 100644
--- a/lib/utils/libfdt/objects.mk
+++ b/lib/utils/libfdt/objects.mk
@@ -12,5 +12,5 @@ libfdt_files = fdt.o fdt_addresses.o fdt_check.o fdt_empty_tree.o fdt_ro.o fdt_r
 $(foreach file, $(libfdt_files), \
         $(eval CFLAGS_$(file) = -I$(src)/../../utils/libfdt))
 
-libsbiutils-objs-y += $(addprefix libfdt/,$(libfdt_files))
-libsbiutils-genflags-y  += -I$(libsbiutils_dir)/libfdt/
+libsbiutils-objs-$(CONFIG_LIBFDT) += $(addprefix libfdt/,$(libfdt_files))
+libsbiutils-genflags-$(CONFIG_LIBFDT)  += -I$(libsbiutils_dir)/libfdt/
diff --git a/lib/utils/reset/Kconfig b/lib/utils/reset/Kconfig
index 71996cb..2e83ff6 100644
--- a/lib/utils/reset/Kconfig
+++ b/lib/utils/reset/Kconfig
@@ -4,6 +4,7 @@ menu "System Reset Support"
 
 config FDT_RESET
 	bool "FDT based reset drivers"
+	depends on FDT
 	default n
 
 if FDT_RESET
diff --git a/lib/utils/serial/Kconfig b/lib/utils/serial/Kconfig
index bf37e34..152060d 100644
--- a/lib/utils/serial/Kconfig
+++ b/lib/utils/serial/Kconfig
@@ -4,6 +4,7 @@ menu "Serial Device Support"
 
 config FDT_SERIAL
 	bool "FDT based serial drivers"
+	depends on FDT
 	default n
 
 if FDT_SERIAL
diff --git a/lib/utils/timer/Kconfig b/lib/utils/timer/Kconfig
index 0a1c727..23c48c5 100644
--- a/lib/utils/timer/Kconfig
+++ b/lib/utils/timer/Kconfig
@@ -4,6 +4,7 @@ menu "Timer Device Support"
 
 config FDT_TIMER
 	bool "FDT based timer drivers"
+	depends on FDT
 	default n
 
 if FDT_TIMER
diff --git a/platform/andes/ae350/Kconfig b/platform/andes/ae350/Kconfig
index 87deab0..d57f19f 100644
--- a/platform/andes/ae350/Kconfig
+++ b/platform/andes/ae350/Kconfig
@@ -2,6 +2,7 @@
 
 config PLATFORM_ANDES_AE350
 	bool
+	select FDT
 	select IRQCHIP_PLIC
 	select SERIAL_UART8250
 	default y
diff --git a/platform/fpga/ariane/Kconfig b/platform/fpga/ariane/Kconfig
index 5a720d9..e1f118b 100644
--- a/platform/fpga/ariane/Kconfig
+++ b/platform/fpga/ariane/Kconfig
@@ -2,6 +2,7 @@
 
 config PLATFORM_ARIANE_FPGA
 	bool
+	select FDT
 	select IPI_MSWI
 	select IRQCHIP_PLIC
 	select SERIAL_UART8250
diff --git a/platform/fpga/openpiton/Kconfig b/platform/fpga/openpiton/Kconfig
index 973906e..bc9c86e 100644
--- a/platform/fpga/openpiton/Kconfig
+++ b/platform/fpga/openpiton/Kconfig
@@ -2,6 +2,7 @@
 
 config PLATFORM_OPENPITON_FPGA
 	bool
+	select FDT
 	select IPI_MSWI
 	select IRQCHIP_PLIC
 	select SERIAL_UART8250
diff --git a/platform/generic/Kconfig b/platform/generic/Kconfig
index 3eab282..c1a77b3 100644
--- a/platform/generic/Kconfig
+++ b/platform/generic/Kconfig
@@ -2,4 +2,7 @@
 
 config PLATFORM_GENERIC
 	bool
+	select FDT
+	select FDT_DOMAIN
+	select FDT_PMU
 	default y
diff --git a/platform/kendryte/k210/Kconfig b/platform/kendryte/k210/Kconfig
index 2a1daaa..5bf5973 100644
--- a/platform/kendryte/k210/Kconfig
+++ b/platform/kendryte/k210/Kconfig
@@ -2,6 +2,7 @@
 
 config PLATFORM_KENDRYTE_K210
 	bool
+	select FDT
 	select IPI_MSWI
 	select IRQCHIP_PLIC
 	select SERIAL_SIFIVE
diff --git a/platform/nuclei/ux600/Kconfig b/platform/nuclei/ux600/Kconfig
index 464802e..84d74e8 100644
--- a/platform/nuclei/ux600/Kconfig
+++ b/platform/nuclei/ux600/Kconfig
@@ -2,6 +2,7 @@
 
 config PLATFORM_NUCLEI_UX600
 	bool
+	select FDT
 	select IPI_MSWI
 	select IRQCHIP_PLIC
 	select SERIAL_SIFIVE
diff --git a/platform/nuclei/ux600/platform.c b/platform/nuclei/ux600/platform.c
index 5498a1f..2b02734 100644
--- a/platform/nuclei/ux600/platform.c
+++ b/platform/nuclei/ux600/platform.c
@@ -8,7 +8,6 @@
  *   hqfang <578567190@qq.com>
  */
 
-#include <libfdt.h>
 #include <sbi/riscv_asm.h>
 #include <sbi/riscv_io.h>
 #include <sbi/riscv_encoding.h>
-- 
2.34.1



^ permalink raw reply related	[flat|nested] 26+ messages in thread

* [PATCH v2 12/14] platform: generic: Use kconfig for enabling/disabling overrides
  2022-07-18 14:55 [PATCH v2 00/14] OpenSBI Kconfig Support Anup Patel
                   ` (10 preceding siblings ...)
  2022-07-18 14:56 ` [PATCH v2 11/14] lib: utils/fdt: Use kconfig for enabling/disabling Anup Patel
@ 2022-07-18 14:56 ` Anup Patel
  2022-07-18 14:56 ` [PATCH v2 13/14] platform: Remove redundant config.mk from all platforms Anup Patel
                   ` (2 subsequent siblings)
  14 siblings, 0 replies; 26+ messages in thread
From: Anup Patel @ 2022-07-18 14:56 UTC (permalink / raw)
  To: opensbi

We update generic platform to use kconfig for enabling/disabling
platform overrides. We also enable all platform overrides in generic
platform defconfig.

Signed-off-by: Anup Patel <apatel@ventanamicro.com>
---
 platform/generic/Kconfig              | 18 ++++++++++++++++++
 platform/generic/allwinner/objects.mk |  4 ++--
 platform/generic/configs/defconfig    |  3 +++
 platform/generic/sifive/objects.mk    |  8 ++++----
 4 files changed, 27 insertions(+), 6 deletions(-)

diff --git a/platform/generic/Kconfig b/platform/generic/Kconfig
index c1a77b3..c76bd12 100644
--- a/platform/generic/Kconfig
+++ b/platform/generic/Kconfig
@@ -6,3 +6,21 @@ config PLATFORM_GENERIC
 	select FDT_DOMAIN
 	select FDT_PMU
 	default y
+
+if PLATFORM_GENERIC
+
+config PLATFORM_ALLWINNER_D1
+	bool "Allwinner D1 support"
+	depends on FDT_IRQCHIP_PLIC
+	default n
+
+config PLATFORM_SIFIVE_FU540
+	bool "SiFive FU540 support"
+	default n
+
+config PLATFORM_SIFIVE_FU740
+	bool "SiFive FU740 support"
+	depends on FDT_RESET && FDT_I2C
+	default n
+
+endif
diff --git a/platform/generic/allwinner/objects.mk b/platform/generic/allwinner/objects.mk
index 9e36ab6..447cdf1 100644
--- a/platform/generic/allwinner/objects.mk
+++ b/platform/generic/allwinner/objects.mk
@@ -2,5 +2,5 @@
 # SPDX-License-Identifier: BSD-2-Clause
 #
 
-carray-platform_override_modules-y += sun20i_d1
-platform-objs-y += allwinner/sun20i-d1.o
+carray-platform_override_modules-$(CONFIG_PLATFORM_ALLWINNER_D1) += sun20i_d1
+platform-objs-$(CONFIG_PLATFORM_ALLWINNER_D1) += allwinner/sun20i-d1.o
diff --git a/platform/generic/configs/defconfig b/platform/generic/configs/defconfig
index d56cef2..2a75394 100644
--- a/platform/generic/configs/defconfig
+++ b/platform/generic/configs/defconfig
@@ -1,3 +1,6 @@
+CONFIG_PLATFORM_ALLWINNER_D1=y
+CONFIG_PLATFORM_SIFIVE_FU540=y
+CONFIG_PLATFORM_SIFIVE_FU740=y
 CONFIG_FDT_GPIO=y
 CONFIG_FDT_GPIO_SIFIVE=y
 CONFIG_FDT_I2C=y
diff --git a/platform/generic/sifive/objects.mk b/platform/generic/sifive/objects.mk
index c17e2df..d75e444 100644
--- a/platform/generic/sifive/objects.mk
+++ b/platform/generic/sifive/objects.mk
@@ -2,8 +2,8 @@
 # SPDX-License-Identifier: BSD-2-Clause
 #
 
-carray-platform_override_modules-y += sifive_fu540
-platform-objs-y += sifive/fu540.o
+carray-platform_override_modules-$(CONFIG_PLATFORM_SIFIVE_FU540) += sifive_fu540
+platform-objs-$(CONFIG_PLATFORM_SIFIVE_FU540) += sifive/fu540.o
 
-carray-platform_override_modules-y += sifive_fu740
-platform-objs-y += sifive/fu740.o
+carray-platform_override_modules-$(CONFIG_PLATFORM_SIFIVE_FU740) += sifive_fu740
+platform-objs-$(CONFIG_PLATFORM_SIFIVE_FU740) += sifive/fu740.o
-- 
2.34.1



^ permalink raw reply related	[flat|nested] 26+ messages in thread

* [PATCH v2 13/14] platform: Remove redundant config.mk from all platforms
  2022-07-18 14:55 [PATCH v2 00/14] OpenSBI Kconfig Support Anup Patel
                   ` (11 preceding siblings ...)
  2022-07-18 14:56 ` [PATCH v2 12/14] platform: generic: Use kconfig for enabling/disabling overrides Anup Patel
@ 2022-07-18 14:56 ` Anup Patel
  2022-07-18 14:56 ` [PATCH v2 14/14] docs: Update documentation for kconfig support Anup Patel
  2022-07-18 18:48 ` [PATCH v2 00/14] OpenSBI Kconfig Support Andrew Jones
  14 siblings, 0 replies; 26+ messages in thread
From: Anup Patel @ 2022-07-18 14:56 UTC (permalink / raw)
  To: opensbi

The options defined in config.mk can be specified in objects.mk of each
platform so let us remove config.mk from all platforms.

Signed-off-by: Anup Patel <apatel@ventanamicro.com>
---
 Makefile                           |  4 +-
 platform/andes/ae350/config.mk     | 36 --------------
 platform/andes/ae350/objects.mk    | 29 +++++++++++
 platform/fpga/ariane/config.mk     | 36 --------------
 platform/fpga/ariane/objects.mk    | 35 ++++++++++++++
 platform/fpga/openpiton/config.mk  | 35 --------------
 platform/fpga/openpiton/objects.mk | 35 ++++++++++++++
 platform/generic/config.mk         | 40 ----------------
 platform/generic/objects.mk        | 33 +++++++++++++
 platform/kendryte/k210/config.mk   | 19 --------
 platform/kendryte/k210/objects.mk  | 12 +++++
 platform/nuclei/ux600/config.mk    | 30 ------------
 platform/nuclei/ux600/objects.mk   | 22 +++++++++
 platform/template/config.mk        | 77 ------------------------------
 platform/template/objects.mk       | 72 ++++++++++++++++++++++++++++
 platform/template/platform.c       |  2 +-
 16 files changed, 240 insertions(+), 277 deletions(-)
 delete mode 100644 platform/andes/ae350/config.mk
 delete mode 100644 platform/fpga/ariane/config.mk
 delete mode 100644 platform/fpga/openpiton/config.mk
 delete mode 100644 platform/generic/config.mk
 delete mode 100644 platform/kendryte/k210/config.mk
 delete mode 100644 platform/nuclei/ux600/config.mk
 delete mode 100644 platform/template/config.mk

diff --git a/Makefile b/Makefile
index 5fc67db..a6475a7 100644
--- a/Makefile
+++ b/Makefile
@@ -203,7 +203,7 @@ firmware-object-mks=$(shell if [ -d $(firmware_dir) ]; then find $(firmware_dir)
 .PHONY: all
 all:
 
-# Include platform specific .config and config.mk
+# Include platform specific .config
 ifdef PLATFORM
 .PHONY: menuconfig
 menuconfig: $(platform_src_dir)/Kconfig $(src_dir)/Kconfig
@@ -226,8 +226,6 @@ $(KCONFIG_CONFIG): $(platform_src_dir)/configs/$(PLATFORM_DEFCONFIG) $(platform_
 $(KCONFIG_AUTOCONF_CMD): $(KCONFIG_CONFIG)
 include $(KCONFIG_CONFIG)
 include $(KCONFIG_AUTOCONF_CMD)
-
-include $(platform_src_dir)/config.mk
 endif
 
 # Include all object.mk files
diff --git a/platform/andes/ae350/config.mk b/platform/andes/ae350/config.mk
deleted file mode 100644
index f555ef5..0000000
--- a/platform/andes/ae350/config.mk
+++ /dev/null
@@ -1,36 +0,0 @@
-#
-# SPDX-License-Identifier: BSD-2-Clause
-#
-# Copyright (c) 2019 Andes Technology Corporation
-#
-# Authors:
-#   Zong Li <zong@andestech.com>
-#   Nylon Chen <nylon7@andestech.com>
-
-# Compiler flags
-platform-cppflags-y =
-platform-cflags-y =
-platform-asflags-y =
-platform-ldflags-y =
-
-# Blobs to build
-FW_TEXT_START=0x00000000
-
-FW_DYNAMIC=y
-
-FW_JUMP=y
-ifeq ($(PLATFORM_RISCV_XLEN), 32)
-  FW_JUMP_ADDR=0x400000
-else
-  FW_JUMP_ADDR=0x200000
-endif
-FW_JUMP_FDT_ADDR=0x2000000
-
-FW_PAYLOAD=y
-ifeq ($(PLATFORM_RISCV_XLEN), 32)
-  FW_PAYLOAD_OFFSET=0x400000
-else
-  FW_PAYLOAD_OFFSET=0x200000
-endif
-
-FW_PAYLOAD_FDT_ADDR=0x2000000
diff --git a/platform/andes/ae350/objects.mk b/platform/andes/ae350/objects.mk
index 5369677..80f0737 100644
--- a/platform/andes/ae350/objects.mk
+++ b/platform/andes/ae350/objects.mk
@@ -8,4 +8,33 @@
 #   Nylon Chen <nylon7@andestech.com>
 #
 
+# Compiler flags
+platform-cppflags-y =
+platform-cflags-y =
+platform-asflags-y =
+platform-ldflags-y =
+
+# Objects to build
 platform-objs-y += cache.o platform.o plicsw.o plmt.o
+
+# Blobs to build
+FW_TEXT_START=0x00000000
+
+FW_DYNAMIC=y
+
+FW_JUMP=y
+ifeq ($(PLATFORM_RISCV_XLEN), 32)
+  FW_JUMP_ADDR=0x400000
+else
+  FW_JUMP_ADDR=0x200000
+endif
+FW_JUMP_FDT_ADDR=0x2000000
+
+FW_PAYLOAD=y
+ifeq ($(PLATFORM_RISCV_XLEN), 32)
+  FW_PAYLOAD_OFFSET=0x400000
+else
+  FW_PAYLOAD_OFFSET=0x200000
+endif
+
+FW_PAYLOAD_FDT_ADDR=0x2000000
diff --git a/platform/fpga/ariane/config.mk b/platform/fpga/ariane/config.mk
deleted file mode 100644
index 3556461..0000000
--- a/platform/fpga/ariane/config.mk
+++ /dev/null
@@ -1,36 +0,0 @@
-#
-# SPDX-License-Identifier: BSD-2-Clause
-#
-# Copyright (C) 2019 FORTH-ICS/CARV
-#		Panagiotis Peristerakis <perister@ics.forth.gr>
-#
-
-#for more infos, check out /platform/template/config.mk
-
-PLATFORM_RISCV_XLEN = 64
-
-# Blobs to build
-FW_TEXT_START=0x80000000
-FW_JUMP=n
-
-ifeq ($(PLATFORM_RISCV_XLEN), 32)
- # This needs to be 4MB aligned for 32-bit support
- FW_JUMP_ADDR=0x80400000
- else
- # This needs to be 2MB aligned for 64-bit support
- FW_JUMP_ADDR=0x80200000
- endif
-FW_JUMP_FDT_ADDR=0x82200000
-
-# Firmware with payload configuration.
-FW_PAYLOAD=y
-
-ifeq ($(PLATFORM_RISCV_XLEN), 32)
-# This needs to be 4MB aligned for 32-bit support
-  FW_PAYLOAD_OFFSET=0x400000
-else
-# This needs to be 2MB aligned for 64-bit support
-  FW_PAYLOAD_OFFSET=0x200000
-endif
-FW_PAYLOAD_FDT_ADDR=0x82200000
-FW_PAYLOAD_ALIGN=0x1000
diff --git a/platform/fpga/ariane/objects.mk b/platform/fpga/ariane/objects.mk
index 814e6da..83581ac 100644
--- a/platform/fpga/ariane/objects.mk
+++ b/platform/fpga/ariane/objects.mk
@@ -5,4 +5,39 @@
 #		Panagiotis Peristerakis <perister@ics.forth.gr>
 #
 
+# Compiler flags
+platform-cppflags-y =
+platform-cflags-y =
+platform-asflags-y =
+platform-ldflags-y =
+
+# Object to build
 platform-objs-y += platform.o
+
+PLATFORM_RISCV_XLEN = 64
+
+# Blobs to build
+FW_TEXT_START=0x80000000
+FW_JUMP=n
+
+ifeq ($(PLATFORM_RISCV_XLEN), 32)
+ # This needs to be 4MB aligned for 32-bit support
+ FW_JUMP_ADDR=0x80400000
+ else
+ # This needs to be 2MB aligned for 64-bit support
+ FW_JUMP_ADDR=0x80200000
+ endif
+FW_JUMP_FDT_ADDR=0x82200000
+
+# Firmware with payload configuration.
+FW_PAYLOAD=y
+
+ifeq ($(PLATFORM_RISCV_XLEN), 32)
+# This needs to be 4MB aligned for 32-bit support
+  FW_PAYLOAD_OFFSET=0x400000
+else
+# This needs to be 2MB aligned for 64-bit support
+  FW_PAYLOAD_OFFSET=0x200000
+endif
+FW_PAYLOAD_FDT_ADDR=0x82200000
+FW_PAYLOAD_ALIGN=0x1000
diff --git a/platform/fpga/openpiton/config.mk b/platform/fpga/openpiton/config.mk
deleted file mode 100644
index a969b25..0000000
--- a/platform/fpga/openpiton/config.mk
+++ /dev/null
@@ -1,35 +0,0 @@
-#
-# SPDX-License-Identifier: BSD-2-Clause
-#
-# Copyright (c) 2020 Western Digital Corporation or its affiliates.
-#
-
-#for more infos, check out /platform/template/config.mk
-
-PLATFORM_RISCV_XLEN = 64
-
-# Blobs to build
-FW_TEXT_START=0x80000000
-FW_JUMP=n
-
-ifeq ($(PLATFORM_RISCV_XLEN), 32)
- # This needs to be 4MB aligned for 32-bit support
- FW_JUMP_ADDR=0x80400000
- else
- # This needs to be 2MB aligned for 64-bit support
- FW_JUMP_ADDR=0x80200000
- endif
-FW_JUMP_FDT_ADDR=0x82200000
-
-# Firmware with payload configuration.
-FW_PAYLOAD=y
-
-ifeq ($(PLATFORM_RISCV_XLEN), 32)
-# This needs to be 4MB aligned for 32-bit support
-  FW_PAYLOAD_OFFSET=0x400000
-else
-# This needs to be 2MB aligned for 64-bit support
-  FW_PAYLOAD_OFFSET=0x200000
-endif
-FW_PAYLOAD_FDT_ADDR=0x82200000
-FW_PAYLOAD_ALIGN=0x1000
diff --git a/platform/fpga/openpiton/objects.mk b/platform/fpga/openpiton/objects.mk
index 30a3c4f..c8c345a 100644
--- a/platform/fpga/openpiton/objects.mk
+++ b/platform/fpga/openpiton/objects.mk
@@ -4,4 +4,39 @@
 # Copyright (c) 2020 Western Digital Corporation or its affiliates.
 #
 
+# Compiler flags
+platform-cppflags-y =
+platform-cflags-y =
+platform-asflags-y =
+platform-ldflags-y =
+
+# Objects to build
 platform-objs-y += platform.o
+
+PLATFORM_RISCV_XLEN = 64
+
+# Blobs to build
+FW_TEXT_START=0x80000000
+FW_JUMP=n
+
+ifeq ($(PLATFORM_RISCV_XLEN), 32)
+ # This needs to be 4MB aligned for 32-bit support
+ FW_JUMP_ADDR=0x80400000
+ else
+ # This needs to be 2MB aligned for 64-bit support
+ FW_JUMP_ADDR=0x80200000
+ endif
+FW_JUMP_FDT_ADDR=0x82200000
+
+# Firmware with payload configuration.
+FW_PAYLOAD=y
+
+ifeq ($(PLATFORM_RISCV_XLEN), 32)
+# This needs to be 4MB aligned for 32-bit support
+  FW_PAYLOAD_OFFSET=0x400000
+else
+# This needs to be 2MB aligned for 64-bit support
+  FW_PAYLOAD_OFFSET=0x200000
+endif
+FW_PAYLOAD_FDT_ADDR=0x82200000
+FW_PAYLOAD_ALIGN=0x1000
diff --git a/platform/generic/config.mk b/platform/generic/config.mk
deleted file mode 100644
index 8151974..0000000
--- a/platform/generic/config.mk
+++ /dev/null
@@ -1,40 +0,0 @@
-#
-# SPDX-License-Identifier: BSD-2-Clause
-#
-# Copyright (c) 2020 Western Digital Corporation or its affiliates.
-#
-# Authors:
-#   Anup Patel <anup.patel@wdc.com>
-#
-
-# Compiler flags
-platform-cppflags-y =
-platform-cflags-y =
-platform-asflags-y =
-platform-ldflags-y =
-
-# Command for platform specific "make run"
-platform-runcmd = qemu-system-riscv$(PLATFORM_RISCV_XLEN) -M virt -m 256M \
-  -nographic -bios $(build_dir)/platform/generic/firmware/fw_payload.elf
-
-# Blobs to build
-FW_TEXT_START=0x80000000
-FW_DYNAMIC=y
-FW_JUMP=y
-ifeq ($(PLATFORM_RISCV_XLEN), 32)
-  # This needs to be 4MB aligned for 32-bit system
-  FW_JUMP_ADDR=$(shell printf "0x%X" $$(($(FW_TEXT_START) + 0x400000)))
-else
-  # This needs to be 2MB aligned for 64-bit system
-  FW_JUMP_ADDR=$(shell printf "0x%X" $$(($(FW_TEXT_START) + 0x200000)))
-endif
-FW_JUMP_FDT_ADDR=$(shell printf "0x%X" $$(($(FW_TEXT_START) + 0x2200000)))
-FW_PAYLOAD=y
-ifeq ($(PLATFORM_RISCV_XLEN), 32)
-  # This needs to be 4MB aligned for 32-bit system
-  FW_PAYLOAD_OFFSET=0x400000
-else
-  # This needs to be 2MB aligned for 64-bit system
-  FW_PAYLOAD_OFFSET=0x200000
-endif
-FW_PAYLOAD_FDT_ADDR=$(FW_JUMP_FDT_ADDR)
diff --git a/platform/generic/objects.mk b/platform/generic/objects.mk
index 4907754..136853e 100644
--- a/platform/generic/objects.mk
+++ b/platform/generic/objects.mk
@@ -7,5 +7,38 @@
 #   Anup Patel <anup.patel@wdc.com>
 #
 
+# Compiler flags
+platform-cppflags-y =
+platform-cflags-y =
+platform-asflags-y =
+platform-ldflags-y =
+
+# Command for platform specific "make run"
+platform-runcmd = qemu-system-riscv$(PLATFORM_RISCV_XLEN) -M virt -m 256M \
+  -nographic -bios $(build_dir)/platform/generic/firmware/fw_payload.elf
+
+# Objects to build
 platform-objs-y += platform.o
 platform-objs-y += platform_override_modules.o
+
+# Blobs to build
+FW_TEXT_START=0x80000000
+FW_DYNAMIC=y
+FW_JUMP=y
+ifeq ($(PLATFORM_RISCV_XLEN), 32)
+  # This needs to be 4MB aligned for 32-bit system
+  FW_JUMP_ADDR=$(shell printf "0x%X" $$(($(FW_TEXT_START) + 0x400000)))
+else
+  # This needs to be 2MB aligned for 64-bit system
+  FW_JUMP_ADDR=$(shell printf "0x%X" $$(($(FW_TEXT_START) + 0x200000)))
+endif
+FW_JUMP_FDT_ADDR=$(shell printf "0x%X" $$(($(FW_TEXT_START) + 0x2200000)))
+FW_PAYLOAD=y
+ifeq ($(PLATFORM_RISCV_XLEN), 32)
+  # This needs to be 4MB aligned for 32-bit system
+  FW_PAYLOAD_OFFSET=0x400000
+else
+  # This needs to be 2MB aligned for 64-bit system
+  FW_PAYLOAD_OFFSET=0x200000
+endif
+FW_PAYLOAD_FDT_ADDR=$(FW_JUMP_FDT_ADDR)
diff --git a/platform/kendryte/k210/config.mk b/platform/kendryte/k210/config.mk
deleted file mode 100644
index 8a9b814..0000000
--- a/platform/kendryte/k210/config.mk
+++ /dev/null
@@ -1,19 +0,0 @@
-#
-# SPDX-License-Identifier: BSD-2-Clause
-#
-# Copyright (c) 2019 Western Digital Corporation or its affiliates.
-#
-# Authors:
-#   Damien Le Moal <damien.lemoal@wdc.com>
-#
-
-# Compiler flags
-platform-cppflags-y =
-platform-cflags-y =
-platform-asflags-y =
-platform-ldflags-y =
-
-# Blobs to build
-FW_TEXT_START=0x80000000
-FW_PAYLOAD=y
-FW_PAYLOAD_ALIGN=0x1000
diff --git a/platform/kendryte/k210/objects.mk b/platform/kendryte/k210/objects.mk
index b74da74..1bfb898 100644
--- a/platform/kendryte/k210/objects.mk
+++ b/platform/kendryte/k210/objects.mk
@@ -7,8 +7,20 @@
 #   Damien Le Moal <damien.lemoal@wdc.com>
 #
 
+# Compiler flags
+platform-cppflags-y =
+platform-cflags-y =
+platform-asflags-y =
+platform-ldflags-y =
+
+# Objects to build
 platform-objs-y += platform.o
 
 platform-objs-y += k210.o
 platform-varprefix-k210.o = dt_k210
 platform-padding-k210.o = 2048
+
+# Blobs to build
+FW_TEXT_START=0x80000000
+FW_PAYLOAD=y
+FW_PAYLOAD_ALIGN=0x1000
diff --git a/platform/nuclei/ux600/config.mk b/platform/nuclei/ux600/config.mk
deleted file mode 100644
index dddcc4e..0000000
--- a/platform/nuclei/ux600/config.mk
+++ /dev/null
@@ -1,30 +0,0 @@
-#
-# SPDX-License-Identifier: BSD-2-Clause
-#
-# Copyright (c) 2020 Nuclei Corporation or its affiliates.
-#
-# Authors:
-#   lujun <lujun@nucleisys.com>
-#   hqfang <578567190@qq.com>
-#
-
-# Compiler flags
-platform-cppflags-y =
-platform-cflags-y =
-platform-asflags-y =
-platform-ldflags-y =
-
-# Command for platform specific "make run"
-platform-runcmd = xl_spike \
-  $(build_dir)/platform/nuclei/ux600/firmware/fw_payload.elf
-
-# Blobs to build
-FW_TEXT_START=0xA0000000
-FW_DYNAMIC=y
-FW_JUMP=y
-
-FW_JUMP_ADDR=0xA0200000
-FW_JUMP_FDT_ADDR=0xA8000000
-FW_PAYLOAD=y
-FW_PAYLOAD_OFFSET=0x200000
-FW_PAYLOAD_FDT_ADDR=0xA8000000
diff --git a/platform/nuclei/ux600/objects.mk b/platform/nuclei/ux600/objects.mk
index 8c36c90..7c429e0 100644
--- a/platform/nuclei/ux600/objects.mk
+++ b/platform/nuclei/ux600/objects.mk
@@ -8,4 +8,26 @@
 #   hqfang <578567190@qq.com>
 #
 
+# Compiler flags
+platform-cppflags-y =
+platform-cflags-y =
+platform-asflags-y =
+platform-ldflags-y =
+
+# Command for platform specific "make run"
+platform-runcmd = xl_spike \
+  $(build_dir)/platform/nuclei/ux600/firmware/fw_payload.elf
+
+# Objects to build
 platform-objs-y += platform.o
+
+# Blobs to build
+FW_TEXT_START=0xA0000000
+FW_DYNAMIC=y
+FW_JUMP=y
+
+FW_JUMP_ADDR=0xA0200000
+FW_JUMP_FDT_ADDR=0xA8000000
+FW_PAYLOAD=y
+FW_PAYLOAD_OFFSET=0x200000
+FW_PAYLOAD_FDT_ADDR=0xA8000000
diff --git a/platform/template/config.mk b/platform/template/config.mk
deleted file mode 100644
index f817342..0000000
--- a/platform/template/config.mk
+++ /dev/null
@@ -1,77 +0,0 @@
-#
-# SPDX-License-Identifier: BSD-2-Clause
-#
-# Copyright (c) 2019 Western Digital Corporation or its affiliates.
-#
-
-# Compiler pre-processor flags
-platform-cppflags-y =
-
-# C Compiler and assembler flags.
-platform-cflags-y =
-platform-asflags-y =
-
-# Linker flags: additional libraries and object files that the platform
-# code needs can be added here
-platform-ldflags-y =
-
-#
-# Command for platform specific "make run"
-# Useful for development and debugging on plaftform simulator (such as QEMU)
-#
-# platform-runcmd = your_platform_run.sh
-
-#
-# Platform RISC-V XLEN, ABI, ISA and Code Model configuration.
-# These are optional parameters but platforms can optionaly provide it.
-# Some of these are guessed based on GCC compiler capabilities
-#
-# PLATFORM_RISCV_XLEN = 64
-# PLATFORM_RISCV_ABI = lp64
-# PLATFORM_RISCV_ISA = rv64imafdc
-# PLATFORM_RISCV_CODE_MODEL = medany
-
-# Firmware load address configuration. This is mandatory.
-FW_TEXT_START=0x80000000
-
-# Optional parameter for path to external FDT
-# FW_FDT_PATH="path to platform flattened device tree file"
-
-#
-# Dynamic firmware configuration.
-# Optional parameters are commented out. Uncomment and define these parameters
-# as needed.
-#
-FW_DYNAMIC=<y|n>
-
-#
-# Jump firmware configuration.
-# Optional parameters are commented out. Uncomment and define these parameters
-# as needed.
-#
-FW_JUMP=<y|n>
-# This needs to be 4MB aligned for 32-bit support
-# This needs to be 2MB aligned for 64-bit support
-# ifeq ($(PLATFORM_RISCV_XLEN), 32)
-# FW_JUMP_ADDR=0x80400000
-# else
-# FW_JUMP_ADDR=0x80200000
-# endif
-# FW_JUMP_FDT_ADDR=0x82200000
-
-#
-# Firmware with payload configuration.
-# Optional parameters are commented out. Uncomment and define these parameters
-# as needed.
-#
-FW_PAYLOAD=<y|n>
-# This needs to be 4MB aligned for 32-bit support
-# This needs to be 2MB aligned for 64-bit support
-ifeq ($(PLATFORM_RISCV_XLEN), 32)
-FW_PAYLOAD_OFFSET=0x400000
-else
-FW_PAYLOAD_OFFSET=0x200000
-endif
-# FW_PAYLOAD_ALIGN=0x1000
-# FW_PAYLOAD_PATH="path to next boot stage binary image file"
-# FW_PAYLOAD_FDT_ADDR=0x82200000
diff --git a/platform/template/objects.mk b/platform/template/objects.mk
index caaec2b..0025928 100644
--- a/platform/template/objects.mk
+++ b/platform/template/objects.mk
@@ -4,6 +4,33 @@
 # Copyright (c) 2019 Western Digital Corporation or its affiliates.
 #
 
+# Compiler pre-processor flags
+platform-cppflags-y =
+
+# C Compiler and assembler flags.
+platform-cflags-y =
+platform-asflags-y =
+
+# Linker flags: additional libraries and object files that the platform
+# code needs can be added here
+platform-ldflags-y =
+
+#
+# Command for platform specific "make run"
+# Useful for development and debugging on plaftform simulator (such as QEMU)
+#
+# platform-runcmd = your_platform_run.sh
+
+#
+# Platform RISC-V XLEN, ABI, ISA and Code Model configuration.
+# These are optional parameters but platforms can optionaly provide it.
+# Some of these are guessed based on GCC compiler capabilities
+#
+# PLATFORM_RISCV_XLEN = 64
+# PLATFORM_RISCV_ABI = lp64
+# PLATFORM_RISCV_ISA = rv64imafdc
+# PLATFORM_RISCV_CODE_MODEL = medany
+
 # Space separated list of object file names to be compiled for the platform
 platform-objs-y += platform.o
 
@@ -13,3 +40,48 @@ platform-objs-y += platform.o
 # source file be in the form <dt file name>.dts
 #
 # platform-objs-y += <dt file name>.o
+
+# Firmware load address configuration. This is mandatory.
+FW_TEXT_START=0x80000000
+
+# Optional parameter for path to external FDT
+# FW_FDT_PATH="path to platform flattened device tree file"
+
+#
+# Dynamic firmware configuration.
+# Optional parameters are commented out. Uncomment and define these parameters
+# as needed.
+#
+FW_DYNAMIC=<y|n>
+
+#
+# Jump firmware configuration.
+# Optional parameters are commented out. Uncomment and define these parameters
+# as needed.
+#
+FW_JUMP=<y|n>
+# This needs to be 4MB aligned for 32-bit support
+# This needs to be 2MB aligned for 64-bit support
+# ifeq ($(PLATFORM_RISCV_XLEN), 32)
+# FW_JUMP_ADDR=0x80400000
+# else
+# FW_JUMP_ADDR=0x80200000
+# endif
+# FW_JUMP_FDT_ADDR=0x82200000
+
+#
+# Firmware with payload configuration.
+# Optional parameters are commented out. Uncomment and define these parameters
+# as needed.
+#
+FW_PAYLOAD=<y|n>
+# This needs to be 4MB aligned for 32-bit support
+# This needs to be 2MB aligned for 64-bit support
+ifeq ($(PLATFORM_RISCV_XLEN), 32)
+FW_PAYLOAD_OFFSET=0x400000
+else
+FW_PAYLOAD_OFFSET=0x200000
+endif
+# FW_PAYLOAD_ALIGN=0x1000
+# FW_PAYLOAD_PATH="path to next boot stage binary image file"
+# FW_PAYLOAD_FDT_ADDR=0x82200000
diff --git a/platform/template/platform.c b/platform/template/platform.c
index 5524847..f3802da 100644
--- a/platform/template/platform.c
+++ b/platform/template/platform.c
@@ -11,7 +11,7 @@
 
 /*
  * Include these files as needed.
- * See config.mk PLATFORM_xxx configuration parameters.
+ * See objects.mk PLATFORM_xxx configuration parameters.
  */
 #include <sbi_utils/ipi/aclint_mswi.h>
 #include <sbi_utils/irqchip/plic.h>
-- 
2.34.1



^ permalink raw reply related	[flat|nested] 26+ messages in thread

* [PATCH v2 14/14] docs: Update documentation for kconfig support
  2022-07-18 14:55 [PATCH v2 00/14] OpenSBI Kconfig Support Anup Patel
                   ` (12 preceding siblings ...)
  2022-07-18 14:56 ` [PATCH v2 13/14] platform: Remove redundant config.mk from all platforms Anup Patel
@ 2022-07-18 14:56 ` Anup Patel
  2022-07-18 18:48 ` [PATCH v2 00/14] OpenSBI Kconfig Support Andrew Jones
  14 siblings, 0 replies; 26+ messages in thread
From: Anup Patel @ 2022-07-18 14:56 UTC (permalink / raw)
  To: opensbi

We update all documentation files to:
1) Remove references to platform specific config.mk file since it is
   has been removed.
2) Add details about platform specific configs/defconfig and Kconfig
   files mandatory for each platform.
3) Add required packages in top-level README.md

Signed-off-by: Anup Patel <apatel@ventanamicro.com>
---
 README.md                   | 25 +++++++++++++++++++++++--
 docs/firmware/fw_dynamic.md |  2 +-
 docs/firmware/fw_jump.md    |  4 ++--
 docs/firmware/fw_payload.md |  4 ++--
 docs/platform/platform.md   |  4 ++--
 docs/platform_guide.md      |  9 +++++----
 6 files changed, 35 insertions(+), 13 deletions(-)

diff --git a/README.md b/README.md
index 54fabe4..cd852cb 100644
--- a/README.md
+++ b/README.md
@@ -92,8 +92,8 @@ N.B. Any S-mode boot loader (i.e. U-Boot) doesn't need to support HSM extension,
 as it doesn't need to boot all the harts. The operating system should be
 capable enough to bring up all other non-booting harts using HSM extension.
 
-Required Toolchain
-------------------
+Required Toolchain and Packages
+-------------------------------
 
 OpenSBI can be compiled natively or cross-compiled on a x86 host. For
 cross-compilation, you can build your own toolchain, download a prebuilt one
@@ -115,6 +115,14 @@ triple is used (e.g. *-target riscv64-unknown-elf*).
 Please note that only a 64-bit version of the toolchain is available in
 the Bootlin toolchain repository for now.
 
+In addition to a toolchain, OpenSBI also requires following packages on
+the host:
+
+1. device-tree-compiler: The device tree compiler for compiling device
+   tree sources (DTS files).
+2. kconfig-frontends: A standalone implementation of the Linux Kconfig
+   parser and frontends for OpenSBI platform configuration management.
+
 Building and Installing the OpenSBI Platform-Independent Library
 ----------------------------------------------------------------
 
@@ -196,6 +204,19 @@ top-level make command line. These options, such as *PLATFORM_<xyz>* or
 *docs/platform/<platform_name>.md* files and
 *docs/firmware/<firmware_name>.md* files.
 
+All OpenSBI platforms support Kconfig style build-time configuration. Users
+can change the build-time configuration of a platform using a graphical
+interface as follows:
+```
+make PLATFORM=<platform_subdir> menuconfig
+```
+
+Alternately, an OpenSBI platform can have multiple default configurations
+and users can select a custom default configuration as follows:
+```
+make PLATFORM=<platform_subdir> PLATFORM_DEFCONFIG=<platform_custom_defconfig>
+```
+
 Building 32-bit / 64-bit OpenSBI Images
 ---------------------------------------
 By default, building OpenSBI generates 32-bit or 64-bit images based on the
diff --git a/docs/firmware/fw_dynamic.md b/docs/firmware/fw_dynamic.md
index 7b9b192..e251488 100644
--- a/docs/firmware/fw_dynamic.md
+++ b/docs/firmware/fw_dynamic.md
@@ -20,7 +20,7 @@ the booting stage binary to follow OpenSBI firmware.
 A platform can enable *FW_DYNAMIC* firmware using any of the following methods.
 
 1. Specifying `FW_DYNAMIC=y` on the top level `make` command line.
-2. Specifying `FW_DYNAMIC=y` in the target platform *config.mk* configuration
+2. Specifying `FW_DYNAMIC=y` in the target platform *objects.mk* configuration
 file.
 
 The compiled *FW_DYNAMIC* firmware ELF file is named *fw_dynamic.elf*. It's
diff --git a/docs/firmware/fw_jump.md b/docs/firmware/fw_jump.md
index eea3013..35a4301 100644
--- a/docs/firmware/fw_jump.md
+++ b/docs/firmware/fw_jump.md
@@ -15,7 +15,7 @@ and the booting stage binary to follow the OpenSBI firmware.
 A platform *FW_JUMP* firmware can be enabled by any of the following methods:
 
 1. Specifying `FW_JUMP=y` on the top level `make` command line.
-2. Specifying `FW_JUMP=y` in the target platform *config.mk* configuration file.
+2. Specifying `FW_JUMP=y` in the target platform *objects.mk* configuration file.
 
 The compiled *FW_JUMP* firmware ELF file is named *fw_jump.elf*. Its expanded
 image file is *fw_jump.bin*. Both files are created in the platform-specific
@@ -26,7 +26,7 @@ build directory under the *build/platform/<platform_subdir>/firmware* directory.
 
 To operate correctly, a *FW_JUMP* firmware requires some configuration
 parameters to be defined using either the top level `make` command line or the
-target platform *config.mk* configuration file. The possible parameters are as
+target platform *objects.mk* configuration file. The possible parameters are as
 follows:
 
 * **FW_JUMP_ADDR** - Address of the entry point of the booting stage to be
diff --git a/docs/firmware/fw_payload.md b/docs/firmware/fw_payload.md
index 0947448..3bb918f 100644
--- a/docs/firmware/fw_payload.md
+++ b/docs/firmware/fw_payload.md
@@ -20,7 +20,7 @@ Enabling *FW_PAYLOAD* compilation
 The *FW_PAYLOAD* firmware can be enabled by any of the following methods:
 
 1. Specifying `FW_PAYLOAD=y` on the top level `make` command line.
-2. Specifying `FW_PAYLOAD=y` in the target platform *config.mk* configuration
+2. Specifying `FW_PAYLOAD=y` in the target platform *objects.mk* configuration
    file.
 
 The compiled *FW_PAYLOAD* firmware ELF file is named *fw_jump.elf*. Its
@@ -33,7 +33,7 @@ Configuration Options
 
 A *FW_PAYLOAD* firmware is built according to configuration parameters and
 options. These configuration parameters can be defined using either the top
-level `make` command line or the target platform *config.mk* configuration
+level `make` command line or the target platform *objects.mk* configuration
 file. The parameters currently defined are as follows:
 
 * **FW_PAYLOAD_OFFSET** - Offset from *FW_TEXT_BASE* where the payload binary
diff --git a/docs/platform/platform.md b/docs/platform/platform.md
index cb4bec6..b726e1d 100644
--- a/docs/platform/platform.md
+++ b/docs/platform/platform.md
@@ -42,8 +42,8 @@ OpenSBI currently supports the following virtual and hardware platforms:
 The code for these supported platforms can be used as example to implement
 support for other platforms. The *platform/template* directory also provides
 template files for implementing support for a new platform. The *object.mk*,
-*config.mk* and *platform.c* template files provides enough comments to
-facilitate the implementation.
+*Kconfig*, *configs/defconfig* and *platform.c* template files provides enough
+comments to facilitate the implementation.
 
 [generic.md]: generic.md
 [qemu_virt.md]: qemu_virt.md
diff --git a/docs/platform_guide.md b/docs/platform_guide.md
index b6c2c2e..8ac5aa0 100644
--- a/docs/platform_guide.md
+++ b/docs/platform_guide.md
@@ -28,11 +28,12 @@ Adding support for a new platform
 Support for a new platform named *&lt;xyz&gt;* can be added as follows:
 
 1. Create a directory named *&lt;xyz&gt;* under the *platform/* directory.
-2. Create a platform configuration file named *config.mk* under the
-   *platform/&lt;xyz&gt;/* directory. This configuration file will provide
+2. Create a platform configuration files named *Kconfig* and *configs/defconfig*
+   under the *platform/&lt;xyz&gt;/* directory. This configuration files will
+   provide the build time configuration for the sources to be compiled.
+3. Create a *platform/&lt;xyz&gt;/objects.mk* file for listing the platform
+   object files to be compiled. This file also provides platform-specific
    compiler flags, and select firmware options.
-3. Create a *platform/&lt;xyz&gt;/objects.mk* file for listing the
-   platform-specific object files to be compiled.
 4. Create a *platform/&lt;xyz&gt;/platform.c* file providing a
    *struct sbi_platform* instance.
 
-- 
2.34.1



^ permalink raw reply related	[flat|nested] 26+ messages in thread

* [PATCH v2 00/14] OpenSBI Kconfig Support
  2022-07-18 14:55 [PATCH v2 00/14] OpenSBI Kconfig Support Anup Patel
                   ` (13 preceding siblings ...)
  2022-07-18 14:56 ` [PATCH v2 14/14] docs: Update documentation for kconfig support Anup Patel
@ 2022-07-18 18:48 ` Andrew Jones
  2022-07-18 21:34   ` David Abdurachmanov
  2022-07-19  3:55   ` Anup Patel
  14 siblings, 2 replies; 26+ messages in thread
From: Andrew Jones @ 2022-07-18 18:48 UTC (permalink / raw)
  To: opensbi

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?

[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


^ permalink raw reply	[flat|nested] 26+ messages in thread

* [PATCH v2 00/14] OpenSBI Kconfig Support
  2022-07-18 18:48 ` [PATCH v2 00/14] OpenSBI Kconfig Support Andrew Jones
@ 2022-07-18 21:34   ` David Abdurachmanov
  2022-07-19  4:04     ` Anup Patel
  2022-07-19  3:55   ` Anup Patel
  1 sibling, 1 reply; 26+ messages in thread
From: David Abdurachmanov @ 2022-07-18 21:34 UTC (permalink / raw)
  To: opensbi

On Mon, Jul 18, 2022 at 8:49 PM Andrew Jones <ajones@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.

Would kconfiglib work? That seems to be alive. While not directly
available in Fedora too it's on pip.

>
> [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


^ permalink raw reply	[flat|nested] 26+ messages in thread

* [PATCH v2 00/14] OpenSBI Kconfig Support
  2022-07-18 18:48 ` [PATCH v2 00/14] OpenSBI Kconfig Support Andrew Jones
  2022-07-18 21:34   ` David Abdurachmanov
@ 2022-07-19  3:55   ` Anup Patel
  2022-07-19  9:00     ` Andrew Jones
  1 sibling, 1 reply; 26+ messages in thread
From: Anup Patel @ 2022-07-19  3:55 UTC (permalink / raw)
  To: opensbi

+Heinrich
On Tue, Jul 19, 2022 at 12:18 AM Andrew Jones <ajones@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?
>
> [1] http://ymorin.is-a-geek.org/projects/kconfig-frontends

Actually, it seems quite a few distros (particularly debian, ubuntu,
and yocto) have already included the kconfig-frontends package so
I wonder why Fedora did not include a package for it ?

The QEMU scripts/minikconf.py is pretty compact and would be
our next best alternative but it doesn't have menuconfig support.

Regards,
Anup

>
> 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


^ permalink raw reply	[flat|nested] 26+ messages in thread

* [PATCH v2 00/14] OpenSBI Kconfig Support
  2022-07-18 21:34   ` David Abdurachmanov
@ 2022-07-19  4:04     ` Anup Patel
  2022-07-19  4:17       ` Anup Patel
  0 siblings, 1 reply; 26+ messages in thread
From: Anup Patel @ 2022-07-19  4:04 UTC (permalink / raw)
  To: opensbi

+Heinrich

On Tue, Jul 19, 2022 at 3:05 AM David Abdurachmanov
<david.abdurachmanov@gmail.com> wrote:
>
> On Mon, Jul 18, 2022 at 8:49 PM Andrew Jones <ajones@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.

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.

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


^ permalink raw reply	[flat|nested] 26+ messages in thread

* [PATCH v2 00/14] OpenSBI Kconfig Support
  2022-07-19  4:04     ` Anup Patel
@ 2022-07-19  4:17       ` Anup Patel
  2022-07-19  6:21         ` Heinrich Schuchardt
  0 siblings, 1 reply; 26+ messages in thread
From: Anup Patel @ 2022-07-19  4:17 UTC (permalink / raw)
  To: opensbi

On Tue, Jul 19, 2022 at 9:34 AM Anup Patel <apatel@ventanamicro.com> wrote:
>
> +Heinrich
>
> On Tue, Jul 19, 2022 at 3:05 AM David Abdurachmanov
> <david.abdurachmanov@gmail.com> wrote:
> >
> > On Mon, Jul 18, 2022 at 8:49 PM Andrew Jones <ajones@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.
>
> 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.

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 ?

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


^ permalink raw reply	[flat|nested] 26+ messages in thread

* [PATCH v2 00/14] OpenSBI Kconfig Support
  2022-07-19  4:17       ` Anup Patel
@ 2022-07-19  6:21         ` Heinrich Schuchardt
  2022-07-19  7:41           ` Andreas Schwab
  0 siblings, 1 reply; 26+ messages in thread
From: Heinrich Schuchardt @ 2022-07-19  6:21 UTC (permalink / raw)
  To: opensbi

On 7/19/22 06:17, Anup Patel wrote:
> On Tue, Jul 19, 2022 at 9:34 AM Anup Patel <apatel@ventanamicro.com> wrote:
>>
>> +Heinrich
>>
>> On Tue, Jul 19, 2022 at 3:05 AM David Abdurachmanov
>> <david.abdurachmanov@gmail.com> wrote:
>>>
>>> On Mon, Jul 18, 2022 at 8:49 PM Andrew Jones <ajones@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



^ permalink raw reply	[flat|nested] 26+ messages in thread

* [PATCH v2 00/14] OpenSBI Kconfig Support
  2022-07-19  6:21         ` Heinrich Schuchardt
@ 2022-07-19  7:41           ` Andreas Schwab
  2022-07-19  9:05             ` Anup Patel
  0 siblings, 1 reply; 26+ messages in thread
From: Andreas Schwab @ 2022-07-19  7:41 UTC (permalink / raw)
  To: opensbi

On Jul 19 2022, Heinrich Schuchardt wrote:

> 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.

kconfig-frontends is not available on openSUSE Factory either.

-- 
Andreas Schwab, SUSE Labs, schwab at suse.de
GPG Key fingerprint = 0196 BAD8 1CE9 1970 F4BE  1748 E4D4 88E3 0EEA B9D7
"And now for something completely different."


^ permalink raw reply	[flat|nested] 26+ messages in thread

* [PATCH v2 00/14] OpenSBI Kconfig Support
  2022-07-19  3:55   ` Anup Patel
@ 2022-07-19  9:00     ` Andrew Jones
  0 siblings, 0 replies; 26+ messages in thread
From: Andrew Jones @ 2022-07-19  9:00 UTC (permalink / raw)
  To: opensbi

On Tue, Jul 19, 2022 at 09:25:35AM +0530, Anup Patel wrote:
> +Heinrich
> On Tue, Jul 19, 2022 at 12:18 AM Andrew Jones <ajones@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?
> >
> > [1] http://ymorin.is-a-geek.org/projects/kconfig-frontends
> 
> Actually, it seems quite a few distros (particularly debian, ubuntu,
> and yocto) have already included the kconfig-frontends package so
> I wonder why Fedora did not include a package for it ?

As others on this thread pointed out, it's probably due to lack of
interest in maintaining it.

> 
> The QEMU scripts/minikconf.py is pretty compact and would be
> our next best alternative but it doesn't have menuconfig support.

IMHO, we should try to avoid requiring external dependencies. Something
like menuconfig will require something external, so we should also have
a text-only alternative built in.

Thanks,
drew

> 
> Regards,
> Anup
> 
> >
> > 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


^ permalink raw reply	[flat|nested] 26+ messages in thread

* [PATCH v2 00/14] OpenSBI Kconfig Support
  2022-07-19  7:41           ` Andreas Schwab
@ 2022-07-19  9:05             ` Anup Patel
  2022-07-19  9:27               ` Heinrich Schuchardt
  0 siblings, 1 reply; 26+ messages in thread
From: Anup Patel @ 2022-07-19  9:05 UTC (permalink / raw)
  To: opensbi

On Tue, Jul 19, 2022 at 1:11 PM Andreas Schwab <schwab@suse.de> wrote:
>
> On Jul 19 2022, Heinrich Schuchardt wrote:
>
> > 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.
>
> kconfig-frontends is not available on openSUSE Factory either.

Fair enough. We should use something else.

Kconfiglib seems to be a good option except the issues pointed by Heinrich:
1) Python pip is not recommended security wise
2) The LICENSE of Kconfiglib needs to be compatible with BSD distros

The Kconfiglib LICENSE is definitely not GPL and seems compatible
with BSD-2-clause and MIT licenses.
(Refer, https://github.com/ulfalizer/Kconfiglib/blob/master/LICENSE.txt)

To address security concerns, we can do one of the following:
A) Include Kconfiglib source under scripts/ directory.
B) Recommend that OpenSBI users, install Kconfiglib as distro
package instead of python-pip3 installer (e.g. python3-kconfiglib
package available on Ubuntu)

IMO, the option A mentioned above has a maintenance burden and
if possible we should avoid it.

Regards,
Anup




>
> --
> Andreas Schwab, SUSE Labs, schwab at suse.de
> GPG Key fingerprint = 0196 BAD8 1CE9 1970 F4BE  1748 E4D4 88E3 0EEA B9D7
> "And now for something completely different."


^ permalink raw reply	[flat|nested] 26+ messages in thread

* [PATCH v2 00/14] OpenSBI Kconfig Support
  2022-07-19  9:05             ` Anup Patel
@ 2022-07-19  9:27               ` Heinrich Schuchardt
  2022-07-19 12:59                 ` Anup Patel
  0 siblings, 1 reply; 26+ messages in thread
From: Heinrich Schuchardt @ 2022-07-19  9:27 UTC (permalink / raw)
  To: opensbi

On 7/19/22 11:05, Anup Patel wrote:
> On Tue, Jul 19, 2022 at 1:11 PM Andreas Schwab <schwab@suse.de> wrote:
>>
>> On Jul 19 2022, Heinrich Schuchardt wrote:
>>
>>> 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.
>>
>> kconfig-frontends is not available on openSUSE Factory either.
> 
> Fair enough. We should use something else.
> 
> Kconfiglib seems to be a good option except the issues pointed by Heinrich:
> 1) Python pip is not recommended security wise
> 2) The LICENSE of Kconfiglib needs to be compatible with BSD distros

Bugs in kconfiglib are not fixed in a timely manner. See
https://github.com/ulfalizer/Kconfiglib/issues/105

The last commit was in Jan 2020. So another dead project.

Best regards

Heinrich

> 
> The Kconfiglib LICENSE is definitely not GPL and seems compatible
> with BSD-2-clause and MIT licenses.
> (Refer, https://github.com/ulfalizer/Kconfiglib/blob/master/LICENSE.txt)
> 
> To address security concerns, we can do one of the following:
> A) Include Kconfiglib source under scripts/ directory.
> B) Recommend that OpenSBI users, install Kconfiglib as distro
> package instead of python-pip3 installer (e.g. python3-kconfiglib
> package available on Ubuntu)
> 
> IMO, the option A mentioned above has a maintenance burden and
> if possible we should avoid it.
> 
> Regards,
> Anup
> 
> 
> 
> 
>>
>> --
>> Andreas Schwab, SUSE Labs, schwab at suse.de
>> GPG Key fingerprint = 0196 BAD8 1CE9 1970 F4BE  1748 E4D4 88E3 0EEA B9D7
>> "And now for something completely different."



^ permalink raw reply	[flat|nested] 26+ messages in thread

* [PATCH v2 00/14] OpenSBI Kconfig Support
  2022-07-19  9:27               ` Heinrich Schuchardt
@ 2022-07-19 12:59                 ` Anup Patel
  0 siblings, 0 replies; 26+ messages in thread
From: Anup Patel @ 2022-07-19 12:59 UTC (permalink / raw)
  To: opensbi

On Tue, Jul 19, 2022 at 2:57 PM Heinrich Schuchardt
<heinrich.schuchardt@canonical.com> wrote:
>
> On 7/19/22 11:05, Anup Patel wrote:
> > On Tue, Jul 19, 2022 at 1:11 PM Andreas Schwab <schwab@suse.de> wrote:
> >>
> >> On Jul 19 2022, Heinrich Schuchardt wrote:
> >>
> >>> 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.
> >>
> >> kconfig-frontends is not available on openSUSE Factory either.
> >
> > Fair enough. We should use something else.
> >
> > Kconfiglib seems to be a good option except the issues pointed by Heinrich:
> > 1) Python pip is not recommended security wise
> > 2) The LICENSE of Kconfiglib needs to be compatible with BSD distros
>
> Bugs in kconfiglib are not fixed in a timely manner. See
> https://github.com/ulfalizer/Kconfiglib/issues/105
>
> The last commit was in Jan 2020. So another dead project.

Let me send a v3 with Kconfiglib tools included in OpenSBI sources
so that we are not dependent on the Kconfiglib project to actively fix
issues for us.

Regards,
Anup

>
> Best regards
>
> Heinrich
>
> >
> > The Kconfiglib LICENSE is definitely not GPL and seems compatible
> > with BSD-2-clause and MIT licenses.
> > (Refer, https://github.com/ulfalizer/Kconfiglib/blob/master/LICENSE.txt)
> >
> > To address security concerns, we can do one of the following:
> > A) Include Kconfiglib source under scripts/ directory.
> > B) Recommend that OpenSBI users, install Kconfiglib as distro
> > package instead of python-pip3 installer (e.g. python3-kconfiglib
> > package available on Ubuntu)
> >
> > IMO, the option A mentioned above has a maintenance burden and
> > if possible we should avoid it.
> >
> > Regards,
> > Anup
> >
> >
> >
> >
> >>
> >> --
> >> Andreas Schwab, SUSE Labs, schwab at suse.de
> >> GPG Key fingerprint = 0196 BAD8 1CE9 1970 F4BE  1748 E4D4 88E3 0EEA B9D7
> >> "And now for something completely different."
>


^ permalink raw reply	[flat|nested] 26+ messages in thread

end of thread, other threads:[~2022-07-19 12:59 UTC | newest]

Thread overview: 26+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-07-18 14:55 [PATCH v2 00/14] OpenSBI Kconfig Support Anup Patel
2022-07-18 14:55 ` [PATCH v2 01/14] Makefile: Add initial kconfig support for each platform Anup Patel
2022-07-18 14:55 ` [PATCH v2 02/14] Makefile: Compile lib/utils sources separately " Anup Patel
2022-07-18 14:56 ` [PATCH v2 03/14] lib: utils/serial: Use kconfig for enabling/disabling drivers Anup Patel
2022-07-18 14:56 ` [PATCH v2 04/14] lib: utils/reset: " Anup Patel
2022-07-18 14:56 ` [PATCH v2 05/14] lib: utils/sys: " Anup Patel
2022-07-18 14:56 ` [PATCH v2 06/14] lib: utils/timer: " Anup Patel
2022-07-18 14:56 ` [PATCH v2 07/14] lib: utils/ipi: " Anup Patel
2022-07-18 14:56 ` [PATCH v2 08/14] lib: utils/irqchip: " Anup Patel
2022-07-18 14:56 ` [PATCH v2 09/14] lib: utils/i2c: " Anup Patel
2022-07-18 14:56 ` [PATCH v2 10/14] lib: utils/gpio: " Anup Patel
2022-07-18 14:56 ` [PATCH v2 11/14] lib: utils/fdt: Use kconfig for enabling/disabling Anup Patel
2022-07-18 14:56 ` [PATCH v2 12/14] platform: generic: Use kconfig for enabling/disabling overrides Anup Patel
2022-07-18 14:56 ` [PATCH v2 13/14] platform: Remove redundant config.mk from all platforms Anup Patel
2022-07-18 14:56 ` [PATCH v2 14/14] docs: Update documentation for kconfig support Anup Patel
2022-07-18 18:48 ` [PATCH v2 00/14] OpenSBI Kconfig Support Andrew Jones
2022-07-18 21:34   ` David Abdurachmanov
2022-07-19  4:04     ` Anup Patel
2022-07-19  4:17       ` Anup Patel
2022-07-19  6:21         ` Heinrich Schuchardt
2022-07-19  7:41           ` Andreas Schwab
2022-07-19  9:05             ` Anup Patel
2022-07-19  9:27               ` Heinrich Schuchardt
2022-07-19 12:59                 ` Anup Patel
2022-07-19  3:55   ` Anup Patel
2022-07-19  9:00     ` Andrew Jones

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.