[BUG] ata: disk_ata_drive: SSD drive doesn't pass check for ata id validity

Peter Mamonov pmamonov at gmail.com
Fri Oct 30 03:06:09 PDT 2015


On Fri, 30 Oct 2015 09:53:50 +0100
Juergen Borleis <jbe at pengutronix.de> wrote:

> On Friday 30 October 2015 08:31:04 Sascha Hauer wrote:
> > On Thu, Oct 29, 2015 at 04:04:09PM +0300, Peter Mamonov wrote:
> > > Hi!
> > >
> > > Barebox refuses to deal with OCZ-VERTEX4 ssd sata drive, because:
> > > 	ata1: ata id invalid
> > >
> > > This error is triggered by the following piece of code :
> > >
> > > static int ata_id_is_valid(const uint16_t *id)
> > > {
> > > 	if ((id[ATA_ID_FIELD_VALID] & 1) == 0) {
> > > 		pr_debug("Drive's ID seems invalid\n");
> > > 		return -EINVAL;
> > > 	}
> > >
> > > 	return 0;
> > > }
> > >
> > > The "id" is a sector-sized block of bytes, received after
> > > issuing ATA_CMD_ID_ATA command.
> > >
> > > If I remove this check, the drive works fine.
> > >
> > > Can someone with better knowledge of ATA standard comment on this
> > > issue?
> >
> > Juergen, do you have an idea what this check is for? Neither U-Boot
> > nor the Kernel seem to ever check for bit 0 in this field.
> 
> Seems this bit was meaningful in earlier days: it marked the ID
> member in the structure returned by the disk as valid (=1) or invalid
> (=0). In the meantime it seems obsolete. The last occurrence I found
> is in the Linux kernel in file "drivers/block/mg_disk.c". All other
> code which checks this register content just check bits 1 and 2. I
> vote for removing this piece of code.

Thanks for clarification.

> 
> jbe
> 




More information about the barebox mailing list