qemu-ppc
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [RFC PATCH 0/2] QEMU/openbios: PPC Software TLB support in the G4 fa


From: Fabiano Rosas
Subject: Re: [RFC PATCH 0/2] QEMU/openbios: PPC Software TLB support in the G4 family
Date: Fri, 07 Jan 2022 10:19:07 -0300

Cédric Le Goater <clg@kaod.org> writes:

> On 11/29/21 16:28, Fabiano Rosas wrote:
>> Cédric Le Goater <clg@kaod.org> writes:
>> 
>>>>> Right. If we're doing this to say "I can boot a kernel with a 7450 cpu in 
>>>>> QEMU" but
>>>>> the implementation is different from real hardware, then I'm not sure 
>>>>> what the real
>>>>> value is. That effectively leaves option b) if someone is willing to do 
>>>>> the work, or
>>>>> as you say to simply remove the code from QEMU.
>>>>
>>>> Yeah, that is a good point. Although the software TLB is well contained,
>>>> so we could certainly document that our 7450s don't have that feature
>>>> and call it a day. Does QEMU have any policy on how much of a machine is
>>>> required to be implemented?
>>>>
>>>> I am more inclined to apply c) for now as I said, just to have some code
>>>> running on the CPU and maybe document in a gitlab issue that we're
>>>> lacking the runtime switch and eventually implement that. It's not like
>>>> this is high traffic code anyway. It has been broken for 10+ years.
>>>>
>>>> That said, if Cédric and Daniel see more value in moving the 7450s to
>>>> the POWERPC_MMU_32B I won't oppose.
>>>
>>> I am in favor of dropping unused code in QEMU and keeping the CPUs for
>>> which we have support in Linux using the POWERPC_MMU_32B in QEMU and the
>>> openbios patch. If we need SoftTLB support for the 74x CPUs in QEMU, we
>>> can always dig in the history.
>> 
>> Ack. I'll send a v2.
>> 
>>>
>>> We can give FreeBSB a try also since they had support for the G4 :
>>>
>>>     https://people.freebsd.org/~arved/stuff/minimac
>>>
>>>
>>> With the openbios patch, Linux boots fine under 7450, 7455, 7447 CPUs.
>>>
>>> Under 7448, it drops in xmon with a :
>>>    
>>> kernel tried to execute exec-protected page (c07fdd98) - exploit attempt? 
>>> (uid: 0)
>>> BUG: Unable to handle kernel instruction fetch
>>> Faulting instruction address: 0xc07fdd98
>>> Vector: 400 (Instruction Access) at [f1019d30]
>>>       pc: c07fdd98: __do_softirq+0x0/0x2f0
>>>       lr: c00516a4: irq_exit+0xbc/0xf8
>>>       sp: f1019df0
>>>      msr: 10001032
>>>     current = 0xc0d00000
>>>       pid   = 1, comm = swapper
>> 
>> I see two possible issues:
>> 
>> 1) The 7448 is configured as a 7400 in QEMU (cpu-models.c), so it will
>> behave differently from the 7450s. The user manual seems to indicate it
>> is closer to a 7445 than a 7400. We need to double check what is correct.
>> 
>> 2) OpenBIOS already has support for the 7448 PVR without my patch, but
>> given that no other cpu of the 7450 family is supported, I'd say this is
>> accidental. The mask that OpenBIOS uses for e600/MPC86xx is:
>> 
>>          .iu_version = 0x80040000,
>>          .name = "PowerPC,MPC86xx",
>> 
>> And the verification:
>> 
>>      iu_version = mfpvr() & 0xffff0000;
>> 
>>      for (i = 0; i < sizeof(ppc_defs) / sizeof(struct cpudef); i++) {
>>          if (iu_version == ppc_defs[i].iu_version)
>>              return &ppc_defs[i];
>>      }
>>      printk("Unknown cpu (pvr %x), freezing!\n", iu_version);
>> 
>> But QEMU says the PVRs are as follows:
>> 
>>      CPU_POWERPC_e600               = 0x80040010,
>> #define CPU_POWERPC_MPC8610          CPU_POWERPC_e600
>> #define CPU_POWERPC_MPC8641          CPU_POWERPC_e600
>> #define CPU_POWERPC_MPC8641D         CPU_POWERPC_e600
>> 
>>      CPU_POWERPC_7448_v10           = 0x80040100,
>>      CPU_POWERPC_7448_v11           = 0x80040101,
>>      CPU_POWERPC_7448_v20           = 0x80040200,
>>      CPU_POWERPC_7448_v21           = 0x80040201,
>> 
>> So by applying the mask, OpenBIOS is matching both 0x80040100 and
>>   0x80040010 when it looks like it only wants to match the latter.
>
> Hello,
>
> a quick status on how QEMU has evolved regarding this topic.
>
> We have merged :
>
>    a09410ed1fb8 ("target/ppc: Remove the software TLB model of 7450 CPUs")
>
> and switched MMU model to POWERPC_MMU_32B in :
>
>    1da666cd8e79 ("target/ppc: Disable software TLB for the 7450 family")
>
> With the two patches of this series, we can boot the latest linux on all
> 7450 CPUs. With an extra small fix on the CPU table, 7448 boots.

A small correction, we only need OpenBIOS to include patch 2: "ppc: Add
PVRs for the MPC7450 family".




reply via email to

[Prev in Thread] Current Thread [Next in Thread]