qemu-ppc
[Top][All Lists]
Advanced

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

Re: [Qemu-ppc] [PATCH 6/6] PPC: booke206: Implement tlbilx


From: Alexander Graf
Subject: Re: [Qemu-ppc] [PATCH 6/6] PPC: booke206: Implement tlbilx
Date: Sat, 21 Jan 2012 03:57:42 +0100

On 20.01.2012, at 21:40, Scott Wood wrote:

> On 01/19/2012 09:17 PM, Alexander Graf wrote:
>> +    case 3:
>> +        /* flush by pid and ea */
>> +        for (i = 0; i < BOOKE206_MAX_TLBN; i++) {
>> +            int ways = booke206_tlb_ways(env, i);
>> +
>> +            for (j = 0; j < ways; j++) {
>> +                tlb = booke206_get_tlbm(env, i, address, j);
>> +                if ((ppcmas_tlb_check(env, tlb, NULL, address, pid) != 0) ||
>> +                    (tlb->mas1 & MAS1_IPROT) ||
>> +                    ((tlb->mas1 & MAS1_TS) != ts) ||
>> +                    ((tlb->mas1 & MAS1_IND) != ind) ||
>> +                    ((tlb->mas1 & MAS1_TSIZE_MASK) != size) ||
>> +                    ((tlb->mas8 & MAS8_TGS) != sgs)) {
>> +                        continue;
>> +                }
>> +                tlb->mas1 &= ~MAS1_VALID;
>> +            }
> 
> ISIZE is only supported on MAV=2.0, and then only if TLB write
> conditional or Hardware Entry Select is supported.

Actually ISIZE is even more tricky than that. According to ISA 2.06 the 
instruction is treated as invalid instruction if ISIZE doesn't work for the TLB 
it's invalidating in:

If T = 3 and the implementation requires the page size to be specified by 
MAS6ISIZE (MMUCFG[TWC] = 1 or, for any TLB array, TLBnCFG[HES] = 1) and the 
page size specified by MAS6ISIZE is not supported by the implementation, the 
instruction is treated as if the instruction form is invalid.

But since it's MAV 2.0 only we can leave it out for now. I'll try to make the 
code obvious enough on where to put it back in later.

> Also, I don't know to what extent you want to emulate particular cores
> versus a generic implementation of the architecture, but e500mc does not
> filter on MAS6[SAS].  This is permitted as noted in 6.7.1's Programming
> Note allowing generous TLB invalidations, and is documented this way in
> the e500mc manual so software could be relying on it.

We can leave SAS matching out and just always conform to the spec that way. If 
any guest OS later needs specific core behavior to actually match on SAS, we 
can still add it back in.


Alex




reply via email to

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