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