UEFI: VExpress 4xA9 support not bindings compliant

Bug #1166364 reported by Leif Lindholm
6
This bug affects 1 person
Affects Status Importance Assigned to Milestone
Linaro UEFI
Won't Fix
Low
Ryan Harkin

Bug Description

I have found two issues with the VExpress 4xCortex-A9 port:
- The PL310 L2 cache controller is enabled by the init code, so you end up in a really bad state after you disable the MMU .
- ExitBootServices() does not mask interrupts (set CPSR I/F bits).

Revision history for this message
Leif Lindholm (leif-lindholm) wrote :

The attached patch makes the GIC driver disable IRQ/FIQ in the core on ExitBootServices().

Revision history for this message
Leif Lindholm (leif-lindholm) wrote :

I have attached a patch that explicitly disables the L2 cache on boot, but I have observed issues with it that would need to be tracked down if not resolved by the below:.

Additionally, I think UEFI should also assert L2BYPASS in the init code, ensuring the PL310 is completely disabled.
http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0448g/CHDJFEJC.html documents how this can be done in CFGRW1.

Ryan Harkin (ryanharkin)
Changed in linaro-uefi:
status: New → Confirmed
milestone: none → 13.06
importance: Undecided → Medium
Ryan Harkin (ryanharkin)
summary: - VExpress 4xA9 support not bindings compliant
+ UEFI: VExpress 4xA9 support not bindings compliant
Fathi Boudra (fboudra)
Changed in linaro-uefi:
milestone: 13.06 → 13.07
Ryan Harkin (ryanharkin)
Changed in linaro-uefi:
milestone: 13.07 → none
Revision history for this message
Leif Lindholm (leif-lindholm) wrote :

Second part is now resolved upstream.

Assigning to Ryan to verify first part.

Changed in linaro-uefi:
assignee: nobody → Ryan Harkin (ryanharkin)
importance: Medium → Low
Revision history for this message
Ryan Harkin (ryanharkin) wrote :

ACTION: Ryan to check if PL310 L2 cache controller is still initialised in the A9 BSP

Revision history for this message
Ryan Harkin (ryanharkin) wrote :

In ArmPlatformPkg/ArmVExpressPkg/Library/ArmVExpressSecLibCTA9x4/CTA9x4Sec.c, function ArmPlatformSecInitialize does this:

  // The L2x0 controller must be intialize in Secure World
  L2x0CacheInit(PcdGet32(PcdL2x0ControllerBase),
      PL310_TAG_LATENCIES(L2x0_LATENCY_8_CYCLES,L2x0_LATENCY_8_CYCLES,L2x0_LATENCY_8_CYCLES),
      PL310_DATA_LATENCIES(L2x0_LATENCY_8_CYCLES,L2x0_LATENCY_8_CYCLES,L2x0_LATENCY_8_CYCLES),
      0,~0, // Use default setting for the Auxiliary Control Register
      FALSE);

So I guess it's still not "bindings compliant"

Revision history for this message
Ilias Biris (ibiris) wrote :

If the remaining issue is still a problem for anyone (assuming everyone else is using TC2 now) then let us know - marking as won't fix overall.

Changed in linaro-uefi:
status: Confirmed → Won't Fix
To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.