From: vinod.koul@intel.com (Vinod Koul)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH V2 3/8] dmaengine: bcm2835: use shared interrupt for channel 11 to 14.
Date: Thu, 14 Jan 2016 09:37:49 +0530 [thread overview]
Message-ID: <20160114040749.GJ11130@localhost> (raw)
In-Reply-To: <56965E3B.7060104@martin.sperl.org>
On Wed, Jan 13, 2016 at 03:24:59PM +0100, Martin Sperl wrote:
> >>But that would be frowned upon, so I had to come up with the approach
> >>taken, which makes the following assumptions:
> >
> >DT was designed to move this info and hardcoding from kernel into
> >DT, so why cant we do that?
> We still need to be backwards-compatible - at least that is what
> everyone tells me, so I need to hard-code fallbacks for those values.
IMO hard code for falling back is okay as that supports old cases and new
platforms use geric DT info and new devices can be supported generically,
please check with DT folks..
> >>* the DT maps only the interrupts that are assigned to the HW block
> >>* the driver knows about the number of DMA channels in HW
> that could be a DT property, yes.
> >>* the driver knows about the mapping of shared interrupts
> >> (11-14 share irq).
> OK - how would you define that "mapping" in a "sane" manner in the DT
> that allows us to have multiple such mappings in the future?
You are hard coding the flags for each channel, we can pass this for each
channel in the interrupt configi, a flag share/none..? Please run this thru
DT experts and I am not one of them..
> >>It is not optimal, but at least it works with the least amount of
> >>change to the DT - and what about all those assumptions that we
> >>would need to hard-code to be backwards compatible to the DT without?
> >>
> >>I guess we could replace BCM2835_DMA_MAX_CHANNEL_NUMBER with:
> >> /* we do not support dma channel 15 with this driver */
> >> #define BCM2835_DMA_MAX_CHANNEL_SUPPORTED 14
> >> ...
> >> for (i = 0;
> >> i <= min_t(int, flv(chans_available),
> >>BCM2835_DMA_MAX_CHANNEL_SUPPORTED);
> >> i++) {
> >>
> >>So which way would you prefer this to go - I got another few days
> >>before I leave on vacation.
> >
> >I still think DT is the right way to go here, unless I hear some other
> >convincing answer..
> >
>
> The point is that the way the DT is right now it becomes very hard to
> extend it in a sane manner - It would be bitmaps/lists here,
> bitmaps/lists there...
>
> Breaking the DT would make all of it go away.
>
> If I think of it (reading your other comments), then here how the
> "new" DT could look like:
> dma: dma at 7e007f00 {
> /* new compatible name to map to new driver */
> compatible = "brcm,bcm2835-dma-v2";
>
> /* the status/enable registers */
> reg = <0x7e007f00 0x100>;
>
> /* the catch all interrupt */
> interrupts = <1 28>;
>
> dma0: dma-channel at 0x7e007000 {
> reg = <0x7e007000 0x100>;
> interrupts = <1 16>;
> };
> ...
> dma7: dma-channel at 0x7e007700 {
> reg = <0x7e007700 0x100>;
> interrupts = <1 23>;
> dma-channel-type = <BCM2835_DMA_LITE>;
> dma-max-length = <65532>; /* 64K - 4 */
> };
> ...
> dma11: dma-channel at 0x7e007b00 {
> reg = <0x7e007b00 0x100>;
> interrupts = <1 27>;
> shared-interrupt;
> dma-channel-type = <BCM2835_DMA_LITE>;
> };
> ...
> dma14: dma-channel at 0x7e007e00 {
> reg = <0x7e007e00 0x100>;
> interrupts = <1 27>;
> shared-interrupt;
> dma-channel-type = <BCM2835_DMA_LITE>;
> };
> dma15: dma-channel at 0x7ee05000 {
> reg = <0x7ee05000 0x100>;
> };
> };
This looks okay to me to start with...
>
> Adding additional "features" would make it easy like:
> * dma-channel priority on AXI bus
> * setting warn/alert levels for DREQs
> * eventually mapping of drivers to the explicit dma channel
> e.g: SPI has a limit of 65534 bytes per dma transfer in HW,
> so the use of a DMA-LITE engine would be sufficient - no need
> to waste a "normal" DMA-engine with 2D support,...
> So the spi dt node could then look like this:
> dmas = <&dma11 BCM2835_DREQ_SPI_TX>, <&dma12 BCM2835_DREQ_SPI_RX>;
> dma-names = "tx", "rx";
>
> Is this the approach I should try to take?
>
> Or do you want me to continue on the "patchwork" route:
> dma: dma at 7e007000 {
> interrupt-names = "dma0", ..., "dma10", "shared", "catch-all";
>
> bcrm,dma-lite-channel-mask = <0x7f80>;
> bcrm,dma-max-channels = 14;
>
> bcrm,catch-all-interrupt-name = "catch-all";
> bcrm,shared-interrupt-name = "shared";
> bcrm,shared-interrupt-channel-mapping = <0x7800>;
> }
>
> For all of the above we would need to define defaults in the driver
> to make it work in a backwards compatible way.
>
> That would not support the registers for each dma channel and not lend
> itself towards extending only via the DT - say support DMA channel 15.
>
> I have another 5 days before I leave on vacation - there is only so
> much I can do...
>
> Thanks,
> Martin
--
~Vinod
next prev parent reply other threads:[~2016-01-14 4:07 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-01-07 17:32 [PATCH V2 0/8] dmaengine: bcm2835: enhancement of driver kernel at martin.sperl.org
2016-01-07 17:32 ` [PATCH V2 1/8] dmaengine: bcm2835: set residue_granularity field kernel at martin.sperl.org
2016-01-28 19:53 ` Eric Anholt
2016-01-07 17:33 ` [PATCH V2 2/8] dmaengine: bcm2835: remove unnecessary masking of dma channels kernel at martin.sperl.org
2016-01-30 3:08 ` Eric Anholt
2016-01-07 17:33 ` [PATCH V2 3/8] dmaengine: bcm2835: use shared interrupt for channel 11 to 14 kernel at martin.sperl.org
2016-01-13 12:26 ` Vinod Koul
2016-01-13 13:30 ` Martin Sperl
2016-01-13 13:43 ` Vinod Koul
2016-01-13 14:24 ` Martin Sperl
2016-01-14 4:07 ` Vinod Koul [this message]
2016-01-14 8:48 ` Martin Sperl
2016-02-29 17:10 ` Martin Sperl
2016-03-03 15:45 ` Vinod Koul
2016-02-18 4:09 ` Eric Anholt
2016-01-07 17:33 ` [PATCH V2 4/8] dmaengine: bcm2835: add additional defines for DMA-registers kernel at martin.sperl.org
2016-01-13 12:32 ` Vinod Koul
2016-02-18 4:18 ` Eric Anholt
2016-01-07 17:33 ` [PATCH V2 5/8] dmaengine: bcm2835: move cyclic member from bcm2835_chan into bcm2835_desc kernel at martin.sperl.org
2016-02-18 4:19 ` Eric Anholt
2016-01-07 17:33 ` [PATCH V2 6/8] dmaengine: bcm2835: move controlblock chain generation into separate method kernel at martin.sperl.org
2016-01-13 13:23 ` Vinod Koul
2016-01-13 13:38 ` Martin Sperl
2016-02-18 3:24 ` Eric Anholt
2016-02-29 18:14 ` Martin Sperl
2016-01-07 17:33 ` [PATCH V2 7/8] dmaengine: bcm2835: add slave_sg support to bcm2835-dma kernel at martin.sperl.org
2016-02-18 4:39 ` Eric Anholt
2016-01-07 17:33 ` [PATCH V2 8/8] dmaengine: bcm2835: add dma_memcopy " kernel at martin.sperl.org
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20160114040749.GJ11130@localhost \
--to=vinod.koul@intel.com \
--cc=linux-arm-kernel@lists.infradead.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).