On 30/06/2011 21:26, Scott Wood wrote: > On Thu, 30 Jun 2011 17:51:10 +0200 > Fabien Chouteau <chout...@adacore.com> wrote: > >> On 28/06/2011 19:49, Scott Wood wrote: >>> On Tue, 28 Jun 2011 15:35:00 +0200 >>> Fabien Chouteau <chout...@adacore.com> wrote: >>> >>>> On 27/06/2011 22:28, Scott Wood wrote: >>>>> On Mon, 27 Jun 2011 18:14:06 +0200 >>>>> Fabien Chouteau <chout...@adacore.com> wrote: >>>>> >>>>>> While working on the emulation of the freescale p2010 (e500v2) I >>>>>> realized that >>>>>> there's no implementation of booke's timers features. Currently mpc8544 >>>>>> uses >>>>>> ppc_emb (ppc_emb_timers_init) which is close but not exactly like booke >>>>>> (for >>>>>> example booke uses different SPR). >>>>> >>>>> ppc_emb_timers_init should be renamed something less generic, then. >>>> >>>> Agreed, can you help me to find a better name? >>> >>> What chips are covered by it? 40x? >> >> The function is used by ppc4xx_init (ppc4xx_devs.c) and ppc440_init_xilinx >> (virtex_ml507.c), so I guess ppc_4xx_timers_int will be fine... > > Doesn't 440 have normal booke timers? >
Actually ppc_emb_timers_init should be renamed ppc40x_timers_init, and Xilinx's ppc440 should use the new implementation of booke timers. >>>>> I think some changes in the decrementer code are needed to provide booke >>>>> semantics -- no raising the interrupt based on the high bit of decr, and >>>>> stop counting when reach zero. >>>> >>>> Can you please explain, I don't see where I'm not compliant with booke's >>>> decrementer. >>> >>> It's not an issue with this code specifically, but existing behavior in the >>> decrementer code that isn't appropriate for booke. >>> >>> On classic/server powerpc, when decrementer hits zero, it wraps around, and >>> the upper bit of DECR is used to signal the interrupt. On booke, when >>> decrementer hits zero, it stops, and the upper bit of DECR is not special. >>> >> >> And that's why I implemented the booke_decr_cb function that will emulate >> this >> behavior. > > booke_decr_cb() doesn't control what happens when DECR is read after an > expiration, nor does it control whether an interrupt is raised if software > writes DECR with the high bit set. > OK, I will add a condition to avoid this on booke processors. >>>> It's just a mask to keep only the defined bits. >>> >>> Just seems unnecessary, and potentially harmful if CPU-specific code wants >>> to interpret implementation-defined bits, or if new bits are architected >>> in the future. >>> >> >> On the other hand, undefined bit should always be read as zeros. > > I don't think there's any such requirement. My bad ;) "The handling of reserved bits in System Registers (e.g. Integer Exception Register, Floating-Point Status and Control Register) is implementation-dependent. Software is permitted to write any value to such a bit with no visible effect on processors that implement this version of Book E. A subsequent reading of the bit returns a 0 if the last value written to the bit was 0 and returns an undefined value (0 or 1) otherwise." -- Fabien Chouteau