mirror of https://gitee.com/openkylin/linux.git
efi/ia64: Move HCDP and MPS table handling into IA64 arch code
The HCDP and MPS tables are Itanium specific EFI config tables, so move their handling to ia64 arch code. Tested-by: Tony Luck <tony.luck@intel.com> # arch/ia64 Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
This commit is contained in:
parent
50d53c58dd
commit
120540f230
|
@ -45,11 +45,15 @@
|
||||||
|
|
||||||
#define EFI_DEBUG 0
|
#define EFI_DEBUG 0
|
||||||
|
|
||||||
|
static unsigned long mps_phys = EFI_INVALID_TABLE_ADDR;
|
||||||
static __initdata unsigned long palo_phys;
|
static __initdata unsigned long palo_phys;
|
||||||
|
|
||||||
|
unsigned long hcdp_phys = EFI_INVALID_TABLE_ADDR;
|
||||||
unsigned long sal_systab_phys = EFI_INVALID_TABLE_ADDR;
|
unsigned long sal_systab_phys = EFI_INVALID_TABLE_ADDR;
|
||||||
|
|
||||||
static __initdata efi_config_table_type_t arch_tables[] = {
|
static __initdata efi_config_table_type_t arch_tables[] = {
|
||||||
|
{HCDP_TABLE_GUID, "HCDP", &hcdp_phys},
|
||||||
|
{MPS_TABLE_GUID, "MPS", &mps_phys},
|
||||||
{PROCESSOR_ABSTRACTION_LAYER_OVERWRITE_GUID, "PALO", &palo_phys},
|
{PROCESSOR_ABSTRACTION_LAYER_OVERWRITE_GUID, "PALO", &palo_phys},
|
||||||
{SAL_SYSTEM_TABLE_GUID, "SALsystab", &sal_systab_phys},
|
{SAL_SYSTEM_TABLE_GUID, "SALsystab", &sal_systab_phys},
|
||||||
{NULL_GUID, NULL, 0},
|
{NULL_GUID, NULL, 0},
|
||||||
|
@ -1351,3 +1355,12 @@ vmcore_find_descriptor_size (unsigned long address)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
char *efi_systab_show_arch(char *str)
|
||||||
|
{
|
||||||
|
if (mps_phys != EFI_INVALID_TABLE_ADDR)
|
||||||
|
str += sprintf(str, "MPS=0x%lx\n", mps_phys);
|
||||||
|
if (hcdp_phys != EFI_INVALID_TABLE_ADDR)
|
||||||
|
str += sprintf(str, "HCDP=0x%lx\n", hcdp_phys);
|
||||||
|
return str;
|
||||||
|
}
|
||||||
|
|
|
@ -65,12 +65,10 @@ static efi_config_table_type_t arch_tables[] __initdata = {
|
||||||
};
|
};
|
||||||
|
|
||||||
static const unsigned long * const efi_tables[] = {
|
static const unsigned long * const efi_tables[] = {
|
||||||
&efi.mps,
|
|
||||||
&efi.acpi,
|
&efi.acpi,
|
||||||
&efi.acpi20,
|
&efi.acpi20,
|
||||||
&efi.smbios,
|
&efi.smbios,
|
||||||
&efi.smbios3,
|
&efi.smbios3,
|
||||||
&efi.hcdp,
|
|
||||||
&efi.uga,
|
&efi.uga,
|
||||||
#ifdef CONFIG_X86_UV
|
#ifdef CONFIG_X86_UV
|
||||||
&uv_systab_phys,
|
&uv_systab_phys,
|
||||||
|
|
|
@ -35,12 +35,10 @@
|
||||||
#include <asm/early_ioremap.h>
|
#include <asm/early_ioremap.h>
|
||||||
|
|
||||||
struct efi __read_mostly efi = {
|
struct efi __read_mostly efi = {
|
||||||
.mps = EFI_INVALID_TABLE_ADDR,
|
|
||||||
.acpi = EFI_INVALID_TABLE_ADDR,
|
.acpi = EFI_INVALID_TABLE_ADDR,
|
||||||
.acpi20 = EFI_INVALID_TABLE_ADDR,
|
.acpi20 = EFI_INVALID_TABLE_ADDR,
|
||||||
.smbios = EFI_INVALID_TABLE_ADDR,
|
.smbios = EFI_INVALID_TABLE_ADDR,
|
||||||
.smbios3 = EFI_INVALID_TABLE_ADDR,
|
.smbios3 = EFI_INVALID_TABLE_ADDR,
|
||||||
.hcdp = EFI_INVALID_TABLE_ADDR,
|
|
||||||
.uga = EFI_INVALID_TABLE_ADDR,
|
.uga = EFI_INVALID_TABLE_ADDR,
|
||||||
.fw_vendor = EFI_INVALID_TABLE_ADDR,
|
.fw_vendor = EFI_INVALID_TABLE_ADDR,
|
||||||
.runtime = EFI_INVALID_TABLE_ADDR,
|
.runtime = EFI_INVALID_TABLE_ADDR,
|
||||||
|
@ -121,8 +119,6 @@ static ssize_t systab_show(struct kobject *kobj,
|
||||||
if (!kobj || !buf)
|
if (!kobj || !buf)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
if (efi.mps != EFI_INVALID_TABLE_ADDR)
|
|
||||||
str += sprintf(str, "MPS=0x%lx\n", efi.mps);
|
|
||||||
if (efi.acpi20 != EFI_INVALID_TABLE_ADDR)
|
if (efi.acpi20 != EFI_INVALID_TABLE_ADDR)
|
||||||
str += sprintf(str, "ACPI20=0x%lx\n", efi.acpi20);
|
str += sprintf(str, "ACPI20=0x%lx\n", efi.acpi20);
|
||||||
if (efi.acpi != EFI_INVALID_TABLE_ADDR)
|
if (efi.acpi != EFI_INVALID_TABLE_ADDR)
|
||||||
|
@ -136,11 +132,15 @@ static ssize_t systab_show(struct kobject *kobj,
|
||||||
str += sprintf(str, "SMBIOS3=0x%lx\n", efi.smbios3);
|
str += sprintf(str, "SMBIOS3=0x%lx\n", efi.smbios3);
|
||||||
if (efi.smbios != EFI_INVALID_TABLE_ADDR)
|
if (efi.smbios != EFI_INVALID_TABLE_ADDR)
|
||||||
str += sprintf(str, "SMBIOS=0x%lx\n", efi.smbios);
|
str += sprintf(str, "SMBIOS=0x%lx\n", efi.smbios);
|
||||||
if (efi.hcdp != EFI_INVALID_TABLE_ADDR)
|
|
||||||
str += sprintf(str, "HCDP=0x%lx\n", efi.hcdp);
|
|
||||||
if (efi.uga != EFI_INVALID_TABLE_ADDR)
|
if (efi.uga != EFI_INVALID_TABLE_ADDR)
|
||||||
str += sprintf(str, "UGA=0x%lx\n", efi.uga);
|
str += sprintf(str, "UGA=0x%lx\n", efi.uga);
|
||||||
|
|
||||||
|
if (IS_ENABLED(CONFIG_IA64)) {
|
||||||
|
extern char *efi_systab_show_arch(char *str);
|
||||||
|
|
||||||
|
str = efi_systab_show_arch(str);
|
||||||
|
}
|
||||||
|
|
||||||
return str - buf;
|
return str - buf;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -467,8 +467,6 @@ void __init efi_mem_reserve(phys_addr_t addr, u64 size)
|
||||||
static __initdata efi_config_table_type_t common_tables[] = {
|
static __initdata efi_config_table_type_t common_tables[] = {
|
||||||
{ACPI_20_TABLE_GUID, "ACPI 2.0", &efi.acpi20},
|
{ACPI_20_TABLE_GUID, "ACPI 2.0", &efi.acpi20},
|
||||||
{ACPI_TABLE_GUID, "ACPI", &efi.acpi},
|
{ACPI_TABLE_GUID, "ACPI", &efi.acpi},
|
||||||
{HCDP_TABLE_GUID, "HCDP", &efi.hcdp},
|
|
||||||
{MPS_TABLE_GUID, "MPS", &efi.mps},
|
|
||||||
{SMBIOS_TABLE_GUID, "SMBIOS", &efi.smbios},
|
{SMBIOS_TABLE_GUID, "SMBIOS", &efi.smbios},
|
||||||
{SMBIOS3_TABLE_GUID, "SMBIOS 3.0", &efi.smbios3},
|
{SMBIOS3_TABLE_GUID, "SMBIOS 3.0", &efi.smbios3},
|
||||||
{UGA_IO_PROTOCOL_GUID, "UGA", &efi.uga},
|
{UGA_IO_PROTOCOL_GUID, "UGA", &efi.uga},
|
||||||
|
|
|
@ -80,6 +80,8 @@ setup_vga_console(struct pcdp_device *dev)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
extern unsigned long hcdp_phys;
|
||||||
|
|
||||||
int __init
|
int __init
|
||||||
efi_setup_pcdp_console(char *cmdline)
|
efi_setup_pcdp_console(char *cmdline)
|
||||||
{
|
{
|
||||||
|
@ -89,11 +91,11 @@ efi_setup_pcdp_console(char *cmdline)
|
||||||
int i, serial = 0;
|
int i, serial = 0;
|
||||||
int rc = -ENODEV;
|
int rc = -ENODEV;
|
||||||
|
|
||||||
if (efi.hcdp == EFI_INVALID_TABLE_ADDR)
|
if (hcdp_phys == EFI_INVALID_TABLE_ADDR)
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
|
|
||||||
pcdp = early_memremap(efi.hcdp, 4096);
|
pcdp = early_memremap(hcdp_phys, 4096);
|
||||||
printk(KERN_INFO "PCDP: v%d at 0x%lx\n", pcdp->rev, efi.hcdp);
|
printk(KERN_INFO "PCDP: v%d at 0x%lx\n", pcdp->rev, hcdp_phys);
|
||||||
|
|
||||||
if (strstr(cmdline, "console=hcdp")) {
|
if (strstr(cmdline, "console=hcdp")) {
|
||||||
if (pcdp->rev < 3)
|
if (pcdp->rev < 3)
|
||||||
|
|
|
@ -531,12 +531,10 @@ typedef struct {
|
||||||
extern struct efi {
|
extern struct efi {
|
||||||
efi_system_table_t *systab; /* EFI system table */
|
efi_system_table_t *systab; /* EFI system table */
|
||||||
unsigned int runtime_version; /* Runtime services version */
|
unsigned int runtime_version; /* Runtime services version */
|
||||||
unsigned long mps; /* MPS table */
|
|
||||||
unsigned long acpi; /* ACPI table (IA64 ext 0.71) */
|
unsigned long acpi; /* ACPI table (IA64 ext 0.71) */
|
||||||
unsigned long acpi20; /* ACPI table (ACPI 2.0) */
|
unsigned long acpi20; /* ACPI table (ACPI 2.0) */
|
||||||
unsigned long smbios; /* SMBIOS table (32 bit entry point) */
|
unsigned long smbios; /* SMBIOS table (32 bit entry point) */
|
||||||
unsigned long smbios3; /* SMBIOS table (64 bit entry point) */
|
unsigned long smbios3; /* SMBIOS table (64 bit entry point) */
|
||||||
unsigned long hcdp; /* HCDP table */
|
|
||||||
unsigned long uga; /* UGA table */
|
unsigned long uga; /* UGA table */
|
||||||
unsigned long fw_vendor; /* fw_vendor */
|
unsigned long fw_vendor; /* fw_vendor */
|
||||||
unsigned long runtime; /* runtime table */
|
unsigned long runtime; /* runtime table */
|
||||||
|
|
Loading…
Reference in New Issue