ahci & exynos5: enable HDDs like Seagate Barracuda

Initialize and limit port speed to 3 Gbps in general because the Seagate
Barracuda 1TB throws much errors with 6 Gbps by now.

Try all port speeds from the highest to the lowest as long as debouncing fails
and try them all again in this order when falling back to slower debouncing.

Try to recover from all types of interface error.

When a port was recovered from an error during a NCQ command
get the last LBA that was accessed successfully and continue command from
this point.

Use a platform driver through the 'Regulator' service to do CMU and PMU config.

Switch off verbosity by default.
This commit is contained in:
Martin Stein 2013-06-04 16:43:07 +02:00 committed by Stefan Kalkowski
parent 686c551b66
commit ada408d2f7
2 changed files with 462 additions and 483 deletions

File diff suppressed because it is too large Load Diff

View File

@ -23,13 +23,15 @@
*/
class Ahci_driver : public Block::Driver
{
enum { VERBOSE = 0 };
/* import Genode symbols */
typedef Genode::size_t size_t;
typedef Genode::uint64_t uint64_t;
typedef Genode::addr_t addr_t;
typedef Genode::Ram_dataspace_capability Ram_dataspace_capability;
int _ncq_command(size_t const block_nr, size_t const block_cnt,
addr_t const phys, bool const w);
int _ncq_command(uint64_t lba, unsigned cnt, addr_t phys, bool w);
public: