On 07.05.2011, at 00:25, Scott Wood wrote:

> On Fri, 6 May 2011 14:00:35 +0200
> Alexander Graf <ag...@suse.de> wrote:
> 
>> +static inline void booke206_flush_tlb_one(ppc_tlb_t *tlb, int num)
>> +{
>> +    int i;
>> +
>> +    for (i = 0; i < num; i++) {
>> +        if ((tlb[i].tlbe.prot & PAGE_VALID) &&
>> +           !(tlb[i].tlbe.attr & MAS1_IPROT)) {
>> +            tlb[i].tlbe.prot = 0;
>> +        }
>> +    }
>> +}
> 
> When this is called on reset, we want to ignore IPROT.

Ugh. Yes. This functions needs a constant parameter to know if it should check 
for IPROT - and not do so on reset :).

> The valid check seems unnecessary.

Yup, but it really helps to reduce debug output when putting in some in that 
line which I did :). It shouldn't really hurt, right?

>> +void helper_booke206_tlbsx(target_ulong address_hi, target_ulong address_lo)
> 
> What is address_hi?
> 
> From gen_tlbsx_booke206() it looks like these two arguments correspond to
> the two operands, so shouldn't they be added together?  I only see
> address_lo used.

Yup. According to the e500 spec:

  Note that rA = 0 is the preferred form for tlbsx and that some Freescale 
implementations, such as the e500, take an illegal instruction exception 
program interrupt if rA!=0.

So I figured that we're architecturally close enough if we just ignore it for 
now :).


Alex


Reply via email to