Re: Generic DT binding for IPIs

From: Rob Herring
Date: Thu Oct 22 2015 - 09:44:21 EST


On Wed, Oct 14, 2015 at 5:18 AM, Qais Yousef <qais.yousef@xxxxxxxxxx> wrote:
> Hi,
>
> This is an attempt to revive a discussion on the right list this time with
> all the correct people hopefully on CC.

devicetree-spec would be more appropriate list for something like this.

> While trying to upstream a driver, Thomas and Marc Zyngier pointed out the
> need for a generic IPI support in the kernel to allow driver to reserve and
> send ones. Hopefully my latest RFC patch will help to clarify what's being
> done.
>
> https://lkml.org/lkml/2015/10/13/227
>
> We need a generic DT binding support to accompany that to allow a driver to
> reserve an IPI using this new mechanism.
>
> MarcZ had the following suggestion:
>
> https://lkml.org/lkml/2015/8/24/628
>
> Which in summary is
>
> mydevice@f0000000 {
> interrupt-source = <&intc INT_SPEC 2 &inttarg1 &inttarg1>;

What is INT_SPEC and "2"? A drawing of the h/w connections and then
what the binding looks like would be helpful.

> };
>
> inttarg1: mydevice@f1000000 {
> interrupt-sink = <&intc HWAFFINITY1>;

What is HWAFFINITY1? I want to be able to see if say this value is 1,
then the affinity is for cpu0.

> };
>
> inttarg2: cpu@1 {
> interrupt-sink = <&intc HWAFFINITY2>;
> };
>
>
> interrupt-sink requests to reserve an IPI that it will receive at HWAFFINITY
> cpumask. interrupt-source will not do any reservation. It will simply
> connect an IPI reserved by interrupt-sink to the device that will be
> responsible for generating that IPI. This description should allow
> connecting any 2 devices.
> Correct me Marc if I got it wrong please.
>
> I suggested a simplification by assuming that IPIs will only be between host
> OS and a coprocessor which would gives us this form which I think is easier
> to deal with
>
> coprocessor {
> interrupt-source = <&intc INT_SPEC COP_HWAFFINITY>;
> interrupt-sink = <&intc INT_SPEC CPU_HWAFFINITY>;
> }
>
>
> interrupt-source here reserves an IPI to be sent from host OS to coprocessor
> at COP_HWAFFINITY. interrupt-sink will reserve an IPI to be received by host
> OS at CPU_HWAFFINITY. Less generic but I don't know how important it is for
> host OS to setup IPIs between 2 external coprocessors and whether it should
> really be doing that.

Could we use the existing interrupts binding for interrupt-sink?

>
> What do the DT experts think? Any preference or a better suggestion?

Depends how you would assign coproc to coproc IPIs in a system. It may
be fixed in firmware, or more complex coprocs may read the dtb.

Rob
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/