On 01/23/2012 06:28 PM, Scott Wood wrote:
On 01/20/2012 08:43 PM, Alexander Graf wrote:
Am 20.01.2012 um 21:01 schrieb Scott Wood<scottw...@freescale.com>:
I'm not sure what happens when you write
an entry to TLB1 with an invalid TSIZE.
What it says, the ISA means it's implementation dependent. What e500mc actually
implements is an different question. Which still needs to be answered.
AFAIK it's not documented what e500mc does for invalid sizes in TLB1, so
I think anything that complies with the architecture's statement of any
supported size is OK.
However for now I think wde 're ok by not modeling every odd corner case.
Sure. I was just curious about the architectural statement.
+ /* XXX only applies for MAV 1.0 */
+ size_tlb = (tlb->mas1& MAS1_TSIZE_MASK)>> (MAS1_TSIZE_SHIFT + 1);
+ size_min = (tlbncfg& TLBnCFG_MINSIZE)>> TLBnCFG_MINSIZE_SHIFT;
+ size_max = (tlbncfg& TLBnCFG_MAXSIZE)>> TLBnCFG_MAXSIZE_SHIFT;
+ if ((size_tlb> size_max) || (size_tlb< size_min)) {
+ /* set to min size */
+ tlb->mas1&= ~MAS1_TSIZE_MASK;
+ tlb->mas1 |= size_min<< (MAS1_TSIZE_SHIFT + 1);
+ }
You could just implement a bitmap now, which will work for MAV 2.0 as well.
Especially since we're using the MAV 2.0 definition of tsize already, so
min/max isn't an accurate way to describe what we support.
Not sure I follow. In MAV 1.0 the size constraints are defined in TLBnCFG,
while for MAV 2.0 they are defned in their own bitmap registers (TLBnPS)
Would you like to have a function called that returns a bitmap of
supported sizes for the TLB depending on its MAV value based on
either TLBnCFG or TLBnPS? We could then check if that size value bit
is set.
Yes, use a bitmap internally regardless of how the programming model
says we convey the information to the target code.
Already done :).
Alex