qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* Re: [Qemu-devel] LSI53C895A, IDE HDD detection under SCO OpenServer 5.0.5
@ 2008-11-04 13:30 Justin Chevrier
  2008-11-06 12:51 ` Craig Ringer
  0 siblings, 1 reply; 20+ messages in thread
From: Justin Chevrier @ 2008-11-04 13:30 UTC (permalink / raw)
  To: qemu-devel

Hey again,

I realized that my patch was malformed (diffing the wrong way). Here it is again, hopefully in a usable format. Sorry for the confusion.

--- lsi53c895a.c	2008-11-04 08:28:18.000000000 -0500
+++ lsi53c895a.c.final	2008-11-04 08:28:40.000000000 -0500
@@ -209,6 +209,7 @@
     uint8_t mbox0;
     uint8_t mbox1;
     uint8_t dfifo;
+    uint8_t ctest2;
     uint8_t ctest3;
     uint8_t ctest4;
     uint8_t ctest5;
@@ -280,6 +281,7 @@
     s->mbox0 = 0;
     s->mbox1 = 0;
     s->dfifo = 0;
+    s->ctest2 = 0;
     s->ctest3 = 0;
     s->ctest4 = 0;
     s->ctest5 = 0;
@@ -890,6 +892,7 @@
             break;
         case PHASE_DI:
             s->waiting = 2;
+            s->current_dma_len = s->dbc;
             lsi_do_dma(s, 0);
             if (s->waiting)
                 s->waiting = 3;
@@ -1279,7 +1282,7 @@
     case 0x19: /* CTEST1 */
         return 0;
     case 0x1a: /* CTEST2 */
-        tmp = LSI_CTEST2_DACK | LSI_CTEST2_CM;
+        tmp = s->ctest2 | LSI_CTEST2_DACK | LSI_CTEST2_CM;
         if (s->istat0 & LSI_ISTAT0_SIGP) {
             s->istat0 &= ~LSI_ISTAT0_SIGP;
             tmp |= LSI_CTEST2_SIGP;
@@ -1327,6 +1330,8 @@
         s->sist1 = 0;
         lsi_update_irq(s);
         return tmp;
+    case 0x46: /* MACNTL */
+        return 0x0f;
     case 0x47: /* GPCNTL0 */
         return 0x0f;
     case 0x48: /* STIME0 */
@@ -1440,6 +1445,9 @@
            SCRIPTS register move instructions are.  */
         s->sfbr = val;
         break;
+    case 0x0a: case 0x0b: 
+        /* Openserver writes to these readonly registers on startup */
+	return;    
     case 0x0c: case 0x0d: case 0x0e: case 0x0f:
         /* Linux writes to these readonly registers on startup.  */
         return;
@@ -1469,6 +1477,9 @@
     case 0x17: /* MBOX1 */
         s->mbox1 = val;
         break;
+    case 0x1a: /* CTEST2 */
+	s->ctest2 = val & LSI_CTEST2_PCICIE;
+	break;
     case 0x1b: /* CTEST3 */
         s->ctest3 = val & 0x0f;
         break;
@@ -1869,12 +1880,21 @@
         return NULL;
     }
 
+    /* PCI Vendor ID (word) */
     s->pci_dev.config[0x00] = 0x00;
     s->pci_dev.config[0x01] = 0x10;
+    /* PCI device ID (word) */
     s->pci_dev.config[0x02] = 0x12;
     s->pci_dev.config[0x03] = 0x00;
+    /* PCI base class code */
     s->pci_dev.config[0x0b] = 0x01;
-    s->pci_dev.config[0x3d] = 0x01; /* interrupt pin 1 */
+    /* PCI subsystem ID */
+    s->pci_dev.config[0x2e] = 0x00;
+    s->pci_dev.config[0x2f] = 0x10;
+    /* PCI latency timer = 255 */
+    s->pci_dev.config[0x0d] = 0xff;
+    /* Interrupt pin 1 */
+    s->pci_dev.config[0x3d] = 0x01;
 
     s->mmio_io_addr = cpu_register_io_memory(0, lsi_mmio_readfn,
                                              lsi_mmio_writefn, s);



      

^ permalink raw reply	[flat|nested] 20+ messages in thread
* Re: [Qemu-devel] LSI53C895A, IDE HDD detection under SCO OpenServer 5.0.5
@ 2008-11-14 20:50 Justin Chevrier
  2008-11-14 22:13 ` Laurent Vivier
  0 siblings, 1 reply; 20+ messages in thread
From: Justin Chevrier @ 2008-11-14 20:50 UTC (permalink / raw)
  To: qemu-devel

Hey guys,

Well I've continued to work on the:

...
WARNING: A_DeviceReset interrupt on ha=0 id=0 lun=5 tag=A6
...

errors (in the emulated OS) when installing Openserver.

I believe I have narrowed down the problem. Openserver does an INQUIRY on various LUNs above 0 (which we don't support). We return 0x7f (nothing here, move along). Openserver then proceeds to send another command to the SCSI disk. The disk then returns:

0x02 - STATUS_CHECK_CONDITION
0x05 - SENSE_ILLEGAL_REQUEST

which is as expected. The problem comes along when the controller goes into Status Phase and compares the resulting sense returned by the drive to see what the status of the drive is. What I've found is that the controller is using the status value (STATUS_CHECK_CONDITION) as the sense value. So it thinks we've recieved a sense return of 'SENSE_NOT_READY' and then it keeps probing the drive until it finally gives up, and we get the above error. See the log below:

...
lsi_scsi: SCRIPTS dsp=f20021a4 opcode 1a000000 arg1 00000018 arg2 810b0000
lsi_scsi: Send command len=6
scsi-disk: Command: lun=1 tag=0x100c1 data=0x00 0x20 0x00 0x00 0x00 0x00
scsi-disk: Unimplemented LUN 1
scsi-disk: Command complete tag=0x100c1 status=2 sense=5 <--****
lsi_scsi: Command reason: 0
lsi_scsi: Command complete sense=2 <-- ****
...

The patch below changes 'scsi_command_complete' (in scsi-disk.c) to pass a sense value along to the callbak instead of status.

I'm not sure this is where we want to go however as this basically reverses part of rev 5455 (which made a point of specifically changing this line).

Do we need to update the LSI emulation to make use of status as well?

Either way, at least we know the cause of these errors and this can be a hack at least if it's not the direction we want to take.

Alas this does not fix Openserver's install problem (not too surprised). Onto the next bug...

Justin

--- hw/scsi-disk.c      (revision 5722)
+++ hw/scsi-disk.c      (working copy)
@@ -135,7 +135,7 @@
     s->sense = sense;
     tag = r->tag;
     scsi_remove_request(r);
-    s->completion(s->opaque, SCSI_REASON_DONE, tag, status);
+    s->completion(s->opaque, SCSI_REASON_DONE, tag, sense);
 }

 /* Cancel a pending data transfer.  */



      

^ permalink raw reply	[flat|nested] 20+ messages in thread
* Re: [Qemu-devel] LSI53C895A, IDE HDD detection under SCO OpenServer 5.0.5
@ 2008-11-04 12:58 Justin Chevrier
  2008-11-05  3:02 ` Craig Ringer
  0 siblings, 1 reply; 20+ messages in thread
From: Justin Chevrier @ 2008-11-04 12:58 UTC (permalink / raw)
  To: qemu-devel

Hmmmm,

I'm kind of confused.

The patch I posted has the latency fix that you included in your patch. It also has reading of 0x46 implemented and writing to 0x1a as well.

The slha driver I used is from this URL:

http://www.lsi.com/DistributionSystem/AssetDocument/files/support/ssp/sdms/Sco/scounix.zip

I then used the following command line to boot (using the SCO Openserver 5.0.5 install CD):

i386-softmmu/qemu -L pc-bios -m 256 -no-fd-bootchk -fda sco.dd -boot d -drive file=hd.img,if=scsi -cdrom /dev/sr0

The boot string I used was the following (at the 'boot:' prompt):

defbootstr link=slha btld=fd(61)

I also had success with a boot/root floppy combo that I believe I created at one point from a working Openserver installation. I can pass the command lines for those as well if they would be of use.

Thanks for taking a look Craig.

Here is my patch again inline (in case something got lost in the original post):

--- lsi53c895a.c.orig	2008-10-29 14:18:52.000000000 -0400
+++ lsi53c895a.c	2008-11-03 22:12:24.000000000 -0500
@@ -209,6 +209,7 @@
     uint8_t mbox0;
     uint8_t mbox1;
     uint8_t dfifo;
+    uint8_t ctest2;
     uint8_t ctest3;
     uint8_t ctest4;
     uint8_t ctest5;
@@ -280,6 +281,7 @@
     s->mbox0 = 0;
     s->mbox1 = 0;
     s->dfifo = 0;
+    s->ctest2 = 0;
     s->ctest3 = 0;
     s->ctest4 = 0;
     s->ctest5 = 0;
@@ -890,6 +892,7 @@
             break;
         case PHASE_DI:
             s->waiting = 2;
+            s->current_dma_len = s->dbc;
             lsi_do_dma(s, 0);
             if (s->waiting)
                 s->waiting = 3;
@@ -1279,7 +1282,7 @@
     case 0x19: /* CTEST1 */
         return 0;
     case 0x1a: /* CTEST2 */
-        tmp = LSI_CTEST2_DACK | LSI_CTEST2_CM;
+        tmp = s->ctest2 | LSI_CTEST2_DACK | LSI_CTEST2_CM;
         if (s->istat0 & LSI_ISTAT0_SIGP) {
             s->istat0 &= ~LSI_ISTAT0_SIGP;
             tmp |= LSI_CTEST2_SIGP;
@@ -1327,6 +1330,8 @@
         s->sist1 = 0;
         lsi_update_irq(s);
         return tmp;
+    case 0x46: /* MACNTL */
+        return 0x0f;
     case 0x47: /* GPCNTL0 */
         return 0x0f;
     case 0x48: /* STIME0 */
@@ -1440,6 +1445,9 @@
            SCRIPTS register move instructions are.  */
         s->sfbr = val;
         break;
+    case 0x0a: case 0x0b: 
+        /* Openserver writes to these readonly registers on startup */
+	return;    
     case 0x0c: case 0x0d: case 0x0e: case 0x0f:
         /* Linux writes to these readonly registers on startup.  */
         return;
@@ -1469,6 +1477,9 @@
     case 0x17: /* MBOX1 */
         s->mbox1 = val;
         break;
+    case 0x1a: /* CTEST2 */
+	s->ctest2 = val & LSI_CTEST2_PCICIE;
+	break;
     case 0x1b: /* CTEST3 */
         s->ctest3 = val & 0x0f;
         break;
@@ -1869,12 +1880,21 @@
         return NULL;
     }
 
+    /* PCI Vendor ID (word) */
     s->pci_dev.config[0x00] = 0x00;
     s->pci_dev.config[0x01] = 0x10;
+    /* PCI device ID (word) */
     s->pci_dev.config[0x02] = 0x12;
     s->pci_dev.config[0x03] = 0x00;
+    /* PCI base class code */
     s->pci_dev.config[0x0b] = 0x01;
-    s->pci_dev.config[0x3d] = 0x01; /* interrupt pin 1 */
+    /* PCI subsystem ID */
+    s->pci_dev.config[0x2e] = 0x00;
+    s->pci_dev.config[0x2f] = 0x10;
+    /* PCI latency timer = 255 */
+    s->pci_dev.config[0x0d] = 0xff;
+    /* Interrupt pin 1 */
+    s->pci_dev.config[0x3d] = 0x01;
 
     s->mmio_io_addr = cpu_register_io_memory(0, lsi_mmio_readfn,
                                              lsi_mmio_writefn, s);



      

^ permalink raw reply	[flat|nested] 20+ messages in thread
* Re: [Qemu-devel] LSI53C895A, IDE HDD detection under SCO OpenServer 5.0.5
@ 2008-11-04  3:21 Justin Chevrier
  2008-11-04  3:41 ` Craig Ringer
  2008-11-10  1:31 ` andrzej zaborowski
  0 siblings, 2 replies; 20+ messages in thread
From: Justin Chevrier @ 2008-11-04  3:21 UTC (permalink / raw)
  To: qemu-devel

[-- Attachment #1: Type: text/plain, Size: 1517 bytes --]

Hey guys,

Well I've made some progress with getting the LSI53C895A emulated card working under Openserver. After going through the debug log and scratching my head for quite some time. I found the following:

The problem was with this block move:

lsi_scsi: SCRIPTS dsp=0fae8e50 opcode 01000028 arg 00f63c40
lsi_scsi: DMA addr=0x00f63c40 len=36

The number of bytes to be transferred (len) should be 40 which corresponds
to the block transfer of length 0x28 (from opcode 01000028). Instead we 
have a length of 36 (0x24). The code responsible for this is (in 'lsi_do_dma'):

if (count > s->current_dma_len)
    count = s->current_dma_len;
    
Basically we're overwriting the length 40 with the value 36 which I think we just left over in that variable from an earlier transfer. In my patch below I initialize s->current_dma_len to s->dbc before we begin the DMA transfer during Data In phase.

The attached patch gets Openserver 5.0.5 past the hardware detection
(and it lists the hard drive to boot, woohoo). It appears to stop a little 
while later (doesn't seem SCSI related), but it's been so long since I've 
booted Openserver I'm not sure what's supposted to happen after the HW 
detection using the boot/root disks.

Give it a shot. Hopefully it doesn't break other OS's, but I haven't checked myself. If what I did makes sense and doesn't break anything I'd like to see it get merged into mainline.

Props go to Craig for the initial post and the code that he posted some of which is in this patch.


      

[-- Attachment #2: lsi_sco.diff --]
[-- Type: text/plain, Size: 2599 bytes --]

--- lsi53c895a.c.orig	2008-10-29 14:18:52.000000000 -0400
+++ lsi53c895a.c	2008-11-03 22:12:24.000000000 -0500
@@ -209,6 +209,7 @@
     uint8_t mbox0;
     uint8_t mbox1;
     uint8_t dfifo;
+    uint8_t ctest2;
     uint8_t ctest3;
     uint8_t ctest4;
     uint8_t ctest5;
@@ -280,6 +281,7 @@
     s->mbox0 = 0;
     s->mbox1 = 0;
     s->dfifo = 0;
+    s->ctest2 = 0;
     s->ctest3 = 0;
     s->ctest4 = 0;
     s->ctest5 = 0;
@@ -890,6 +892,7 @@
             break;
         case PHASE_DI:
             s->waiting = 2;
+            s->current_dma_len = s->dbc;
             lsi_do_dma(s, 0);
             if (s->waiting)
                 s->waiting = 3;
@@ -1279,7 +1282,7 @@
     case 0x19: /* CTEST1 */
         return 0;
     case 0x1a: /* CTEST2 */
-        tmp = LSI_CTEST2_DACK | LSI_CTEST2_CM;
+        tmp = s->ctest2 | LSI_CTEST2_DACK | LSI_CTEST2_CM;
         if (s->istat0 & LSI_ISTAT0_SIGP) {
             s->istat0 &= ~LSI_ISTAT0_SIGP;
             tmp |= LSI_CTEST2_SIGP;
@@ -1327,6 +1330,8 @@
         s->sist1 = 0;
         lsi_update_irq(s);
         return tmp;
+    case 0x46: /* MACNTL */
+        return 0x0f;
     case 0x47: /* GPCNTL0 */
         return 0x0f;
     case 0x48: /* STIME0 */
@@ -1440,6 +1445,9 @@
            SCRIPTS register move instructions are.  */
         s->sfbr = val;
         break;
+    case 0x0a: case 0x0b: 
+        /* Openserver writes to these readonly registers on startup */
+	return;    
     case 0x0c: case 0x0d: case 0x0e: case 0x0f:
         /* Linux writes to these readonly registers on startup.  */
         return;
@@ -1469,6 +1477,9 @@
     case 0x17: /* MBOX1 */
         s->mbox1 = val;
         break;
+    case 0x1a: /* CTEST2 */
+	s->ctest2 = val & LSI_CTEST2_PCICIE;
+	break;
     case 0x1b: /* CTEST3 */
         s->ctest3 = val & 0x0f;
         break;
@@ -1869,12 +1880,21 @@
         return NULL;
     }
 
+    /* PCI Vendor ID (word) */
     s->pci_dev.config[0x00] = 0x00;
     s->pci_dev.config[0x01] = 0x10;
+    /* PCI device ID (word) */
     s->pci_dev.config[0x02] = 0x12;
     s->pci_dev.config[0x03] = 0x00;
+    /* PCI base class code */
     s->pci_dev.config[0x0b] = 0x01;
-    s->pci_dev.config[0x3d] = 0x01; /* interrupt pin 1 */
+    /* PCI subsystem ID */
+    s->pci_dev.config[0x2e] = 0x00;
+    s->pci_dev.config[0x2f] = 0x10;
+    /* PCI latency timer = 255 */
+    s->pci_dev.config[0x0d] = 0xff;
+    /* Interrupt pin 1 */
+    s->pci_dev.config[0x3d] = 0x01;
 
     s->mmio_io_addr = cpu_register_io_memory(0, lsi_mmio_readfn,
                                              lsi_mmio_writefn, s);

^ permalink raw reply	[flat|nested] 20+ messages in thread
* Re: [Qemu-devel] LSI53C895A, IDE HDD detection under SCO OpenServer 5.0.5
@ 2008-10-29 19:39 Justin Chevrier
  0 siblings, 0 replies; 20+ messages in thread
From: Justin Chevrier @ 2008-10-29 19:39 UTC (permalink / raw)
  To: qemu-devel

Craig Ringer wrote:
> I tried to boot off a floppy image for this test to eliminate noise from 
> the IDE CD-ROM access, but qemu doesn't recognise the OpenServer 
> installation disk as bootable.

Hi again,

Just wanted to add that you can work around qemu refusing to boot off of the Openserver bootable floppy disks by telling it to skip the boot check on the floppy drive by using the following option:

"-no-fd-bootchk"

Justin





^ permalink raw reply	[flat|nested] 20+ messages in thread
* Re: [Qemu-devel] LSI53C895A, IDE HDD detection under SCO OpenServer 5.0.5
@ 2008-10-29 18:16 Justin Chevrier
  0 siblings, 0 replies; 20+ messages in thread
From: Justin Chevrier @ 2008-10-29 18:16 UTC (permalink / raw)
  To: qemu-devel

[-- Attachment #1: Type: text/plain, Size: 304 bytes --]

Hey Craig,

Just wanted to send a quick message of support and that I'm interested in booting Openserver 5.0.5 as well. I was just about to test the latest qemu against it myself (after not having tested for some time).

I'd be more than happy to do any testing if it's needed.

Thanks,

Justin



      

[-- Attachment #2: Type: text/html, Size: 449 bytes --]

^ permalink raw reply	[flat|nested] 20+ messages in thread
* [Qemu-devel] LSI53C895A, IDE HDD detection under SCO OpenServer 5.0.5
@ 2008-10-29  9:25 Craig Ringer
  2008-10-29 15:38 ` Craig Ringer
  0 siblings, 1 reply; 20+ messages in thread
From: Craig Ringer @ 2008-10-29  9:25 UTC (permalink / raw)
  To: qemu-devel

Hi

I'm writing to seek some advice with getting the emulated LSI53C895A 
SCSI HBA or the emulated PIIX PATA IDE controller detected and working 
under SCO OpenServer 5.0.5 . (I'd rather not be using it it all, but we 
don't always get that much choice).

In the case of the PIIX it sees the ATAPI CD-ROM and boots from that 
fine. It just can't detect any ATA hard disks. My understanding is that 
it's probably failing while testing the emulated hardware for some wacky 
quick or misbehaviour that used to be common in some ancient IDE 
controllers.

As for the LSI53C895A, I have a boot-time loadable driver (version 
V4.11.00) that claims to support the card under OpenServer 5.0.5 . 
Following the setup instructions works and the driver is loaded, but no 
hardware appears to be detected.

I've rebuilt qemu with DEBUG_LSI, DEBUG_LSI_REG, DEBUG_SCSI and 
DEBUG_PCI defined. I've included the output that results when I *think* 
the slha driver tries to probe the virtual hardware below.

I assume it's finding something not to its liking in the responses of 
the virtual hardware and is rejecting it. However, I haven't the 
foggiest what it might be, and was really hoping someone here might have 
a bit of experience with troubleshooting hardware detection issues and 
might be able to lend a hand or offer a pointer.

In particular, is there any other tracing/debugging I could/should be 
doing to shed some light on what's going on?

Here's the debug output during (I think) the slha driver's probe of the 
hardware. Qemu (0.9.1, from Ubuntu 8.04) was invoked as:

qemu -cdrom /archive/cdimages/SCO_5_0_5.iso \
  -drive file=/var/VMs/alder/alder.img,media=disk,if=scsi,bus=0,unit=0\
  -fda /archive/cdimages/SCO_5_0_5_LSI53C895A_BTLD_FLOPPY.img \
  -boot d

and kqemu was not loaded or enabled.

pci_config_read: LSI53C895A SCSI HBA: addr=0e val=00000000 len=1
pci_config_read: LSI53C895A SCSI HBA: addr=00 val=00001000 len=2
pci_config_read: LSI53C895A SCSI HBA: addr=02 val=00000012 len=2
pci_config_read: LSI53C895A SCSI HBA: addr=00 val=00001000 len=2
pci_config_read: LSI53C895A SCSI HBA: addr=2f val=00000000 len=1
pci_config_read: LSI53C895A SCSI HBA: addr=00 val=00001000 len=2
pci_config_read: LSI53C895A SCSI HBA: addr=04 val=00000003 len=1
pci_config_read: LSI53C895A SCSI HBA: addr=00 val=00001000 len=2
pci_config_write: LSI53C895A SCSI HBA: addr=04 val=00000007 len=1
pci_config_read: LSI53C895A SCSI HBA: addr=00 val=00001000 len=2
pci_config_read: LSI53C895A SCSI HBA: addr=14 val=f2001000 len=4
pci_config_read: LSI53C895A SCSI HBA: addr=00 val=00001000 len=2
pci_config_write: LSI53C895A SCSI HBA: addr=14 val=ffffffff len=4
pci_config_read: LSI53C895A SCSI HBA: addr=00 val=00001000 len=2
pci_config_read: LSI53C895A SCSI HBA: addr=14 val=fffffc00 len=4
pci_config_read: LSI53C895A SCSI HBA: addr=00 val=00001000 len=2
pci_config_write: LSI53C895A SCSI HBA: addr=14 val=f2001000 len=4
lsi_scsi: Mapping registers at f2001000
pci_config_read: LSI53C895A SCSI HBA: addr=00 val=00001000 len=2
pci_config_read: LSI53C895A SCSI HBA: addr=18 val=f2002000 len=4
pci_config_read: LSI53C895A SCSI HBA: addr=00 val=00001000 len=2
pci_config_read: LSI53C895A SCSI HBA: addr=2e val=00000000 len=1
pci_config_read: LSI53C895A SCSI HBA: addr=00 val=00001000 len=2
pci_config_read: LSI53C895A SCSI HBA: addr=0d val=00000000 len=1
pci_config_read: LSI53C895A SCSI HBA: addr=00 val=00001000 len=2
pci_config_write: LSI53C895A SCSI HBA: addr=0d val=00000000 len=1

The only other output during boot involving the card is repeated 
occurrances of:

pci_config_read: i440FX: addr=0e val=00000000 len=1
pci_config_read: i440FX: addr=00 val=00008086 len=2
pci_config_read: PIIX3: addr=0e val=00000080 len=1
pci_config_read: PIIX3: addr=00 val=00008086 len=2
pci_config_read: PIIX3 IDE: addr=00 val=00008086 len=2
pci_config_read: PM: addr=00 val=00008086 len=2
pci_config_read: Cirrus VGA: addr=0e val=00000000 len=1
pci_config_read: Cirrus VGA: addr=00 val=00001013 len=2
pci_config_read: NE2000: addr=0e val=00000000 len=1
pci_config_read: NE2000: addr=00 val=000010ec len=2
pci_config_read: LSI53C895A SCSI HBA: addr=0e val=00000000 len=1
pci_config_read: LSI53C895A SCSI HBA: addr=00 val=00001000 len=2
pci_config_read: LSI53C895A SCSI HBA: addr=02 val=00000012 len=2

... which looks like PCI device enumeration, probably being done by each 
driver when it initializes and looks for hardware it supports.

There's also some LSI53C895A-related output before the bootloader comes 
up, though it's probably not very interesting given that it's not 
specific to the OS:

pci_config_read: LSI53C895A SCSI HBA: addr=00 val=00001000 len=2
pci_config_read: LSI53C895A SCSI HBA: addr=02 val=00000012 len=2
pci_config_read: LSI53C895A SCSI HBA: addr=0a val=00000100 len=2
pci_config_read: LSI53C895A SCSI HBA: addr=00 val=00001000 len=2
pci_config_read: LSI53C895A SCSI HBA: addr=02 val=00000012 len=2
pci_config_write: LSI53C895A SCSI HBA: addr=10 val=ffffffff len=4
pci_config_read: LSI53C895A SCSI HBA: addr=10 val=ffffff01 len=4
pci_config_read: LSI53C895A SCSI HBA: addr=10 val=ffffff01 len=4
pci_config_write: LSI53C895A SCSI HBA: addr=10 val=0000c200 len=4
pci_config_read: LSI53C895A SCSI HBA: addr=04 val=00000000 len=2
pci_config_write: LSI53C895A SCSI HBA: addr=04 val=00000001 len=2
lsi_scsi: Mapping IO at 0000c200
pci_config_write: LSI53C895A SCSI HBA: addr=14 val=ffffffff len=4
pci_config_read: LSI53C895A SCSI HBA: addr=14 val=fffffc00 len=4
pci_config_read: LSI53C895A SCSI HBA: addr=14 val=fffffc00 len=4
pci_config_write: LSI53C895A SCSI HBA: addr=14 val=f2001000 len=4
pci_config_read: LSI53C895A SCSI HBA: addr=04 val=00000001 len=2
pci_config_write: LSI53C895A SCSI HBA: addr=04 val=00000003 len=2
lsi_scsi: Mapping registers at f2001000
pci_config_write: LSI53C895A SCSI HBA: addr=18 val=ffffffff len=4
pci_config_read: LSI53C895A SCSI HBA: addr=18 val=ffffe000 len=4
pci_config_read: LSI53C895A SCSI HBA: addr=18 val=ffffe000 len=4
pci_config_write: LSI53C895A SCSI HBA: addr=18 val=f2002000 len=4
lsi_scsi: Mapping ram at f2002000
pci_config_read: LSI53C895A SCSI HBA: addr=04 val=00000003 len=2
pci_config_write: LSI53C895A SCSI HBA: addr=04 val=00000003 len=2
pci_config_write: LSI53C895A SCSI HBA: addr=1c val=ffffffff len=4
pci_config_read: LSI53C895A SCSI HBA: addr=1c val=00000000 len=4
pci_config_write: LSI53C895A SCSI HBA: addr=20 val=ffffffff len=4
pci_config_read: LSI53C895A SCSI HBA: addr=20 val=00000000 len=4
pci_config_write: LSI53C895A SCSI HBA: addr=24 val=ffffffff len=4
pci_config_read: LSI53C895A SCSI HBA: addr=24 val=00000000 len=4
pci_config_write: LSI53C895A SCSI HBA: addr=30 val=ffffffff len=4
pci_config_read: LSI53C895A SCSI HBA: addr=30 val=00000000 len=4
pci_config_read: LSI53C895A SCSI HBA: addr=3d val=00000001 len=1
pci_config_write: LSI53C895A SCSI HBA: addr=3c val=00000009 len=1

As for the IDE detection, here's the output with DEBUG_IDE enabled. I 
tried to boot off a floppy image for this test to eliminate noise from 
the IDE CD-ROM access, but qemu doesn't recognise the OpenServer 
installation disk as bootable.

For this test qemu was invoked as:

qemu -cdrom /archive/cdimages/SCO_5_0_5.iso \
  -hda /var/VMs/alder/alder.img \
  -boot d

The output is ... verbose. I've put it up here:

http://www.postnewspapers.com.au/~craig/qemu_ide_debug_20081029.txt

... in case it's of interest. I've included a trimmed version below that 
omits all the noise created by loading the kernel image from the CD-ROM, 
etc.

First there's a quick bit of access during PnP init (?):

ide: read addr=0x176 val=a0
ide: read addr=0x175 val=08
ide: write control addr=0x3f6 val=00
ide: read addr=0x1f7 val=50
IDE: write addr=0x1f7 val=0xf0
ide: CMD=f0
ide: read addr=0x1f7 val=41

then much more during what I think is disk probing:

IDE: write addr=0x1f6 val=0xaa
ide: read addr=0x1f6 val=aa
IDE: write addr=0x1f6 val=0xa5
ide: read addr=0x1f6 val=a5
ide: read status addr=0x3f6 val=41
ide: write control addr=0x3f6 val=0a
ide: write control addr=0x3f6 val=0e
ide: write control addr=0x3f6 val=0a
ide: read status addr=0x3f6 val=50
ide: read addr=0x1f7 val=50
ide: read addr=0x1f1 val=01
IDE: write addr=0x1f6 val=0xa0
ide: read addr=0x1f4 val=00
IDE: write addr=0x1f6 val=0xb0
ide: read addr=0x1f4 val=ff
ide: write control addr=0x3f6 val=08
IDE: write addr=0x176 val=0xaa
ide: read addr=0x176 val=aa
IDE: write addr=0x176 val=0xa5
ide: read addr=0x176 val=a5
ide: read status addr=0x376 val=40
ide: write control addr=0x376 val=0a
ide: write control addr=0x376 val=0e
ide: write control addr=0x376 val=0a
ide: read status addr=0x376 val=00
ide: read addr=0x177 val=00
ide: read addr=0x171 val=01
IDE: write addr=0x176 val=0xa0
ide: read addr=0x174 val=14
ide: read addr=0x175 val=eb
IDE: write addr=0x176 val=0xb0
ide: read addr=0x174 val=ff
ide: write control addr=0x376 val=0a
IDE: write addr=0x176 val=0xa0
IDE: write addr=0x177 val=0x08
ide: CMD=08
ide: read status addr=0x376 val=00
ide: read addr=0x177 val=00
ide: read addr=0x174 val=14
ide: read addr=0x175 val=eb
ide: write control addr=0x376 val=0a
IDE: write addr=0x176 val=0xb0
IDE: write addr=0x177 val=0x08
ide: CMD=08
ide: read status addr=0x376 val=00
ide: read addr=0x177 val=00
ide: read addr=0x174 val=ff
ide: read addr=0x171 val=01
ide: read addr=0x172 val=01
ide: read addr=0x173 val=01
ide: write control addr=0x376 val=08
IDE: write addr=0x1f3 val=0x01
IDE: write addr=0x1f4 val=0x00
IDE: write addr=0x1f5 val=0x00
IDE: write addr=0x1f6 val=0xa0
IDE: write addr=0x1f7 val=0x70
ide: CMD=70
ide: read status addr=0x3f6 val=41
ide: read addr=0x1f7 val=41
ide: read addr=0x1f1 val=04
IDE: write addr=0x1f3 val=0x01
IDE: write addr=0x1f4 val=0x00
IDE: write addr=0x1f5 val=0x00
IDE: write addr=0x1f6 val=0xb0
IDE: write addr=0x1f7 val=0x70
ide: CMD=70
ide: write control addr=0x3f6 val=04
ide: write control addr=0x3f6 val=00
ide: read status addr=0x3f6 val=00
ide: read addr=0x1f1 val=01


... after which it reports "no root disk found".


so ... ideas? Suggestions? Advice on where to go or how I might approach 
debugging this?



--
Craig Ringer

^ permalink raw reply	[flat|nested] 20+ messages in thread

end of thread, other threads:[~2008-11-17  0:44 UTC | newest]

Thread overview: 20+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-11-04 13:30 [Qemu-devel] LSI53C895A, IDE HDD detection under SCO OpenServer 5.0.5 Justin Chevrier
2008-11-06 12:51 ` Craig Ringer
2008-11-06 13:36   ` Justin Chevrier
2008-11-07  9:26     ` Craig Ringer
2008-11-07 11:46       ` Craig Ringer
2008-11-10 15:04       ` Justin Chevrier
  -- strict thread matches above, loose matches on Subject: below --
2008-11-14 20:50 Justin Chevrier
2008-11-14 22:13 ` Laurent Vivier
2008-11-17  0:44   ` Justin Chevrier
2008-11-04 12:58 Justin Chevrier
2008-11-05  3:02 ` Craig Ringer
2008-11-04  3:21 Justin Chevrier
2008-11-04  3:41 ` Craig Ringer
2008-11-04  7:57   ` Craig Ringer
2008-11-10  1:31 ` andrzej zaborowski
2008-11-10  6:19   ` Craig Ringer
2008-10-29 19:39 Justin Chevrier
2008-10-29 18:16 Justin Chevrier
2008-10-29  9:25 Craig Ringer
2008-10-29 15:38 ` Craig Ringer

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).