Merge branch 'upstream-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jgarzik/libata-dev
* 'upstream-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jgarzik/libata-dev: libata: ahci enclosure management bit mask libata: ahci enclosure management led sync pata_ninja32: suspend/resume support libata: Fix LBA48 on pata_it821x RAID volumes. libata: clear saved xfer_mode and ncq_enabled on device detach sata_sil24: configure max read request size to 4k libata: add missing kernel-doc libata: fix device iteration bugs ahci: Add support for Promise PDC42819 ata: Switch all my stuff to a common address
This commit is contained in:
commit
3c136f29ba
|
@ -49,6 +49,17 @@
|
|||
#define DRV_NAME "ahci"
|
||||
#define DRV_VERSION "3.0"
|
||||
|
||||
/* Enclosure Management Control */
|
||||
#define EM_CTRL_MSG_TYPE 0x000f0000
|
||||
|
||||
/* Enclosure Management LED Message Type */
|
||||
#define EM_MSG_LED_HBA_PORT 0x0000000f
|
||||
#define EM_MSG_LED_PMP_SLOT 0x0000ff00
|
||||
#define EM_MSG_LED_VALUE 0xffff0000
|
||||
#define EM_MSG_LED_VALUE_ACTIVITY 0x00070000
|
||||
#define EM_MSG_LED_VALUE_OFF 0xfff80000
|
||||
#define EM_MSG_LED_VALUE_ON 0x00010000
|
||||
|
||||
static int ahci_skip_host_reset;
|
||||
module_param_named(skip_host_reset, ahci_skip_host_reset, int, 0444);
|
||||
MODULE_PARM_DESC(skip_host_reset, "skip global host reset (0=don't skip, 1=skip)");
|
||||
|
@ -588,6 +599,9 @@ static const struct pci_device_id ahci_pci_tbl[] = {
|
|||
{ PCI_VDEVICE(MARVELL, 0x6145), board_ahci_mv }, /* 6145 */
|
||||
{ PCI_VDEVICE(MARVELL, 0x6121), board_ahci_mv }, /* 6121 */
|
||||
|
||||
/* Promise */
|
||||
{ PCI_VDEVICE(PROMISE, 0x3f20), board_ahci }, /* PDC42819 */
|
||||
|
||||
/* Generic, PCI class code for AHCI */
|
||||
{ PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID,
|
||||
PCI_CLASS_STORAGE_SATA_AHCI, 0xffffff, board_ahci },
|
||||
|
@ -1220,18 +1234,20 @@ static void ahci_sw_activity_blink(unsigned long arg)
|
|||
struct ahci_em_priv *emp = &pp->em_priv[link->pmp];
|
||||
unsigned long led_message = emp->led_state;
|
||||
u32 activity_led_state;
|
||||
unsigned long flags;
|
||||
|
||||
led_message &= 0xffff0000;
|
||||
led_message &= EM_MSG_LED_VALUE;
|
||||
led_message |= ap->port_no | (link->pmp << 8);
|
||||
|
||||
/* check to see if we've had activity. If so,
|
||||
* toggle state of LED and reset timer. If not,
|
||||
* turn LED to desired idle state.
|
||||
*/
|
||||
spin_lock_irqsave(ap->lock, flags);
|
||||
if (emp->saved_activity != emp->activity) {
|
||||
emp->saved_activity = emp->activity;
|
||||
/* get the current LED state */
|
||||
activity_led_state = led_message & 0x00010000;
|
||||
activity_led_state = led_message & EM_MSG_LED_VALUE_ON;
|
||||
|
||||
if (activity_led_state)
|
||||
activity_led_state = 0;
|
||||
|
@ -1239,17 +1255,18 @@ static void ahci_sw_activity_blink(unsigned long arg)
|
|||
activity_led_state = 1;
|
||||
|
||||
/* clear old state */
|
||||
led_message &= 0xfff8ffff;
|
||||
led_message &= ~EM_MSG_LED_VALUE_ACTIVITY;
|
||||
|
||||
/* toggle state */
|
||||
led_message |= (activity_led_state << 16);
|
||||
mod_timer(&emp->timer, jiffies + msecs_to_jiffies(100));
|
||||
} else {
|
||||
/* switch to idle */
|
||||
led_message &= 0xfff8ffff;
|
||||
led_message &= ~EM_MSG_LED_VALUE_ACTIVITY;
|
||||
if (emp->blink_policy == BLINK_OFF)
|
||||
led_message |= (1 << 16);
|
||||
}
|
||||
spin_unlock_irqrestore(ap->lock, flags);
|
||||
ahci_transmit_led_message(ap, led_message, 4);
|
||||
}
|
||||
|
||||
|
@ -1294,7 +1311,7 @@ static ssize_t ahci_transmit_led_message(struct ata_port *ap, u32 state,
|
|||
struct ahci_em_priv *emp;
|
||||
|
||||
/* get the slot number from the message */
|
||||
pmp = (state & 0x0000ff00) >> 8;
|
||||
pmp = (state & EM_MSG_LED_PMP_SLOT) >> 8;
|
||||
if (pmp < MAX_SLOTS)
|
||||
emp = &pp->em_priv[pmp];
|
||||
else
|
||||
|
@ -1319,7 +1336,7 @@ static ssize_t ahci_transmit_led_message(struct ata_port *ap, u32 state,
|
|||
message[0] |= (4 << 8);
|
||||
|
||||
/* ignore 0:4 of byte zero, fill in port info yourself */
|
||||
message[1] = ((state & 0xfffffff0) | ap->port_no);
|
||||
message[1] = ((state & ~EM_MSG_LED_HBA_PORT) | ap->port_no);
|
||||
|
||||
/* write message to EM_LOC */
|
||||
writel(message[0], mmio + hpriv->em_loc);
|
||||
|
@ -1362,7 +1379,7 @@ static ssize_t ahci_led_store(struct ata_port *ap, const char *buf,
|
|||
state = simple_strtoul(buf, NULL, 0);
|
||||
|
||||
/* get the slot number from the message */
|
||||
pmp = (state & 0x0000ff00) >> 8;
|
||||
pmp = (state & EM_MSG_LED_PMP_SLOT) >> 8;
|
||||
if (pmp < MAX_SLOTS)
|
||||
emp = &pp->em_priv[pmp];
|
||||
else
|
||||
|
@ -1373,7 +1390,7 @@ static ssize_t ahci_led_store(struct ata_port *ap, const char *buf,
|
|||
* activity led through em_message
|
||||
*/
|
||||
if (emp->blink_policy)
|
||||
state &= 0xfff8ffff;
|
||||
state &= ~EM_MSG_LED_VALUE_ACTIVITY;
|
||||
|
||||
return ahci_transmit_led_message(ap, state, size);
|
||||
}
|
||||
|
@ -1392,16 +1409,16 @@ static ssize_t ahci_activity_store(struct ata_device *dev, enum sw_activity val)
|
|||
link->flags &= ~(ATA_LFLAG_SW_ACTIVITY);
|
||||
|
||||
/* set the LED to OFF */
|
||||
port_led_state &= 0xfff80000;
|
||||
port_led_state &= EM_MSG_LED_VALUE_OFF;
|
||||
port_led_state |= (ap->port_no | (link->pmp << 8));
|
||||
ahci_transmit_led_message(ap, port_led_state, 4);
|
||||
} else {
|
||||
link->flags |= ATA_LFLAG_SW_ACTIVITY;
|
||||
if (val == BLINK_OFF) {
|
||||
/* set LED to ON for idle */
|
||||
port_led_state &= 0xfff80000;
|
||||
port_led_state &= EM_MSG_LED_VALUE_OFF;
|
||||
port_led_state |= (ap->port_no | (link->pmp << 8));
|
||||
port_led_state |= 0x00010000; /* check this */
|
||||
port_led_state |= EM_MSG_LED_VALUE_ON; /* check this */
|
||||
ahci_transmit_led_message(ap, port_led_state, 4);
|
||||
}
|
||||
}
|
||||
|
@ -2612,7 +2629,7 @@ static int ahci_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
|
|||
u32 em_loc = readl(mmio + HOST_EM_LOC);
|
||||
u32 em_ctl = readl(mmio + HOST_EM_CTL);
|
||||
|
||||
messages = (em_ctl & 0x000f0000) >> 16;
|
||||
messages = (em_ctl & EM_CTRL_MSG_TYPE) >> 16;
|
||||
|
||||
/* we only support LED message type right now */
|
||||
if ((messages & 0x01) && (ahci_em_messages == 1)) {
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/*
|
||||
* ata_generic.c - Generic PATA/SATA controller driver.
|
||||
* Copyright 2005 Red Hat Inc <alan@redhat.com>, all rights reserved.
|
||||
* Copyright 2005 Red Hat Inc, all rights reserved.
|
||||
*
|
||||
* Elements from ide/pci/generic.c
|
||||
* Copyright (C) 2001-2002 Andre Hedrick <andre@linux-ide.org>
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
*
|
||||
* Copyright (C) 1998-1999 Andrzej Krzysztofowicz, Author and Maintainer
|
||||
* Copyright (C) 1998-2000 Andre Hedrick <andre@linux-ide.org>
|
||||
* Copyright (C) 2003 Red Hat Inc <alan@redhat.com>
|
||||
* Copyright (C) 2003 Red Hat Inc
|
||||
*
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
|
|
|
@ -4156,29 +4156,33 @@ static int cable_is_40wire(struct ata_port *ap)
|
|||
struct ata_link *link;
|
||||
struct ata_device *dev;
|
||||
|
||||
/* If the controller thinks we are 40 wire, we are */
|
||||
/* If the controller thinks we are 40 wire, we are. */
|
||||
if (ap->cbl == ATA_CBL_PATA40)
|
||||
return 1;
|
||||
/* If the controller thinks we are 80 wire, we are */
|
||||
|
||||
/* If the controller thinks we are 80 wire, we are. */
|
||||
if (ap->cbl == ATA_CBL_PATA80 || ap->cbl == ATA_CBL_SATA)
|
||||
return 0;
|
||||
/* If the system is known to be 40 wire short cable (eg laptop),
|
||||
then we allow 80 wire modes even if the drive isn't sure */
|
||||
|
||||
/* If the system is known to be 40 wire short cable (eg
|
||||
* laptop), then we allow 80 wire modes even if the drive
|
||||
* isn't sure.
|
||||
*/
|
||||
if (ap->cbl == ATA_CBL_PATA40_SHORT)
|
||||
return 0;
|
||||
/* If the controller doesn't know we scan
|
||||
|
||||
- Note: We look for all 40 wire detects at this point.
|
||||
Any 80 wire detect is taken to be 80 wire cable
|
||||
because
|
||||
- In many setups only the one drive (slave if present)
|
||||
will give a valid detect
|
||||
- If you have a non detect capable drive you don't
|
||||
want it to colour the choice
|
||||
*/
|
||||
/* If the controller doesn't know, we scan.
|
||||
*
|
||||
* Note: We look for all 40 wire detects at this point. Any
|
||||
* 80 wire detect is taken to be 80 wire cable because
|
||||
* - in many setups only the one drive (slave if present) will
|
||||
* give a valid detect
|
||||
* - if you have a non detect capable drive you don't want it
|
||||
* to colour the choice
|
||||
*/
|
||||
ata_port_for_each_link(link, ap) {
|
||||
ata_link_for_each_dev(dev, link) {
|
||||
if (!ata_is_40wire(dev))
|
||||
if (ata_dev_enabled(dev) && !ata_is_40wire(dev))
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
@ -4553,6 +4557,7 @@ void swap_buf_le16(u16 *buf, unsigned int buf_words)
|
|||
/**
|
||||
* ata_qc_new_init - Request an available ATA command, and initialize it
|
||||
* @dev: Device from whom we request an available command structure
|
||||
* @tag: command tag
|
||||
*
|
||||
* LOCKING:
|
||||
* None.
|
||||
|
|
|
@ -603,6 +603,9 @@ void ata_scsi_error(struct Scsi_Host *host)
|
|||
ata_link_for_each_dev(dev, link) {
|
||||
int devno = dev->devno;
|
||||
|
||||
if (!ata_dev_enabled(dev))
|
||||
continue;
|
||||
|
||||
ehc->saved_xfer_mode[devno] = dev->xfer_mode;
|
||||
if (ata_ncq_enabled(dev))
|
||||
ehc->saved_ncq_enabled |= 1 << devno;
|
||||
|
@ -1161,6 +1164,7 @@ void ata_eh_detach_dev(struct ata_device *dev)
|
|||
{
|
||||
struct ata_link *link = dev->link;
|
||||
struct ata_port *ap = link->ap;
|
||||
struct ata_eh_context *ehc = &link->eh_context;
|
||||
unsigned long flags;
|
||||
|
||||
ata_dev_disable(dev);
|
||||
|
@ -1174,9 +1178,11 @@ void ata_eh_detach_dev(struct ata_device *dev)
|
|||
ap->pflags |= ATA_PFLAG_SCSI_HOTPLUG;
|
||||
}
|
||||
|
||||
/* clear per-dev EH actions */
|
||||
/* clear per-dev EH info */
|
||||
ata_eh_clear_action(link, dev, &link->eh_info, ATA_EH_PERDEV_MASK);
|
||||
ata_eh_clear_action(link, dev, &link->eh_context.i, ATA_EH_PERDEV_MASK);
|
||||
ehc->saved_xfer_mode[dev->devno] = 0;
|
||||
ehc->saved_ncq_enabled &= ~(1 << dev->devno);
|
||||
|
||||
spin_unlock_irqrestore(ap->lock, flags);
|
||||
}
|
||||
|
@ -2787,6 +2793,9 @@ int ata_set_mode(struct ata_link *link, struct ata_device **r_failed_dev)
|
|||
|
||||
/* if data transfer is verified, clear DUBIOUS_XFER on ering top */
|
||||
ata_link_for_each_dev(dev, link) {
|
||||
if (!ata_dev_enabled(dev))
|
||||
continue;
|
||||
|
||||
if (!(dev->flags & ATA_DFLAG_DUBIOUS_XFER)) {
|
||||
struct ata_ering_entry *ent;
|
||||
|
||||
|
@ -2808,6 +2817,9 @@ int ata_set_mode(struct ata_link *link, struct ata_device **r_failed_dev)
|
|||
u8 saved_xfer_mode = ehc->saved_xfer_mode[dev->devno];
|
||||
u8 saved_ncq = !!(ehc->saved_ncq_enabled & (1 << dev->devno));
|
||||
|
||||
if (!ata_dev_enabled(dev))
|
||||
continue;
|
||||
|
||||
if (dev->xfer_mode != saved_xfer_mode ||
|
||||
ata_ncq_enabled(dev) != saved_ncq)
|
||||
dev->flags |= ATA_DFLAG_DUBIOUS_XFER;
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* ACPI PATA driver
|
||||
*
|
||||
* (c) 2007 Red Hat <alan@redhat.com>
|
||||
* (c) 2007 Red Hat
|
||||
*/
|
||||
|
||||
#include <linux/kernel.h>
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
/*
|
||||
* pata_ali.c - ALI 15x3 PATA for new ATA layer
|
||||
* (C) 2005 Red Hat Inc
|
||||
* Alan Cox <alan@redhat.com>
|
||||
*
|
||||
* based in part upon
|
||||
* linux/drivers/ide/pci/alim15x3.c Version 0.17 2003/01/02
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
/*
|
||||
* pata_amd.c - AMD PATA for new ATA layer
|
||||
* (C) 2005-2006 Red Hat Inc
|
||||
* Alan Cox <alan@redhat.com>
|
||||
*
|
||||
* Based on pata-sil680. Errata information is taken from data sheets
|
||||
* and the amd74xx.c driver by Vojtech Pavlik. Nvidia SATA devices are
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* pata_artop.c - ARTOP ATA controller driver
|
||||
*
|
||||
* (C) 2006 Red Hat <alan@redhat.com>
|
||||
* (C) 2006 Red Hat
|
||||
* (C) 2007 Bartlomiej Zolnierkiewicz
|
||||
*
|
||||
* Based in part on drivers/ide/pci/aec62xx.c
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
/*
|
||||
* pata_atiixp.c - ATI PATA for new ATA layer
|
||||
* (C) 2005 Red Hat Inc
|
||||
* Alan Cox <alan@redhat.com>
|
||||
*
|
||||
* Based on
|
||||
*
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
/*
|
||||
* pata_cmd640.c - CMD640 PCI PATA for new ATA layer
|
||||
* (C) 2007 Red Hat Inc
|
||||
* Alan Cox <alan@redhat.com>
|
||||
*
|
||||
* Based upon
|
||||
* linux/drivers/ide/pci/cmd640.c Version 1.02 Sep 01, 1996
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* pata_cmd64x.c - CMD64x PATA for new ATA layer
|
||||
* (C) 2005 Red Hat Inc
|
||||
* Alan Cox <alan@redhat.com>
|
||||
* Alan Cox <alan@lxorguk.ukuu.org.uk>
|
||||
*
|
||||
* Based upon
|
||||
* linux/drivers/ide/pci/cmd64x.c Version 1.30 Sept 10, 2002
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
/*
|
||||
* pata-cs5530.c - CS5530 PATA for new ATA layer
|
||||
* (C) 2005 Red Hat Inc
|
||||
* Alan Cox <alan@redhat.com>
|
||||
*
|
||||
* based upon cs5530.c by Mark Lord.
|
||||
*
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* pata-cs5535.c - CS5535 PATA for new ATA layer
|
||||
* (C) 2005-2006 Red Hat Inc
|
||||
* Alan Cox <alan@redhat.com>
|
||||
* Alan Cox <alan@lxorguk.ukuu.org.uk>
|
||||
*
|
||||
* based upon cs5535.c from AMD <Jens.Altmann@amd.com> as cleaned up and
|
||||
* made readable and Linux style by Wolfgang Zuleger <wolfgang.zuleger@gmx.de
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* pata_cypress.c - Cypress PATA for new ATA layer
|
||||
* (C) 2006 Red Hat Inc
|
||||
* Alan Cox <alan@redhat.com>
|
||||
* Alan Cox
|
||||
*
|
||||
* Based heavily on
|
||||
* linux/drivers/ide/pci/cy82c693.c Version 0.40 Sep. 10, 2002
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* pata_efar.c - EFAR PIIX clone controller driver
|
||||
*
|
||||
* (C) 2005 Red Hat <alan@redhat.com>
|
||||
* (C) 2005 Red Hat
|
||||
*
|
||||
* Some parts based on ata_piix.c by Jeff Garzik and others.
|
||||
*
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
|
||||
/*
|
||||
* pata-isapnp.c - ISA PnP PATA controller driver.
|
||||
* Copyright 2005/2006 Red Hat Inc <alan@redhat.com>, all rights reserved.
|
||||
* Copyright 2005/2006 Red Hat Inc, all rights reserved.
|
||||
*
|
||||
* Based in part on ide-pnp.c by Andrey Panin <pazke@donpac.ru>
|
||||
*/
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* pata_it821x.c - IT821x PATA for new ATA layer
|
||||
* (C) 2005 Red Hat Inc
|
||||
* Alan Cox <alan@redhat.com>
|
||||
* Alan Cox <alan@lxorguk.ukuu.org.uk>
|
||||
* (C) 2007 Bartlomiej Zolnierkiewicz
|
||||
*
|
||||
* based upon
|
||||
|
@ -10,7 +10,7 @@
|
|||
*
|
||||
* linux/drivers/ide/pci/it821x.c Version 0.09 December 2004
|
||||
*
|
||||
* Copyright (C) 2004 Red Hat <alan@redhat.com>
|
||||
* Copyright (C) 2004 Red Hat
|
||||
*
|
||||
* May be copied or modified under the terms of the GNU General Public License
|
||||
* Based in part on the ITE vendor provided SCSI driver.
|
||||
|
@ -557,9 +557,8 @@ static unsigned int it821x_read_id(struct ata_device *adev,
|
|||
if (strstr(model_num, "Integrated Technology Express")) {
|
||||
/* Set feature bits the firmware neglects */
|
||||
id[49] |= 0x0300; /* LBA, DMA */
|
||||
id[82] |= 0x0400; /* LBA48 */
|
||||
id[83] &= 0x7FFF;
|
||||
id[83] |= 0x4000; /* Word 83 is valid */
|
||||
id[83] |= 0x4400; /* Word 83 is valid and LBA48 */
|
||||
id[86] |= 0x0400; /* LBA48 on */
|
||||
id[ATA_ID_MAJOR_VER] |= 0x1F;
|
||||
}
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
* driven by AHCI in the usual configuration although
|
||||
* this driver can handle other setups if we need it.
|
||||
*
|
||||
* (c) 2006 Red Hat <alan@redhat.com>
|
||||
* (c) 2006 Red Hat
|
||||
*/
|
||||
|
||||
#include <linux/kernel.h>
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/*
|
||||
* pata-legacy.c - Legacy port PATA/SATA controller driver.
|
||||
* Copyright 2005/2006 Red Hat <alan@redhat.com>, all rights reserved.
|
||||
* Copyright 2005/2006 Red Hat, all rights reserved.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
* isn't making full use of the device functionality but it is
|
||||
* easy to get working.
|
||||
*
|
||||
* (c) 2006 Red Hat <alan@redhat.com>
|
||||
* (c) 2006 Red Hat
|
||||
*/
|
||||
|
||||
#include <linux/kernel.h>
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* pata_mpiix.c - Intel MPIIX PATA for new ATA layer
|
||||
* (C) 2005-2006 Red Hat Inc
|
||||
* Alan Cox <alan@redhat.com>
|
||||
* Alan Cox <alan@lxorguk.ukuu.org.uk>
|
||||
*
|
||||
* The MPIIX is different enough to the PIIX4 and friends that we give it
|
||||
* a separate driver. The old ide/pci code handles this by just not tuning
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* pata_netcell.c - Netcell PATA driver
|
||||
*
|
||||
* (c) 2006 Red Hat <alan@redhat.com>
|
||||
* (c) 2006 Red Hat
|
||||
*/
|
||||
|
||||
#include <linux/kernel.h>
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
/*
|
||||
* pata_ninja32.c - Ninja32 PATA for new ATA layer
|
||||
* (C) 2007 Red Hat Inc
|
||||
* Alan Cox <alan@redhat.com>
|
||||
*
|
||||
* Note: The controller like many controllers has shared timings for
|
||||
* PIO and DMA. We thus flip to the DMA timings in dma_start and flip back
|
||||
|
@ -45,7 +44,7 @@
|
|||
#include <linux/libata.h>
|
||||
|
||||
#define DRV_NAME "pata_ninja32"
|
||||
#define DRV_VERSION "0.0.1"
|
||||
#define DRV_VERSION "0.1.1"
|
||||
|
||||
|
||||
/**
|
||||
|
@ -89,6 +88,17 @@ static struct ata_port_operations ninja32_port_ops = {
|
|||
.set_piomode = ninja32_set_piomode,
|
||||
};
|
||||
|
||||
static void ninja32_program(void __iomem *base)
|
||||
{
|
||||
iowrite8(0x05, base + 0x01); /* Enable interrupt lines */
|
||||
iowrite8(0xBE, base + 0x02); /* Burst, ?? setup */
|
||||
iowrite8(0x01, base + 0x03); /* Unknown */
|
||||
iowrite8(0x20, base + 0x04); /* WAIT0 */
|
||||
iowrite8(0x8f, base + 0x05); /* Unknown */
|
||||
iowrite8(0xa4, base + 0x1c); /* Unknown */
|
||||
iowrite8(0x83, base + 0x1d); /* BMDMA control: WAIT0 */
|
||||
}
|
||||
|
||||
static int ninja32_init_one(struct pci_dev *dev, const struct pci_device_id *id)
|
||||
{
|
||||
struct ata_host *host;
|
||||
|
@ -134,18 +144,28 @@ static int ninja32_init_one(struct pci_dev *dev, const struct pci_device_id *id)
|
|||
ap->ioaddr.bmdma_addr = base;
|
||||
ata_sff_std_ports(&ap->ioaddr);
|
||||
|
||||
iowrite8(0x05, base + 0x01); /* Enable interrupt lines */
|
||||
iowrite8(0xBE, base + 0x02); /* Burst, ?? setup */
|
||||
iowrite8(0x01, base + 0x03); /* Unknown */
|
||||
iowrite8(0x20, base + 0x04); /* WAIT0 */
|
||||
iowrite8(0x8f, base + 0x05); /* Unknown */
|
||||
iowrite8(0xa4, base + 0x1c); /* Unknown */
|
||||
iowrite8(0x83, base + 0x1d); /* BMDMA control: WAIT0 */
|
||||
ninja32_program(base);
|
||||
/* FIXME: Should we disable them at remove ? */
|
||||
return ata_host_activate(host, dev->irq, ata_sff_interrupt,
|
||||
IRQF_SHARED, &ninja32_sht);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_PM
|
||||
|
||||
static int ninja32_reinit_one(struct pci_dev *pdev)
|
||||
{
|
||||
struct ata_host *host = dev_get_drvdata(&pdev->dev);
|
||||
int rc;
|
||||
|
||||
rc = ata_pci_device_do_resume(pdev);
|
||||
if (rc)
|
||||
return rc;
|
||||
ninja32_program(host->iomap[0]);
|
||||
ata_host_resume(host);
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
static const struct pci_device_id ninja32[] = {
|
||||
{ 0x1145, 0xf021, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },
|
||||
{ 0x1145, 0xf024, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },
|
||||
|
@ -156,7 +176,11 @@ static struct pci_driver ninja32_pci_driver = {
|
|||
.name = DRV_NAME,
|
||||
.id_table = ninja32,
|
||||
.probe = ninja32_init_one,
|
||||
.remove = ata_pci_remove_one
|
||||
.remove = ata_pci_remove_one,
|
||||
#ifdef CONFIG_PM
|
||||
.suspend = ata_pci_device_suspend,
|
||||
.resume = ninja32_reinit_one,
|
||||
#endif
|
||||
};
|
||||
|
||||
static int __init ninja32_init(void)
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
/*
|
||||
* pata_ns87410.c - National Semiconductor 87410 PATA for new ATA layer
|
||||
* (C) 2006 Red Hat Inc
|
||||
* Alan Cox <alan@redhat.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* pata_ns87415.c - NS87415 (non PARISC) PATA
|
||||
*
|
||||
* (C) 2005 Red Hat <alan@redhat.com>
|
||||
* (C) 2005 Red Hat <alan@lxorguk.ukuu.org.uk>
|
||||
*
|
||||
* This is a fairly generic MWDMA controller. It has some limitations
|
||||
* as it requires timing reloads on PIO/DMA transitions but it is otherwise
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* pata_oldpiix.c - Intel PATA/SATA controllers
|
||||
*
|
||||
* (C) 2005 Red Hat <alan@redhat.com>
|
||||
* (C) 2005 Red Hat
|
||||
*
|
||||
* Some parts based on ata_piix.c by Jeff Garzik and others.
|
||||
*
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
/*
|
||||
* pata_opti.c - ATI PATA for new ATA layer
|
||||
* (C) 2005 Red Hat Inc
|
||||
* Alan Cox <alan@redhat.com>
|
||||
*
|
||||
* Based on
|
||||
* linux/drivers/ide/pci/opti621.c Version 0.7 Sept 10, 2002
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
/*
|
||||
* pata_optidma.c - Opti DMA PATA for new ATA layer
|
||||
* (C) 2006 Red Hat Inc
|
||||
* Alan Cox <alan@redhat.com>
|
||||
*
|
||||
* The Opti DMA controllers are related to the older PIO PCI controllers
|
||||
* and indeed the VLB ones. The main differences are that the timing
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/*
|
||||
* pata_pcmcia.c - PCMCIA PATA controller driver.
|
||||
* Copyright 2005-2006 Red Hat Inc <alan@redhat.com>, all rights reserved.
|
||||
* Copyright 2005-2006 Red Hat Inc, all rights reserved.
|
||||
* PCMCIA ident update Copyright 2006 Marcin Juszkiewicz
|
||||
* <openembedded@hrw.one.pl>
|
||||
*
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* pata_pdc202xx_old.c - Promise PDC202xx PATA for new ATA layer
|
||||
* (C) 2005 Red Hat Inc
|
||||
* Alan Cox <alan@redhat.com>
|
||||
* Alan Cox <alan@lxorguk.ukuu.org.uk>
|
||||
* (C) 2007 Bartlomiej Zolnierkiewicz
|
||||
*
|
||||
* Based in part on linux/drivers/ide/pci/pdc202xx_old.c
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
*
|
||||
* Based on pata_pcmcia:
|
||||
*
|
||||
* Copyright 2005-2006 Red Hat Inc <alan@redhat.com>, all rights reserved.
|
||||
* Copyright 2005-2006 Red Hat Inc, all rights reserved.
|
||||
*
|
||||
* This file is subject to the terms and conditions of the GNU General Public
|
||||
* License. See the file "COPYING" in the main directory of this archive
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/*
|
||||
* pata_qdi.c - QDI VLB ATA controllers
|
||||
* (C) 2006 Red Hat <alan@redhat.com>
|
||||
* (C) 2006 Red Hat
|
||||
*
|
||||
* This driver mostly exists as a proof of concept for non PCI devices under
|
||||
* libata. While the QDI6580 was 'neat' in 1993 it is no longer terribly
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* pata_radisys.c - Intel PATA/SATA controllers
|
||||
*
|
||||
* (C) 2006 Red Hat <alan@redhat.com>
|
||||
* (C) 2006 Red Hat <alan@lxorguk.ukuu.org.uk>
|
||||
*
|
||||
* Some parts based on ata_piix.c by Jeff Garzik and others.
|
||||
*
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* New ATA layer SC1200 driver Alan Cox <alan@redhat.com>
|
||||
* New ATA layer SC1200 driver Alan Cox <alan@lxorguk.ukuu.org.uk>
|
||||
*
|
||||
* TODO: Mode selection filtering
|
||||
* TODO: Can't enable second channel until ATA core has serialize
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
* Copyright 2003-2005 Jeff Garzik
|
||||
* Copyright (C) 1998-1999 Andrzej Krzysztofowicz, Author and Maintainer
|
||||
* Copyright (C) 1998-2000 Andre Hedrick <andre@linux-ide.org>
|
||||
* Copyright (C) 2003 Red Hat Inc <alan@redhat.com>
|
||||
* Copyright (C) 2003 Red Hat Inc
|
||||
*
|
||||
* and drivers/ata/ahci.c:
|
||||
* Copyright 2004-2005 Red Hat, Inc.
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
/*
|
||||
* pata_serverworks.c - Serverworks PATA for new ATA layer
|
||||
* (C) 2005 Red Hat Inc
|
||||
* Alan Cox <alan@redhat.com>
|
||||
*
|
||||
* based upon
|
||||
*
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
/*
|
||||
* pata_sil680.c - SIL680 PATA for new ATA layer
|
||||
* (C) 2005 Red Hat Inc
|
||||
* Alan Cox <alan@redhat.com>
|
||||
*
|
||||
* based upon
|
||||
*
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* pata_sis.c - SiS ATA driver
|
||||
*
|
||||
* (C) 2005 Red Hat <alan@redhat.com>
|
||||
* (C) 2005 Red Hat
|
||||
* (C) 2007 Bartlomiej Zolnierkiewicz
|
||||
*
|
||||
* Based upon linux/drivers/ide/pci/sis5513.c
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
/*
|
||||
* pata_sl82c105.c - SL82C105 PATA for new ATA layer
|
||||
* (C) 2005 Red Hat Inc
|
||||
* Alan Cox <alan@redhat.com>
|
||||
*
|
||||
* Based in part on linux/drivers/ide/pci/sl82c105.c
|
||||
* SL82C105/Winbond 553 IDE driver
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* pata_triflex.c - Compaq PATA for new ATA layer
|
||||
* (C) 2005 Red Hat Inc
|
||||
* Alan Cox <alan@redhat.com>
|
||||
* Alan Cox <alan@lxorguk.ukuu.org.uk>
|
||||
*
|
||||
* based upon
|
||||
*
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
/*
|
||||
* pata_via.c - VIA PATA for new ATA layer
|
||||
* (C) 2005-2006 Red Hat Inc
|
||||
* Alan Cox <alan@redhat.com>
|
||||
*
|
||||
* Documentation
|
||||
* Most chipset documentation available under NDA only
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/*
|
||||
* pata_winbond.c - Winbond VLB ATA controllers
|
||||
* (C) 2006 Red Hat <alan@redhat.com>
|
||||
* (C) 2006 Red Hat
|
||||
*
|
||||
* Support for the Winbond 83759A when operating in advanced mode.
|
||||
* Multichip mode is not currently supported.
|
||||
|
|
|
@ -1329,6 +1329,11 @@ static int sil24_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
|
|||
}
|
||||
}
|
||||
|
||||
/* Set max read request size to 4096. This slightly increases
|
||||
* write throughput for pci-e variants.
|
||||
*/
|
||||
pcie_set_readrq(pdev, 4096);
|
||||
|
||||
sil24_init_controller(host);
|
||||
|
||||
pci_set_master(pdev);
|
||||
|
|
Loading…
Reference in New Issue