diff mbox

prd: Only alter host presentation bits of IPOLL mask

Message ID 1429902329.636878.331762618109.1.gpush@pablo
State Accepted
Headers show

Commit Message

Jeremy Kerr April 24, 2015, 7:05 p.m. UTC
We'll need to leave the FSI presentation bits clear, to allow OCCs to
handle the checkstop interrupt.

This modifies the PRD code to only touch the host presentation bits,
both on init, and in response to incoming PRD actions.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>

---
 hw/prd.c |   10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)
diff mbox

Patch

diff --git a/hw/prd.c b/hw/prd.c
index e65ae57..4862213 100644
--- a/hw/prd.c
+++ b/hw/prd.c
@@ -226,12 +226,13 @@  static int ipoll_record_and_mask_pending(uint32_t proc)
 
 	lock(&ipoll_lock);
 	rc = xscom_read(proc, PRD_IPOLL_REG_STATUS, &status);
+	status &= PRD_IPOLL_MASK;
 	if (!rc)
 		__ipoll_update_mask(proc, true, status);
 	unlock(&ipoll_lock);
 
 	if (!rc)
-		ipoll_status[proc] |= (status & PRD_IPOLL_MASK);
+		ipoll_status[proc] |= status;
 
 	return rc;
 }
@@ -284,7 +285,8 @@  static int prd_msg_handle_init(struct opal_prd_msg *msg)
 
 	lock(&ipoll_lock);
 	for_each_chip(chip) {
-		__ipoll_update_mask(chip->id, false, msg->init.ipoll);
+		__ipoll_update_mask(chip->id, false,
+			msg->init.ipoll & PRD_IPOLL_MASK);
 	}
 	unlock(&ipoll_lock);
 
@@ -309,7 +311,7 @@  static int prd_msg_handle_fini(void)
 
 	lock(&ipoll_lock);
 	for_each_chip(chip) {
-		__ipoll_update_mask(chip->id, true, -1ul);
+		__ipoll_update_mask(chip->id, true, PRD_IPOLL_MASK);
 	}
 	unlock(&ipoll_lock);
 
@@ -345,7 +347,7 @@  void prd_init(void)
 	/* mask everything */
 	lock(&ipoll_lock);
 	for_each_chip(chip) {
-		__ipoll_update_mask(chip->id, true, -1ul);
+		__ipoll_update_mask(chip->id, true, PRD_IPOLL_MASK);
 	}
 	unlock(&ipoll_lock);