Revert "linuxboot: fix loading old kernels"
authorSooyoung Ha <yoosah.ha@samsung.com>
Wed, 14 Oct 2015 03:59:46 +0000 (12:59 +0900)
committerSeokYeon Hwang <syeon.hwang@samsung.com>
Wed, 14 Oct 2015 05:58:21 +0000 (14:58 +0900)
This reverts commit 269e2358492b674c50160553d037702e916b9f1b.
This commit occured a kernel loading failure on windows with haxm. I am
not sure which code causes this but tizen emulator would work well if I
revert this commit, so I do for now.

Change-Id: Ib622a106fdf5075956cf5cbd3199db27828e1887
Signed-off-by: Sooyoung Ha <yoosah.ha@samsung.com>
pc-bios/linuxboot.bin
pc-bios/optionrom/linuxboot.S

index 923d1796fbc58f1a836c160be533d1cf697b7511..130103fb739228a6869aaf1b174b9d20c13378fc 100644 (file)
Binary files a/pc-bios/linuxboot.bin and b/pc-bios/linuxboot.bin differ
index ba821ab922dac42b96a384acc8960abe04f49ce5..5bc0af08e0f7dc7abdf55320baf0461170342f0f 100644 (file)
@@ -76,31 +76,7 @@ boot_kernel:
 
 
 copy_kernel:
-       /* Read info block in low memory (0x10000 or 0x90000) */
-       read_fw         FW_CFG_SETUP_ADDR
-       shr             $4, %eax
-       mov             %eax, %es
-       xor             %edi, %edi
-       read_fw_blob_addr32_edi(FW_CFG_SETUP)
-
-       cmpw            $0x203, %es:0x206      // if protocol >= 0x203
-       jae             1f                     // have initrd_max
-       movl            $0x37ffffff, %es:0x22c // else assume 0x37ffffff
-1:
-
-       /* Check if using kernel-specified initrd address */
-       read_fw         FW_CFG_INITRD_ADDR
-       mov             %eax, %edi             // (load_kernel wants it in %edi)
-       read_fw         FW_CFG_INITRD_SIZE     // find end of initrd
-       add             %edi, %eax
-       xor             %es:0x22c, %eax        // if it matches es:0x22c
-       and             $-4096, %eax           // (apart from padding for page)
-       jz              load_kernel            // then initrd is not at top
-                                              // of memory
-
-       /* pc.c placed the initrd at end of memory.  Compute a better
-        * initrd address based on e801 data.
-        */
+       /* Compute initrd address */
        mov             $0xe801, %ax
        xor             %cx, %cx
        xor             %dx, %dx
@@ -131,9 +107,7 @@ copy_kernel:
        read_fw         FW_CFG_INITRD_SIZE
        subl            %eax, %edi
        andl            $-4096, %edi          /* EDI = start of initrd */
-       movl            %edi, %es:0x218       /* put it in the header */
 
-load_kernel:
        /* We need to load the kernel into memory we can't access in 16 bit
           mode, so let's get into 32 bit mode, write the kernel and jump
           back again. */
@@ -165,10 +139,19 @@ load_kernel:
        /* We're now running in 16-bit CS, but 32-bit ES! */
 
        /* Load kernel and initrd */
+       pushl           %edi
        read_fw_blob_addr32_edi(FW_CFG_INITRD)
        read_fw_blob_addr32(FW_CFG_KERNEL)
        read_fw_blob_addr32(FW_CFG_CMDLINE)
 
+       read_fw         FW_CFG_SETUP_ADDR
+       mov             %eax, %edi
+       mov             %eax, %ebx
+       read_fw_blob_addr32_edi(FW_CFG_SETUP)
+
+       /* Update the header with the initrd address we chose above */
+       popl            %es:0x218(%ebx)
+
        /* And now jump into Linux! */
        mov             $0, %eax
        mov             %eax, %cr0