[PATCH 2/4] ARM: PL330: Only register usable channels

Jassi Brar jaswinder.singh at linaro.org
Tue Nov 15 03:48:30 EST 2011


On 2 November 2011 20:00, Javi Merino <javi.merino at arm.com> wrote:
> When the manager is running non-secure, the only channels that can
> issue interrupts are the ones that have a 1 in their corresponding bit
> in Configuration Register 3. The other ones will generate an abort
> when trying to signal the end of the transaction so they are useless
> in non-secure mode.
>
> Signed-off-by: Javi Merino <javi.merino at arm.com>
> Cc: Jassi Brar <jassi.brar at samsung.com>
> ---
>  arch/arm/common/pl330.c |    8 +++++++-
>  1 files changed, 7 insertions(+), 1 deletions(-)
>
> diff --git a/arch/arm/common/pl330.c b/arch/arm/common/pl330.c
> index 842bab0..590fd57 100644
> --- a/arch/arm/common/pl330.c
> +++ b/arch/arm/common/pl330.c
> @@ -1623,6 +1623,11 @@ static inline int _alloc_event(struct pl330_thread *thrd)
>        return -1;
>  }
>
> +static bool is_non_secure_chan(const struct pl330_info *pi, int i)
> +{
> +       return pi->pcfg.irq_ns & (1 << i);
> +}
> +
>  /* Upon success, returns IdentityToken for the
>  * allocated channel, NULL otherwise.
>  */
> @@ -1647,7 +1652,8 @@ void *pl330_request_channel(const struct pl330_info *pi)
>
>        for (i = 0; i < chans; i++) {
>                thrd = &pl330->channels[i];
> -               if (thrd->free) {
> +               if ((thrd->free) && (!_manager_ns(thrd) ||
> +                                       is_non_secure_chan(pi, i))) {
>                        thrd->ev = _alloc_event(thrd);
>                        if (thrd->ev >= 0) {
>                                thrd->free = false;
>
Acked-by: Jassi Brar <jassisinghbrar at gmail.com>

Though _chan_ns(pi, i) would have looked better than is_non_secure_chan(pi, i)



More information about the linux-arm-kernel mailing list