Message ID | 20220324000710.575331-1-heiko@sntech.de (mailing list archive) |
---|---|
Headers | show |
Series | riscv: support for Svpbmt and D1 memory types | expand |
On Wed, 23 Mar 2022 17:06:56 PDT (-0700), heiko@sntech.de wrote: > Svpbmt is an extension defining "Supervisor-mode: page-based memory types" > for things like non-cacheable pages or I/O memory pages. > > > So this is my 2nd try at implementing Svpbmt (and the diverging D1 memory > types) using the alternatives framework. > > This includes a number of changes to the alternatives mechanism itself. > The biggest one being the move to a more central location, as I expect > in the future, nearly every chip needing some sort of patching, be it > either for erratas or for optional features (svpbmt or others). > > Detection of the svpbmt functionality is done via Atish's isa extension > handling series [0] and thus does not need any dt-parsing of its own > anymore. > > The series also introduces support for the memory types of the D1 > which are implemented differently to svpbmt. But when patching anyway > it's pretty clean to add the D1 variant via ALTERNATIVE_2 to the same > location. > > The only slightly bigger difference is that the "normal" type is not 0 > as with svpbmt, so kernel patches for this PMA type need to be applied > even before the MMU is brought up, so the series introduces a separate > stage for that. > > > In theory this series is 3 parts: > - sbi cache-flush / null-ptr > - alternatives improvements > - svpbmt+d1 > > So expecially patches from the first 2 areas could be applied when > deemed ready, I just thought to keep it together to show-case where > the end-goal is and not requiring jumping between different series. > > > I picked the recipient list from the previous versions, hopefully > I didn't forget anybody. > > changes in v8: > - rebase onto 5.17-final + isa extension series > We're halfway through the merge-window, so this series > should be merge after that > - adapt to fix limiting alternatives to non-xip-kernels > - add .norelax option for alternatives > - fix unused cpu_apply_errata in thead errata > - don't use static globals to store cpu-manufacturer data > as it makes machines hang if done too early I'm still seeing a very similar failure mode. There were a few merge conflicts when I tried to put this on top of my merged first PR, I've put what I'm testing at riscv-d1. Not sure if I'm missing something. > > changes in v7: > - fix typo in patch1 (Atish) > - moved to Atish's isa-extension framework > - and therefore move regular boot-alternatives directly behind fill_hwcaps > - change T-Head errata Kconfig text (Atish) > > changes in v6: > - rebase onto 5.17-rc1 > - handle sbi null-ptr differently > - improve commit messages > - use riscv,mmu as property name > > changes in v5: > - move to use alternatives for runtime-patching > - add D1 variant > > > [0] https://lore.kernel.org/r/20220222204811.2281949-2-atishp@rivosinc.com > > > Heiko Stuebner (13): > riscv: prevent null-pointer dereference with sbi_remote_fence_i > riscv: integrate alternatives better into the main architecture > riscv: allow different stages with alternatives > riscv: implement module alternatives > riscv: implement ALTERNATIVE_2 macro > riscv: extend concatenated alternatives-lines to the same length > riscv: prevent compressed instructions in alternatives > riscv: move boot alternatives to after fill_hwcap > riscv: Fix accessing pfn bits in PTEs for non-32bit variants > riscv: add cpufeature handling via alternatives > riscv: remove FIXMAP_PAGE_IO and fall back to its default value > riscv: don't use global static vars to store alternative data > riscv: add memory-type errata for T-Head > > Wei Fu (1): > riscv: add RISC-V Svpbmt extension support > > arch/riscv/Kconfig.erratas | 31 +++-- > arch/riscv/Kconfig.socs | 1 - > arch/riscv/Makefile | 2 +- > arch/riscv/errata/Makefile | 2 +- > arch/riscv/errata/alternative.c | 75 ------------ > arch/riscv/errata/sifive/errata.c | 17 ++- > arch/riscv/errata/thead/Makefile | 1 + > arch/riscv/errata/thead/errata.c | 82 +++++++++++++ > arch/riscv/include/asm/alternative-macros.h | 121 ++++++++++++++------ > arch/riscv/include/asm/alternative.h | 16 ++- > arch/riscv/include/asm/errata_list.h | 52 +++++++++ > arch/riscv/include/asm/fixmap.h | 2 - > arch/riscv/include/asm/hwcap.h | 1 + > arch/riscv/include/asm/pgtable-32.h | 17 +++ > arch/riscv/include/asm/pgtable-64.h | 79 ++++++++++++- > arch/riscv/include/asm/pgtable-bits.h | 10 -- > arch/riscv/include/asm/pgtable.h | 53 +++++++-- > arch/riscv/include/asm/vendorid_list.h | 1 + > arch/riscv/kernel/Makefile | 1 + > arch/riscv/kernel/alternative.c | 104 +++++++++++++++++ > arch/riscv/kernel/cpu.c | 1 + > arch/riscv/kernel/cpufeature.c | 80 ++++++++++++- > arch/riscv/kernel/module.c | 29 +++++ > arch/riscv/kernel/sbi.c | 10 +- > arch/riscv/kernel/setup.c | 2 + > arch/riscv/kernel/smpboot.c | 4 - > arch/riscv/kernel/traps.c | 2 +- > arch/riscv/mm/init.c | 1 + > 28 files changed, 629 insertions(+), 168 deletions(-) > delete mode 100644 arch/riscv/errata/alternative.c > create mode 100644 arch/riscv/errata/thead/Makefile > create mode 100644 arch/riscv/errata/thead/errata.c > create mode 100644 arch/riscv/kernel/alternative.c