2. In $top/m5-test, run "./do-tests.pl -B ALPHA_SE".
The tests should end with "finished do-tests successfully!"
-Note: if you're running under Cygwin several tests will fail with an
-"EIO icount mismatch". This is due to the lack of fesetround() under
-Cygwin causing differences in floating-point rounding.
+Note: if you're running under Cygwin, several tests will fail with an
+"EIO trace inconsistency: ICNT mismatch" error. This is due to the
+lack of fesetround() under Cygwin causing differences in floating-point
+rounding. Other than that discrepancy your simulator is working perfectly.
To build and test the full-system simualator:
default_env.Append(CCFLAGS='-pipe')
default_env.Append(CCFLAGS='-fno-strict-aliasing')
default_env.Append(CCFLAGS=Split('-Wall -Wno-sign-compare -Werror -Wundef'))
+if sys.platform == 'cygwin':
+ # cygwin has some header file issues...
+ default_env.Append(CCFLAGS=Split("-Wno-uninitialized"))
default_env.Append(CPPPATH=[os.path.join(EXT_SRCDIR + '/dnet')])
# libelf build is described in its own SConscript file. Using a
// select the current disk based on DEV bit
disk = getDisk(channel);
- oldVal = letoh(bmi_regs.chan[channel].bmic);
- newVal = letoh(*data);
+ oldVal = bmi_regs.chan[channel].bmic;
+ newVal = *data;
// if a DMA transfer is in progress, R/W control cannot change
if (oldVal & SSBM) {
DPRINTF(IdeCtrl, "Stopping DMA transfer\n");
// clear the BMIDEA bit
- bmi_regs.chan[channel].bmis = letoh(
- letoh(bmi_regs.chan[channel].bmis) & ~BMIDEA);
+ bmi_regs.chan[channel].bmis =
+ bmi_regs.chan[channel].bmis & ~BMIDEA;
if (disks[disk] == NULL)
panic("DMA stop for disk %d which does not exist\n",
DPRINTF(IdeCtrl, "Starting DMA transfer\n");
// set the BMIDEA bit
- bmi_regs.chan[channel].bmis = letoh(
- letoh(bmi_regs.chan[channel].bmis) | BMIDEA);
+ bmi_regs.chan[channel].bmis =
+ bmi_regs.chan[channel].bmis | BMIDEA;
if (disks[disk] == NULL)
panic("DMA start for disk %d which does not exist\n",
}
// update the register value
- bmi_regs.chan[channel].bmic = letoh(newVal);
+ bmi_regs.chan[channel].bmic = newVal;
break;
// Bus master IDE status register
if (req->size != sizeof(uint8_t))
panic("Invalid BMIS write size: %x\n", req->size);
- oldVal = letoh(bmi_regs.chan[channel].bmis);
- newVal = letoh(*data);
+ oldVal = bmi_regs.chan[channel].bmis;
+ newVal = *data;
// the BMIDEA bit is RO
newVal |= (oldVal & BMIDEA);
else
(oldVal & IDEDMAE) ? newVal |= IDEDMAE : newVal &= ~IDEDMAE;
- bmi_regs.chan[channel].bmis = letoh(newVal);
+ bmi_regs.chan[channel].bmis = newVal;
break;
// Bus master IDE descriptor table pointer register
case BMIDTP0:
case BMIDTP1:
- if (req->size != sizeof(uint32_t))
- panic("Invalid BMIDTP write size: %x\n", req->size);
+ {
+ if (req->size != sizeof(uint32_t))
+ panic("Invalid BMIDTP write size: %x\n", req->size);
- bmi_regs.chan[channel].bmidtp = letoh(
- letoh(*(uint32_t*)data) & ~0x3);
+ uint32_t host_data = letoh(*(uint32_t*)data);
+ host_data &= ~0x3;
+ bmi_regs.chan[channel].bmidtp = htole(host_data);
+ }
break;
default: