mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-22 01:21:53 -06:00
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>
This commit is contained in:
parent
4c84a0a4a6
commit
80f9321308
6 changed files with 37 additions and 1 deletions
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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
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));
|
||||||
}
|
}
|
||||||
|
|
|
@ -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.
|
||||||
|
|
||||||
|
|
|
@ -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
Normal file
BIN
pc-bios/pnv-pnor.bin
Normal file
Binary file not shown.
Loading…
Add table
Add a link
Reference in a new issue