drive appears confused (ireason = 0x01)
Hi,
This may concern you in part. Parts that you feel that don't concern IDE, please forward to the ones responsible.
Since kernel 2.6.13 I get a "cdrom_pc_intr: The drive appears confused (ireason = 0x01)" message when trying to access the DVD drive and I can't read any disks.
I just booted 2.6.14-rc3 and I still get it. I also get some weird things in syslog:
Oct 1 23:45:24 dcerouter kernel: hda: cde appears confused (ireason = 0x01) Oct 1 23:45:24 dcerouter kernel: hda: cdroe appears confused (ireason = 0x01) Oct 1 23:45:24 dcerouter kernel: hda: cdroe appears confused (ireason = 0x01) Oct 1 23:45:24 dcerouter kernel: hda: cdre appears confused (ireason = 0x01) Oct 1 23:45:24 dcerouter kernel: hda: cdrom_pc_e appears confused (ireason = 0x01) Oct 1 23:45:24 dcerouter kernel: hda: cdrom_pc_intr: The e appears confused (ireason = 0x01) Oct 1 23:45:24 dcerouter kernel: hda: cdrom_pc_intr: Te appears confused (ireason = 0x01) Oct 1 23:45:24 dcerouter kernel: hda: cdrom_pc_intr:e appears confused (ireason = 0x01) Oct 1 23:45:24 dcerouter kernel: hda: cdrom_pc_intr:e appears confused (ireason = 0x01) Oct 1 23:45:24 dcerouter kernel: hda: cdrom_pc_intre appears confused (ireason = 0x01) Oct 1 23:45:24 dcerouter kernel: hda: cdrom_pc_intr:e appears confused (ireason = 0x01) Oct 1 23:45:24 dcerouter kernel: hda: cdrom_pc_intr: e appears confused (ireason = 0x01) Oct 1 23:45:24 dcerouter kernel: hda:e appears confused (ireason = 0x01) Oct 1 23:45:24 dcerouter kernel: hda: cdrom_pc_e appears confused (ireason = 0x01) Oct 1 23:45:24 dcerouter kernel: hda: cdrom_pc_intr: The appears confused (ireason = 0x01) Oct 1 23:45:24 dcerouter kernel: hda: cdre appears confused (ireason = 0x01) Oct 1 23:45:24 dcerouter kernel: hda: cde appears confused (ireason = 0x01) Oct 1 23:45:24 dcerouter kernel: hda: cdre appears confused (ireason = 0x01) Oct 1 23:45:24 dcerouter kernel: hda: cdroe appears confused (ireason = 0x01) Oct 1 23:45:24 dcerouter kernel: hda: cdrom_e appears confused (ireason = 0x01) Oct 1 23:45:24 dcerouter kernel: hda: cdrom_pc_inte appears confused (ireason = 0x01) Oct 1 23:45:24 dcerouter kernel: hda: cdrom_pc_intr: The appears confused (ireason = 0x01) Oct 1 23:45:24 dcerouter kernel: hda: cdrom_pc_intr: e appears confused (ireason = 0x01) Oct 1 23:45:24 dcerouter kernel: hda: cdrom_pc_intr: e appears confused (ireason = 0x01) Oct 1 23:45:24 dcerouter kernel: hda: cdrom_pc_intr: The appears confused (ireason = 0x01) Oct 1 23:45:24 dcerouter kernel: hda: cdrom_pc_intr: e appears confused (ireason = 0x01) Oct 1 23:45:24 dcerouter kernel: hda: cdrom_pc_intr: Te appears confused (ireason = 0x01) Oct 1 23:45:24 dcerouter kernel: hda: cdrom_pc_intr: Thee appears confused (ireason = 0x01) Oct 1 23:45:24 dcerouter kernel: hda: cdrom_pc_intr: Te appears confused (ireason = 0x01) Oct 1 23:45:24 dcerouter kernel: hda: cdrom_pc_intr:e appears confused (ireason = 0x01) Oct 1 23:45:24 dcerouter kernel: hda: cdrom_pc_inte appears confused (ireason = 0x01)
Quoted 9 lines · Uplink
Hi,
This may concern you in part. Parts that you feel that don't concern IDE, please forward to the ones responsible.
Since kernel 2.6.13 I get a "
cdrom_pc_intr: The drive appears confused (ireason =0x01)" message when trying to access the DVD drive and I can't read any disks.
Quoted 6 lines
I just booted 2.6.14-rc3 and I still get it. I also get some weird things in syslog:
Oct 1 23:45:24 dcerouter kernel: hda: cde appears confused (ireason = 0x01) Oct 1 23:45:24 dcerouter kernel: hda: cdroe appears confused (ireason =
0x01)
Can you try reversing this patch from 2.6.13/2.6.14-rc3 and see if it makes a difference?
drivers/ide/ide-cd.c +50 -43
@@ -431,7 +431,7 @@ void cdrom_analyze_sense_data(ide_drive_#if VERBOSE_IDE_CD_ERRORS {int i; -const char *s; +const char *s ="bad sense key!" ;char buf[80 ];printk ("ATAPI device %s:\n" , drive->name);
@@ -446,8 +446,6 @@ void cdrom_analyze_sense_data(ide_drive_if (sense->sense_key <ARY_LEN (sense_key_texts)) s = sense_key_texts[sense->sense_key]; -else - s ="bad sense key!" ;printk ("%s -- (Sense key=0x%02x)\n" , s, sense->sense_key);
@@ -2657,16 +2655,63 @@ int ide_cdrom_lock_door (struct cdrom_de }static +int ide_cdrom_get_capabilities (ide_drive_t *drive,struct atapi_capabilities_page *cap) +{ +struct cdrom_info *info = drive->driver_data; +struct cdrom_device_info *cdi = &info->devinfo; +struct packet_command cgc; +int stat, attempts =3 , size =sizeof (*cap); + +/* +* ACER50 (and others?) require the full spec length mode sense +* page capabilities size, but older drives break. +*/ +if (!(!strcmp (drive->id->model,"ATAPI CD ROM DRIVE 50X MAX" ) || + !strcmp (drive->id->model,"WPI CDS-32X" ))) + size -=sizeof (cap->pad); + +init_cdrom_command (&cgc, cap, size,CGC_DATA_UNKNOWN ); +do {/* we seem to get stat=0x01,err=0x00 the first time (??) */ + stat =cdrom_mode_sense (cdi, &cgc,GPMODE_CAPABILITIES_PAGE ,0 ); +if (!stat) +break ; + }while (--attempts); +return stat; +} + +static +void ide_cdrom_update_speed (ide_drive_t *drive,struct atapi_capabilities_page *cap) +{ +/* The ACER/AOpen 24X cdrom has the speed fields byte-swapped */ +if (!drive->id->model[0 ] && + !strncmp (drive->id->fw_rev,"241N" ,4 )) { +CDROM_STATE_FLAGS (drive)->current_speed = + (((unsigned int )cap->curspeed) + (176 /2 )) /176 ; +CDROM_CONFIG_FLAGS (drive)->max_speed = + (((unsigned int )cap->maxspeed) + (176 /2 )) /176 ; + }else { +CDROM_STATE_FLAGS (drive)->current_speed = + (ntohs (cap->curspeed) + (176 /2 )) /176 ; +CDROM_CONFIG_FLAGS (drive)->max_speed = + (ntohs (cap->maxspeed) + (176 /2 )) /176 ; + } +} + +static int ide_cdrom_select_speed (struct cdrom_device_info *cdi,int speed) {ide_drive_t *drive = (ide_drive_t *) cdi->handle;struct request_sense sense; +struct atapi_capabilities_page cap;int stat;if ((stat =cdrom_select_speed (drive, speed, &sense)) <0 )return stat; - cdi->speed =CDROM_STATE_FLAGS (drive)->current_speed; +if (!ide_cdrom_get_capabilities (drive, &cap)) { +ide_cdrom_update_speed (drive, &cap); + cdi->speed =CDROM_STATE_FLAGS (drive)->current_speed; + }return 0 ; }
@@ -2869,31 +2914,6 @@ static int ide_cdrom_register (ide_drive }static -int ide_cdrom_get_capabilities (ide_drive_t *drive,struct atapi_capabilities_page *cap) -{ -struct cdrom_info *info = drive->driver_data; -struct cdrom_device_info *cdi = &info->devinfo; -struct packet_command cgc; -int stat, attempts =3 , size =sizeof (*cap); - -/* -* ACER50 (and others?) require the full spec length mode sense -* page capabilities size, but older drives break. -*/ -if (!(!strcmp (drive->id->model,"ATAPI CD ROM DRIVE 50X MAX" ) || - !strcmp (drive->id->model,"WPI CDS-32X" ))) - size -=sizeof (cap->pad); - -init_cdrom_command (&cgc, cap, size,CGC_DATA_UNKNOWN ); -do {/* we seem to get stat=0x01,err=0x00 the first time (??) */ - stat =cdrom_mode_sense (cdi, &cgc,GPMODE_CAPABILITIES_PAGE ,0 ); -if (!stat) -break ; - }while (--attempts); -return stat; -} - -static int ide_cdrom_probe_capabilities (ide_drive_t *drive) {struct cdrom_info *info = drive->driver_data;
@@ -2978,20 +2998,7 @@ int ide_cdrom_probe_capabilities (ide_dr } } -/* The ACER/AOpen 24X cdrom has the speed fields byte-swapped */ -if (!drive->id->model[0 ] && - !strncmp (drive->id->fw_rev,"241N" ,4 )) { -CDROM_STATE_FLAGS (drive)->current_speed = - (((unsigned int )cap.curspeed) + (176 /2 )) /176 ; -CDROM_CONFIG_FLAGS (drive)->max_speed = - (((unsigned int )cap.maxspeed) + (176 /2 )) /176 ; - }else { -CDROM_STATE_FLAGS (drive)->current_speed = - (ntohs (cap.curspeed) + (176 /2 )) /176 ; -CDROM_CONFIG_FLAGS (drive)->max_speed = - (ntohs (cap.maxspeed) + (176 /2 )) /176 ; - } - +ide_cdrom_update_speed (drive, &cap);/* don't print speed if the drive reported 0. */ printk (KERN_INFO "%s: ATAPI" , drive->name);
Signature · 1 line
Jens Axboe
I found out what it was and it's not this. It's S-ATA vs. IRQ. I'm starting to hate these encounters. It's all about Legacy/Compatibily vs. Enhanced mode of operation. Something changes with the APIC when using Enhanced mode and isn't handled by the kernel.
This link shows, somewhat, what I mean:
http://plutohome.com/support/phpbb2/viewtopic.php?p=1600#1600
Quoted 163 lines · Jens Axboe
Quoted 12 lines · Uplink
Hi,
This may concern you in part. Parts that you feel that don't concern IDE, please forward to the ones responsible.
Since kernel 2.6.13 I get a "
cdrom_pc_intr: The drive appears confused (ireason =0x01)" message when trying to access the DVD drive and I can't read any disks.I just booted 2.6.14-rc3 and I still get it. I also get some weird things in syslog:
Oct 1 23:45:24 dcerouter kernel: hda: cde appears confused (ireason = 0x01) Oct 1 23:45:24 dcerouter kernel: hda: cdroe appears confused (ireason = 0x01)Can you try reversing this patch from 2.6.13/2.6.14-rc3 and see if it makes a difference?
drivers/ide/ide-cd.c +1
-3@@ -431,7 +431,7 @@ void cdrom_analyze_sense_data(ide_drive_#if VERBOSE_IDE_CD_ERRORS {int i; -const char *s; +const char *s ="bad sense key!" ;char buf[80 ];printk ("ATAPI device %s:\n" , drive->name);@@ -446,8 +446,6 @@ void cdrom_analyze_sense_data(ide_drive_if (sense->sense_key <ARY_LEN (sense_key_texts)) s = sense_key_texts[sense->sense_key]; -else - s ="bad sense key!" ;printk ("%s -- (Sense key=0x%02x)\n" , s, sense->sense_key);@@ -2657,16 +2655,63 @@ int ide_cdrom_lock_door (struct cdrom_de }static
drivers/ide/ide-cd.c +43
-0+int ide_cdrom_get_capabilities (ide_drive_t *drive,struct atapi_capabilities_page *cap) +{ +struct cdrom_info *info = drive->driver_data; +struct cdrom_device_info *cdi = &info->devinfo; +struct packet_command cgc; +int stat, attempts =3 , size =sizeof (*cap); + +/* +* ACER50 (and others?) require the full spec length mode sense +* page capabilities size, but older drives break. +*/ +if (!(!strcmp (drive->id->model,"ATAPI CD ROM DRIVE 50X MAX" ) || + !strcmp (drive->id->model,"WPI CDS-32X" ))) + size -=sizeof (cap->pad); + +init_cdrom_command (&cgc, cap, size,CGC_DATA_UNKNOWN ); +do {/* we seem to get stat=0x01,err=0x00 the first time (??) */ + stat =cdrom_mode_sense (cdi, &cgc,GPMODE_CAPABILITIES_PAGE ,0 ); +if (!stat) +break ; + }while (--attempts); +return stat; +} + +static +void ide_cdrom_update_speed (ide_drive_t *drive,struct atapi_capabilities_page *cap) +{ +/* The ACER/AOpen 24X cdrom has the speed fields byte-swapped */ +if (!drive->id->model[0 ] && + !strncmp (drive->id->fw_rev,"241N" ,4 )) { +CDROM_STATE_FLAGS (drive)->current_speed = + (((unsigned int )cap->curspeed) + (176 /2 )) /176 ; +CDROM_CONFIG_FLAGS (drive)->max_speed = + (((unsigned int )cap->maxspeed) + (176 /2 )) /176 ; + }else { +CDROM_STATE_FLAGS (drive)->current_speed = + (ntohs (cap->curspeed) + (176 /2 )) /176 ; +CDROM_CONFIG_FLAGS (drive)->max_speed = + (ntohs (cap->maxspeed) + (176 /2 )) /176 ; + } +} + +staticint
ide_cdrom_select_speed(structcdrom_device_info*cdi, int speed){ ide_drive_t *drive = (ide_drive_t*) cdi->handle; struct request_sense sense;drivers/ide/ide-cd.c +1
-0+struct atapi_capabilities_page cap;int stat; if ((stat = cdrom_select_speed(drive, speed, &sense)) < 0) return stat;drivers/ide/ide-cd.c +4
-1- cdi->speed =CDROM_STATE_FLAGS (drive)->current_speed; +if (!ide_cdrom_get_capabilities (drive, &cap)) { +ide_cdrom_update_speed (drive, &cap); + cdi->speed =CDROM_STATE_FLAGS (drive)->current_speed; + }return 0 ;}
drivers/ide/ide-cd.c +0
-0@@ -2869,31 +2914,6 @@ static int ide_cdrom_register (ide_drive }static
drivers/ide/ide-cd.c +0
-25-int ide_cdrom_get_capabilities (ide_drive_t *drive,struct atapi_capabilities_page *cap) -{ -struct cdrom_info *info = drive->driver_data; -struct cdrom_device_info *cdi = &info->devinfo; -struct packet_command cgc; -int stat, attempts =3 , size =sizeof (*cap); - -/* -* ACER50 (and others?) require the full spec length mode sense -* page capabilities size, but older drives break. -*/ -if (!(!strcmp (drive->id->model,"ATAPI CD ROM DRIVE 50X MAX" ) || - !strcmp (drive->id->model,"WPI CDS-32X" ))) - size -=sizeof (cap->pad); - -init_cdrom_command (&cgc, cap, size,CGC_DATA_UNKNOWN ); -do {/* we seem to get stat=0x01,err=0x00 the first time (??) */ - stat =cdrom_mode_sense (cdi, &cgc,GPMODE_CAPABILITIES_PAGE ,0 ); -if (!stat) -break ; - }while (--attempts); -return stat; -} - -staticint
ide_cdrom_probe_capabilities(ide_drive_t*drive){ struct cdrom_info *info = drive->driver_data;drivers/ide/ide-cd.c +1
-14@@ -2978,20 +2998,7 @@ int ide_cdrom_probe_capabilities (ide_dr } } -/* The ACER/AOpen 24X cdrom has the speed fields byte-swapped */ -if (!drive->id->model[0 ] && - !strncmp (drive->id->fw_rev,"241N" ,4 )) { -CDROM_STATE_FLAGS (drive)->current_speed = - (((unsigned int )cap.curspeed) + (176 /2 )) /176 ; -CDROM_CONFIG_FLAGS (drive)->max_speed = - (((unsigned int )cap.maxspeed) + (176 /2 )) /176 ; - }else { -CDROM_STATE_FLAGS (drive)->current_speed = - (ntohs (cap.curspeed) + (176 /2 )) /176 ; -CDROM_CONFIG_FLAGS (drive)->max_speed = - (ntohs (cap.maxspeed) + (176 /2 )) /176 ; - } - +ide_cdrom_update_speed (drive, &cap);/* don't print speed if the drive reported 0. */ printk (KERN_INFO "%s: ATAPI" , drive->name);