From mboxrd@z Thu Jan 1 00:00:00 1970 From: Qais Yousef Subject: Generic DT binding for IPIs Date: Wed, 14 Oct 2015 11:18:14 +0100 Message-ID: <561E2BE6.2090807@imgtec.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; format=flowed Content-Transfer-Encoding: 7bit Return-path: Sender: devicetree-owner-u79uwXL29TY76Z2rM5mHXA@public.gmane.org To: devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org Cc: robh+dt-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org, pawel.moll-5wv7dgnIgG8@public.gmane.org, mark.rutland-5wv7dgnIgG8@public.gmane.org, ijc+devicetree-KcIKpvwj1kUDXYZnReoRVg@public.gmane.org, galak-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org, tglx-hfZtesqFncYOwBW4kG4KsQ@public.gmane.org, jason-NLaQJdtUoK4Be96aLqz0jA@public.gmane.org, marc.zyngier-5wv7dgnIgG8@public.gmane.org, jiang.liu-VuQAYsv1563Yd54FQh9/CA@public.gmane.org, linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org List-Id: devicetree@vger.kernel.org Hi, This is an attempt to revive a discussion on the right list this time with all the correct people hopefully on CC. 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>; }; inttarg1: mydevice@f1000000 { interrupt-sink = <&intc HWAFFINITY1>; }; 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. What do the DT experts think? Any preference or a better suggestion? I tried to keep this short and simple, please let me know if you need more info or if there's anything that needs more clarification. Thanks, Qais -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753146AbbJNKST (ORCPT ); Wed, 14 Oct 2015 06:18:19 -0400 Received: from mailapp01.imgtec.com ([195.59.15.196]:6887 "EHLO mailapp01.imgtec.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751731AbbJNKSR (ORCPT ); Wed, 14 Oct 2015 06:18:17 -0400 From: Qais Yousef Subject: Generic DT binding for IPIs To: CC: , , , , , , , , , Message-ID: <561E2BE6.2090807@imgtec.com> Date: Wed, 14 Oct 2015 11:18:14 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.2.0 MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [192.168.154.94] Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi, This is an attempt to revive a discussion on the right list this time with all the correct people hopefully on CC. 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>; }; inttarg1: mydevice@f1000000 { interrupt-sink = <&intc HWAFFINITY1>; }; 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. What do the DT experts think? Any preference or a better suggestion? I tried to keep this short and simple, please let me know if you need more info or if there's anything that needs more clarification. Thanks, Qais