On 5 June 2017 at 11:16, Christoffer Dall <cdall@xxxxxxxxxx> wrote: > On Mon, Jun 05, 2017 at 10:58:57AM +0100, Marc Zyngier wrote: >> From the ICC_BPR0_EL1 documentation: >> >> "An attempt to program the binary point field to a value less than the >> minimum value sets the field to the minimum value." >> >> That's the only way you can find out about the minimum value (and the >> kernel also uses this functionality to be in a known state, even if it >> doesn't use preemption yet). >> > > Hmm, the ICV_BPR0_EL1 says: > "An attempt to program the binary point field to a value less than the > minimum value sets the field to the minimum value. On a reset, the > binary point field is set to the minimum supported value." > > But then the ICV_BPR1_EL1 says: > "An attempt to program the binary point field to a value less than the > reset value sets the field to the reset value." > > and > > "Writing 0 to this field will set this field to its reset value, which > is IMPLEMENTATION DEFINED and non-zero." It also later says that the ICV_BPR1_EL1 IMPDEF reset value is always the ICV_BPR0_EL1 reset value plus one. > So it seems like the spec is making some distinction between minimum or > reset value and between the two registers, but I'm not sure if the spec > is just having its fun with us, or if there's something important to be > aware of here. I think the plus-one is the only interesting difference and the rest is just accidental difference of wording. There is a difference between ICV_BPR* and ICC_BPR*, which is that the latter reset to an UNKNOWN value, not necessarily the minimum. thanks -- PMM