next/master bisection: baseline.login on rk3288-rock2-square
Russell King - ARM Linux admin
linux at armlinux.org.uk
Thu Feb 4 16:50:33 EST 2021
On Thu, Feb 04, 2021 at 09:31:06PM +0000, Guillaume Tucker wrote:
> On 04/02/2021 18:23, Nick Desaulniers wrote:
> > You're right, I missed `LLVM=1`. Adding `LD=ld.bfd` I think should
> > permit fallback to BFD.
>
> That was close, except we're cross-compiling with GCC for arm.
> So I've now built a plain next-20210203 (without Ard's fix) using
> this command line:
>
> make LD=arm-linux-gnueabihf-ld.bfd -j18 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- LLVM=1 CC="ccache clang" zImage
>
> I'm using a modified Docker image gtucker/kernelci-build-clang-11
> with the very latest LLVM 11 and gcc-8-arm-linux-gnueabihf
> packages added to be able to use the GNU linker. BTW I guess we
> should enable this kind of hybrid build setup on kernelci.org as
> well.
...
> And this booted fine, which confirms it's really down to how
> ld.lld puts together the kernel image. Does it actually solve
> the debate whether this is an issue to fix in the assembly code
> or at link time?
Well... as I mentioned previously, we don't really understand what
is going on between the decompressor running with the caches on,
turning the caches off, jumping into the decompressed kernel, and
then getting to the v7 setup code.
The results from various attempts at solving the problem which lead
to Ard's original patch that caused your breakage were not making a
whole lot of sense (I think I wrote that all up in a previous email
thread, so won't repeat it here.)
So, I was slightly nervous about merging Ard's fix - and your report
suggested that there is indeed more going on here that we don't
understand.
When I was tracking down what was going on, I had this patch applied
(I've had to recreate it, so may not be exactly what I had), with the
DEBUG_LL stuff appropriately enabled. It may be worth applying this
patch, enabling the DEBUG_LL stuff appropriately for one of your
failing boards, and try booting it.
You should get two strings of identical hex numbers that look
something like:
ffffffff480000000900040140003000000000004820071d40008090
If they're looking like instructions, for example:
ee060f37e3a00080ee020f10ee020f30ee030f10e3a00903ee050f30
Then it's likely that you are seeing a very similar problem as I was
without Ard's patch. If you do get instruction-like content, then
you will likely find the sequence of instructions in the decompressor
code.
diff --git a/arch/arm/mm/proc-v7.S b/arch/arm/mm/proc-v7.S
index 28c9d32fa99a..19fa93ae282c 100644
--- a/arch/arm/mm/proc-v7.S
+++ b/arch/arm/mm/proc-v7.S
@@ -475,7 +475,39 @@ ENDPROC(cpu_pj4b_do_resume)
ldr r12, [r0]
add r12, r12, r0 @ the local stack
stmia r12, {r1-r6, lr} @ v7_invalidate_l1 touches r0-r6
+ ldr r0, [r12, #0]
+ bl printhex8
+ ldr r0, [r12, #4]
+ bl printhex8
+ ldr r0, [r12, #8]
+ bl printhex8
+ ldr r0, [r12, #12]
+ bl printhex8
+ ldr r0, [r12, #16]
+ bl printhex8
+ ldr r0, [r12, #20]
+ bl printhex8
+ ldr r0, [r12, #24]
+ bl printhex8
+ mov r0, #'\n'
+ bl printch
bl v7_invalidate_l1
+ ldr r0, [r12, #0]
+ bl printhex8
+ ldr r0, [r12, #4]
+ bl printhex8
+ ldr r0, [r12, #8]
+ bl printhex8
+ ldr r0, [r12, #12]
+ bl printhex8
+ ldr r0, [r12, #16]
+ bl printhex8
+ ldr r0, [r12, #20]
+ bl printhex8
+ ldr r0, [r12, #24]
+ bl printhex8
+ mov r0, #'\n'
+ bl printch
ldmia r12, {r1-r6, lr}
__v7_setup_cont:
--
RMK's Patch system: https://www.armlinux.org.uk/developer/patches/
FTTP is here! 40Mbps down 10Mbps up. Decent connectivity at last!
More information about the linux-arm-kernel
mailing list