diff options
| -rw-r--r-- | Documentation/ide/ide.txt | 2 | ||||
| -rw-r--r-- | Documentation/kernel-parameters.txt | 7 | ||||
| -rw-r--r-- | drivers/ide/ide-disk.c | 8 | ||||
| -rw-r--r-- | drivers/ide/ide.c | 10 | ||||
| -rw-r--r-- | include/linux/ide.h | 2 |
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 | } | ||
| 435 | out: | 441 | out: |
| 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; | |||
| 211 | module_param_call(noflush, ide_set_dev_param_mask, NULL, &ide_noflush, 0); | 211 | module_param_call(noflush, ide_set_dev_param_mask, NULL, &ide_noflush, 0); |
| 212 | MODULE_PARM_DESC(noflush, "disable flush requests for a device"); | 212 | MODULE_PARM_DESC(noflush, "disable flush requests for a device"); |
| 213 | 213 | ||
| 214 | static unsigned int ide_nohpa; | ||
| 215 | |||
| 216 | module_param_call(nohpa, ide_set_dev_param_mask, NULL, &ide_nohpa, 0); | ||
| 217 | MODULE_PARM_DESC(nohpa, "disable Host Protected Area for a device"); | ||
| 218 | |||
| 214 | static unsigned int ide_noprobe; | 219 | static unsigned int ide_noprobe; |
| 215 | 220 | ||
| 216 | module_param_call(noprobe, ide_set_dev_param_mask, NULL, &ide_noprobe, 0); | 221 | module_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), |
