Below is a quick patch to introduce the bus-frequency field for each CPU.
This exists on every Apple OpenFirmware i've seen and is expected on Haiku OS.
The change to config/scripts/switch-arch isn't required but lets you compile openbios using Haiku's PowerPC cross-compiler.
Also included is a extra tracing line for troubleshooting MMU issues.
Index: include/arch/common/fw_cfg.h =================================================================== --- include/arch/common/fw_cfg.h (revision 1046) +++ include/arch/common/fw_cfg.h (working copy) @@ -41,9 +41,10 @@ #define FW_CFG_PPC_DEPTH (FW_CFG_ARCH_LOCAL + 0x02) #define FW_CFG_PPC_TBFREQ (FW_CFG_ARCH_LOCAL + 0x03) #define FW_CFG_PPC_CPUFREQ (FW_CFG_ARCH_LOCAL + 0x04) -#define FW_CFG_PPC_IS_KVM (FW_CFG_ARCH_LOCAL + 0x05) -#define FW_CFG_PPC_KVM_HC (FW_CFG_ARCH_LOCAL + 0x06) -#define FW_CFG_PPC_KVM_PID (FW_CFG_ARCH_LOCAL + 0x07) +#define FW_CFG_PPC_IS_KVM (FW_CFG_ARCH_LOCAL + 0x05) +#define FW_CFG_PPC_KVM_HC (FW_CFG_ARCH_LOCAL + 0x06) +#define FW_CFG_PPC_KVM_PID (FW_CFG_ARCH_LOCAL + 0x07) +#define FW_CFG_PPC_BUSFREQ (FW_CFG_ARCH_LOCAL + 0x08)
#define FW_CFG_INVALID 0xffff
Index: config/scripts/switch-arch =================================================================== --- config/scripts/switch-arch (revision 1046) +++ config/scripts/switch-arch (working copy) @@ -97,7 +97,7 @@
select_prefix() { - for TARGET in ${1}-linux-gnu- ${1}-linux- ${1}-elf- ${1}-eabi- + for TARGET in ${1}-linux-gnu- ${1}-linux- ${1}-elf- ${1}-eabi- ${1}-apple-haiku- do if type ${TARGET}gcc > /dev/null 2>&1 then Index: arch/ppc/qemu/init.c =================================================================== --- arch/ppc/qemu/init.c (revision 1046) +++ arch/ppc/qemu/init.c (working copy) @@ -260,6 +260,11 @@ push_str("clock-frequency"); fword("property");
+ PUSH(fw_cfg_read_i32(FW_CFG_PPC_BUSFREQ)); + fword("encode-int"); + push_str("bus-frequency"); + fword("property"); + push_str("running"); fword("encode-string"); push_str("state"); Index: drivers/iommu.c =================================================================== --- drivers/iommu.c (revision 1046) +++ drivers/iommu.c (working copy) @@ -129,6 +129,7 @@ /* Tremendous alignment causes great waste... */ ptsize = (vasize / PAGE_SIZE) * sizeof(int); ret = ofmem_posix_memalign((void *)&ptab, ptsize, ptsize); + DPRINTF("Allocated IOMMU @ %p\n", (void *)&ptab); if (ret != 0) { DPRINTF("Cannot allocate IOMMU table [0x%x]\n", ptsize); for (;;) { }