From mboxrd@z Thu Jan 1 00:00:00 1970 From: Albert ARIBAUD Date: Fri, 09 Jul 2010 15:00:58 +0200 Subject: [U-Boot] [PATCH V2 3/6] mv_egiga: bugfix: DMA issue fixed using volatile In-Reply-To: <4C370DCE.2020108@free.fr> References: <1278657259-23678-1-git-send-email-albert.aribaud@free.fr> <1278657259-23678-2-git-send-email-albert.aribaud@free.fr> <1278657259-23678-3-git-send-email-albert.aribaud@free.fr> <1278657259-23678-4-git-send-email-albert.aribaud@free.fr> <4C36F1C3.5060806@free.fr> <4C370DCE.2020108@free.fr> Message-ID: <4C371D8A.70108@free.fr> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de Le 09/07/2010 13:53, Albert ARIBAUD a ?crit : > Le 09/07/2010 13:11, Prafulla Wadaskar a ?crit : > >> You can use volatile qualifier for the variables in DMA specific code instead of modifying structures, >> Try to use memory barrier or something like that- >> Some ref : http://gcc.gnu.org/ml/gcc/2003-04/msg01180.html >> may be someone c-expert on the list can suggest better > > Seems we've followed the same line of reasoning. :) > > I'll look into forcing a sequence point without resorting to asm. Found it. arch/arm/include/asm/system.h provides isb() which expands to an asm statement acting as a sequence point. Inserting an isb() right before starting DMA ensures that all writes to the descriptor are emitted before setting the TQC register for DMA, so that should work. Shouldn't I send out the isb() fix as a separate patch? After all, it is a fix for a bug (uncontrolled sequencing) which is present for kirkwood even though we were lucky enough that it did not bite so far. Amicalement, -- Albert.