dma changes causes SD card to fail detection

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



I am porting an arm board from linux-3.10 to linux-3.12 and found that
on linux-3.12 I was no longer able to detect the SD card on the board.
I found that the wait_for_completion(&mrq->completion) call in
drivers/mmc/core/core.c:mmc_wait_for_done() was never returning.

I was able to bisect the problem to the following commit. Could you
please advise as to what to do to resolve this issue?

  534070622d2c7fbc5cc929aa93541ccd0ae52ab1 is the first bad commit
  commit 534070622d2c7fbc5cc929aa93541ccd0ae52ab1
  Author: Joel Fernandes <joelf@xxxxxx>
  Date:   Tue Sep 3 10:02:46 2013 -0500

      dma: edma: Write out and handle MAX_NR_SG at a given time

      Process SG-elements in batches of MAX_NR_SG if they are greater
      than MAX_NR_SG. Due to this, at any given time only those many
      slots will be used in the given channel no matter how long the
      scatter list is. We keep track of how much has been written
      inorder to process the next batch of elements in the scatter-list
      and detect completion.

      For such intermediate transfer completions (one batch of MAX_NR_SG),
      make use of pause and resume functions instead of start and stop
      when such intermediate transfer is in progress or completed as we
      donot want to clear any pending events.

      Signed-off-by: Joel Fernandes <joelf@xxxxxx>
      Signed-off-by: Vinod Koul <vinod.koul@xxxxxxxxx>


I tried reverting this commit, but this results in the compiler
complaining with the following:

drivers/dma/edma.c: In function 'edma_execute':
drivers/dma/edma.c:155:11: error: 'struct edma_desc' has no member
named 'processed'
  if (edesc->processed == edesc->pset_nr)
           ^
drivers/dma/edma.c:156:25: error: 'nslots' undeclared (first use in
this function)
   edma_link(echan->slot[nslots-1], echan->ecc->dummy_slot);
                         ^
drivers/dma/edma.c:156:25: note: each undeclared identifier is
reported only once for each function it appears in
drivers/dma/edma.c: At top level:
drivers/dma/edma.c:166:2: error: expected identifier or '(' before 'if'
  if (echan->missed) {
  ^

Thanks,
Jon
--
To unsubscribe from this list: send the line "unsubscribe linux-mmc" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Linux USB Devel]     [Linux Media]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux