mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-07-10 08:33:14 +00:00
[PATCH] i386: call efi_get_time during suspend
Function efi_get_time called not only during init kernel phase but also during suspend (from get_cmos_time). When it is called from get_cmos_time the corresponding runtime service should be called in virtual and not in physical mode. Signed-off-by: Artiom Myaskouvskey <artiom.myaskouvskey@intel.com> Signed-off-by: Andi Kleen <ak@suse.de> Cc: "Narayanan, Chandramouli" <chandramouli.narayanan@intel.com> Cc: "Jiossy, Rami" <rami.jiossy@intel.com> Cc: "Satt, Shai" <shai.satt@intel.com> Cc: Andi Kleen <ak@suse.de> Cc: Matt Domsch <Matt_Domsch@dell.com> Signed-off-by: Andrew Morton <akpm@osdl.org>
This commit is contained in:
parent
b0d0a4ba45
commit
e1cccf48b1
2 changed files with 13 additions and 6 deletions
|
@ -194,17 +194,24 @@ inline int efi_set_rtc_mmss(unsigned long nowtime)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
* This should only be used during kernel init and before runtime
|
* This is used during kernel init before runtime
|
||||||
* services have been remapped, therefore, we'll need to call in physical
|
* services have been remapped and also during suspend, therefore,
|
||||||
* mode. Note, this call isn't used later, so mark it __init.
|
* we'll need to call both in physical and virtual modes.
|
||||||
*/
|
*/
|
||||||
inline unsigned long __init efi_get_time(void)
|
inline unsigned long efi_get_time(void)
|
||||||
{
|
{
|
||||||
efi_status_t status;
|
efi_status_t status;
|
||||||
efi_time_t eft;
|
efi_time_t eft;
|
||||||
efi_time_cap_t cap;
|
efi_time_cap_t cap;
|
||||||
|
|
||||||
|
if (efi.get_time) {
|
||||||
|
/* if we are in virtual mode use remapped function */
|
||||||
|
status = efi.get_time(&eft, &cap);
|
||||||
|
} else {
|
||||||
|
/* we are in physical mode */
|
||||||
status = phys_efi_get_time(&eft, &cap);
|
status = phys_efi_get_time(&eft, &cap);
|
||||||
|
}
|
||||||
|
|
||||||
if (status != EFI_SUCCESS)
|
if (status != EFI_SUCCESS)
|
||||||
printk("Oops: efitime: can't read time status: 0x%lx\n",status);
|
printk("Oops: efitime: can't read time status: 0x%lx\n",status);
|
||||||
|
|
||||||
|
|
|
@ -300,7 +300,7 @@ extern int efi_mem_attribute_range (unsigned long phys_addr, unsigned long size,
|
||||||
extern int __init efi_uart_console_only (void);
|
extern int __init efi_uart_console_only (void);
|
||||||
extern void efi_initialize_iomem_resources(struct resource *code_resource,
|
extern void efi_initialize_iomem_resources(struct resource *code_resource,
|
||||||
struct resource *data_resource);
|
struct resource *data_resource);
|
||||||
extern unsigned long __init efi_get_time(void);
|
extern unsigned long efi_get_time(void);
|
||||||
extern int __init efi_set_rtc_mmss(unsigned long nowtime);
|
extern int __init efi_set_rtc_mmss(unsigned long nowtime);
|
||||||
extern struct efi_memory_map memmap;
|
extern struct efi_memory_map memmap;
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue