~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/arch/mips/boot/compressed/decompress.c

Version: ~ [ linux-6.11-rc3 ] ~ [ linux-6.10.4 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.45 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.104 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.164 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.223 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.281 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.319 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.9 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

Diff markup

Differences between /arch/mips/boot/compressed/decompress.c (Architecture alpha) and /arch/mips/boot/compressed/decompress.c (Architecture mips)


  1 // SPDX-License-Identifier: GPL-2.0-or-later        1 // SPDX-License-Identifier: GPL-2.0-or-later
  2 /*                                                  2 /*
  3  * Copyright 2001 MontaVista Software Inc.          3  * Copyright 2001 MontaVista Software Inc.
  4  * Author: Matt Porter <mporter@mvista.com>         4  * Author: Matt Porter <mporter@mvista.com>
  5  *                                                  5  *
  6  * Copyright (C) 2009 Lemote, Inc.                  6  * Copyright (C) 2009 Lemote, Inc.
  7  * Author: Wu Zhangjin <wuzhangjin@gmail.com>       7  * Author: Wu Zhangjin <wuzhangjin@gmail.com>
  8  */                                                 8  */
  9                                                     9 
 10 #define DISABLE_BRANCH_PROFILING                   10 #define DISABLE_BRANCH_PROFILING
 11                                                    11 
 12 #define __NO_FORTIFY                               12 #define __NO_FORTIFY
 13 #include <linux/types.h>                           13 #include <linux/types.h>
 14 #include <linux/kernel.h>                          14 #include <linux/kernel.h>
 15 #include <linux/string.h>                          15 #include <linux/string.h>
 16 #include <linux/libfdt.h>                          16 #include <linux/libfdt.h>
 17                                                    17 
 18 #include <asm/addrspace.h>                         18 #include <asm/addrspace.h>
 19 #include <asm/unaligned.h>                         19 #include <asm/unaligned.h>
 20 #include <asm-generic/vmlinux.lds.h>               20 #include <asm-generic/vmlinux.lds.h>
 21                                                    21 
 22 #include "decompress.h"                            22 #include "decompress.h"
 23                                                    23 
 24 /*                                                 24 /*
 25  * These two variables specify the free mem re     25  * These two variables specify the free mem region
 26  * that can be used for temporary malloc area      26  * that can be used for temporary malloc area
 27  */                                                27  */
 28 unsigned long free_mem_ptr;                        28 unsigned long free_mem_ptr;
 29 unsigned long free_mem_end_ptr;                    29 unsigned long free_mem_end_ptr;
 30                                                    30 
 31 void error(char *x)                                31 void error(char *x)
 32 {                                                  32 {
 33         puts("\n\n");                              33         puts("\n\n");
 34         puts(x);                                   34         puts(x);
 35         puts("\n\n -- System halted");             35         puts("\n\n -- System halted");
 36                                                    36 
 37         while (1)                                  37         while (1)
 38                 ;       /* Halt */                 38                 ;       /* Halt */
 39 }                                                  39 }
 40                                                    40 
 41 /* activate the code for pre-boot environment      41 /* activate the code for pre-boot environment */
 42 #define STATIC static                              42 #define STATIC static
 43                                                    43 
 44 #ifdef CONFIG_KERNEL_GZIP                          44 #ifdef CONFIG_KERNEL_GZIP
 45 #include "../../../../lib/decompress_inflate.c     45 #include "../../../../lib/decompress_inflate.c"
 46 #endif                                             46 #endif
 47                                                    47 
 48 #ifdef CONFIG_KERNEL_BZIP2                         48 #ifdef CONFIG_KERNEL_BZIP2
 49 #include "../../../../lib/decompress_bunzip2.c     49 #include "../../../../lib/decompress_bunzip2.c"
 50 #endif                                             50 #endif
 51                                                    51 
 52 #ifdef CONFIG_KERNEL_LZ4                           52 #ifdef CONFIG_KERNEL_LZ4
 53 #include "../../../../lib/decompress_unlz4.c"      53 #include "../../../../lib/decompress_unlz4.c"
 54 #endif                                             54 #endif
 55                                                    55 
 56 #ifdef CONFIG_KERNEL_LZMA                          56 #ifdef CONFIG_KERNEL_LZMA
 57 #include "../../../../lib/decompress_unlzma.c"     57 #include "../../../../lib/decompress_unlzma.c"
 58 #endif                                             58 #endif
 59                                                    59 
 60 #ifdef CONFIG_KERNEL_LZO                           60 #ifdef CONFIG_KERNEL_LZO
 61 #include "../../../../lib/decompress_unlzo.c"      61 #include "../../../../lib/decompress_unlzo.c"
 62 #endif                                             62 #endif
 63                                                    63 
 64 #ifdef CONFIG_KERNEL_XZ                            64 #ifdef CONFIG_KERNEL_XZ
 65 #include "../../../../lib/decompress_unxz.c"       65 #include "../../../../lib/decompress_unxz.c"
 66 #endif                                             66 #endif
 67                                                    67 
 68 #ifdef CONFIG_KERNEL_ZSTD                          68 #ifdef CONFIG_KERNEL_ZSTD
 69 #include "../../../../lib/decompress_unzstd.c"     69 #include "../../../../lib/decompress_unzstd.c"
 70 #endif                                             70 #endif
 71                                                    71 
 72 const unsigned long __stack_chk_guard = 0x000a     72 const unsigned long __stack_chk_guard = 0x000a0dff;
 73                                                    73 
 74 void __stack_chk_fail(void)                        74 void __stack_chk_fail(void)
 75 {                                                  75 {
 76         error("stack-protector: Kernel stack i     76         error("stack-protector: Kernel stack is corrupted\n");
 77 }                                                  77 }
 78                                                    78 
 79 void decompress_kernel(unsigned long boot_heap     79 void decompress_kernel(unsigned long boot_heap_start)
 80 {                                                  80 {
 81         unsigned long zimage_start, zimage_siz     81         unsigned long zimage_start, zimage_size;
 82                                                    82 
 83         zimage_start = (unsigned long)(__image     83         zimage_start = (unsigned long)(__image_begin);
 84         zimage_size = (unsigned long)(__image_     84         zimage_size = (unsigned long)(__image_end) -
 85             (unsigned long)(__image_begin);        85             (unsigned long)(__image_begin);
 86                                                    86 
 87         puts("zimage at:     ");                   87         puts("zimage at:     ");
 88         puthex(zimage_start);                      88         puthex(zimage_start);
 89         puts(" ");                                 89         puts(" ");
 90         puthex(zimage_size + zimage_start);        90         puthex(zimage_size + zimage_start);
 91         puts("\n");                                91         puts("\n");
 92                                                    92 
 93         /* This area are prepared for mallocin     93         /* This area are prepared for mallocing when decompressing */
 94         free_mem_ptr = boot_heap_start;            94         free_mem_ptr = boot_heap_start;
 95         free_mem_end_ptr = boot_heap_start + B     95         free_mem_end_ptr = boot_heap_start + BOOT_HEAP_SIZE;
 96                                                    96 
 97         /* Display standard Linux/MIPS boot pr     97         /* Display standard Linux/MIPS boot prompt */
 98         puts("Uncompressing Linux at load addr     98         puts("Uncompressing Linux at load address ");
 99         puthex(VMLINUX_LOAD_ADDRESS_ULL);          99         puthex(VMLINUX_LOAD_ADDRESS_ULL);
100         puts("\n");                               100         puts("\n");
101                                                   101 
102         /* Decompress the kernel with accordin    102         /* Decompress the kernel with according algorithm */
103         __decompress((char *)zimage_start, zim    103         __decompress((char *)zimage_start, zimage_size, 0, 0,
104                    (void *)VMLINUX_LOAD_ADDRES    104                    (void *)VMLINUX_LOAD_ADDRESS_ULL, 0, 0, error);
105                                                   105 
106         if (IS_ENABLED(CONFIG_MIPS_RAW_APPENDE    106         if (IS_ENABLED(CONFIG_MIPS_RAW_APPENDED_DTB) &&
107             fdt_magic((void *)&__appended_dtb)    107             fdt_magic((void *)&__appended_dtb) == FDT_MAGIC) {
108                 unsigned int image_size, dtb_s    108                 unsigned int image_size, dtb_size;
109                                                   109 
110                 dtb_size = fdt_totalsize((void    110                 dtb_size = fdt_totalsize((void *)&__appended_dtb);
111                                                   111 
112                 /* last four bytes is always i    112                 /* last four bytes is always image size in little endian */
113                 image_size = get_unaligned_le3    113                 image_size = get_unaligned_le32((void *)__image_end - 4);
114                                                   114 
115                 /* The device tree's address m    115                 /* The device tree's address must be properly aligned  */
116                 image_size = ALIGN(image_size,    116                 image_size = ALIGN(image_size, STRUCT_ALIGNMENT);
117                                                   117 
118                 puts("Copy device tree to addr    118                 puts("Copy device tree to address  ");
119                 puthex(VMLINUX_LOAD_ADDRESS_UL    119                 puthex(VMLINUX_LOAD_ADDRESS_ULL + image_size);
120                 puts("\n");                       120                 puts("\n");
121                                                   121 
122                 /* copy dtb to where the boote    122                 /* copy dtb to where the booted kernel will expect it */
123                 memcpy((void *)VMLINUX_LOAD_AD    123                 memcpy((void *)VMLINUX_LOAD_ADDRESS_ULL + image_size,
124                        __appended_dtb, dtb_siz    124                        __appended_dtb, dtb_size);
125         }                                         125         }
126                                                   126 
127         /* FIXME: should we flush cache here?     127         /* FIXME: should we flush cache here? */
128         puts("Now, booting the kernel...\n");     128         puts("Now, booting the kernel...\n");
129 }                                                 129 }
130                                                   130 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php