If you were going to shoot me for not sending these earlier, you would be
right. -rc6 beat me by ~2 hours it seems, and they really should have gone out long before that. These have been in libata-dev.git for a day or so (unfortunately linux-next is on vacation). The main one is #1, with the others being minor bits. #1 has multiple tested-by, and can be considered a regression fix IMO. 1) Fix ACPI oops, https://bugzilla.kernel.org/show_bug.cgi?id=48211 2) Temporary WARN_ONCE() debugging patch for further ACPI debugging. The code already oopses here, and so this merely gives slightly better info. Related to https://bugzilla.kernel.org/show_bug.cgi?id=49151 which has been bisected down to a patch that _exposes_ a latest bug, but said bisection target does not actually appear to be the root cause itself. 3) sata_svw: fix longstanding error recovery bug, which was preventing kdump, by adding missing DMA-start bit check. Core code was already checking DMA-start, but ancillary, less-used routines were not. Fixed. 4) sata_highbank: fix minor __init/__devinit warning 5) Fix minor warning, if CONFIG_PM is set, but CONFIG_PM_SLEEP is not set 6) pata_arasan: proper functioning requires clock setting -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.12 (GNU/Linux) iQIVAwUAUKcUVSWzCDIBeCsvAQIbhQ/+OUl+AcgvrF4+90Gv1TfuSSWlzEHjOQ/N CQdx5da2OQhOE3rGEyaqBRt5L+bM20QLimH67QvQirhx4+cm2DtE2VcUS2ZpMh5P BHnk2nuZb77m0XKbRc2u1DxxLq4HIYljKmJXnaCYp6d+o8E2ETdGIt9Zj9yxVscC v63M28L0ab31gisAIXAbNXx+/iS3mtfIl5G8u0b0XNVixO0f/uRc/rl1feB3UvJF GGRPZGExrCwy9RXMvqi+nRVu5HAHQ4iLp6aoMknR/URGvymmGE0h0tpiy05UfP64 7O2hb9LJMVwSKuSkFVlRcKHKPrDisQs+bFT7a208AqVyAI3kv1ZHKDdcSRlGXnVd uy6jHL/+LKONefC3xjYoyctxZTCLIJCXg6lydwLG3R7HlrId3HVfnrukAvNo+nCR D47gV8llj9LIrQg8nyZvOwQR8CVXD8oUV2mPU/P6Br8otZ5dlfrCb5jqhzYfel+Z XPbBT/OIfO1JPVRGuyKlR3SCujT1x9VqETD0yj/XkxkDiKqOWbfMzu2beRQtYYsT ZDKd+niVxOjoLbDEIOEgRkoAdVgQ8EkH0+c12gmTho18UIvXj2NeZMyNw9/UX5p2 VqT25aCG5vcffI+sSz1LTjWc6OAHNTW7dEkFlsAxyTIHe347yQwrATZ/iqhBj5Ci rpv517rYfl0= =V0y8 -----END PGP SIGNATURE----- Merge tag 'upstream-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jgarzik/libata-dev Pull libata fixes from Jeff Garzik: "If you were going to shoot me for not sending these earlier, you would be right. -rc6 beat me by ~2 hours it seems, and they really should have gone out long before that. These have been in libata-dev.git for a day or so (unfortunately linux-next is on vacation). The main one is #1, with the others being minor bits. #1 has multiple tested-by, and can be considered a regression fix IMO. 1) Fix ACPI oops: https://bugzilla.kernel.org/show_bug.cgi?id=48211 2) Temporary WARN_ONCE() debugging patch for further ACPI debugging. The code already oopses here, and so this merely gives slightly better info. Related to https://bugzilla.kernel.org/show_bug.cgi?id=49151 which has been bisected down to a patch that _exposes_ a latest bug, but said bisection target does not actually appear to be the root cause itself. 3) sata_svw: fix longstanding error recovery bug, which was preventing kdump, by adding missing DMA-start bit check. Core code was already checking DMA-start, but ancillary, less-used routines were not. Fixed. 4) sata_highbank: fix minor __init/__devinit warning 5) Fix minor warning, if CONFIG_PM is set, but CONFIG_PM_SLEEP is not set 6) pata_arasan: proper functioning requires clock setting" * tag 'upstream-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jgarzik/libata-dev: [libata] PM callbacks should be conditionally compiled on CONFIG_PM_SLEEP sata_svw: check DMA start bit before reset libata debugging: Warn when unable to find timing descriptor based on xfer_mode sata_highbank: mark ahci_highbank_probe as __devinit pata_arasan: Initialize cf clock to 166MHz libata-acpi: Fix NULL ptr derference in ata_acpi_dev_handle
This commit is contained in:
commit
5e30c089e5
|
@ -238,7 +238,7 @@ static int __devexit ahci_remove(struct platform_device *pdev)
|
|||
return 0;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_PM
|
||||
#ifdef CONFIG_PM_SLEEP
|
||||
static int ahci_suspend(struct device *dev)
|
||||
{
|
||||
struct ahci_platform_data *pdata = dev_get_platdata(dev);
|
||||
|
|
|
@ -1105,10 +1105,15 @@ static int ata_acpi_bind_device(struct ata_port *ap, struct scsi_device *sdev,
|
|||
struct acpi_device *acpi_dev;
|
||||
struct acpi_device_power_state *states;
|
||||
|
||||
if (ap->flags & ATA_FLAG_ACPI_SATA)
|
||||
ata_dev = &ap->link.device[sdev->channel];
|
||||
else
|
||||
if (ap->flags & ATA_FLAG_ACPI_SATA) {
|
||||
if (!sata_pmp_attached(ap))
|
||||
ata_dev = &ap->link.device[sdev->id];
|
||||
else
|
||||
ata_dev = &ap->pmp_link[sdev->channel].device[sdev->id];
|
||||
}
|
||||
else {
|
||||
ata_dev = &ap->link.device[sdev->id];
|
||||
}
|
||||
|
||||
*handle = ata_dev_acpi_handle(ata_dev);
|
||||
|
||||
|
|
|
@ -2942,6 +2942,10 @@ const struct ata_timing *ata_timing_find_mode(u8 xfer_mode)
|
|||
|
||||
if (xfer_mode == t->mode)
|
||||
return t;
|
||||
|
||||
WARN_ONCE(true, "%s: unable to find timing for xfer_mode 0x%x\n",
|
||||
__func__, xfer_mode);
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
|
|
@ -317,6 +317,12 @@ static int cf_init(struct arasan_cf_dev *acdev)
|
|||
return ret;
|
||||
}
|
||||
|
||||
ret = clk_set_rate(acdev->clk, 166000000);
|
||||
if (ret) {
|
||||
dev_warn(acdev->host->dev, "clock set rate failed");
|
||||
return ret;
|
||||
}
|
||||
|
||||
spin_lock_irqsave(&acdev->host->lock, flags);
|
||||
/* configure CF interface clock */
|
||||
writel((pdata->cf_if_clk <= CF_IF_CLK_200M) ? pdata->cf_if_clk :
|
||||
|
@ -908,7 +914,7 @@ static int __devexit arasan_cf_remove(struct platform_device *pdev)
|
|||
return 0;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_PM
|
||||
#ifdef CONFIG_PM_SLEEP
|
||||
static int arasan_cf_suspend(struct device *dev)
|
||||
{
|
||||
struct ata_host *host = dev_get_drvdata(dev);
|
||||
|
|
|
@ -260,7 +260,7 @@ static const struct of_device_id ahci_of_match[] = {
|
|||
};
|
||||
MODULE_DEVICE_TABLE(of, ahci_of_match);
|
||||
|
||||
static int __init ahci_highbank_probe(struct platform_device *pdev)
|
||||
static int __devinit ahci_highbank_probe(struct platform_device *pdev)
|
||||
{
|
||||
struct device *dev = &pdev->dev;
|
||||
struct ahci_host_priv *hpriv;
|
||||
|
@ -378,7 +378,7 @@ static int __devexit ahci_highbank_remove(struct platform_device *pdev)
|
|||
return 0;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_PM
|
||||
#ifdef CONFIG_PM_SLEEP
|
||||
static int ahci_highbank_suspend(struct device *dev)
|
||||
{
|
||||
struct ata_host *host = dev_get_drvdata(dev);
|
||||
|
|
|
@ -142,6 +142,39 @@ static int k2_sata_scr_write(struct ata_link *link,
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int k2_sata_softreset(struct ata_link *link,
|
||||
unsigned int *class, unsigned long deadline)
|
||||
{
|
||||
u8 dmactl;
|
||||
void __iomem *mmio = link->ap->ioaddr.bmdma_addr;
|
||||
|
||||
dmactl = readb(mmio + ATA_DMA_CMD);
|
||||
|
||||
/* Clear the start bit */
|
||||
if (dmactl & ATA_DMA_START) {
|
||||
dmactl &= ~ATA_DMA_START;
|
||||
writeb(dmactl, mmio + ATA_DMA_CMD);
|
||||
}
|
||||
|
||||
return ata_sff_softreset(link, class, deadline);
|
||||
}
|
||||
|
||||
static int k2_sata_hardreset(struct ata_link *link,
|
||||
unsigned int *class, unsigned long deadline)
|
||||
{
|
||||
u8 dmactl;
|
||||
void __iomem *mmio = link->ap->ioaddr.bmdma_addr;
|
||||
|
||||
dmactl = readb(mmio + ATA_DMA_CMD);
|
||||
|
||||
/* Clear the start bit */
|
||||
if (dmactl & ATA_DMA_START) {
|
||||
dmactl &= ~ATA_DMA_START;
|
||||
writeb(dmactl, mmio + ATA_DMA_CMD);
|
||||
}
|
||||
|
||||
return sata_sff_hardreset(link, class, deadline);
|
||||
}
|
||||
|
||||
static void k2_sata_tf_load(struct ata_port *ap, const struct ata_taskfile *tf)
|
||||
{
|
||||
|
@ -346,6 +379,8 @@ static struct scsi_host_template k2_sata_sht = {
|
|||
|
||||
static struct ata_port_operations k2_sata_ops = {
|
||||
.inherits = &ata_bmdma_port_ops,
|
||||
.softreset = k2_sata_softreset,
|
||||
.hardreset = k2_sata_hardreset,
|
||||
.sff_tf_load = k2_sata_tf_load,
|
||||
.sff_tf_read = k2_sata_tf_read,
|
||||
.sff_check_status = k2_stat_check_status,
|
||||
|
|
Loading…
Reference in New Issue