Commit 024f5b59 authored by Helge Deller's avatar Helge Deller

parisc: Add qemu fw_cfg interface

When running on qemu, SeaBIOS-hppa stores the iomem address for the
emulated fw_cfg port in PAGE0_>pad0[2/3]. Let the Linux driver
auto-configure the fw_cfg interface with it, so that the fw_cfg info
shows up in /sys/firmware/qemu_fw_cfg.
Signed-off-by: default avatarHelge Deller <deller@gmx.de>
parent 6b698713
...@@ -376,5 +376,6 @@ config KEXEC_FILE ...@@ -376,5 +376,6 @@ config KEXEC_FILE
endmenu endmenu
source "drivers/firmware/Kconfig"
source "drivers/parisc/Kconfig" source "drivers/parisc/Kconfig"
...@@ -19,6 +19,7 @@ ...@@ -19,6 +19,7 @@
#include <linux/init.h> #include <linux/init.h>
#include <linux/slab.h> #include <linux/slab.h>
#include <linux/mm.h> #include <linux/mm.h>
#include <linux/platform_device.h>
#include <asm/hardware.h> #include <asm/hardware.h>
#include <asm/io.h> #include <asm/io.h>
#include <asm/mmzone.h> #include <asm/mmzone.h>
...@@ -641,4 +642,33 @@ void __init do_device_inventory(void) ...@@ -641,4 +642,33 @@ void __init do_device_inventory(void)
if (pa_serialize_tlb_flushes) if (pa_serialize_tlb_flushes)
pr_info("Merced bus found: Enable PxTLB serialization.\n"); pr_info("Merced bus found: Enable PxTLB serialization.\n");
#endif #endif
#if defined(CONFIG_FW_CFG_SYSFS)
if (running_on_qemu) {
struct resource res[3] = {0,};
unsigned int base;
base = ((unsigned long long) PAGE0->pad0[2] << 32)
| PAGE0->pad0[3]; /* SeaBIOS stored it here */
res[0].name = "fw_cfg";
res[0].start = base;
res[0].end = base + 8 - 1;
res[0].flags = IORESOURCE_MEM;
res[1].name = "ctrl";
res[1].start = 0;
res[1].flags = IORESOURCE_REG;
res[2].name = "data";
res[2].start = 4;
res[2].flags = IORESOURCE_REG;
if (base) {
pr_info("Found qemu fw_cfg interface at %#08x\n", base);
platform_device_register_simple("fw_cfg",
PLATFORM_DEVID_NONE, res, 3);
}
}
#endif
} }
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment