From 5fcdb097918dc9c6b510ac41cc61042a0bc93d4a Mon Sep 17 00:00:00 2001 From: Gregory Nutt Date: Sun, 15 Mar 2015 09:35:48 -0600 Subject: [PATCH] SAMA5: Fix a bug in SAMA5 HSMCI. The bitfield mask and shift values were reversed resulting in a trashed value for the number of blocks in the BLOCKR register. This was sufficient to prevent DMA writes from working. --- arch/arm/src/sama5/sam_hsmci.c | 3 ++- arch/arm/src/samv7/sam_hsmci.c | 3 ++- configs/sama5d3-xplained/README.txt | 3 +++ configs/sama5d3x-ek/README.txt | 3 +++ 4 files changed, 10 insertions(+), 2 deletions(-) diff --git a/arch/arm/src/sama5/sam_hsmci.c b/arch/arm/src/sama5/sam_hsmci.c index c1a7e92d35d..1dea391edbf 100644 --- a/arch/arm/src/sama5/sam_hsmci.c +++ b/arch/arm/src/sama5/sam_hsmci.c @@ -3010,8 +3010,9 @@ static int sam_dmasendsetup(FAR struct sdio_dev_s *dev, */ regval = sam_getreg(priv, SAM_HSMCI_BLKR_OFFSET); - nblocks = ((regval & HSMCI_BLKR_BCNT_SHIFT) >> HSMCI_BLKR_BCNT_SHIFT); + nblocks = ((regval & HSMCI_BLKR_BCNT_MASK) >> HSMCI_BLKR_BCNT_SHIFT); blocksize = ((regval & HSMCI_BLKR_BLKLEN_MASK) >> HSMCI_BLKR_BLKLEN_SHIFT); + DEBUGASSERT(nblocks > 0 && blocksize > 0 && (blocksize & 3) == 0); /* Physical address of the HSCMI source register, either the TDR (for diff --git a/arch/arm/src/samv7/sam_hsmci.c b/arch/arm/src/samv7/sam_hsmci.c index 5db631f12a2..634f2127aa2 100644 --- a/arch/arm/src/samv7/sam_hsmci.c +++ b/arch/arm/src/samv7/sam_hsmci.c @@ -2935,8 +2935,9 @@ static int sam_dmasendsetup(FAR struct sdio_dev_s *dev, */ regval = sam_getreg(priv, SAM_HSMCI_BLKR_OFFSET); - nblocks = ((regval & HSMCI_BLKR_BCNT_SHIFT) >> HSMCI_BLKR_BCNT_SHIFT); + nblocks = ((regval & HSMCI_BLKR_BCNT_MASK) >> HSMCI_BLKR_BCNT_SHIFT); blocksize = ((regval & HSMCI_BLKR_BLKLEN_MASK) >> HSMCI_BLKR_BLKLEN_SHIFT); + DEBUGASSERT(nblocks > 0 && blocksize > 0 && (blocksize & 3) == 0); /* Physical address of the HSCMI source register, either the TDR (for diff --git a/configs/sama5d3-xplained/README.txt b/configs/sama5d3-xplained/README.txt index 29c59a29653..258bb3ed944 100644 --- a/configs/sama5d3-xplained/README.txt +++ b/configs/sama5d3-xplained/README.txt @@ -3168,6 +3168,9 @@ To-Do List the SAMA5D4 which has a different DMA subsystem). This is a bug that needs to be resolved. + UPDATE: This problem may be fixed with a bug correct on 2015-03-15). + Ned to retest. + 3) GMAC has only been tested on a 10/100Base-T network. I don't have a 1000Base-T network to support additional testing. diff --git a/configs/sama5d3x-ek/README.txt b/configs/sama5d3x-ek/README.txt index d2264686a00..840926f39e1 100644 --- a/configs/sama5d3x-ek/README.txt +++ b/configs/sama5d3x-ek/README.txt @@ -3825,6 +3825,9 @@ To-Do List the SAMA5D4 which has a different DMA subsystem). This is a bug that needs to be resolved. + UPDATE: This problem may be fixed with a bug correct on 2015-03-15). + Ned to retest. + 4) I believe that there is an issue when the internal AT25 FLASH is formatted by NuttX. That format works fine with Linux, but does not appear to work with Windows. Reformatting on Windows can resolve this.