Commit 62807106 authored by Mike Travis's avatar Mike Travis Committed by Ingo Molnar

x86/platform/UV: Fix UV4A support on new Intel Processors

Upcoming Intel CascadeLake and IceLake processors have some architecture
changes that required fixes in the UV4 HUB bringing that chip to
revision 2.  The nomenclature for that new chip is "UV4A".

This patch fixes the references for the expanded MMR definitions in the
previous (automated) patch.
Signed-off-by: default avatarMike Travis <mike.travis@hpe.com>
Acked-by: default avatarAndrew Banman <abanman@hpe.com>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Dimitri Sivanich <sivanich@hpe.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Russ Anderson <rja@hpe.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Link: http://lkml.kernel.org/r/1515440405-20880-3-git-send-email-mike.travis@hpe.comSigned-off-by: default avatarIngo Molnar <mingo@kernel.org>
parent 673aa20c
...@@ -768,6 +768,7 @@ static __init void map_gru_high(int max_pnode) ...@@ -768,6 +768,7 @@ static __init void map_gru_high(int max_pnode)
return; return;
} }
/* Only UV3 has distributed GRU mode */
if (is_uv3_hub() && gru.s3.mode) { if (is_uv3_hub() && gru.s3.mode) {
map_gru_distributed(gru.v); map_gru_distributed(gru.v);
return; return;
...@@ -817,17 +818,20 @@ static __initdata struct mmioh_config mmiohs[] = { ...@@ -817,17 +818,20 @@ static __initdata struct mmioh_config mmiohs[] = {
/* UV3 & UV4 have identical MMIOH overlay configs */ /* UV3 & UV4 have identical MMIOH overlay configs */
static __init void map_mmioh_high_uv3(int index, int min_pnode, int max_pnode) static __init void map_mmioh_high_uv3(int index, int min_pnode, int max_pnode)
{ {
union uv3h_rh_gam_mmioh_overlay_config0_mmr_u overlay; union uvh_rh_gam_mmioh_overlay_config0_mmr_u overlay;
unsigned long mmr; unsigned long mmr;
unsigned long base; unsigned long base;
unsigned long m_overlay;
int i, n, shift, m_io, max_io; int i, n, shift, m_io, max_io;
int nasid, lnasid, fi, li; int nasid, lnasid, fi, li;
char *id; char *id;
id = mmiohs[index].id; id = mmiohs[index].id;
overlay.v = uv_read_local_mmr(mmiohs[index].overlay); overlay.v = uv_read_local_mmr(mmiohs[index].overlay);
m_overlay = mmiohs[index].overlay;
pr_info("UV: %s overlay 0x%lx base:0x%x m_io:%d\n", id, overlay.v, overlay.s3.base, overlay.s3.m_io); pr_info("UV: %s overlay 0x%lx(@0x%lx) base:0x%x m_io:%d\n",
id, overlay.v, m_overlay, overlay.s3.base, overlay.s3.m_io);
if (!overlay.s3.enable) { if (!overlay.s3.enable) {
pr_info("UV: %s disabled\n", id); pr_info("UV: %s disabled\n", id);
return; return;
...@@ -844,10 +848,14 @@ static __init void map_mmioh_high_uv3(int index, int min_pnode, int max_pnode) ...@@ -844,10 +848,14 @@ static __init void map_mmioh_high_uv3(int index, int min_pnode, int max_pnode)
max_io = lnasid = fi = li = -1; max_io = lnasid = fi = li = -1;
for (i = 0; i < n; i++) { for (i = 0; i < n; i++) {
union uv3h_rh_gam_mmioh_redirect_config0_mmr_u redirect; union uvh_rh_gam_mmioh_redirect_config0_mmr_u redirect;
unsigned long m_redirect = mmr + i * 8;
redirect.v = uv_read_local_mmr(mmr + i * 8); redirect.v = uv_read_local_mmr(mmr + i * 8);
nasid = redirect.s3.nasid; nasid = redirect.s3.nasid;
printk_once(KERN_INFO
"UV: %s redirect 0x%lx(@0x%lx) 0x%04x\n",
id, redirect.v, m_redirect, nasid);
/* Invalid NASID: */ /* Invalid NASID: */
if (nasid < min_pnode || max_pnode < nasid) if (nasid < min_pnode || max_pnode < nasid)
nasid = -1; nasid = -1;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment