lkml.org 
[lkml]   [2008]   [Mar]   [25]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[PATCH] Work around breakage introduced in pata_sil680 by switching it to MMIO
    pata_sil680 is broken on Linkstation amd Kurobox HG machines since 2.6.24. 
    Work around the breakage until a real fix is found.

    Signed-off-by: Guennadi Liakhovetski <g.liakhovetski@gmx.de>

    ---

    On Tue, 26 Feb 2008, Benjamin Herrenschmidt wrote:

    > > Yes.
    > >
    > > Alan loves to complain about lack of MMIO flush, but in practice this is
    > > rarely the source of problems such as the one you describe.
    > >
    > > But if its broken its broken, and we need to revert. Any luck getting
    > > benh access to the device?
    > >
    >
    > Especially since reverting it will break a whole bunch of cell blades,
    > which wouldn't be nice (those cannot do PIO and have that controller).
    >
    > In the meantime, we might "workaround" with a hack to only enable MMIO
    > on those cell
    > blades, something like:
    >
    > #ifdef CONFIG_PPC64
    > if (machine_is(cell))
    > mmio = 1;
    > #endif
    >
    > That might get us out of the regression until we find the proper
    > solution ?

    How about the one below? I'd really like to get it in for 2.6.25 to avoid
    a second broken stable kernel on these machines.

    Ben, please verify that your cell machines still work.

    Thanks
    Guennadi

    diff --git a/drivers/ata/pata_sil680.c b/drivers/ata/pata_sil680.c
    index 503245a..75179ff 100644
    --- a/drivers/ata/pata_sil680.c
    +++ b/drivers/ata/pata_sil680.c
    @@ -335,9 +335,12 @@ static int __devinit sil680_init_one(struct pci_dev *pdev,
    };
    const struct ata_port_info *ppi[] = { &info, NULL };
    static int printed_version;
    +#ifdef CONFIG_PPC64
    struct ata_host *host;
    void __iomem *mmio_base;
    - int rc, try_mmio;
    + int rc;
    +#endif
    + int try_mmio;

    if (!printed_version++)
    dev_printk(KERN_DEBUG, &pdev->dev, "version " DRV_VERSION "\n");
    @@ -350,7 +353,8 @@ static int __devinit sil680_init_one(struct pci_dev *pdev,
    return -ENODEV;
    }

    - if (!try_mmio)
    +#ifdef CONFIG_PPC64
    + if (!try_mmio || !machine_is(cell))
    goto use_ioports;

    /* Try to acquire MMIO resources and fallback to PIO if
    @@ -396,6 +400,7 @@ static int __devinit sil680_init_one(struct pci_dev *pdev,
    &sil680_sht);

    use_ioports:
    +#endif
    return ata_pci_init_one(pdev, ppi);
    }


    \
     
     \ /
      Last update: 2008-03-26 00:33    [W:0.027 / U:3.152 seconds]
    ©2003-2017 Jasper Spaans. hosted at Digital OceanAdvertise on this site