U-Boot Archive on lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/1] armv8: reduce core errata dispatch work
@ 2026-05-24 12:38 Josh Law
  2026-05-24 12:38 ` [PATCH 1/1] " Josh Law
  2026-05-26  6:01 ` [PATCH 0/1] " Krzysztof Kozlowski
  0 siblings, 2 replies; 6+ messages in thread
From: Josh Law @ 2026-05-24 12:38 UTC (permalink / raw)
  To: u-boot; +Cc: Tom Rini, Ilias Apalodimas, Josh Law

Hey folks,

apply_core_errata() runs during early ARMv8 CPU entry, before
lowlevel_init(). Today it still checks the Cortex-A53 and Cortex-A57
paths even when the build has no matching core erratum enabled.

This patch leaves that dispatch code out unless one of the supported
errata is enabled. For the A57 errata case, it reads MIDR_EL1 once and
reuses the extracted CPU part number.

The erratum register writes stay behind the same CPU checks as before.
For qemu_arm64_defconfig, where none of these errata are enabled,
apply_core_errata() goes from 15 dispatch instructions to a single ret.
For ls2080aqds_qspi_defconfig, which keeps the A57 path, the dispatch
side goes from 33 instructions to 26. A KVM microbench of the same
dispatch sequences showed 1.30x for the no errata case and 1.09x for
the A57 miss case.

Josh Law (1):
  armv8: reduce core errata dispatch work

 arch/arm/cpu/armv8/start.S | 35 ++++++++++++++++++++++++-----------
 1 file changed, 24 insertions(+), 11 deletions(-)

-- 
2.47.3

^ permalink raw reply	[flat|nested] 6+ messages in thread

* [PATCH 1/1] armv8: reduce core errata dispatch work
  2026-05-24 12:38 [PATCH 0/1] armv8: reduce core errata dispatch work Josh Law
@ 2026-05-24 12:38 ` Josh Law
  2026-05-26  6:01 ` [PATCH 0/1] " Krzysztof Kozlowski
  1 sibling, 0 replies; 6+ messages in thread
From: Josh Law @ 2026-05-24 12:38 UTC (permalink / raw)
  To: u-boot; +Cc: Tom Rini, Ilias Apalodimas, Josh Law

apply_core_errata() currently runs both Cortex A53 and A57 part
checks even when no matching erratum is built in. For boards with no
ARM core errata, that means two MIDR_EL1 reads and two comparisons
on every CPU entry before lowlevel_init().

Only build the dispatch code when one of the supported errata is
enabled. When A57 errata are enabled, read MIDR_EL1 once and reuse
the extracted part number.

Measured on qemu_arm64_defconfig and ls2080aqds_qspi_defconfig:

Case                         before   after
qemu start.o text bytes      392      336
qemu linked text bytes       1437007  1436963
qemu dispatch instructions   15       1
ls2080 start.o text bytes    600      576
ls2080 dispatch instructions 33       26

A KVM virt microbench using the same dispatch instruction sequences
and one million calls gave:

Case            before ticks/call  after ticks/call  speedup
no errata path  27.09              20.78             1.30x
A57 miss path   28.93              26.50             1.09x

Signed-off-by: Josh Law <josh2@disroot.org>
---
 arch/arm/cpu/armv8/start.S | 35 ++++++++++++++++++++++++-----------
 1 file changed, 24 insertions(+), 11 deletions(-)

diff --git a/arch/arm/cpu/armv8/start.S b/arch/arm/cpu/armv8/start.S
index 40c342e97e9..5c847ed0f85 100644
--- a/arch/arm/cpu/armv8/start.S
+++ b/arch/arm/cpu/armv8/start.S
@@ -209,30 +209,41 @@ master_cpu:
 
 /*-----------------------------------------------------------------------*/
 
+#if defined(CONFIG_ARM_ERRATA_826974) || defined(CONFIG_ARM_ERRATA_828024) || \
+	defined(CONFIG_ARM_ERRATA_829520) || defined(CONFIG_ARM_ERRATA_833069) || \
+	defined(CONFIG_ARM_ERRATA_833471)
+#define ARMV8_CORTEX_A57_ERRATA
+#endif
+
 WEAK(apply_core_errata)
 
+#if defined(CONFIG_ARM_ERRATA_855873) || defined(ARMV8_CORTEX_A57_ERRATA)
 	mov	x29, lr			/* Save LR */
 	/* For now, we support Cortex-A53, Cortex-A57 specific errata */
+	mrs	x0, midr_el1
+	ubfx	x1, x0, #4, #12		/* CPU part number */
 
-	/* Check if we are running on a Cortex-A53 core */
-	branch_if_a53_core x0, apply_a53_core_errata
+#ifdef CONFIG_ARM_ERRATA_855873
+	cmp	x1, #0xD03		/* Cortex-A53 MPCore processor */
+	b.eq	apply_a53_core_errata
+#endif
 
-	/* Check if we are running on a Cortex-A57 core */
-	branch_if_a57_core x0, apply_a57_core_errata
+#ifdef ARMV8_CORTEX_A57_ERRATA
+	cmp	x1, #0xD07		/* Cortex-A57 MPCore processor */
+	b.eq	apply_a57_core_errata
+#endif
 0:
 	mov	lr, x29			/* Restore LR */
+#endif
 	ret
 
-apply_a53_core_errata:
-
 #ifdef CONFIG_ARM_ERRATA_855873
-	mrs	x0, midr_el1
+apply_a53_core_errata:
 	tst	x0, #(0xf << 20)
 	b.ne	0b
 
-	mrs	x0, midr_el1
-	and	x0, x0, #0xf
-	cmp	x0, #3
+	and	x1, x0, #0xf
+	cmp	x1, #3
 	b.lt	0b
 
 	mrs	x0, S3_1_c15_c2_0	/* cpuactlr_el1 */
@@ -240,9 +251,10 @@ apply_a53_core_errata:
 	orr	x0, x0, #1 << 44
 	msr	S3_1_c15_c2_0, x0	/* cpuactlr_el1 */
 	isb
-#endif
 	b 0b
+#endif
 
+#ifdef ARMV8_CORTEX_A57_ERRATA
 apply_a57_core_errata:
 
 #ifdef CONFIG_ARM_ERRATA_828024
@@ -294,6 +306,7 @@ apply_a57_core_errata:
 	isb
 #endif
 	b 0b
+#endif
 ENDPROC(apply_core_errata)
 
 /*-----------------------------------------------------------------------*/
-- 
2.47.3


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [PATCH 0/1] armv8: reduce core errata dispatch work
  2026-05-24 12:38 [PATCH 0/1] armv8: reduce core errata dispatch work Josh Law
  2026-05-24 12:38 ` [PATCH 1/1] " Josh Law
@ 2026-05-26  6:01 ` Krzysztof Kozlowski
  2026-05-26 11:11   ` Ilias Apalodimas
  2026-05-26 14:03   ` Tom Rini
  1 sibling, 2 replies; 6+ messages in thread
From: Krzysztof Kozlowski @ 2026-05-26  6:01 UTC (permalink / raw)
  To: u-boot; +Cc: Tom Rini, Ilias Apalodimas

On 24/05/2026 14:38, Josh Law wrote:
> Hey folks,
> 
> apply_core_errata() runs during early ARMv8 CPU entry, before
> lowlevel_init(). Today it still checks the Cortex-A53 and Cortex-A57
> paths even when the build has no matching core erratum enabled.
> 
> This patch leaves that dispatch code out unless one of the supported
> errata is enabled. For the A57 errata case, it reads MIDR_EL1 once and
> reuses the extracted CPU part number.
> 
> The erratum register writes stay behind the same CPU checks as before.
> For qemu_arm64_defconfig, where none of these errata are enabled,
> apply_core_errata() goes from 15 dispatch instructions to a single ret.
> For ls2080aqds_qspi_defconfig, which keeps the A57 path, the dispatch
> side goes from 33 instructions to 26. A KVM microbench of the same
> dispatch sequences showed 1.30x for the no errata case and 1.09x for
> the A57 miss case.
> 
> Josh Law (1):
>   armv8: reduce core errata dispatch work

That's another identity from Josh Law, since all previous got NAKed, and
100% AI generated code without review and without tests (I don't believe
what was claimed above).

I recommend ignoring and here is some background:

https://lore.kernel.org/all/cbd0aafa-bd45-4f4d-a2dd-440473657dba@lucifer.local/

Best regards,
Krzysztof

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH 0/1] armv8: reduce core errata dispatch work
  2026-05-26  6:01 ` [PATCH 0/1] " Krzysztof Kozlowski
@ 2026-05-26 11:11   ` Ilias Apalodimas
  2026-05-26 11:48     ` Josh Law
  2026-05-26 14:03   ` Tom Rini
  1 sibling, 1 reply; 6+ messages in thread
From: Ilias Apalodimas @ 2026-05-26 11:11 UTC (permalink / raw)
  To: Krzysztof Kozlowski; +Cc: U-Boot Mailing List, Tom Rini

Thanks for the heads up Krzysztof

On Tue, May 26, 2026, 08:01 Krzysztof Kozlowski <krzk@kernel.org> wrote:

> On 24/05/2026 14:38, Josh Law wrote:
> > Hey folks,
> >
> > apply_core_errata() runs during early ARMv8 CPU entry, before
> > lowlevel_init(). Today it still checks the Cortex-A53 and Cortex-A57
> > paths even when the build has no matching core erratum enabled.
> >
> > This patch leaves that dispatch code out unless one of the supported
> > errata is enabled. For the A57 errata case, it reads MIDR_EL1 once and
> > reuses the extracted CPU part number.
> >
> > The erratum register writes stay behind the same CPU checks as before.
> > For qemu_arm64_defconfig, where none of these errata are enabled,
> > apply_core_errata() goes from 15 dispatch instructions to a single ret.
> > For ls2080aqds_qspi_defconfig, which keeps the A57 path, the dispatch
> > side goes from 33 instructions to 26. A KVM microbench of the same
> > dispatch sequences showed 1.30x for the no errata case and 1.09x for
> > the A57 miss case.
> >
> > Josh Law (1):
> >   armv8: reduce core errata dispatch work
>
> That's another identity from Josh Law, since all previous got NAKed, and
> 100% AI generated code without review and without tests (I don't believe
> what was claimed above).
>
> I recommend ignoring and here is some background:
>
>
> https://lore.kernel.org/all/cbd0aafa-bd45-4f4d-a2dd-440473657dba@lucifer.local/
>
> Best regards,
> Krzysztof
>

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH 0/1] armv8: reduce core errata dispatch work
  2026-05-26 11:11   ` Ilias Apalodimas
@ 2026-05-26 11:48     ` Josh Law
  0 siblings, 0 replies; 6+ messages in thread
From: Josh Law @ 2026-05-26 11:48 UTC (permalink / raw)
  To: u-boot, Ilias Apalodimas, Krzysztof Kozlowski
  Cc: U-Boot Mailing List, Tom Rini

On May 26, 2026 12:11:06 PM GMT+01:00, Ilias Apalodimas
<ilias.apalodimas@linaro.org> wrote:
>Thanks for the heads up Krzysztof


Hey Ilias, Could you please review the patch "code wise"?

I did put the testing I had in patch 1s commit description 

I know it may not be sufficient enough, but unfortunately my machine 
isn't the strongest, so sometimes KVM crashes booting u-boot

Proof:

josh@armbox:~# uname -m
aarch64

josh@armbox:~# ls /dev/kvm
/dev/kvm

josh@armbox:~/contrib/u-boot#  qemu-system-aarch64 \
>     -machine virt,accel=kvm \
>     -cpu host \
>     -m 1024 \
>     -display none \
>     -serial stdio \
>     -monitor none \
>     -no-reboot \
>     -bios build-qemu-arm64/u-boot.bin
qemu-system-aarch64: Failed to put registers after init: Invalid argument


Note: ^ I did get tcg sort of working + a KVM small test, (for the results) but u-boot doesn't like me :(


If you would like to still pursue this, I'll try to build it. And give
correct numbers

It's fine if you don't.

If there is a bug in the diff or if the test coverage is not
enough for this path I will take care of it. If you are concerned about
authorship, provenance, or how I tested it, please ask me directly what you
need for this submission. 

I get that the U-Boot team wants a tad more oversight here. Id rather
be judged on the patch itself, on the basis of the diff
and the evidence in this thread, not on history from a different project.
 
[Snip extras! :)]

Thanks! :)

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH 0/1] armv8: reduce core errata dispatch work
  2026-05-26  6:01 ` [PATCH 0/1] " Krzysztof Kozlowski
  2026-05-26 11:11   ` Ilias Apalodimas
@ 2026-05-26 14:03   ` Tom Rini
  1 sibling, 0 replies; 6+ messages in thread
From: Tom Rini @ 2026-05-26 14:03 UTC (permalink / raw)
  To: Krzysztof Kozlowski; +Cc: u-boot, Ilias Apalodimas

[-- Attachment #1: Type: text/plain, Size: 1524 bytes --]

On Tue, May 26, 2026 at 08:01:16AM +0200, Krzysztof Kozlowski wrote:
> On 24/05/2026 14:38, Josh Law wrote:
> > Hey folks,
> > 
> > apply_core_errata() runs during early ARMv8 CPU entry, before
> > lowlevel_init(). Today it still checks the Cortex-A53 and Cortex-A57
> > paths even when the build has no matching core erratum enabled.
> > 
> > This patch leaves that dispatch code out unless one of the supported
> > errata is enabled. For the A57 errata case, it reads MIDR_EL1 once and
> > reuses the extracted CPU part number.
> > 
> > The erratum register writes stay behind the same CPU checks as before.
> > For qemu_arm64_defconfig, where none of these errata are enabled,
> > apply_core_errata() goes from 15 dispatch instructions to a single ret.
> > For ls2080aqds_qspi_defconfig, which keeps the A57 path, the dispatch
> > side goes from 33 instructions to 26. A KVM microbench of the same
> > dispatch sequences showed 1.30x for the no errata case and 1.09x for
> > the A57 miss case.
> > 
> > Josh Law (1):
> >   armv8: reduce core errata dispatch work
> 
> That's another identity from Josh Law, since all previous got NAKed, and
> 100% AI generated code without review and without tests (I don't believe
> what was claimed above).
> 
> I recommend ignoring and here is some background:
> 
> https://lore.kernel.org/all/cbd0aafa-bd45-4f4d-a2dd-440473657dba@lucifer.local/

Well crap. Thanks for the link! I've moved all of the submissions to
Deferred in patchwork.

-- 
Tom

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 228 bytes --]

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2026-05-26 14:03 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-05-24 12:38 [PATCH 0/1] armv8: reduce core errata dispatch work Josh Law
2026-05-24 12:38 ` [PATCH 1/1] " Josh Law
2026-05-26  6:01 ` [PATCH 0/1] " Krzysztof Kozlowski
2026-05-26 11:11   ` Ilias Apalodimas
2026-05-26 11:48     ` Josh Law
2026-05-26 14:03   ` Tom Rini

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox