diff options
author | PA4WDH | 2021-08-25 12:02:32 +0200 |
---|---|---|
committer | PA4WDH | 2021-08-25 12:02:32 +0200 |
commit | 38be1b3221b1e85cac1af8a67c733752265425d7 (patch) | |
tree | 62805f905167039e00378ede54f5dd41203bc577 | |
parent | Add patch to sys-boot/u-boot-2021.07 to make it work (diff) | |
download | unmatched-patchwork-38be1b3221b1e85cac1af8a67c733752265425d7.tar.gz unmatched-patchwork-38be1b3221b1e85cac1af8a67c733752265425d7.tar.bz2 unmatched-patchwork-38be1b3221b1e85cac1af8a67c733752265425d7.zip |
Add sys-boot/grub-2.06-r1
12 files changed, 1314 insertions, 0 deletions
diff --git a/sys-boot/grub/Manifest b/sys-boot/grub/Manifest index f61a2e5..31c1dee 100644 --- a/sys-boot/grub/Manifest +++ b/sys-boot/grub/Manifest @@ -1,5 +1,15 @@ AUX gfxpayload.patch 1118 BLAKE2B 4104fc696535b1c3feba5876bccc64f9b2e52319ee992c59e7f17b8310cc9addf7545630fff78c73ca3f4b0dcd44e1bf69f4df5264d6f58777f7e5aeae93cbcb SHA512 00324825c369902a0383b792cd21e161853eadccbdc5abe2420f2d443bf6a74f72be6c15243107b936acd38c3547387c3771dc2cb566003c4c754c9260b4aa00 AUX grub-2.02_beta2-KERNEL_GLOBS.patch 2121 BLAKE2B 398195f59537d40a4f61eadf5be974b8f9eb56a4eb07b798f0dc18e29588b3a9f8daa8d6e64980a835ec1960fab60b8c96d6552ef2920fe6604170abf7d5e7da SHA512 f85bc538ae647c46efbe07d7b87acf49daa7b07e9752af3aa3f77019f48ea24cd1b6a095a6f9c19d50128701753f453c531b9b068e11ee22a259f3fdf8ac205e +AUX grub-2.06-001-loader-drop-argv-in-grub_initrd_load.patch 6675 BLAKE2B 98940b99fefe4980d5fb21248fb41a62c8755ee827b3adbc9fa73d946dbbb9a8aad801fba1fb0f25b2c58e3321933ef309a183c42a688bfa03b8afced974de1b SHA512 8912e90251cc47b35a2a0b91eba6e0f80b543d4f62c26d9ff1d7fd5c1d910eaa564d941088a628cb52e86acf1d90eaab0f8e696cc6d6dd2121750defb6e63fb4 +AUX grub-2.06-002-efi-add-definition-of-loadfile2-protocol.patch 2166 BLAKE2B 6efa48b8b7251395ebb8e18abc2e59db7c69a85b97d5e564c6deb71a0c1c220b29a760dfef2428d4f5904968535e533f74c8193b183f478ee4ea20908882c013 SHA512 52e33c0984a3cc148ca83f6fe3d0d288747e62ff1f462fb6ff5227d78dcc6f31525f03d4e8e6a5b36c7532609e0f302879f5c9614937bc3d9904e282f80866ba +AUX grub-2.06-003-efi-implemented-loadfile2-initrd-loading.patch 6016 BLAKE2B ef30a96d5de6995bb6a2dc48548abb245548b83c3d27c5901e072b0600a44ce3a23fc7e83bb5d1f22588acc6565cc2a6a5ce441ceebada848b5e4d1d086f45c2 SHA512 45f96c552237e78b70594d436bebc946611d63c9c6d1aca5a5c60148b12cde34689f1ae502fd1ba197e960dab188cd9cde9e376f7777773dc72523981e935a06 +AUX grub-2.06-004-linux-ignore-fdt-unless-we-need-to-modify-it.patch 2506 BLAKE2B 632f82fc1c9d7e9f194d23e6ae1ade47bbfcc02a115637e3aca6e257e208782dd71bbdd196839e0f17888de78cbb27d71ed75b87a58fe0d87d08e402a0cca257 SHA512 65bbe8d5b60d10b5faaca424e1e966ea3de7fde5265e478b3281427351e52acc34a8c8902149e3d69b82dd7780fd3a231a44747a28cd2eed6156741eb15ec6a8 +AUX grub-2.06-005-loader-move-arm64-linux-loader.patch 2797 BLAKE2B bc83f82a465ac7dee69a36d93c56e07c3a37dee46d09b3317cfa425d5ec62b795e5b2cd2449e7fc439e71436edfcf5b441550f15b80f0bd11095c69cd0300909 SHA512 f3191baca59e9903aaf84dbe470f8b1ee371c0ac976c84840919cf06629f121b9b67ded950e9e70a74b9ca01e0d88728888877d29521ee066f8bcbfb1ac43234 +AUX grub-2.06-006-riscv-update-image-header.patch 3192 BLAKE2B 57004beca8a54bc070c8ce52e9acd5583d288b406909a679544c0ebe8c697ccfdf41e040a24585b04c2cfe234f7e48d6c0296beeaf399dabfed05aacf7cbdb52 SHA512 d0c4d09c1f06d14d2df0dfb44f4c0dc6f8bd57be08e1e25632bc80001f590a65511792e2b2a87c9528150174669a8c81969db24f2472be0351a833327d884a3b +AUX grub-2.06-007-riscv-use-common-linux-loader.patch 3901 BLAKE2B 109808cf3fb7dba758805b04fcc7babcea5634a936a44351f068b620a59bfa8f228201d898c74a69d1885d6722df80af0573f1630a0a4d6f2aa16760aa5cf855 SHA512 2f181d30b4684af32438e9630982c1de0993cf81a1e17615fb0802d83331d43ee4928d4cf53f24c1b8349cc09127ee9966cc73b2d24391989478c5c06b1caddc +AUX grub-2.06-010-efi-device-tree-fixup-protocol.patch 4260 BLAKE2B cc63a8c25dc649e6fb06b3f9b736d06a6cbe5bf715e7760443748fb289212c459fa2cc61752daaac8f626d845d570ec578d8a4deaba396083ca39b0406ae92a2 SHA512 9dbae1a8a7d7f71cf31124101c57a921392ea9b0de7cfd8e27366cfdc781a38eb1b55a6adbfb63abeedbe79bd27a6d0efb2bdcde3973d13ca962aded23b7af62 +AUX grub-2.06-011-support-loading-device-trees.patch 2416 BLAKE2B 73427de0c99cfdaa203127cc39e4192ec560541320d2f391594e6099f5f978ec53633d979e2041eae80603ff3dbbc3737ea88c207e9dddd46973e6bfb1d8c540 SHA512 1a9751934191c4ec05e70dfd6bc5698484dc9fb34d1bc1cdd1d18fd7db4baccd867741015680af9eb024c6b13a5ab830e8f16d3cd6c352782fe6f7c3f43450a4 +AUX grub-2.06-012-move-load-fdt.patch 547 BLAKE2B 65333fb25aae5572f5677a837b5b7a78f607b6edc4a6690ef7523bfa65d448f7db869920513e81a1de260524aa913d4282d3b1ef632e68a2747edbc79f0580ee SHA512 ab73499ec00952ba53dbb82add56d70e578dcc2c38880a91d85a9d4f7139cecfd54385668a7468aaf91b754d87fad2f28c168fb52dd4c09ae6800cd05358d2e7 AUX grub-2.06-add-boot-hartid-to-fdt.patch 995 BLAKE2B 86ab277819eeab08d552e1d5300f8f5e798823e56e66d8dd39ae442b3b4777a22d155dd85f9b38778a644c7f52b61f673b6c856c66492da412d2ee2587125484 SHA512 5d334050165dd648bd3547ede9cc62380f75a5d9625a4282972a4e71e34e14d72cf6acb363c513942375c84c79a48acd6331bbcbc56f4999a339e29391fbb5ae AUX grub-2.06-linux-riscv.patch 12599 BLAKE2B bfbb85e8824586d1a13d142020d591e0e103c77c193ef7a82e1770b3ffcd23f6daec9729a9d1cb579d5dcaeb6be40f23682fdab8e2e5c7067b382362faee2c36 SHA512 5f964e98caff6c57fc4ac7d57bbd86c8cc1ab35ca25c58a1e8c7a2db232b7b1470b6fe8a6a372c62fc3bfe939ce64c75027ed4b3d3d4db141b73a709557275c1 AUX grub-2.06-magic-number.patch 1826 BLAKE2B 83dc3e86b2ae3d96d3459641fda67b47178688410cacdc54ee79ccbab129cabfd1aa087ff1afc6fcdb607c1e183a7b55d54f5c0d5cbca951178129c50b26bb35 SHA512 44e03d1cbef8ca7128c4a91647d1095453f5f9c9aa9329f20bb5af178a766c6ed22b4c2ea3e515bac7b0c977f8248401590a6e76561d86146729c9cc1d931700 @@ -8,5 +18,6 @@ AUX grub.default-3 2528 BLAKE2B c32de43644eca5fae8d8d727ff443600917a93e015f8a83d DIST dejavu-sans-ttf-2.37.zip 417746 BLAKE2B c8904f3cd5a49370a7dc10e456684c88aeae998a99090bf4d0a5baa4f36cc8fb8f70586cf6d610a5ffeee97261d28c80f55bbe9dcfc3ed796d5c2d60e79adb58 SHA512 ede5899daa1984c5aa8cacb1c850eb53f189dddef3d9bb78bf9774d8976b7c0d6eb0bcf86237cd7d11f5b36cf5b5058d42cd94d3bd76f2bd0931c7ceb1271fae DIST grub-2.06.tar.xz 6581924 BLAKE2B 2a40b9b03d7bb3b9e7b1309ab274d686f01b3c42e7035ebc6e5a0e59a59c3b7362ba518341664b314cb0dbc8222bb10ea05ce09f08ce9d58a293207cb909e417 SHA512 4f11c648f3078567e53fc0c74d5026fdc6da4be27d188975e79d9a4df817ade0fe5ad2ddd694238a07edc45adfa02943d83c57767dd51548102b375e529e8efe DIST unifont-12.1.02.pcf.gz 1335424 BLAKE2B 97080312468e3f3c8aa6f49cef08f5622641e8c9c035f3ede1e09d8d98de4e78d3b23c8aba2e8070eb46cbebd2d55e8568e467d7f15f35aa8fc8db792b7e5f14 SHA512 b280b2db7cf5f480b0668c331130dede2c0cc87d5e02e44566b77787113d0f6604d0105522858288f2ac6b8e77df7a2d9878725013a6c778dc5bfb183156e2f0 +EBUILD grub-2.06-r1.ebuild 8088 BLAKE2B e097c58fd5a8df8e1859131f69c90209ad3c1268608f418ebf3e725f74978bf0e465d92afc0ac985c29d009e23507b467931d135d8d1c0ca3fe5439021263963 SHA512 520e926cf09b1cf4a82509ebfa204df623156bf68436da6a72c13677337bde0702f4b2ea851f7691f2ef3f4f5b5373ebfe55b0edd18c3361115b106a6ad1a650 EBUILD grub-2.06.ebuild 7548 BLAKE2B d8c7ba5110cd4b8483a80255e80f3d61c99d8ced45c862ac319c5b5196b3cc2f7d7a4b9eeae378d6c1da01863dec3a7e86ed092559db9c7f47ac46b6be515599 SHA512 aabf4dc758ed3a0fb07f57eede1130f9e48e92c20cfb1992e629c2b4bca0e8e446b28deb7c74f4230b74bbf6240a6e027955133126c9592158afed9ae17e8506 MISC metadata.xml 985 BLAKE2B 36f108b5d3441f8576609c77ab3547c60ac2c508b55472bd0ec0e3af8d0fa018d305d7267c0e2e84c8526affced9ed5ce51738b9fcf05b31ac36c1b4d5c2702a SHA512 bd28dd88d4eb76a32cfa757eb5bf7641d033f670280ab7230b72a66b1bd8fd65c777473b1d7f81257004a215fe5a858a79a6a912e0ceaecd586867e9a76f6b4e diff --git a/sys-boot/grub/files/grub-2.06-001-loader-drop-argv-in-grub_initrd_load.patch b/sys-boot/grub/files/grub-2.06-001-loader-drop-argv-in-grub_initrd_load.patch new file mode 100644 index 0000000..66d91dd --- /dev/null +++ b/sys-boot/grub/files/grub-2.06-001-loader-drop-argv-in-grub_initrd_load.patch @@ -0,0 +1,173 @@ + +In the case of an error grub_initrd_load() uses argv[] to print the +filename that caused the error. It is also possible to obtain the +filename from the file handles and there is no need to duplicate that +information in argv[], so let's drop it. + +Signed-off-by: Nikita Ermakov <arei@altlinux.org> +--- + grub-core/loader/arm/linux.c | 2 +- + grub-core/loader/arm64/linux.c | 2 +- + grub-core/loader/i386/linux.c | 2 +- + grub-core/loader/i386/pc/linux.c | 2 +- + grub-core/loader/i386/xen.c | 3 +-- + grub-core/loader/ia64/efi/linux.c | 2 +- + grub-core/loader/linux.c | 4 ++-- + grub-core/loader/mips/linux.c | 2 +- + grub-core/loader/powerpc/ieee1275/linux.c | 2 +- + grub-core/loader/sparc64/ieee1275/linux.c | 2 +- + include/grub/linux.h | 2 +- + 11 files changed, 12 insertions(+), 13 deletions(-) + +diff --git a/grub-core/loader/arm/linux.c b/grub-core/loader/arm/linux.c +index ed23dc71e..1f7ab7578 100644 +--- a/grub-core/loader/arm/linux.c ++++ b/grub-core/loader/arm/linux.c +@@ -422,7 +422,7 @@ grub_cmd_initrd (grub_command_t cmd __attribute__ ((unused)), + grub_dprintf ("loader", "Loading initrd to 0x%08x\n", + (grub_addr_t) initrd_start); + +- if (grub_initrd_load (&initrd_ctx, argv, (void *) initrd_start)) ++ if (grub_initrd_load (&initrd_ctx, (void *) initrd_start)) + goto fail; + + initrd_end = initrd_start + size; +diff --git a/grub-core/loader/arm64/linux.c b/grub-core/loader/arm64/linux.c +index ef3e9f944..aed7a200b 100644 +--- a/grub-core/loader/arm64/linux.c ++++ b/grub-core/loader/arm64/linux.c +@@ -266,7 +266,7 @@ grub_cmd_initrd (grub_command_t cmd __attribute__ ((unused)), + goto fail; + } + +- if (grub_initrd_load (&initrd_ctx, argv, initrd_mem)) ++ if (grub_initrd_load (&initrd_ctx, initrd_mem)) + goto fail; + + initrd_start = (grub_addr_t) initrd_mem; +diff --git a/grub-core/loader/i386/linux.c b/grub-core/loader/i386/linux.c +index 9f74a96b1..f30a1586a 100644 +--- a/grub-core/loader/i386/linux.c ++++ b/grub-core/loader/i386/linux.c +@@ -1107,7 +1107,7 @@ grub_cmd_initrd (grub_command_t cmd __attribute__ ((unused)), + initrd_mem_target = get_physical_target_address (ch); + } + +- if (grub_initrd_load (&initrd_ctx, argv, initrd_mem)) ++ if (grub_initrd_load (&initrd_ctx, initrd_mem)) + goto fail; + + grub_dprintf ("linux", "Initrd, addr=0x%x, size=0x%x\n", +diff --git a/grub-core/loader/i386/pc/linux.c b/grub-core/loader/i386/pc/linux.c +index 2a2995201..efeeeb206 100644 +--- a/grub-core/loader/i386/pc/linux.c ++++ b/grub-core/loader/i386/pc/linux.c +@@ -462,7 +462,7 @@ grub_cmd_initrd (grub_command_t cmd __attribute__ ((unused)), + initrd_addr = get_physical_target_address (ch); + } + +- if (grub_initrd_load (&initrd_ctx, argv, initrd_chunk)) ++ if (grub_initrd_load (&initrd_ctx, initrd_chunk)) + goto fail; + + lh->ramdisk_image = initrd_addr; +diff --git a/grub-core/loader/i386/xen.c b/grub-core/loader/i386/xen.c +index cd24874ca..3b856e842 100644 +--- a/grub-core/loader/i386/xen.c ++++ b/grub-core/loader/i386/xen.c +@@ -809,8 +809,7 @@ grub_cmd_initrd (grub_command_t cmd __attribute__ ((unused)), + if (err) + goto fail; + +- if (grub_initrd_load (&initrd_ctx, argv, +- get_virtual_current_address (ch))) ++ if (grub_initrd_load (&initrd_ctx, get_virtual_current_address (ch))) + goto fail; + } + +diff --git a/grub-core/loader/ia64/efi/linux.c b/grub-core/loader/ia64/efi/linux.c +index 7987fd1ba..8873b7a55 100644 +--- a/grub-core/loader/ia64/efi/linux.c ++++ b/grub-core/loader/ia64/efi/linux.c +@@ -563,7 +563,7 @@ grub_cmd_initrd (grub_command_t cmd __attribute__ ((unused)), + grub_dprintf ("linux", "[addr=0x%lx, size=0x%lx]\n", + (grub_uint64_t) initrd_mem, initrd_size); + +- if (grub_initrd_load (&initrd_ctx, argv, initrd_mem)) ++ if (grub_initrd_load (&initrd_ctx, initrd_mem)) + goto fail; + fail: + grub_initrd_close (&initrd_ctx); +diff --git a/grub-core/loader/linux.c b/grub-core/loader/linux.c +index 3fe390f17..d19df670e 100644 +--- a/grub-core/loader/linux.c ++++ b/grub-core/loader/linux.c +@@ -271,7 +271,7 @@ grub_initrd_close (struct grub_linux_initrd_context *initrd_ctx) + + grub_err_t + grub_initrd_load (struct grub_linux_initrd_context *initrd_ctx, +- char *argv[], void *target) ++ void *target) + { + grub_uint8_t *ptr = target; + int i; +@@ -317,7 +317,7 @@ grub_initrd_load (struct grub_linux_initrd_context *initrd_ctx, + { + if (!grub_errno) + grub_error (GRUB_ERR_FILE_READ_ERROR, N_("premature end of file %s"), +- argv[i]); ++ initrd_ctx->components[i].file->name); + grub_initrd_close (initrd_ctx); + return grub_errno; + } +diff --git a/grub-core/loader/mips/linux.c b/grub-core/loader/mips/linux.c +index e4ed95921..94594721d 100644 +--- a/grub-core/loader/mips/linux.c ++++ b/grub-core/loader/mips/linux.c +@@ -452,7 +452,7 @@ grub_cmd_initrd (grub_command_t cmd __attribute__ ((unused)), + initrd_dest = get_physical_target_address (ch) | 0x80000000; + } + +- if (grub_initrd_load (&initrd_ctx, argv, initrd_src)) ++ if (grub_initrd_load (&initrd_ctx, initrd_src)) + goto fail; + + #ifdef GRUB_MACHINE_MIPS_QEMU_MIPS +diff --git a/grub-core/loader/powerpc/ieee1275/linux.c b/grub-core/loader/powerpc/ieee1275/linux.c +index 818b2a86d..a51e7a786 100644 +--- a/grub-core/loader/powerpc/ieee1275/linux.c ++++ b/grub-core/loader/powerpc/ieee1275/linux.c +@@ -363,7 +363,7 @@ grub_cmd_initrd (grub_command_t cmd __attribute__ ((unused)), + + grub_dprintf ("loader", "Loading initrd at 0x%x, size 0x%x\n", addr, size); + +- if (grub_initrd_load (&initrd_ctx, argv, (void *) addr)) ++ if (grub_initrd_load (&initrd_ctx, (void *) addr)) + goto fail; + + initrd_addr = addr; +diff --git a/grub-core/loader/sparc64/ieee1275/linux.c b/grub-core/loader/sparc64/ieee1275/linux.c +index bb47ee0cc..ac2206f3c 100644 +--- a/grub-core/loader/sparc64/ieee1275/linux.c ++++ b/grub-core/loader/sparc64/ieee1275/linux.c +@@ -413,7 +413,7 @@ grub_cmd_initrd (grub_command_t cmd __attribute__ ((unused)), + grub_dprintf ("loader", "Loading initrd at vaddr 0x%lx, paddr 0x%lx, size 0x%lx\n", + addr, paddr, size); + +- if (grub_initrd_load (&initrd_ctx, argv, (void *) addr)) ++ if (grub_initrd_load (&initrd_ctx, (void *) addr)) + goto fail; + + initrd_addr = addr; +diff --git a/include/grub/linux.h b/include/grub/linux.h +index 594a3f307..a96ac2048 100644 +--- a/include/grub/linux.h ++++ b/include/grub/linux.h +@@ -21,4 +21,4 @@ grub_initrd_close (struct grub_linux_initrd_context *initrd_ctx); + + grub_err_t + grub_initrd_load (struct grub_linux_initrd_context *initrd_ctx, +- char *argv[], void *target); ++ void *target); +-- +2.29.3 diff --git a/sys-boot/grub/files/grub-2.06-002-efi-add-definition-of-loadfile2-protocol.patch b/sys-boot/grub/files/grub-2.06-002-efi-add-definition-of-loadfile2-protocol.patch new file mode 100644 index 0000000..35777b5 --- /dev/null +++ b/sys-boot/grub/files/grub-2.06-002-efi-add-definition-of-loadfile2-protocol.patch @@ -0,0 +1,58 @@ +Incorporate the EFI_LOAD_FILE2_PROTOCOL GUID and C types from the +UEFI spec. + +Signed-off-by: Ard Biesheuvel <ard.biesheuvel@arm.com> +Reviewed-by: Heinrich Schuchardt <xypron.glpk@gmx.de> +Signed-off-by: Nikita Ermakov <arei@altlinux.org> +--- + grub-core/commands/efi/lsefi.c | 1 + + include/grub/efi/api.h | 15 +++++++++++++++ + 2 files changed, 16 insertions(+) + +diff --git a/grub-core/commands/efi/lsefi.c b/grub-core/commands/efi/lsefi.c +index d1ce99af4..4085f5df2 100644 +--- a/grub-core/commands/efi/lsefi.c ++++ b/grub-core/commands/efi/lsefi.c +@@ -55,6 +55,7 @@ struct known_protocol + { GRUB_EFI_ABSOLUTE_POINTER_PROTOCOL_GUID, "absolute pointer" }, + { GRUB_EFI_DRIVER_BINDING_PROTOCOL_GUID, "EFI driver binding" }, + { GRUB_EFI_LOAD_FILE_PROTOCOL_GUID, "load file" }, ++ { GRUB_EFI_LOAD_FILE2_PROTOCOL_GUID, "load file2" }, + { GRUB_EFI_SIMPLE_FILE_SYSTEM_PROTOCOL_GUID, "simple FS" }, + { GRUB_EFI_TAPE_IO_PROTOCOL_GUID, "tape I/O" }, + { GRUB_EFI_UNICODE_COLLATION_PROTOCOL_GUID, "unicode collation" }, +diff --git a/include/grub/efi/api.h b/include/grub/efi/api.h +index f1a52210c..3de0a7d12 100644 +--- a/include/grub/efi/api.h ++++ b/include/grub/efi/api.h +@@ -149,6 +149,11 @@ + { 0x8E, 0x3F, 0x00, 0xA0, 0xC9, 0x69, 0x72, 0x3B } \ + } + ++#define GRUB_EFI_LOAD_FILE2_PROTOCOL_GUID \ ++ { 0x4006c0c1, 0xfcb3, 0x403e, \ ++ { 0x99, 0x6d, 0x4a, 0x6c, 0x87, 0x24, 0xe0, 0x6d } \ ++ } ++ + #define GRUB_EFI_SIMPLE_FILE_SYSTEM_PROTOCOL_GUID \ + { 0x0964e5b22, 0x6459, 0x11d2, \ + { 0x8e, 0x39, 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x3b } \ +@@ -1729,6 +1734,16 @@ struct grub_efi_rng_protocol + }; + typedef struct grub_efi_rng_protocol grub_efi_rng_protocol_t; + ++struct grub_efi_load_file2 ++{ ++ grub_efi_status_t (*load_file)(struct grub_efi_load_file2 *this, ++ grub_efi_device_path_t *file_path, ++ grub_efi_boolean_t boot_policy, ++ grub_efi_uintn_t *buffer_size, ++ void *buffer); ++}; ++typedef struct grub_efi_load_file2 grub_efi_load_file2_t; ++ + #if (GRUB_TARGET_SIZEOF_VOID_P == 4) || defined (__ia64__) \ + || defined (__aarch64__) || defined (__MINGW64__) || defined (__CYGWIN__) \ + || defined(__riscv) +-- +2.29.3 diff --git a/sys-boot/grub/files/grub-2.06-003-efi-implemented-loadfile2-initrd-loading.patch b/sys-boot/grub/files/grub-2.06-003-efi-implemented-loadfile2-initrd-loading.patch new file mode 100644 index 0000000..65fdf2e --- /dev/null +++ b/sys-boot/grub/files/grub-2.06-003-efi-implemented-loadfile2-initrd-loading.patch @@ -0,0 +1,180 @@ +Recent Linux kernels will invoke the LoadFile2 protocol installed on +a well-known vendor media path to load the initrd if it is exposed by +the firmware. Using this method is preferred for two reasons: +- the Linux kernel is in charge of allocating the memory, and so it can + implement any placement policy it wants (given that these tend to + change between kernel versions), +- it is no longer necessary to modify the device tree provided by the + firmware. + +So let's install this protocol when handling the 'initrd' command if +such a recent kernel was detected (based on the PE/COFF image version), +and defer loading the initrd contents until the point where the kernel +invokes the LoadFile2 protocol. + +Signed-off-by: Ard Biesheuvel <ard.biesheuvel@arm.com> +Signed-off-by: Nikita Ermakov <arei@altlinux.org> +--- + grub-core/loader/arm64/linux.c | 117 ++++++++++++++++++++++++++++++++- + 1 file changed, 116 insertions(+), 1 deletion(-) + +diff --git a/grub-core/loader/arm64/linux.c b/grub-core/loader/arm64/linux.c +index aed7a200b..6b03455d1 100644 +--- a/grub-core/loader/arm64/linux.c ++++ b/grub-core/loader/arm64/linux.c +@@ -48,9 +48,18 @@ static grub_uint32_t cmdline_size; + static grub_addr_t initrd_start; + static grub_addr_t initrd_end; + ++static struct grub_linux_initrd_context initrd_ctx = { 0, 0, 0 }; ++static grub_efi_handle_t initrd_lf2_handle; ++static int initrd_use_loadfile2; ++static grub_efi_guid_t load_file2_guid = GRUB_EFI_LOAD_FILE2_PROTOCOL_GUID; ++static grub_efi_guid_t device_path_guid = GRUB_EFI_DEVICE_PATH_GUID; ++ + grub_err_t + grub_arch_efi_linux_check_image (struct linux_arch_kernel_header * lh) + { ++ struct grub_pe32_coff_header *coff_header; ++ struct grub_pe32_optional_header *optional_header; ++ + if (lh->magic != GRUB_LINUX_ARMXX_MAGIC_SIGNATURE) + return grub_error(GRUB_ERR_BAD_OS, "invalid magic number"); + +@@ -61,6 +70,21 @@ grub_arch_efi_linux_check_image (struct linux_arch_kernel_header * lh) + grub_dprintf ("linux", "UEFI stub kernel:\n"); + grub_dprintf ("linux", "PE/COFF header @ %08x\n", lh->hdr_offset); + ++ coff_header = (struct grub_pe32_coff_header *)((unsigned long)lh + lh->hdr_offset); ++ optional_header = (struct grub_pe32_optional_header *)(coff_header + 1); ++ ++ /* ++ * Linux kernels built for any architecture are guaranteed to support the ++ * LoadFile2 based initrd loading protocol if the image version is >= 1. ++ */ ++ if (optional_header->major_image_version >= 1) ++ initrd_use_loadfile2 = 1; ++ else ++ initrd_use_loadfile2 = 0; ++ ++ grub_dprintf ("linux", "LoadFile2 initrd loading %sabled\n", ++ initrd_use_loadfile2 ? "en" : "dis"); ++ + return GRUB_ERR_NONE; + } + +@@ -230,13 +254,86 @@ allocate_initrd_mem (int initrd_pages) + GRUB_EFI_LOADER_DATA); + } + ++struct initrd_media_device_path { ++ grub_efi_vendor_media_device_path_t vendor; ++ grub_efi_device_path_t end; ++} GRUB_PACKED; ++ ++#define LINUX_EFI_INITRD_MEDIA_GUID \ ++ { 0x5568e427, 0x68fc, 0x4f3d, \ ++ { 0xac, 0x74, 0xca, 0x55, 0x52, 0x31, 0xcc, 0x68 } \ ++ } ++ ++static struct initrd_media_device_path initrd_lf2_device_path = { ++ { ++ { ++ GRUB_EFI_MEDIA_DEVICE_PATH_TYPE, ++ GRUB_EFI_VENDOR_MEDIA_DEVICE_PATH_SUBTYPE, ++ sizeof(grub_efi_vendor_media_device_path_t), ++ }, ++ LINUX_EFI_INITRD_MEDIA_GUID ++ }, { ++ GRUB_EFI_END_DEVICE_PATH_TYPE, ++ GRUB_EFI_END_ENTIRE_DEVICE_PATH_SUBTYPE, ++ sizeof(grub_efi_device_path_t) ++ } ++}; ++ ++static grub_efi_status_t ++grub_efi_initrd_load_file2(grub_efi_load_file2_t *this, ++ grub_efi_device_path_t *device_path, ++ grub_efi_boolean_t boot_policy, ++ grub_efi_uintn_t *buffer_size, ++ void *buffer); ++ ++static grub_efi_load_file2_t initrd_lf2 = { ++ grub_efi_initrd_load_file2 ++}; ++ ++static grub_efi_status_t ++grub_efi_initrd_load_file2(grub_efi_load_file2_t *this, ++ grub_efi_device_path_t *device_path, ++ grub_efi_boolean_t boot_policy, ++ grub_efi_uintn_t *buffer_size, ++ void *buffer) ++{ ++ grub_efi_status_t status = GRUB_EFI_SUCCESS; ++ grub_efi_uintn_t initrd_size; ++ ++ if (!this || this != &initrd_lf2 || !buffer_size) ++ return GRUB_EFI_INVALID_PARAMETER; ++ ++ if (device_path->type != GRUB_EFI_END_DEVICE_PATH_TYPE || ++ device_path->subtype != GRUB_EFI_END_ENTIRE_DEVICE_PATH_SUBTYPE) ++ return GRUB_EFI_NOT_FOUND; ++ ++ if (boot_policy) ++ return GRUB_EFI_UNSUPPORTED; ++ ++ initrd_size = grub_get_initrd_size (&initrd_ctx); ++ if (!buffer || *buffer_size < initrd_size) ++ { ++ *buffer_size = initrd_size; ++ return GRUB_EFI_BUFFER_TOO_SMALL; ++ } ++ ++ grub_dprintf ("linux", "Providing initrd via LOAD_FILE2_PROTOCOL\n"); ++ ++ if (grub_initrd_load (&initrd_ctx, buffer)) ++ status = GRUB_EFI_LOAD_ERROR; ++ ++ grub_initrd_close (&initrd_ctx); ++ return status; ++} ++ + static grub_err_t + grub_cmd_initrd (grub_command_t cmd __attribute__ ((unused)), + int argc, char *argv[]) + { +- struct grub_linux_initrd_context initrd_ctx = { 0, 0, 0 }; + int initrd_size, initrd_pages; + void *initrd_mem = NULL; ++ grub_efi_boot_services_t *b; ++ grub_efi_status_t status; + + if (argc == 0) + { +@@ -254,6 +351,24 @@ grub_cmd_initrd (grub_command_t cmd __attribute__ ((unused)), + if (grub_initrd_init (argc, argv, &initrd_ctx)) + goto fail; + ++ if (initrd_use_loadfile2 && !initrd_lf2_handle) ++ { ++ b = grub_efi_system_table->boot_services; ++ status = b->install_multiple_protocol_interfaces (&initrd_lf2_handle, ++ &load_file2_guid, ++ &initrd_lf2, ++ &device_path_guid, ++ &initrd_lf2_device_path, ++ NULL); ++ if (status == GRUB_EFI_OUT_OF_RESOURCES) ++ { ++ grub_error (GRUB_ERR_OUT_OF_MEMORY, N_("out of memory")); ++ return grub_errno; ++ } ++ grub_dprintf ("linux", "LoadFile2 initrd loading protocol installed\n"); ++ return GRUB_ERR_NONE; ++ } ++ + initrd_size = grub_get_initrd_size (&initrd_ctx); + grub_dprintf ("linux", "Loading initrd\n"); + +-- +2.29.3 diff --git a/sys-boot/grub/files/grub-2.06-004-linux-ignore-fdt-unless-we-need-to-modify-it.patch b/sys-boot/grub/files/grub-2.06-004-linux-ignore-fdt-unless-we-need-to-modify-it.patch new file mode 100644 index 0000000..0655fab --- /dev/null +++ b/sys-boot/grub/files/grub-2.06-004-linux-ignore-fdt-unless-we-need-to-modify-it.patch @@ -0,0 +1,77 @@ +Now that we implemented supported for the LoadFile2 protocol for initrd +loading, there is no longer a need to pass the initrd parameters via +the device tree. This means there is no longer a reason to update the +device tree in the first place, and so we can ignore it entirely. + +The only remaining reason to deal with the devicetree is if we are +using the 'devicetree' command to load one from disk, so tweak the +logic in grub_fdt_install() to take that into account. + +Signed-off-by: Ard Biesheuvel <ard.biesheuvel@arm.com> +--- + grub-core/loader/arm64/linux.c | 22 +++++++++++----------- + grub-core/loader/efi/fdt.c | 7 +++++-- + 2 files changed, 16 insertions(+), 13 deletions(-) + +diff --git a/grub-core/loader/arm64/linux.c b/grub-core/loader/arm64/linux.c +index 6b03455d1..65f1275fb 100644 +--- a/grub-core/loader/arm64/linux.c ++++ b/grub-core/loader/arm64/linux.c +@@ -95,21 +95,21 @@ finalize_params_linux (void) + + void *fdt; + +- fdt = grub_fdt_load (GRUB_EFI_LINUX_FDT_EXTRA_SPACE); ++ /* Set initrd info */ ++ if (initrd_start && initrd_end > initrd_start) ++ { ++ fdt = grub_fdt_load (GRUB_EFI_LINUX_FDT_EXTRA_SPACE); + +- if (!fdt) +- goto failure; ++ if (!fdt) ++ goto failure; + +- node = grub_fdt_find_subnode (fdt, 0, "chosen"); +- if (node < 0) +- node = grub_fdt_add_subnode (fdt, 0, "chosen"); ++ node = grub_fdt_find_subnode (fdt, 0, "chosen"); ++ if (node < 0) ++ node = grub_fdt_add_subnode (fdt, 0, "chosen"); + +- if (node < 1) +- goto failure; ++ if (node < 1) ++ goto failure; + +- /* Set initrd info */ +- if (initrd_start && initrd_end > initrd_start) +- { + grub_dprintf ("linux", "Initrd @ %p-%p\n", + (void *) initrd_start, (void *) initrd_end); + +diff --git a/grub-core/loader/efi/fdt.c b/grub-core/loader/efi/fdt.c +index c86f283d7..771d455c7 100644 +--- a/grub-core/loader/efi/fdt.c ++++ b/grub-core/loader/efi/fdt.c +@@ -89,13 +89,16 @@ grub_fdt_install (void) + grub_efi_guid_t fdt_guid = GRUB_EFI_DEVICE_TREE_GUID; + grub_efi_status_t status; + ++ if (!fdt && !loaded_fdt) ++ return GRUB_ERR_NONE; ++ + b = grub_efi_system_table->boot_services; +- status = b->install_configuration_table (&fdt_guid, fdt); ++ status = b->install_configuration_table (&fdt_guid, fdt ?: loaded_fdt); + if (status != GRUB_EFI_SUCCESS) + return grub_error (GRUB_ERR_IO, "failed to install FDT"); + + grub_dprintf ("fdt", "Installed/updated FDT configuration table @ %p\n", +- fdt); ++ fdt ?: loaded_fdt); + return GRUB_ERR_NONE; + } + +-- +2.29.3 diff --git a/sys-boot/grub/files/grub-2.06-005-loader-move-arm64-linux-loader.patch b/sys-boot/grub/files/grub-2.06-005-loader-move-arm64-linux-loader.patch new file mode 100644 index 0000000..4a98b44 --- /dev/null +++ b/sys-boot/grub/files/grub-2.06-005-loader-move-arm64-linux-loader.patch @@ -0,0 +1,73 @@ +ARM64 linux loader code is written in such a way that it can be reused +across different architectures without much change. Move it to common +code so that RISC-V doesn't have to define a separate loader. + +Signed-off-by: Atish Patra <atish.patra@wdc.com> +--- + grub-core/Makefile.core.def | 4 ++-- + grub-core/loader/{arm64 => efi}/linux.c | 2 +- + include/grub/arm/linux.h | 2 +- + include/grub/arm64/linux.h | 2 +- + 4 files changed, 5 insertions(+), 5 deletions(-) + rename grub-core/loader/{arm64 => efi}/linux.c (99%) + +diff --git a/grub-core/Makefile.core.def b/grub-core/Makefile.core.def +index 8022e1c0a..b36cf663a 100644 +--- a/grub-core/Makefile.core.def ++++ b/grub-core/Makefile.core.def +@@ -1806,9 +1806,9 @@ module = { + sparc64_ieee1275 = loader/sparc64/ieee1275/linux.c; + ia64_efi = loader/ia64/efi/linux.c; + arm_coreboot = loader/arm/linux.c; +- arm_efi = loader/arm64/linux.c; ++ arm_efi = loader/efi/linux.c; + arm_uboot = loader/arm/linux.c; +- arm64 = loader/arm64/linux.c; ++ arm64 = loader/efi/linux.c; + riscv32 = loader/riscv/linux.c; + riscv64 = loader/riscv/linux.c; + common = loader/linux.c; +diff --git a/grub-core/loader/arm64/linux.c b/grub-core/loader/efi/linux.c +similarity index 99% +rename from grub-core/loader/arm64/linux.c +rename to grub-core/loader/efi/linux.c +index 65f1275fb..60f0fa264 100644 +--- a/grub-core/loader/arm64/linux.c ++++ b/grub-core/loader/efi/linux.c +@@ -60,7 +60,7 @@ grub_arch_efi_linux_check_image (struct linux_arch_kernel_header * lh) + struct grub_pe32_coff_header *coff_header; + struct grub_pe32_optional_header *optional_header; + +- if (lh->magic != GRUB_LINUX_ARMXX_MAGIC_SIGNATURE) ++ if (lh->magic != GRUB_LINUX_ARCH_MAGIC_SIGNATURE) + return grub_error(GRUB_ERR_BAD_OS, "invalid magic number"); + + if ((lh->code0 & 0xffff) != GRUB_PE32_MAGIC) +diff --git a/include/grub/arm/linux.h b/include/grub/arm/linux.h +index bcd5a7eb1..8c13978d2 100644 +--- a/include/grub/arm/linux.h ++++ b/include/grub/arm/linux.h +@@ -35,7 +35,7 @@ struct linux_arm_kernel_header { + }; + + #if defined(__arm__) +-# define GRUB_LINUX_ARMXX_MAGIC_SIGNATURE GRUB_LINUX_ARM_MAGIC_SIGNATURE ++# define GRUB_LINUX_ARCH_MAGIC_SIGNATURE GRUB_LINUX_ARM_MAGIC_SIGNATURE + # define linux_arch_kernel_header linux_arm_kernel_header + #endif + +diff --git a/include/grub/arm64/linux.h b/include/grub/arm64/linux.h +index 7e22b4ab6..effd870ef 100644 +--- a/include/grub/arm64/linux.h ++++ b/include/grub/arm64/linux.h +@@ -39,7 +39,7 @@ struct linux_arm64_kernel_header + }; + + #if defined(__aarch64__) +-# define GRUB_LINUX_ARMXX_MAGIC_SIGNATURE GRUB_LINUX_ARM64_MAGIC_SIGNATURE ++# define GRUB_LINUX_ARCH_MAGIC_SIGNATURE GRUB_LINUX_ARM64_MAGIC_SIGNATURE + # define linux_arch_kernel_header linux_arm64_kernel_header + #endif + +-- +2.29.3 diff --git a/sys-boot/grub/files/grub-2.06-006-riscv-update-image-header.patch b/sys-boot/grub/files/grub-2.06-006-riscv-update-image-header.patch new file mode 100644 index 0000000..5ebd4f2 --- /dev/null +++ b/sys-boot/grub/files/grub-2.06-006-riscv-update-image-header.patch @@ -0,0 +1,81 @@ +Update the RISC-V Linux kernel image headers as per the current header. + +Reference: +<Linux kernel source>/Documentation/riscv/boot-image-header.rst + +Signed-off-by: Atish Patra <atish.patra@wdc.com> +--- + include/grub/riscv32/linux.h | 15 ++++++++------- + include/grub/riscv64/linux.h | 15 ++++++++------- + 2 files changed, 16 insertions(+), 14 deletions(-) + +diff --git a/include/grub/riscv32/linux.h b/include/grub/riscv32/linux.h +index 512b777c8..de0dbdcd1 100644 +--- a/include/grub/riscv32/linux.h ++++ b/include/grub/riscv32/linux.h +@@ -19,20 +19,21 @@ + #ifndef GRUB_RISCV32_LINUX_HEADER + #define GRUB_RISCV32_LINUX_HEADER 1 + +-#define GRUB_LINUX_RISCV_MAGIC_SIGNATURE 0x52534356 /* 'RSCV' */ ++#define GRUB_LINUX_RISCV_MAGIC_SIGNATURE 0x05435352 /* 'RSC\0x5' */ + +-/* From linux/Documentation/riscv/booting.txt */ ++/* From linux/Documentation/riscv/boot-image-header.rst */ + struct linux_riscv_kernel_header + { + grub_uint32_t code0; /* Executable code */ + grub_uint32_t code1; /* Executable code */ +- grub_uint64_t text_offset; /* Image load offset */ +- grub_uint64_t res0; /* reserved */ +- grub_uint64_t res1; /* reserved */ ++ grub_uint64_t text_offset; /* Image load offset, little endian */ ++ grub_uint64_t image_size; /* Effective Image size, little endian */ ++ grub_uint64_t flags; /* kernel flags, little endian */ ++ grub_uint32_t version; /* Version of this header */ ++ grub_uint32_t res1; /* reserved */ + grub_uint64_t res2; /* reserved */ + grub_uint64_t res3; /* reserved */ +- grub_uint64_t res4; /* reserved */ +- grub_uint32_t magic; /* Magic number, little endian, "RSCV" */ ++ grub_uint32_t magic; /* Magic number, little endian, "RSC\x05" */ + grub_uint32_t hdr_offset; /* Offset of PE/COFF header */ + }; + +diff --git a/include/grub/riscv64/linux.h b/include/grub/riscv64/linux.h +index 3630c30fb..7c28bc922 100644 +--- a/include/grub/riscv64/linux.h ++++ b/include/grub/riscv64/linux.h +@@ -19,22 +19,23 @@ + #ifndef GRUB_RISCV64_LINUX_HEADER + #define GRUB_RISCV64_LINUX_HEADER 1 + +-#define GRUB_LINUX_RISCV_MAGIC_SIGNATURE 0x52534356 /* 'RSCV' */ ++#define GRUB_LINUX_RISCV_MAGIC_SIGNATURE 0x05435352 /* 'RSC\0x5' */ + + #define GRUB_EFI_PE_MAGIC 0x5A4D + +-/* From linux/Documentation/riscv/booting.txt */ ++/* From linux/Documentation/riscv/boot-image-header.rst */ + struct linux_riscv_kernel_header + { + grub_uint32_t code0; /* Executable code */ + grub_uint32_t code1; /* Executable code */ +- grub_uint64_t text_offset; /* Image load offset */ +- grub_uint64_t res0; /* reserved */ +- grub_uint64_t res1; /* reserved */ ++ grub_uint64_t text_offset; /* Image load offset, little endian */ ++ grub_uint64_t image_size; /* Effective Image size, little endian */ ++ grub_uint64_t flags; /* kernel flags, little endian */ ++ grub_uint32_t version; /* Version of this header */ ++ grub_uint32_t res1; /* reserved */ + grub_uint64_t res2; /* reserved */ + grub_uint64_t res3; /* reserved */ +- grub_uint64_t res4; /* reserved */ +- grub_uint32_t magic; /* Magic number, little endian, "RSCV" */ ++ grub_uint32_t magic; /* Magic number, little endian, "RSC\x05" */ + grub_uint32_t hdr_offset; /* Offset of PE/COFF header */ + }; + +-- +2.29.3 diff --git a/sys-boot/grub/files/grub-2.06-007-riscv-use-common-linux-loader.patch b/sys-boot/grub/files/grub-2.06-007-riscv-use-common-linux-loader.patch new file mode 100644 index 0000000..525d3a9 --- /dev/null +++ b/sys-boot/grub/files/grub-2.06-007-riscv-use-common-linux-loader.patch @@ -0,0 +1,117 @@ +RISC-V doesn't have to do anything very different from other architectures +to loader EFI stub linux kernel. As a result, just use the common linux +loader instead of defining a RISC-V specific linux loader. + +Signed-off-by: Atish Patra <atish.patra@wdc.com> +--- + grub-core/Makefile.core.def | 4 +-- + grub-core/loader/riscv/linux.c | 59 ---------------------------------- + include/grub/riscv32/linux.h | 1 + + include/grub/riscv64/linux.h | 1 + + 4 files changed, 4 insertions(+), 61 deletions(-) + delete mode 100644 grub-core/loader/riscv/linux.c + +diff --git a/grub-core/Makefile.core.def b/grub-core/Makefile.core.def +index b36cf663a..0536575bc 100644 +--- a/grub-core/Makefile.core.def ++++ b/grub-core/Makefile.core.def +@@ -1809,8 +1809,8 @@ module = { + arm_efi = loader/efi/linux.c; + arm_uboot = loader/arm/linux.c; + arm64 = loader/efi/linux.c; +- riscv32 = loader/riscv/linux.c; +- riscv64 = loader/riscv/linux.c; ++ riscv32 = loader/efi/linux.c; ++ riscv64 = loader/efi/linux.c; + common = loader/linux.c; + common = lib/cmdline.c; + enable = noemu; +diff --git a/grub-core/loader/riscv/linux.c b/grub-core/loader/riscv/linux.c +deleted file mode 100644 +index d17c488e1..000000000 +--- a/grub-core/loader/riscv/linux.c ++++ /dev/null +@@ -1,59 +0,0 @@ +-/* +- * GRUB -- GRand Unified Bootloader +- * Copyright (C) 2018 Free Software Foundation, Inc. +- * +- * GRUB is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 3 of the License, or +- * (at your option) any later version. +- * +- * GRUB is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with GRUB. If not, see <http://www.gnu.org/ |