Message ID | 20200224121733.2202-1-ardb@kernel.org (mailing list archive) |
---|---|
Headers | show |
Series | ARM: decompressor: use by-VA cache maintenance for v7 cores | expand |
On Mon, Feb 24, 2020 at 1:17 PM Ard Biesheuvel <ardb@kernel.org> wrote: > While making changes to the EFI stub startup code, I noticed that we are > still doing set/way maintenance on the caches when booting on v7 cores. > This works today on VMs by virtue of the fact that KVM traps set/way ops > and cleans the whole address space by VA on behalf of the guest, and on > most v7 hardware, the set/way ops are in fact sufficient when only one > core is running, as there usually is no system cache. But on systems > like SynQuacer, for which 32-bit firmware is available, the current cache > maintenance only pushes the data out to the L3 system cache, where it > is not visible to the CPU once it turns the MMU and caches off. > > So instead, switch to the by-VA cache maintenance that the architecture > requires for v7 and later (and ARM1176, as a side effect). I took this v3 patch set for a ride on some ARMv7 and ARMv6 (hardware) boards using zImage:s so the compressed path should be exercised: - Ux500 (ARMv7 Cortex A9 x 2) works like a charm - RealView PB11MPCore (ARM1176 x 4 MPCore) works like a charm Tested-by: Linus Walleij <linus.walleij@linaro.org> I can do more thorough tests with more boards if needed. Yours, Linus Walleij
On Tue, 25 Feb 2020 at 16:48, Linus Walleij <linus.walleij@linaro.org> wrote: > > On Mon, Feb 24, 2020 at 1:17 PM Ard Biesheuvel <ardb@kernel.org> wrote: > > > While making changes to the EFI stub startup code, I noticed that we are > > still doing set/way maintenance on the caches when booting on v7 cores. > > This works today on VMs by virtue of the fact that KVM traps set/way ops > > and cleans the whole address space by VA on behalf of the guest, and on > > most v7 hardware, the set/way ops are in fact sufficient when only one > > core is running, as there usually is no system cache. But on systems > > like SynQuacer, for which 32-bit firmware is available, the current cache > > maintenance only pushes the data out to the L3 system cache, where it > > is not visible to the CPU once it turns the MMU and caches off. > > > > So instead, switch to the by-VA cache maintenance that the architecture > > requires for v7 and later (and ARM1176, as a side effect). > > I took this v3 patch set for a ride on some ARMv7 and ARMv6 > (hardware) boards using zImage:s so the compressed path > should be exercised: > > - Ux500 (ARMv7 Cortex A9 x 2) works like a charm > - RealView PB11MPCore (ARM1176 x 4 MPCore) works like a charm > > Tested-by: Linus Walleij <linus.walleij@linaro.org> > > I can do more thorough tests with more boards if needed. > Thanks Linus. Do you happen to have any boards that boot with appended DTB?
On Tue, 25 Feb 2020 at 18:18, Ard Biesheuvel <ardb@kernel.org> wrote: > > On Tue, 25 Feb 2020 at 16:48, Linus Walleij <linus.walleij@linaro.org> wrote: > > > > On Mon, Feb 24, 2020 at 1:17 PM Ard Biesheuvel <ardb@kernel.org> wrote: > > > > > While making changes to the EFI stub startup code, I noticed that we are > > > still doing set/way maintenance on the caches when booting on v7 cores. > > > This works today on VMs by virtue of the fact that KVM traps set/way ops > > > and cleans the whole address space by VA on behalf of the guest, and on > > > most v7 hardware, the set/way ops are in fact sufficient when only one > > > core is running, as there usually is no system cache. But on systems > > > like SynQuacer, for which 32-bit firmware is available, the current cache > > > maintenance only pushes the data out to the L3 system cache, where it > > > is not visible to the CPU once it turns the MMU and caches off. > > > > > > So instead, switch to the by-VA cache maintenance that the architecture > > > requires for v7 and later (and ARM1176, as a side effect). > > > > I took this v3 patch set for a ride on some ARMv7 and ARMv6 > > (hardware) boards using zImage:s so the compressed path > > should be exercised: > > > > - Ux500 (ARMv7 Cortex A9 x 2) works like a charm > > - RealView PB11MPCore (ARM1176 x 4 MPCore) works like a charm > > > > Tested-by: Linus Walleij <linus.walleij@linaro.org> > > > > I can do more thorough tests with more boards if needed. > > > > Thanks Linus. Do you happen to have any boards that boot with appended DTB? Actually, I can easily test that myself as well in QEMU.
On Tue, Feb 25, 2020 at 6:18 PM Ard Biesheuvel <ardb@kernel.org> wrote: > On Tue, 25 Feb 2020 at 16:48, Linus Walleij <linus.walleij@linaro.org> wrote: > > I took this v3 patch set for a ride on some ARMv7 and ARMv6 > > (hardware) boards using zImage:s so the compressed path > > should be exercised: > > > > - Ux500 (ARMv7 Cortex A9 x 2) works like a charm > > - RealView PB11MPCore (ARM1176 x 4 MPCore) works like a charm > > > > Tested-by: Linus Walleij <linus.walleij@linaro.org> > > > > I can do more thorough tests with more boards if needed. > > Thanks Linus. Do you happen to have any boards that boot with appended DTB? Oh, both of these use appended DTB so it's definitely working. Yours, Linus Walleij