All of lore.kernel.org
 help / color / mirror / Atom feed
From: sylvain.rochet@finsecur.com (Sylvain Rochet)
To: linux-arm-kernel@lists.infradead.org
Subject: SAMA5D3x: I2C, USART1 and DMA.
Date: Tue, 24 Nov 2015 17:53:34 +0100	[thread overview]
Message-ID: <20151124165334.GA29813@finsecur.com> (raw)
In-Reply-To: <20151124164424.GA28794@finsecur.com>

Hi Peter,

On Tue, Nov 24, 2015 at 05:44:24PM +0100, Sylvain Rochet wrote:
> Hi Peter,
> 
> On Tue, Nov 24, 2015 at 05:14:15PM +0100, Peter Rosin wrote:
> > Hi!
> > 
> > I have a board similar to the atmel sama5d31ek with some devices
> > on the i2c0 bus and an async serial line on usart1 that communicates
> > with a baudrate of 125000. The usart is mostly receiving.
> > 
> > In a divine moment, our designers failed to add handshaking signals
> > for the usart, and now we have trouble with the occational lost interrupt
> > and hence lost data (at least that is my current understanding of
> > what is going on).
> > 
> > The lost data is clearly tied to i2c traffic, and specifically to i2c writes.
> > i2c reads seems to go by unnoticed by usart1. Of course, other stuff
> > may also cause trouble, but if I test by temporarily switching off the
> > i2c writes a BIG part of the problem is gone. But the i2c writes also
> > have a reason to be there of course, so that is not a long term
> > solution...
> > 
> > What immediately springs to mind is to reduce the number of interrupts
> > needed on the usart by enabling DMA. DMA is apparently disabled by
> > arch/arm/boot/dts/sama5d3xmb.dtsi with this:
> > 
> >             usart1: serial at f0020000 {
> >                 dmas = <0>, <0>;    /*  Do not use DMA for usart1 */
> > 
> > However, cutting out the "dmas" line does not improve things. So, how
> > do I enable DMA on usart1?
> 
> You are probably running out of available DMA channels on the DMAC0. 
> There is 8 channels available per DMAC and this is quite a scarce 
> resource.
> 
> See "DMA Channels Definition" tables from the SAMA5D3 datasheet. I hope 
> you balanced well the peripherals you are using in your design on the 
> two DMAC to prevent running out of DMA channels.

I forgot to add that you need to explicitely enable DMA on usart as 
explained in the Documentation/devicetree/bindings/serial/atmel-usart.txt
documentation, this way: 

usart0: serial at f001c000 {
        ...
        atmel,use-dma-rx;
        atmel,use-dma-tx;
        ...
}

Sylvain

  reply	other threads:[~2015-11-24 16:53 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-11-24 16:14 SAMA5D3x: I2C, USART1 and DMA Peter Rosin
2015-11-24 16:44 ` Sylvain Rochet
2015-11-24 16:53   ` Sylvain Rochet [this message]
2015-11-25 11:55     ` Peter Rosin

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=20151124165334.GA29813@finsecur.com \
    --to=sylvain.rochet@finsecur.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.