Tuesday June 14, 2005 ATA on Solaris x86, at 10k feet
I'm part of a team of software engineers responsible for the ATA and SATA disk and optical drivers on x86. We are responsible for maintaining the current ata driver suite, which is mostly in sustaining mode, and for creating a new architecture of SATA drivers so that Solaris can utilize many more controllers and features that SATA offers.
You might be wondering about SPARC. Unfortunately, poor design choices were made nearly a decade ago that forked the ata drivers from the x86 source. This is a product of the times when Sun operated in independent planet divisions. Because of this, if you browse the source you'll see many similar parts. A separate platform team still maintains the SPARC driver.
Many have expressed interest over the years to see these drivers merged back. It's somewhat unlikely at this point since both drivers are mostly in sustaining mode, and given that the new SATA architecture will eventually obsolete the present ATA drivers.
The existing x86 ATA driver does have support for many popular and common SATA controllers. If the controller has the capability to operate in legacy mode (ie emulate parallel ATA), it will likely work. Controllers that work are the ones commonly found on the major chipsets, such as ICH5, ICH6 and Nforce4, as well as Sil3112, Sil3114, Sil3512. Check out the latest hardware compatibility list for any others reported to work. Also feel free to update the list with any controllers you have found to work which are not already listed.
To expand our support for SATA controllers which do not work in legacy mode, and to utilize new SATA features such as NCQ and hotplugging,our team is creating a completely new SATA driver model that centralizes most of the generic support for SATA into a loadable module, and then uses the existing SCSI target disk driver 'sd' as the target driver. This allows the HBA driver to be relatively lean, so that its focus is on operations needed to directly program and operate the controller. The new SATA architecture will initially be delivered for x86 drivers, but it is written generically and can be built on SPARC.
If you want to browse the source, have a look at the following modules and their corresponding source files. I've given a brief description of what each does.
gda usr/src/uts/common/io/dktp/dcdev/ghd.c
Insignificant; it should have just been part of dadk. dadk uses _depends_on[] to load this module.
objmgr usr/src/uts/common/io/dktp/drvobj/objmgr.c
A facility to load other module objects and set up function pointers. This file is going away soon.
snlb usr/src/uts/common/io/dktp/disk/snlb.c
Sun Lebeling, vtoc, fdisk.
strategy usr/src/uts/common/io/dktp/drvobj/strategy.c
Queuing. Way over-architected. Read at your own risk.
pci-ide /usr/src/uts/common/io/pci-ide/pci-ide.c
Splits a single physical controller into two ata devinfo nodes,one for each channel. See the prtconf output listed below.
ata usr/src/uts/common/io/dktp/controller/ata
The ata controller driver doing the bulk of the interesting work many source files in directory.
dadk usr/src/uts/common/io/dktp/dcdev/dadk.c
interfaces between cmdk and ata. Similar to scsi.
scsi usr/src/uts/common/io/scsi/impl
Provides interfaces between sd and ata. Similar to dadk.
cmdk usr/src/common/io/dktp/disk/cmdk.c
Target driver for ata disks, very slim. This module uses _depends_on[] to load objmgr, snlb, dadk and strategy
sd usr/src/common/io/scsi/targets/sd.c
SCSI target driver used for ATAPI devices
-bash-3.00$ prtconf -D | egrep "sd|cmdk|ide"
pci-ide, instance #0 (driver name: pci-ide)
ide (driver name: ata)
ide (driver name: ata)
pci-ide, instance #1 (driver name: pci-ide)
ide, instance #2 (driver name: ata)
cmdk, instance #0 (driver name: cmdk)
ide (driver name: ata)
The above prtconf listing shows two ATA controllers on the system, which appear as the 'pci-ide' nodes above. Each controller has two channels, both of which are represented by the 'ide' node, which are driven by the driver 'ata'. One of the channels has a disk, with 'cmdk' bound to it.
Feel free to drop me a note if you have any questions or suggestions.
Posted by Arpad Mendei on June 30, 2005 at 06:21 AM CDT #
Hi, your plan toward SATA features like NCQ and hotplugging sounds really good. I am refered to this page when googling about Solaris and SATA NCQ.
By the way, do you have an approximate time frame for Solaris seeing the new SATA driver bits? And, I wonder if the Ultra 20 supports NCQ when the driver is done.
Thanks a lot!
Posted by Ivan Wang on October 22, 2005 at 02:35 AM CDT #
Posted by alparslan on January 22, 2006 at 03:02 PM CST #
Posted by Sergey Bogomolov on February 22, 2006 at 04:04 AM CST #
Posted by Chris Petrilli on March 29, 2006 at 09:14 PM CST #
Posted by Vidioten on June 04, 2006 at 01:12 AM CDT #
Posted by Sergey Bogomolov on June 05, 2006 at 09:39 AM CDT #
Posted by Özkan on February 01, 2007 at 12:06 PM CST #
Posted by Blake Irvin on June 01, 2007 at 06:19 PM CDT #
This CR is based on a sample of one board and one CF, because we've only been able to install onto one board/CF at this point, but I'm going to file it anyway just to document it in case it's a real repeatable problem. Also, I haven't been able to try a 16GB CF yet (don't have one).
Sep 24 15:10:00 nsn95-187 gda: WARNING: /pci@0,0/pci-ide@4/ide@0/cmdk@0,0 (Disk0) :
Sep 24 15:10:00 nsn95-187 Error for command 'read sector' Error Level: Fata l
Sep 24 15:10:00 nsn95-187 gda: Requested Block 6237344, Error Block: 6237424
Sep 24 15:10:00 nsn95-187 gda: Sense Key: uncorrectable data error
Sep 24 15:10:00 nsn95-187 gda: Vendor 'Gen-ATA ' error code: 0x7
Sep 24 15:10:00 nsn95-187 gda: WARNING: /pci@0,0/pci-ide@4/ide@0/cmdk@0,0 (Disk0) :
Sep 24 15:10:00 nsn95-187 exceeds maximum number of retries
Sep 24 15:10:01 nsn95-187 svc.startd[7]: application/font/fc-cache:default failed : transitioned to maintenance (see 'svcs -xv' for details)
Sep 24 15:10:20 nsn95-187 svc.startd[7]: system/webconsole:console failed fatally : transitioned to maintenance (see 'svcs -xv' for details)
Posted by Daniel Fields on September 25, 2007 at 08:20 PM CDT #
Can Solaris handle being booted from and IDE compact flash device? I technically should work but is it practical?
Sep 24 15:10:00 nsn95-187 gda: WARNING: /pci@0,0/pci-ide@4/ide@0/cmdk@0,0 (Disk0) :
Sep 24 15:10:00 nsn95-187 Error for command 'read sector' Error Level: Fata l
Sep 24 15:10:00 nsn95-187 gda: Requested Block 6237344, Error Block: 6237424
Sep 24 15:10:00 nsn95-187 gda: Sense Key: uncorrectable data error
Sep 24 15:10:00 nsn95-187 gda: Vendor 'Gen-ATA ' error code: 0x7
Sep 24 15:10:00 nsn95-187 gda: WARNING: /pci@0,0/pci-ide@4/ide@0/cmdk@0,0 (Disk0) :
Sep 24 15:10:00 nsn95-187 exceeds maximum number of retries
Sep 24 15:10:01 nsn95-187 svc.startd[7]: application/font/fc-cache:default failed : transitioned to maintenance (see 'svcs -xv' for details)
Sep 24 15:10:20 nsn95-187 svc.startd[7]: system/webconsole:console failed fatally : transitioned to maintenance (see 'svcs -xv' for details)
Posted by Daniel Fields on September 25, 2007 at 08:21 PM CDT #
erer
Posted by 213.24.84.75 on June 06, 2008 at 08:50 AM CDT #
Is there a Solaris 10 x86 driver available for an Intel ICH8R/ICH9R SATA RAID Controller, allowing it to operate as a SATA controller. The Solaris 10 x86 InstallCheck 1.4 refers to the device as a "82801 SATA RAID Controller", and indicates that no drivers are available.
Posted by Jeffery Lakela on June 29, 2008 at 03:58 PM CDT #
Hi Jeffery,
So far Solaris 10 has no such driver to support the RAID mode of Intel ICH8R/9R SATA RAID HBA. If luckily there is choice to set IDE/AHCI mode from BIOS, you can choose these two modes. Solaris will be using pci-ide/ata driver for IDE mode, and ahci driver for AHCI mode.
Thanks.
Posted by Ying Tian on July 03, 2008 at 05:30 AM CDT #