From: Ruinland ChuanTzu Tsai <ruinl...@andestech.com> During my modification on my previous patch series for custom CSR support, I believe this issue deserves its own discussion (or debate) because it's _not_ as simple as "just put those options in Kconfig".
The obstables I've encountered and the kluges I came up is listed as follow : (1) Due to the design of top-level meson.build, all Kconfig options will land into `*-config-devices.h` since minikconf will be only used after config_target being processed. This will let to the fact that linux-users won't be able to use custom CSR code properly becuase they only includes `*-config-devices.h`. And that is reasonble due to the fact that changes on cpu.c and csr.c is a target-related matter and linux-user mode shouldn't include device related headers in most of cases. So, modify meson.build to parse target/riscv/Kconfig during config_target phase is without doubts necessary. (2) Kconfig option `RISCV_CUSTOM_CSR` is introduced for RISC-V cpu models to toggle it at its will. Yet due to the fact that csr.o and cpu.o are linked altogether for all CPU models, the suffer will be shared without option. The only reasonable way to seperate build the fire lane which seperates vendor flavored cpu and spec-conformed ones, is to build them seperately with options toggled diffrently, just like RV32 and RV64 shares almost the same source base, yet the sources are compiled with differnt flags/definitions. To achieve that, miraculously, we can just put *.mak files into `target` directoy, because that's how `configure` enumerates what targets are supported. (3) The longest days are not over yet, if we take a good look at how the minikconf is invoked during config_devices and in what way *.mak presented its options inside `default-configs/devices`, we can see that *.mak files there is formated in `CONFIG_*` style and the minikconf is reading directly during config_device phase. That's totally different from *.mak files presented in `default-configs/targets`. To make the parsing logic consistent, I introduce a rv_custom directory inside which contains minikconf-parsable mak files. With this patches, ones can build a A25/AX25 linux-user platform by : $ ./configure --target-list=riscv64-andes-linux-user,riscv32-andes-linux-user $ make P.S. The pacthes from : https://lists.gnu.org/archive/html/qemu-devel/2021-08/msg00913.html is needed. A clean-up and modified version will be sent out soon. P.P.S. I know these parts won't be easy to digest, and the further iterations will be needed, so I didn't ask my colleagues to sign-off for now. Cordially yours, Ruinland ChuanTzu Tsai Ruinland ChuanTzu Tsai (2): Adding Kconfig options for custom CSR support and Andes CPU model Adding necessary files for Andes platforms, cores to enable custom CSR support Kconfig | 1 + .../devices/riscv32-andes-softmmu.mak | 17 ++++++++++++ .../devices/riscv64-andes-softmmu.mak | 17 ++++++++++++ .../targets/riscv32-andes-linux-user.mak | 1 + .../targets/riscv32-andes-softmmu.mak | 1 + .../targets/riscv64-andes-linux-user.mak | 1 + .../targets/riscv64-andes-softmmu.mak | 1 + .../targets/rv_custom/no_custom.mak | 0 .../rv_custom/riscv32-andes-linux-user.mak | 1 + .../rv_custom/riscv32-andes-softmmu.mak | 1 + .../targets/rv_custom/riscv32-linux-user.mak | 1 + .../targets/rv_custom/riscv32-softmmu.mak | 1 + .../rv_custom/riscv64-andes-linux-user.mak | 1 + .../rv_custom/riscv64-andes-softmmu.mak | 1 + .../targets/rv_custom/riscv64-linux-user.mak | 1 + .../targets/rv_custom/riscv64-softmmu.mak | 1 + meson.build | 26 +++++++++++++++++++ target/riscv/Kconfig | 6 +++++ 18 files changed, 79 insertions(+) create mode 100644 default-configs/devices/riscv32-andes-softmmu.mak create mode 100644 default-configs/devices/riscv64-andes-softmmu.mak create mode 120000 default-configs/targets/riscv32-andes-linux-user.mak create mode 120000 default-configs/targets/riscv32-andes-softmmu.mak create mode 120000 default-configs/targets/riscv64-andes-linux-user.mak create mode 120000 default-configs/targets/riscv64-andes-softmmu.mak create mode 100644 default-configs/targets/rv_custom/no_custom.mak create mode 100644 default-configs/targets/rv_custom/riscv32-andes-linux-user.mak create mode 100644 default-configs/targets/rv_custom/riscv32-andes-softmmu.mak create mode 120000 default-configs/targets/rv_custom/riscv32-linux-user.mak create mode 120000 default-configs/targets/rv_custom/riscv32-softmmu.mak create mode 100644 default-configs/targets/rv_custom/riscv64-andes-linux-user.mak create mode 100644 default-configs/targets/rv_custom/riscv64-andes-softmmu.mak create mode 120000 default-configs/targets/rv_custom/riscv64-linux-user.mak create mode 120000 default-configs/targets/rv_custom/riscv64-softmmu.mak create mode 100644 target/riscv/Kconfig -- 2.32.0