ia64: remove support for machvecs

The only thing remaining of the machvecs is a few checks if we are
running on an SGI UV system.  Replace those with the existing
is_uv_system() check that has been rewritten to simply check the
OEM ID directly.

That leaves us with a generic kernel that is as fast as the previous
DIG/ZX1/UV kernels, but can support all hardware.  Support for UV
and the HP SBA IOMMU is now optional based on new config options.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Link: https://lkml.kernel.org/r/20190813072514.23299-27-hch@lst.de
Signed-off-by: Tony Luck <tony.luck@intel.com>
This commit is contained in:
Christoph Hellwig
2019-08-13 09:25:12 +02:00
committed by Tony Luck
parent a8384e6ce5
commit df41017eaf
50 changed files with 116 additions and 488 deletions

View File

@@ -8,11 +8,17 @@
* Copyright (C) 2008 Silicon Graphics, Inc. All rights reserved.
*/
#include <linux/acpi.h>
#include <linux/efi.h>
#include <linux/module.h>
#include <linux/percpu.h>
#include <asm/uv/uv.h>
#include <asm/uv/uv_mmrs.h>
#include <asm/uv/uv_hub.h>
bool ia64_is_uv;
EXPORT_SYMBOL_GPL(ia64_is_uv);
DEFINE_PER_CPU(struct uv_hub_info_s, __uv_hub_info);
EXPORT_PER_CPU_SYMBOL_GPL(__uv_hub_info);
@@ -47,6 +53,34 @@ static __init void get_lowmem_redirect(unsigned long *base, unsigned long *size)
BUG();
}
void __init uv_probe_system_type(void)
{
struct acpi_table_rsdp *rsdp;
struct acpi_table_xsdt *xsdt;
if (efi.acpi20 == EFI_INVALID_TABLE_ADDR) {
pr_err("ACPI 2.0 RSDP not found.\n");
return;
}
rsdp = (struct acpi_table_rsdp *)__va(efi.acpi20);
if (strncmp(rsdp->signature, ACPI_SIG_RSDP, sizeof(ACPI_SIG_RSDP) - 1)) {
pr_err("ACPI 2.0 RSDP signature incorrect.\n");
return;
}
xsdt = (struct acpi_table_xsdt *)__va(rsdp->xsdt_physical_address);
if (strncmp(xsdt->header.signature, ACPI_SIG_XSDT,
sizeof(ACPI_SIG_XSDT) - 1)) {
pr_err("ACPI 2.0 XSDT signature incorrect.\n");
return;
}
if (!strcmp(xsdt->header.oem_id, "SGI") &&
!strcmp(xsdt->header.oem_table_id + 4, "UV"))
ia64_is_uv = true;
}
void __init uv_setup(char **cmdline_p)
{
union uvh_si_addr_map_config_u m_n_config;