summaryrefslogtreecommitdiff
path: root/packages/linux/nas100d-kernel/2.6.15/60-nas100d-ide.patch
diff options
context:
space:
mode:
Diffstat (limited to 'packages/linux/nas100d-kernel/2.6.15/60-nas100d-ide.patch')
-rw-r--r--packages/linux/nas100d-kernel/2.6.15/60-nas100d-ide.patch62
1 files changed, 46 insertions, 16 deletions
diff --git a/packages/linux/nas100d-kernel/2.6.15/60-nas100d-ide.patch b/packages/linux/nas100d-kernel/2.6.15/60-nas100d-ide.patch
index 9f5d164356..afd7d9c750 100644
--- a/packages/linux/nas100d-kernel/2.6.15/60-nas100d-ide.patch
+++ b/packages/linux/nas100d-kernel/2.6.15/60-nas100d-ide.patch
@@ -1,17 +1,18 @@
- drivers/ide/pci/aec62xx.c | 51 +++++++++++++++++++++++++++++++++++++++++++---
- drivers/ide/setup-pci.c | 12 +++++++++-
- 2 files changed, 59 insertions(+), 4 deletions(-)
+ drivers/ide/pci/aec62xx.c | 67 +++++++++++++++++++++++++++++++++++++++++++---
+ drivers/ide/setup-pci.c | 12 +++++++-
+ 2 files changed, 75 insertions(+), 4 deletions(-)
---- linux-nas100d.orig/drivers/ide/pci/aec62xx.c 2005-11-12 15:38:03.000000000 +0100
-+++ linux-nas100d/drivers/ide/pci/aec62xx.c 2005-11-13 01:45:26.000000000 +0100
-@@ -145,6 +145,15 @@ static int aec6210_tune_chipset (ide_dri
+--- linux-nas100d.orig/drivers/ide/pci/aec62xx.c 2005-11-21 20:49:50.000000000 +0100
++++ linux-nas100d/drivers/ide/pci/aec62xx.c 2005-11-21 22:15:21.000000000 +0100
+@@ -145,6 +145,16 @@ static int aec6210_tune_chipset (ide_dri
unsigned long flags;
local_irq_save(flags);
+
+#ifdef CONFIG_MACH_NAS100D
+ printk(KERN_INFO "aec62xx: nas100d tuning\n");
-+ pci_write_config_byte(hwif->pci_dev, PCI_LATENCY_TIMER, 0x90);
++ pci_write_config_word(hwif->pci_dev, PCI_COMMAND, PCI_COMMAND_IO | PCI_COMMAND_MASTER);
++ pci_write_config_byte(hwif->pci_dev, PCI_LATENCY_TIMER, 0x80);
+ /* Enable burst mode & force 2 ports enable */
+ pci_read_config_byte(hwif->pci_dev, 0x4a, &tmp0);
+ pci_write_config_byte(hwif->pci_dev, 0x4a, tmp0 | 0x80);
@@ -20,7 +21,25 @@
/* 0x40|(2*drive->dn): Active, 0x41|(2*drive->dn): Recovery */
pci_read_config_word(dev, 0x40|(2*drive->dn), &d_conf);
tmp0 = pci_bus_clock_list(speed, BUSCLOCK(dev));
-@@ -263,7 +272,7 @@ static int aec62xx_irq_timeout (ide_driv
+@@ -206,9 +216,17 @@ static int config_chipset_for_dma (ide_d
+ {
+ u8 speed = ide_dma_speed(drive, aec62xx_ratemask(drive));
+
++#ifdef CONFIG_MACH_NAS100D
++ ide_hwif_t *hwif= HWIF(drive);
++ u8 unit = (drive->select.b.unit & 0x01);
++#endif
+ if (!(speed))
+ return 0;
+
++#ifdef CONFIG_MACH_NAS100D
++ outb((inb(hwif->dma_base+2) & ~(1<<(5+unit))), hwif->dma_base+2);
++#endif
++
+ (void) aec62xx_tune_chipset(drive, speed);
+ return ide_dma_enable(drive);
+ }
+@@ -263,7 +281,7 @@ static int aec62xx_irq_timeout (ide_driv
case PCI_DEVICE_ID_ARTOP_ATP865:
case PCI_DEVICE_ID_ARTOP_ATP865R:
printk(" AEC62XX time out ");
@@ -29,7 +48,7 @@
{
int i = 0;
u8 reg49h = 0;
-@@ -277,7 +286,7 @@ static int aec62xx_irq_timeout (ide_driv
+@@ -277,7 +295,7 @@ static int aec62xx_irq_timeout (ide_driv
default:
break;
}
@@ -38,7 +57,7 @@
{
ide_hwif_t *hwif = HWIF(drive);
struct pci_dev *dev = hwif->pci_dev;
-@@ -299,6 +308,14 @@ static unsigned int __devinit init_chips
+@@ -299,6 +317,14 @@ static unsigned int __devinit init_chips
{
int bus_speed = system_bus_clock();
@@ -53,7 +72,7 @@
if (dev->resource[PCI_ROM_RESOURCE].start) {
pci_write_config_dword(dev, PCI_ROM_ADDRESS, dev->resource[PCI_ROM_RESOURCE].start | PCI_ROM_ADDRESS_ENABLE);
printk(KERN_INFO "%s: ROM enabled at 0x%08lx\n", name, dev->resource[PCI_ROM_RESOURCE].start);
-@@ -312,12 +329,35 @@ static unsigned int __devinit init_chips
+@@ -312,12 +338,35 @@ static unsigned int __devinit init_chips
return dev->irq;
}
@@ -89,7 +108,7 @@
if (hwif->pci_dev->device == PCI_DEVICE_ID_ARTOP_ATP850UF) {
hwif->serialized = hwif->channel;
hwif->no_dsc = 1;
-@@ -360,7 +400,7 @@ static void __devinit init_dma_aec62xx(i
+@@ -360,11 +409,18 @@ static void __devinit init_dma_aec62xx(i
} else {
u8 ata66 = 0;
pci_read_config_byte(hwif->pci_dev, 0x49, &ata66);
@@ -98,7 +117,18 @@
hwif->udma_four = (ata66&(hwif->channel?0x02:0x01))?0:1;
}
-@@ -427,6 +467,9 @@ static ide_pci_device_t aec62xx_chipsets
+ ide_setup_dma(hwif, dmabase, 8);
++#ifdef CONFIG_MACH_NAS100D
++ {
++ u8 dma_stat = hwif->INB(hwif->dma_status);
++ dma_stat |= (1 << 4);
++ hwif->OUTB(dma_stat, hwif->dma_status);
++ }
++#endif
+ }
+
+ static int __devinit init_setup_aec62xx(struct pci_dev *dev, ide_pci_device_t *d)
+@@ -427,6 +483,9 @@ static ide_pci_device_t aec62xx_chipsets
.init_dma = init_dma_aec62xx,
.channels = 2,
.autodma = AUTODMA,
@@ -108,7 +138,7 @@
.bootable = OFF_BOARD,
},{ /* 4 */
.name = "AEC6X80R",
-@@ -454,6 +497,8 @@ static int __devinit aec62xx_init_one(st
+@@ -454,6 +513,8 @@ static int __devinit aec62xx_init_one(st
{
ide_pci_device_t *d = &aec62xx_chipsets[id->driver_data];
@@ -117,8 +147,8 @@
return d->init_setup(dev, d);
}
---- linux-nas100d.orig/drivers/ide/setup-pci.c 2005-11-12 15:38:03.000000000 +0100
-+++ linux-nas100d/drivers/ide/setup-pci.c 2005-11-13 01:36:30.000000000 +0100
+--- linux-nas100d.orig/drivers/ide/setup-pci.c 2005-11-21 20:49:50.000000000 +0100
++++ linux-nas100d/drivers/ide/setup-pci.c 2005-11-21 22:01:22.000000000 +0100
@@ -602,10 +602,20 @@ void ide_pci_setup_ports(struct pci_dev
if ((d->flags & IDEPCI_FLAG_FORCE_PDC) &&
(secondpdc++==1) && (port==1))