lkml.org 
[lkml]   [1998]   [Oct]   [2]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
Date
From
Subject2.1.123.ide.update.07

Corrects ide-mod for ide-dma.c
Restores compatiblity of ide-pci.c pci-booting order for broken PIIX3
chipsets.........

VIA dual fifo dma is on hold until I can clean and polish code.
It is functional with corrected UDMA support of TX Pro III VIA boards.

Code now supports VIA MVP-3 and The TX Pro III.

Will submit VIA fixes after clean-up and several more test runs on
different MB's.

Cheers,
Andre Hedrick
The IDE-FNG for Linux

IDE-F(estive)N(ew)G(uy)

Mark will you verify this with Linus et al.
diff -urN linux-2.1.123-pristine/Documentation/Configure.help linux/Documentation/Configure.help
--- linux-2.1.123-pristine/Documentation/Configure.help Fri Oct 2 12:05:35 1998
+++ linux/Documentation/Configure.help Fri Oct 2 12:18:52 1998
@@ -431,6 +431,20 @@

It is safe to say Y to this question.

+Boot off-board chipsets first support
+CONFIG_BLK_DEV_OFFBOARD
+ Normally, IDE controllers built into the motherboard (on-board
+ controllers) are assigned to ide0 and ide1 while those on add-in
+ PCI cards (off-board controllers) are relegated to ide2 and ide3.
+ Saying Y to here will reverse the situation, with off-board
+ controllers on ide0/1 and on-board controllers on ide2/3. This
+ can improve the usability of some boot managers such as LILO
+ when booting from a drive on an off-board controller.
+ Note that this will rearrange the order of the hd* devices and
+ may require modification of fstab and other files.
+
+ If in doubt, say N.
+
Use DMA by default when available
CONFIG_IDEDMA_AUTO
Prior to kernel version 2.1.112, Linux used to automatically use
diff -urN linux-2.1.123-pristine/drivers/block/Config.in linux/drivers/block/Config.in
--- linux-2.1.123-pristine/drivers/block/Config.in Fri Oct 2 12:05:12 1998
+++ linux/drivers/block/Config.in Fri Oct 2 12:18:52 1998
@@ -33,6 +33,7 @@
bool ' Generic PCI IDE chipset support' CONFIG_BLK_DEV_IDEPCI
if [ "$CONFIG_BLK_DEV_IDEPCI" = "y" ]; then
bool ' Generic PCI bus-master DMA support' CONFIG_BLK_DEV_IDEDMA
+ bool ' Boot off-board chipsets first support' CONFIG_BLK_DEV_OFFBOARD
if [ "$CONFIG_BLK_DEV_IDEDMA" = "y" ]; then
bool ' Use DMA by default when available' CONFIG_IDEDMA_AUTO
fi
diff -urN linux-2.1.123-pristine/drivers/block/ide-dma.c linux/drivers/block/ide-dma.c
--- linux-2.1.123-pristine/drivers/block/ide-dma.c Fri Oct 2 12:05:12 1998
+++ linux/drivers/block/ide-dma.c Fri Oct 2 12:44:05 1998
@@ -344,6 +344,19 @@
}
}

+/*
+ * Needed for allowing full modular support of ide-driver
+ */
+int ide_release_dma (ide_hwif_t *hwif)
+{
+ if (hwif->dmatable) {
+ clear_page((unsigned long)hwif->dmatable); /* clear PRD 1st */
+ free_page((unsigned long)hwif->dmatable); /* free PRD 2nd */
+ }
+ if (hwif->dma_extra)
+ release_region((hwif->dma_base + hwif->dma_extra), hwif->dma_extra);
+}
+
__initfunc(void ide_setup_dma (ide_hwif_t *hwif, unsigned long dma_base, unsigned int num_ports))
{
static unsigned long dmatable = 0;
@@ -404,6 +417,7 @@
if (extra) /* PDC20246 & HPT343 */
request_region(dma_base+16, extra, name);
dma_base += hwif->channel ? 8 : 0;
+ hwif->dma_extra = extra;
if (inb(dma_base+2) & 0x80) {
printk("%s: simplex device: DMA disabled\n", name);
dma_base = 0;
diff -urN linux-2.1.123-pristine/drivers/block/ide-pci.c linux/drivers/block/ide-pci.c
--- linux-2.1.123-pristine/drivers/block/ide-pci.c Fri Oct 2 12:05:12 1998
+++ linux/drivers/block/ide-pci.c Fri Oct 2 12:37:21 1998
@@ -118,28 +118,28 @@
} ide_pci_device_t;

static ide_pci_device_t ide_pci_chipsets[] __initdata = {
- {DEVID_PIIXa, "PIIX", NULL, {{0x41,0x80,0x80}, {0x43,0x80,0x80}}, 0x01, 0 },
- {DEVID_PIIXb, "PIIX", NULL, {{0x41,0x80,0x80}, {0x43,0x80,0x80}}, 0x01, 0 },
- {DEVID_PIIX3, "PIIX3", NULL, {{0x41,0x80,0x80}, {0x43,0x80,0x80}}, 0x01, 0 },
- {DEVID_PIIX4, "PIIX4", NULL, {{0x41,0x80,0x80}, {0x43,0x80,0x80}}, 0x01, 0 },
- {DEVID_VP_IDE, "VP_IDE", INIT_VIA82C586, {{0x40,0x02,0x02}, {0x40,0x01,0x01}}, 0x01, 0 },
- {DEVID_PDC20246,"PDC20246", NULL, {{0x50,0x02,0x02}, {0x50,0x04,0x04}}, 0x01, 16 },
- {DEVID_RZ1000, "RZ1000", INIT_RZ1000, {{0x00,0x00,0x00}, {0x00,0x00,0x00}}, 0x01, 0 },
- {DEVID_RZ1001, "RZ1001", INIT_RZ1000, {{0x00,0x00,0x00}, {0x00,0x00,0x00}}, 0x01, 0 },
- {DEVID_CMD640, "CMD640", IDE_IGNORE, {{0x00,0x00,0x00}, {0x00,0x00,0x00}}, 0x01, 0 },
- {DEVID_NS87410, "NS87410", NULL, {{0x43,0x08,0x08}, {0x47,0x08,0x08}}, 0x01, 0 },
- {DEVID_SIS5513, "SIS5513", NULL, {{0x4a,0x02,0x02}, {0x4a,0x04,0x04}}, 0x01, 0 },
- {DEVID_CMD646, "CMD646", INIT_CMD646, {{0x00,0x00,0x00}, {0x51,0x80,0x80}}, 0x01, 0 },
- {DEVID_HT6565, "HT6565", NULL, {{0x00,0x00,0x00}, {0x00,0x00,0x00}}, 0x01, 0 },
- {DEVID_OPTI621, "OPTI621", INIT_OPTI621, {{0x45,0x80,0x00}, {0x40,0x08,0x00}}, 0x01, 0 },
- {DEVID_OPTI621X,"OPTI621X", INIT_OPTI621, {{0x45,0x80,0x00}, {0x40,0x08,0x00}}, 0x01, 0 },
- {DEVID_TRM290, "TRM290", INIT_TRM290, {{0x00,0x00,0x00}, {0x00,0x00,0x00}}, 0x01, 0 },
- {DEVID_NS87415, "NS87415", INIT_NS87415, {{0x00,0x00,0x00}, {0x00,0x00,0x00}}, 0x01, 0 },
- {DEVID_AEC6210, "AEC6210", NULL, {{0x00,0x00,0x00}, {0x00,0x00,0x00}}, 0x01, 0 },
- {DEVID_W82C105, "W82C105", INIT_W82C105, {{0x40,0x01,0x01}, {0x40,0x10,0x10}}, 0x01, 0 },
- {DEVID_UM8886BF,"UM8886BF", NULL, {{0x00,0x00,0x00}, {0x00,0x00,0x00}}, 0x01, 0 },
- {DEVID_HPT343, "HPT343", NULL, {{0x00,0x00,0x00}, {0x00,0x00,0x00}}, 0x00, 16 },
- {IDE_PCI_DEVID_NULL, "PCI_IDE", NULL, {{0x00,0x00,0x00}, {0x00,0x00,0x00}}, 0x01, 0 }};
+ {DEVID_PIIXa, "PIIX", NULL, {{0x41,0x80,0x80}, {0x43,0x80,0x80}}, ON_BOARD, 0 },
+ {DEVID_PIIXb, "PIIX", NULL, {{0x41,0x80,0x80}, {0x43,0x80,0x80}}, ON_BOARD, 0 },
+ {DEVID_PIIX3, "PIIX3", NULL, {{0x41,0x80,0x80}, {0x43,0x80,0x80}}, ON_BOARD, 0 },
+ {DEVID_PIIX4, "PIIX4", NULL, {{0x41,0x80,0x80}, {0x43,0x80,0x80}}, ON_BOARD, 0 },
+ {DEVID_VP_IDE, "VP_IDE", INIT_VIA82C586, {{0x40,0x02,0x02}, {0x40,0x01,0x01}}, ON_BOARD, 0 },
+ {DEVID_PDC20246,"PDC20246", NULL, {{0x50,0x02,0x02}, {0x50,0x04,0x04}}, OFF_BOARD, 16 },
+ {DEVID_RZ1000, "RZ1000", INIT_RZ1000, {{0x00,0x00,0x00}, {0x00,0x00,0x00}}, ON_BOARD, 0 },
+ {DEVID_RZ1001, "RZ1001", INIT_RZ1000, {{0x00,0x00,0x00}, {0x00,0x00,0x00}}, ON_BOARD, 0 },
+ {DEVID_CMD640, "CMD640", IDE_IGNORE, {{0x00,0x00,0x00}, {0x00,0x00,0x00}}, ON_BOARD, 0 },
+ {DEVID_NS87410, "NS87410", NULL, {{0x43,0x08,0x08}, {0x47,0x08,0x08}}, ON_BOARD, 0 },
+ {DEVID_SIS5513, "SIS5513", NULL, {{0x4a,0x02,0x02}, {0x4a,0x04,0x04}}, ON_BOARD, 0 },
+ {DEVID_CMD646, "CMD646", INIT_CMD646, {{0x00,0x00,0x00}, {0x51,0x80,0x80}}, ON_BOARD, 0 },
+ {DEVID_HT6565, "HT6565", NULL, {{0x00,0x00,0x00}, {0x00,0x00,0x00}}, ON_BOARD, 0 },
+ {DEVID_OPTI621, "OPTI621", INIT_OPTI621, {{0x45,0x80,0x00}, {0x40,0x08,0x00}}, ON_BOARD, 0 },
+ {DEVID_OPTI621X,"OPTI621X", INIT_OPTI621, {{0x45,0x80,0x00}, {0x40,0x08,0x00}}, ON_BOARD, 0 },
+ {DEVID_TRM290, "TRM290", INIT_TRM290, {{0x00,0x00,0x00}, {0x00,0x00,0x00}}, ON_BOARD, 0 },
+ {DEVID_NS87415, "NS87415", INIT_NS87415, {{0x00,0x00,0x00}, {0x00,0x00,0x00}}, ON_BOARD, 0 },
+ {DEVID_AEC6210, "AEC6210", NULL, {{0x00,0x00,0x00}, {0x00,0x00,0x00}}, OFF_BOARD, 0 },
+ {DEVID_W82C105, "W82C105", INIT_W82C105, {{0x40,0x01,0x01}, {0x40,0x10,0x10}}, ON_BOARD, 0 },
+ {DEVID_UM8886BF,"UM8886BF", NULL, {{0x00,0x00,0x00}, {0x00,0x00,0x00}}, ON_BOARD, 0 },
+ {DEVID_HPT343, "HPT343", NULL, {{0x00,0x00,0x00}, {0x00,0x00,0x00}}, NEVER_BOARD, 16 },
+ {IDE_PCI_DEVID_NULL, "PCI_IDE", NULL, {{0x00,0x00,0x00}, {0x00,0x00,0x00}}, ON_BOARD, 0 }};

/*
* This allows offboard ide-pci cards the enable a BIOS, verify interrupt
@@ -175,6 +175,8 @@
pci_write_config_byte(dev, (PCI_INTERRUPT_LINE)|0x80, irq1); /* 0xbc */
}
}
+ return dev->irq;
+ case PCI_DEVICE_ID_TTI_HPT343:
return dev->irq;
default:
break;
diff -urN linux-2.1.123-pristine/drivers/block/ide.c linux/drivers/block/ide.c
--- linux-2.1.123-pristine/drivers/block/ide.c Fri Oct 2 12:05:12 1998
+++ linux/drivers/block/ide.c Fri Oct 2 12:40:39 1998
@@ -1673,8 +1673,13 @@
save_flags(flags); /* all CPUs */
cli(); /* all CPUs */
hwif = &ide_hwifs[index];
- if (!hwif->present)
+ if (!hwif->present) {
+#ifdef CONFIG_BLK_DEV_IDEDMA
+ if (hwif->dma_base)
+ (void) ide_release_dma(hwif);
+#endif /* CONFIG_BLK_DEV_IDEDMA */
goto abort;
+ }
for (unit = 0; unit < MAX_DRIVES; ++unit) {
drive = &hwif->drives[unit];
if (!drive->present)
diff -urN linux-2.1.123-pristine/drivers/block/ide.h linux/drivers/block/ide.h
--- linux-2.1.123-pristine/drivers/block/ide.h Fri Oct 2 12:05:12 1998
+++ linux/drivers/block/ide.h Fri Oct 2 13:58:31 1998
@@ -328,6 +328,7 @@
unsigned long *dmatable; /* dma physical region descriptor table */
struct hwif_s *mate; /* other hwif from same PCI chip */
unsigned long dma_base; /* base addr for dma ports */
+ unsigned dma_extra; /* extra addr for dma ports */
unsigned long config_data; /* for use by chipset-specific code */
unsigned long select_data; /* for use by chipset-specific code */
struct proc_dir_entry *proc; /* /proc/ide/ directory entry */
@@ -725,6 +726,14 @@
int ide_replace_subdriver(ide_drive_t *drive, const char *driver);

#ifdef CONFIG_BLK_DEV_IDEPCI
+#define ON_BOARD 1
+#define NEVER_BOARD 0
+#ifdef CONFIG_BLK_DEV_OFFBOARD
+# define OFF_BOARD ON_BOARD
+#else /* CONFIG_BLK_DEV_OFFBOARD */
+# define OFF_BOARD NEVER_BOARD
+#endif /* CONFIG_BLK_DEV_OFFBOARD */
+
unsigned long ide_find_free_region (unsigned short size) __init;
void ide_scan_pcibus (void) __init;
#endif
@@ -735,6 +744,7 @@
void ide_dma_intr (ide_drive_t *drive);
int check_drive_lists (ide_drive_t *drive, int good_bad);
int ide_dmaproc (ide_dma_action_t func, ide_drive_t *drive);
+int ide_release_dma (ide_hwif_t *hwif);
void ide_setup_dma (ide_hwif_t *hwif, unsigned long dmabase, unsigned int num_ports) __init;
unsigned long ide_get_or_set_dma_base (ide_hwif_t *hwif, int extra, const char *name) __init;
#endif
\
 
 \ /
  Last update: 2005-03-22 13:44    [W:0.064 / U:0.264 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site