diff options
author | Yann Gautier <yann.gautier@st.com> | 2019-05-22 19:13:51 +0200 |
---|---|---|
committer | Yann Gautier <yann.gautier@st.com> | 2019-09-02 17:51:57 +0200 |
commit | e463d3f43e0115fbafd7a17f7ba550fc8e9a2ae0 (patch) | |
tree | a0336d26163c963895f97d81ce01a4b5e54837ab /drivers | |
parent | 6cb45f8984af596fc5460204e9be1d85de79cf5e (diff) |
stm32mp1: use a common function to check spinlock is available
To use spinlocks, MMU should be enabled, as well as data cache.
A common function is created (moved from clock file).
It is then used whenever a spinlock has to be taken, in BSEC and clock
drivers.
Change-Id: I94baed0114a2061ad71bd5287a91bf7f1c6821f6
Signed-off-by: Yann Gautier <yann.gautier@st.com>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/st/bsec/bsec.c | 10 | ||||
-rw-r--r-- | drivers/st/clk/stm32mp1_clk.c | 20 |
2 files changed, 7 insertions, 23 deletions
diff --git a/drivers/st/bsec/bsec.c b/drivers/st/bsec/bsec.c index aaecf1f8..b3c15ee8 100644 --- a/drivers/st/bsec/bsec.c +++ b/drivers/st/bsec/bsec.c @@ -32,20 +32,14 @@ static uintptr_t bsec_base; static void bsec_lock(void) { - const uint32_t mask = SCTLR_M_BIT | SCTLR_C_BIT; - - /* Lock is currently required only when MMU and cache are enabled */ - if ((read_sctlr() & mask) == mask) { + if (stm32mp_lock_available()) { spin_lock(&bsec_spinlock); } } static void bsec_unlock(void) { - const uint32_t mask = SCTLR_M_BIT | SCTLR_C_BIT; - - /* Unlock is required only when MMU and cache are enabled */ - if ((read_sctlr() & mask) == mask) { + if (stm32mp_lock_available()) { spin_unlock(&bsec_spinlock); } } diff --git a/drivers/st/clk/stm32mp1_clk.c b/drivers/st/clk/stm32mp1_clk.c index f3b9f0cc..0cc87cc7 100644 --- a/drivers/st/clk/stm32mp1_clk.c +++ b/drivers/st/clk/stm32mp1_clk.c @@ -541,29 +541,19 @@ static const struct stm32mp1_clk_pll *pll_ref(unsigned int idx) return &stm32mp1_clk_pll[idx]; } -static int stm32mp1_lock_available(void) -{ - /* The spinlocks are used only when MMU is enabled */ - return (read_sctlr() & SCTLR_M_BIT) && (read_sctlr() & SCTLR_C_BIT); -} - static void stm32mp1_clk_lock(struct spinlock *lock) { - if (stm32mp1_lock_available() == 0U) { - return; + if (stm32mp_lock_available()) { + /* Assume interrupts are masked */ + spin_lock(lock); } - - /* Assume interrupts are masked */ - spin_lock(lock); } static void stm32mp1_clk_unlock(struct spinlock *lock) { - if (stm32mp1_lock_available() == 0U) { - return; + if (stm32mp_lock_available()) { + spin_unlock(lock); } - - spin_unlock(lock); } bool stm32mp1_rcc_is_secure(void) |