diff mbox series

[v2,1/3] genirq/irq_sim: Allow both one and two cell bindings

Message ID 20220926084428.1792815-2-weiyongjun@huaweicloud.com
State New
Headers show
Series allow gpio simulator be used as interrupt controller | expand

Commit Message

Wei Yongjun Sept. 26, 2022, 8:44 a.m. UTC
From: Wei Yongjun <weiyongjun1@huawei.com>

The IRQ simulator only support one cell binding now, this patch make it
works with either one or two cell bindings, where the cell values map
directly to the irq number and irq flags.

Signed-off-by: Wei Yongjun <weiyongjun1@huawei.com>
---
 kernel/irq/irq_sim.c | 1 +
 1 file changed, 1 insertion(+)

Comments

Bartosz Golaszewski Sept. 26, 2022, 11:24 a.m. UTC | #1
On Mon, Sep 26, 2022 at 10:27 AM Wei Yongjun <weiyongjun@huaweicloud.com> wrote:
>
> From: Wei Yongjun <weiyongjun1@huawei.com>
>
> The IRQ simulator only support one cell binding now, this patch make it
> works with either one or two cell bindings, where the cell values map
> directly to the irq number and irq flags.
>
> Signed-off-by: Wei Yongjun <weiyongjun1@huawei.com>
> ---
>  kernel/irq/irq_sim.c | 1 +
>  1 file changed, 1 insertion(+)
>
> diff --git a/kernel/irq/irq_sim.c b/kernel/irq/irq_sim.c
> index dd76323ea3fd..73a90b7b6022 100644
> --- a/kernel/irq/irq_sim.c
> +++ b/kernel/irq/irq_sim.c
> @@ -149,6 +149,7 @@ static void irq_sim_domain_unmap(struct irq_domain *domain, unsigned int virq)
>  static const struct irq_domain_ops irq_sim_domain_ops = {
>         .map            = irq_sim_domain_map,
>         .unmap          = irq_sim_domain_unmap,
> +       .xlate          = irq_domain_xlate_onetwocell,
>  };
>
>  /**
> --
> 2.34.1
>

You'll need Marc's (Cc'ed) Ack here.

Bart
Wei Yongjun Sept. 28, 2022, 7:32 a.m. UTC | #2
On 2022/9/26 20:55, Marc Zyngier wrote:
> On Mon, 26 Sep 2022 07:24:48 -0400,
> Bartosz Golaszewski <brgl@bgdev.pl> wrote:
>>
>> On Mon, Sep 26, 2022 at 10:27 AM Wei Yongjun <weiyongjun@huaweicloud.com> wrote:
>>>
>>> From: Wei Yongjun <weiyongjun1@huawei.com>
>>>
>>> The IRQ simulator only support one cell binding now, this patch make it
>>> works with either one or two cell bindings, where the cell values map
>>> directly to the irq number and irq flags.
>>>
>>> Signed-off-by: Wei Yongjun <weiyongjun1@huawei.com>
>>> ---
>>>  kernel/irq/irq_sim.c | 1 +
>>>  1 file changed, 1 insertion(+)
>>>
>>> diff --git a/kernel/irq/irq_sim.c b/kernel/irq/irq_sim.c
>>> index dd76323ea3fd..73a90b7b6022 100644
>>> --- a/kernel/irq/irq_sim.c
>>> +++ b/kernel/irq/irq_sim.c
>>> @@ -149,6 +149,7 @@ static void irq_sim_domain_unmap(struct irq_domain *domain, unsigned int virq)
>>>  static const struct irq_domain_ops irq_sim_domain_ops = {
>>>         .map            = irq_sim_domain_map,
>>>         .unmap          = irq_sim_domain_unmap,
>>> +       .xlate          = irq_domain_xlate_onetwocell,
>>>  };
>>>
>>>  /**
>>> --
>>> 2.34.1
>>>
>>
>> You'll need Marc's (Cc'ed) Ack here.

Hi Marc,

> 
> The question is what will the simulator code do with this information.
> Throw it away? What of 3/4/5 cell bindings? I'd rather see the

The 3/4/5 cell bindings is selience ignored currently.

> simulator being extended to deal with arbitrary bindings instead of
> trading a harcoded limit for another one. And also give some
> semantics to the extra cells.

Would you means we should allow the users to overwrite the xlate callback
or overwrite the domain_ops?

Regards,
Wei Yongjun
Marc Zyngier Sept. 28, 2022, 7:47 a.m. UTC | #3
On Wed, 28 Sep 2022 08:32:25 +0100,
Wei Yongjun <weiyongjun1@huawei.com> wrote:
> 
> 
> 
> On 2022/9/26 20:55, Marc Zyngier wrote:
> > On Mon, 26 Sep 2022 07:24:48 -0400,
> > Bartosz Golaszewski <brgl@bgdev.pl> wrote:
> >>
> >> On Mon, Sep 26, 2022 at 10:27 AM Wei Yongjun <weiyongjun@huaweicloud.com> wrote:
> >>>
> >>> From: Wei Yongjun <weiyongjun1@huawei.com>
> >>>
> >>> The IRQ simulator only support one cell binding now, this patch make it
> >>> works with either one or two cell bindings, where the cell values map
> >>> directly to the irq number and irq flags.
> >>>
> >>> Signed-off-by: Wei Yongjun <weiyongjun1@huawei.com>
> >>> ---
> >>>  kernel/irq/irq_sim.c | 1 +
> >>>  1 file changed, 1 insertion(+)
> >>>
> >>> diff --git a/kernel/irq/irq_sim.c b/kernel/irq/irq_sim.c
> >>> index dd76323ea3fd..73a90b7b6022 100644
> >>> --- a/kernel/irq/irq_sim.c
> >>> +++ b/kernel/irq/irq_sim.c
> >>> @@ -149,6 +149,7 @@ static void irq_sim_domain_unmap(struct irq_domain *domain, unsigned int virq)
> >>>  static const struct irq_domain_ops irq_sim_domain_ops = {
> >>>         .map            = irq_sim_domain_map,
> >>>         .unmap          = irq_sim_domain_unmap,
> >>> +       .xlate          = irq_domain_xlate_onetwocell,
> >>>  };
> >>>
> >>>  /**
> >>> --
> >>> 2.34.1
> >>>
> >>
> >> You'll need Marc's (Cc'ed) Ack here.
> 
> Hi Marc,
> 
> > 
> > The question is what will the simulator code do with this information.
> > Throw it away? What of 3/4/5 cell bindings? I'd rather see the
> 
> The 3/4/5 cell bindings is selience ignored currently.
> 
> > simulator being extended to deal with arbitrary bindings instead of
> > trading a harcoded limit for another one. And also give some
> > semantics to the extra cells.
> 
> Would you means we should allow the users to overwrite the xlate callback
> or overwrite the domain_ops?

Neither. I think the caller should provide an irq_domain_ops structure
at domain creation, with the .xlate member populated, and the irq_sim
code would add its own ops to it.

Providing NULL would ensure we fallback to the existing behaviour.

Thanks,

	M.
diff mbox series

Patch

diff --git a/kernel/irq/irq_sim.c b/kernel/irq/irq_sim.c
index dd76323ea3fd..73a90b7b6022 100644
--- a/kernel/irq/irq_sim.c
+++ b/kernel/irq/irq_sim.c
@@ -149,6 +149,7 @@  static void irq_sim_domain_unmap(struct irq_domain *domain, unsigned int virq)
 static const struct irq_domain_ops irq_sim_domain_ops = {
 	.map		= irq_sim_domain_map,
 	.unmap		= irq_sim_domain_unmap,
+	.xlate		= irq_domain_xlate_onetwocell,
 };
 
 /**