Skip to contentSkip to conversation

pata_cmd64x: fix overclocking of UDMA0-2 modes

PATCH Applied Bartlomiej Zolnierkiewicz 2 participants 2 messages Dec 20, 2009 libata

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 pata_cmd64x: fix overclocking of UDMA0-2 modes

adev->dma_mode stores the transfer mode value not UDMA mode number so the condition in cmd64x_set_dmamode() is always true and the higher UDMA clock is always selected. This can potentially result in data corruption when UDMA33 device is used, when 40-wire cable is used or when the error recovery code decides to lower the device speed down.

The issue was introduced in the commit 6a40da0 ("libata cmd64x: whack into a shape that looks like the documentation") which goes back to kernel 2.6.20.

---
it is patch #116 in my local working queue but I thought it would be nice to get it upstream ahead of other patches..

 drivers/ata/pata_cmd64x.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/ata/pata_cmd64x.c +1 -1
Index: b/drivers/ata/pata_cmd64x.c
===================================================================
@@ -254,7 +254,7 @@ static void cmd64x_set_dmamode(struct at
 		regU |= udma_data[adev->dma_mode - XFER_UDMA_0] << shift;
 		/* Merge the control bits */
 		regU |= 1 << adev->devno; /* UDMA on */
-		if (adev->dma_mode > 2)	/* 15nS timing */
+		if (adev->dma_mode > XFER_UDMA_2) /* 15nS timing */
 			regU |= 4 << adev->devno;
 	} else {
 		regU &= ~ (1 << adev->devno);	/* UDMA off */
Applied
#1 lore raw
Quoted 11 lines · Bartlomiej Zolnierkiewicz

adev->dma_mode stores the transfer mode value not UDMA mode number so the condition in cmd64x_set_dmamode() is always true and the higher UDMA clock is always selected. This can potentially result in data corruption when UDMA33 device is used, when 40-wire cable is used or when the error recovery code decides to lower the device speed down.

The issue was introduced in the commit 6a40da0 ("libata cmd64x: whack into a shape that looks like the documentation") which goes back to kernel 2.6.20.

Quoted 8 lines

---
it is patch #116 in my local working queue but I thought it would be nice to get it upstream ahead of other patches..

  drivers/ata/pata_cmd64x.c |    2 +-
  1 file changed, 1 insertion(+), 1 deletion(-)

applied