mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-24 21:54:34 -04:00
Merge branch 'reset-seq' of master.kernel.org:/pub/scm/linux/kernel/git/jgarzik/libata-dev
* 'reset-seq' of master.kernel.org:/pub/scm/linux/kernel/git/jgarzik/libata-dev: [libata reset-seq] build and merge fixes libata: reimplement reset sequencing libata: improve ata_std_prereset() libata: improve 0xff status handling libata: add deadline support to prereset and reset methods
This commit is contained in:
commit
4750def52c
32 changed files with 321 additions and 212 deletions
|
|
@ -296,18 +296,8 @@ enum {
|
|||
|
||||
/* how hard are we gonna try to probe/recover devices */
|
||||
ATA_PROBE_MAX_TRIES = 3,
|
||||
ATA_EH_RESET_TRIES = 3,
|
||||
ATA_EH_DEV_TRIES = 3,
|
||||
|
||||
/* Drive spinup time (time from power-on to the first D2H FIS)
|
||||
* in msecs - 8s currently. Failing to get ready in this time
|
||||
* isn't critical. It will result in reset failure for
|
||||
* controllers which can't wait for the first D2H FIS. libata
|
||||
* will retry, so it just has to be long enough to spin up
|
||||
* most devices.
|
||||
*/
|
||||
ATA_SPINUP_WAIT = 8000,
|
||||
|
||||
/* Horkage types. May be set by libata or controller on drives
|
||||
(some horkage may be drive/controller pair dependant */
|
||||
|
||||
|
|
@ -348,8 +338,9 @@ struct ata_queued_cmd;
|
|||
|
||||
/* typedefs */
|
||||
typedef void (*ata_qc_cb_t) (struct ata_queued_cmd *qc);
|
||||
typedef int (*ata_prereset_fn_t)(struct ata_port *ap);
|
||||
typedef int (*ata_reset_fn_t)(struct ata_port *ap, unsigned int *classes);
|
||||
typedef int (*ata_prereset_fn_t)(struct ata_port *ap, unsigned long deadline);
|
||||
typedef int (*ata_reset_fn_t)(struct ata_port *ap, unsigned int *classes,
|
||||
unsigned long deadline);
|
||||
typedef void (*ata_postreset_fn_t)(struct ata_port *ap, unsigned int *classes);
|
||||
|
||||
struct ata_ioports {
|
||||
|
|
@ -494,7 +485,6 @@ struct ata_eh_info {
|
|||
unsigned int dev_action[ATA_MAX_DEVICES]; /* dev EH action */
|
||||
unsigned int flags; /* ATA_EHI_* flags */
|
||||
|
||||
unsigned long hotplug_timestamp;
|
||||
unsigned int probe_mask;
|
||||
|
||||
char desc[ATA_EH_DESC_LEN];
|
||||
|
|
@ -688,13 +678,17 @@ extern void __sata_phy_reset(struct ata_port *ap);
|
|||
extern void sata_phy_reset(struct ata_port *ap);
|
||||
extern void ata_bus_reset(struct ata_port *ap);
|
||||
extern int sata_set_spd(struct ata_port *ap);
|
||||
extern int sata_phy_debounce(struct ata_port *ap, const unsigned long *param);
|
||||
extern int sata_phy_resume(struct ata_port *ap, const unsigned long *param);
|
||||
extern int ata_std_prereset(struct ata_port *ap);
|
||||
extern int ata_std_softreset(struct ata_port *ap, unsigned int *classes);
|
||||
extern int sata_port_hardreset(struct ata_port *ap,
|
||||
const unsigned long *timing);
|
||||
extern int sata_std_hardreset(struct ata_port *ap, unsigned int *class);
|
||||
extern int sata_phy_debounce(struct ata_port *ap, const unsigned long *param,
|
||||
unsigned long deadline);
|
||||
extern int sata_phy_resume(struct ata_port *ap, const unsigned long *param,
|
||||
unsigned long deadline);
|
||||
extern int ata_std_prereset(struct ata_port *ap, unsigned long deadline);
|
||||
extern int ata_std_softreset(struct ata_port *ap, unsigned int *classes,
|
||||
unsigned long deadline);
|
||||
extern int sata_port_hardreset(struct ata_port *ap, const unsigned long *timing,
|
||||
unsigned long deadline);
|
||||
extern int sata_std_hardreset(struct ata_port *ap, unsigned int *class,
|
||||
unsigned long deadline);
|
||||
extern void ata_std_postreset(struct ata_port *ap, unsigned int *classes);
|
||||
extern void ata_port_disable(struct ata_port *);
|
||||
extern void ata_std_ports(struct ata_ioports *ioaddr);
|
||||
|
|
@ -750,6 +744,7 @@ extern void ata_host_resume(struct ata_host *host);
|
|||
extern int ata_ratelimit(void);
|
||||
extern int ata_busy_sleep(struct ata_port *ap,
|
||||
unsigned long timeout_pat, unsigned long timeout);
|
||||
extern int ata_wait_ready(struct ata_port *ap, unsigned long deadline);
|
||||
extern void ata_port_queue_task(struct ata_port *ap, work_func_t fn,
|
||||
void *data, unsigned long delay);
|
||||
extern u32 ata_wait_register(void __iomem *reg, u32 mask, u32 val,
|
||||
|
|
@ -919,12 +914,7 @@ extern void ata_do_eh(struct ata_port *ap, ata_prereset_fn_t prereset,
|
|||
|
||||
static inline void __ata_ehi_hotplugged(struct ata_eh_info *ehi)
|
||||
{
|
||||
if (ehi->flags & ATA_EHI_HOTPLUGGED)
|
||||
return;
|
||||
|
||||
ehi->flags |= ATA_EHI_HOTPLUGGED | ATA_EHI_RESUME_LINK;
|
||||
ehi->hotplug_timestamp = jiffies;
|
||||
|
||||
ehi->action |= ATA_EH_SOFTRESET;
|
||||
ehi->probe_mask |= (1 << ATA_MAX_DEVICES) - 1;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue