|
|
|
|
|
|
|
|
|
|
xen-ia64-devel
[Xen-ia64-devel] [patch 10/11] ia64: kexec: add __va_efi
sal_desc_entry_point() converts physical addresses into virtual
addresses using __va() and these virtual addresses are used
to register the SAL and PAL handlers - which exist in firmware
memory.
As the mapping of firmware memory is being moved from
a PAGE_OFFSET of (0xf << 60) to a PAGE_OFFSET of (0xe << 60),
__va() does not provide the correct virtual address.
By adding __va_efi(), which uses EFI_PAGE_OFFSET=(0xe << 60),
and using this in sal_desc_entry_point(), the correct address is
used.
On an HP rx2600 this eliminates the problem where the SAL rendezvous address
can't be registered and subsequently the boot fails. I suspect it
solves similar problems that have been seen on other HP machines too.
Actually, its rather amazing that the HP rx2620 and Tiger2 that
I have been using work without this fix.
Signed-off-by: Simon Horman <horms@xxxxxxxxxxxx>
Index: xen-unstable.hg/xen/arch/ia64/linux-xen/sal.c
===================================================================
--- xen-unstable.hg.orig/xen/arch/ia64/linux-xen/sal.c 2008-03-19
11:52:42.000000000 +0900
+++ xen-unstable.hg/xen/arch/ia64/linux-xen/sal.c 2008-03-19
11:53:03.000000000 +0900
@@ -121,8 +121,8 @@ static void __init
sal_desc_entry_point (void *p)
{
struct ia64_sal_desc_entry_point *ep = p;
- ia64_pal_handler_init(__va(ep->pal_proc));
- ia64_sal_handler_init(__va(ep->sal_proc), __va(ep->gp));
+ ia64_pal_handler_init(__va_efi(ep->pal_proc));
+ ia64_sal_handler_init(__va_efi(ep->sal_proc), __va_efi(ep->gp));
}
#ifdef CONFIG_SMP
Index: xen-unstable.hg/xen/include/asm-ia64/xenpage.h
===================================================================
--- xen-unstable.hg.orig/xen/include/asm-ia64/xenpage.h 2008-03-19
11:52:42.000000000 +0900
+++ xen-unstable.hg/xen/include/asm-ia64/xenpage.h 2008-03-19
11:54:41.000000000 +0900
@@ -97,5 +97,14 @@ static inline u64 pa_clear_uc(u64 paddr)
/* It is sometimes very useful to have unsigned long as result. */
#define __va_ul(x) ({xen_va _v; _v.l = (long) (x); _v.f.reg = -1; _v.l;})
+/* Do __va_efi() should just call __va() until the use of
+ * __IA64_EFI_CACHED_OFFSET is activated in efi_enter_virtual_mode()
+ */
+#if 0
+#define __va_efi(x) ((unsigned long)(x) | __IA64_EFI_CACHED_OFFSET)
+#else
+#define __va_efi(x) __va(x)
+#endif
+
#endif
#endif /* _ASM_IA64_XENPAGE_H */
--
--
Horms
_______________________________________________
Xen-ia64-devel mailing list
Xen-ia64-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-ia64-devel
|
<Prev in Thread] |
Current Thread |
[Next in Thread>
|
- [Xen-ia64-devel] [patch 00/11] ia64: kexec: Map EFI memory in the same location as Linux (v20080320), Simon Horman
- [Xen-ia64-devel] [patch 03/11] ia64: kexec: Header changes in preparation for EFI RID, Simon Horman
- [Xen-ia64-devel] [patch 01/11] ia64: kexec: Unpin the correct VHPT TR in ia64_do_tlb_purge, Simon Horman
- [Xen-ia64-devel] [patch 02/11] ia64: kexec: Unpin shared_info and mapped_regs TR in ia64_do_tlb_purge, Simon Horman
- [Xen-ia64-devel] [patch 04/11] ia64: kexec: Repining for EFI RID, Simon Horman
- [Xen-ia64-devel] [patch 05/11] ia64: kexec: Define macros for EFI RID, Simon Horman
- [Xen-ia64-devel] [patch 10/11] ia64: kexec: add __va_efi,
Simon Horman <=
- [Xen-ia64-devel] [patch 07/11] ia64: kexec: Allow EFI_RID to be used in ivt.S, Simon Horman
- [Xen-ia64-devel] [patch 08/11] ia64: kexec: Add identity mapping of EFI memory to alt_dtlb_miss, Simon Horman
- [Xen-ia64-devel] [patch 09/11] ia64: kexec: define EFI offsets for identity mapping, Simon Horman
- [Xen-ia64-devel] [patch 06/11] ia64: kexec: Use a separate RID for EFI, Simon Horman
- [Xen-ia64-devel] [patch 11/11] ia64: kexec: Map EFI regions into the same place they are maped into in Linux, Simon Horman
- [Xen-ia64-devel] Re: [patch 00/11] ia64: kexec: Map EFI memory in the same location as Linux (v20080320), Alex Williamson
|
|
|
|
|