diff --git a/include/lib/bakery_lock.h b/include/lib/bakery_lock.h index 037fa7d..95634cf 100644 --- a/include/lib/bakery_lock.h +++ b/include/lib/bakery_lock.h @@ -44,8 +44,8 @@ #define NO_OWNER (-1) void bakery_lock_init(bakery_lock_t *bakery); -void bakery_lock_get(unsigned long mpidr, bakery_lock_t *bakery); -void bakery_lock_release(unsigned long mpidr, bakery_lock_t *bakery); -int bakery_lock_try(unsigned long mpidr, bakery_lock_t *bakery); +void bakery_lock_get(bakery_lock_t *bakery); +void bakery_lock_release(bakery_lock_t *bakery); +int bakery_lock_try(bakery_lock_t *bakery); #endif /* __BAKERY_LOCK_H__ */ diff --git a/lib/locks/bakery/bakery_lock.c b/lib/locks/bakery/bakery_lock.c index 4e148b5..877f526 100644 --- a/lib/locks/bakery/bakery_lock.c +++ b/lib/locks/bakery/bakery_lock.c @@ -124,12 +124,12 @@ * of others'. The CPU with the highest priority (lowest numerical value) * acquires the lock */ -void bakery_lock_get(unsigned long mpidr, bakery_lock_t *bakery) +void bakery_lock_get(bakery_lock_t *bakery) { unsigned int they, me; unsigned int my_ticket, my_prio, their_ticket; - me = platform_get_core_pos(mpidr); + me = platform_get_core_pos(read_mpidr_el1()); assert_bakery_entry_valid(me, bakery); @@ -176,9 +176,9 @@ /* Release the lock and signal contenders */ -void bakery_lock_release(unsigned long mpidr, bakery_lock_t *bakery) +void bakery_lock_release(bakery_lock_t *bakery) { - unsigned int me = platform_get_core_pos(mpidr); + unsigned int me = platform_get_core_pos(read_mpidr_el1()); assert_bakery_entry_valid(me, bakery); assert(bakery->owner == me); diff --git a/plat/fvp/drivers/pwrc/fvp_pwrc.c b/plat/fvp/drivers/pwrc/fvp_pwrc.c index d1feece..c32c322 100644 --- a/plat/fvp/drivers/pwrc/fvp_pwrc.c +++ b/plat/fvp/drivers/pwrc/fvp_pwrc.c @@ -41,59 +41,54 @@ unsigned int fvp_pwrc_get_cpu_wkr(unsigned long mpidr) { - unsigned int rc = 0; - bakery_lock_get(mpidr, &pwrc_lock); - mmio_write_32(PWRC_BASE + PSYSR_OFF, (unsigned int) mpidr); - rc = PSYSR_WK(mmio_read_32(PWRC_BASE + PSYSR_OFF)); - bakery_lock_release(mpidr, &pwrc_lock); - return rc; + return PSYSR_WK(fvp_pwrc_read_psysr(mpidr)); } unsigned int fvp_pwrc_read_psysr(unsigned long mpidr) { - unsigned int rc = 0; - bakery_lock_get(mpidr, &pwrc_lock); + unsigned int rc; + bakery_lock_get(&pwrc_lock); mmio_write_32(PWRC_BASE + PSYSR_OFF, (unsigned int) mpidr); rc = mmio_read_32(PWRC_BASE + PSYSR_OFF); - bakery_lock_release(mpidr, &pwrc_lock); + bakery_lock_release(&pwrc_lock); return rc; } void fvp_pwrc_write_pponr(unsigned long mpidr) { - bakery_lock_get(mpidr, &pwrc_lock); + bakery_lock_get(&pwrc_lock); mmio_write_32(PWRC_BASE + PPONR_OFF, (unsigned int) mpidr); - bakery_lock_release(mpidr, &pwrc_lock); + bakery_lock_release(&pwrc_lock); } void fvp_pwrc_write_ppoffr(unsigned long mpidr) { - bakery_lock_get(mpidr, &pwrc_lock); + bakery_lock_get(&pwrc_lock); mmio_write_32(PWRC_BASE + PPOFFR_OFF, (unsigned int) mpidr); - bakery_lock_release(mpidr, &pwrc_lock); + bakery_lock_release(&pwrc_lock); } void fvp_pwrc_set_wen(unsigned long mpidr) { - bakery_lock_get(mpidr, &pwrc_lock); + bakery_lock_get(&pwrc_lock); mmio_write_32(PWRC_BASE + PWKUPR_OFF, (unsigned int) (PWKUPR_WEN | mpidr)); - bakery_lock_release(mpidr, &pwrc_lock); + bakery_lock_release(&pwrc_lock); } void fvp_pwrc_clr_wen(unsigned long mpidr) { - bakery_lock_get(mpidr, &pwrc_lock); + bakery_lock_get(&pwrc_lock); mmio_write_32(PWRC_BASE + PWKUPR_OFF, (unsigned int) mpidr); - bakery_lock_release(mpidr, &pwrc_lock); + bakery_lock_release(&pwrc_lock); } void fvp_pwrc_write_pcoffr(unsigned long mpidr) { - bakery_lock_get(mpidr, &pwrc_lock); + bakery_lock_get(&pwrc_lock); mmio_write_32(PWRC_BASE + PCOFFR_OFF, (unsigned int) mpidr); - bakery_lock_release(mpidr, &pwrc_lock); + bakery_lock_release(&pwrc_lock); } /* Nothing else to do here apart from initializing the lock */ diff --git a/services/std_svc/psci/psci_common.c b/services/std_svc/psci/psci_common.c index 87be843..a8719a5 100644 --- a/services/std_svc/psci/psci_common.c +++ b/services/std_svc/psci/psci_common.c @@ -166,7 +166,7 @@ for (level = start_afflvl; level <= end_afflvl; level++) { if (mpidr_nodes[level] == NULL) continue; - bakery_lock_get(mpidr, &mpidr_nodes[level]->lock); + bakery_lock_get(&mpidr_nodes[level]->lock); } } @@ -185,7 +185,7 @@ for (level = end_afflvl; level >= start_afflvl; level--) { if (mpidr_nodes[level] == NULL) continue; - bakery_lock_release(mpidr, &mpidr_nodes[level]->lock); + bakery_lock_release(&mpidr_nodes[level]->lock); } }