pata_legacy: Add `probe_mask' parameter like with ide-generic
Carry the `probe_mask' parameter over from ide-generic to pata_legacy so that there is a way to prevent random poking at ISA port I/O locations in attempt to discover adapter option cards with libata like with the old IDE driver. By default all enabled locations are tried, however it may interfere with a different kind of hardware responding there. For example with a plain (E)ISA system the driver tries all the six possible locations: scsi host0: pata_legacy ata1: PATA max PIO4 cmd 0x1f0 ctl 0x3f6 irq 14 ata1.00: ATA-4: ST310211A, 3.54, max UDMA/100 ata1.00: 19541088 sectors, multi 16: LBA ata1.00: configured for PIO scsi 0:0:0:0: Direct-Access ATA ST310211A 3.54 PQ: 0 ANSI: 5 scsi 0:0:0:0: Attached scsi generic sg0 type 0 sd 0:0:0:0: [sda] 19541088 512-byte logical blocks: (10.0 GB/9.32 GiB) sd 0:0:0:0: [sda] Write Protect is off sd 0:0:0:0: [sda] Mode Sense: 00 3a 00 00 sd 0:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA sda: sda1 sda2 sda3 sd 0:0:0:0: [sda] Attached SCSI disk scsi host1: pata_legacy ata2: PATA max PIO4 cmd 0x170 ctl 0x376 irq 15 scsi host1: pata_legacy ata3: PATA max PIO4 cmd 0x1e8 ctl 0x3ee irq 11 scsi host1: pata_legacy ata4: PATA max PIO4 cmd 0x168 ctl 0x36e irq 10 scsi host1: pata_legacy ata5: PATA max PIO4 cmd 0x1e0 ctl 0x3e6 irq 8 scsi host1: pata_legacy ata6: PATA max PIO4 cmd 0x160 ctl 0x366 irq 12 however giving the kernel "pata_legacy.probe_mask=21" makes it try every other location only: scsi host0: pata_legacy ata1: PATA max PIO4 cmd 0x1f0 ctl 0x3f6 irq 14 ata1.00: ATA-4: ST310211A, 3.54, max UDMA/100 ata1.00: 19541088 sectors, multi 16: LBA ata1.00: configured for PIO scsi 0:0:0:0: Direct-Access ATA ST310211A 3.54 PQ: 0 ANSI: 5 scsi 0:0:0:0: Attached scsi generic sg0 type 0 sd 0:0:0:0: [sda] 19541088 512-byte logical blocks: (10.0 GB/9.32 GiB) sd 0:0:0:0: [sda] Write Protect is off sd 0:0:0:0: [sda] Mode Sense: 00 3a 00 00 sd 0:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA sda: sda1 sda2 sda3 sd 0:0:0:0: [sda] Attached SCSI disk scsi host1: pata_legacy ata2: PATA max PIO4 cmd 0x1e8 ctl 0x3ee irq 11 scsi host1: pata_legacy ata3: PATA max PIO4 cmd 0x1e0 ctl 0x3e6 irq 8 Signed-off-by: Maciej W. Rozycki <macro@orcam.me.uk> Reviewed-by: Christoph Hellwig <hch@lst.de> Link: https://lore.kernel.org/r/alpine.DEB.2.21.2103211800110.21463@angie.orcam.me.uk Signed-off-by: Jens Axboe <axboe@kernel.dk>
This commit is contained in:
parent
6ddcec9547
commit
7d33004d24
|
@ -3651,6 +3651,17 @@
|
|||
Set to non-zero to probe tertiary and further ISA
|
||||
port ranges on PCI systems. Disabled by default.
|
||||
|
||||
pata_legacy.probe_mask= [HW,LIBATA]
|
||||
Format: <int>
|
||||
Probe mask for legacy ISA PATA ports. Depending on
|
||||
platform configuration and the use of other driver
|
||||
options up to 6 legacy ports are supported: 0x1f0,
|
||||
0x170, 0x1e8, 0x168, 0x1e0, 0x160, however probing
|
||||
of individual ports can be disabled by setting the
|
||||
corresponding bits in the mask to 1. Bit 0 is for
|
||||
the first port in the list above (0x1f0), and so on.
|
||||
By default all supported ports are probed.
|
||||
|
||||
pata_legacy.qdi= [HW,LIBATA]
|
||||
Format: <int>
|
||||
Set to non-zero to probe QDI controllers. By default
|
||||
|
|
|
@ -71,6 +71,10 @@ module_param(probe_all, int, 0);
|
|||
MODULE_PARM_DESC(probe_all,
|
||||
"Set to probe tertiary+ ISA port ranges even if PCI");
|
||||
|
||||
static int probe_mask = ~0;
|
||||
module_param(probe_mask, int, 0);
|
||||
MODULE_PARM_DESC(probe_mask, "Probe mask for legacy ISA PATA ports");
|
||||
|
||||
static int autospeed;
|
||||
module_param(autospeed, int, 0);
|
||||
MODULE_PARM_DESC(autospeed, "Chip present that snoops speed changes");
|
||||
|
@ -199,6 +203,8 @@ static int legacy_probe_add(unsigned long port, unsigned int irq,
|
|||
free = lp;
|
||||
/* Matching port, or the correct slot for ordering */
|
||||
if (lp->port == port || legacy_port[i] == port) {
|
||||
if (!(probe_mask & 1 << i))
|
||||
return -1;
|
||||
free = lp;
|
||||
break;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue