* [PATCH 1/5] ide: remove PIO "downgrade" quirk
@ 2008-02-17 18:51 Bartlomiej Zolnierkiewicz
2008-02-17 18:51 ` [PATCH 2/5] ide: merge ide_match_hwif() and ide_find_port() Bartlomiej Zolnierkiewicz
` (4 more replies)
0 siblings, 5 replies; 9+ messages in thread
From: Bartlomiej Zolnierkiewicz @ 2008-02-17 18:51 UTC (permalink / raw)
To: linux-ide; +Cc: Bartlomiej Zolnierkiewicz, linux-kernel
No need for it nowadays so remove quirk code from ide_get_best_pio_mode()
and IDE_HFLAG_PIO_DOWNGRADE host flag.
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
---
drivers/ide/ide-lib.c | 10 ----------
drivers/ide/pci/amd74xx.c | 1 -
drivers/ide/pci/via82cxxx.c | 1 -
drivers/ide/ppc/pmac.c | 1 -
include/linux/ide.h | 2 --
5 files changed, 15 deletions(-)
Index: b/drivers/ide/ide-lib.c
===================================================================
--- a/drivers/ide/ide-lib.c
+++ b/drivers/ide/ide-lib.c
@@ -284,16 +284,6 @@ u8 ide_get_best_pio_mode (ide_drive_t *d
if (overridden)
printk(KERN_INFO "%s: tPIO > 2, assuming tPIO = 2\n",
drive->name);
-
- /*
- * Conservative "downgrade" for all pre-ATA2 drives
- */
- if ((drive->hwif->host_flags & IDE_HFLAG_PIO_NO_DOWNGRADE) == 0 &&
- pio_mode && pio_mode < 4) {
- pio_mode--;
- printk(KERN_INFO "%s: applying conservative "
- "PIO \"downgrade\"\n", drive->name);
- }
}
if (pio_mode > max_mode)
Index: b/drivers/ide/pci/amd74xx.c
===================================================================
--- a/drivers/ide/pci/amd74xx.c
+++ b/drivers/ide/pci/amd74xx.c
@@ -219,7 +219,6 @@ static void __devinit init_hwif_amd74xx(
#define IDE_HFLAGS_AMD \
(IDE_HFLAG_PIO_NO_BLACKLIST | \
- IDE_HFLAG_PIO_NO_DOWNGRADE | \
IDE_HFLAG_ABUSE_SET_DMA_MODE | \
IDE_HFLAG_POST_SET_MODE | \
IDE_HFLAG_IO_32BIT | \
Index: b/drivers/ide/pci/via82cxxx.c
===================================================================
--- a/drivers/ide/pci/via82cxxx.c
+++ b/drivers/ide/pci/via82cxxx.c
@@ -429,7 +429,6 @@ static const struct ide_port_info via82c
.init_hwif = init_hwif_via82cxxx,
.enablebits = { { 0x40, 0x02, 0x02 }, { 0x40, 0x01, 0x01 } },
.host_flags = IDE_HFLAG_PIO_NO_BLACKLIST |
- IDE_HFLAG_PIO_NO_DOWNGRADE |
IDE_HFLAG_ABUSE_SET_DMA_MODE |
IDE_HFLAG_POST_SET_MODE |
IDE_HFLAG_IO_32BIT,
Index: b/drivers/ide/ppc/pmac.c
===================================================================
--- a/drivers/ide/ppc/pmac.c
+++ b/drivers/ide/ppc/pmac.c
@@ -921,7 +921,6 @@ pmac_ide_do_resume(ide_hwif_t *hwif)
static const struct ide_port_info pmac_port_info = {
.chipset = ide_pmac,
.host_flags = IDE_HFLAG_SET_PIO_MODE_KEEP_DMA |
- IDE_HFLAG_PIO_NO_DOWNGRADE |
IDE_HFLAG_POST_SET_MODE |
IDE_HFLAG_NO_DMA | /* no SFF-style DMA */
IDE_HFLAG_UNMASK_IRQS,
Index: b/include/linux/ide.h
===================================================================
--- a/include/linux/ide.h
+++ b/include/linux/ide.h
@@ -1031,8 +1031,6 @@ enum {
IDE_HFLAG_SINGLE = (1 << 1),
/* don't use legacy PIO blacklist */
IDE_HFLAG_PIO_NO_BLACKLIST = (1 << 2),
- /* don't use conservative PIO "downgrade" */
- IDE_HFLAG_PIO_NO_DOWNGRADE = (1 << 3),
/* use PIO8/9 for prefetch off/on */
IDE_HFLAG_ABUSE_PREFETCH = (1 << 4),
/* use PIO6/7 for fast-devsel off/on */
^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH 2/5] ide: merge ide_match_hwif() and ide_find_port()
2008-02-17 18:51 [PATCH 1/5] ide: remove PIO "downgrade" quirk Bartlomiej Zolnierkiewicz
@ 2008-02-17 18:51 ` Bartlomiej Zolnierkiewicz
2008-02-17 18:51 ` [PATCH 3/5] ide: use ide_find_port() in legacy VLB host drivers Bartlomiej Zolnierkiewicz
` (3 subsequent siblings)
4 siblings, 0 replies; 9+ messages in thread
From: Bartlomiej Zolnierkiewicz @ 2008-02-17 18:51 UTC (permalink / raw)
To: linux-ide; +Cc: Bartlomiej Zolnierkiewicz, linux-kernel
* Change ide_match_hwif() argument from 'u8 bootable' to
'struct ide_port_info *d'.
* Move ide_match_hwif() to ide-probe.c from setup-pci.c and rename
it to ide_find_port_slot(). Update some comments while at it.
* ide_find_port() can be now just a wrapper for ide_find_port_slot().
There should be no functional changes caused by this patch.
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
---
drivers/ide/ide-probe.c | 46 ++++++++++++++++++++++++++++++++++++++++++++++
drivers/ide/ide.c | 15 ---------------
drivers/ide/setup-pci.c | 48 +-----------------------------------------------
include/linux/ide.h | 8 +++++++-
4 files changed, 54 insertions(+), 63 deletions(-)
Index: b/drivers/ide/ide-probe.c
===================================================================
--- a/drivers/ide/ide-probe.c
+++ b/drivers/ide/ide-probe.c
@@ -1435,6 +1435,52 @@ static int ide_sysfs_register_port(ide_h
return rc;
}
+/**
+ * ide_find_port_slot - find free ide_hwifs[] slot
+ * @d: IDE port info
+ *
+ * Return the new hwif. If we are out of free slots return NULL.
+ */
+
+ide_hwif_t *ide_find_port_slot(const struct ide_port_info *d)
+{
+ ide_hwif_t *hwif;
+ int i;
+ u8 bootable = (d && (d->host_flags & IDE_HFLAG_NON_BOOTABLE)) ? 0 : 1;
+
+ /*
+ * Claim an unassigned slot.
+ *
+ * Give preference to claiming other slots before claiming ide0/ide1,
+ * just in case there's another interface yet-to-be-scanned
+ * which uses ports 0x1f0/0x170 (the ide0/ide1 defaults).
+ *
+ * Unless there is a bootable card that does not use the standard
+ * ports 0x1f0/0x170 (the ide0/ide1 defaults).
+ */
+ if (bootable) {
+ for (i = 0; i < MAX_HWIFS; i++) {
+ hwif = &ide_hwifs[i];
+ if (hwif->chipset == ide_unknown)
+ return hwif;
+ }
+ } else {
+ for (i = 2; i < MAX_HWIFS; i++) {
+ hwif = &ide_hwifs[i];
+ if (hwif->chipset == ide_unknown)
+ return hwif;
+ }
+ for (i = 0; i < 2 && i < MAX_HWIFS; i++) {
+ hwif = &ide_hwifs[i];
+ if (hwif->chipset == ide_unknown)
+ return hwif;
+ }
+ }
+
+ return NULL;
+}
+EXPORT_SYMBOL_GPL(ide_find_port_slot);
+
int ide_device_add_all(u8 *idx, const struct ide_port_info *d)
{
ide_hwif_t *hwif, *mate = NULL;
Index: b/drivers/ide/ide.c
===================================================================
--- a/drivers/ide/ide.c
+++ b/drivers/ide/ide.c
@@ -234,21 +234,6 @@ static int ide_system_bus_speed(void)
return pci_dev_present(pci_default) ? 33 : 50;
}
-ide_hwif_t *ide_find_port(void)
-{
- ide_hwif_t *hwif;
- int i;
-
- for (i = 0; i < MAX_HWIFS; i++) {
- hwif = &ide_hwifs[i];
- if (hwif->chipset == ide_unknown)
- return hwif;
- }
-
- return NULL;
-}
-EXPORT_SYMBOL_GPL(ide_find_port);
-
static struct resource* hwif_request_region(ide_hwif_t *hwif,
unsigned long addr, int num)
{
Index: b/drivers/ide/setup-pci.c
===================================================================
--- a/drivers/ide/setup-pci.c
+++ b/drivers/ide/setup-pci.c
@@ -20,51 +20,6 @@
#include <asm/io.h>
#include <asm/irq.h>
-
-/**
- * ide_match_hwif - find free ide_hwifs[] slot
- * @bootable: bootable flag
- *
- * Return the new hwif. If we are out of free slots return NULL.
- */
-
-static ide_hwif_t *ide_match_hwif(u8 bootable)
-{
- ide_hwif_t *hwif;
- int h;
-
- /*
- * Claim an unassigned slot.
- *
- * Give preference to claiming other slots before claiming ide0/ide1,
- * just in case there's another interface yet-to-be-scanned
- * which uses ports 1f0/170 (the ide0/ide1 defaults).
- *
- * Unless there is a bootable card that does not use the standard
- * ports 1f0/170 (the ide0/ide1 defaults). The (bootable) flag.
- */
- if (bootable) {
- for (h = 0; h < MAX_HWIFS; ++h) {
- hwif = &ide_hwifs[h];
- if (hwif->chipset == ide_unknown)
- return hwif; /* pick an unused entry */
- }
- } else {
- for (h = 2; h < MAX_HWIFS; ++h) {
- hwif = ide_hwifs + h;
- if (hwif->chipset == ide_unknown)
- return hwif; /* pick an unused entry */
- }
- }
- for (h = 0; h < 2 && h < MAX_HWIFS; ++h) {
- hwif = ide_hwifs + h;
- if (hwif->chipset == ide_unknown)
- return hwif; /* pick an unused entry */
- }
-
- return NULL;
-}
-
/**
* ide_setup_pci_baseregs - place a PCI IDE controller native
* @dev: PCI device of interface to switch native
@@ -322,7 +277,6 @@ static ide_hwif_t *ide_hwif_configure(st
{
unsigned long ctl = 0, base = 0;
ide_hwif_t *hwif;
- u8 bootable = (d->host_flags & IDE_HFLAG_NON_BOOTABLE) ? 0 : 1;
u8 oldnoprobe = 0;
struct hw_regs_s hw;
@@ -346,7 +300,7 @@ static ide_hwif_t *ide_hwif_configure(st
base = port ? 0x170 : 0x1f0;
}
- hwif = ide_match_hwif(bootable);
+ hwif = ide_find_port_slot(d);
if (hwif == NULL) {
printk(KERN_ERR "%s: too many IDE interfaces, no room in "
"table\n", d->name);
Index: b/include/linux/ide.h
===================================================================
--- a/include/linux/ide.h
+++ b/include/linux/ide.h
@@ -171,7 +171,6 @@ typedef struct hw_regs_s {
struct device *dev;
} hw_regs_t;
-struct hwif_s *ide_find_port(void);
void ide_init_port_data(struct hwif_s *, unsigned int);
void ide_init_port_hw(struct hwif_s *, hw_regs_t *);
@@ -812,6 +811,13 @@ extern ide_hwif_t ide_hwifs[]; /* maste
#endif
extern int noautodma;
+ide_hwif_t *ide_find_port_slot(const struct ide_port_info *);
+
+static inline ide_hwif_t *ide_find_port(void)
+{
+ return ide_find_port_slot(NULL);
+}
+
extern int ide_end_request (ide_drive_t *drive, int uptodate, int nrsecs);
int ide_end_dequeued_request(ide_drive_t *drive, struct request *rq,
int uptodate, int nr_sectors);
^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH 3/5] ide: use ide_find_port() in legacy VLB host drivers
2008-02-17 18:51 [PATCH 1/5] ide: remove PIO "downgrade" quirk Bartlomiej Zolnierkiewicz
2008-02-17 18:51 ` [PATCH 2/5] ide: merge ide_match_hwif() and ide_find_port() Bartlomiej Zolnierkiewicz
@ 2008-02-17 18:51 ` Bartlomiej Zolnierkiewicz
2008-02-17 18:51 ` [PATCH 4/5] ide-generic: use ide_find_port() Bartlomiej Zolnierkiewicz
` (2 subsequent siblings)
4 siblings, 0 replies; 9+ messages in thread
From: Bartlomiej Zolnierkiewicz @ 2008-02-17 18:51 UTC (permalink / raw)
To: linux-ide; +Cc: Bartlomiej Zolnierkiewicz, linux-kernel
* Add IDE_HFLAG_QD_2ND_PORT host flag to indicate the need of skipping
first ide_hwifs[] slot for the second port of QD65xx controller.
* Handle this new host flag in ide_find_port_slot().
* Convert legacy VLB host drivers to use ide_find_port().
While at it:
* Fix couple of printk()-s in qd65xx host driver to not use hwif->name.
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
---
drivers/ide/ide-probe.c | 4 +-
drivers/ide/legacy/ali14xx.c | 19 ++++++++---
drivers/ide/legacy/dtc2278.c | 22 +++++++------
drivers/ide/legacy/ht6560b.c | 31 ++++++++++--------
drivers/ide/legacy/ide-4drives.c | 34 +++++++++++---------
drivers/ide/legacy/qd65xx.c | 66 +++++++++++++++++++++------------------
drivers/ide/legacy/umc8672.c | 19 ++++++++---
include/linux/ide.h | 2 +
8 files changed, 119 insertions(+), 78 deletions(-)
Index: b/drivers/ide/ide-probe.c
===================================================================
--- a/drivers/ide/ide-probe.c
+++ b/drivers/ide/ide-probe.c
@@ -1459,7 +1459,9 @@ ide_hwif_t *ide_find_port_slot(const str
* ports 0x1f0/0x170 (the ide0/ide1 defaults).
*/
if (bootable) {
- for (i = 0; i < MAX_HWIFS; i++) {
+ i = (d && (d->host_flags & IDE_HFLAG_QD_2ND_PORT)) ? 1 : 0;
+
+ for (; i < MAX_HWIFS; i++) {
hwif = &ide_hwifs[i];
if (hwif->chipset == ide_unknown)
return hwif;
Index: b/drivers/ide/legacy/ali14xx.c
===================================================================
--- a/drivers/ide/legacy/ali14xx.c
+++ b/drivers/ide/legacy/ali14xx.c
@@ -199,7 +199,8 @@ static const struct ide_port_info ali14x
static int __init ali14xx_probe(void)
{
- static u8 idx[4] = { 0, 1, 0xff, 0xff };
+ ide_hwif_t *hwif, *mate;
+ static u8 idx[4] = { 0xff, 0xff, 0xff, 0xff };
hw_regs_t hw[2];
printk(KERN_DEBUG "ali14xx: base=0x%03x, regOn=0x%02x.\n",
@@ -219,11 +220,19 @@ static int __init ali14xx_probe(void)
ide_std_init_ports(&hw[1], 0x170, 0x376);
hw[1].irq = 15;
- ide_init_port_hw(&ide_hwifs[0], &hw[0]);
- ide_init_port_hw(&ide_hwifs[1], &hw[1]);
+ hwif = ide_find_port();
+ if (hwif) {
+ ide_init_port_hw(hwif, &hw[0]);
+ hwif->set_pio_mode = &ali14xx_set_pio_mode;
+ idx[0] = hwif->index;
+ }
- ide_hwifs[0].set_pio_mode = &ali14xx_set_pio_mode;
- ide_hwifs[1].set_pio_mode = &ali14xx_set_pio_mode;
+ mate = ide_find_port();
+ if (mate) {
+ ide_init_port_hw(mate, &hw[1]);
+ mate->set_pio_mode = &ali14xx_set_pio_mode;
+ idx[1] = mate->index;
+ }
ide_device_add(idx, &ali14xx_port_info);
Index: b/drivers/ide/legacy/dtc2278.c
===================================================================
--- a/drivers/ide/legacy/dtc2278.c
+++ b/drivers/ide/legacy/dtc2278.c
@@ -102,15 +102,9 @@ static int __init dtc2278_probe(void)
{
unsigned long flags;
ide_hwif_t *hwif, *mate;
- static u8 idx[4] = { 0, 1, 0xff, 0xff };
+ static u8 idx[4] = { 0xff, 0xff, 0xff, 0xff };
hw_regs_t hw[2];
- hwif = &ide_hwifs[0];
- mate = &ide_hwifs[1];
-
- if (hwif->chipset != ide_unknown || mate->chipset != ide_unknown)
- return 1;
-
local_irq_save(flags);
/*
* This enables the second interface
@@ -137,10 +131,18 @@ static int __init dtc2278_probe(void)
ide_std_init_ports(&hw[1], 0x170, 0x376);
hw[1].irq = 15;
- ide_init_port_hw(hwif, &hw[0]);
- ide_init_port_hw(mate, &hw[1]);
+ hwif = ide_find_port();
+ if (hwif) {
+ ide_init_port_hw(hwif, &hw[0]);
+ hwif->set_pio_mode = dtc2278_set_pio_mode;
+ idx[0] = hwif->index;
+ }
- hwif->set_pio_mode = &dtc2278_set_pio_mode;
+ mate = ide_find_port();
+ if (mate) {
+ ide_init_port_hw(mate, &hw[1]);
+ idx[1] = mate->index;
+ }
ide_device_add(idx, &dtc2278_port_info);
Index: b/drivers/ide/legacy/ht6560b.c
===================================================================
--- a/drivers/ide/legacy/ht6560b.c
+++ b/drivers/ide/legacy/ht6560b.c
@@ -331,15 +331,12 @@ static const struct ide_port_info ht6560
static int __init ht6560b_init(void)
{
ide_hwif_t *hwif, *mate;
- static u8 idx[4] = { 0, 1, 0xff, 0xff };
+ static u8 idx[4] = { 0xff, 0xff, 0xff, 0xff };
hw_regs_t hw[2];
if (probe_ht6560b == 0)
return -ENODEV;
- hwif = &ide_hwifs[0];
- mate = &ide_hwifs[1];
-
if (!request_region(HT_CONFIG_PORT, 1, DRV_NAME)) {
printk(KERN_NOTICE "%s: HT_CONFIG_PORT not found\n",
__FUNCTION__);
@@ -359,17 +356,23 @@ static int __init ht6560b_init(void)
ide_std_init_ports(&hw[1], 0x170, 0x376);
hw[1].irq = 15;
- ide_init_port_hw(hwif, &hw[0]);
- ide_init_port_hw(mate, &hw[1]);
-
- hwif->selectproc = &ht6560b_selectproc;
- hwif->set_pio_mode = &ht6560b_set_pio_mode;
-
- mate->selectproc = &ht6560b_selectproc;
- mate->set_pio_mode = &ht6560b_set_pio_mode;
+ hwif = ide_find_port();
+ if (hwif) {
+ ide_init_port_hw(hwif, &hw[0]);
+ hwif->selectproc = ht6560b_selectproc;
+ hwif->set_pio_mode = ht6560b_set_pio_mode;
+ hwif->port_init_devs = ht6560b_port_init_devs;
+ idx[0] = hwif->index;
+ }
- hwif->port_init_devs = ht6560b_port_init_devs;
- mate->port_init_devs = ht6560b_port_init_devs;
+ mate = ide_find_port();
+ if (mate) {
+ ide_init_port_hw(mate, &hw[1]);
+ mate->selectproc = ht6560b_selectproc;
+ mate->set_pio_mode = ht6560b_set_pio_mode;
+ mate->port_init_devs = ht6560b_port_init_devs;
+ idx[1] = mate->index;
+ }
ide_device_add(idx, &ht6560b_port_info);
Index: b/drivers/ide/legacy/ide-4drives.c
===================================================================
--- a/drivers/ide/legacy/ide-4drives.c
+++ b/drivers/ide/legacy/ide-4drives.c
@@ -12,31 +12,37 @@ MODULE_PARM_DESC(probe, "probe for gener
static int __init ide_4drives_init(void)
{
ide_hwif_t *hwif, *mate;
- u8 idx[4] = { 0, 1, 0xff, 0xff };
+ u8 idx[4] = { 0xff, 0xff, 0xff, 0xff };
hw_regs_t hw;
if (probe_4drives == 0)
return -ENODEV;
- hwif = &ide_hwifs[0];
- mate = &ide_hwifs[1];
-
memset(&hw, 0, sizeof(hw));
ide_std_init_ports(&hw, 0x1f0, 0x3f6);
hw.irq = 14;
hw.chipset = ide_4drives;
- ide_init_port_hw(hwif, &hw);
- ide_init_port_hw(mate, &hw);
-
- mate->drives[0].select.all ^= 0x20;
- mate->drives[1].select.all ^= 0x20;
-
- hwif->mate = mate;
- mate->mate = hwif;
-
- hwif->serialized = mate->serialized = 1;
+ hwif = ide_find_port();
+ if (hwif) {
+ ide_init_port_hw(hwif, &hw);
+ idx[0] = hwif->index;
+ }
+
+ mate = ide_find_port();
+ if (mate) {
+ ide_init_port_hw(mate, &hw);
+ mate->drives[0].select.all ^= 0x20;
+ mate->drives[1].select.all ^= 0x20;
+ idx[1] = mate->index;
+
+ if (hwif) {
+ hwif->mate = mate;
+ mate->mate = hwif;
+ hwif->serialized = mate->serialized = 1;
+ }
+ }
ide_device_add(idx, NULL);
Index: b/drivers/ide/legacy/qd65xx.c
===================================================================
--- a/drivers/ide/legacy/qd65xx.c
+++ b/drivers/ide/legacy/qd65xx.c
@@ -392,6 +392,7 @@ static int __init qd_probe(int base)
u8 config, unit;
u8 idx[4] = { 0xff, 0xff, 0xff, 0xff };
hw_regs_t hw[2];
+ struct ide_port_info d = qd65xx_port_info;
config = inb(QD_CONFIG_PORT);
@@ -400,6 +401,9 @@ static int __init qd_probe(int base)
unit = ! (config & QD_CONFIG_IDE_BASEPORT);
+ if (unit)
+ d.host_flags |= IDE_HFLAG_QD_2ND_PORT;
+
memset(&hw, 0, sizeof(hw));
ide_std_init_ports(&hw[0], 0x1f0, 0x3f6);
@@ -415,16 +419,19 @@ static int __init qd_probe(int base)
/* qd6500 found */
- hwif = &ide_hwifs[unit];
- printk(KERN_NOTICE "%s: qd6500 at %#x\n", hwif->name, base);
- printk(KERN_DEBUG "qd6500: config=%#x, ID3=%u\n",
- config, QD_ID3);
-
if (config & QD_CONFIG_DISABLED) {
printk(KERN_WARNING "qd6500 is disabled !\n");
return -ENODEV;
}
+ printk(KERN_NOTICE "qd6500 at %#x\n", base);
+ printk(KERN_DEBUG "qd6500: config=%#x, ID3=%u\n",
+ config, QD_ID3);
+
+ hwif = ide_find_port_slot(&d);
+ if (hwif == NULL)
+ return -ENOENT;
+
ide_init_port_hw(hwif, &hw[unit]);
qd_setup(hwif, base, config);
@@ -434,7 +441,7 @@ static int __init qd_probe(int base)
idx[unit] = unit;
- ide_device_add(idx, &qd65xx_port_info);
+ ide_device_add(idx, &d);
return 1;
}
@@ -458,9 +465,11 @@ static int __init qd_probe(int base)
if (control & QD_CONTR_SEC_DISABLED) {
/* secondary disabled */
- hwif = &ide_hwifs[unit];
- printk(KERN_INFO "%s: qd6580: single IDE board\n",
- hwif->name);
+ printk(KERN_INFO "qd6580: single IDE board\n");
+
+ hwif = ide_find_port_slot(&d);
+ if (hwif == NULL)
+ return -ENOENT;
ide_init_port_hw(hwif, &hw[unit]);
@@ -471,7 +480,7 @@ static int __init qd_probe(int base)
idx[unit] = unit;
- ide_device_add(idx, &qd65xx_port_info);
+ ide_device_add(idx, &d);
outb(QD_DEF_CONTR, QD_CONTROL_PORT);
@@ -479,27 +488,26 @@ static int __init qd_probe(int base)
} else {
ide_hwif_t *mate;
- hwif = &ide_hwifs[0];
- mate = &ide_hwifs[1];
/* secondary enabled */
- printk(KERN_INFO "%s&%s: qd6580: dual IDE board\n",
- hwif->name, mate->name);
-
- ide_init_port_hw(hwif, &hw[0]);
- ide_init_port_hw(mate, &hw[1]);
-
- qd_setup(hwif, base, config | (control << 8));
-
- hwif->port_init_devs = qd6580_port_init_devs;
- hwif->set_pio_mode = &qd6580_set_pio_mode;
-
- qd_setup(mate, base, config | (control << 8));
-
- mate->port_init_devs = qd6580_port_init_devs;
- mate->set_pio_mode = &qd6580_set_pio_mode;
+ printk(KERN_INFO "qd6580: dual IDE board\n");
- idx[0] = 0;
- idx[1] = 1;
+ hwif = ide_find_port();
+ if (hwif) {
+ ide_init_port_hw(hwif, &hw[0]);
+ qd_setup(hwif, base, config | (control << 8));
+ hwif->port_init_devs = qd6580_port_init_devs;
+ hwif->set_pio_mode = qd6580_set_pio_mode;
+ idx[0] = 0;
+ }
+
+ mate = ide_find_port();
+ if (mate) {
+ ide_init_port_hw(mate, &hw[1]);
+ qd_setup(mate, base, config | (control << 8));
+ mate->port_init_devs = qd6580_port_init_devs;
+ mate->set_pio_mode = qd6580_set_pio_mode;
+ idx[1] = 1;
+ }
ide_device_add(idx, &qd65xx_port_info);
Index: b/drivers/ide/legacy/umc8672.c
===================================================================
--- a/drivers/ide/legacy/umc8672.c
+++ b/drivers/ide/legacy/umc8672.c
@@ -128,8 +128,9 @@ static const struct ide_port_info umc867
static int __init umc8672_probe(void)
{
+ ide_hwif_t *hwif, *mate;
unsigned long flags;
- static u8 idx[4] = { 0, 1, 0xff, 0xff };
+ static u8 idx[4] = { 0xff, 0xff, 0xff, 0xff };
hw_regs_t hw[2];
if (!request_region(0x108, 2, "umc8672")) {
@@ -157,11 +158,19 @@ static int __init umc8672_probe(void)
ide_std_init_ports(&hw[1], 0x170, 0x376);
hw[1].irq = 15;
- ide_init_port_hw(&ide_hwifs[0], &hw[0]);
- ide_init_port_hw(&ide_hwifs[1], &hw[1]);
+ hwif = ide_find_port();
+ if (hwif) {
+ ide_init_port_hw(hwif, &hw[0]);
+ hwif->set_pio_mode = umc_set_pio_mode;
+ idx[0] = hwif->index;
+ }
- ide_hwifs[0].set_pio_mode = &umc_set_pio_mode;
- ide_hwifs[1].set_pio_mode = &umc_set_pio_mode;
+ mate = ide_find_port();
+ if (mate) {
+ ide_init_port_hw(mate, &hw[1]);
+ mate->set_pio_mode = umc_set_pio_mode;
+ idx[1] = mate->index;
+ }
ide_device_add(idx, &umc8672_port_info);
Index: b/include/linux/ide.h
===================================================================
--- a/include/linux/ide.h
+++ b/include/linux/ide.h
@@ -1037,6 +1037,8 @@ enum {
IDE_HFLAG_SINGLE = (1 << 1),
/* don't use legacy PIO blacklist */
IDE_HFLAG_PIO_NO_BLACKLIST = (1 << 2),
+ /* set for the second port of QD65xx */
+ IDE_HFLAG_QD_2ND_PORT = (1 << 3),
/* use PIO8/9 for prefetch off/on */
IDE_HFLAG_ABUSE_PREFETCH = (1 << 4),
/* use PIO6/7 for fast-devsel off/on */
^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH 4/5] ide-generic: use ide_find_port()
2008-02-17 18:51 [PATCH 1/5] ide: remove PIO "downgrade" quirk Bartlomiej Zolnierkiewicz
2008-02-17 18:51 ` [PATCH 2/5] ide: merge ide_match_hwif() and ide_find_port() Bartlomiej Zolnierkiewicz
2008-02-17 18:51 ` [PATCH 3/5] ide: use ide_find_port() in legacy VLB host drivers Bartlomiej Zolnierkiewicz
@ 2008-02-17 18:51 ` Bartlomiej Zolnierkiewicz
2008-02-19 12:33 ` Sergei Shtylyov
2008-02-17 18:51 ` [PATCH 5/5] ide: unexport ide_hwifs[] Bartlomiej Zolnierkiewicz
2008-02-18 16:06 ` [PATCH 1/5] ide: remove PIO "downgrade" quirk Sergei Shtylyov
4 siblings, 1 reply; 9+ messages in thread
From: Bartlomiej Zolnierkiewicz @ 2008-02-17 18:51 UTC (permalink / raw)
To: linux-ide; +Cc: Bartlomiej Zolnierkiewicz, linux-kernel
There should be no functional changes caused by this patch.
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
---
drivers/ide/ide-generic.c | 17 +++++++++++++----
1 file changed, 13 insertions(+), 4 deletions(-)
Index: b/drivers/ide/ide-generic.c
===================================================================
--- a/drivers/ide/ide-generic.c
+++ b/drivers/ide/ide-generic.c
@@ -90,18 +90,27 @@ static int __init ide_generic_init(void)
int i;
for (i = 0; i < MAX_HWIFS; i++) {
- ide_hwif_t *hwif = &ide_hwifs[i];
+ ide_hwif_t *hwif;
unsigned long io_addr = ide_default_io_base(i);
hw_regs_t hw;
- if (hwif->chipset == ide_unknown && io_addr) {
- u8 oldnoprobe = hwif->noprobe;
+ if (io_addr) {
+ u8 oldnoprobe;
+
+ /*
+ * Skip probing if the corresponding
+ * slot entry is already occupied.
+ */
+ hwif = ide_find_port();
+ if (hwif == NULL || hwif->index != i)
+ continue;
memset(&hw, 0, sizeof(hw));
ide_std_init_ports(&hw, io_addr, io_addr + 0x206);
hw.irq = ide_default_irq(io_addr);
- ide_init_port_hw(hwif, &hw);
+ oldnoprobe = hwif->noprobe;
+ ide_init_port_hw(hwif, &hw);
hwif->noprobe = oldnoprobe;
idx[i] = i;
^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH 5/5] ide: unexport ide_hwifs[]
2008-02-17 18:51 [PATCH 1/5] ide: remove PIO "downgrade" quirk Bartlomiej Zolnierkiewicz
` (2 preceding siblings ...)
2008-02-17 18:51 ` [PATCH 4/5] ide-generic: use ide_find_port() Bartlomiej Zolnierkiewicz
@ 2008-02-17 18:51 ` Bartlomiej Zolnierkiewicz
2008-02-18 16:06 ` [PATCH 1/5] ide: remove PIO "downgrade" quirk Sergei Shtylyov
4 siblings, 0 replies; 9+ messages in thread
From: Bartlomiej Zolnierkiewicz @ 2008-02-17 18:51 UTC (permalink / raw)
To: linux-ide; +Cc: Bartlomiej Zolnierkiewicz, linux-kernel
All modular users have been fixed to not reference ide_hwifs[] directly.
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
---
drivers/ide/ide.c | 5 -----
1 file changed, 5 deletions(-)
Index: b/drivers/ide/ide.c
===================================================================
--- a/drivers/ide/ide.c
+++ b/drivers/ide/ide.c
@@ -102,13 +102,8 @@ int ide_noacpitfs = 1;
int ide_noacpionboot = 1;
#endif
-/*
- * This is declared extern in ide.h, for access by other IDE modules:
- */
ide_hwif_t ide_hwifs[MAX_HWIFS]; /* master data repository */
-EXPORT_SYMBOL(ide_hwifs);
-
static void ide_port_init_devices_data(ide_hwif_t *);
/*
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 1/5] ide: remove PIO "downgrade" quirk
2008-02-17 18:51 [PATCH 1/5] ide: remove PIO "downgrade" quirk Bartlomiej Zolnierkiewicz
` (3 preceding siblings ...)
2008-02-17 18:51 ` [PATCH 5/5] ide: unexport ide_hwifs[] Bartlomiej Zolnierkiewicz
@ 2008-02-18 16:06 ` Sergei Shtylyov
2008-02-18 17:02 ` Bartlomiej Zolnierkiewicz
4 siblings, 1 reply; 9+ messages in thread
From: Sergei Shtylyov @ 2008-02-18 16:06 UTC (permalink / raw)
To: Bartlomiej Zolnierkiewicz; +Cc: linux-ide, linux-kernel
Bartlomiej Zolnierkiewicz wrote:
> No need for it nowadays
Since which moment, could you elaborate
> so remove quirk code from ide_get_best_pio_mode()
> and IDE_HFLAG_PIO_DOWNGRADE host flag.
> Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
MBR, Sergei
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 1/5] ide: remove PIO "downgrade" quirk
2008-02-18 16:06 ` [PATCH 1/5] ide: remove PIO "downgrade" quirk Sergei Shtylyov
@ 2008-02-18 17:02 ` Bartlomiej Zolnierkiewicz
0 siblings, 0 replies; 9+ messages in thread
From: Bartlomiej Zolnierkiewicz @ 2008-02-18 17:02 UTC (permalink / raw)
To: Sergei Shtylyov; +Cc: linux-ide, linux-kernel
Hi Sergei,
On Feb 18, 2008 5:06 PM, Sergei Shtylyov <sshtylyov@ru.mvista.com> wrote:
> Bartlomiej Zolnierkiewicz wrote:
>
> > No need for it nowadays
>
> Since which moment, could you elaborate
We fixed:
- PIO auto-tuning in core code
- PIO programming in host drivers
- IORDY handling in core code and in host drivers (it could be that the
incorrect IORDY handling was the main reason behind the "downgrade")
and
- lack of corresponding "quirk" in libata hasn't been problematic so far
so IMO there is no longer a valid reason to punish PIO performance
and the said "quirk" should be removed (in 2.6.26 after long time in -mm).
> > so remove quirk code from ide_get_best_pio_mode()
> > and IDE_HFLAG_PIO_DOWNGRADE host flag.
>
> > Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 4/5] ide-generic: use ide_find_port()
2008-02-17 18:51 ` [PATCH 4/5] ide-generic: use ide_find_port() Bartlomiej Zolnierkiewicz
@ 2008-02-19 12:33 ` Sergei Shtylyov
2008-02-19 21:20 ` Bartlomiej Zolnierkiewicz
0 siblings, 1 reply; 9+ messages in thread
From: Sergei Shtylyov @ 2008-02-19 12:33 UTC (permalink / raw)
To: Bartlomiej Zolnierkiewicz; +Cc: linux-ide, linux-kernel
Bartlomiej Zolnierkiewicz wrote:
> There should be no functional changes caused by this patch.
> Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
Acked-by: Sergei Shtylyov <sshtylyov@ru.mvista.com>
> Index: b/drivers/ide/ide-generic.c
> ===================================================================
> --- a/drivers/ide/ide-generic.c
> +++ b/drivers/ide/ide-generic.c
> @@ -90,18 +90,27 @@ static int __init ide_generic_init(void)
> int i;
>
> for (i = 0; i < MAX_HWIFS; i++) {
> - ide_hwif_t *hwif = &ide_hwifs[i];
> + ide_hwif_t *hwif;
> unsigned long io_addr = ide_default_io_base(i);
> hw_regs_t hw;
>
> - if (hwif->chipset == ide_unknown && io_addr) {
> - u8 oldnoprobe = hwif->noprobe;
> + if (io_addr) {
> + u8 oldnoprobe;
> +
> + /*
> + * Skip probing if the corresponding
> + * slot entry is already occupied.
IMHO, it's either "slot" or "entry", else it sounds superfluous. :-)
MBR, Sergei
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 4/5] ide-generic: use ide_find_port()
2008-02-19 12:33 ` Sergei Shtylyov
@ 2008-02-19 21:20 ` Bartlomiej Zolnierkiewicz
0 siblings, 0 replies; 9+ messages in thread
From: Bartlomiej Zolnierkiewicz @ 2008-02-19 21:20 UTC (permalink / raw)
To: Sergei Shtylyov; +Cc: linux-ide, linux-kernel
On Tuesday 19 February 2008, Sergei Shtylyov wrote:
> Bartlomiej Zolnierkiewicz wrote:
>
> > There should be no functional changes caused by this patch.
>
> > Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
>
> Acked-by: Sergei Shtylyov <sshtylyov@ru.mvista.com>
>
> > Index: b/drivers/ide/ide-generic.c
> > ===================================================================
> > --- a/drivers/ide/ide-generic.c
> > +++ b/drivers/ide/ide-generic.c
> > @@ -90,18 +90,27 @@ static int __init ide_generic_init(void)
> > int i;
> >
> > for (i = 0; i < MAX_HWIFS; i++) {
> > - ide_hwif_t *hwif = &ide_hwifs[i];
> > + ide_hwif_t *hwif;
> > unsigned long io_addr = ide_default_io_base(i);
> > hw_regs_t hw;
> >
> > - if (hwif->chipset == ide_unknown && io_addr) {
> > - u8 oldnoprobe = hwif->noprobe;
> > + if (io_addr) {
> > + u8 oldnoprobe;
> > +
> > + /*
> > + * Skip probing if the corresponding
> > + * slot entry is already occupied.
>
> IMHO, it's either "slot" or "entry", else it sounds superfluous. :-)
I made 'take 2' with "entry" removed, thanks.
^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2008-02-19 22:04 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2008-02-17 18:51 [PATCH 1/5] ide: remove PIO "downgrade" quirk Bartlomiej Zolnierkiewicz
2008-02-17 18:51 ` [PATCH 2/5] ide: merge ide_match_hwif() and ide_find_port() Bartlomiej Zolnierkiewicz
2008-02-17 18:51 ` [PATCH 3/5] ide: use ide_find_port() in legacy VLB host drivers Bartlomiej Zolnierkiewicz
2008-02-17 18:51 ` [PATCH 4/5] ide-generic: use ide_find_port() Bartlomiej Zolnierkiewicz
2008-02-19 12:33 ` Sergei Shtylyov
2008-02-19 21:20 ` Bartlomiej Zolnierkiewicz
2008-02-17 18:51 ` [PATCH 5/5] ide: unexport ide_hwifs[] Bartlomiej Zolnierkiewicz
2008-02-18 16:06 ` [PATCH 1/5] ide: remove PIO "downgrade" quirk Sergei Shtylyov
2008-02-18 17:02 ` Bartlomiej Zolnierkiewicz
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).