Commit 45dc4f27 authored by Andrew Morton's avatar Andrew Morton Committed by Linus Torvalds

[PATCH] es7000 subarch update

From: "Protasevich, Natalie" <Natalie.Protasevich@UNISYS.com>

The patch fixes a problem with ES7000 Server Management mechanism that uses
platform register mip_port.  It was not initialized, so the mechanism was not
functional.

The patch also fixes the APIC destination for hierarchical and flat cluster
models used in ES7000.  The destination ID's reflect policies for Cascade
based systems which use logical delivery and lowest priority mechanism, and
for xAPIC based models that use physical delivery and fixed APIC destinations.

The patch also turns on NO_IOAPIC_CHECK (1) to avoid error messages and
attempts to re-write the ID, because on ES7000 all ID's are hard coded in the
BIOS and cannot be altered.
parent 522cbd42
...@@ -83,6 +83,7 @@ parse_unisys_oem (char *oemptr, int oem_entries) ...@@ -83,6 +83,7 @@ parse_unisys_oem (char *oemptr, int oem_entries)
host = (struct mip_reg *)val; host = (struct mip_reg *)val;
host_reg = __va(host); host_reg = __va(host);
val = MIP_RD_LO(mi->mip_reg); val = MIP_RD_LO(mi->mip_reg);
mip_port = MIP_PORT(mi->mip_info);
mip_addr = val; mip_addr = val;
mip = (struct mip_reg *)val; mip = (struct mip_reg *)val;
mip_reg = __va(mip); mip_reg = __va(mip);
......
...@@ -30,6 +30,7 @@ ...@@ -30,6 +30,7 @@
#define MIP_BUSY 1 #define MIP_BUSY 1
#define MIP_SPIN 0xf0000 #define MIP_SPIN 0xf0000
#define MIP_VALID 0x0100000000000000 #define MIP_VALID 0x0100000000000000
#define MIP_PORT(VALUE) ((VALUE >> 32) & 0xffff)
#define MIP_RD_LO(VALUE) (VALUE & 0xffffffff) #define MIP_RD_LO(VALUE) (VALUE & 0xffffffff)
......
...@@ -39,7 +39,7 @@ static inline cpumask_t target_cpus(void) ...@@ -39,7 +39,7 @@ static inline cpumask_t target_cpus(void)
#endif #endif
#define APIC_BROADCAST_ID (0xff) #define APIC_BROADCAST_ID (0xff)
#define NO_IOAPIC_CHECK (0) #define NO_IOAPIC_CHECK (1)
static inline unsigned long check_apicid_used(physid_mask_t bitmap, int apicid) static inline unsigned long check_apicid_used(physid_mask_t bitmap, int apicid)
{ {
...@@ -169,7 +169,11 @@ static inline unsigned int cpu_mask_to_apicid(cpumask_const_t cpumask) ...@@ -169,7 +169,11 @@ static inline unsigned int cpu_mask_to_apicid(cpumask_const_t cpumask)
num_bits_set = cpus_weight_const(cpumask); num_bits_set = cpus_weight_const(cpumask);
/* Return id to all */ /* Return id to all */
if (num_bits_set == NR_CPUS) if (num_bits_set == NR_CPUS)
#if defined CONFIG_ES7000_CLUSTERED_APIC
return 0xFF; return 0xFF;
#else
return cpu_to_logical_apicid(0);
#endif
/* /*
* The cpus in the mask must all be on the apic cluster. If are not * The cpus in the mask must all be on the apic cluster. If are not
* on the same apicid cluster return default value of TARGET_CPUS. * on the same apicid cluster return default value of TARGET_CPUS.
...@@ -182,7 +186,11 @@ static inline unsigned int cpu_mask_to_apicid(cpumask_const_t cpumask) ...@@ -182,7 +186,11 @@ static inline unsigned int cpu_mask_to_apicid(cpumask_const_t cpumask)
if (apicid_cluster(apicid) != if (apicid_cluster(apicid) !=
apicid_cluster(new_apicid)){ apicid_cluster(new_apicid)){
printk ("%s: Not a valid mask!\n",__FUNCTION__); printk ("%s: Not a valid mask!\n",__FUNCTION__);
#if defined CONFIG_ES7000_CLUSTERED_APIC
return 0xFF; return 0xFF;
#else
return cpu_to_logical_apicid(0);
#endif
} }
apicid = new_apicid; apicid = new_apicid;
cpus_found++; cpus_found++;
......
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