diff options
author | Jeremy Kerr <jk@ozlabs.org> | 2015-04-24 14:05:29 -0500 |
---|---|---|
committer | Stewart Smith <stewart@linux.vnet.ibm.com> | 2015-05-01 15:29:21 +1000 |
commit | d0a66713c06b52f6c34d09e3612ac38db367eda6 (patch) | |
tree | 906ec61f812b1b4816d531cfbc132dde57fde27f | |
parent | d0483a67a1e56323cecd7c59dd4e09a90d7640a6 (diff) | |
download | skiboot-d0a66713c06b52f6c34d09e3612ac38db367eda6.zip skiboot-d0a66713c06b52f6c34d09e3612ac38db367eda6.tar.gz skiboot-d0a66713c06b52f6c34d09e3612ac38db367eda6.tar.bz2 |
prd: Only alter host presentation bits of IPOLL mask
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>
Signed-off-by: Stewart Smith <stewart@linux.vnet.ibm.com>
-rw-r--r-- | hw/prd.c | 10 |
1 files changed, 6 insertions, 4 deletions
@@ -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); |