mirror of
https://github.com/u-boot/u-boot.git
synced 2025-04-22 12:54:37 +00:00
efi_loader: use hardware device tree by default
If the bootefi command is called without passing the address of a device tree, the internal device tree is used. For devices with a hardware device tree it is preferable to used the hardware device tree in this case. Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
This commit is contained in:
parent
7a597259d2
commit
753aa18f17
1 changed files with 14 additions and 8 deletions
|
@ -200,14 +200,16 @@ static void *get_config_table(const efi_guid_t *guid)
|
||||||
*
|
*
|
||||||
* If fdt_addr is available, the device tree located at that memory address will
|
* If fdt_addr is available, the device tree located at that memory address will
|
||||||
* will be installed as configuration table, otherwise the device tree located
|
* will be installed as configuration table, otherwise the device tree located
|
||||||
* at the address indicated by environment variable fdtcontroladdr will be used.
|
* at the address indicated by environment variable fdt_addr or as fallback
|
||||||
|
* fdtcontroladdr will be used.
|
||||||
*
|
*
|
||||||
* On architectures using ACPI tables device trees shall not be installed as
|
* On architectures using ACPI tables device trees shall not be installed as
|
||||||
* configuration table.
|
* configuration table.
|
||||||
*
|
*
|
||||||
* @fdt_addr: address of device tree or EFI_FDT_USE_INTERNAL to use the
|
* @fdt_addr: address of device tree or EFI_FDT_USE_INTERNAL to use the
|
||||||
* internal device tree as indicated by environment variable
|
* the hardware device tree as indicated by environment variable
|
||||||
* fdtcontroladdr
|
* fdt_addr or as fallback the internal device tree as indicated by
|
||||||
|
* the environment variable fdtcontroladdr
|
||||||
* Return: status code
|
* Return: status code
|
||||||
*/
|
*/
|
||||||
static efi_status_t efi_install_fdt(uintptr_t fdt_addr)
|
static efi_status_t efi_install_fdt(uintptr_t fdt_addr)
|
||||||
|
@ -232,15 +234,19 @@ static efi_status_t efi_install_fdt(uintptr_t fdt_addr)
|
||||||
/* Look for device tree that is already installed */
|
/* Look for device tree that is already installed */
|
||||||
if (get_config_table(&efi_guid_fdt))
|
if (get_config_table(&efi_guid_fdt))
|
||||||
return EFI_SUCCESS;
|
return EFI_SUCCESS;
|
||||||
/* Use our own device tree as default */
|
/* Check if there is a hardware device tree */
|
||||||
|
fdt_opt = env_get("fdt_addr");
|
||||||
|
/* Use our own device tree as fallback */
|
||||||
|
if (!fdt_opt) {
|
||||||
fdt_opt = env_get("fdtcontroladdr");
|
fdt_opt = env_get("fdtcontroladdr");
|
||||||
if (!fdt_opt) {
|
if (!fdt_opt) {
|
||||||
printf("ERROR: need device tree\n");
|
printf("ERROR: need device tree\n");
|
||||||
return EFI_NOT_FOUND;
|
return EFI_NOT_FOUND;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
fdt_addr = simple_strtoul(fdt_opt, NULL, 16);
|
fdt_addr = simple_strtoul(fdt_opt, NULL, 16);
|
||||||
if (!fdt_addr) {
|
if (!fdt_addr) {
|
||||||
printf("ERROR: invalid $fdtcontroladdr\n");
|
printf("ERROR: invalid $fdt_addr or $fdtcontroladdr\n");
|
||||||
return EFI_LOAD_ERROR;
|
return EFI_LOAD_ERROR;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue