aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Documentation/ide/ide.txt2
-rw-r--r--Documentation/kernel-parameters.txt7
-rw-r--r--drivers/ide/ide-disk.c8
-rw-r--r--drivers/ide/ide.c10
-rw-r--r--include/linux/ide.h2
5 files changed, 23 insertions, 6 deletions
diff --git a/Documentation/ide/ide.txt b/Documentation/ide/ide.txt
index 0c78f4b1d9d9..e77bebfa7b0d 100644
--- a/Documentation/ide/ide.txt
+++ b/Documentation/ide/ide.txt
@@ -216,6 +216,8 @@ Other kernel parameters for ide_core are:
216 216
217* "noflush=[interface_number.device_number]" to disable flush requests 217* "noflush=[interface_number.device_number]" to disable flush requests
218 218
219* "nohpa=[interface_number.device_number]" to disable Host Protected Area
220
219* "noprobe=[interface_number.device_number]" to skip probing 221* "noprobe=[interface_number.device_number]" to skip probing
220 222
221* "nowerr=[interface_number.device_number]" to ignore the WRERR_STAT bit 223* "nowerr=[interface_number.device_number]" to ignore the WRERR_STAT bit
diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt
index a19f021f081a..e58c91ca802c 100644
--- a/Documentation/kernel-parameters.txt
+++ b/Documentation/kernel-parameters.txt
@@ -835,11 +835,8 @@ and is between 256 and 4096 characters. It is defined in the file
835 835
836 ide-core.nodma= [HW] (E)IDE subsystem 836 ide-core.nodma= [HW] (E)IDE subsystem
837 Format: =0.0 to prevent dma on hda, =0.1 hdb =1.0 hdc 837 Format: =0.0 to prevent dma on hda, =0.1 hdb =1.0 hdc
838 .vlb_clock .pci_clock .noflush .noprobe .nowerr .cdrom 838 .vlb_clock .pci_clock .noflush .nohpa .noprobe .nowerr
839 .chs .ignore_cable are additional options 839 .cdrom .chs .ignore_cable are additional options
840 See Documentation/ide/ide.txt.
841
842 idebus= [HW] (E)IDE subsystem - VLB/PCI bus speed
843 See Documentation/ide/ide.txt. 840 See Documentation/ide/ide.txt.
844 841
845 ide-pci-generic.all-generic-ide [HW] (E)IDE subsystem 842 ide-pci-generic.all-generic-ide [HW] (E)IDE subsystem
diff --git a/drivers/ide/ide-disk.c b/drivers/ide/ide-disk.c
index 61a6d3546221..3d92c9d54d47 100644
--- a/drivers/ide/ide-disk.c
+++ b/drivers/ide/ide-disk.c
@@ -350,6 +350,9 @@ static void idedisk_check_hpa(ide_drive_t *drive)
350 capacity, sectors_to_MB(capacity), 350 capacity, sectors_to_MB(capacity),
351 set_max, sectors_to_MB(set_max)); 351 set_max, sectors_to_MB(set_max));
352 352
353 if ((drive->dev_flags & IDE_DFLAG_NOHPA) == 0)
354 return;
355
353 set_max = ide_disk_hpa_set_capacity(drive, set_max, lba48); 356 set_max = ide_disk_hpa_set_capacity(drive, set_max, lba48);
354 if (set_max) 357 if (set_max)
355 printk(KERN_INFO "%s: Host Protected Area disabled.\n", 358 printk(KERN_INFO "%s: Host Protected Area disabled.\n",
@@ -430,8 +433,11 @@ static u64 ide_disk_set_capacity(ide_drive_t *drive, u64 capacity)
430 goto out; 433 goto out;
431 434
432 set = ide_disk_hpa_set_capacity(drive, set, lba48); 435 set = ide_disk_hpa_set_capacity(drive, set, lba48);
433 if (set) 436 if (set) {
437 /* needed for ->resume to disable HPA */
438 drive->dev_flags |= IDE_DFLAG_NOHPA;
434 return set; 439 return set;
440 }
435out: 441out:
436 return drive->capacity64; 442 return drive->capacity64;
437} 443}
diff --git a/drivers/ide/ide.c b/drivers/ide/ide.c
index 92c9b90931e7..16d056939f9f 100644
--- a/drivers/ide/ide.c
+++ b/drivers/ide/ide.c
@@ -211,6 +211,11 @@ static unsigned int ide_noflush;
211module_param_call(noflush, ide_set_dev_param_mask, NULL, &ide_noflush, 0); 211module_param_call(noflush, ide_set_dev_param_mask, NULL, &ide_noflush, 0);
212MODULE_PARM_DESC(noflush, "disable flush requests for a device"); 212MODULE_PARM_DESC(noflush, "disable flush requests for a device");
213 213
214static unsigned int ide_nohpa;
215
216module_param_call(nohpa, ide_set_dev_param_mask, NULL, &ide_nohpa, 0);
217MODULE_PARM_DESC(nohpa, "disable Host Protected Area for a device");
218
214static unsigned int ide_noprobe; 219static unsigned int ide_noprobe;
215 220
216module_param_call(noprobe, ide_set_dev_param_mask, NULL, &ide_noprobe, 0); 221module_param_call(noprobe, ide_set_dev_param_mask, NULL, &ide_noprobe, 0);
@@ -281,6 +286,11 @@ static void ide_dev_apply_params(ide_drive_t *drive, u8 unit)
281 drive->name); 286 drive->name);
282 drive->dev_flags |= IDE_DFLAG_NOFLUSH; 287 drive->dev_flags |= IDE_DFLAG_NOFLUSH;
283 } 288 }
289 if (ide_nohpa & (1 << i)) {
290 printk(KERN_INFO "ide: disabling Host Protected Area for %s\n",
291 drive->name);
292 drive->dev_flags |= IDE_DFLAG_NOHPA;
293 }
284 if (ide_noprobe & (1 << i)) { 294 if (ide_noprobe & (1 << i)) {
285 printk(KERN_INFO "ide: skipping probe for %s\n", drive->name); 295 printk(KERN_INFO "ide: skipping probe for %s\n", drive->name);
286 drive->dev_flags |= IDE_DFLAG_NOPROBE; 296 drive->dev_flags |= IDE_DFLAG_NOPROBE;
diff --git a/include/linux/ide.h b/include/linux/ide.h
index e96ace12872a..45dce3b4c88c 100644
--- a/include/linux/ide.h
+++ b/include/linux/ide.h
@@ -475,6 +475,8 @@ enum {
475 IDE_DFLAG_NICE1 = (1 << 5), 475 IDE_DFLAG_NICE1 = (1 << 5),
476 /* device is physically present */ 476 /* device is physically present */
477 IDE_DFLAG_PRESENT = (1 << 6), 477 IDE_DFLAG_PRESENT = (1 << 6),
478 /* disable Host Protected Area */
479 IDE_DFLAG_NOHPA = (1 << 7),
478 /* id read from device (synthetic if not set) */ 480 /* id read from device (synthetic if not set) */
479 IDE_DFLAG_ID_READ = (1 << 8), 481 IDE_DFLAG_ID_READ = (1 << 8),
480 IDE_DFLAG_NOPROBE = (1 << 9), 482 IDE_DFLAG_NOPROBE = (1 << 9),