Merge branch 'linus' into efi/core, to refresh the branch and to pick up recent fixes
Signed-off-by: Ingo Molnar <mingo@kernel.org>
This commit is contained in:
@@ -25,8 +25,6 @@
|
||||
#include <asm/cpu_device_id.h>
|
||||
#include <asm/iosf_mbi.h>
|
||||
|
||||
/* Side band Interface port */
|
||||
#define PUNIT_PORT 0x04
|
||||
/* Power gate status reg */
|
||||
#define PWRGT_STATUS 0x61
|
||||
/* Subsystem config/status Video processor */
|
||||
@@ -85,9 +83,8 @@ static int punit_dev_state_show(struct seq_file *seq_file, void *unused)
|
||||
|
||||
seq_puts(seq_file, "\n\nPUNIT NORTH COMPLEX DEVICES :\n");
|
||||
while (punit_devp->name) {
|
||||
status = iosf_mbi_read(PUNIT_PORT, BT_MBI_PMC_READ,
|
||||
punit_devp->reg,
|
||||
&punit_pwr_status);
|
||||
status = iosf_mbi_read(BT_MBI_UNIT_PMC, MBI_REG_READ,
|
||||
punit_devp->reg, &punit_pwr_status);
|
||||
if (status) {
|
||||
seq_printf(seq_file, "%9s : Read Failed\n",
|
||||
punit_devp->name);
|
||||
|
@@ -10,6 +10,7 @@
|
||||
#include <linux/memblock.h>
|
||||
#include <linux/bootmem.h>
|
||||
#include <linux/acpi.h>
|
||||
#include <linux/dmi.h>
|
||||
#include <asm/efi.h>
|
||||
#include <asm/uv/uv.h>
|
||||
|
||||
@@ -250,6 +251,16 @@ out:
|
||||
return ret;
|
||||
}
|
||||
|
||||
static const struct dmi_system_id sgi_uv1_dmi[] = {
|
||||
{ NULL, "SGI UV1",
|
||||
{ DMI_MATCH(DMI_PRODUCT_NAME, "Stoutland Platform"),
|
||||
DMI_MATCH(DMI_PRODUCT_VERSION, "1.0"),
|
||||
DMI_MATCH(DMI_BIOS_VENDOR, "SGI.COM"),
|
||||
}
|
||||
},
|
||||
{ } /* NULL entry stops DMI scanning */
|
||||
};
|
||||
|
||||
void __init efi_apply_memmap_quirks(void)
|
||||
{
|
||||
/*
|
||||
@@ -262,10 +273,8 @@ void __init efi_apply_memmap_quirks(void)
|
||||
efi_unmap_memmap();
|
||||
}
|
||||
|
||||
/*
|
||||
* UV doesn't support the new EFI pagetable mapping yet.
|
||||
*/
|
||||
if (is_uv_system())
|
||||
/* UV2+ BIOS has a fix for this issue. UV1 still needs the quirk. */
|
||||
if (dmi_check_system(sgi_uv1_dmi))
|
||||
set_bit(EFI_OLD_MEMMAP, &efi.flags);
|
||||
}
|
||||
|
||||
|
@@ -138,7 +138,7 @@ static void intel_mid_arch_setup(void)
|
||||
intel_mid_ops = get_intel_mid_ops[__intel_mid_cpu_chip]();
|
||||
else {
|
||||
intel_mid_ops = get_intel_mid_ops[INTEL_MID_CPU_CHIP_PENWELL]();
|
||||
pr_info("ARCH: Unknown SoC, assuming PENWELL!\n");
|
||||
pr_info("ARCH: Unknown SoC, assuming Penwell!\n");
|
||||
}
|
||||
|
||||
out:
|
||||
@@ -214,12 +214,10 @@ static inline int __init setup_x86_intel_mid_timer(char *arg)
|
||||
else if (strcmp("lapic_and_apbt", arg) == 0)
|
||||
intel_mid_timer_options = INTEL_MID_TIMER_LAPIC_APBT;
|
||||
else {
|
||||
pr_warn("X86 INTEL_MID timer option %s not recognised"
|
||||
" use x86_intel_mid_timer=apbt_only or lapic_and_apbt\n",
|
||||
arg);
|
||||
pr_warn("X86 INTEL_MID timer option %s not recognised use x86_intel_mid_timer=apbt_only or lapic_and_apbt\n",
|
||||
arg);
|
||||
return -EINVAL;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
__setup("x86_intel_mid_timer=", setup_x86_intel_mid_timer);
|
||||
|
||||
|
@@ -111,23 +111,19 @@ static int imr_read(struct imr_device *idev, u32 imr_id, struct imr_regs *imr)
|
||||
u32 reg = imr_id * IMR_NUM_REGS + idev->reg_base;
|
||||
int ret;
|
||||
|
||||
ret = iosf_mbi_read(QRK_MBI_UNIT_MM, QRK_MBI_MM_READ,
|
||||
reg++, &imr->addr_lo);
|
||||
ret = iosf_mbi_read(QRK_MBI_UNIT_MM, MBI_REG_READ, reg++, &imr->addr_lo);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
ret = iosf_mbi_read(QRK_MBI_UNIT_MM, QRK_MBI_MM_READ,
|
||||
reg++, &imr->addr_hi);
|
||||
ret = iosf_mbi_read(QRK_MBI_UNIT_MM, MBI_REG_READ, reg++, &imr->addr_hi);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
ret = iosf_mbi_read(QRK_MBI_UNIT_MM, QRK_MBI_MM_READ,
|
||||
reg++, &imr->rmask);
|
||||
ret = iosf_mbi_read(QRK_MBI_UNIT_MM, MBI_REG_READ, reg++, &imr->rmask);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
return iosf_mbi_read(QRK_MBI_UNIT_MM, QRK_MBI_MM_READ,
|
||||
reg++, &imr->wmask);
|
||||
return iosf_mbi_read(QRK_MBI_UNIT_MM, MBI_REG_READ, reg++, &imr->wmask);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -151,31 +147,27 @@ static int imr_write(struct imr_device *idev, u32 imr_id,
|
||||
|
||||
local_irq_save(flags);
|
||||
|
||||
ret = iosf_mbi_write(QRK_MBI_UNIT_MM, QRK_MBI_MM_WRITE, reg++,
|
||||
imr->addr_lo);
|
||||
ret = iosf_mbi_write(QRK_MBI_UNIT_MM, MBI_REG_WRITE, reg++, imr->addr_lo);
|
||||
if (ret)
|
||||
goto failed;
|
||||
|
||||
ret = iosf_mbi_write(QRK_MBI_UNIT_MM, QRK_MBI_MM_WRITE,
|
||||
reg++, imr->addr_hi);
|
||||
ret = iosf_mbi_write(QRK_MBI_UNIT_MM, MBI_REG_WRITE, reg++, imr->addr_hi);
|
||||
if (ret)
|
||||
goto failed;
|
||||
|
||||
ret = iosf_mbi_write(QRK_MBI_UNIT_MM, QRK_MBI_MM_WRITE,
|
||||
reg++, imr->rmask);
|
||||
ret = iosf_mbi_write(QRK_MBI_UNIT_MM, MBI_REG_WRITE, reg++, imr->rmask);
|
||||
if (ret)
|
||||
goto failed;
|
||||
|
||||
ret = iosf_mbi_write(QRK_MBI_UNIT_MM, QRK_MBI_MM_WRITE,
|
||||
reg++, imr->wmask);
|
||||
ret = iosf_mbi_write(QRK_MBI_UNIT_MM, MBI_REG_WRITE, reg++, imr->wmask);
|
||||
if (ret)
|
||||
goto failed;
|
||||
|
||||
/* Lock bit must be set separately to addr_lo address bits. */
|
||||
if (lock) {
|
||||
imr->addr_lo |= IMR_LOCK;
|
||||
ret = iosf_mbi_write(QRK_MBI_UNIT_MM, QRK_MBI_MM_WRITE,
|
||||
reg - IMR_NUM_REGS, imr->addr_lo);
|
||||
ret = iosf_mbi_write(QRK_MBI_UNIT_MM, MBI_REG_WRITE,
|
||||
reg - IMR_NUM_REGS, imr->addr_lo);
|
||||
if (ret)
|
||||
goto failed;
|
||||
}
|
||||
@@ -228,11 +220,12 @@ static int imr_dbgfs_state_show(struct seq_file *s, void *unused)
|
||||
if (imr_is_enabled(&imr)) {
|
||||
base = imr_to_phys(imr.addr_lo);
|
||||
end = imr_to_phys(imr.addr_hi) + IMR_MASK;
|
||||
size = end - base + 1;
|
||||
} else {
|
||||
base = 0;
|
||||
end = 0;
|
||||
size = 0;
|
||||
}
|
||||
size = end - base;
|
||||
seq_printf(s, "imr%02i: base=%pa, end=%pa, size=0x%08zx "
|
||||
"rmask=0x%08x, wmask=0x%08x, %s, %s\n", i,
|
||||
&base, &end, size, imr.rmask, imr.wmask,
|
||||
@@ -587,6 +580,7 @@ static void __init imr_fixup_memmap(struct imr_device *idev)
|
||||
{
|
||||
phys_addr_t base = virt_to_phys(&_text);
|
||||
size_t size = virt_to_phys(&__end_rodata) - base;
|
||||
unsigned long start, end;
|
||||
int i;
|
||||
int ret;
|
||||
|
||||
@@ -594,18 +588,24 @@ static void __init imr_fixup_memmap(struct imr_device *idev)
|
||||
for (i = 0; i < idev->max_imr; i++)
|
||||
imr_clear(i);
|
||||
|
||||
start = (unsigned long)_text;
|
||||
end = (unsigned long)__end_rodata - 1;
|
||||
|
||||
/*
|
||||
* Setup a locked IMR around the physical extent of the kernel
|
||||
* from the beginning of the .text secton to the end of the
|
||||
* .rodata section as one physically contiguous block.
|
||||
*
|
||||
* We don't round up @size since it is already PAGE_SIZE aligned.
|
||||
* See vmlinux.lds.S for details.
|
||||
*/
|
||||
ret = imr_add_range(base, size, IMR_CPU, IMR_CPU, true);
|
||||
if (ret < 0) {
|
||||
pr_err("unable to setup IMR for kernel: (%p - %p)\n",
|
||||
&_text, &__end_rodata);
|
||||
pr_err("unable to setup IMR for kernel: %zu KiB (%lx - %lx)\n",
|
||||
size / 1024, start, end);
|
||||
} else {
|
||||
pr_info("protecting kernel .text - .rodata: %zu KiB (%p - %p)\n",
|
||||
size / 1024, &_text, &__end_rodata);
|
||||
pr_info("protecting kernel .text - .rodata: %zu KiB (%lx - %lx)\n",
|
||||
size / 1024, start, end);
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -28,6 +28,7 @@
|
||||
#include <linux/nmi.h>
|
||||
#include <linux/sched.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/clocksource.h>
|
||||
|
||||
#include <asm/apic.h>
|
||||
#include <asm/current.h>
|
||||
|
Reference in New Issue
Block a user