12 Jun, 2006

2 commits

  • SIEN on some 3112 controllers doesn't mask SATA IRQ properly. IRQ
    stays asserted even after SIEN is masked and IRQ is acked. Also, even
    while frozen, any SATA PHY event including hardreset raises SATA IRQ.
    Clearing SError seems to be the only way to deassert SATA IRQ.

    This patch makes sil_host_intr() clear SError on SATA IRQs and ignore
    SATA IRQs reported while frozen so that hardreset doesn't trigger
    hotplug event (which ends up hardresetting again).

    In such cases, the port still gets re-frozen to minimize the danger of
    screaming interrupts. This results in one nil EH repeat on
    controllers with broken SIEN but other than that does no harm.

    Signed-off-by: Tejun Heo
    Signed-off-by: Jeff Garzik

    Tejun Heo
     
  • Short-circuit interrupt handling if BMDMA2 is reported as 0xffffffff
    indicating device removal.

    Signed-off-by: Tejun Heo
    Signed-off-by: Jeff Garzik

    Tejun Heo
     

31 May, 2006

4 commits

  • Convert to new probing mechanism and add hotplug support by enabling
    SATA IRQ for SError.N, marking ehi for hotplug and scheduling EH on
    SATA IRQs.

    Sil3112/3512/3114 family of controllers use COMRESET as TF clearing
    point and can reliably wait for D2H FIS after COMRESET whether the FIS
    is the first D2H FIS after POR or in response to the COMRESET. Thus,
    setting ATA_FLAG_HRST_TO_RESUME is enough for device detection after
    hotplug.

    Signed-off-by: Tejun Heo

    Tejun Heo
     
  • Hook transportt->user_scan() and hostt->slave_destroy().

    Signed-off-by: Tejun Heo

    Tejun Heo
     
  • The DMA complete bit of these controllers reflects ATA IRQ status
    while no DMA command is in progress. So, we can tell whether the
    controller is raising an interrupt or not in deterministic manner.
    This patch gives sata_sil its own interrupt handler which behaves much
    better than the original one in terms of error detection and handling.
    This change is also necessary for later hotplug support.

    Further improvements are possible, in both 2 and 4 ports versions, we
    can get all status with only one readl and using custom bmdma
    operations can further cut down register accesses.

    Signed-off-by: Tejun Heo

    Tejun Heo
     
  • sata_sil is about to get a brand new interrupt handler. Add relevant
    constants.

    Signed-off-by: Tejun Heo

    Tejun Heo
     

24 May, 2006

1 commit

  • We need to pass the device in order to do per device checks such as
    32bit I/O enables. With the changes to include dev->ap we now don't have
    to add parameters however just clean them up. Also add data_xfer methods
    to the existing drivers except ata_piix (which is in the other block of
    patches). If you reject the piix one just add a data_xfer to it...

    Signed-off-by: Alan Cox
    Signed-off-by: Jeff Garzik

    Alan Cox
     

15 May, 2006

2 commits

  • Convert sata_sil to new EH. As these controllers have hardware
    interrupt mask and are known to have screaming interrupts issues, use
    hardware IRQ masking for freezing. sil_freeze() masks interrupts for
    the port and sil_thaw() unmasks them. As ports are automatically
    frozen before probing reset, there is no need to initialize interrupt
    masks sil_init_onde(). Remove related code.

    Other than freezing, sata_sil uses stock BMDMA EH routines.

    Signed-off-by: Tejun Heo

    Tejun Heo
     
  • Use ATA printk helpers.

    Signed-off-by: Tejun Heo

    Tejun Heo
     

12 Apr, 2006

1 commit


11 Apr, 2006

1 commit

  • Overriding the whole EH code is a per-transport, not per-host thing.
    Move ->eh_strategy_handler to the transport class, same as
    ->eh_timed_out.

    Downside is that scsi_host_alloc can't check for the total lack of EH
    anymore, but the transition period from old EH where we needed it is
    long gone already.

    Signed-off-by: Christoph Hellwig
    Signed-off-by: Jeff Garzik

    Christoph Hellwig
     

03 Apr, 2006

2 commits


02 Apr, 2006

1 commit

  • This patch renames ata_dev_present() to ata_dev_enabled() and adds
    ata_dev_disabled(). This is to discern the state where a device is
    present but disabled from not-present state. This disctinction is
    necessary when configuring transfer mode because device selection
    timing must not be violated even if a device fails to configure.

    Signed-off-by: Tejun Heo
    Signed-off-by: Jeff Garzik

    Tejun Heo
     

24 Mar, 2006

1 commit


22 Mar, 2006

1 commit


05 Mar, 2006

4 commits


02 Mar, 2006

1 commit


28 Feb, 2006

1 commit


26 Feb, 2006

2 commits

  • Silicon Image has disclosed a new sil3114/3152 errata and workaround
    which causes the controller to return R_ERR on DMA activate FIS if the
    FIS is received while the next PRD is being fetched. This patch
    implements the workaround.

    This errata results in lock up and doesn't trigger if m15w workaround
    is in effect. We stopped applying m15w to 3512 and 3114 in 2.6.14-rc1
    which makes 3512/3114 lock up with some drives on all kernel versions
    since 2.6.14-rc1 upto now (2.6.16-rc4). This patch should fix the
    regression.

    Signed-off-by: Tejun Heo
    Signed-off-by: Jeff Garzik

    Tejun Heo
     
  • 3512 is slightly different from 3112 errata-wise. Differentiate it.

    Signed-off-by: Tejun Heo
    Signed-off-by: Jeff Garzik

    Tejun Heo
     

20 Feb, 2006

1 commit


13 Feb, 2006

3 commits

  • The previous dev->max_sectors patch made sht->max_sectors meaningless.
    Kill all initializations of sht->max_sectors.

    Signed-off-by: Tejun Heo
    Signed-off-by: Jeff Garzik

    Tejun Heo
     
  • If a low level driver wants to control max_sectors, it had to adjust
    ap->host->max_sectors and set ATA_DFLAG_LOCK_SECTORS to tell
    ata_scsi_slave_config not to override the limit. This is not only
    cumbersome but also incorrect for hosts which support more than one
    devices per port.

    This patch adds per-device ->max_sectors. If the field is unset
    (zero), libata core layer will adjust ->max_sectors according to
    default rules. If the field is set, libata honors the setting.

    Signed-off-by: Tejun Heo
    Signed-off-by: Jeff Garzik

    Tejun Heo
     
  • Use ata_dev_id_c_string()

    Signed-off-by: Tejun Heo
    Signed-off-by: Jeff Garzik

    Tejun Heo
     

10 Feb, 2006

2 commits


28 Jan, 2006

1 commit

  • On occasion, a user will submit a patch that enables the "mod15write"
    quirk for their device. Enabling this quirk has the effect of clamping
    all ATA commands to no more than 15 sectors. The intended use of this
    quirk is to stop the controller from generating FIS's of unusual size
    ("but Wesley, what about the FOUS's?"), which in turn works around
    problems in a of hard drives.

    One side effect of this quirk is greatly decreased performance. Users
    often enable the mod15write quirk to fix various system, power, chip,
    and/or driver problems. For a few rare problematic cases, enabling this
    has cured lockups or data corruption.

    Rather than add bogus listings to the mod15write quirk list (I get a
    patch every month doing such), we add a 'slow_down' module parameter.
    This allows users to employ a performance sledgehammer in the hopes
    of curing a problem. It defaults to off (0), of course.

    Jeff Garzik
     

06 Jan, 2006

1 commit


01 Dec, 2005

1 commit


11 Nov, 2005

1 commit


07 Nov, 2005

1 commit


31 Oct, 2005

1 commit


23 Oct, 2005

1 commit


21 Oct, 2005

1 commit


30 Aug, 2005

2 commits