[OpenBIOS] [PATCH 1/5] ppc: add fw_cfg interface for passing VIA/ADB configuration from QEMU
Mark Cave-Ayland
mark.cave-ayland at ilande.co.uk
Tue Jun 12 18:02:08 CEST 2018
This is in preparation for allowing OpenBIOS to detect the difference
between CUDA/PMU hardware and build the device tree accordingly.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland at ilande.co.uk>
---
arch/ppc/qemu/init.c | 19 +++++++++++++++++++
include/arch/common/fw_cfg.h | 1 +
include/drivers/drivers.h | 10 ++++++++++
3 files changed, 30 insertions(+)
diff --git a/arch/ppc/qemu/init.c b/arch/ppc/qemu/init.c
index 06fd08d..eba93c9 100644
--- a/arch/ppc/qemu/init.c
+++ b/arch/ppc/qemu/init.c
@@ -92,6 +92,25 @@ int is_newworld(void)
(machine_id == ARCH_MAC99_U3);
}
+#define CORE99_VIA_CONFIG_CUDA 0x0
+#define CORE99_VIA_CONFIG_PMU 0x1
+#define CORE99_VIA_CONFIG_PMU_ADB 0x2
+
+int has_pmu(void)
+{
+ uint32_t via_config = fw_cfg_read_i32(FW_CFG_PPC_VIACONFIG);
+
+ return (via_config != CORE99_VIA_CONFIG_CUDA);
+}
+
+int has_adb(void)
+{
+ uint32_t via_config = fw_cfg_read_i32(FW_CFG_PPC_VIACONFIG);
+
+ return (via_config == CORE99_VIA_CONFIG_CUDA ||
+ via_config == CORE99_VIA_CONFIG_PMU_ADB);
+}
+
static const pci_arch_t known_arch[] = {
[ARCH_PREP] = {
.name = "PREP",
diff --git a/include/arch/common/fw_cfg.h b/include/arch/common/fw_cfg.h
index cd2183a..8460ad4 100644
--- a/include/arch/common/fw_cfg.h
+++ b/include/arch/common/fw_cfg.h
@@ -47,6 +47,7 @@
#define FW_CFG_PPC_NVRAM_ADDR (FW_CFG_ARCH_LOCAL + 0x08)
#define FW_CFG_PPC_BUSFREQ (FW_CFG_ARCH_LOCAL + 0x09)
#define FW_CFG_PPC_NVRAM_FLAT (FW_CFG_ARCH_LOCAL + 0x0a)
+#define FW_CFG_PPC_VIACONFIG (FW_CFG_ARCH_LOCAL + 0x0b)
#define FW_CFG_INVALID 0xffff
diff --git a/include/drivers/drivers.h b/include/drivers/drivers.h
index 38efcc8..117429e 100644
--- a/include/drivers/drivers.h
+++ b/include/drivers/drivers.h
@@ -23,6 +23,8 @@ int ob_pci_init(void);
extern int is_apple(void);
extern int is_oldworld(void);
extern int is_newworld(void);
+extern int has_pmu(void);
+extern int has_adb(void);
#else
static inline int is_apple(void)
{
@@ -36,6 +38,14 @@ static inline int is_newworld(void)
{
return 0;
}
+static inline int has_pmu(void)
+{
+ return 0;
+}
+static inline int has_adb(void)
+{
+ return 0;
+}
#endif
#define AAPL(_cmd) do { if (is_apple()) _cmd; } while(0)
#define OLDWORLD(_cmd) do { if (is_oldworld()) _cmd; } while(0)
--
2.11.0
More information about the OpenBIOS
mailing list