[Skiboot] [PATCH] prd: Only alter host presentation bits of IPOLL mask

Jeremy Kerr jk at ozlabs.org
Sat Apr 25 05:05:29 AEST 2015


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 at ozlabs.org>

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

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);
 


More information about the Skiboot mailing list