AnsweredAssumed Answered

Kernel halts while invalidating TLB

Question asked by masasi on Apr 9, 2015
Latest reply on Apr 9, 2015 by Scott Wood

Hi, I am trying to boot SDK 1.6 kernel in my P1012 board.

The uboot configures TLBs correctly but once the kernel boots, it halts while invalidating TLBs(flush_tlbs at head_32.S file) .

Kernel is loaded at 0x00000000 and uboot configures a TLB for DDR at 0x00000000. The console output is the following:


/********************************************************************************************/

=> boot

WARNING: adjusting available memory to 30000000

## Booting kernel from Legacy Image at 02000000 ...

   Image Name:   WTMKII PM Linux kernel5

   Created:      2015-04-09  10:56:29 UTC

   Image Type:   PowerPC Linux Kernel Image (gzip compressed)

   Data Size:    3929672 Bytes = 3.7 MiB

   Load Address: 00000000

   Entry Point:  00000000

   Verifying Checksum ... OK

## Loading init Ramdisk from Legacy Image at 10000000 ...

   Image Name:   ramdisk_0n_2.img

   Created:      2015-03-30  13:58:24 UTC

   Image Type:   PowerPC Linux RAMDisk Image (lzo compressed)

   Data Size:    9565405 Bytes = 9.1 MiB

   Load Address: 00000000

   Entry Point:  00000000

   Verifying Checksum ... OK

## Flattened Device Tree from Legacy Image at 03000000

   Image Name:   pmDTB

   Created:      2015-04-08  10:57:38 UTC

   Image Type:   PowerPC Linux Flat Device Tree (uncompressed)

   Data Size:    14821 Bytes = 14.5 KiB

   Load Address: 06000000

   Entry Point:  00000000

   Verifying Checksum ... OK

   Booting using the fdt blob at 0x6000000

   Uncompressing Kernel Image ... OK

   Loading Ramdisk to 2f6e0000, end 2ffff4dd ... OK

   Loading Device Tree to 03ff9000, end 03fff9e4 ... OK

WARNING: could not find compatible node fsl-usb2-dr: FDT_ERR_NOTFOUND.

## Transferring control to Linux (at address 00000000) ...

   Booting using OF flat tree...

/********************************************************************************************/

 

Code is crashing at head_32.S:

 

flush_tlbs:

     lis r10,0x40

     1:addic. r10,r10,-0x1000

     tlbie r10  <-- Kernel halts after this instruction

     bgt 1b

     sync

     blr

 

 

I don't understand why kernel needs to override current TLB instead of creating a new one.  Has anybody faced a similar problem?

Thanks in advanced,


Maria

Outcomes