All of lore.kernel.org
 help / color / mirror / Atom feed
From: Albert ARIBAUD <albert.aribaud@free.fr>
To: u-boot@lists.denx.de
Subject: [U-Boot] mv_egiga: effect on making struct members volatile(was: [PATCH V2 3/6] mv_egiga: bugfix: DMA issue fixed using volatile)
Date: Fri, 09 Jul 2010 13:51:06 +0200	[thread overview]
Message-ID: <4C370D2A.6080207@free.fr> (raw)
In-Reply-To: <4C36F1C3.5060806@free.fr>

Le 09/07/2010 11:54, Albert ARIBAUD a ?crit :

>> I think we should debug on this to fix the bug correctly.
>>
>> Regards..
>> Prafulla . .
>
> I have debugged the issue when it happened and found out that the it is
> not really about doing volatile accesses, but about doing accesses
> out-of-order: the compiler intermixes writes from adjacent source code
> lines, which causes the write to the DMA start bit to occur before
> writes to the descriptors are done. Apparently qualifying the struct
> members volatile has an effect or write order that readl/writel have not.
>
> I'll do a detailed comparison of disassembled code with and without the
> volatile qualifiers.

I've done builds with and without the volatile patch and an objdump -S 
of each, concentrating on function mv_egiga_send around lines 540-545 
(filling of TX descriptor) and 549-549 (actual launch of DMA) of mv_egiga.c.

These confirm that the issue is of write ordering, as making the members 
volatile changes this ordering and solves the issue.

Most notably, there is one tx desc field, p_txdesc->byte_cnt, which is 
filled in after start of DMA in the 'bad' case, and before start of DMA 
in the 'good' case.

After reading arch/arm/include/asm/io.h correctly, it seems like in*() 
and out*() macros do include sequence points to make sure their relative 
order is preserved, but writel/readl don't. I'll try wihout volatile but 
with a sequence point forced at the TQC register write.

Amicalement,
-- 
Albert.

  parent reply	other threads:[~2010-07-09 11:51 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-07-09  6:34 [U-Boot] [PATCH V2 0/6] Marvell egiga multiple SoC support Albert Aribaud
2010-07-09  6:34 ` [U-Boot] [PATCH V2 1/6] net: rename: kirkwood_egiga as mv_egiga Albert Aribaud
2010-07-09  6:34   ` [U-Boot] [PATCH V2 2/6] mv_egiga: support SoCs other than kirkwood Albert Aribaud
2010-07-09  6:34     ` [U-Boot] [PATCH V2 3/6] mv_egiga: bugfix: DMA issue fixed using volatile Albert Aribaud
2010-07-09  6:34       ` [U-Boot] [PATCH V2 4/6] mv_egiga: only randomize MAC on kirkwood Albert Aribaud
2010-07-09  6:34         ` [U-Boot] [PATCH V2 5/6] mv_egiga: add support for orion5x egiga controller Albert Aribaud
2010-07-09  6:34           ` [U-Boot] [PATCH V2 6/6] edminiv2: add ethernet support Albert Aribaud
2010-07-09  8:58         ` [U-Boot] [PATCH V2 4/6] mv_egiga: only randomize MAC on kirkwood Prafulla Wadaskar
2010-07-09  9:17           ` Albert ARIBAUD
2010-07-09  9:16       ` [U-Boot] [PATCH V2 3/6] mv_egiga: bugfix: DMA issue fixed using volatile Prafulla Wadaskar
2010-07-09  9:54         ` Albert ARIBAUD
2010-07-09 11:11           ` Prafulla Wadaskar
2010-07-09 11:53             ` Albert ARIBAUD
2010-07-09 13:00               ` Albert ARIBAUD
2010-07-10  6:41                 ` Prafulla Wadaskar
2010-07-09 11:51           ` Albert ARIBAUD [this message]
2010-07-09  9:08   ` [U-Boot] [PATCH V2 1/6] net: rename: kirkwood_egiga as mv_egiga Prafulla Wadaskar

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=4C370D2A.6080207@free.fr \
    --to=albert.aribaud@free.fr \
    --cc=u-boot@lists.denx.de \
    /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.