Author: dannf
Date: Fri Feb 16 04:20:49 2007
New Revision: 8306

Added:
   
dists/sid/linux-2.6/debian/patches/bugfix/atiixp-cable-detection-support.patch
   dists/sid/linux-2.6/debian/patches/bugfix/atiixp-old-ide-layer-hang.patch
   dists/sid/linux-2.6/debian/patches/bugfix/atiixp-only-one-channel.patch
Modified:
   dists/sid/linux-2.6/debian/changelog
   dists/sid/linux-2.6/debian/patches/series/11
Log:
* atiixp: fix hang w/ old IDE layer calls
* atiixp: fix bug that restricts controller to a single channel.
  (closes: #411023)
* atiixp: add cable detection support, fixing breakage w/ 40-pin cable
  (closes: #411024)

Modified: dists/sid/linux-2.6/debian/changelog
==============================================================================
--- dists/sid/linux-2.6/debian/changelog        (original)
+++ dists/sid/linux-2.6/debian/changelog        Fri Feb 16 04:20:49 2007
@@ -10,7 +10,14 @@
     in Sid may not load on sparc32 before the corresponding packages
     are rebuilt. Sorry for the inconvenience. (closes: #410497)
 
- -- Bastian Blank <[EMAIL PROTECTED]>  Sat, 10 Feb 2007 11:17:30 +0100
+  [ dann frazier ]
+  * atiixp: fix hang w/ old IDE layer calls
+  * atiixp: fix bug that restricts controller to a single channel.
+    (closes: #411023)
+  * atiixp: add cable detection support, fixing breakage w/ 40-pin cable
+    (closes: #411024)
+
+ -- dann frazier <[EMAIL PROTECTED]>  Thu, 15 Feb 2007 19:34:51 -0700
 
 linux-2.6 (2.6.18.dfsg.1-10) unstable; urgency=low
 

Added: 
dists/sid/linux-2.6/debian/patches/bugfix/atiixp-cable-detection-support.patch
==============================================================================
--- (empty file)
+++ 
dists/sid/linux-2.6/debian/patches/bugfix/atiixp-cable-detection-support.patch  
    Fri Feb 16 04:20:49 2007
@@ -0,0 +1,51 @@
+From: Conke Hu <[EMAIL PROTECTED]>
+Date: Sat, 27 Jan 2007 12:46:40 +0000 (+0100)
+Subject: atiixp.c: add cable detection support for ATI IDE
+X-Git-Tag: v2.6.20^0~56^2~5
+X-Git-Url: 
http://www.kernel.org/git/?p=linux%2Fkernel%2Fgit%2Ftorvalds%2Flinux-2.6.git;a=commitdiff_plain;h=e5c073ff24604d4dbb2fbcedb17da6df768468d3
+
+atiixp.c: add cable detection support for ATI IDE
+
+IDE HDD does not work if it uses a 40-pin PATA cable on ATI chipset.
+This patch fixes the bug.
+
+Signed-off-by: Conke Hu <[EMAIL PROTECTED]>
+Cc: Alan Cox <[EMAIL PROTECTED]>
+Cc: Greg KH <[EMAIL PROTECTED]>
+Signed-off-by: Andrew Morton <[EMAIL PROTECTED]>
+Signed-off-by: Bartlomiej Zolnierkiewicz <[EMAIL PROTECTED]>
+---
+
+diff --git a/drivers/ide/pci/atiixp.c b/drivers/ide/pci/atiixp.c
+index 5b7e000..7e1d070 100644
+--- a/drivers/ide/pci/atiixp.c
++++ b/drivers/ide/pci/atiixp.c
+@@ -291,8 +291,12 @@ fast_ata_pio:
+ 
+ static void __devinit init_hwif_atiixp(ide_hwif_t *hwif)
+ {
++      u8 udma_mode = 0;
++      u8 ch = hwif->channel;
++      struct pci_dev *pdev = hwif->pci_dev;
++
+       if (!hwif->irq)
+-              hwif->irq = hwif->channel ? 15 : 14;
++              hwif->irq = ch ? 15 : 14;
+ 
+       hwif->autodma = 0;
+       hwif->tuneproc = &atiixp_tuneproc;
+@@ -308,8 +312,12 @@ static void __devinit init_hwif_atiixp(ide_hwif_t *hwif)
+       hwif->mwdma_mask = 0x06;
+       hwif->swdma_mask = 0x04;
+ 
+-      /* FIXME: proper cable detection needed */
+-      hwif->udma_four = 1;
++      pci_read_config_byte(pdev, ATIIXP_IDE_UDMA_MODE + ch, &udma_mode);
++      if ((udma_mode & 0x07) >= 0x04 || (udma_mode & 0x70) >= 0x40)
++              hwif->udma_four = 1;
++      else
++              hwif->udma_four = 0;
++
+       hwif->ide_dma_host_on = &atiixp_ide_dma_host_on;
+       hwif->ide_dma_host_off = &atiixp_ide_dma_host_off;
+       hwif->ide_dma_check = &atiixp_dma_check;

Added: dists/sid/linux-2.6/debian/patches/bugfix/atiixp-old-ide-layer-hang.patch
==============================================================================
--- (empty file)
+++ dists/sid/linux-2.6/debian/patches/bugfix/atiixp-old-ide-layer-hang.patch   
Fri Feb 16 04:20:49 2007
@@ -0,0 +1,105 @@
+From: Alan <[EMAIL PROTECTED]>
+Date: Sat, 6 Jan 2007 00:36:27 +0000 (-0800)
+Subject: [PATCH] atiixp: Old drivers/ide layer driver for the ATIIXP hang fix
+X-Git-Tag: v2.6.20-rc4^0~70
+X-Git-Url: 
http://www.kernel.org/git/?p=linux%2Fkernel%2Fgit%2Ftorvalds%2Flinux-2.6.git;a=commitdiff_plain;h=6c5f8cc33eb2e10b6ab788bbe259fc142a068627
+
+[PATCH] atiixp: Old drivers/ide layer driver for the ATIIXP hang fix
+
+When the old IDE layer calls into methods in the driver during error
+handling it is essentially random whether ide_lock is already held.  This
+causes a deadlock in the atiixp driver which also uses ide_lock internally
+for locking.
+
+Switch to a private lock instead.
+
[EMAIL PROTECTED]: cleanup]
+Signed-off-by: Alan Cox <[EMAIL PROTECTED]>
+Acked-by: Bartlomiej Zolnierkiewicz <[EMAIL PROTECTED]>
+Signed-off-by: Andrew Morton <[EMAIL PROTECTED]>
+Signed-off-by: Linus Torvalds <[EMAIL PROTECTED]>
+---
+
+diff --git a/drivers/ide/pci/atiixp.c b/drivers/ide/pci/atiixp.c
+index ffdffb6..524e65d 100644
+--- a/drivers/ide/pci/atiixp.c
++++ b/drivers/ide/pci/atiixp.c
+@@ -46,6 +46,8 @@ static atiixp_ide_timing mdma_timing[] = {
+ 
+ static int save_mdma_mode[4];
+ 
++static DEFINE_SPINLOCK(atiixp_lock);
++
+ /**
+  *    atiixp_ratemask         -       compute rate mask for ATIIXP IDE
+  *    @drive: IDE drive to compute for
+@@ -105,7 +107,7 @@ static int atiixp_ide_dma_host_on(ide_drive_t *drive)
+       unsigned long flags;
+       u16 tmp16;
+ 
+-      spin_lock_irqsave(&ide_lock, flags);
++      spin_lock_irqsave(&atiixp_lock, flags);
+ 
+       pci_read_config_word(dev, ATIIXP_IDE_UDMA_CONTROL, &tmp16);
+       if (save_mdma_mode[drive->dn])
+@@ -114,7 +116,7 @@ static int atiixp_ide_dma_host_on(ide_drive_t *drive)
+               tmp16 |= (1 << drive->dn);
+       pci_write_config_word(dev, ATIIXP_IDE_UDMA_CONTROL, tmp16);
+ 
+-      spin_unlock_irqrestore(&ide_lock, flags);
++      spin_unlock_irqrestore(&atiixp_lock, flags);
+ 
+       return __ide_dma_host_on(drive);
+ }
+@@ -125,13 +127,13 @@ static int atiixp_ide_dma_host_off(ide_drive_t *drive)
+       unsigned long flags;
+       u16 tmp16;
+ 
+-      spin_lock_irqsave(&ide_lock, flags);
++      spin_lock_irqsave(&atiixp_lock, flags);
+ 
+       pci_read_config_word(dev, ATIIXP_IDE_UDMA_CONTROL, &tmp16);
+       tmp16 &= ~(1 << drive->dn);
+       pci_write_config_word(dev, ATIIXP_IDE_UDMA_CONTROL, tmp16);
+ 
+-      spin_unlock_irqrestore(&ide_lock, flags);
++      spin_unlock_irqrestore(&atiixp_lock, flags);
+ 
+       return __ide_dma_host_off(drive);
+ }
+@@ -152,7 +154,7 @@ static void atiixp_tuneproc(ide_drive_t *drive, u8 pio)
+       u32 pio_timing_data;
+       u16 pio_mode_data;
+ 
+-      spin_lock_irqsave(&ide_lock, flags);
++      spin_lock_irqsave(&atiixp_lock, flags);
+ 
+       pci_read_config_word(dev, ATIIXP_IDE_PIO_MODE, &pio_mode_data);
+       pio_mode_data &= ~(0x07 << (drive->dn * 4));
+@@ -165,7 +167,7 @@ static void atiixp_tuneproc(ide_drive_t *drive, u8 pio)
+                (pio_timing[pio].command_width << (timing_shift + 4));
+       pci_write_config_dword(dev, ATIIXP_IDE_PIO_TIMING, pio_timing_data);
+ 
+-      spin_unlock_irqrestore(&ide_lock, flags);
++      spin_unlock_irqrestore(&atiixp_lock, flags);
+ }
+ 
+ /**
+@@ -189,7 +191,7 @@ static int atiixp_speedproc(ide_drive_t *drive, u8 
xferspeed)
+ 
+       speed = ide_rate_filter(atiixp_ratemask(drive), xferspeed);
+ 
+-      spin_lock_irqsave(&ide_lock, flags);
++      spin_lock_irqsave(&atiixp_lock, flags);
+ 
+       save_mdma_mode[drive->dn] = 0;
+       if (speed >= XFER_UDMA_0) {
+@@ -208,7 +210,7 @@ static int atiixp_speedproc(ide_drive_t *drive, u8 
xferspeed)
+               }
+       }
+ 
+-      spin_unlock_irqrestore(&ide_lock, flags);
++      spin_unlock_irqrestore(&atiixp_lock, flags);
+ 
+       if (speed >= XFER_SW_DMA_0)
+               pio = atiixp_dma_2_pio(speed);

Added: dists/sid/linux-2.6/debian/patches/bugfix/atiixp-only-one-channel.patch
==============================================================================
--- (empty file)
+++ dists/sid/linux-2.6/debian/patches/bugfix/atiixp-only-one-channel.patch     
Fri Feb 16 04:20:49 2007
@@ -0,0 +1,47 @@
+From: Conke Hu <[EMAIL PROTECTED]>
+Date: Sat, 27 Jan 2007 12:46:30 +0000 (+0100)
+Subject: atiixp.c: sb600 ide only has one channel
+X-Git-Tag: v2.6.20^0~56^2~6
+X-Git-Url: 
http://www.kernel.org/git/?p=linux%2Fkernel%2Fgit%2Ftorvalds%2Flinux-2.6.git;a=commitdiff_plain;h=b25168dfdc162b4198fa6395cd191a20dddc6d34
+
+atiixp.c: sb600 ide only has one channel
+
+AMD/ATI SB600 IDE/PATA controller only has one channel.
+
+Signed-off-by: Conke Hu <[EMAIL PROTECTED]>
+Cc: Alan Cox <[EMAIL PROTECTED]>
+Cc: Greg KH <[EMAIL PROTECTED]>
+Signed-off-by: Andrew Morton <[EMAIL PROTECTED]>
+Signed-off-by: Bartlomiej Zolnierkiewicz <[EMAIL PROTECTED]>
+---
+
+Backported to Debian's 2.6.18 by dann frazier <[EMAIL PROTECTED]>
+
+diff -urN linux-source-2.6.18.orig/drivers/ide/pci/atiixp.c 
linux-source-2.6.18/drivers/ide/pci/atiixp.c
+--- linux-source-2.6.18.orig/drivers/ide/pci/atiixp.c  2007-02-15 
19:49:40.000000000 -0700
++++ linux-source-2.6.18/drivers/ide/pci/atiixp.c       2007-02-15 
19:51:43.000000000 -0700
+@@ -328,7 +328,14 @@
+               .autodma        = AUTODMA,
+               .enablebits     = {{0x48,0x01,0x00}, {0x48,0x08,0x00}},
+               .bootable       = ON_BOARD,
+-      }
++      },{     /* 1 */
++              .name           = "SB600_PATA",
++              .init_hwif      = init_hwif_atiixp,
++              .channels       = 1,
++              .autodma        = AUTODMA,
++              .enablebits     = {{0x48,0x01,0x00}, {0x00,0x00,0x00}},
++              .bootable       = ON_BOARD,
++      },
+ };
+ 
+ /**
+@@ -349,7 +356,7 @@
+       { PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_IXP200_IDE, PCI_ANY_ID, 
PCI_ANY_ID, 0, 0, 0},
+       { PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_IXP300_IDE, PCI_ANY_ID, 
PCI_ANY_ID, 0, 0, 0},
+       { PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_IXP400_IDE, PCI_ANY_ID, 
PCI_ANY_ID, 0, 0, 0},
+-      { PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_IXP600_IDE, PCI_ANY_ID, 
PCI_ANY_ID, 0, 0, 0},
++      { PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_IXP600_IDE, PCI_ANY_ID, 
PCI_ANY_ID, 0, 0, 1},
+       { 0, },
+ };
+ MODULE_DEVICE_TABLE(pci, atiixp_pci_tbl);

Modified: dists/sid/linux-2.6/debian/patches/series/11
==============================================================================
--- dists/sid/linux-2.6/debian/patches/series/11        (original)
+++ dists/sid/linux-2.6/debian/patches/series/11        Fri Feb 16 04:20:49 2007
@@ -7,3 +7,6 @@
 - bugfix/2.6.16.37
 - bugfix/2.6.16.38
 - bugfix/2.6.16.39
++ bugfix/atiixp-old-ide-layer-hang.patch
++ bugfix/atiixp-only-one-channel.patch
++ bugfix/atiixp-cable-detection-support.patch

_______________________________________________
Kernel-svn-changes mailing list
[email protected]
http://lists.alioth.debian.org/mailman/listinfo/kernel-svn-changes

Reply via email to