Message ID | 20180219081837.15482-7-mylene.josserand@bootlin.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Hi, On Mon, Feb 19, 2018 at 09:18:36AM +0100, Mylène Josserand wrote: > The ARM architected timers use an offset between their physical and > virtual counters. That offset should be configured by the bootloader > in CNTVOFF. > > However, the A83t bootloader fails to do so, and we end up with an > undefined offset (which in our case is random), meaning that each CPU > will have a different time, which isn't working very well. > > Fix that by setting the arm,cpu-registers-not-fw-configured that will > make Linux use the physical timers instead of the virtual ones. One > possible side effect would be that the virtualization features would > be disabled. However, due to the way the GIC has been integrated in > the system, it is already unusable so we're effectively not losing any > feature. > > Signed-off-by: Mylène Josserand <mylene.josserand@bootlin.com> One small nitpick on this one (and the previous one), arm in the subject prefix should be uppercase. Thanks! Maxime
Hi, On Mon, 19 Feb 2018 09:52:05 +0100 Maxime Ripard <maxime.ripard@bootlin.com> wrote: > Hi, > > On Mon, Feb 19, 2018 at 09:18:36AM +0100, Mylène Josserand wrote: > > The ARM architected timers use an offset between their physical and > > virtual counters. That offset should be configured by the bootloader > > in CNTVOFF. > > > > However, the A83t bootloader fails to do so, and we end up with an > > undefined offset (which in our case is random), meaning that each CPU > > will have a different time, which isn't working very well. > > > > Fix that by setting the arm,cpu-registers-not-fw-configured that will > > make Linux use the physical timers instead of the virtual ones. One > > possible side effect would be that the virtualization features would > > be disabled. However, due to the way the GIC has been integrated in > > the system, it is already unusable so we're effectively not losing any > > feature. > > > > Signed-off-by: Mylène Josserand <mylene.josserand@bootlin.com> > > One small nitpick on this one (and the previous one), arm in the > subject prefix should be uppercase. Okay, I will fix that in V4. Mylène
Hi Mylène, On 19/02/18 08:18, Mylène Josserand wrote: > The ARM architected timers use an offset between their physical and > virtual counters. That offset should be configured by the bootloader > in CNTVOFF. > > However, the A83t bootloader fails to do so, and we end up with an > undefined offset (which in our case is random), meaning that each CPU > will have a different time, which isn't working very well. > > Fix that by setting the arm,cpu-registers-not-fw-configured that will > make Linux use the physical timers instead of the virtual ones. One > possible side effect would be that the virtualization features would > be disabled. However, due to the way the GIC has been integrated in > the system, it is already unusable so we're effectively not losing any > feature. > > Signed-off-by: Mylène Josserand <mylene.josserand@bootlin.com> > --- > arch/arm/boot/dts/sun8i-a83t.dtsi | 1 + > 1 file changed, 1 insertion(+) > > diff --git a/arch/arm/boot/dts/sun8i-a83t.dtsi b/arch/arm/boot/dts/sun8i-a83t.dtsi > index e97a6d17b8d0..b9bdb891cf2f 100644 > --- a/arch/arm/boot/dts/sun8i-a83t.dtsi > +++ b/arch/arm/boot/dts/sun8i-a83t.dtsi > @@ -123,6 +123,7 @@ > <GIC_PPI 14 (GIC_CPU_MASK_SIMPLE(8) | IRQ_TYPE_LEVEL_LOW)>, > <GIC_PPI 11 (GIC_CPU_MASK_SIMPLE(8) | IRQ_TYPE_LEVEL_LOW)>, > <GIC_PPI 10 (GIC_CPU_MASK_SIMPLE(8) | IRQ_TYPE_LEVEL_LOW)>; > + arm,cpu-registers-not-fw-configured; > }; > > clocks { > Is the firmware dropping you in the kernel in secure or non-secure mode? If the later, what you have is the only solution. If the former, that I'd suggest you adopt what we already have for the Renesas stuff (see arch/arm/mach-shmobile/headsmp-apmu.S and commit 3fd45a136ff6). It would allow you to use the virtual timer as intended. Thanks, M.
Hi Marc, Thank you for the review! On Tue, 20 Feb 2018 18:07:54 +0000 Marc Zyngier <marc.zyngier@arm.com> wrote: > Hi Mylène, > > On 19/02/18 08:18, Mylène Josserand wrote: > > The ARM architected timers use an offset between their physical and > > virtual counters. That offset should be configured by the bootloader > > in CNTVOFF. > > > > However, the A83t bootloader fails to do so, and we end up with an > > undefined offset (which in our case is random), meaning that each CPU > > will have a different time, which isn't working very well. > > > > Fix that by setting the arm,cpu-registers-not-fw-configured that will > > make Linux use the physical timers instead of the virtual ones. One > > possible side effect would be that the virtualization features would > > be disabled. However, due to the way the GIC has been integrated in > > the system, it is already unusable so we're effectively not losing any > > feature. > > > > Signed-off-by: Mylène Josserand <mylene.josserand@bootlin.com> > > --- > > arch/arm/boot/dts/sun8i-a83t.dtsi | 1 + > > 1 file changed, 1 insertion(+) > > > > diff --git a/arch/arm/boot/dts/sun8i-a83t.dtsi b/arch/arm/boot/dts/sun8i-a83t.dtsi > > index e97a6d17b8d0..b9bdb891cf2f 100644 > > --- a/arch/arm/boot/dts/sun8i-a83t.dtsi > > +++ b/arch/arm/boot/dts/sun8i-a83t.dtsi > > @@ -123,6 +123,7 @@ > > <GIC_PPI 14 (GIC_CPU_MASK_SIMPLE(8) | IRQ_TYPE_LEVEL_LOW)>, > > <GIC_PPI 11 (GIC_CPU_MASK_SIMPLE(8) | IRQ_TYPE_LEVEL_LOW)>, > > <GIC_PPI 10 (GIC_CPU_MASK_SIMPLE(8) | IRQ_TYPE_LEVEL_LOW)>; > > + arm,cpu-registers-not-fw-configured; > > }; > > > > clocks { > > > > Is the firmware dropping you in the kernel in secure or non-secure mode? For sun8i-a83t, the kernel is in secure mode. > > If the later, what you have is the only solution. If the former, that > I'd suggest you adopt what we already have for the Renesas stuff (see > arch/arm/mach-shmobile/headsmp-apmu.S and commit 3fd45a136ff6). > > It would allow you to use the virtual timer as intended. Okay, thanks for the commit pointed, I will try to adopt what it is done for Renesas. Best regards,
diff --git a/arch/arm/boot/dts/sun8i-a83t.dtsi b/arch/arm/boot/dts/sun8i-a83t.dtsi index e97a6d17b8d0..b9bdb891cf2f 100644 --- a/arch/arm/boot/dts/sun8i-a83t.dtsi +++ b/arch/arm/boot/dts/sun8i-a83t.dtsi @@ -123,6 +123,7 @@ <GIC_PPI 14 (GIC_CPU_MASK_SIMPLE(8) | IRQ_TYPE_LEVEL_LOW)>, <GIC_PPI 11 (GIC_CPU_MASK_SIMPLE(8) | IRQ_TYPE_LEVEL_LOW)>, <GIC_PPI 10 (GIC_CPU_MASK_SIMPLE(8) | IRQ_TYPE_LEVEL_LOW)>; + arm,cpu-registers-not-fw-configured; }; clocks {
The ARM architected timers use an offset between their physical and virtual counters. That offset should be configured by the bootloader in CNTVOFF. However, the A83t bootloader fails to do so, and we end up with an undefined offset (which in our case is random), meaning that each CPU will have a different time, which isn't working very well. Fix that by setting the arm,cpu-registers-not-fw-configured that will make Linux use the physical timers instead of the virtual ones. One possible side effect would be that the virtualization features would be disabled. However, due to the way the GIC has been integrated in the system, it is already unusable so we're effectively not losing any feature. Signed-off-by: Mylène Josserand <mylene.josserand@bootlin.com> --- arch/arm/boot/dts/sun8i-a83t.dtsi | 1 + 1 file changed, 1 insertion(+)