1. 02 Jun, 2021 1 commit
    • Jeffrey Lee's avatar
      Support 64bit physical addresses · 7ee06481
      Jeffrey Lee authored
      If the SATA controller supports 64bit addresses, and the OS reports that
      there's RAM above the 4GB physical barrier, use the 64bit phys addr
      version of OS_Memory 19 for DMA preparation / log->phys conversion.
      Version 0.11. Tagged as 'SATADriver-0_11'
  2. 02 Dec, 2018 1 commit
    • Jeffrey Lee's avatar
      Fix coroutines being given less stack space than intended · e99dc06f
      Jeffrey Lee authored
        s/coroutine - Fix coroutines being given less stack space than intended; appeared to be causing a stack overflow when some debug code was enabled
        s/coroutine, h/coroutine - Add comments to remind people to keep the two definitions of the stack size in sync, to avoid more mistakes in future
        Tested on Titanium
      Version 0.10. Tagged as 'SATADriver-0_10'
  3. 07 Jul, 2018 1 commit
    • Jeffrey Lee's avatar
      Switch to using OS_Memory 19 by default · cfe02b0d
      Jeffrey Lee authored
        Makefile - Now that OS_Memory 19 has been merged to the trunk version of the kernel (along with the other SMP changes, which might cause problems if OS_Memory 0 was to continued to be used), we can change our build setting to use OS_Memory 19 by default
        Requires Kernel-6_09
      Version 0.09. Tagged as 'SATADriver-0_09'
  4. 12 Jun, 2018 1 commit
    • Robert Sprowson's avatar
      Listen for PreReset service and do a soft reset · 58c2daa8
      Robert Sprowson authored
      Simulate the effects of a hard reset by globally resetting the controller. This fixes a problem with some brands of drive when the ROM is softloaded and the drives don't get long enough to retrain before SATADriver starts a 2nd time.
      Version 0.08. Tagged as 'SATADriver-0_08'
  5. 12 Apr, 2018 1 commit
  6. 17 Jan, 2018 1 commit
  7. 22 Aug, 2017 1 commit
    • Jeffrey Lee's avatar
      Add support for using OS_Memory 19 for DMA prep · ebbdfd26
      Jeffrey Lee authored
        Makefile - Add OSMEM19 option to control whether OS_Memory 0 or OS_Memory 19 is used. Defaults to OS_Memory 0, since OS_Memory 19 is currently only available on the SMP kernel branch.
        c/op, c/osmem0, h/dmaprep - Move OS_Memory 0 related code out into its own file, creating the dmaprep interface to abstract over whether OS_Memory 0 or OS_Memory 19 is in use
        c/osmem19, cmhg/SATADriverHdr - Code for performing DMA prep using OS_Memory 19
        h/globals - Adjust what variables ahciop_t stores, depending on DMA prep approach being used
        Tested on IGEPv5
        OS_Memory 19 version (for use with SMP kernel/module) can be enabled via components file, e.g. '-options OSMEM19=TRUE'
      Version 0.07. Tagged as 'SATADriver-0_07'
  8. 17 Jun, 2017 1 commit
    • Robert Sprowson's avatar
      Don't punish controllers that report DET_DEV_NE · eaf81c83
      Robert Sprowson authored
      For those controllers relying on the retry loop to get the top level port to detect, the change in SATADriver 0.05 made the retries take 25s.
      Roll back the COMRESET_RECOVERY_TIME to 50cs like it was in revision of op.c.
      Then, pull out the subsequent PM rescan code into a function, and wrap it in a retry loop so the net result is the same as SATADriver 0.05 achieved. However, it is possible to escape the loop early with this arrangement, rather than just idling.
      Version 0.06. Tagged as 'SATADriver-0_06'
  9. 16 Jun, 2017 1 commit
    • Robert Sprowson's avatar
      Adapt the capacity calculation based on reported sector size · efedfdce
      Robert Sprowson authored
      Read the sector size from ATA Identify, so that the capacity reported is right when the sector size != 512B.
      Increase the COMRESET recovery time a bit more to account for long spin up mechanical drives - the timeout's only used if a drive is present, so is harmless on fast (eg. SSD) drives which recover well before the timeout.
      Tested on Titanium with an assortment of manufacturer drives, capacities, and sector sizes.
      Version 0.05. Tagged as 'SATADriver-0_05'
  10. 09 Dec, 2016 1 commit
    • Robert Sprowson's avatar
      Give a little extra grace to mechanical drives · 404dada8
      Robert Sprowson authored
      Some mechanical drives don't reply until spin up after COMRESET. Give them 50% longer to complete.
      Solves a missing Seagate ST250DM000 drive issue at power on as init was too fast.
      Version 0.04. Tagged as 'SATADriver-0_04'
  11. 24 Mar, 2016 1 commit
    • Ben Avison's avatar
      Better tracking of task file registers in presence of port multiplier · 17457e86
      Ben Avison authored
        The task file registers are really a per-drive concept, but unless you're
        using FIS-based switching (which we don't) then AHCI doesn't really keep
        track of which device downstream of a port multiplier was associated with
        its shadow copy of the task file registers. We now keep our own soft copies
        of the task file registers; whilst this won't really work reliably once
        background transfers are implemeted and multiple commands can be queued at
        once, for the time being it means we won't get task file registers
        associated with the wrong drive (which is what was behind disc error 08
        as occasionally reported on Titanium when multiple drives were fitted).
        Tested on Titanium.
      Version 0.03. Tagged as 'SATADriver-0_03'
  12. 13 Mar, 2016 2 commits
    • Ben Avison's avatar
      LBA28 support and workaround for OMAP5432 errata · ad2d39e3
      Ben Avison authored
        LBA28 is relatively straightforward to support as a subset of LBA48, and
        is still useful for some small capacity Micro SATA SSDs in particular.
        Errata i859 says that link negotiation can fail for SATA III (6 Gb/s)
        devices; there is no 100% reliable software workaround, but we can at least
        do some retries to reduce the frequency of failure.
        Tested on IGEPv5.
      Version 0.02. Tagged as 'SATADriver-0_02'
    • Ben Avison's avatar
      Initial import of SATADriver module · acebed7a
      Ben Avison authored
        This is the SATA implementation of a new generic ATA driver API, analogous
        to the SCSIDriver and SDIODriver APIs, but for ATA buses. Full support for
        port multipliers is included; effectively they appear transparent to the
        upper layers of the stack. No effort is to made to support enclosures,
        external SATA or hot-plugging (but note that hot-plugging is precluded by
        hardware on OMAP5432x and AM572x). Background transfers are only partially
        implemented at present. DMA is used, as mandated by the AHCI specification.
        The module is written mostly in C for maintainability and extendability, and
        uses locks for compatibility with a future multi-core version of the OS.
        This version is what appeared in initial Titanium ROM releases.
      Tagged as 'SATADriver-0_01'