From: Sergei Shtylyov <sshtylyov@ru.mvista.com>
To: Alek Du <alek.du@intel.com>
Cc: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>,
Alan Cox <alan@lxorguk.ukuu.org.uk>,
"jgarzik@pobox.com" <jgarzik@pobox.com>,
"linux-ide@vger.kernel.org" <linux-ide@vger.kernel.org>
Subject: Re: [PATCH] libata: Add Intel SCH PATA Support
Date: Mon, 05 May 2008 14:33:40 +0400 [thread overview]
Message-ID: <481EE284.2010708@ru.mvista.com> (raw)
In-Reply-To: <20080505172356.636649e6@dxy.sh.intel.com>
Alek Du wrote:
> This patch adds Intel SCH chipsets
Looks good, yet there's some nits...
> (US15W, US15L, UL11L) PATA controller support.
From the Intel's documentation I got the impression that the part numbers
start with AF82 (82 being the usual Intel's chip number prefix).
> Signed-off-by: Alek Du <alek.du@intel.com>
> diff --git a/drivers/ata/Makefile b/drivers/ata/Makefile
> index b693d82..ec589e2 100644
> --- a/drivers/ata/Makefile
> +++ b/drivers/ata/Makefile
> @@ -4,6 +4,7 @@ obj-$(CONFIG_ATA) += libata.o
> obj-$(CONFIG_SATA_AHCI) += ahci.o
> obj-$(CONFIG_SATA_SVW) += sata_svw.o
> obj-$(CONFIG_ATA_PIIX) += ata_piix.o
> +obj-$(CONFIG_ATA_SCH) += ata_sch.o
The name of the drivers for the pure PATA chips are prefixed with 'pata_',
not 'ata_'.
> obj-$(CONFIG_SATA_PROMISE) += sata_promise.o
> obj-$(CONFIG_SATA_QSTOR) += sata_qstor.o
> obj-$(CONFIG_SATA_SIL) += sata_sil.o
> diff --git a/drivers/ata/ata_sch.c b/drivers/ata/ata_sch.c
> new file mode 100644
> index 0000000..2c7b358
> --- /dev/null
> +++ b/drivers/ata/ata_sch.c
> @@ -0,0 +1,271 @@
[...]
> +/* see SCH datasheet page 351 */
> +enum {
> + D0TIM = 0x80, /* Device 0 Timing Register */
> + D1TIM = 0x84, /* Device 1 Timing Register */
> + PIO = 0x07, /* PIO Mode Bit Mask */
The SCH datasheet calls this field PM and since you've got all other names
form there, why not call it PM too?
> + MDM = (0x03 << 8), /* Multi-word DMA Mode Bit Mask */
> + UDM = (0x07 << 16), /* Ultra DMA Mode Bit Mask */
> + PPE = (1 << 30), /* Prefetch/Post Enable */
> + USD = (1 << 31), /* Use Synchronous DMA */
> +};
> +enum sch_controller_ids {
> + /* controller IDs */
> + sch_pata_100, /* SCH up to UDMA 100 */
> +};
I don't see why you need the above.
> +static unsigned int in_module_init = 1;
> +
> +static struct ata_port_operations sch_pata_ops = {
> + .inherits = &ata_bmdma_port_ops,
> + .cable_detect = ata_cable_unknown,
> + .set_piomode = sch_set_piomode,
> + .set_dmamode = sch_set_dmamode,
> + .prereset = ata_sff_prereset,
ata_sff_prereset is the default method, why not just inherit it?
> +/**
> + * sch_set_piomode - Initialize host controller PATA PIO timings
> + * @ap: Port whose timings we are configuring
> + * @adev: um
> + *
> + * Set PIO mode for device, in host controller PCI config space.
> + *
> + * LOCKING:
> + * None (inherited from caller).
> + */
> +
> +static void sch_set_piomode(struct ata_port *ap, struct ata_device *adev)
> +{
> + unsigned int pio = adev->pio_mode - XFER_PIO_0;
> + struct pci_dev *dev = to_pci_dev(ap->host->dev);
> + unsigned int port = adev->devno ? D1TIM : D0TIM;
> + unsigned int data;
> +
> + /* SCH only support primary channel with one master and one slave*/
> + if (ap->port_no != 0)
> + return;
There should be no references to the secondary channel from libata since
you should explicitly specify that there is no secondary channel.
> +
> + pci_read_config_dword(dev, port, &data);
> + /* see SCH datasheet page 351 */
> + /* enable PIO with PPE*/
No space before */...
> + data &= ~(PIO);
Unneeded parens.
> + data |= (PPE |pio);
You shouldn't enable prefetch for ATAPI deives I think -- look at what
ata_piix does...
Also, unneeded parens, no space after | operator. Be consistent please.
> + /* mask reserved bits */
Why?
> + data = data & (USD|PPE|UDM|MDM|PIO);
No spaces between | operator and operands.
> + pci_write_config_dword(dev, port, data);
> +}
> +
> +/**
> + * sch_set_dmamode - Initialize host controller PATA DMA timings
> + * @ap: Port whose timings we are configuring
> + * @adev: um
> + *
> + * Set MW/UDMA mode for device, in host controller PCI config space.
> + *
> + * LOCKING:
> + * None (inherited from caller).
> + */
> +
> +static void sch_set_dmamode(struct ata_port *ap, struct ata_device *adev)
> +{
> + unsigned int dma_mode = adev->dma_mode;
> + struct pci_dev *dev = to_pci_dev(ap->host->dev);
> + unsigned int port = adev->devno ? D1TIM : D0TIM;
> + unsigned int data;
> +
> + /* SCH only support primary channel with one master and one slave*/
> + if (ap->port_no != 0)
> + return;
Same comment as in sch_set_piomode().
> +
> + pci_read_config_dword(dev, port, &data);
> + /* see SCH datasheet page 351 */
> + if (dma_mode >= XFER_UDMA_0) {
> + /* enable Synchronous DMA mode */
> + data |= USD;
> + data &= ~(UDM);
Unneeded parens.
> + data |= (dma_mode - XFER_UDMA_0) << 16;
> + } else { /* must be MWDMA mode, since we masked SWDMA already */
> + data &= ~(USD|MDM);
No spaces between | and operands.
> + data |= (dma_mode - XFER_MW_DMA_0) << 8;
> + }
> + /* mask reserved bits */
Why again?
> + data = data & (USD|PPE|UDM|MDM|PIO);
No spaces between | and operands.
MBR, Sergei
next parent reply other threads:[~2008-05-05 10:34 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <20080505172356.636649e6@dxy.sh.intel.com>
2008-05-05 10:33 ` Sergei Shtylyov [this message]
[not found] ` <20080505224420.44730838@dxy.sh.intel.com>
2008-05-05 15:01 ` [PATCH] libata: Add Intel SCH PATA Support Sergei Shtylyov
2008-05-06 1:41 ` Alek Du
2008-05-06 11:44 ` Alan Cox
2008-05-06 11:50 ` Sergei Shtylyov
2008-05-06 12:04 ` Jeff Garzik
2008-05-06 12:09 ` Jeff Garzik
2008-05-06 13:31 ` again: " Alek Du
2008-05-06 14:18 ` Jeff Garzik
2008-05-06 16:20 ` Bartlomiej Zolnierkiewicz
2008-05-06 15:59 ` Alan Cox
2008-05-07 2:14 ` Alek Du
2008-05-07 17:38 ` Bartlomiej Zolnierkiewicz
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=481EE284.2010708@ru.mvista.com \
--to=sshtylyov@ru.mvista.com \
--cc=alan@lxorguk.ukuu.org.uk \
--cc=alek.du@intel.com \
--cc=bzolnier@gmail.com \
--cc=jgarzik@pobox.com \
--cc=linux-ide@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.