Lines Matching refs:amo
34 * Memory for XPC's amo variables is allocated by the MSPEC driver. These
40 * amo variables (based on XP_MAX_NPARTITIONS_SN2) to identify the senders of
41 * NOTIFY IRQs, 128 amo variables (based on XP_NASID_MASK_WORDS_SN2) to identify
42 * the senders of ACTIVATE IRQs, 1 amo variable to identify which remote
44 * local XPC and 1 amo variable to request partition deactivation.
165 xpc_receive_IRQ_amo_sn2(struct amo *amo)
167 return FETCHOP_LOAD_OP(TO_AMO((u64)&amo->variable), FETCHOP_CLEAR);
171 xpc_send_IRQ_sn2(struct amo *amo, u64 flag, int nasid, int phys_cpuid,
179 FETCHOP_STORE_OP(TO_AMO((u64)&amo->variable), FETCHOP_OR, flag);
188 ret = xp_nofault_PIOR((u64 *)GLOBAL_MMR_ADDR(NASID_GET(&amo->variable),
196 static struct amo *
199 struct amo *amo = xpc_vars_sn2->amos_page + index;
201 (void)xpc_receive_IRQ_amo_sn2(amo); /* clear amo variable */
202 return amo;
226 * Flag the appropriate amo variable and send an IRQ to the specified node.
232 struct amo *amos = (struct amo *)__va(amos_page_pa +
234 sizeof(struct amo)));
245 struct amo *amos = (struct amo *)__va(xpc_vars_sn2->amos_page_pa +
247 sizeof(struct amo)));
291 * than one partition, we use an amo structure per partition to indicate
322 * because the write to their associated amo variable completed after the IRQ
470 struct amo *amo = (struct amo *)__va(part->sn.sn2.remote_amos_page_pa +
472 sizeof(struct amo)));
476 /* set bit corresponding to our partid in remote partition's amo */
477 FETCHOP_STORE_OP(TO_AMO((u64)&amo->variable), FETCHOP_OR,
486 (void)xp_nofault_PIOR((u64 *)GLOBAL_MMR_ADDR(NASID_GET(&amo->
498 struct amo *amo = (struct amo *)__va(part_sn2->remote_amos_page_pa +
500 sizeof(struct amo)));
504 /* clear bit corresponding to our partid in remote partition's amo */
505 FETCHOP_STORE_OP(TO_AMO((u64)&amo->variable), FETCHOP_AND,
514 (void)xp_nofault_PIOR((u64 *)GLOBAL_MMR_ADDR(NASID_GET(&amo->
522 * bit in their engaged partitions amo.
533 struct amo *amo = xpc_vars_sn2->amos_page +
536 /* clear bit(s) based on partid mask in our partition's amo */
537 FETCHOP_STORE_OP(TO_AMO((u64)&amo->variable), FETCHOP_AND,
544 struct amo *amo = xpc_vars_sn2->amos_page +
547 /* our partition's amo variable ANDed with partid mask */
548 return (FETCHOP_LOAD_OP(TO_AMO((u64)&amo->variable), FETCHOP_LOAD) &
555 struct amo *amo = xpc_vars_sn2->amos_page +
558 /* our partition's amo variable */
559 return FETCHOP_LOAD_OP(TO_AMO((u64)&amo->variable), FETCHOP_LOAD) != 0;
566 * Change protections to allow amo operations on non-Shub 1.1 systems.
569 xpc_allow_amo_ops_sn2(struct amo *amos_page)
585 * Change protections to allow amo operations on Shub 1.1 systems.
635 struct amo *amos_page;
652 * The allocated amo page needs MCA reporting to remain disabled after
656 * on subsequent loads of XPC. This amo page is never freed, and its
661 amos_page = (struct amo *)TO_AMO(uncached_alloc_page(0, 1));
668 * Open up amo-R/W to cpu. This is done on Shub 1.1 systems
673 dev_err(xpc_part, "can't allow amo operations\n");
694 /* initialize the activate IRQ related amo variables */
698 /* initialize the engaged remote partitions related amo variables */
847 struct amo *amo = (struct amo *)__va(part_sn2->remote_amos_page_pa +
849 sizeof(struct amo)));
853 /* set bit corresponding to our partid in remote partition's amo */
854 FETCHOP_STORE_OP(TO_AMO((u64)&amo->variable), FETCHOP_OR,
863 (void)xp_nofault_PIOR((u64 *)GLOBAL_MMR_ADDR(NASID_GET(&amo->
871 * bit in their deactivate request amo.
883 struct amo *amo = (struct amo *)__va(part->sn.sn2.remote_amos_page_pa +
885 sizeof(struct amo)));
889 /* clear bit corresponding to our partid in remote partition's amo */
890 FETCHOP_STORE_OP(TO_AMO((u64)&amo->variable), FETCHOP_AND,
899 (void)xp_nofault_PIOR((u64 *)GLOBAL_MMR_ADDR(NASID_GET(&amo->
909 struct amo *amo = xpc_vars_sn2->amos_page +
912 /* our partition's amo variable ANDed with partid mask */
913 return (FETCHOP_LOAD_OP(TO_AMO((u64)&amo->variable), FETCHOP_LOAD) &
1087 * Loop through the activation amo variables and process any bits
1101 struct amo *act_amos;
1105 /* scan through activate amo variables looking for non-zero entries */
1115 /* no IRQs from nasids in this amo variable */
1119 dev_dbg(xpc_part, "amo[%d] gave back 0x%lx\n", l,
1159 /* retry once to help avoid missing amo */
1421 (struct amo *)__va(pulled_entry->chctl_amo_pa);
2435 /* open up protections for IPI and [potentially] amo operations */