mirror of
https://github.com/ARM-software/arm-trusted-firmware.git
synced 2025-04-25 22:35:42 +00:00
Merge pull request #147 from athoelke/at/remove-bakery-mpidr
Remove calling CPU mpidr from bakery lock API
This commit is contained in:
commit
7eea13523c
4 changed files with 23 additions and 28 deletions
|
@ -44,8 +44,8 @@ typedef struct bakery_lock {
|
||||||
#define NO_OWNER (-1)
|
#define NO_OWNER (-1)
|
||||||
|
|
||||||
void bakery_lock_init(bakery_lock_t *bakery);
|
void bakery_lock_init(bakery_lock_t *bakery);
|
||||||
void bakery_lock_get(unsigned long mpidr, bakery_lock_t *bakery);
|
void bakery_lock_get(bakery_lock_t *bakery);
|
||||||
void bakery_lock_release(unsigned long mpidr, bakery_lock_t *bakery);
|
void bakery_lock_release(bakery_lock_t *bakery);
|
||||||
int bakery_lock_try(unsigned long mpidr, bakery_lock_t *bakery);
|
int bakery_lock_try(bakery_lock_t *bakery);
|
||||||
|
|
||||||
#endif /* __BAKERY_LOCK_H__ */
|
#endif /* __BAKERY_LOCK_H__ */
|
||||||
|
|
|
@ -124,12 +124,12 @@ static unsigned int bakery_get_ticket(bakery_lock_t *bakery, unsigned int me)
|
||||||
* of others'. The CPU with the highest priority (lowest numerical value)
|
* of others'. The CPU with the highest priority (lowest numerical value)
|
||||||
* acquires the lock
|
* 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 they, me;
|
||||||
unsigned int my_ticket, my_prio, their_ticket;
|
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);
|
assert_bakery_entry_valid(me, bakery);
|
||||||
|
|
||||||
|
@ -176,9 +176,9 @@ void bakery_lock_get(unsigned long mpidr, bakery_lock_t *bakery)
|
||||||
|
|
||||||
|
|
||||||
/* Release the lock and signal contenders */
|
/* 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_entry_valid(me, bakery);
|
||||||
assert(bakery->owner == me);
|
assert(bakery->owner == me);
|
||||||
|
|
|
@ -41,59 +41,54 @@ static bakery_lock_t pwrc_lock __attribute__ ((section("tzfw_coherent_mem")));
|
||||||
|
|
||||||
unsigned int fvp_pwrc_get_cpu_wkr(unsigned long mpidr)
|
unsigned int fvp_pwrc_get_cpu_wkr(unsigned long mpidr)
|
||||||
{
|
{
|
||||||
unsigned int rc = 0;
|
return PSYSR_WK(fvp_pwrc_read_psysr(mpidr));
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned int fvp_pwrc_read_psysr(unsigned long mpidr)
|
unsigned int fvp_pwrc_read_psysr(unsigned long mpidr)
|
||||||
{
|
{
|
||||||
unsigned int rc = 0;
|
unsigned int rc;
|
||||||
bakery_lock_get(mpidr, &pwrc_lock);
|
bakery_lock_get(&pwrc_lock);
|
||||||
mmio_write_32(PWRC_BASE + PSYSR_OFF, (unsigned int) mpidr);
|
mmio_write_32(PWRC_BASE + PSYSR_OFF, (unsigned int) mpidr);
|
||||||
rc = mmio_read_32(PWRC_BASE + PSYSR_OFF);
|
rc = mmio_read_32(PWRC_BASE + PSYSR_OFF);
|
||||||
bakery_lock_release(mpidr, &pwrc_lock);
|
bakery_lock_release(&pwrc_lock);
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
void fvp_pwrc_write_pponr(unsigned long mpidr)
|
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);
|
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)
|
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);
|
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)
|
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,
|
mmio_write_32(PWRC_BASE + PWKUPR_OFF,
|
||||||
(unsigned int) (PWKUPR_WEN | mpidr));
|
(unsigned int) (PWKUPR_WEN | mpidr));
|
||||||
bakery_lock_release(mpidr, &pwrc_lock);
|
bakery_lock_release(&pwrc_lock);
|
||||||
}
|
}
|
||||||
|
|
||||||
void fvp_pwrc_clr_wen(unsigned long mpidr)
|
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,
|
mmio_write_32(PWRC_BASE + PWKUPR_OFF,
|
||||||
(unsigned int) mpidr);
|
(unsigned int) mpidr);
|
||||||
bakery_lock_release(mpidr, &pwrc_lock);
|
bakery_lock_release(&pwrc_lock);
|
||||||
}
|
}
|
||||||
|
|
||||||
void fvp_pwrc_write_pcoffr(unsigned long mpidr)
|
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);
|
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 */
|
/* Nothing else to do here apart from initializing the lock */
|
||||||
|
|
|
@ -166,7 +166,7 @@ void psci_acquire_afflvl_locks(unsigned long mpidr,
|
||||||
for (level = start_afflvl; level <= end_afflvl; level++) {
|
for (level = start_afflvl; level <= end_afflvl; level++) {
|
||||||
if (mpidr_nodes[level] == NULL)
|
if (mpidr_nodes[level] == NULL)
|
||||||
continue;
|
continue;
|
||||||
bakery_lock_get(mpidr, &mpidr_nodes[level]->lock);
|
bakery_lock_get(&mpidr_nodes[level]->lock);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -185,7 +185,7 @@ void psci_release_afflvl_locks(unsigned long mpidr,
|
||||||
for (level = end_afflvl; level >= start_afflvl; level--) {
|
for (level = end_afflvl; level >= start_afflvl; level--) {
|
||||||
if (mpidr_nodes[level] == NULL)
|
if (mpidr_nodes[level] == NULL)
|
||||||
continue;
|
continue;
|
||||||
bakery_lock_release(mpidr, &mpidr_nodes[level]->lock);
|
bakery_lock_release(&mpidr_nodes[level]->lock);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue