Fix ARM Linux Loader on non-FDT platforms.
This commit is contained in:
		
							parent
							
								
									bf082198e2
								
							
						
					
					
						commit
						0d8b81f89a
					
				
					 5 changed files with 162 additions and 34 deletions
				
			
		|  | @ -23,15 +23,19 @@ | |||
| #define LINUX_ZIMAGE_OFFSET 0x24 | ||||
| #define LINUX_ZIMAGE_MAGIC  0x016f2818 | ||||
| 
 | ||||
| #define ARM_FDT_MACHINE_TYPE 0xFFFFFFFF | ||||
| enum | ||||
|   { | ||||
|     GRUB_ARM_MACHINE_TYPE_RASPBERRY_PI = 3138, | ||||
|     GRUB_ARM_MACHINE_TYPE_FDT = 0xFFFFFFFF | ||||
|   }; | ||||
| 
 | ||||
| #if defined GRUB_MACHINE_UBOOT | ||||
| # include <grub/uboot/uboot.h> | ||||
| # define LINUX_ADDRESS        (start_of_ram + 0x8000) | ||||
| # define LINUX_INITRD_ADDRESS (start_of_ram + 0x02000000) | ||||
| # define LINUX_FDT_ADDRESS    (LINUX_INITRD_ADDRESS - 0x10000) | ||||
| # define firmware_get_boot_data grub_uboot_get_boot_data | ||||
| # define firmware_get_machine_type grub_uboot_get_machine_type | ||||
| # define grub_arm_firmware_get_boot_data grub_uboot_get_boot_data | ||||
| # define grub_arm_firmware_get_machine_type grub_uboot_get_machine_type | ||||
| #elif defined GRUB_MACHINE_EFI | ||||
| # include <grub/efi/efi.h> | ||||
| # include <grub/machine/loader.h> | ||||
|  | @ -41,19 +45,17 @@ | |||
| # define LINUX_INITRD_PHYS_OFFSET (LINUX_PHYS_OFFSET + 0x02000000) | ||||
| # define LINUX_FDT_PHYS_OFFSET    (LINUX_INITRD_PHYS_OFFSET - 0x10000) | ||||
| static inline grub_addr_t | ||||
| firmware_get_boot_data (void) | ||||
| grub_arm_firmware_get_boot_data (void) | ||||
| { | ||||
|   return 0; | ||||
| } | ||||
| static inline grub_uint32_t | ||||
| firmware_get_machine_type (void) | ||||
| grub_arm_firmware_get_machine_type (void) | ||||
| { | ||||
|   return ARM_FDT_MACHINE_TYPE; | ||||
|   return GRUB_ARM_MACHINE_TYPE_FDT; | ||||
| } | ||||
| #endif | ||||
| 
 | ||||
| #define FDT_ADDITIONAL_ENTRIES_SIZE	0x300 | ||||
| 
 | ||||
| typedef void (*kernel_entry_t) (int, unsigned long, void *); | ||||
| 
 | ||||
| #endif /* ! GRUB_LINUX_CPU_HEADER */ | ||||
|  |  | |||
|  | @ -83,6 +83,7 @@ typedef struct { | |||
| 	grub_fdt_set_header(fdt, size_dt_struct, value) | ||||
| 
 | ||||
| int grub_fdt_check_header (void *fdt, unsigned int size); | ||||
| int grub_fdt_check_header_nosize (void *fdt); | ||||
| int grub_fdt_find_subnode (const void *fdt, unsigned int parentoffset, | ||||
| 			   const char *name); | ||||
| int grub_fdt_add_subnode (void *fdt, unsigned int parentoffset, | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue