mirror of
https://github.com/torvalds/linux.git
synced 2024-12-04 18:13:04 +00:00
x86/platform/uv/BAU: Add UV4-specific functions
Add the UV4-specific function definitions and define an operations struct to implement them in the BAU driver. Many BAU MMRs, although functionally the same, have new addresses on UV4 due to hardware changes. Each MMR requires new read/write functions, but their implementation in the driver does not change. Thus, it is enough to enumerate them in the operations struct for the changes to take effect. Signed-off-by: Andrew Banman <abanman@sgi.com> Acked-by: Thomas Gleixner <tglx@linutronix.de> Acked-by: Mike Travis <travis@sgi.com> Acked-by: Dimitri Sivanich <sivanich@sgi.com> Acked-by: Thomas Gleixner <tglx@linutronix.de> Cc: Linus Torvalds <torvalds@linux-foundation.org> Cc: Peter Zijlstra <peterz@infradead.org> Cc: akpm@linux-foundation.org Cc: rja@sgi.com Link: http://lkml.kernel.org/r/1474474161-265604-11-git-send-email-abanman@sgi.com Signed-off-by: Ingo Molnar <mingo@kernel.org>
This commit is contained in:
parent
6d78059bbc
commit
4f059d514f
@ -664,6 +664,16 @@ static inline void write_gmmr_activation(int pnode, unsigned long mmr_image)
|
|||||||
write_gmmr(pnode, UVH_LB_BAU_SB_ACTIVATION_CONTROL, mmr_image);
|
write_gmmr(pnode, UVH_LB_BAU_SB_ACTIVATION_CONTROL, mmr_image);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline void write_mmr_proc_payload_first(int pnode, unsigned long mmr_image)
|
||||||
|
{
|
||||||
|
write_gmmr(pnode, UV4H_LB_PROC_INTD_QUEUE_FIRST, mmr_image);
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void write_mmr_proc_payload_last(int pnode, unsigned long mmr_image)
|
||||||
|
{
|
||||||
|
write_gmmr(pnode, UV4H_LB_PROC_INTD_QUEUE_LAST, mmr_image);
|
||||||
|
}
|
||||||
|
|
||||||
static inline void write_mmr_payload_first(int pnode, unsigned long mmr_image)
|
static inline void write_mmr_payload_first(int pnode, unsigned long mmr_image)
|
||||||
{
|
{
|
||||||
write_gmmr(pnode, UVH_LB_BAU_INTD_PAYLOAD_QUEUE_FIRST, mmr_image);
|
write_gmmr(pnode, UVH_LB_BAU_INTD_PAYLOAD_QUEUE_FIRST, mmr_image);
|
||||||
@ -709,6 +719,26 @@ static inline unsigned long read_gmmr_sw_ack(int pnode)
|
|||||||
return read_gmmr(pnode, UVH_LB_BAU_INTD_SOFTWARE_ACKNOWLEDGE);
|
return read_gmmr(pnode, UVH_LB_BAU_INTD_SOFTWARE_ACKNOWLEDGE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline void write_mmr_proc_sw_ack(unsigned long mr)
|
||||||
|
{
|
||||||
|
uv_write_local_mmr(UV4H_LB_PROC_INTD_SOFT_ACK_CLEAR, mr);
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void write_gmmr_proc_sw_ack(int pnode, unsigned long mr)
|
||||||
|
{
|
||||||
|
write_gmmr(pnode, UV4H_LB_PROC_INTD_SOFT_ACK_CLEAR, mr);
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline unsigned long read_mmr_proc_sw_ack(void)
|
||||||
|
{
|
||||||
|
return read_lmmr(UV4H_LB_PROC_INTD_SOFT_ACK_PENDING);
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline unsigned long read_gmmr_proc_sw_ack(int pnode)
|
||||||
|
{
|
||||||
|
return read_gmmr(pnode, UV4H_LB_PROC_INTD_SOFT_ACK_PENDING);
|
||||||
|
}
|
||||||
|
|
||||||
static inline void write_mmr_data_config(int pnode, unsigned long mr)
|
static inline void write_mmr_data_config(int pnode, unsigned long mr)
|
||||||
{
|
{
|
||||||
uv_write_global_mmr64(pnode, UVH_BAU_DATA_CONFIG, mr);
|
uv_write_global_mmr64(pnode, UVH_BAU_DATA_CONFIG, mr);
|
||||||
|
@ -36,6 +36,17 @@ static struct bau_operations uv123_bau_ops = {
|
|||||||
.write_payload_last = write_mmr_payload_last,
|
.write_payload_last = write_mmr_payload_last,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static struct bau_operations uv4_bau_ops = {
|
||||||
|
.bau_gpa_to_offset = uv_gpa_to_soc_phys_ram,
|
||||||
|
.read_l_sw_ack = read_mmr_proc_sw_ack,
|
||||||
|
.read_g_sw_ack = read_gmmr_proc_sw_ack,
|
||||||
|
.write_l_sw_ack = write_mmr_proc_sw_ack,
|
||||||
|
.write_g_sw_ack = write_gmmr_proc_sw_ack,
|
||||||
|
.write_payload_first = write_mmr_proc_payload_first,
|
||||||
|
.write_payload_last = write_mmr_proc_payload_last,
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
/* timeouts in nanoseconds (indexed by UVH_AGING_PRESCALE_SEL urgency7 30:28) */
|
/* timeouts in nanoseconds (indexed by UVH_AGING_PRESCALE_SEL urgency7 30:28) */
|
||||||
static int timeout_base_ns[] = {
|
static int timeout_base_ns[] = {
|
||||||
20,
|
20,
|
||||||
@ -2158,7 +2169,9 @@ static int __init uv_bau_init(void)
|
|||||||
if (!is_uv_system())
|
if (!is_uv_system())
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
if (is_uv3_hub())
|
if (is_uv4_hub())
|
||||||
|
ops = uv4_bau_ops;
|
||||||
|
else if (is_uv3_hub())
|
||||||
ops = uv123_bau_ops;
|
ops = uv123_bau_ops;
|
||||||
else if (is_uv2_hub())
|
else if (is_uv2_hub())
|
||||||
ops = uv123_bau_ops;
|
ops = uv123_bau_ops;
|
||||||
|
Loading…
Reference in New Issue
Block a user