From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from list by lists.gnu.org with archive (Exim 4.71) id 1c5UDt-000439-QA for mharc-grub-devel@gnu.org; Sat, 12 Nov 2016 04:03:41 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:49537) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1c5UDs-00042o-CI for grub-devel@gnu.org; Sat, 12 Nov 2016 04:03:41 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1c5UDp-0008JI-5X for grub-devel@gnu.org; Sat, 12 Nov 2016 04:03:40 -0500 Received: from mail-lf0-x244.google.com ([2a00:1450:4010:c07::244]:34490) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1c5UDo-0008J4-Tb for grub-devel@gnu.org; Sat, 12 Nov 2016 04:03:37 -0500 Received: by mail-lf0-x244.google.com with SMTP id o141so2785775lff.1 for ; Sat, 12 Nov 2016 01:03:36 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=subject:to:references:cc:from:message-id:date:user-agent :mime-version:in-reply-to:content-transfer-encoding; bh=jfbDSAkqJ5qCmYQSTz8Xj87xSxRvHhsJUig51NQXuKg=; b=Kq7RiCfJy41zJzVc2WCCi1fUB8DLK9scufnjXggWu5NaukIf7A8gIfyBAQoklfL3q/ +lYtbuCufjHCa9JfrnD6S/p1PxNB0Cy08RFNLjGqoum1f5aZ0VdZ+icIjDpaLfiG+JRJ DCfwoeSZf7DGxNQrVVPkstnjvFF6nMyfImY7xGhx0czABqmNNu4d/25KjJJmm22u0AOf ob8JcrygPYqvPhK8tksgZCAEe9MLBhNaMuOr6I9/7zhWNyfrmCHssO2wDdqjkickamrO YXNWShgDMxzsO2OAm0WR4cCVA1/ixmz+GW0srA2kFbD+x5KUb2iGbiPcMK1/OuDUJjN3 HCPQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:subject:to:references:cc:from:message-id:date :user-agent:mime-version:in-reply-to:content-transfer-encoding; bh=jfbDSAkqJ5qCmYQSTz8Xj87xSxRvHhsJUig51NQXuKg=; b=dPHirifLCeKRyWIxc+caz/nVv7fktgyx/nVbj4rQNb3ElusA0lCxCkqBbOlZQEE4sm 2qUP/npSzQ+hoPKmrLE3+SuflP/OoXSJkKF2jF5wJ+v25xAYQjweMfCaI7a7RHZLM/3K lEBkiHWN/JFdlZqDUCwA/Ok0GxP/2gFG2FN0xuNk5ud+KKSOXixrUg8eq+XfePDAOLUL /mi9Tp+b6BbYTAepFJACGM7wilUbGssJHLs03nG+XfNGd8zQ6nWrpFEm9qxWHR9BO+2U FnfA4MA+gTX7hptsG6Ry0u8Yr7STWv2edZSFVozt4aH5Yq9Evk3pJ3AYSQ5dNGEwOrB9 cu+w== X-Gm-Message-State: ABUngvfnsXR7oGaCQsMo6Pi8qpjT4ehdMHVJBzWTQf6aygqVIboGp7gU4X0/x1Ndlh2Q4A== X-Received: by 10.25.199.198 with SMTP id x189mr4109270lff.164.1478941415375; Sat, 12 Nov 2016 01:03:35 -0800 (PST) Received: from [192.168.1.44] (ppp109-252-90-55.pppoe.spdop.ru. [109.252.90.55]) by smtp.gmail.com with ESMTPSA id v26sm2489420lja.30.2016.11.12.01.03.34 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sat, 12 Nov 2016 01:03:34 -0800 (PST) Subject: Re: [PATCH 1/2] arm64: Move firmware fdt search into global function To: The development of GNU GRUB References: <1456701744-202295-1-git-send-email-agraf@suse.de> Cc: leif.lindholm@linaro.org From: Andrei Borzenkov Message-ID: <77c2cdca-3a1c-f5be-c60e-00a8051d047d@gmail.com> Date: Sat, 12 Nov 2016 12:03:33 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.4.0 MIME-Version: 1.0 In-Reply-To: <1456701744-202295-1-git-send-email-agraf@suse.de> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 2a00:1450:4010:c07::244 X-BeenThere: grub-devel@gnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: The development of GNU GRUB List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 12 Nov 2016 09:03:41 -0000 29.02.2016 02:22, Alexander Graf пишет: > Searching for a device tree that EFI passes to us via configuration tables > is nothing architecture specific. Move it into generic code. > > Signed-off-by: Alexander Graf > --- > grub-core/kern/efi/init.c | 22 ++++++++++++++++++++++ > grub-core/loader/arm64/fdt.c | 24 +----------------------- > include/grub/efi/efi.h | 2 ++ > 3 files changed, 25 insertions(+), 23 deletions(-) > > diff --git a/grub-core/kern/efi/init.c b/grub-core/kern/efi/init.c > index e9c85de..fb90ecd 100644 > --- a/grub-core/kern/efi/init.c > +++ b/grub-core/kern/efi/init.c > @@ -72,6 +72,28 @@ grub_machine_get_bootlocation (char **device, char **path) > } > } > > +void * > +grub_efi_get_firmware_fdt (void) > +{ > + grub_efi_configuration_table_t *tables; > + grub_efi_guid_t fdt_guid = GRUB_EFI_DEVICE_TREE_GUID; > + void *firmware_fdt = NULL; > + unsigned int i; > + > + /* Look for FDT in UEFI config tables. */ > + tables = grub_efi_system_table->configuration_table; > + > + for (i = 0; i < grub_efi_system_table->num_table_entries; i++) > + if (grub_memcmp (&tables[i].vendor_guid, &fdt_guid, sizeof (fdt_guid)) == 0) > + { > + firmware_fdt = tables[i].vendor_table; > + grub_dprintf ("linux", "found registered FDT @ %p\n", firmware_fdt); > + break; > + } > + > + return firmware_fdt; > +} > + Is it relevant for x86? I cannot even find anything related to FDT or "device tree" in UEFI spec, it falls under vendor extensions. What other use it has except in Linux loader? I really fail to see why it should be moved into core until at least one more non-trivial caller is present. > void > grub_efi_fini (void) > { > diff --git a/grub-core/loader/arm64/fdt.c b/grub-core/loader/arm64/fdt.c > index 5202c14..db49cf6 100644 > --- a/grub-core/loader/arm64/fdt.c > +++ b/grub-core/loader/arm64/fdt.c > @@ -28,28 +28,6 @@ > static void *loaded_fdt; > static void *fdt; > > -static void * > -get_firmware_fdt (void) > -{ > - grub_efi_configuration_table_t *tables; > - grub_efi_guid_t fdt_guid = GRUB_EFI_DEVICE_TREE_GUID; > - void *firmware_fdt = NULL; > - unsigned int i; > - > - /* Look for FDT in UEFI config tables. */ > - tables = grub_efi_system_table->configuration_table; > - > - for (i = 0; i < grub_efi_system_table->num_table_entries; i++) > - if (grub_memcmp (&tables[i].vendor_guid, &fdt_guid, sizeof (fdt_guid)) == 0) > - { > - firmware_fdt = tables[i].vendor_table; > - grub_dprintf ("linux", "found registered FDT @ %p\n", firmware_fdt); > - break; > - } > - > - return firmware_fdt; > -} > - > void * > grub_fdt_load (grub_size_t additional_size) > { > @@ -65,7 +43,7 @@ grub_fdt_load (grub_size_t additional_size) > if (loaded_fdt) > raw_fdt = loaded_fdt; > else > - raw_fdt = get_firmware_fdt(); > + raw_fdt = grub_efi_get_firmware_fdt(); > > size = > raw_fdt ? grub_fdt_get_totalsize (raw_fdt) : GRUB_FDT_EMPTY_TREE_SZ; > diff --git a/include/grub/efi/efi.h b/include/grub/efi/efi.h > index 0e6fd86..2acf85e 100644 > --- a/include/grub/efi/efi.h > +++ b/include/grub/efi/efi.h > @@ -81,6 +81,8 @@ extern void (*EXPORT_VAR(grub_efi_net_config)) (grub_efi_handle_t hnd, > char **device, > char **path); > > +void *EXPORT_FUNC(grub_efi_get_firmware_fdt)(void); > + > grub_addr_t grub_efi_modules_addr (void); > > void grub_efi_mm_init (void); >