Browse Source

ppc/pnv: Add a default formatted PNOR image

The default PNOR image is erased and not recognised by skiboot, so NVRAM
gets disabled. This change adds a tiny pnor file that is a proper FFS
image with a formatted NVRAM partition. This is recognised by skiboot and
will persist across machine reboots.

Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
pull/291/head
Nicholas Piggin 1 year ago
parent
commit
80f9321308
  1. 1
      MAINTAINERS
  2. 7
      docs/system/ppc/powernv.rst
  3. 16
      hw/ppc/pnv.c
  4. 13
      pc-bios/README
  5. 1
      pc-bios/meson.build
  6. BIN
      pc-bios/pnv-pnor.bin

1
MAINTAINERS

@ -1537,6 +1537,7 @@ F: include/hw/ppc/pnv*
F: include/hw/pci-host/pnv* F: include/hw/pci-host/pnv*
F: include/hw/ssi/pnv_spi* F: include/hw/ssi/pnv_spi*
F: pc-bios/skiboot.lid F: pc-bios/skiboot.lid
F: pc-bios/pnv-pnor.bin
F: tests/qtest/pnv* F: tests/qtest/pnv*
F: tests/functional/test_ppc64_powernv.py F: tests/functional/test_ppc64_powernv.py

7
docs/system/ppc/powernv.rst

@ -195,6 +195,13 @@ Use a MTD drive to add a PNOR to the machine, and get a NVRAM :
-drive file=./witherspoon.pnor,format=raw,if=mtd -drive file=./witherspoon.pnor,format=raw,if=mtd
If no mtd drive is provided, the powernv platform will create a default
PNOR device using a tiny formatted PNOR in pc-bios/pnv-pnor.bin opened
read-only (PNOR changes will be persistent across reboots but not across
invocations of QEMU). If no defaults are used, an erased 128MB PNOR is
provided (which skiboot will probably not recognize since it is not
formatted).
Maintainer contact information Maintainer contact information
------------------------------ ------------------------------

16
hw/ppc/pnv.c

@ -64,6 +64,8 @@
#define FW_LOAD_ADDR 0x0 #define FW_LOAD_ADDR 0x0
#define FW_MAX_SIZE (16 * MiB) #define FW_MAX_SIZE (16 * MiB)
#define PNOR_FILE_NAME "pnv-pnor.bin"
#define KERNEL_LOAD_ADDR 0x20000000 #define KERNEL_LOAD_ADDR 0x20000000
#define KERNEL_MAX_SIZE (128 * MiB) #define KERNEL_MAX_SIZE (128 * MiB)
#define INITRD_LOAD_ADDR 0x28000000 #define INITRD_LOAD_ADDR 0x28000000
@ -941,7 +943,7 @@ static void pnv_init(MachineState *machine)
uint64_t chip_ram_start = 0; uint64_t chip_ram_start = 0;
int i; int i;
char *chip_typename; char *chip_typename;
DriveInfo *pnor = drive_get(IF_MTD, 0, 0); DriveInfo *pnor;
DeviceState *dev; DeviceState *dev;
if (kvm_enabled()) { if (kvm_enabled()) {
@ -971,6 +973,18 @@ static void pnv_init(MachineState *machine)
* Create our simple PNOR device * Create our simple PNOR device
*/ */
dev = qdev_new(TYPE_PNV_PNOR); dev = qdev_new(TYPE_PNV_PNOR);
pnor = drive_get(IF_MTD, 0, 0);
if (!pnor && defaults_enabled()) {
fw_filename = qemu_find_file(QEMU_FILE_TYPE_BIOS, PNOR_FILE_NAME);
if (!fw_filename) {
warn_report("Could not find PNOR '%s'", PNOR_FILE_NAME);
} else {
QemuOpts *opts;
opts = drive_add(IF_MTD, -1, fw_filename, "format=raw,readonly=on");
pnor = drive_new(opts, IF_MTD, &error_fatal);
g_free(fw_filename);
}
}
if (pnor) { if (pnor) {
qdev_prop_set_drive(dev, "drive", blk_by_legacy_dinfo(pnor)); qdev_prop_set_drive(dev, "drive", blk_by_legacy_dinfo(pnor));
} }

13
pc-bios/README

@ -43,6 +43,19 @@
run an hypervisor OS or simply a host OS on the "baremetal" run an hypervisor OS or simply a host OS on the "baremetal"
platform, also known as the PowerNV (Non-Virtualized) platform. platform, also known as the PowerNV (Non-Virtualized) platform.
- pnv-pnor.bin is a non-volatile RAM image used by PowerNV, which stores
NVRAM BIOS settings among other things. This image was created with the
following command (the ffspart tool can be found in the skiboot source tree):
ffspart -s 0x1000 -c 34 -i pnv-pnor.in -p pnv-pnor.bin
Where pnv-pnor.in contains the two lines (no leading whitespace):
NVRAM,0x01000,0x00020000,,,/dev/zero
VERSION,0x21000,0x00001000,,,/dev/zero
skiboot is then booted once to format the NVRAM partition.
- QemuMacDrivers (https://github.com/ozbenh/QemuMacDrivers) is a project to - QemuMacDrivers (https://github.com/ozbenh/QemuMacDrivers) is a project to
provide virtualised drivers for PPC MacOS guests. provide virtualised drivers for PPC MacOS guests.

1
pc-bios/meson.build

@ -70,6 +70,7 @@ blobs = [
's390-ccw.img', 's390-ccw.img',
'slof.bin', 'slof.bin',
'skiboot.lid', 'skiboot.lid',
'pnv-pnor.bin',
'palcode-clipper', 'palcode-clipper',
'u-boot.e500', 'u-boot.e500',
'u-boot-sam460-20100605.bin', 'u-boot-sam460-20100605.bin',

BIN
pc-bios/pnv-pnor.bin

Binary file not shown.
Loading…
Cancel
Save