Hummingboard SATA

Warner Losh imp at
Wed Nov 18 22:50:13 UTC 2015

> On Nov 14, 2015, at 11:16 PM, Russell Haley <russ.haley at> wrote:
> Hi Warner,
> I am looking over the CAM code and it's relationship with ahci. There are also bits of information about CAM around: a chapter in the Kong book, a chapter in the developers handbook.
> The file ahci.c, line 660 - ahci_ch_attach() - this seems to be where the magic happens to attach the ahci driver to the CAM system.  Specifically line 754 "cam_sim_alloc()”.

Yes. That creates the SIM. SIM used to mean SCSI Interface Module in the original CAM spec. Any more, it just means any device that can chat with devices attached via the appropriate transport.

The SIM has a number of busess connected to it. Each bus is a transport. A transport (xpt in the code) shuffles protocol messages from the periph devices using the SIM to send / receive them over the XPT.

When the SIM is instantiated, CAM automatically resets the bus and enumerates it, with the help of the SIM. For SCSI-like things, this is where ID scans are done, LUN scans, etc. For ATA, this is where ports are scanned, port expanders recognized, etc.

So as part of this scan, it is discovered that a SATA device exists on a given port, and an ada device is created.

> What I am not seeing is the relationship to the ata_da.c code.  I noticed that my drive wasn't listed in the ata_da.c,  ada_quirk_table. I don't know anything about quirks but imagine that this is an optional item?

Yes. The Quirk table is for those devices that lie to the system in some way and that lie needs to be sorted out through work arounds in the code.

> I think I am done reviewing the code for now and will move back to ddb and figure out how to examine the kernel checking for devices (read: no idea what I am doing). If anyone has any pointers on how to hook into the probe or attach methods using the debugger, or even any good scripts, I'd be grateful.

I usually just set breakpoints for the specific device I’m interested in, though device_probe_and_attach is also good.


> Thanks,
> Russ
> On Wed, Nov 11, 2015 at 9:39 PM, Warner Losh <imp at> wrote:
> On Wed, Nov 11, 2015 at 10:22 PM, Russell Haley <russ.haley at> wrote:
> Hello again,
> I have started looking at SATA support in FreeBSD by first reading the man
> pages and then examining the code. The Joseph Kong book is helping
> considerably to understand the structures.
> I see that there are three drivers in play: ahci, ada and ata. Man
> indicates that ahci takes precedence in driver selection. *Is that the
> driver for Arm and the Hummingboard?*
> ata is out of the picture now. It never really was used on arm.
> ahci is likely the driver you want, though I'm not sure what a Hummingboard
> is. A quick google search suggests it is a imx6 board. That's good news
> because FreeBSD has an attachment.
> ahci is what's call a CAM SIM. This means that it will create the ata xpt (handled
> in sys/cam/ata/ata_xpt.c). The XPT then enumerates the transport and finds the
> sata drives, which wind up getting assigned the ada PERIPH driver (handled by
> sys/cam/ata/ata_da.c).
> Chances are very good you have a problem with the ahci driver and/or
> how that driver is connected / sets up the iMX6 SoC sata hardware.
> What I can't seem to find is any direction on getting a debugger hooked up
> to driver code. Do I use gdb somehow, or do I use the kernel debugger? I'm
> going back over the Developers handbook again.
> I'd start with ddb.
> I also don't understand how to boot with the -d option. When is this
> entered? I have used the sysctl to enter the debugger and poked around
> but it doesn't mean much yet.
> sysctl debug.kdb.enter=1
> I don't think that the -d option is implemented on arm. Most of the ARM
> kernel config files have ALT_BREAK_TO_DEBUGGER defined, which means
> you'll need to send <CR> ~ ^B (that's hit return, hit the tilde key, hit control B).
> That will get you to the ddb prompt (db>). man 8 ddb for instructions on
> how to use it.
> Warner

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 842 bytes
Desc: Message signed with OpenPGP using GPGMail
URL: <>

More information about the freebsd-arm mailing list