#17 Support for JMicron USB to (S)ATA bridges

Jan Friesse

Attached is patch for JMicron USB to (S)ATA bridges. Some parts of code (like magic numbers) are taken from smartmontools (I hope it will be not problem, because smartmontools are GPL, and hdparm seems to be BSD or GPL licence, but as you can see, code is mine and licensed same as hdparm).

In my testing, at least -v, -M, -B and -I options are supported. This is enough for me, because (and this is reason why I wrote this patch) -B removes problem with very high increasing load_cycle_count on WD Scorpio.

Patch is developed on top of hdparm-9.15. Whole work is designed to allow future simple additions of different ATP (ATA Pass Through) devices.


  • Jan Friesse
    Jan Friesse

    Support for JMicron USB to (S)ATA bridges try 1

  • Mark Lord
    Mark Lord

    I have no idea what this patch is trying to do. Standard hdparm *already* implements "SAT" (SCSI ATA Translation) commands for ATA passthrough, and it already works with several USB bridges. So if something weird / non-standard is needed for JMicron, I'd much rather see a smaller patch that addresses the differences. Rather than a complete new implementation.



  • Jan Friesse
    Jan Friesse

    problem with JMicorn is, that ATA PT has most cdb items on different positions (like lbal, where SG_ATA_16 has it on position 8, and JMicron expect on position 7).

    Second problem is, that JMicron doesn't support SG_CDB2_CHECK_COND.

    Last problem is, that JMicron returns very strange status (io_hdr.status, ...) and only one reliable solution seems to be send "special" cdb command (apt_jmicron_int_get_registers), where one of register is error.

    Because of this, I choose to little larger implementation, which detects:
    - If device is really JMicron (so we didn't break some standard device by meaningless commands)
    - if it really is, use nonstandard cdb and status handling

    Second option (and this can make patch smaller) is to add option to hdparm, which will force to use JMicrons cdb and status handling, but this is not transparent for user and I think, mess sgio.c more than original patch.


  • Mark Lord
    Mark Lord

    Cool. Okay, if we can keep this small, then I'll add it, probably for hdparm-9.18.
    Email me directly please, so I don't forget. I do not read the stuff here very often. :)


  • After searching a long time on the internet, I've finally found the solution to being able to read extra information from my external HDD, and importantly to spin it down at will!!
    This patch works, and should be included in the next release of hdparm.

  • This patch is needed, JMicron doesn't support SAT nor something similar.

  • Great patch!

    I applied it to 9.35, resolved a few minor conflicts and one kernel compatibility problem (see below) and it worked flawlessly. I used it to perform the "security erase" on some failing hard drives pulled out of a disk array before RMA. The patch made it possible to connect the drives via a standalone USB-ATA adapter.

    As far as I can tell, the vast majority of such adapters is built upon JMicron chips (esp. JM20337).

    Regarding the aformentioned kernel incompatibility: the original patch does not work with RHEL 5 kernel (based upon 2.6.18) due to a small difference in sysfs layout. I had to change the following part of sysfs_find_attr_file_path() in sysfs.c.
    stat("/sys/devices", &st);
    stop_inode = st.st_ino;
    strcpy(path, start_path);
    stat("/sys", &st);
    stop_inode = st.st_ino;
    strcpy(path, start_path);
    strcat(path, "/device");
    to make it work. I believe the new code is compatible with both old and new kernel versions. (I'd like to attach the updated patch but I do not know how to do that.)

  • @p-eak Could you upload your patch elsewhere and link it here, please?

  • Comment has been marked as spam. 

    You can see all pending comments posted by this user  here


    I successfully applied this patch to 9.32 with very minor modifications, and added my device:

    {0x152d, 0x0551, 0x0100, apt_ds_jmicron,

    I would really like to see this get merged in; it's been languishing here for a couple of years and it appears that this chipset is becoming popular. If you think the patch is not suitable as it is, I might have time to work on rewriting it in a different way.

  • Jan Friesse
    Jan Friesse

    • status: open --> closed-fixed
  • Jan Friesse
    Jan Friesse

    Closing this request. I'm no longer interested in pushing this patch because:
    - It's there for 3 years and maintainer is not willing to accept it
    - it's probably not working any longer
    - and MOST important, smartctl from smartmontools-5.43 now have option --get and --set, to set apm, aam, standby, ..., and this is everything I need. Also smartctl has wide support for bridges (not only JMicron, but also sunplus (Verbatim), ...) nice HUGE database of devices, ...

    So setting to Fixed, because it's fixed (even by different SW :( ).