public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
To: linux-ide@vger.kernel.org
Cc: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>,
	linux-kernel@vger.kernel.org
Subject: [PATCH 53/64] alim15x3: fix handling of DMA timings
Date: Mon, 18 Jan 2010 18:21:19 +0100	[thread overview]
Message-ID: <20100118172119.14623.62147.sendpatchset@localhost> (raw)
In-Reply-To: <20100118171349.14623.90030.sendpatchset@localhost>

From: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
Subject: [PATCH] alim15x3: fix handling of DMA timings

Stop depending on the BIOS setup.

Based on libata pata_ali host driver.

Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
---
 drivers/ide/alim15x3.c |   55 ++++++++++++++++++++++++++++++++++---------------
 1 file changed, 39 insertions(+), 16 deletions(-)

Index: b/drivers/ide/alim15x3.c
===================================================================
--- a/drivers/ide/alim15x3.c
+++ b/drivers/ide/alim15x3.c
@@ -61,6 +61,25 @@ static void ali_fifo_control(ide_hwif_t
 	pci_write_config_byte(pdev, pio_fifo, fifo);
 }
 
+static void ali_program_timings(ide_hwif_t *hwif, ide_drive_t *drive,
+				struct ide_timing *t)
+{
+	struct pci_dev *dev = to_pci_dev(hwif->dev);
+	int port = hwif->channel ? 0x5c : 0x58;
+	u8 unit = drive->dn & 1;
+
+	t->setup = clamp_val(t->setup, 1, 8) & 7;
+	t->act8b = clamp_val(t->act8b, 1, 8) & 7;
+	t->rec8b = clamp_val(t->rec8b, 1, 16) & 15;
+	t->active = clamp_val(t->active, 1, 8) & 7;
+	t->recover = clamp_val(t->recover, 1, 16) & 15;
+
+	pci_write_config_byte(dev, port, t->setup);
+	pci_write_config_byte(dev, port + 1, (t->act8b << 4) | t->rec8b);
+	pci_write_config_byte(dev, port + unit + 2,
+			      (t->active << 4) | t->recover);
+}
+
 /**
  *	ali_set_pio_mode	-	set host controller for PIO mode
  *	@hwif: port
@@ -71,12 +90,9 @@ static void ali_fifo_control(ide_hwif_t
 
 static void ali_set_pio_mode(ide_hwif_t *hwif, ide_drive_t *drive)
 {
-	struct pci_dev *dev = to_pci_dev(hwif->dev);
 	ide_drive_t *pair = ide_get_pair_dev(drive);
 	int bus_speed = ide_pci_clk ? ide_pci_clk : 33;
 	unsigned long T =  1000000 / bus_speed; /* PCI clock based */
-	int port = hwif->channel ? 0x5c : 0x58;
-	u8 unit = drive->dn & 1;
 	struct ide_timing t;
 
 	ide_timing_compute(drive, drive->pio_mode, &t, T, 1);
@@ -93,21 +109,12 @@ static void ali_set_pio_mode(ide_hwif_t
 		}
 	}
 
-	t.setup = clamp_val(t.setup, 1, 8) & 7;
-	t.act8b = clamp_val(t.act8b, 1, 8) & 7;
-	t.rec8b = clamp_val(t.rec8b, 1, 16) & 15;
-	t.active = clamp_val(t.active, 1, 8) & 7;
-	t.recover = clamp_val(t.recover, 1, 16) & 15;
-
 	/* 
 	 * PIO mode => ATA FIFO on, ATAPI FIFO off
 	 */
 	ali_fifo_control(hwif, drive, (drive->media == ide_disk) ? 0x05 : 0x00);
 
-	pci_write_config_byte(dev, port, t.setup);
-	pci_write_config_byte(dev, port + 1, (t.act8b << 4) | t.rec8b);
-	pci_write_config_byte(dev, port + unit + 2,
-			      (t.active << 4) | t.recover);
+	ali_program_timings(hwif, drive, &t);
 }
 
 /**
@@ -146,11 +153,15 @@ static u8 ali_udma_filter(ide_drive_t *d
 static void ali_set_dma_mode(ide_hwif_t *hwif, ide_drive_t *drive)
 {
 	struct pci_dev *dev	= to_pci_dev(hwif->dev);
+	ide_drive_t *pair	= ide_get_pair_dev(drive);
+	int bus_speed		= ide_pci_clk ? ide_pci_clk : 33;
+	unsigned long T		=  1000000 / bus_speed; /* PCI clock based */
 	const u8 speed		= drive->dma_mode;
 	u8 speed1		= speed;
 	u8 unit			= drive->dn & 1;
 	u8 tmpbyte		= 0x00;
 	int m5229_udma		= (hwif->channel) ? 0x57 : 0x56;
+	struct ide_timing t;
 
 	if (speed == XFER_UDMA_6)
 		speed1 = 0x47;
@@ -164,9 +175,21 @@ static void ali_set_dma_mode(ide_hwif_t
 		tmpbyte &= ultra_enable;
 		pci_write_config_byte(dev, m5229_udma, tmpbyte);
 
-		/*
-		 * FIXME: Oh, my... DMA timings are never set.
-		 */
+		ide_timing_compute(drive, drive->dma_mode, &t, T, 1);
+		if (pair) {
+			struct ide_timing p;
+
+			ide_timing_compute(pair, pair->pio_mode, &p, T, 1);
+			ide_timing_merge(&p, &t, &t,
+				IDE_TIMING_SETUP | IDE_TIMING_8BIT);
+			if (pair->dma_mode) {
+				ide_timing_compute(pair, pair->dma_mode,
+						&p, T, 1);
+				ide_timing_merge(&p, &t, &t,
+					IDE_TIMING_SETUP | IDE_TIMING_8BIT);
+			}
+		}
+		ali_program_timings(hwif, drive, &t);
 	} else {
 		pci_read_config_byte(dev, m5229_udma, &tmpbyte);
 		tmpbyte &= (0x0f << ((1-unit) << 2));

  parent reply	other threads:[~2010-01-18 17:25 UTC|newest]

Thread overview: 149+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-01-18 17:13 [PATCH 00/64] more PATA fixes Bartlomiej Zolnierkiewicz
2010-01-18 17:13 ` [PATCH 01/64] libata: fix CFA handling in ide_timing_compute() Bartlomiej Zolnierkiewicz
2010-01-18 18:23   ` Sergei Shtylyov
2010-01-18 18:29     ` Bartlomiej Zolnierkiewicz
2010-01-18 18:57       ` Sergei Shtylyov
2010-01-18 19:04         ` Bartlomiej Zolnierkiewicz
2010-01-21  4:06   ` Jeff Garzik
2010-01-18 17:14 ` [PATCH 02/64] pata_ali: documentation fixes Bartlomiej Zolnierkiewicz
2010-01-21  4:06   ` Jeff Garzik
2010-01-18 17:14 ` [PATCH 03/64] pata_ali: cleanup ali_set_piomode() Bartlomiej Zolnierkiewicz
2010-01-18 17:46   ` Alan Cox
2010-01-18 18:16     ` Bartlomiej Zolnierkiewicz
2010-01-18 17:14 ` [PATCH 04/64] pata_amd: remove bogus code from timing_setup() Bartlomiej Zolnierkiewicz
2010-01-18 17:50   ` Alan Cox
2010-01-18 18:18     ` Bartlomiej Zolnierkiewicz
2010-01-18 17:14 ` [PATCH 05/64] pata_atiixp: remove superfluous wrapper function Bartlomiej Zolnierkiewicz
2010-01-21  4:07   ` Jeff Garzik
2010-01-21  4:09     ` Jeff Garzik
2010-01-21 11:23       ` Bartlomiej Zolnierkiewicz
2010-01-21 16:50         ` Jeff Garzik
2010-01-18 17:14 ` [PATCH 06/64] pata_atiixp: add locking for parallel scanning Bartlomiej Zolnierkiewicz
2010-01-21  4:07   ` Jeff Garzik
2010-01-18 17:14 ` [PATCH 07/64] pata_atiixp: enable parallel scan Bartlomiej Zolnierkiewicz
2010-01-18 17:52   ` Alan Cox
2010-01-18 18:18     ` Bartlomiej Zolnierkiewicz
2010-01-18 17:14 ` [PATCH 08/64] pata_cmd64x: fix PIO setup Bartlomiej Zolnierkiewicz
2010-01-21  4:14   ` Jeff Garzik
2010-01-18 17:15 ` [PATCH 09/64] pata_cmd64x: fix handling of address setup timings Bartlomiej Zolnierkiewicz
2010-01-18 18:46   ` Sergei Shtylyov
2010-01-18 17:15 ` [PATCH 10/64] pata_cmd64x: cmd648_bmdma_stop() fix Bartlomiej Zolnierkiewicz
2010-01-18 17:15 ` [PATCH 11/64] pata_cmd64x: remove unused definitions Bartlomiej Zolnierkiewicz
2010-01-18 17:15 ` [PATCH 12/64] pata_cs5520: convert to use ->init_host method Bartlomiej Zolnierkiewicz
2010-01-18 17:15 ` [PATCH 13/64] pata_cs5535: use correct values for PIO1 and PIO2 data timings Bartlomiej Zolnierkiewicz
2010-01-21  4:16   ` Jeff Garzik
2010-01-18 17:15 ` [PATCH 14/64] pata_cypress: fix PIO timings underclocking Bartlomiej Zolnierkiewicz
2010-01-18 19:05   ` Sergei Shtylyov
2010-01-18 17:15 ` [PATCH 15/64] pata_efar: always program master_data before slave_data Bartlomiej Zolnierkiewicz
2010-01-18 17:55   ` Alan Cox
2010-01-21  4:16   ` Jeff Garzik
2010-01-18 17:16 ` [PATCH 16/64] pata_efar: fix secondary port support Bartlomiej Zolnierkiewicz
2010-01-21  4:17   ` Jeff Garzik
2010-01-18 17:16 ` [PATCH 17/64] pata_efar: add locking for parallel scanning Bartlomiej Zolnierkiewicz
2010-01-18 17:16 ` [PATCH 18/64] pata_efar: enable parallel scan Bartlomiej Zolnierkiewicz
2010-01-18 17:16 ` [PATCH 19/64] pata_serverworks: fix PIO setup for the second channel Bartlomiej Zolnierkiewicz
2010-01-21  4:18   ` Jeff Garzik
2010-01-18 17:16 ` [PATCH 20/64] pata_serverworks: fix error message Bartlomiej Zolnierkiewicz
2010-01-18 17:16 ` [PATCH 21/64] pata_serverworks: cleanup cable detection Bartlomiej Zolnierkiewicz
2010-01-21  4:18   ` Jeff Garzik
2010-01-18 17:17 ` [PATCH 22/64] pata_via: fix address setup timings underlocking Bartlomiej Zolnierkiewicz
2010-01-18 18:00   ` Alan Cox
2010-01-21  4:19   ` Jeff Garzik
2010-01-18 17:17 ` [PATCH 23/64] pata_via: store UDMA masks in via_isa_bridges table Bartlomiej Zolnierkiewicz
2010-01-18 18:03   ` Alan Cox
2010-01-21  4:25   ` Jeff Garzik
2010-01-18 17:17 ` [PATCH 24/64] ide: fix for ide_timing quantisation errors Bartlomiej Zolnierkiewicz
2010-01-18 19:09   ` Sergei Shtylyov
2010-01-19  9:05     ` David Miller
2010-01-18 17:17 ` [PATCH 25/64] ide: use standard timing for XFER_PIO_SLOW mode in ide_timing_compute() Bartlomiej Zolnierkiewicz
2010-01-18 19:11   ` Sergei Shtylyov
2010-01-19  9:25   ` David Miller
2010-01-19 15:09     ` Bartlomiej Zolnierkiewicz
2010-01-19 19:30       ` David Miller
2010-01-19 19:42       ` Sergei Shtylyov
2010-01-19 19:48         ` David Miller
2010-01-19 20:25           ` Bartlomiej Zolnierkiewicz
2010-01-18 17:17 ` [PATCH 26/64] alim15x3: fix PIO timings calculations Bartlomiej Zolnierkiewicz
2010-01-19  9:25   ` David Miller
2010-01-18 17:17 ` [PATCH 27/64] alim15x3: add ali_fifo_control() helper Bartlomiej Zolnierkiewicz
2010-01-19  9:25   ` David Miller
2010-01-18 17:17 ` [PATCH 28/64] alim15x3: remove superfluous locking from ali_set_pio_mode() Bartlomiej Zolnierkiewicz
2010-01-19  9:25   ` David Miller
2010-01-18 17:18 ` [PATCH 29/64] alim15x3: cleanup ali_cable_detect() Bartlomiej Zolnierkiewicz
2010-01-19  9:25   ` David Miller
2010-01-18 17:18 ` [PATCH 30/64] amd74xx: don't change UDMA settings when programming PIO timings Bartlomiej Zolnierkiewicz
2010-01-19  9:26   ` David Miller
2010-01-18 17:18 ` [PATCH 31/64] cmd64x: fix PIO and MWDMA timings calculations Bartlomiej Zolnierkiewicz
2010-01-19  9:26   ` David Miller
2010-01-18 17:18 ` [PATCH 32/64] cmd64x: remove superfluous checks from cmd64x_set_dma_mode() Bartlomiej Zolnierkiewicz
2010-01-19  9:26   ` David Miller
2010-01-18 17:18 ` [PATCH 33/64] cy82c693: fix PIO timings calculations Bartlomiej Zolnierkiewicz
2010-01-19  9:26   ` David Miller
2010-01-18 17:18 ` [PATCH 34/64] cy82c693: remove stale driver history Bartlomiej Zolnierkiewicz
2010-01-19  9:26   ` David Miller
2010-01-18 17:19 ` [PATCH 35/64] opti621: " Bartlomiej Zolnierkiewicz
2010-01-19  9:26   ` David Miller
2010-01-18 17:19 ` [PATCH 36/64] pdc202xx_old: add ->init_hwif method Bartlomiej Zolnierkiewicz
2010-01-19  9:26   ` David Miller
2010-01-18 17:19 ` [PATCH 37/64] serverworks: cleanup svwks_udma_filter() Bartlomiej Zolnierkiewicz
2010-01-19  9:26   ` David Miller
2010-01-18 17:19 ` [PATCH 38/64] serverworks: add missing pci_dev_put() call Bartlomiej Zolnierkiewicz
2010-01-19  9:27   ` David Miller
2010-01-18 17:19 ` [PATCH 39/64] via82cxxx: vx855 is a single channel controller Bartlomiej Zolnierkiewicz
2010-01-19  9:27   ` David Miller
2010-01-18 17:19 ` [PATCH 40/64] ide: add SATA cable detection support Bartlomiej Zolnierkiewicz
2010-01-19  9:42   ` David Miller
2010-01-18 17:19 ` [PATCH 41/64] via82cxxx: fix SATA cable detection Bartlomiej Zolnierkiewicz
2010-01-19  9:42   ` David Miller
2010-01-18 17:20 ` [PATCH 42/64] via82cxxx: workaround h/w bugs Bartlomiej Zolnierkiewicz
2010-01-19  9:42   ` David Miller
2010-01-18 17:20 ` [PATCH 43/64] via82cxxx: add support for vt8261 and future chips Bartlomiej Zolnierkiewicz
2010-01-19  9:42   ` David Miller
2010-01-18 17:20 ` [PATCH 44/64] via82cxxx: add support for VT6415 PCIE PATA IDE Host Controller Bartlomiej Zolnierkiewicz
2010-01-19  9:42   ` David Miller
2010-01-18 17:20 ` [PATCH 45/64] via82cxxx: fix UDMA settings programming Bartlomiej Zolnierkiewicz
2010-01-19  9:43   ` David Miller
2010-01-18 17:20 ` [PATCH 46/64] ide: add drive->pio_mode field Bartlomiej Zolnierkiewicz
2010-01-18 19:28   ` Sergei Shtylyov
2010-01-19 15:09     ` Bartlomiej Zolnierkiewicz
2010-01-21 17:48       ` Sergei Shtylyov
2010-01-19  9:43   ` David Miller
2010-01-18 17:20 ` [PATCH 47/64] ide: add drive->dma_mode field Bartlomiej Zolnierkiewicz
2010-01-19  9:43   ` David Miller
2010-04-12 14:12   ` Sergei Shtylyov
2010-01-18 17:20 ` [PATCH 48/64] ide: change ->set_pio_mode method parameters Bartlomiej Zolnierkiewicz
2010-01-19  9:45   ` David Miller
2010-01-18 17:20 ` [PATCH 49/64] ide: change ->set_dma_mode " Bartlomiej Zolnierkiewicz
2010-01-19  9:45   ` David Miller
2010-01-18 17:20 ` [PATCH 50/64] ide-timings: use ->pio_mode value to determine fastest PIO speed Bartlomiej Zolnierkiewicz
2010-01-19  9:48   ` David Miller
2010-01-18 17:21 ` [PATCH 51/64] alim15x3: fix handling of address setup timings Bartlomiej Zolnierkiewicz
2010-01-19  9:53   ` David Miller
2010-01-18 17:21 ` [PATCH 52/64] alim15x3: fix handling of command timings Bartlomiej Zolnierkiewicz
2010-01-19  9:53   ` David Miller
2010-01-18 17:21 ` Bartlomiej Zolnierkiewicz [this message]
2010-01-19  9:53   ` [PATCH 53/64] alim15x3: fix handling of DMA timings David Miller
2010-01-18 17:21 ` [PATCH 54/64] alim15x3: fix handling of UDMA enable bit Bartlomiej Zolnierkiewicz
2010-01-19  9:53   ` David Miller
2010-04-12 13:53   ` Sergei Shtylyov
2010-04-13 15:15     ` Bartlomiej Zolnierkiewicz
2010-01-18 17:21 ` [PATCH 55/64] amd74xx: use ->pio_mode value to determine pair device speed Bartlomiej Zolnierkiewicz
2010-01-19  9:53   ` David Miller
2010-01-18 17:21 ` [PATCH 56/64] cmd64x: fix handling of address setup timings Bartlomiej Zolnierkiewicz
2010-01-19  9:53   ` David Miller
2010-01-18 17:21 ` [PATCH 57/64] cs5535: use ->pio_mode value to determine pair device speed Bartlomiej Zolnierkiewicz
2010-01-19  9:54   ` David Miller
2010-01-18 17:21 ` [PATCH 58/64] cs5536: " Bartlomiej Zolnierkiewicz
2010-01-19  9:54   ` David Miller
2010-01-18 17:22 ` [PATCH 59/64] it821x: " Bartlomiej Zolnierkiewicz
2010-01-19  9:54   ` David Miller
2010-01-18 17:22 ` [PATCH 60/64] palm_bk3710: " Bartlomiej Zolnierkiewicz
2010-01-19  9:54   ` David Miller
2010-01-18 17:22 ` [PATCH 61/64] siimage: " Bartlomiej Zolnierkiewicz
2010-01-19  9:54   ` David Miller
2010-01-18 17:22 ` [PATCH 62/64] tx493xide: " Bartlomiej Zolnierkiewicz
2010-01-19  9:54   ` David Miller
2010-01-18 17:22 ` [PATCH 63/64] via82cxxx: " Bartlomiej Zolnierkiewicz
2010-01-19  9:54   ` David Miller
2010-01-18 17:22 ` [PATCH 64/64] ide: make ide_get_best_pio_mode() static Bartlomiej Zolnierkiewicz
2010-01-19  9:54   ` David Miller

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=20100118172119.14623.62147.sendpatchset@localhost \
    --to=bzolnier@gmail.com \
    --cc=linux-ide@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox