[U-Boot] [EXT] Re: [ARMv8] kernel entry point

Pankaj Bansal pankaj.bansal at nxp.com
Tue May 7 03:00:30 UTC 2019


Hi Tom,

In order to determine whether linux entry point has been called or not, I put a loop in kernel:

diff --git a/arch/arm64/kernel/head.S b/arch/arm64/kernel/head.S
index 261f3f88364c..dea6cb8baa6a 100644
--- a/arch/arm64/kernel/head.S
+++ b/arch/arm64/kernel/head.S
@@ -80,6 +80,7 @@ _head:
         * its opcode forms the magic "MZ" signature required by UEFI.
         */
        add     x13, x18, #0x16
+       b       .
        b       stext
 #else
        b       stext                           // branch to kernel start, magic

This loop is being executed when I boot the kernel, but after I jump over this loop there is no log.
Does it mean that bootloader is working fine, it's the linux that is not able to boot from 0x81000000 (0x80000000 being the RAM starting address) ?

Regards,
Pankaj Bansal

> -----Original Message-----
> From: Pankaj Bansal
> Sent: Monday, 6 May, 2019 07:04 PM
> To: Tom Rini <trini at konsulko.com>
> Cc: u-boot at lists.denx.de; Prabhakar Kushwaha
> <prabhakar.kushwaha at nxp.com>; Varun Sethi <V.Sethi at nxp.com>
> Subject: RE: [EXT] Re: [ARMv8] kernel entry point
> 
> 
> 
> > -----Original Message-----
> > From: Tom Rini <trini at konsulko.com>
> > Sent: Monday, 6 May, 2019 06:59 PM
> > To: Pankaj Bansal <pankaj.bansal at nxp.com>
> > Cc: u-boot at lists.denx.de; Prabhakar Kushwaha
> > <prabhakar.kushwaha at nxp.com>; Varun Sethi <V.Sethi at nxp.com>
> > Subject: [EXT] Re: [ARMv8] kernel entry point
> >
> > On Mon, May 06, 2019 at 01:06:45PM +0000, Pankaj Bansal wrote:
> >
> > > Hi Tom et. Al,
> > >
> > > I am facing an issue while booting linux on our ARMv8 based platform.
> > > In our platform DDR address starts from 0x80000000.
> > > If I make the linux kernel entry point 0x80080000 in mkimage, then
> > > linux boots
> > fine.
> > > BUT, if I make the linux image entry point as 0x81000000 in mkimage,
> > > the
> > kernel doesn't boot.
> > >
> > > => bootm 0xa0000000 - 0xa1000000
> > > ## Current stack ends at 0xfbb24400 ## Booting kernel from Legacy
> > > Image at
> > a0000000 ...
> > >    Image Name:   linux
> > >    Image Type:   AArch64 Linux Kernel Image (gzip compressed)
> > >    Data Size:    9110442 Bytes = 8.7 MiB
> > >    Load Address: 81000000
> > >    Entry Point:  81000000
> > >    Verifying Checksum ... OK
> > > ## Flattened Device Tree blob at a1000000
> > >    Booting using the fdt blob at 0xa1000000
> > >    Uncompressing Kernel Image ... OK
> > > using: FDT
> > >    reserving fdt memory region: addr=80000000 size=10000
> > >    Loading Device Tree to 000000009fff6000, end 000000009ffff2f8 ...
> > > OK ## Transferring control to Linux (at address 81000000)...
> > >
> > > Starting kernel ...
> > >
> > > I get no kernel logs after this. I am failing to understand why.
> > > Can you please help me in debugging this issue?
> >
> > Why are you using a legacy image on AArch64 at all?  You should be
> > using either the kernel Image (and booti) or a FIT image.
> 
> This issue is coming even if I use FIT image.
> 
> => bootm 0xa0000000#lx2160ardb
> ## Current stack ends at 0xfbb24400 ## Loading kernel from FIT Image at
> a0000000 ...
>    Using 'lx2160ardb' configuration
>    Trying 'kernel' kernel subimage
>      Description:  ARM64 Kernel
>      Type:         Kernel Image
>      Compression:  gzip compressed
>      Data Start:   0xa00000d0
>      Data Size:    9110442 Bytes = 8.7 MiB
>      Architecture: AArch64
>      OS:           Linux
>      Load Address: 0x81000000
>      Entry Point:  0x81000000
>      Hash algo:    crc32
>      Hash value:   39f59891
>    Verifying Hash Integrity ... crc32+ OK ## Loading ramdisk from FIT Image at
> a0000000 ...
>    Using 'lx2160ardb' configuration
>    Trying 'initrd' ramdisk subimage
>      Description:  initrd for arm64
>      Type:         RAMDisk Image
>      Compression:  uncompressed
>      Data Start:   0xa08b055c
>      Data Size:    29171975 Bytes = 27.8 MiB
>      Architecture: AArch64
>      OS:           Linux
>      Load Address: 0x00000000
>      Entry Point:  0x00000000
>      Hash algo:    crc32
>      Hash value:   23038325
>    Verifying Hash Integrity ... crc32+ OK ## Loading fdt from FIT Image at
> a0000000 ...
>    Using 'lx2160ardb' configuration
>    Trying 'lx2160ardb-dtb' fdt subimage
>      Description:  lx2160ardb-dtb
>      Type:         Flat Device Tree
>      Compression:  uncompressed
>      Data Start:   0xa249071c
>      Data Size:    25337 Bytes = 24.7 KiB
>      Architecture: AArch64
>      Load Address: 0x90000000
>      Hash algo:    crc32
>      Hash value:   8e4d595f
>    Verifying Hash Integrity ... crc32+ OK
>    Loading fdt from 0xa249071c to 0x90000000
>    Booting using the fdt blob at 0x90000000
>    Uncompressing Kernel Image ... OK
> using: FDT
>    reserving fdt memory region: addr=80000000 size=10000
>    Loading Device Tree to 000000009fff6000, end 000000009ffff2f8 ... OK ##
> Transferring control to Linux (at address 81000000)...
> 
> Starting kernel ...
> 
> 
> >
> > --
> > Tom


More information about the U-Boot mailing list