Message ID | 1372183863-11333-3-git-send-email-leif.lindholm@linaro.org |
---|---|
State | New |
Headers | show |
On Tue, Jun 25, 2013 at 7:11 PM, Leif Lindholm <leif.lindholm@linaro.org> wrote: > efi_lookup_mapped_addr is a handy helper function for translating > a physical address to the corresponding virtual one by scanning > through memmap.map. > > This patch breaks it out into a new file for use elsewhere. > > Signed-off-by: Leif Lindholm <leif.lindholm@linaro.org> > --- > arch/x86/platform/efi/efi.c | 28 ---------------------------- > drivers/firmware/efi/Makefile | 2 +- > drivers/firmware/efi/efi-helper.c | 33 +++++++++++++++++++++++++++++++++ > 3 files changed, 34 insertions(+), 29 deletions(-) > create mode 100644 drivers/firmware/efi/efi-helper.c I /think/ you should be able to put this directly into drivers/firmware/efi/efi.c > diff --git a/drivers/firmware/efi/efi-helper.c b/drivers/firmware/efi/efi-helper.c > new file mode 100644 > index 0000000..c5c2c72 > --- /dev/null > +++ b/drivers/firmware/efi/efi-helper.c > @@ -0,0 +1,33 @@ > +/* > + * Common [U]EFI support helper functions across architectures. > + */ > + > +#include <linux/efi.h> > + > +/* > + * We can't ioremap data in EFI boot services RAM, because we've already mapped > + * it as RAM. So, look it up in the existing EFI memory map instead. Only > + * callable after efi_enter_virtual_mode and before efi_free_boot_services. > + */ > +void __iomem *efi_lookup_mapped_addr(u64 phys_addr) Can be __init annotated. Although it's a good idea to do that in a separate patch. Otherwise looks good to me. Reviewed-by: Grant Likely <grant.likely@linaro.org>
On Tue, 25 Jun, at 07:11:01PM, Leif Lindholm wrote: > efi_lookup_mapped_addr is a handy helper function for translating > a physical address to the corresponding virtual one by scanning > through memmap.map. > > This patch breaks it out into a new file for use elsewhere. > > Signed-off-by: Leif Lindholm <leif.lindholm@linaro.org> > --- > arch/x86/platform/efi/efi.c | 28 ---------------------------- > drivers/firmware/efi/Makefile | 2 +- > drivers/firmware/efi/efi-helper.c | 33 +++++++++++++++++++++++++++++++++ > 3 files changed, 34 insertions(+), 29 deletions(-) > create mode 100644 drivers/firmware/efi/efi-helper.c I'm not sure this function needs its own file. drivers/firmware/efi/efi.c is a suitable place for this.
On Wed, Jun 26, 2013 at 02:32:17PM +0100, Matt Fleming wrote: > On Tue, 25 Jun, at 07:11:01PM, Leif Lindholm wrote: > > efi_lookup_mapped_addr is a handy helper function for translating > > a physical address to the corresponding virtual one by scanning > > through memmap.map. > > > > This patch breaks it out into a new file for use elsewhere. > > > > Signed-off-by: Leif Lindholm <leif.lindholm@linaro.org> > > --- > > arch/x86/platform/efi/efi.c | 28 ---------------------------- > > drivers/firmware/efi/Makefile | 2 +- > > drivers/firmware/efi/efi-helper.c | 33 +++++++++++++++++++++++++++++++++ > > 3 files changed, 34 insertions(+), 29 deletions(-) > > create mode 100644 drivers/firmware/efi/efi-helper.c > > I'm not sure this function needs its own file. drivers/firmware/efi/efi.c > is a suitable place for this. Sure. Would you be happy for me to start moving the other things mentioned (config table parsing, common debug printout, global structs) in there too? / Leif
On Wed, 26 Jun, at 04:11:30PM, Leif Lindholm wrote: > Sure. > Would you be happy for me to start moving the other things mentioned > (config table parsing, common debug printout, global structs) in there too? Super, super happy.
diff --git a/arch/x86/platform/efi/efi.c b/arch/x86/platform/efi/efi.c index 5ae2eb0..d1a1b6b 100644 --- a/arch/x86/platform/efi/efi.c +++ b/arch/x86/platform/efi/efi.c @@ -814,34 +814,6 @@ static void __init runtime_code_page_mkexec(void) } } -/* - * We can't ioremap data in EFI boot services RAM, because we've already mapped - * it as RAM. So, look it up in the existing EFI memory map instead. Only - * callable after efi_enter_virtual_mode and before efi_free_boot_services. - */ -void __iomem *efi_lookup_mapped_addr(u64 phys_addr) -{ - void *p; - if (WARN_ON(!memmap.map)) - return NULL; - for (p = memmap.map; p < memmap.map_end; p += memmap.desc_size) { - efi_memory_desc_t *md = p; - u64 size = md->num_pages << EFI_PAGE_SHIFT; - u64 end = md->phys_addr + size; - if (!(md->attribute & EFI_MEMORY_RUNTIME) && - md->type != EFI_BOOT_SERVICES_CODE && - md->type != EFI_BOOT_SERVICES_DATA) - continue; - if (!md->virt_addr) - continue; - if (phys_addr >= md->phys_addr && phys_addr < end) { - phys_addr += md->virt_addr - md->phys_addr; - return (__force void __iomem *)(unsigned long)phys_addr; - } - } - return NULL; -} - void efi_memory_uc(u64 addr, unsigned long size) { unsigned long page_shift = 1UL << EFI_PAGE_SHIFT; diff --git a/drivers/firmware/efi/Makefile b/drivers/firmware/efi/Makefile index 99245ab..629a513 100644 --- a/drivers/firmware/efi/Makefile +++ b/drivers/firmware/efi/Makefile @@ -1,6 +1,6 @@ # # Makefile for linux kernel # -obj-y += efi.o vars.o +obj-y += efi.o vars.o efi-helper.o obj-$(CONFIG_EFI_VARS) += efivars.o obj-$(CONFIG_EFI_VARS_PSTORE) += efi-pstore.o diff --git a/drivers/firmware/efi/efi-helper.c b/drivers/firmware/efi/efi-helper.c new file mode 100644 index 0000000..c5c2c72 --- /dev/null +++ b/drivers/firmware/efi/efi-helper.c @@ -0,0 +1,33 @@ +/* + * Common [U]EFI support helper functions across architectures. + */ + +#include <linux/efi.h> + +/* + * We can't ioremap data in EFI boot services RAM, because we've already mapped + * it as RAM. So, look it up in the existing EFI memory map instead. Only + * callable after efi_enter_virtual_mode and before efi_free_boot_services. + */ +void __iomem *efi_lookup_mapped_addr(u64 phys_addr) +{ + void *p; + if (WARN_ON(!memmap.map)) + return NULL; + for (p = memmap.map; p < memmap.map_end; p += memmap.desc_size) { + efi_memory_desc_t *md = p; + u64 size = md->num_pages << EFI_PAGE_SHIFT; + u64 end = md->phys_addr + size; + if (!(md->attribute & EFI_MEMORY_RUNTIME) && + md->type != EFI_BOOT_SERVICES_CODE && + md->type != EFI_BOOT_SERVICES_DATA) + continue; + if (!md->virt_addr) + continue; + if (phys_addr >= md->phys_addr && phys_addr < end) { + phys_addr += md->virt_addr - md->phys_addr; + return (__force void __iomem *)(unsigned long)phys_addr; + } + } + return NULL; +}
efi_lookup_mapped_addr is a handy helper function for translating a physical address to the corresponding virtual one by scanning through memmap.map. This patch breaks it out into a new file for use elsewhere. Signed-off-by: Leif Lindholm <leif.lindholm@linaro.org> --- arch/x86/platform/efi/efi.c | 28 ---------------------------- drivers/firmware/efi/Makefile | 2 +- drivers/firmware/efi/efi-helper.c | 33 +++++++++++++++++++++++++++++++++ 3 files changed, 34 insertions(+), 29 deletions(-) create mode 100644 drivers/firmware/efi/efi-helper.c