"OPAL V4" is a proposed new approach to running and calling PowerNV OPAL firmware.
OPAL calls use the caller's (kernel) stack, which vastly simplifies re-entrancy concerns around doing things like idle and machine check OPAL drivers. The OS can get at symbol and assert metadata to help with debugging firmware. OPAL may be called (and will run in) virtual mode in its own address space. And the operating system provides some services to the firmware, message logging, for example. This fairly close to the point where we could run OPAL in user-mode with a few services (scv could be used to call back to the OS) for privileged instructions, we may yet do this, but one thing that's stopped me is it would require a slower API. As it is now with LE skiboot and LE Linux, the OPAL call is basically a shared-library function call, which is fast enough that it's feasible to implement a performant CPU idle driver, which is a significant motivation. Anyway this is up and running, coming together pretty well just needs a bit of polishing and more documentation. I'll post the skiboot patches on the skiboot list. Nicholas Piggin (10): kallsyms: architecture specific symbol lookups powerpc/powernv: Wire up OPAL address lookups powerpc/powernv: Use OPAL_REPORT_TRAP to cope with trap interrupts from OPAL powerpc/powernv: avoid polling in opal_get_chars powerpc/powernv: Don't translate kernel addresses to real addresses for OPAL powerpc/powernv: opal use new opal call entry point if it exists powerpc/powernv: Add OPAL_FIND_VM_AREA API powerpc/powernv: Set up an mm context to call OPAL in powerpc/powernv: OPAL V4 OS services powerpc/powernv: OPAL V4 Implement vm_map/unmap service arch/powerpc/Kconfig | 1 + arch/powerpc/boot/opal.c | 5 + arch/powerpc/include/asm/opal-api.h | 29 +- arch/powerpc/include/asm/opal.h | 8 + arch/powerpc/kernel/traps.c | 39 ++- arch/powerpc/perf/imc-pmu.c | 4 +- arch/powerpc/platforms/powernv/npu-dma.c | 2 +- arch/powerpc/platforms/powernv/opal-call.c | 58 ++++ arch/powerpc/platforms/powernv/opal-dump.c | 2 +- arch/powerpc/platforms/powernv/opal-elog.c | 4 +- arch/powerpc/platforms/powernv/opal-flash.c | 6 +- arch/powerpc/platforms/powernv/opal-hmi.c | 2 +- arch/powerpc/platforms/powernv/opal-nvram.c | 4 +- .../powerpc/platforms/powernv/opal-powercap.c | 2 +- arch/powerpc/platforms/powernv/opal-psr.c | 2 +- arch/powerpc/platforms/powernv/opal-xscom.c | 2 +- arch/powerpc/platforms/powernv/opal.c | 289 ++++++++++++++++-- arch/powerpc/platforms/powernv/pci-ioda.c | 2 +- arch/powerpc/sysdev/xive/native.c | 2 +- drivers/char/powernv-op-panel.c | 3 +- drivers/i2c/busses/i2c-opal.c | 12 +- drivers/mtd/devices/powernv_flash.c | 4 +- include/linux/kallsyms.h | 20 ++ kernel/kallsyms.c | 13 +- lib/Kconfig | 3 + 25 files changed, 461 insertions(+), 57 deletions(-) -- 2.23.0