* [PATCH 0/3] OF-platform PATA driver @ 2007-11-27 15:37 Anton Vorontsov 2007-11-27 15:39 ` [PATCH 1/3] [libata] pata_platform: make probe and remove functions device type neutral Anton Vorontsov ` (4 more replies) 0 siblings, 5 replies; 43+ messages in thread From: Anton Vorontsov @ 2007-11-27 15:37 UTC (permalink / raw) To: linuxppc-dev, linux-ide; +Cc: Paul Mundt, Jeff Garzik, Arnd Bergmann Hi all, Here is the second spin of the OF-platform PATA driver and related patches. Changes since RFC: - nuked drivers/ata/pata_platform.h; - powerpc bits: proper localbus node added. Thanks for the previous review! This time I'm collecting acks, don't be shy to give 'em generously. ;-) Good luck, -- Anton Vorontsov email: cbou@mail.ru backup email: ya-cbou@yandex.ru irc://irc.freenode.net/bd2 ^ permalink raw reply [flat|nested] 43+ messages in thread
* [PATCH 1/3] [libata] pata_platform: make probe and remove functions device type neutral 2007-11-27 15:37 [PATCH 0/3] OF-platform PATA driver Anton Vorontsov @ 2007-11-27 15:39 ` Anton Vorontsov 2007-11-27 22:31 ` Arnd Bergmann 2007-11-27 15:39 ` [PATCH 2/3] [libata] pata_of_platform: OF-Platform PATA device driver Anton Vorontsov ` (3 subsequent siblings) 4 siblings, 1 reply; 43+ messages in thread From: Anton Vorontsov @ 2007-11-27 15:39 UTC (permalink / raw) To: linuxppc-dev, linux-ide Split pata_platform_{probe,remove} into two pieces: 1. pata_platform_{probe,remove} -- platform_device-dependant bits; 2. __ptata_platform_{probe,remove} -- device type neutral bits. This is done to not duplicate code for the OF-platform driver. Signed-off-by: Anton Vorontsov <avorontsov@ru.mvista.com> --- drivers/ata/pata_platform.c | 139 ++++++++++++++++++++++++----------------- include/linux/pata_platform.h | 8 +++ 2 files changed, 90 insertions(+), 57 deletions(-) diff --git a/drivers/ata/pata_platform.c b/drivers/ata/pata_platform.c index ac03a90..6436c38 100644 --- a/drivers/ata/pata_platform.c +++ b/drivers/ata/pata_platform.c @@ -93,14 +93,9 @@ static struct ata_port_operations pata_platform_port_ops = { }; static void pata_platform_setup_port(struct ata_ioports *ioaddr, - struct pata_platform_info *info) + unsigned int shift) { - unsigned int shift = 0; - /* Fixup the port shift for platforms that need it */ - if (info && info->ioport_shift) - shift = info->ioport_shift; - ioaddr->data_addr = ioaddr->cmd_addr + (ATA_REG_DATA << shift); ioaddr->error_addr = ioaddr->cmd_addr + (ATA_REG_ERR << shift); ioaddr->feature_addr = ioaddr->cmd_addr + (ATA_REG_FEATURE << shift); @@ -114,8 +109,12 @@ static void pata_platform_setup_port(struct ata_ioports *ioaddr, } /** - * pata_platform_probe - attach a platform interface - * @pdev: platform device + * __pata_platform_probe - attach a platform interface + * @dev: device + * @io_res: Resource representing I/O base + * @ctl_res: Resource representing CTL base + * @irq_res: Resource representing IRQ and its flags + * @ioport_shift: I/O port shift * * Register a platform bus IDE interface. Such interfaces are PIO and we * assume do not support IRQ sharing. @@ -135,42 +134,17 @@ static void pata_platform_setup_port(struct ata_ioports *ioaddr, * * If no IRQ resource is present, PIO polling mode is used instead. */ -static int __devinit pata_platform_probe(struct platform_device *pdev) +int __devinit __pata_platform_probe(struct device *dev, + struct resource *io_res, + struct resource *ctl_res, + struct resource *irq_res, + unsigned int ioport_shift) { - struct resource *io_res, *ctl_res; struct ata_host *host; struct ata_port *ap; - struct pata_platform_info *pp_info; unsigned int mmio; - int irq; - - /* - * Simple resource validation .. - */ - if ((pdev->num_resources != 3) && (pdev->num_resources != 2)) { - dev_err(&pdev->dev, "invalid number of resources\n"); - return -EINVAL; - } - - /* - * Get the I/O base first - */ - io_res = platform_get_resource(pdev, IORESOURCE_IO, 0); - if (io_res == NULL) { - io_res = platform_get_resource(pdev, IORESOURCE_MEM, 0); - if (unlikely(io_res == NULL)) - return -EINVAL; - } - - /* - * Then the CTL base - */ - ctl_res = platform_get_resource(pdev, IORESOURCE_IO, 1); - if (ctl_res == NULL) { - ctl_res = platform_get_resource(pdev, IORESOURCE_MEM, 1); - if (unlikely(ctl_res == NULL)) - return -EINVAL; - } + int irq = 0; + int irq_flags = 0; /* * Check for MMIO @@ -181,14 +155,15 @@ static int __devinit pata_platform_probe(struct platform_device *pdev) /* * And the IRQ */ - irq = platform_get_irq(pdev, 0); - if (irq < 0) - irq = 0; /* no irq */ + if (irq_res && irq_res->start > 0) { + irq = irq_res->start; + irq_flags = irq_res->flags; + } /* * Now that that's out of the way, wire up the port.. */ - host = ata_host_alloc(&pdev->dev, 1); + host = ata_host_alloc(dev, 1); if (!host) return -ENOMEM; ap = host->ports[0]; @@ -209,25 +184,24 @@ static int __devinit pata_platform_probe(struct platform_device *pdev) * Handle the MMIO case */ if (mmio) { - ap->ioaddr.cmd_addr = devm_ioremap(&pdev->dev, io_res->start, + ap->ioaddr.cmd_addr = devm_ioremap(dev, io_res->start, io_res->end - io_res->start + 1); - ap->ioaddr.ctl_addr = devm_ioremap(&pdev->dev, ctl_res->start, + ap->ioaddr.ctl_addr = devm_ioremap(dev, ctl_res->start, ctl_res->end - ctl_res->start + 1); } else { - ap->ioaddr.cmd_addr = devm_ioport_map(&pdev->dev, io_res->start, + ap->ioaddr.cmd_addr = devm_ioport_map(dev, io_res->start, io_res->end - io_res->start + 1); - ap->ioaddr.ctl_addr = devm_ioport_map(&pdev->dev, ctl_res->start, + ap->ioaddr.ctl_addr = devm_ioport_map(dev, ctl_res->start, ctl_res->end - ctl_res->start + 1); } if (!ap->ioaddr.cmd_addr || !ap->ioaddr.ctl_addr) { - dev_err(&pdev->dev, "failed to map IO/CTL base\n"); + dev_err(dev, "failed to map IO/CTL base\n"); return -ENOMEM; } ap->ioaddr.altstatus_addr = ap->ioaddr.ctl_addr; - pp_info = pdev->dev.platform_data; - pata_platform_setup_port(&ap->ioaddr, pp_info); + pata_platform_setup_port(&ap->ioaddr, ioport_shift); ata_port_desc(ap, "%s cmd 0x%llx ctl 0x%llx", mmio ? "mmio" : "ioport", (unsigned long long)io_res->start, @@ -235,26 +209,77 @@ static int __devinit pata_platform_probe(struct platform_device *pdev) /* activate */ return ata_host_activate(host, irq, irq ? ata_interrupt : NULL, - pp_info ? pp_info->irq_flags : 0, - &pata_platform_sht); + irq_flags, &pata_platform_sht); } +EXPORT_SYMBOL_GPL(__pata_platform_probe); /** - * pata_platform_remove - unplug a platform interface - * @pdev: platform device + * __pata_platform_remove - unplug a platform interface + * @dev: device * * A platform bus ATA device has been unplugged. Perform the needed * cleanup. Also called on module unload for any active devices. */ -static int __devexit pata_platform_remove(struct platform_device *pdev) +int __devexit __pata_platform_remove(struct device *dev) { - struct device *dev = &pdev->dev; struct ata_host *host = dev_get_drvdata(dev); ata_host_detach(host); return 0; } +EXPORT_SYMBOL_GPL(__pata_platform_remove); + +static int __devinit pata_platform_probe(struct platform_device *pdev) +{ + struct resource *io_res; + struct resource *ctl_res; + struct resource *irq_res; + struct pata_platform_info *pp_info = pdev->dev.platform_data; + + /* + * Simple resource validation .. + */ + if ((pdev->num_resources != 3) && (pdev->num_resources != 2)) { + dev_err(&pdev->dev, "invalid number of resources\n"); + return -EINVAL; + } + + /* + * Get the I/O base first + */ + io_res = platform_get_resource(pdev, IORESOURCE_IO, 0); + if (io_res == NULL) { + io_res = platform_get_resource(pdev, IORESOURCE_MEM, 0); + if (unlikely(io_res == NULL)) + return -EINVAL; + } + + /* + * Then the CTL base + */ + ctl_res = platform_get_resource(pdev, IORESOURCE_IO, 1); + if (ctl_res == NULL) { + ctl_res = platform_get_resource(pdev, IORESOURCE_MEM, 1); + if (unlikely(ctl_res == NULL)) + return -EINVAL; + } + + /* + * And the IRQ + */ + irq_res = platform_get_resource(pdev, IORESOURCE_IRQ, 0); + if (irq_res) + irq_res->flags = pp_info ? pp_info->irq_flags : 0; + + return __pata_platform_probe(&pdev->dev, io_res, ctl_res, irq_res, + pp_info ? pp_info->ioport_shift : 0); +} + +static int __devexit pata_platform_remove(struct platform_device *pdev) +{ + return __pata_platform_remove(&pdev->dev); +} static struct platform_driver pata_platform_driver = { .probe = pata_platform_probe, diff --git a/include/linux/pata_platform.h b/include/linux/pata_platform.h index 5799e8d..0b11f6b 100644 --- a/include/linux/pata_platform.h +++ b/include/linux/pata_platform.h @@ -15,4 +15,12 @@ struct pata_platform_info { unsigned int irq_flags; }; +extern int __devinit __pata_platform_probe(struct device *dev, + struct resource *io_res, + struct resource *ctl_res, + struct resource *irq_res, + unsigned int ioport_shift); + +extern int __devexit __pata_platform_remove(struct device *dev); + #endif /* __LINUX_PATA_PLATFORM_H */ -- 1.5.2.2 ^ permalink raw reply related [flat|nested] 43+ messages in thread
* Re: [PATCH 1/3] [libata] pata_platform: make probe and remove functions device type neutral 2007-11-27 15:39 ` [PATCH 1/3] [libata] pata_platform: make probe and remove functions device type neutral Anton Vorontsov @ 2007-11-27 22:31 ` Arnd Bergmann 0 siblings, 0 replies; 43+ messages in thread From: Arnd Bergmann @ 2007-11-27 22:31 UTC (permalink / raw) To: linuxppc-dev; +Cc: linux-ide On Tuesday 27 November 2007, Anton Vorontsov wrote: > Split pata_platform_{probe,remove} into two pieces: > 1. pata_platform_{probe,remove} -- platform_device-dependant bits; > 2. __ptata_platform_{probe,remove} -- device type neutral bits. > > This is done to not duplicate code for the OF-platform driver. > > Signed-off-by: Anton Vorontsov <avorontsov@ru.mvista.com> Acked-by: Arnd Bergmann <arnd@arndb.de> ^ permalink raw reply [flat|nested] 43+ messages in thread
* [PATCH 2/3] [libata] pata_of_platform: OF-Platform PATA device driver 2007-11-27 15:37 [PATCH 0/3] OF-platform PATA driver Anton Vorontsov 2007-11-27 15:39 ` [PATCH 1/3] [libata] pata_platform: make probe and remove functions device type neutral Anton Vorontsov @ 2007-11-27 15:39 ` Anton Vorontsov 2007-11-27 21:22 ` Olof Johansson ` (2 more replies) 2007-11-27 15:39 ` [PATCH 3/3] [POWERPC] MPC8349E-mITX: introduce localbus and pata nodes Anton Vorontsov ` (2 subsequent siblings) 4 siblings, 3 replies; 43+ messages in thread From: Anton Vorontsov @ 2007-11-27 15:39 UTC (permalink / raw) To: linuxppc-dev, linux-ide This driver nicely wraps around pata_platform library functions, and provides OF platform bus bindings to the PATA devices. Signed-off-by: Anton Vorontsov <avorontsov@ru.mvista.com> --- drivers/ata/Kconfig | 10 +++++ drivers/ata/Makefile | 1 + drivers/ata/pata_of_platform.c | 86 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 97 insertions(+), 0 deletions(-) create mode 100644 drivers/ata/pata_of_platform.c diff --git a/drivers/ata/Kconfig b/drivers/ata/Kconfig index ba63619..5a492fa 100644 --- a/drivers/ata/Kconfig +++ b/drivers/ata/Kconfig @@ -614,6 +614,16 @@ config PATA_PLATFORM If unsure, say N. +config PATA_OF_PLATFORM + tristate "OpenFirmware platform device PATA support" + depends on PATA_PLATFORM && PPC_OF + help + This option enables support for generic directly connected ATA + devices commonly found on embedded systems with OpenFirmware + bindings. + + If unsure, say N. + config PATA_ICSIDE tristate "Acorn ICS PATA support" depends on ARM && ARCH_ACORN diff --git a/drivers/ata/Makefile b/drivers/ata/Makefile index b13feb2..ebcee64 100644 --- a/drivers/ata/Makefile +++ b/drivers/ata/Makefile @@ -67,6 +67,7 @@ obj-$(CONFIG_PATA_IXP4XX_CF) += pata_ixp4xx_cf.o obj-$(CONFIG_PATA_SCC) += pata_scc.o obj-$(CONFIG_PATA_BF54X) += pata_bf54x.o obj-$(CONFIG_PATA_PLATFORM) += pata_platform.o +obj-$(CONFIG_PATA_OF_PLATFORM) += pata_of_platform.o obj-$(CONFIG_PATA_ICSIDE) += pata_icside.o # Should be last but two libata driver obj-$(CONFIG_PATA_ACPI) += pata_acpi.o diff --git a/drivers/ata/pata_of_platform.c b/drivers/ata/pata_of_platform.c new file mode 100644 index 0000000..e6c769c --- /dev/null +++ b/drivers/ata/pata_of_platform.c @@ -0,0 +1,86 @@ +/* + * OF-platform PATA driver + * + * Copyright (c) 2007 MontaVista Software, Inc. + * Anton Vorontsov <avorontsov@ru.mvista.com> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License (Version 2) as + * published by the Free Software Foundation. + */ + +#include <linux/kernel.h> +#include <linux/module.h> +#include <linux/of_platform.h> +#include <linux/pata_platform.h> + +static int __devinit pata_of_platform_probe(struct of_device *ofdev, + const struct of_device_id *match) +{ + int ret; + struct device_node *dn = ofdev->node; + struct resource io_res; + struct resource ctl_res; + struct resource irq_res; + unsigned int ioport_shift = 0; + uint32_t *prop; + + ret = of_address_to_resource(dn, 0, &io_res); + if (ret) { + dev_err(&ofdev->dev, "can't get IO address from " + "device tree\n"); + return -EINVAL; + } + + ret = of_address_to_resource(dn, 1, &ctl_res); + if (ret) { + dev_err(&ofdev->dev, "can't get CTL address from " + "device tree\n"); + return -EINVAL; + } + + ret = of_irq_to_resource(dn, 0, &irq_res); + if (ret == NO_IRQ) + irq_res.start = irq_res.end = -1; + else + irq_res.flags = 0; + + prop = (uint32_t *)of_get_property(dn, "ioport-shift", NULL); + if (prop) + ioport_shift = *prop; + + return __pata_platform_probe(&ofdev->dev, &io_res, &ctl_res, &irq_res, + ioport_shift); +} + +static int __devexit pata_of_platform_remove(struct of_device *ofdev) +{ + return __pata_platform_remove(&ofdev->dev); +} + +static struct of_device_id pata_of_platform_match[] = { + { .compatible = "pata-platform", }, +}; + +static struct of_platform_driver pata_of_platform_driver = { + .name = "pata_of_platform", + .match_table = pata_of_platform_match, + .probe = pata_of_platform_probe, + .remove = __devexit_p(pata_of_platform_remove), +}; + +static int __init pata_of_platform_init(void) +{ + return of_register_platform_driver(&pata_of_platform_driver); +} +module_init(pata_of_platform_init); + +static void __exit pata_of_platform_exit(void) +{ + of_unregister_platform_driver(&pata_of_platform_driver); +} +module_exit(pata_of_platform_exit); + +MODULE_DESCRIPTION("OF-platform PATA driver"); +MODULE_AUTHOR("Anton Vorontsov <avorontsov@ru.mvista.com>"); +MODULE_LICENSE("GPL"); -- 1.5.2.2 ^ permalink raw reply related [flat|nested] 43+ messages in thread
* Re: [PATCH 2/3] [libata] pata_of_platform: OF-Platform PATA device driver 2007-11-27 15:39 ` [PATCH 2/3] [libata] pata_of_platform: OF-Platform PATA device driver Anton Vorontsov @ 2007-11-27 21:22 ` Olof Johansson 2007-11-27 21:32 ` Arnd Bergmann 2007-11-28 0:41 ` Stephen Rothwell 2007-12-02 3:59 ` Olof Johansson 2 siblings, 1 reply; 43+ messages in thread From: Olof Johansson @ 2007-11-27 21:22 UTC (permalink / raw) To: Anton Vorontsov; +Cc: linuxppc-dev, linux-ide On Tue, Nov 27, 2007 at 06:39:08PM +0300, Anton Vorontsov wrote: > This driver nicely wraps around pata_platform library functions, > and provides OF platform bus bindings to the PATA devices. > +static struct of_device_id pata_of_platform_match[] = { > + { .compatible = "pata-platform", }, > +}; "pata-platform" really means nothing outside of linux. A more generic label would be useful. -Olof ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: [PATCH 2/3] [libata] pata_of_platform: OF-Platform PATA device driver 2007-11-27 21:22 ` Olof Johansson @ 2007-11-27 21:32 ` Arnd Bergmann 2007-11-28 15:49 ` Anton Vorontsov 2007-11-28 16:29 ` Sergei Shtylyov 0 siblings, 2 replies; 43+ messages in thread From: Arnd Bergmann @ 2007-11-27 21:32 UTC (permalink / raw) To: linuxppc-dev; +Cc: Olof Johansson, linux-ide On Tuesday 27 November 2007, Olof Johansson wrote: > On Tue, Nov 27, 2007 at 06:39:08PM +0300, Anton Vorontsov wrote: > > This driver nicely wraps around pata_platform library functions, > > and provides OF platform bus bindings to the PATA devices. >=20 > > +static struct of_device_id pata_of_platform_match[] =3D { > > +=A0=A0=A0=A0=A0{ .compatible =3D "pata-platform", }, > > +}; >=20 > "pata-platform" really means nothing outside of linux. A more > generic label would be useful. Maybe the name of the standards it supports? Could be "ata-4", "ata-5" and the like, or the exact transfer mode, like "pata-udma-5", "pata-pio-3", "sata-150", etc. Arnd <>< ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: [PATCH 2/3] [libata] pata_of_platform: OF-Platform PATA device driver 2007-11-27 21:32 ` Arnd Bergmann @ 2007-11-28 15:49 ` Anton Vorontsov 2007-11-28 16:11 ` Sergei Shtylyov 2007-11-28 16:29 ` Sergei Shtylyov 1 sibling, 1 reply; 43+ messages in thread From: Anton Vorontsov @ 2007-11-28 15:49 UTC (permalink / raw) To: Arnd Bergmann; +Cc: Olof Johansson, linuxppc-dev, linux-ide On Tue, Nov 27, 2007 at 10:32:58PM +0100, Arnd Bergmann wrote: > On Tuesday 27 November 2007, Olof Johansson wrote: > > On Tue, Nov 27, 2007 at 06:39:08PM +0300, Anton Vorontsov wrote: > > > This driver nicely wraps around pata_platform library functions, > > > and provides OF platform bus bindings to the PATA devices. > > > > > +static struct of_device_id pata_of_platform_match[] = { > > > + { .compatible = "pata-platform", }, > > > +}; > > > > "pata-platform" really means nothing outside of linux. A more > > generic label would be useful. Agreed. > Maybe the name of the standards it supports? Could be > "ata-4", "ata-5" and the like, or the exact transfer mode, like > "pata-udma-5", "pata-pio-3", "sata-150", etc. You're quite optimistic about pata_platform capabilities. ;-) As far as I know it is [obviously] supports PIO modes only. And so far I was able to get max 5.28 MB/s read transfers. Which looks like ideal case for PIO1 (CF I'm testing on is 3.0, max. PIO4). I've modified pio_mask appropriately, plus I've tried to comment out .set_mode = pata_platform_set_mode, and now it says: ata5: PATA max PIO4 mmio cmd 0xf0000000 ctl 0xf000020c irq 24 ata5.00: CFA: TOSHIBA THNCF512MQG, 3.00, max PIO4 ata5.00: configured for PIO4 ata5.00: configured for PIO4 That looks good, but speed is the same. Oh well, it's another matter. Back to dts, I think pata-pio-X is good scheme. That way we can pass pio_mask via device tree. Sounds reasonable? -- Anton Vorontsov email: cbou@mail.ru backup email: ya-cbou@yandex.ru irc://irc.freenode.net/bd2 ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: [PATCH 2/3] [libata] pata_of_platform: OF-Platform PATA device driver 2007-11-28 15:49 ` Anton Vorontsov @ 2007-11-28 16:11 ` Sergei Shtylyov 2007-11-29 0:54 ` Anton Vorontsov 0 siblings, 1 reply; 43+ messages in thread From: Sergei Shtylyov @ 2007-11-28 16:11 UTC (permalink / raw) To: avorontsov; +Cc: Olof Johansson, linuxppc-dev, Arnd Bergmann, linux-ide Anton Vorontsov wrote: >>>>This driver nicely wraps around pata_platform library functions, >>>>and provides OF platform bus bindings to the PATA devices. >>>>+static struct of_device_id pata_of_platform_match[] = { >>>>+ { .compatible = "pata-platform", }, >>>>+}; >>>"pata-platform" really means nothing outside of linux. A more >>>generic label would be useful. > Agreed. Now you're quick to agree. :-) >>Maybe the name of the standards it supports? Could be >>"ata-4", "ata-5" and the like, or the exact transfer mode, like >>"pata-udma-5", "pata-pio-3", "sata-150", etc. > You're quite optimistic about pata_platform capabilities. ;-) Indeed. :-) > As far as I know it is [obviously] supports PIO modes only. And so > far I was able to get max 5.28 MB/s read transfers. Which looks like > ideal case for PIO1 (CF I'm testing on is 3.0, max. PIO4). Believe me, it's a great speed even for PIO4. Most systems only show 3+ MiB/s in this mode according to hdparm. > I've modified pio_mask appropriately, plus I've tried to comment > out .set_mode = pata_platform_set_mode, and now it says: > ata5: PATA max PIO4 mmio cmd 0xf0000000 ctl 0xf000020c irq 24 > ata5.00: CFA: TOSHIBA THNCF512MQG, 3.00, max PIO4 > ata5.00: configured for PIO4 > ata5.00: configured for PIO4 > That looks good, but speed is the same. Oh well, it's another > matter. > Back to dts, I think pata-pio-X is good scheme. That way we can > pass pio_mask via device tree. Sounds reasonable? Grumble. Can't we pass this via some property other than "compatible"? I'm opposed to "ata-5" and the like in there as well cause it's not clear what information this would provide. Why people so love to make things complex WRT the "compatible" property -- instead of making the task of selecting a proper driver more simple, they tend to make it mode complex by trying to specify values that have quite little to do with the device's programming interface itself... MBR, Sergei ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: [PATCH 2/3] [libata] pata_of_platform: OF-Platform PATA device driver 2007-11-28 16:11 ` Sergei Shtylyov @ 2007-11-29 0:54 ` Anton Vorontsov 2007-11-30 10:17 ` Sergei Shtylyov 0 siblings, 1 reply; 43+ messages in thread From: Anton Vorontsov @ 2007-11-29 0:54 UTC (permalink / raw) To: Sergei Shtylyov; +Cc: Olof Johansson, linuxppc-dev, Arnd Bergmann, linux-ide On Wed, Nov 28, 2007 at 07:11:19PM +0300, Sergei Shtylyov wrote: > Anton Vorontsov wrote: > > >>>>This driver nicely wraps around pata_platform library functions, > >>>>and provides OF platform bus bindings to the PATA devices. > > >>>>+static struct of_device_id pata_of_platform_match[] = { > >>>>+ { .compatible = "pata-platform", }, > >>>>+}; > > >>>"pata-platform" really means nothing outside of linux. A more > >>>generic label would be useful. > > > Agreed. > > Now you're quick to agree. :-) I'm quick to change my mind either. ;-) *BOOM*, I changed my mind. > >>Maybe the name of the standards it supports? Could be > >>"ata-4", "ata-5" and the like, or the exact transfer mode, like > >>"pata-udma-5", "pata-pio-3", "sata-150", etc. > > > You're quite optimistic about pata_platform capabilities. ;-) > > Indeed. :-) > > > As far as I know it is [obviously] supports PIO modes only. And so > > far I was able to get max 5.28 MB/s read transfers. Which looks like > > ideal case for PIO1 (CF I'm testing on is 3.0, max. PIO4). > > Believe me, it's a great speed even for PIO4. Most systems only show 3+ > MiB/s in this mode according to hdparm. > > > I've modified pio_mask appropriately, plus I've tried to comment > > out .set_mode = pata_platform_set_mode, and now it says: > > > ata5: PATA max PIO4 mmio cmd 0xf0000000 ctl 0xf000020c irq 24 > > ata5.00: CFA: TOSHIBA THNCF512MQG, 3.00, max PIO4 > > ata5.00: configured for PIO4 > > ata5.00: configured for PIO4 > > > That looks good, but speed is the same. Oh well, it's another > > matter. > > > Back to dts, I think pata-pio-X is good scheme. That way we can > > pass pio_mask via device tree. Sounds reasonable? > > Grumble. Can't we pass this via some property other than "compatible"? I'm > opposed to "ata-5" and the like in there as well cause it's not clear what > information this would provide. Why people so love to make things complex WRT > the "compatible" property -- instead of making the task of selecting a proper > driver more simple, they tend to make it mode complex by trying to specify > values that have quite little to do with the device's programming interface > itself... Ok, now I'm agree here. dts already specifying "fsl,mpc8349emitx-pata", second compatible entry is okay to mean nothing outside Linux itself, there are plenty of examples for such kind. Remaining question: any preferred name for that property? pio-mode okay? It's assuming that PIO6 capable bus supports PIO0 as well, thus no mask. -- Anton Vorontsov email: cbou@mail.ru backup email: ya-cbou@yandex.ru irc://irc.freenode.net/bd2 ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: [PATCH 2/3] [libata] pata_of_platform: OF-Platform PATA device driver 2007-11-29 0:54 ` Anton Vorontsov @ 2007-11-30 10:17 ` Sergei Shtylyov 2007-11-30 10:58 ` Anton Vorontsov 0 siblings, 1 reply; 43+ messages in thread From: Sergei Shtylyov @ 2007-11-30 10:17 UTC (permalink / raw) To: cbou; +Cc: Olof Johansson, linuxppc-dev, Arnd Bergmann, linux-ide Anton Vorontsov wrote: > Remaining question: any preferred name for that property? pio-mode okay? > It's assuming that PIO6 capable bus supports PIO0 as well, thus no mask. I've already suggested "generic". A name "simple" also comes to my mind. WBR, Sergei ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: [PATCH 2/3] [libata] pata_of_platform: OF-Platform PATA device driver 2007-11-30 10:17 ` Sergei Shtylyov @ 2007-11-30 10:58 ` Anton Vorontsov 2007-11-30 11:05 ` Sergei Shtylyov 2007-11-30 11:43 ` Sergei Shtylyov 0 siblings, 2 replies; 43+ messages in thread From: Anton Vorontsov @ 2007-11-30 10:58 UTC (permalink / raw) To: Sergei Shtylyov Cc: Olof Johansson, cbou, linux-ide, Arnd Bergmann, linuxppc-dev On Fri, Nov 30, 2007 at 01:17:22PM +0300, Sergei Shtylyov wrote: > Anton Vorontsov wrote: > > >Remaining question: any preferred name for that property? pio-mode okay? > >It's assuming that PIO6 capable bus supports PIO0 as well, thus no mask. > > I've already suggested "generic". A name "simple" also comes to my mind. You've misread my question. I didn't ask about driver name, but pio-mode property. As for the driver name, it doesn't matter at all, as I've said already: it's Linux specific anyway, and another compatible properties could be added at any time, to a device tree and/or to the OF driver itself (if some real OpenFirmware will pass some meaningful compatible property that we'll have to match in that driver). "generic" name is also bad one, it's confusing wrt ata_generic.c driver (PCI). "simple" name doesn't tell anything at all. So, I'd rather stick with -platform name. Thanks, -- Anton Vorontsov email: cbou@mail.ru backup email: ya-cbou@yandex.ru irc://irc.freenode.net/bd2 ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: [PATCH 2/3] [libata] pata_of_platform: OF-Platform PATA device driver 2007-11-30 10:58 ` Anton Vorontsov @ 2007-11-30 11:05 ` Sergei Shtylyov 2007-11-30 11:45 ` Anton Vorontsov 2007-11-30 11:43 ` Sergei Shtylyov 1 sibling, 1 reply; 43+ messages in thread From: Sergei Shtylyov @ 2007-11-30 11:05 UTC (permalink / raw) To: avorontsov; +Cc: Olof Johansson, cbou, linux-ide, Arnd Bergmann, linuxppc-dev Anton Vorontsov wrote: >>>Remaining question: any preferred name for that property? pio-mode okay? >>>It's assuming that PIO6 capable bus supports PIO0 as well, thus no mask. >> I've already suggested "generic". A name "simple" also comes to my mind. > You've misread my question. I didn't ask about driver name, but pio-mode > property. I'm OK with "pio-mode" then. Just don't think it makes much sense in the context of this driver which has no provision for the programming the mode timings (and if there were some provision, the *generic* platform driver couldn't handle it anyway). > As for the driver name, it doesn't matter at all, as I've said already: > it's Linux specific anyway, and another compatible properties could be > added at any time, to a device tree and/or to the OF driver itself (if > some real OpenFirmware will pass some meaningful compatible property > that we'll have to match in that driver). > "generic" name is also bad one, it's confusing wrt ata_generic.c > driver (PCI). The "compatible" property doesn't have to contain the driver name, so there should be no confusion with the driver names. It's just different name spaces. :-) > "simple" name doesn't tell anything at all. So, I'd rather stick with -platform name. Well, those two should be "generic-ata" and "simple-ata" of course. And it *does* tell that the driver just provides taskfile control, without the transfer timing control and other fancy stuff... > Thanks, MBR, Sergei ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: [PATCH 2/3] [libata] pata_of_platform: OF-Platform PATA device driver 2007-11-30 11:05 ` Sergei Shtylyov @ 2007-11-30 11:45 ` Anton Vorontsov 0 siblings, 0 replies; 43+ messages in thread From: Anton Vorontsov @ 2007-11-30 11:45 UTC (permalink / raw) To: Sergei Shtylyov Cc: Olof Johansson, cbou, linux-ide, Arnd Bergmann, linuxppc-dev On Fri, Nov 30, 2007 at 02:05:01PM +0300, Sergei Shtylyov wrote: > Anton Vorontsov wrote: > > >>>Remaining question: any preferred name for that property? pio-mode okay? > >>>It's assuming that PIO6 capable bus supports PIO0 as well, thus no mask. > > >> I've already suggested "generic". A name "simple" also comes to my mind. > > >You've misread my question. I didn't ask about driver name, but pio-mode > >property. > > I'm OK with "pio-mode" then. Just don't think it makes much sense in the > context of this driver which has no provision for the programming the mode > timings (and if there were some provision, the *generic* platform driver > couldn't handle it anyway). What sense it makes then?.. We're specifying bus limitations wrt PIO modes. Oh, I think you meant that bus can't be reconfigured by generic driver, that's true. But I didn't mean this as a purpose for pio-mode property (though it still could be used for that purpose by other drivers). -- Anton Vorontsov email: cbou@mail.ru backup email: ya-cbou@yandex.ru irc://irc.freenode.net/bd2 ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: [PATCH 2/3] [libata] pata_of_platform: OF-Platform PATA device driver 2007-11-30 10:58 ` Anton Vorontsov 2007-11-30 11:05 ` Sergei Shtylyov @ 2007-11-30 11:43 ` Sergei Shtylyov 2007-11-30 12:09 ` Anton Vorontsov 1 sibling, 1 reply; 43+ messages in thread From: Sergei Shtylyov @ 2007-11-30 11:43 UTC (permalink / raw) To: avorontsov; +Cc: Olof Johansson, cbou, linux-ide, Arnd Bergmann, linuxppc-dev Anton Vorontsov wrote: >>>Remaining question: any preferred name for that property? pio-mode okay? >>>It's assuming that PIO6 capable bus supports PIO0 as well, thus no mask. >> I've already suggested "generic". A name "simple" also comes to my mind. > You've misread my question. I didn't ask about driver name, but pio-mode > property. Probably "max-pio-mode" is a better variant. MBR, Sergei ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: [PATCH 2/3] [libata] pata_of_platform: OF-Platform PATA device driver 2007-11-30 11:43 ` Sergei Shtylyov @ 2007-11-30 12:09 ` Anton Vorontsov 0 siblings, 0 replies; 43+ messages in thread From: Anton Vorontsov @ 2007-11-30 12:09 UTC (permalink / raw) To: Sergei Shtylyov Cc: Olof Johansson, cbou, linux-ide, Arnd Bergmann, linuxppc-dev On Fri, Nov 30, 2007 at 02:43:50PM +0300, Sergei Shtylyov wrote: > Anton Vorontsov wrote: > > >>>Remaining question: any preferred name for that property? pio-mode okay? > >>>It's assuming that PIO6 capable bus supports PIO0 as well, thus no mask. > > >> I've already suggested "generic". A name "simple" also comes to my mind. > > >You've misread my question. I didn't ask about driver name, but pio-mode > >property. > > Probably "max-pio-mode" is a better variant. Why? pio-mode in pata-platform context is just something highly dependent on hardware, can not be touched. And we're passing pio-mode information from the hardware dependent source -- device tree. The only difference between pata-platform's max-pio-mode and dedicated ata driver's pio-mode is that that for the first case bus already configured for specified mode, and for the second case dedicated driver should actually use this information to configure hardware. No need for max- prefix, I think. -- Anton Vorontsov email: cbou@mail.ru backup email: ya-cbou@yandex.ru irc://irc.freenode.net/bd2 ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: [PATCH 2/3] [libata] pata_of_platform: OF-Platform PATA device driver 2007-11-27 21:32 ` Arnd Bergmann 2007-11-28 15:49 ` Anton Vorontsov @ 2007-11-28 16:29 ` Sergei Shtylyov 1 sibling, 0 replies; 43+ messages in thread From: Sergei Shtylyov @ 2007-11-28 16:29 UTC (permalink / raw) To: Arnd Bergmann; +Cc: Olof Johansson, linuxppc-dev, linux-ide Hello. Arnd Bergmann wrote: >>>This driver nicely wraps around pata_platform library functions, >>>and provides OF platform bus bindings to the PATA devices. >>>+static struct of_device_id pata_of_platform_match[] = { >>>+ { .compatible = "pata-platform", }, >>>+}; >>"pata-platform" really means nothing outside of linux. A more >>generic label would be useful. > Maybe the name of the standards it supports? Could be > "ata-4", "ata-5" and the like, It's not clear what info this would provide. > or the exact transfer mode, like > "pata-udma-5", "pata-pio-3", "sata-150", etc. I think this info should follow from the compatible property value implicitly, or maybe this info should be conveyed in some optional properties. It doesn't make sense to the generic platform driver anyway since it has no notion about the mode programming specifics. I think that as the device being driven is assumed to be a generic IDE device, the "compatible" property should contain "generic" or something alike (as well as usual board's and chip's names). > Arnd <>< MBR, Sergei ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: [PATCH 2/3] [libata] pata_of_platform: OF-Platform PATA device driver 2007-11-27 15:39 ` [PATCH 2/3] [libata] pata_of_platform: OF-Platform PATA device driver Anton Vorontsov 2007-11-27 21:22 ` Olof Johansson @ 2007-11-28 0:41 ` Stephen Rothwell 2007-12-02 3:59 ` Olof Johansson 2 siblings, 0 replies; 43+ messages in thread From: Stephen Rothwell @ 2007-11-28 0:41 UTC (permalink / raw) To: Anton Vorontsov; +Cc: linuxppc-dev, linux-ide [-- Attachment #1: Type: text/plain, Size: 599 bytes --] On Tue, 27 Nov 2007 18:39:08 +0300 Anton Vorontsov <avorontsov@ru.mvista.com> wrote: > > +static int __devinit pata_of_platform_probe(struct of_device *ofdev, > + const struct of_device_id *match) > +{ > + uint32_t *prop; Make this "const uint32_t *prop" or (more kernel like) "const u32 *prop" ... > + prop = (uint32_t *)of_get_property(dn, "ioport-shift", NULL); then you don't need this cast. Anytime you use a cast to get rid of "const", is probably a mistake. -- Cheers, Stephen Rothwell sfr@canb.auug.org.au http://www.canb.auug.org.au/~sfr/ [-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --] ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: [PATCH 2/3] [libata] pata_of_platform: OF-Platform PATA device driver 2007-11-27 15:39 ` [PATCH 2/3] [libata] pata_of_platform: OF-Platform PATA device driver Anton Vorontsov 2007-11-27 21:22 ` Olof Johansson 2007-11-28 0:41 ` Stephen Rothwell @ 2007-12-02 3:59 ` Olof Johansson 2 siblings, 0 replies; 43+ messages in thread From: Olof Johansson @ 2007-12-02 3:59 UTC (permalink / raw) To: Anton Vorontsov; +Cc: linuxppc-dev, linux-ide On Tue, Nov 27, 2007 at 06:39:08PM +0300, Anton Vorontsov wrote: > +static struct of_device_id pata_of_platform_match[] = { > + { .compatible = "pata-platform", }, > +}; On top of previous comment about the compatible string being inappropriate: You should add a MODULE_DEVICE_TABLE() entry for this. Dave Woodhouse pointed out it's needed for autoloading modules (i.e. by the fedora installer, etc). -Olof ^ permalink raw reply [flat|nested] 43+ messages in thread
* [PATCH 3/3] [POWERPC] MPC8349E-mITX: introduce localbus and pata nodes 2007-11-27 15:37 [PATCH 0/3] OF-platform PATA driver Anton Vorontsov 2007-11-27 15:39 ` [PATCH 1/3] [libata] pata_platform: make probe and remove functions device type neutral Anton Vorontsov 2007-11-27 15:39 ` [PATCH 2/3] [libata] pata_of_platform: OF-Platform PATA device driver Anton Vorontsov @ 2007-11-27 15:39 ` Anton Vorontsov 2007-11-27 15:49 ` Sergei Shtylyov 2007-11-28 9:51 ` [PATCH 0/3] OF-platform PATA driver Paul Mundt 2007-12-01 22:54 ` Jeff Garzik 4 siblings, 1 reply; 43+ messages in thread From: Anton Vorontsov @ 2007-11-27 15:39 UTC (permalink / raw) To: linuxppc-dev, linux-ide This patch adds localbus and pata nodes to use CF IDE interface on MPC8349E-mITX boards. Patch also adds code to probe localbus. Signed-off-by: Anton Vorontsov <avorontsov@ru.mvista.com> --- arch/powerpc/boot/dts/mpc8349emitx.dts | 17 ++++++++++++++++- arch/powerpc/platforms/83xx/mpc834x_itx.c | 17 +++++++++++++++++ 2 files changed, 33 insertions(+), 1 deletions(-) diff --git a/arch/powerpc/boot/dts/mpc8349emitx.dts b/arch/powerpc/boot/dts/mpc8349emitx.dts index 5072f6d..7a97068 100644 --- a/arch/powerpc/boot/dts/mpc8349emitx.dts +++ b/arch/powerpc/boot/dts/mpc8349emitx.dts @@ -249,6 +249,21 @@ device_type = "pci"; }; + localbus@e0005000 { + #address-cells = <2>; + #size-cells = <1>; + compatible = "fsl,mpc8349emitx-localbus", + "fsl,mpc8349e-localbus", + "fsl,pq2pro-localbus"; + reg = <e0005000 d8>; + ranges = <3 0 f0000000 210>; - + pata@3,0 { + compatible = "fsl,mpc8349emitx-pata", "pata-platform"; + reg = <3 0 10 3 20c 4>; + ioport-shift = <1>; + interrupts = <17 8>; + interrupt-parent = <&ipic>; + }; + }; }; diff --git a/arch/powerpc/platforms/83xx/mpc834x_itx.c b/arch/powerpc/platforms/83xx/mpc834x_itx.c index aa76819..ea5f176 100644 --- a/arch/powerpc/platforms/83xx/mpc834x_itx.c +++ b/arch/powerpc/platforms/83xx/mpc834x_itx.c @@ -23,6 +23,7 @@ #include <linux/delay.h> #include <linux/seq_file.h> #include <linux/root_dev.h> +#include <linux/of_platform.h> #include <asm/system.h> #include <asm/atomic.h> @@ -37,6 +38,22 @@ #include "mpc83xx.h" +static struct of_device_id mpc834x_itx_ids[] = { + { .name = "localbus", }, + {}, +}; + +static int __init mpc834x_itx_declare_of_platform_devices(void) +{ + if (!machine_is(mpc834x_itx)) + return 0; + + of_platform_bus_probe(NULL, mpc834x_itx_ids, NULL); + + return 0; +} +device_initcall(mpc834x_itx_declare_of_platform_devices); + /* ************************************************************************ * * Setup the architecture -- 1.5.2.2 ^ permalink raw reply related [flat|nested] 43+ messages in thread
* Re: [PATCH 3/3] [POWERPC] MPC8349E-mITX: introduce localbus and pata nodes 2007-11-27 15:39 ` [PATCH 3/3] [POWERPC] MPC8349E-mITX: introduce localbus and pata nodes Anton Vorontsov @ 2007-11-27 15:49 ` Sergei Shtylyov 2007-11-27 16:41 ` Anton Vorontsov 2007-11-27 21:18 ` Kumar Gala 0 siblings, 2 replies; 43+ messages in thread From: Sergei Shtylyov @ 2007-11-27 15:49 UTC (permalink / raw) To: Anton Vorontsov; +Cc: linuxppc-dev, linux-ide Hello. Anton Vorontsov wrote: > This patch adds localbus and pata nodes to use CF IDE interface > on MPC8349E-mITX boards. > Patch also adds code to probe localbus. > Signed-off-by: Anton Vorontsov <avorontsov@ru.mvista.com> > --- > arch/powerpc/boot/dts/mpc8349emitx.dts | 17 ++++++++++++++++- > arch/powerpc/platforms/83xx/mpc834x_itx.c | 17 +++++++++++++++++ > 2 files changed, 33 insertions(+), 1 deletions(-) > diff --git a/arch/powerpc/boot/dts/mpc8349emitx.dts b/arch/powerpc/boot/dts/mpc8349emitx.dts > index 5072f6d..7a97068 100644 > --- a/arch/powerpc/boot/dts/mpc8349emitx.dts > +++ b/arch/powerpc/boot/dts/mpc8349emitx.dts > @@ -249,6 +249,21 @@ > device_type = "pci"; > }; > > + localbus@e0005000 { > + #address-cells = <2>; > + #size-cells = <1>; > + compatible = "fsl,mpc8349emitx-localbus", Board compatible bus? > + "fsl,mpc8349e-localbus", > + "fsl,pq2pro-localbus"; > + reg = <e0005000 d8>; > + ranges = <3 0 f0000000 210>; > > - > + pata@3,0 { > + compatible = "fsl,mpc8349emitx-pata", "pata-platform"; > + reg = <3 0 10 3 20c 4>; > + ioport-shift = <1>; Bleh... that shift again. And this is surely not a good name for a property (where's I/O ports in your case?) -- why not call it "reg-shift" (well, I'd call it "reg-size" or "reg-stride" myself :-)? MBR, Sergei ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: [PATCH 3/3] [POWERPC] MPC8349E-mITX: introduce localbus and pata nodes 2007-11-27 15:49 ` Sergei Shtylyov @ 2007-11-27 16:41 ` Anton Vorontsov 2007-11-27 16:46 ` Sergei Shtylyov 2007-11-27 21:18 ` Kumar Gala 1 sibling, 1 reply; 43+ messages in thread From: Anton Vorontsov @ 2007-11-27 16:41 UTC (permalink / raw) To: Sergei Shtylyov; +Cc: linuxppc-dev, linux-ide On Tue, Nov 27, 2007 at 06:49:13PM +0300, Sergei Shtylyov wrote: > Hello. Hi Sergei, > Anton Vorontsov wrote: > > >This patch adds localbus and pata nodes to use CF IDE interface > >on MPC8349E-mITX boards. > > >Patch also adds code to probe localbus. > > >Signed-off-by: Anton Vorontsov <avorontsov@ru.mvista.com> > >--- > > arch/powerpc/boot/dts/mpc8349emitx.dts | 17 ++++++++++++++++- > > arch/powerpc/platforms/83xx/mpc834x_itx.c | 17 +++++++++++++++++ > > 2 files changed, 33 insertions(+), 1 deletions(-) > > >diff --git a/arch/powerpc/boot/dts/mpc8349emitx.dts > >b/arch/powerpc/boot/dts/mpc8349emitx.dts > >index 5072f6d..7a97068 100644 > >--- a/arch/powerpc/boot/dts/mpc8349emitx.dts > >+++ b/arch/powerpc/boot/dts/mpc8349emitx.dts > >@@ -249,6 +249,21 @@ > > device_type = "pci"; > > }; > > > >+ localbus@e0005000 { > >+ #address-cells = <2>; > >+ #size-cells = <1>; > >+ compatible = "fsl,mpc8349emitx-localbus", > > Board compatible bus? This is what Documentation/powerpc/booting-without-of.txt suggests for localbuses. I'm following. > >+ "fsl,mpc8349e-localbus", > >+ "fsl,pq2pro-localbus"; > >+ reg = <e0005000 d8>; > >+ ranges = <3 0 f0000000 210>; > > > >- > >+ pata@3,0 { > >+ compatible = "fsl,mpc8349emitx-pata", > >"pata-platform"; > >+ reg = <3 0 10 3 20c 4>; > >+ ioport-shift = <1>; > > Bleh... that shift again. And this is surely not a good name for a > property (where's I/O ports in your case?) -- why not call it "reg-shift" > (well, I'd call it "reg-size" or "reg-stride" myself :-)? 1. "shift" because pata_platform using that name. I don't see any reason to contrive indirections. ioport-shift is what the whole Linux kernel using nowadays, and ioport-shift dts property anyway Linux-specific. I'm just following todays' conventions. If you feel really bad about that, I think better to fix that in the source of the badness -- pata_platform. It's easy, I can do that. Would you ack patch that converts whole pata_platform and users? Would Paul ack it? Still, is there any hardware that needs not power of 2 stride? 2. "ioport" because shift^Wstride ;-) applies only to the io range (yes, it's obvious, but worth open-wording, no?). And btw, I can get rid of ioport-shift at all. And do fixups in the pata_of_platform driver via .compatible matching. But I don't want: it feels bad to list every needs-to-fixup board in the common driver. It also feels not so great creating something like pata-platform-stride-{1,2,4,...} compatible stuff. Heh. Thanks, -- Anton Vorontsov email: cbou@mail.ru backup email: ya-cbou@yandex.ru irc://irc.freenode.net/bd2 ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: [PATCH 3/3] [POWERPC] MPC8349E-mITX: introduce localbus and pata nodes 2007-11-27 16:41 ` Anton Vorontsov @ 2007-11-27 16:46 ` Sergei Shtylyov 2007-11-27 17:27 ` Anton Vorontsov 2007-11-27 17:34 ` Anton Vorontsov 0 siblings, 2 replies; 43+ messages in thread From: Sergei Shtylyov @ 2007-11-27 16:46 UTC (permalink / raw) To: avorontsov; +Cc: linuxppc-dev, linux-ide Anton Vorontsov wrote: >>>This patch adds localbus and pata nodes to use CF IDE interface >>>on MPC8349E-mITX boards. >>>Patch also adds code to probe localbus. >>>Signed-off-by: Anton Vorontsov <avorontsov@ru.mvista.com> >>>--- >>>arch/powerpc/boot/dts/mpc8349emitx.dts | 17 ++++++++++++++++- >>>arch/powerpc/platforms/83xx/mpc834x_itx.c | 17 +++++++++++++++++ >>>2 files changed, 33 insertions(+), 1 deletions(-) >>>diff --git a/arch/powerpc/boot/dts/mpc8349emitx.dts >>>b/arch/powerpc/boot/dts/mpc8349emitx.dts >>>index 5072f6d..7a97068 100644 >>>--- a/arch/powerpc/boot/dts/mpc8349emitx.dts >>>+++ b/arch/powerpc/boot/dts/mpc8349emitx.dts >>>@@ -249,6 +249,21 @@ >>> device_type = "pci"; >>> }; >>> >>>+ localbus@e0005000 { >>>+ #address-cells = <2>; >>>+ #size-cells = <1>; >>>+ compatible = "fsl,mpc8349emitx-localbus", >> >> Board compatible bus? > This is what Documentation/powerpc/booting-without-of.txt suggests > for localbuses. I'm following. Hm... >>>+ "fsl,mpc8349e-localbus", >>>+ "fsl,pq2pro-localbus"; >>>+ reg = <e0005000 d8>; >>>+ ranges = <3 0 f0000000 210>; >>> >>>- >>>+ pata@3,0 { >>>+ compatible = "fsl,mpc8349emitx-pata", >>>"pata-platform"; >>>+ reg = <3 0 10 3 20c 4>; >>>+ ioport-shift = <1>; >> Bleh... that shift again. And this is surely not a good name for a >>property (where's I/O ports in your case?) -- why not call it "reg-shift" >>(well, I'd call it "reg-size" or "reg-stride" myself :-)? > 1. "shift" because pata_platform using that name. I don't see any > reason to contrive indirections. ioport-shift is what the whole > Linux kernel using nowadays, and ioport-shift dts property > anyway Linux-specific. It's just a bad name. There's not even I/O ports in this case (and moreover, the *real* I/O mapped device would always have a shift of 0, I bet -- larger strides are for memory mapped devices). > I'm just following todays' conventions. > If you feel really bad about that, I think better to fix that in > the source of the badness -- pata_platform. It's easy, I can do I only feel really bad about the "ioport" part, I can live with "shift" part. :-) > that. Would you ack patch that converts whole pata_platform and > users? Would Paul ack it? I don't understand -- why the property name should duplicate pata_platform field name? :-O > Still, is there any hardware that needs not power of 2 stride? Not really -- "size" just seems better, aesthetically. :-) > 2. "ioport" because shift^Wstride ;-) applies only to the io range > (yes, it's obvious, but worth open-wording, no?). Contrarywise, to memory range. > And btw, I can get rid of ioport-shift at all. And do fixups in > the pata_of_platform driver via .compatible matching. But I don't > want: it feels bad to list every needs-to-fixup board in the common > driver. It also feels not so great creating something like > pata-platform-stride-{1,2,4,...} compatible stuff. Heh. I didn't propose neither of that. :-) All I want is that "ioport-*" be renamed. > Thanks, MBR, Sergei ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: [PATCH 3/3] [POWERPC] MPC8349E-mITX: introduce localbus and pata nodes 2007-11-27 16:46 ` Sergei Shtylyov @ 2007-11-27 17:27 ` Anton Vorontsov 2007-11-27 17:25 ` Sergei Shtylyov 2007-11-27 17:34 ` Anton Vorontsov 1 sibling, 1 reply; 43+ messages in thread From: Anton Vorontsov @ 2007-11-27 17:27 UTC (permalink / raw) To: Sergei Shtylyov; +Cc: linuxppc-dev, linux-ide On Tue, Nov 27, 2007 at 07:46:13PM +0300, Sergei Shtylyov wrote: [...] > >>>+ ioport-shift = <1>; > > >> Bleh... that shift again. And this is surely not a good name for a > >>property (where's I/O ports in your case?) -- why not call it "reg-shift" > >>(well, I'd call it "reg-size" or "reg-stride" myself :-)? > > >1. "shift" because pata_platform using that name. I don't see any > > reason to contrive indirections. ioport-shift is what the whole > > Linux kernel using nowadays, and ioport-shift dts property > > anyway Linux-specific. > > It's just a bad name. There's not even I/O ports in this case (and > moreover, the *real* I/O mapped device would always have a shift of 0, I > bet -- larger strides are for memory mapped devices). > > > I'm just following todays' conventions. > > > If you feel really bad about that, I think better to fix that in > > the source of the badness -- pata_platform. It's easy, I can do > > I only feel really bad about the "ioport" part, I can live with "shift" > part. :-) > > > that. Would you ack patch that converts whole pata_platform and > > users? Would Paul ack it? > > I don't understand -- why the property name should duplicate > pata_platform field name? :-O Because: > >1. [...] I don't see any reason to contrive indirections. That is, different names for single thing is worse than single bogus name. > Not really -- "size" just seems better, aesthetically. :-) reg-size will look confusing. Is it ata registers' size? No, can't be. So, what is it? It's stride/shift because of bus, on which ata resides. > >And btw, I can get rid of ioport-shift at all. And do fixups in > >the pata_of_platform driver via .compatible matching. But I don't > >want: it feels bad to list every needs-to-fixup board in the common > >driver. It also feels not so great creating something like > >pata-platform-stride-{1,2,4,...} compatible stuff. Heh. > > I didn't propose neither of that. :-) Yup, that was "by the way"... > All I want is that "ioport-*" be renamed. I give up. The final name is..? I can think out wrong one, so you'd better convoy me on that way. ;-) reg-shift sounds okay? Or reg-stride better? No size, please. Thanks, -- Anton Vorontsov email: cbou@mail.ru backup email: ya-cbou@yandex.ru irc://irc.freenode.net/bd2 ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: [PATCH 3/3] [POWERPC] MPC8349E-mITX: introduce localbus and pata nodes 2007-11-27 17:27 ` Anton Vorontsov @ 2007-11-27 17:25 ` Sergei Shtylyov 0 siblings, 0 replies; 43+ messages in thread From: Sergei Shtylyov @ 2007-11-27 17:25 UTC (permalink / raw) To: avorontsov; +Cc: linuxppc-dev, linux-ide Anton Vorontsov wrote: >> All I want is that "ioport-*" be renamed. > I give up. Don't. :-) > The final name is..? I can think out wrong one, so you'd better > convoy me on that way. ;-) reg-shift sounds okay? Yes. > Thanks, WBR, Sergei ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: [PATCH 3/3] [POWERPC] MPC8349E-mITX: introduce localbus and pata nodes 2007-11-27 16:46 ` Sergei Shtylyov 2007-11-27 17:27 ` Anton Vorontsov @ 2007-11-27 17:34 ` Anton Vorontsov 2007-11-27 17:34 ` Sergei Shtylyov 1 sibling, 1 reply; 43+ messages in thread From: Anton Vorontsov @ 2007-11-27 17:34 UTC (permalink / raw) To: Sergei Shtylyov; +Cc: linuxppc-dev, linux-ide [ Had cut too much in the previous reply ] On Tue, Nov 27, 2007 at 07:46:13PM +0300, Sergei Shtylyov wrote: [...] > >2. "ioport" because shift^Wstride ;-) applies only to the io range > > (yes, it's obvious, but worth open-wording, no?). > > Contrarywise, to memory range. By io range I meant "I/O base", in contrast to "CTL base". There is no need to apply shifting for CTL. That's why ioport-* appeared in the first place. -- Anton Vorontsov email: cbou@mail.ru backup email: ya-cbou@yandex.ru irc://irc.freenode.net/bd2 ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: [PATCH 3/3] [POWERPC] MPC8349E-mITX: introduce localbus and pata nodes 2007-11-27 17:34 ` Anton Vorontsov @ 2007-11-27 17:34 ` Sergei Shtylyov 2007-11-27 17:48 ` Anton Vorontsov 0 siblings, 1 reply; 43+ messages in thread From: Sergei Shtylyov @ 2007-11-27 17:34 UTC (permalink / raw) To: avorontsov; +Cc: linuxppc-dev, linux-ide Anton Vorontsov wrote: >>>2. "ioport" because shift^Wstride ;-) applies only to the io range >>> (yes, it's obvious, but worth open-wording, no?). >> Contrarywise, to memory range. > By io range I meant "I/O base", in contrast to "CTL base". > There is no need to apply shifting for CTL. That's why ioport-* > appeared in the first place. So, a matter of wrong terminology then. The thing that you meant by "I/O" is actually called "command block". MBR, Sergei ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: [PATCH 3/3] [POWERPC] MPC8349E-mITX: introduce localbus and pata nodes 2007-11-27 17:34 ` Sergei Shtylyov @ 2007-11-27 17:48 ` Anton Vorontsov 2007-11-27 18:07 ` Sergei Shtylyov 0 siblings, 1 reply; 43+ messages in thread From: Anton Vorontsov @ 2007-11-27 17:48 UTC (permalink / raw) To: Sergei Shtylyov; +Cc: linuxppc-dev, linux-ide On Tue, Nov 27, 2007 at 08:34:11PM +0300, Sergei Shtylyov wrote: > Anton Vorontsov wrote: > > >>>2. "ioport" because shift^Wstride ;-) applies only to the io range > >>> (yes, it's obvious, but worth open-wording, no?). > > >> Contrarywise, to memory range. > > >By io range I meant "I/O base", in contrast to "CTL base". > > >There is no need to apply shifting for CTL. That's why ioport-* > >appeared in the first place. > > So, a matter of wrong terminology then. The thing that you meant by > "I/O" is actually called "command block". Yes. And IO is the second name. It's used widespread in the drivers/ide/. Now you understand why I'm so reluctant to hanging up different labels on the single thing? ;-) -- Anton Vorontsov email: cbou@mail.ru backup email: ya-cbou@yandex.ru irc://irc.freenode.net/bd2 ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: [PATCH 3/3] [POWERPC] MPC8349E-mITX: introduce localbus and pata nodes 2007-11-27 17:48 ` Anton Vorontsov @ 2007-11-27 18:07 ` Sergei Shtylyov 2007-11-27 19:50 ` Anton Vorontsov 0 siblings, 1 reply; 43+ messages in thread From: Sergei Shtylyov @ 2007-11-27 18:07 UTC (permalink / raw) To: avorontsov; +Cc: linuxppc-dev, linux-ide Anton Vorontsov wrote: >>>>>2. "ioport" because shift^Wstride ;-) applies only to the io range >>>>>(yes, it's obvious, but worth open-wording, no?). >>>> Contrarywise, to memory range. >>>By io range I meant "I/O base", in contrast to "CTL base". >>>There is no need to apply shifting for CTL. That's why ioport-* >>>appeared in the first place. >> So, a matter of wrong terminology then. The thing that you meant by >> "I/O" is actually called "command block". > Yes. And IO is the second name. I'd say the first place in drivers/ide belongs to the historic name "taskfile". The "command block" which is as ATA standard calls it, is hardly used. > It's used widespread in the drivers/ide/. Don't remember seeing it. > Now you understand why I'm so reluctant to hanging up different > labels on the single thing? ;-) :-) MBR, Sergei ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: [PATCH 3/3] [POWERPC] MPC8349E-mITX: introduce localbus and pata nodes 2007-11-27 18:07 ` Sergei Shtylyov @ 2007-11-27 19:50 ` Anton Vorontsov 0 siblings, 0 replies; 43+ messages in thread From: Anton Vorontsov @ 2007-11-27 19:50 UTC (permalink / raw) To: Sergei Shtylyov; +Cc: linuxppc-dev, linux-ide On Tue, Nov 27, 2007 at 09:07:14PM +0300, Sergei Shtylyov wrote: > Anton Vorontsov wrote: > > >>>>>2. "ioport" because shift^Wstride ;-) applies only to the io range > >>>>>(yes, it's obvious, but worth open-wording, no?). > > >>>> Contrarywise, to memory range. > > >>>By io range I meant "I/O base", in contrast to "CTL base". > > >>>There is no need to apply shifting for CTL. That's why ioport-* > >>>appeared in the first place. > > >> So, a matter of wrong terminology then. The thing that you meant by > >> "I/O" is actually called "command block". > > > Yes. And IO is the second name. > > I'd say the first place in drivers/ide belongs to the historic name > "taskfile". The "command block" which is as ATA standard calls it, is hardly used. > > > It's used widespread in the drivers/ide/. > > Don't remember seeing it. Oops, thinko -- not drivers/ide/, but include/linux/ide.h. Grep for io_addr. > > Now you understand why I'm so reluctant to hanging up different > > labels on the single thing? ;-) > > :-) -- Anton Vorontsov email: cbou@mail.ru backup email: ya-cbou@yandex.ru irc://irc.freenode.net/bd2 ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: [PATCH 3/3] [POWERPC] MPC8349E-mITX: introduce localbus and pata nodes 2007-11-27 15:49 ` Sergei Shtylyov 2007-11-27 16:41 ` Anton Vorontsov @ 2007-11-27 21:18 ` Kumar Gala 1 sibling, 0 replies; 43+ messages in thread From: Kumar Gala @ 2007-11-27 21:18 UTC (permalink / raw) To: Sergei Shtylyov; +Cc: linuxppc-dev, linux-ide On Nov 27, 2007, at 9:49 AM, Sergei Shtylyov wrote: > Hello. > > Anton Vorontsov wrote: > >> This patch adds localbus and pata nodes to use CF IDE interface >> on MPC8349E-mITX boards. > >> Patch also adds code to probe localbus. > >> Signed-off-by: Anton Vorontsov <avorontsov@ru.mvista.com> >> --- >> arch/powerpc/boot/dts/mpc8349emitx.dts | 17 ++++++++++++++++- >> arch/powerpc/platforms/83xx/mpc834x_itx.c | 17 +++++++++++++++++ >> 2 files changed, 33 insertions(+), 1 deletions(-) > >> diff --git a/arch/powerpc/boot/dts/mpc8349emitx.dts b/arch/powerpc/=20= >> boot/dts/mpc8349emitx.dts >> index 5072f6d..7a97068 100644 >> --- a/arch/powerpc/boot/dts/mpc8349emitx.dts >> +++ b/arch/powerpc/boot/dts/mpc8349emitx.dts >> @@ -249,6 +249,21 @@ >> device_type =3D "pci"; >> }; >> >> + localbus@e0005000 { >> + #address-cells =3D <2>; >> + #size-cells =3D <1>; >> + compatible =3D "fsl,mpc8349emitx-localbus", > > Board compatible bus? > >> + "fsl,mpc8349e-localbus", >> + "fsl,pq2pro-localbus"; >> + reg =3D <e0005000 d8>; >> + ranges =3D <3 0 f0000000 210>; >> >> - >> + pata@3,0 { >> + compatible =3D "fsl,mpc8349emitx-pata", = "pata-platform"; >> + reg =3D <3 0 10 3 20c 4>; >> + ioport-shift =3D <1>; > > Bleh... that shift again. And this is surely not a good name for a > property (where's I/O ports in your case?) -- why not call it "reg-=20 > shift" > (well, I'd call it "reg-size" or "reg-stride" myself :-)? I'm coming into this late, but if ioport-shift applies to reg (which I =20= think it does) it should really be called "reg-shift". The ePAPR is =20 using that property name: Specifies in bytes how far the discrete device registers are separated =20= from each other. The individual register location is calculated by using following formula: =20= =93registers address=94 << reg-shift. If unspecified the default value is 0. - k ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: [PATCH 0/3] OF-platform PATA driver 2007-11-27 15:37 [PATCH 0/3] OF-platform PATA driver Anton Vorontsov ` (2 preceding siblings ...) 2007-11-27 15:39 ` [PATCH 3/3] [POWERPC] MPC8349E-mITX: introduce localbus and pata nodes Anton Vorontsov @ 2007-11-28 9:51 ` Paul Mundt 2007-11-28 13:24 ` Anton Vorontsov 2007-12-01 22:54 ` Jeff Garzik 4 siblings, 1 reply; 43+ messages in thread From: Paul Mundt @ 2007-11-28 9:51 UTC (permalink / raw) To: Anton Vorontsov; +Cc: Arnd Bergmann, Jeff Garzik, linux-ide, linuxppc-dev On Tue, Nov 27, 2007 at 06:37:08PM +0300, Anton Vorontsov wrote: > Here is the second spin of the OF-platform PATA driver and > related patches. > So either the patches are missing, or I wasn't CC'ed on them. I'm going to go out on a limb and assume the latter. If you wish me to Ack them, I'm not going to start grovelling around list archives trying to find the relevant posts. This is now the second time this has happened, the first time I was only made aware of this work as Jeff forwarded them along. CC'ing the authors of code you are changing shouldn't be a cryptic requirement we have to spell out in SubmittingPatches or so, especially if you're soliciting Acked-bys. Please fix your development methodology, thanks. ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: [PATCH 0/3] OF-platform PATA driver 2007-11-28 9:51 ` [PATCH 0/3] OF-platform PATA driver Paul Mundt @ 2007-11-28 13:24 ` Anton Vorontsov 0 siblings, 0 replies; 43+ messages in thread From: Anton Vorontsov @ 2007-11-28 13:24 UTC (permalink / raw) To: Paul Mundt; +Cc: Arnd Bergmann, Jeff Garzik, linux-ide, linuxppc-dev On Wed, Nov 28, 2007 at 06:51:51PM +0900, Paul Mundt wrote: > On Tue, Nov 27, 2007 at 06:37:08PM +0300, Anton Vorontsov wrote: > > Here is the second spin of the OF-platform PATA driver and > > related patches. > > > So either the patches are missing, or I wasn't CC'ed on them. I'm going > to go out on a limb and assume the latter. If you wish me to Ack them, > I'm not going to start grovelling around list archives trying to find the > relevant posts. Point taken, fair enough. I'll Cc you explicitly next time. Thanks, -- Anton Vorontsov email: cbou@mail.ru backup email: ya-cbou@yandex.ru irc://irc.freenode.net/bd2 ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: [PATCH 0/3] OF-platform PATA driver 2007-11-27 15:37 [PATCH 0/3] OF-platform PATA driver Anton Vorontsov ` (3 preceding siblings ...) 2007-11-28 9:51 ` [PATCH 0/3] OF-platform PATA driver Paul Mundt @ 2007-12-01 22:54 ` Jeff Garzik 2007-12-01 23:58 ` Anton Vorontsov 4 siblings, 1 reply; 43+ messages in thread From: Jeff Garzik @ 2007-12-01 22:54 UTC (permalink / raw) To: avorontsov; +Cc: Arnd Bergmann, linux-ide, linuxppc-dev, Paul Mundt Anton Vorontsov wrote: > Hi all, > > Here is the second spin of the OF-platform PATA driver and > related patches. > > Changes since RFC: > - nuked drivers/ata/pata_platform.h; > - powerpc bits: proper localbus node added. > > > Thanks for the previous review! This time I'm collecting acks, > don't be shy to give 'em generously. ;-) if (ack_collected(PaulM)) push(ACK) else { /* do nothing */ } ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: [PATCH 0/3] OF-platform PATA driver 2007-12-01 22:54 ` Jeff Garzik @ 2007-12-01 23:58 ` Anton Vorontsov 2007-12-02 3:57 ` Olof Johansson 0 siblings, 1 reply; 43+ messages in thread From: Anton Vorontsov @ 2007-12-01 23:58 UTC (permalink / raw) To: Jeff Garzik; +Cc: Paul Mundt, linux-ide, Arnd Bergmann, linuxppc-dev On Sat, Dec 01, 2007 at 05:54:49PM -0500, Jeff Garzik wrote: > Anton Vorontsov wrote: > > Hi all, > > > > Here is the second spin of the OF-platform PATA driver and > > related patches. > > > > Changes since RFC: > > - nuked drivers/ata/pata_platform.h; > > - powerpc bits: proper localbus node added. > > > > > > Thanks for the previous review! This time I'm collecting acks, > > don't be shy to give 'em generously. ;-) > if (ack_collected(PaulM)) > push(ACK) > else { > /* do nothing */ > } Yep, this is obvious. Here is the algo I'm following: while (1) { send_patches(); if (ack_collected(PaulM) && ack_collected(PowerPC_people)) break; sleep(wait_for_comments_timeout); <-- currently here. } -- Anton Vorontsov email: cbou@mail.ru backup email: ya-cbou@yandex.ru irc://irc.freenode.net/bd2 ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: [PATCH 0/3] OF-platform PATA driver 2007-12-01 23:58 ` Anton Vorontsov @ 2007-12-02 3:57 ` Olof Johansson 2007-12-02 11:46 ` Anton Vorontsov 0 siblings, 1 reply; 43+ messages in thread From: Olof Johansson @ 2007-12-02 3:57 UTC (permalink / raw) To: Anton Vorontsov Cc: linux-ide, Paul Mundt, Arnd Bergmann, Jeff Garzik, linuxppc-dev On Sun, Dec 02, 2007 at 02:58:10AM +0300, Anton Vorontsov wrote: > On Sat, Dec 01, 2007 at 05:54:49PM -0500, Jeff Garzik wrote: > while (1) { > send_patches(); > > if (ack_collected(PaulM) && ack_collected(PowerPC_people)) > break; > > sleep(wait_for_comments_timeout); <-- currently here. I still haven't seen you address the compatible comments (that pata-platform is suboptimal). Or did I miss some respin of the patches? -Olof ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: [PATCH 0/3] OF-platform PATA driver 2007-12-02 3:57 ` Olof Johansson @ 2007-12-02 11:46 ` Anton Vorontsov 2007-12-02 15:45 ` Olof Johansson 0 siblings, 1 reply; 43+ messages in thread From: Anton Vorontsov @ 2007-12-02 11:46 UTC (permalink / raw) To: Olof Johansson Cc: linux-ide, Paul Mundt, Jeff Garzik, Arnd Bergmann, linuxppc-dev On Sat, Dec 01, 2007 at 09:57:55PM -0600, Olof Johansson wrote: > On Sun, Dec 02, 2007 at 02:58:10AM +0300, Anton Vorontsov wrote: > > On Sat, Dec 01, 2007 at 05:54:49PM -0500, Jeff Garzik wrote: > > while (1) { > > send_patches(); > > > > if (ack_collected(PaulM) && ack_collected(PowerPC_people)) > > break; > > > > sleep(wait_for_comments_timeout); <-- currently here. > > I still haven't seen you address the compatible comments (that > pata-platform is suboptimal). Or did I miss some respin of the patches? I didn't resend these patches yet. You started the thread, but you hid away from the discussion (you had been Cc'ed to every mail). 1. Arnd suggested {p,s}ata-pio-{1,2,3,..} or ata-{1,2,3,..} compatible scheme; 2. Sergei verbosely explained that that there is no reason to complicate compatible property. He suggested ata-generic, or ata-simple; Mainly I was awaiting for your further comments. By now I tend to follow Sergei's comments and rename compatible stuff to ata-generic. Are you fine with it? Thanks, -- Anton Vorontsov email: cbou@mail.ru backup email: ya-cbou@yandex.ru irc://irc.freenode.net/bd2 ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: [PATCH 0/3] OF-platform PATA driver 2007-12-02 11:46 ` Anton Vorontsov @ 2007-12-02 15:45 ` Olof Johansson 2007-12-02 23:40 ` Arnd Bergmann 0 siblings, 1 reply; 43+ messages in thread From: Olof Johansson @ 2007-12-02 15:45 UTC (permalink / raw) To: Anton Vorontsov Cc: linux-ide, Paul Mundt, Jeff Garzik, Arnd Bergmann, linuxppc-dev On Sun, Dec 02, 2007 at 02:46:17PM +0300, Anton Vorontsov wrote: > On Sat, Dec 01, 2007 at 09:57:55PM -0600, Olof Johansson wrote: > > On Sun, Dec 02, 2007 at 02:58:10AM +0300, Anton Vorontsov wrote: > > > On Sat, Dec 01, 2007 at 05:54:49PM -0500, Jeff Garzik wrote: > > > while (1) { > > > send_patches(); > > > > > > if (ack_collected(PaulM) && ack_collected(PowerPC_people)) > > > break; > > > > > > sleep(wait_for_comments_timeout); <-- currently here. > > > > I still haven't seen you address the compatible comments (that > > pata-platform is suboptimal). Or did I miss some respin of the patches? > > I didn't resend these patches yet. You started the thread, but you hid > away from the discussion (you had been Cc'ed to every mail). > > 1. Arnd suggested {p,s}ata-pio-{1,2,3,..} or ata-{1,2,3,..} compatible > scheme; > 2. Sergei verbosely explained that that there is no reason to > complicate compatible property. He suggested ata-generic, or > ata-simple; > > Mainly I was awaiting for your further comments. By now I tend to > follow Sergei's comments and rename compatible stuff to ata-generic. > Are you fine with it? Ah, sorry about that. The discussion got a bit noisy so I tuned it out. Yes, I agree with Sergei: I don't think the pio/ata mode belongs there, "ata-generic" (or "generic-ata") sounds good to me. If firmwares want to specify pata/sata stuff as more specific compatible fields, then they are free to, but the driver shouldn't depend on it as long as "ata-generic" is in the list. ATA/PIO modes could be communicated with separate properties as well, but I don't see a need for it right now. Tuning PIO modes normally involves changing bus parameters/cycle times, etc, and that' hardly generic enough to be handled by this driver in the first place. I will need to add a compatible field to it myself (our firmware uses "electra-ide") + some minor changes, but I will do that on top of this patch once it goes in since it involves removing the old code from arch/powerpc/platforms/pasemi. -Olof ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: [PATCH 0/3] OF-platform PATA driver 2007-12-02 15:45 ` Olof Johansson @ 2007-12-02 23:40 ` Arnd Bergmann 2007-12-02 23:58 ` Olof Johansson 0 siblings, 1 reply; 43+ messages in thread From: Arnd Bergmann @ 2007-12-02 23:40 UTC (permalink / raw) To: Olof Johansson Cc: linuxppc-dev, Anton Vorontsov, Paul Mundt, Jeff Garzik, linux-ide On Sunday 02 December 2007, Olof Johansson wrote: > Yes, I agree with Sergei: I don't think the pio/ata mode belongs there, > "ata-generic" (or "generic-ata") sounds good to me. If firmwares want to > specify pata/sata stuff as more specific compatible fields, then they are > free to, but the driver shouldn't depend on it as long as "ata-generic" > is in the list. Yes, that makes sense. Let me just make it clear that I no longer think we should have the PIO mode or the ATA level in the compatible property. The PIO modes should really have their own property, if any, and the ATA standard would need to be a property of the attached device, not a property of the controller. I can see a point in listing the ATA devices themselves in the device tree, but it's probably not really worth it for the fdt setup, since they can easily be probed at runtime. > I will need to add a compatible field to it myself (our firmware uses > "electra-ide") + some minor changes, but I will do that on top of this > patch once it goes in since it involves removing the old code from > arch/powerpc/platforms/pasemi. I'd suggest to also have electra-ide hardcoded in the driver alongside ata-generic, as a special case for backwards compatibility. Arnd <>< ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: [PATCH 0/3] OF-platform PATA driver 2007-12-02 23:40 ` Arnd Bergmann @ 2007-12-02 23:58 ` Olof Johansson 0 siblings, 0 replies; 43+ messages in thread From: Olof Johansson @ 2007-12-02 23:58 UTC (permalink / raw) To: Arnd Bergmann Cc: linuxppc-dev, Anton Vorontsov, Paul Mundt, Jeff Garzik, linux-ide On Mon, Dec 03, 2007 at 12:40:21AM +0100, Arnd Bergmann wrote: > On Sunday 02 December 2007, Olof Johansson wrote: > > > Yes, I agree with Sergei: I don't think the pio/ata mode belongs there, > > "ata-generic" (or "generic-ata") sounds good to me. If firmwares want to > > specify pata/sata stuff as more specific compatible fields, then they are > > free to, but the driver shouldn't depend on it as long as "ata-generic" > > is in the list. > > Yes, that makes sense. Let me just make it clear that I no longer think > we should have the PIO mode or the ATA level in the compatible property. > The PIO modes should really have their own property, if any, and the ATA > standard would need to be a property of the attached device, not a property > of the controller. Right. And configuring PIO modes is something quite hardware specific, which defeats the purpose of having a "generic" driver as a catch-all for "simple" configs in the first place. If the hardware needs (much) tuning it probably makes more sense to do it as a separate driver. > I can see a point in listing the ATA devices themselves in the device tree, > but it's probably not really worth it for the fdt setup, since they > can easily be probed at runtime. If the firmware probes them and/or knows about them. It's the kind of thing that can change quite often. We don't list USB devices under the usb controllers either, since they're quite volatile and the device tree is (fairly) static on the DTS-based platforms. > > I will need to add a compatible field to it myself (our firmware uses > > "electra-ide") + some minor changes, but I will do that on top of this > > patch once it goes in since it involves removing the old code from > > arch/powerpc/platforms/pasemi. > > I'd suggest to also have electra-ide hardcoded in the driver alongside > ata-generic, as a special case for backwards compatibility. Yep, that's my plan, I'll do that when I move it over. -Olof ^ permalink raw reply [flat|nested] 43+ messages in thread
* [PATCH v4 0/3] OF-platform PATA driver @ 2008-01-09 19:08 Anton Vorontsov 2008-01-09 19:10 ` [PATCH 1/3] [libata] pata_platform: make probe and remove functions device type neutral Anton Vorontsov 0 siblings, 1 reply; 43+ messages in thread From: Anton Vorontsov @ 2008-01-09 19:08 UTC (permalink / raw) To: linuxppc-dev, linux-ide; +Cc: Olof Johansson, Paul Mundt, Jeff Garzik Hi all, Here is the resend (aka v4) version of the OF-platform PATA driver and related patches. Changes since v3: - Acked-by: Paul Mundt <lethal@linux-sh.org> - In the powerpc specific patch: update defconfig and use machine_device_initcall -- this is new call found in the galak/powerpc.git. Changes since v2: - "PPC" added to PATA_PLATFORM "depends on" Kconfig entry; I didn't remove EMBEDDED "depends on" -- this wasn't discussed much and these patches should not depend on the decision. - cosmetic fixes; - "s/ioport_shift/reg_shift/g" patch dropped. Changes since v1: - __pata_platform_probe now accepts pio_mask argument; - pata-platform compatible property renamed to ata-generic; - pata_of_platform understands pio-mode property. It's used to pass pio_mask to the __pata_platform_probe. That is, in ata-generic context pio-mode means "pio mode the bus already configured for"; - New optional patch that renames pata_platform_info's ioport_shift to reg_shift. Changes since RFC: - nuked drivers/ata/pata_platform.h; - powerpc bits: proper localbus node added. -- Anton Vorontsov email: cbou@mail.ru backup email: ya-cbou@yandex.ru irc://irc.freenode.net/bd2 ^ permalink raw reply [flat|nested] 43+ messages in thread
* [PATCH 1/3] [libata] pata_platform: make probe and remove functions device type neutral 2008-01-09 19:08 [PATCH v4 " Anton Vorontsov @ 2008-01-09 19:10 ` Anton Vorontsov 0 siblings, 0 replies; 43+ messages in thread From: Anton Vorontsov @ 2008-01-09 19:10 UTC (permalink / raw) To: linuxppc-dev, linux-ide; +Cc: Olof Johansson, Paul Mundt, Jeff Garzik Split pata_platform_{probe,remove} into two pieces: 1. pata_platform_{probe,remove} -- platform_device-dependant bits; 2. __ptata_platform_{probe,remove} -- device type neutral bits. This is done to not duplicate code for the OF-platform driver. Signed-off-by: Anton Vorontsov <avorontsov@ru.mvista.com> Acked-by: Olof Johansson <olof@lixom.net> Acked-by: Paul Mundt <lethal@linux-sh.org> --- drivers/ata/pata_platform.c | 144 ++++++++++++++++++++++++---------------- include/linux/pata_platform.h | 9 +++ 2 files changed, 95 insertions(+), 58 deletions(-) diff --git a/drivers/ata/pata_platform.c b/drivers/ata/pata_platform.c index ac03a90..224bb6c 100644 --- a/drivers/ata/pata_platform.c +++ b/drivers/ata/pata_platform.c @@ -93,14 +93,9 @@ static struct ata_port_operations pata_platform_port_ops = { }; static void pata_platform_setup_port(struct ata_ioports *ioaddr, - struct pata_platform_info *info) + unsigned int shift) { - unsigned int shift = 0; - /* Fixup the port shift for platforms that need it */ - if (info && info->ioport_shift) - shift = info->ioport_shift; - ioaddr->data_addr = ioaddr->cmd_addr + (ATA_REG_DATA << shift); ioaddr->error_addr = ioaddr->cmd_addr + (ATA_REG_ERR << shift); ioaddr->feature_addr = ioaddr->cmd_addr + (ATA_REG_FEATURE << shift); @@ -114,8 +109,13 @@ static void pata_platform_setup_port(struct ata_ioports *ioaddr, } /** - * pata_platform_probe - attach a platform interface - * @pdev: platform device + * __pata_platform_probe - attach a platform interface + * @dev: device + * @io_res: Resource representing I/O base + * @ctl_res: Resource representing CTL base + * @irq_res: Resource representing IRQ and its flags + * @ioport_shift: I/O port shift + * @__pio_mask: PIO mask * * Register a platform bus IDE interface. Such interfaces are PIO and we * assume do not support IRQ sharing. @@ -135,42 +135,18 @@ static void pata_platform_setup_port(struct ata_ioports *ioaddr, * * If no IRQ resource is present, PIO polling mode is used instead. */ -static int __devinit pata_platform_probe(struct platform_device *pdev) +int __devinit __pata_platform_probe(struct device *dev, + struct resource *io_res, + struct resource *ctl_res, + struct resource *irq_res, + unsigned int ioport_shift, + int __pio_mask) { - struct resource *io_res, *ctl_res; struct ata_host *host; struct ata_port *ap; - struct pata_platform_info *pp_info; unsigned int mmio; - int irq; - - /* - * Simple resource validation .. - */ - if ((pdev->num_resources != 3) && (pdev->num_resources != 2)) { - dev_err(&pdev->dev, "invalid number of resources\n"); - return -EINVAL; - } - - /* - * Get the I/O base first - */ - io_res = platform_get_resource(pdev, IORESOURCE_IO, 0); - if (io_res == NULL) { - io_res = platform_get_resource(pdev, IORESOURCE_MEM, 0); - if (unlikely(io_res == NULL)) - return -EINVAL; - } - - /* - * Then the CTL base - */ - ctl_res = platform_get_resource(pdev, IORESOURCE_IO, 1); - if (ctl_res == NULL) { - ctl_res = platform_get_resource(pdev, IORESOURCE_MEM, 1); - if (unlikely(ctl_res == NULL)) - return -EINVAL; - } + int irq = 0; + int irq_flags = 0; /* * Check for MMIO @@ -181,20 +157,21 @@ static int __devinit pata_platform_probe(struct platform_device *pdev) /* * And the IRQ */ - irq = platform_get_irq(pdev, 0); - if (irq < 0) - irq = 0; /* no irq */ + if (irq_res && irq_res->start > 0) { + irq = irq_res->start; + irq_flags = irq_res->flags; + } /* * Now that that's out of the way, wire up the port.. */ - host = ata_host_alloc(&pdev->dev, 1); + host = ata_host_alloc(dev, 1); if (!host) return -ENOMEM; ap = host->ports[0]; ap->ops = &pata_platform_port_ops; - ap->pio_mask = pio_mask; + ap->pio_mask = __pio_mask; ap->flags |= ATA_FLAG_SLAVE_POSS; /* @@ -209,25 +186,24 @@ static int __devinit pata_platform_probe(struct platform_device *pdev) * Handle the MMIO case */ if (mmio) { - ap->ioaddr.cmd_addr = devm_ioremap(&pdev->dev, io_res->start, + ap->ioaddr.cmd_addr = devm_ioremap(dev, io_res->start, io_res->end - io_res->start + 1); - ap->ioaddr.ctl_addr = devm_ioremap(&pdev->dev, ctl_res->start, + ap->ioaddr.ctl_addr = devm_ioremap(dev, ctl_res->start, ctl_res->end - ctl_res->start + 1); } else { - ap->ioaddr.cmd_addr = devm_ioport_map(&pdev->dev, io_res->start, + ap->ioaddr.cmd_addr = devm_ioport_map(dev, io_res->start, io_res->end - io_res->start + 1); - ap->ioaddr.ctl_addr = devm_ioport_map(&pdev->dev, ctl_res->start, + ap->ioaddr.ctl_addr = devm_ioport_map(dev, ctl_res->start, ctl_res->end - ctl_res->start + 1); } if (!ap->ioaddr.cmd_addr || !ap->ioaddr.ctl_addr) { - dev_err(&pdev->dev, "failed to map IO/CTL base\n"); + dev_err(dev, "failed to map IO/CTL base\n"); return -ENOMEM; } ap->ioaddr.altstatus_addr = ap->ioaddr.ctl_addr; - pp_info = pdev->dev.platform_data; - pata_platform_setup_port(&ap->ioaddr, pp_info); + pata_platform_setup_port(&ap->ioaddr, ioport_shift); ata_port_desc(ap, "%s cmd 0x%llx ctl 0x%llx", mmio ? "mmio" : "ioport", (unsigned long long)io_res->start, @@ -235,26 +211,78 @@ static int __devinit pata_platform_probe(struct platform_device *pdev) /* activate */ return ata_host_activate(host, irq, irq ? ata_interrupt : NULL, - pp_info ? pp_info->irq_flags : 0, - &pata_platform_sht); + irq_flags, &pata_platform_sht); } +EXPORT_SYMBOL_GPL(__pata_platform_probe); /** - * pata_platform_remove - unplug a platform interface - * @pdev: platform device + * __pata_platform_remove - unplug a platform interface + * @dev: device * * A platform bus ATA device has been unplugged. Perform the needed * cleanup. Also called on module unload for any active devices. */ -static int __devexit pata_platform_remove(struct platform_device *pdev) +int __devexit __pata_platform_remove(struct device *dev) { - struct device *dev = &pdev->dev; struct ata_host *host = dev_get_drvdata(dev); ata_host_detach(host); return 0; } +EXPORT_SYMBOL_GPL(__pata_platform_remove); + +static int __devinit pata_platform_probe(struct platform_device *pdev) +{ + struct resource *io_res; + struct resource *ctl_res; + struct resource *irq_res; + struct pata_platform_info *pp_info = pdev->dev.platform_data; + + /* + * Simple resource validation .. + */ + if ((pdev->num_resources != 3) && (pdev->num_resources != 2)) { + dev_err(&pdev->dev, "invalid number of resources\n"); + return -EINVAL; + } + + /* + * Get the I/O base first + */ + io_res = platform_get_resource(pdev, IORESOURCE_IO, 0); + if (io_res == NULL) { + io_res = platform_get_resource(pdev, IORESOURCE_MEM, 0); + if (unlikely(io_res == NULL)) + return -EINVAL; + } + + /* + * Then the CTL base + */ + ctl_res = platform_get_resource(pdev, IORESOURCE_IO, 1); + if (ctl_res == NULL) { + ctl_res = platform_get_resource(pdev, IORESOURCE_MEM, 1); + if (unlikely(ctl_res == NULL)) + return -EINVAL; + } + + /* + * And the IRQ + */ + irq_res = platform_get_resource(pdev, IORESOURCE_IRQ, 0); + if (irq_res) + irq_res->flags = pp_info ? pp_info->irq_flags : 0; + + return __pata_platform_probe(&pdev->dev, io_res, ctl_res, irq_res, + pp_info ? pp_info->ioport_shift : 0, + pio_mask); +} + +static int __devexit pata_platform_remove(struct platform_device *pdev) +{ + return __pata_platform_remove(&pdev->dev); +} static struct platform_driver pata_platform_driver = { .probe = pata_platform_probe, diff --git a/include/linux/pata_platform.h b/include/linux/pata_platform.h index 5799e8d..6a7a92d 100644 --- a/include/linux/pata_platform.h +++ b/include/linux/pata_platform.h @@ -15,4 +15,13 @@ struct pata_platform_info { unsigned int irq_flags; }; +extern int __devinit __pata_platform_probe(struct device *dev, + struct resource *io_res, + struct resource *ctl_res, + struct resource *irq_res, + unsigned int ioport_shift, + int __pio_mask); + +extern int __devexit __pata_platform_remove(struct device *dev); + #endif /* __LINUX_PATA_PLATFORM_H */ -- 1.5.2.2 ^ permalink raw reply related [flat|nested] 43+ messages in thread
* [PATCH v3 0/3] OF-platform PATA driver @ 2007-12-14 18:21 Anton Vorontsov 2007-12-14 18:24 ` [PATCH 1/3] [libata] pata_platform: make probe and remove functions device type neutral Anton Vorontsov 0 siblings, 1 reply; 43+ messages in thread From: Anton Vorontsov @ 2007-12-14 18:21 UTC (permalink / raw) To: linuxppc-dev, linux-ide Cc: Jeff Garzik, Arnd Bergmann, Paul Mundt, Olof Johansson Hi all, Here is the third version of the OF-platform PATA driver and related patches. Changes since v2: - "PPC" added to PATA_PLATFORM "depends on" Kconfig entry; I didn't remove EMBEDDED "depends on" -- this wasn't discussed much and these patches should not depend on the decision. - cosmetic fixes; - "s/ioport_shift/reg_shift/g" patch dropped. Changes since v1: - __pata_platform_probe now accepts pio_mask argument; - pata-platform compatible property renamed to ata-generic; - pata_of_platform understands pio-mode property. It's used to pass pio_mask to the __pata_platform_probe. That is, in ata-generic context pio-mode means "pio mode the bus already configured for"; - New optional patch that renames pata_platform_info's ioport_shift to reg_shift. Changes since RFC: - nuked drivers/ata/pata_platform.h; - powerpc bits: proper localbus node added. -- Anton Vorontsov email: cbou@mail.ru backup email: ya-cbou@yandex.ru irc://irc.freenode.net/bd2 ^ permalink raw reply [flat|nested] 43+ messages in thread
* [PATCH 1/3] [libata] pata_platform: make probe and remove functions device type neutral 2007-12-14 18:21 [PATCH v3 0/3] OF-platform PATA driver Anton Vorontsov @ 2007-12-14 18:24 ` Anton Vorontsov 2007-12-16 12:46 ` Paul Mundt 0 siblings, 1 reply; 43+ messages in thread From: Anton Vorontsov @ 2007-12-14 18:24 UTC (permalink / raw) To: linuxppc-dev, linux-ide Cc: Jeff Garzik, Arnd Bergmann, Paul Mundt, Olof Johansson Split pata_platform_{probe,remove} into two pieces: 1. pata_platform_{probe,remove} -- platform_device-dependant bits; 2. __ptata_platform_{probe,remove} -- device type neutral bits. This is done to not duplicate code for the OF-platform driver. Signed-off-by: Anton Vorontsov <avorontsov@ru.mvista.com> Acked-by: Olof Johansson <olof@lixom.net> --- drivers/ata/pata_platform.c | 144 ++++++++++++++++++++++++---------------- include/linux/pata_platform.h | 9 +++ 2 files changed, 95 insertions(+), 58 deletions(-) diff --git a/drivers/ata/pata_platform.c b/drivers/ata/pata_platform.c index ac03a90..224bb6c 100644 --- a/drivers/ata/pata_platform.c +++ b/drivers/ata/pata_platform.c @@ -93,14 +93,9 @@ static struct ata_port_operations pata_platform_port_ops = { }; static void pata_platform_setup_port(struct ata_ioports *ioaddr, - struct pata_platform_info *info) + unsigned int shift) { - unsigned int shift = 0; - /* Fixup the port shift for platforms that need it */ - if (info && info->ioport_shift) - shift = info->ioport_shift; - ioaddr->data_addr = ioaddr->cmd_addr + (ATA_REG_DATA << shift); ioaddr->error_addr = ioaddr->cmd_addr + (ATA_REG_ERR << shift); ioaddr->feature_addr = ioaddr->cmd_addr + (ATA_REG_FEATURE << shift); @@ -114,8 +109,13 @@ static void pata_platform_setup_port(struct ata_ioports *ioaddr, } /** - * pata_platform_probe - attach a platform interface - * @pdev: platform device + * __pata_platform_probe - attach a platform interface + * @dev: device + * @io_res: Resource representing I/O base + * @ctl_res: Resource representing CTL base + * @irq_res: Resource representing IRQ and its flags + * @ioport_shift: I/O port shift + * @__pio_mask: PIO mask * * Register a platform bus IDE interface. Such interfaces are PIO and we * assume do not support IRQ sharing. @@ -135,42 +135,18 @@ static void pata_platform_setup_port(struct ata_ioports *ioaddr, * * If no IRQ resource is present, PIO polling mode is used instead. */ -static int __devinit pata_platform_probe(struct platform_device *pdev) +int __devinit __pata_platform_probe(struct device *dev, + struct resource *io_res, + struct resource *ctl_res, + struct resource *irq_res, + unsigned int ioport_shift, + int __pio_mask) { - struct resource *io_res, *ctl_res; struct ata_host *host; struct ata_port *ap; - struct pata_platform_info *pp_info; unsigned int mmio; - int irq; - - /* - * Simple resource validation .. - */ - if ((pdev->num_resources != 3) && (pdev->num_resources != 2)) { - dev_err(&pdev->dev, "invalid number of resources\n"); - return -EINVAL; - } - - /* - * Get the I/O base first - */ - io_res = platform_get_resource(pdev, IORESOURCE_IO, 0); - if (io_res == NULL) { - io_res = platform_get_resource(pdev, IORESOURCE_MEM, 0); - if (unlikely(io_res == NULL)) - return -EINVAL; - } - - /* - * Then the CTL base - */ - ctl_res = platform_get_resource(pdev, IORESOURCE_IO, 1); - if (ctl_res == NULL) { - ctl_res = platform_get_resource(pdev, IORESOURCE_MEM, 1); - if (unlikely(ctl_res == NULL)) - return -EINVAL; - } + int irq = 0; + int irq_flags = 0; /* * Check for MMIO @@ -181,20 +157,21 @@ static int __devinit pata_platform_probe(struct platform_device *pdev) /* * And the IRQ */ - irq = platform_get_irq(pdev, 0); - if (irq < 0) - irq = 0; /* no irq */ + if (irq_res && irq_res->start > 0) { + irq = irq_res->start; + irq_flags = irq_res->flags; + } /* * Now that that's out of the way, wire up the port.. */ - host = ata_host_alloc(&pdev->dev, 1); + host = ata_host_alloc(dev, 1); if (!host) return -ENOMEM; ap = host->ports[0]; ap->ops = &pata_platform_port_ops; - ap->pio_mask = pio_mask; + ap->pio_mask = __pio_mask; ap->flags |= ATA_FLAG_SLAVE_POSS; /* @@ -209,25 +186,24 @@ static int __devinit pata_platform_probe(struct platform_device *pdev) * Handle the MMIO case */ if (mmio) { - ap->ioaddr.cmd_addr = devm_ioremap(&pdev->dev, io_res->start, + ap->ioaddr.cmd_addr = devm_ioremap(dev, io_res->start, io_res->end - io_res->start + 1); - ap->ioaddr.ctl_addr = devm_ioremap(&pdev->dev, ctl_res->start, + ap->ioaddr.ctl_addr = devm_ioremap(dev, ctl_res->start, ctl_res->end - ctl_res->start + 1); } else { - ap->ioaddr.cmd_addr = devm_ioport_map(&pdev->dev, io_res->start, + ap->ioaddr.cmd_addr = devm_ioport_map(dev, io_res->start, io_res->end - io_res->start + 1); - ap->ioaddr.ctl_addr = devm_ioport_map(&pdev->dev, ctl_res->start, + ap->ioaddr.ctl_addr = devm_ioport_map(dev, ctl_res->start, ctl_res->end - ctl_res->start + 1); } if (!ap->ioaddr.cmd_addr || !ap->ioaddr.ctl_addr) { - dev_err(&pdev->dev, "failed to map IO/CTL base\n"); + dev_err(dev, "failed to map IO/CTL base\n"); return -ENOMEM; } ap->ioaddr.altstatus_addr = ap->ioaddr.ctl_addr; - pp_info = pdev->dev.platform_data; - pata_platform_setup_port(&ap->ioaddr, pp_info); + pata_platform_setup_port(&ap->ioaddr, ioport_shift); ata_port_desc(ap, "%s cmd 0x%llx ctl 0x%llx", mmio ? "mmio" : "ioport", (unsigned long long)io_res->start, @@ -235,26 +211,78 @@ static int __devinit pata_platform_probe(struct platform_device *pdev) /* activate */ return ata_host_activate(host, irq, irq ? ata_interrupt : NULL, - pp_info ? pp_info->irq_flags : 0, - &pata_platform_sht); + irq_flags, &pata_platform_sht); } +EXPORT_SYMBOL_GPL(__pata_platform_probe); /** - * pata_platform_remove - unplug a platform interface - * @pdev: platform device + * __pata_platform_remove - unplug a platform interface + * @dev: device * * A platform bus ATA device has been unplugged. Perform the needed * cleanup. Also called on module unload for any active devices. */ -static int __devexit pata_platform_remove(struct platform_device *pdev) +int __devexit __pata_platform_remove(struct device *dev) { - struct device *dev = &pdev->dev; struct ata_host *host = dev_get_drvdata(dev); ata_host_detach(host); return 0; } +EXPORT_SYMBOL_GPL(__pata_platform_remove); + +static int __devinit pata_platform_probe(struct platform_device *pdev) +{ + struct resource *io_res; + struct resource *ctl_res; + struct resource *irq_res; + struct pata_platform_info *pp_info = pdev->dev.platform_data; + + /* + * Simple resource validation .. + */ + if ((pdev->num_resources != 3) && (pdev->num_resources != 2)) { + dev_err(&pdev->dev, "invalid number of resources\n"); + return -EINVAL; + } + + /* + * Get the I/O base first + */ + io_res = platform_get_resource(pdev, IORESOURCE_IO, 0); + if (io_res == NULL) { + io_res = platform_get_resource(pdev, IORESOURCE_MEM, 0); + if (unlikely(io_res == NULL)) + return -EINVAL; + } + + /* + * Then the CTL base + */ + ctl_res = platform_get_resource(pdev, IORESOURCE_IO, 1); + if (ctl_res == NULL) { + ctl_res = platform_get_resource(pdev, IORESOURCE_MEM, 1); + if (unlikely(ctl_res == NULL)) + return -EINVAL; + } + + /* + * And the IRQ + */ + irq_res = platform_get_resource(pdev, IORESOURCE_IRQ, 0); + if (irq_res) + irq_res->flags = pp_info ? pp_info->irq_flags : 0; + + return __pata_platform_probe(&pdev->dev, io_res, ctl_res, irq_res, + pp_info ? pp_info->ioport_shift : 0, + pio_mask); +} + +static int __devexit pata_platform_remove(struct platform_device *pdev) +{ + return __pata_platform_remove(&pdev->dev); +} static struct platform_driver pata_platform_driver = { .probe = pata_platform_probe, diff --git a/include/linux/pata_platform.h b/include/linux/pata_platform.h index 5799e8d..6a7a92d 100644 --- a/include/linux/pata_platform.h +++ b/include/linux/pata_platform.h @@ -15,4 +15,13 @@ struct pata_platform_info { unsigned int irq_flags; }; +extern int __devinit __pata_platform_probe(struct device *dev, + struct resource *io_res, + struct resource *ctl_res, + struct resource *irq_res, + unsigned int ioport_shift, + int __pio_mask); + +extern int __devexit __pata_platform_remove(struct device *dev); + #endif /* __LINUX_PATA_PLATFORM_H */ -- 1.5.2.2 ^ permalink raw reply related [flat|nested] 43+ messages in thread
* Re: [PATCH 1/3] [libata] pata_platform: make probe and remove functions device type neutral 2007-12-14 18:24 ` [PATCH 1/3] [libata] pata_platform: make probe and remove functions device type neutral Anton Vorontsov @ 2007-12-16 12:46 ` Paul Mundt 0 siblings, 0 replies; 43+ messages in thread From: Paul Mundt @ 2007-12-16 12:46 UTC (permalink / raw) To: Anton Vorontsov Cc: Jeff Garzik, Arnd Bergmann, linux-ide, linuxppc-dev, Olof Johansson On Fri, Dec 14, 2007 at 09:24:29PM +0300, Anton Vorontsov wrote: > Split pata_platform_{probe,remove} into two pieces: > 1. pata_platform_{probe,remove} -- platform_device-dependant bits; > 2. __ptata_platform_{probe,remove} -- device type neutral bits. > > This is done to not duplicate code for the OF-platform driver. > > Signed-off-by: Anton Vorontsov <avorontsov@ru.mvista.com> > Acked-by: Olof Johansson <olof@lixom.net> Looks fine to me now, thanks for cleaning it up Anton. Acked-by: Paul Mundt <lethal@linux-sh.org> ^ permalink raw reply [flat|nested] 43+ messages in thread
* [RFC][PATCH 0/3] OF-platform PATA driver @ 2007-11-23 17:52 Anton Vorontsov 2007-11-23 17:53 ` [PATCH 1/3] [libata] pata_platform: make probe and remove functions device type neutral Anton Vorontsov 0 siblings, 1 reply; 43+ messages in thread From: Anton Vorontsov @ 2007-11-23 17:52 UTC (permalink / raw) To: linuxppc-dev, linux-ide Hi all, Here is the PATA Platform driver using OF infrastructure. Mostly it's just a wrapper around a bit modified pata_platform driver. Patches are well split for the easier review: First one factors out platform_device specific bits and modifies pata_platform to be a library-alike driver (with platform_device default binding). Second patch is OF-driver itself which is using pata_platform "library". Third patch is PowerPC specific, but I'm still Cc'ing linux-ide, just to show how we're using it. As an alternative approach we can use plain pata_platform driver, but I'm not sure how Linux OF bindings' ideologists will or will not like it. So, these patches are strongly Request For Comments. Feel free to train your nitpicking skills ;-), and/or vote for the option you most pleased about (or suggest another?). Thanks. --- Down here is "alternative approach". Probably board-neutral version may be placed somewhere in the drivers/of/...? But who will call it: board file, or device_initcall for all boards? diff --git a/arch/powerpc/platforms/83xx/mpc834x_itx.c b/arch/powerpc/platforms/83xx/mpc834x_itx.c index 150fafb..4caa90d 100644 --- a/arch/powerpc/platforms/83xx/mpc834x_itx.c +++ b/arch/powerpc/platforms/83xx/mpc834x_itx.c @@ -24,6 +24,7 @@ #include <linux/seq_file.h> #include <linux/root_dev.h> #include <linux/of_platform.h> +#include <linux/pata_platform.h> #include <asm/system.h> #include <asm/atomic.h> @@ -102,6 +103,78 @@ static int __init mpc834x_itx_probe(void) return of_flat_dt_is_compatible(root, "MPC834xMITX"); } +static int __init mpc834x_itx_pata_init(void) +{ + struct device_node *np; + unsigned int i; + + if (!machine_is(mpc834x_itx)) + return 0; + + for (np = NULL, i = 0; + (np = of_find_compatible_node(np, NULL, "pata-platform")); + i++) { + int ret; + struct resource res[3]; + const u32 *ioport_shift; + struct platform_device *pdev; + struct pata_platform_info pdata = {}; + + memset(res, 0, sizeof(res)); + + ret = of_address_to_resource(np, 0, &res[0]); + if (ret) { + printk(KERN_ERR "pata.%d: unable to get IO address " + "from the device tree\n", i); + goto err0; + } + + ret = of_address_to_resource(np, 1, &res[1]); + if (ret) { + printk(KERN_ERR "pata.%d: unable to get CTL address " + "from the device tree\n", i); + goto err0; + } + + ret = of_irq_to_resource(np, 0, &res[2]); + if (ret == NO_IRQ) { + printk(KERN_ERR "pata.%d: no IRQ\n", i); + goto err0; + } + + ioport_shift = of_get_property(np, "ioport-shift", NULL); + if (ioport_shift) + pdata.ioport_shift = *ioport_shift; + + pdev = platform_device_alloc("pata_platform", i); + if (!pdev) + goto err0; + + ret = platform_device_add_data(pdev, &pdata, sizeof(pdata)); + if (ret) + goto err1; + + ret = platform_device_add_resources(pdev, res, ARRAY_SIZE(res)); + if (ret) + goto err1; + + ret = platform_device_register(pdev); + if (ret) + goto err1; + + continue; +err1: + printk(KERN_ERR "pata.%d: registration failed\n", i); + platform_device_del(pdev); /* will free everything */ +err0: + /* Even if some device failed, try others */ + continue; + } + + return 0; +} +device_initcall(mpc834x_itx_pata_init); + define_machine(mpc834x_itx) { .name = "MPC834x ITX", .probe = mpc834x_itx_probe, ^ permalink raw reply related [flat|nested] 43+ messages in thread
* [PATCH 1/3] [libata] pata_platform: make probe and remove functions device type neutral 2007-11-23 17:52 [RFC][PATCH 0/3] OF-platform PATA driver Anton Vorontsov @ 2007-11-23 17:53 ` Anton Vorontsov 0 siblings, 0 replies; 43+ messages in thread From: Anton Vorontsov @ 2007-11-23 17:53 UTC (permalink / raw) To: linuxppc-dev, linux-ide Split pata_platform_{probe,remove} into two pieces: 1. pata_platform_{probe,remove} -- platform_device-dependant bits 2. __ptata_platform_{probe,remove} -- device type neutral bits. This is done to not duplicate code for the OF-platform driver. Signed-off-by: Anton Vorontsov <avorontsov@ru.mvista.com> --- drivers/ata/pata_platform.c | 139 +++++++++++++++++++++++++------------------ drivers/ata/pata_platform.h | 12 ++++ 2 files changed, 94 insertions(+), 57 deletions(-) create mode 100644 drivers/ata/pata_platform.h diff --git a/drivers/ata/pata_platform.c b/drivers/ata/pata_platform.c index ac03a90..6436c38 100644 --- a/drivers/ata/pata_platform.c +++ b/drivers/ata/pata_platform.c @@ -93,14 +93,9 @@ static struct ata_port_operations pata_platform_port_ops = { }; static void pata_platform_setup_port(struct ata_ioports *ioaddr, - struct pata_platform_info *info) + unsigned int shift) { - unsigned int shift = 0; - /* Fixup the port shift for platforms that need it */ - if (info && info->ioport_shift) - shift = info->ioport_shift; - ioaddr->data_addr = ioaddr->cmd_addr + (ATA_REG_DATA << shift); ioaddr->error_addr = ioaddr->cmd_addr + (ATA_REG_ERR << shift); ioaddr->feature_addr = ioaddr->cmd_addr + (ATA_REG_FEATURE << shift); @@ -114,8 +109,12 @@ static void pata_platform_setup_port(struct ata_ioports *ioaddr, } /** - * pata_platform_probe - attach a platform interface - * @pdev: platform device + * __pata_platform_probe - attach a platform interface + * @dev: device + * @io_res: Resource representing I/O base + * @ctl_res: Resource representing CTL base + * @irq_res: Resource representing IRQ and its flags + * @ioport_shift: I/O port shift * * Register a platform bus IDE interface. Such interfaces are PIO and we * assume do not support IRQ sharing. @@ -135,42 +134,17 @@ static void pata_platform_setup_port(struct ata_ioports *ioaddr, * * If no IRQ resource is present, PIO polling mode is used instead. */ -static int __devinit pata_platform_probe(struct platform_device *pdev) +int __devinit __pata_platform_probe(struct device *dev, + struct resource *io_res, + struct resource *ctl_res, + struct resource *irq_res, + unsigned int ioport_shift) { - struct resource *io_res, *ctl_res; struct ata_host *host; struct ata_port *ap; - struct pata_platform_info *pp_info; unsigned int mmio; - int irq; - - /* - * Simple resource validation .. - */ - if ((pdev->num_resources != 3) && (pdev->num_resources != 2)) { - dev_err(&pdev->dev, "invalid number of resources\n"); - return -EINVAL; - } - - /* - * Get the I/O base first - */ - io_res = platform_get_resource(pdev, IORESOURCE_IO, 0); - if (io_res == NULL) { - io_res = platform_get_resource(pdev, IORESOURCE_MEM, 0); - if (unlikely(io_res == NULL)) - return -EINVAL; - } - - /* - * Then the CTL base - */ - ctl_res = platform_get_resource(pdev, IORESOURCE_IO, 1); - if (ctl_res == NULL) { - ctl_res = platform_get_resource(pdev, IORESOURCE_MEM, 1); - if (unlikely(ctl_res == NULL)) - return -EINVAL; - } + int irq = 0; + int irq_flags = 0; /* * Check for MMIO @@ -181,14 +155,15 @@ static int __devinit pata_platform_probe(struct platform_device *pdev) /* * And the IRQ */ - irq = platform_get_irq(pdev, 0); - if (irq < 0) - irq = 0; /* no irq */ + if (irq_res && irq_res->start > 0) { + irq = irq_res->start; + irq_flags = irq_res->flags; + } /* * Now that that's out of the way, wire up the port.. */ - host = ata_host_alloc(&pdev->dev, 1); + host = ata_host_alloc(dev, 1); if (!host) return -ENOMEM; ap = host->ports[0]; @@ -209,25 +184,24 @@ static int __devinit pata_platform_probe(struct platform_device *pdev) * Handle the MMIO case */ if (mmio) { - ap->ioaddr.cmd_addr = devm_ioremap(&pdev->dev, io_res->start, + ap->ioaddr.cmd_addr = devm_ioremap(dev, io_res->start, io_res->end - io_res->start + 1); - ap->ioaddr.ctl_addr = devm_ioremap(&pdev->dev, ctl_res->start, + ap->ioaddr.ctl_addr = devm_ioremap(dev, ctl_res->start, ctl_res->end - ctl_res->start + 1); } else { - ap->ioaddr.cmd_addr = devm_ioport_map(&pdev->dev, io_res->start, + ap->ioaddr.cmd_addr = devm_ioport_map(dev, io_res->start, io_res->end - io_res->start + 1); - ap->ioaddr.ctl_addr = devm_ioport_map(&pdev->dev, ctl_res->start, + ap->ioaddr.ctl_addr = devm_ioport_map(dev, ctl_res->start, ctl_res->end - ctl_res->start + 1); } if (!ap->ioaddr.cmd_addr || !ap->ioaddr.ctl_addr) { - dev_err(&pdev->dev, "failed to map IO/CTL base\n"); + dev_err(dev, "failed to map IO/CTL base\n"); return -ENOMEM; } ap->ioaddr.altstatus_addr = ap->ioaddr.ctl_addr; - pp_info = pdev->dev.platform_data; - pata_platform_setup_port(&ap->ioaddr, pp_info); + pata_platform_setup_port(&ap->ioaddr, ioport_shift); ata_port_desc(ap, "%s cmd 0x%llx ctl 0x%llx", mmio ? "mmio" : "ioport", (unsigned long long)io_res->start, @@ -235,26 +209,77 @@ static int __devinit pata_platform_probe(struct platform_device *pdev) /* activate */ return ata_host_activate(host, irq, irq ? ata_interrupt : NULL, - pp_info ? pp_info->irq_flags : 0, - &pata_platform_sht); + irq_flags, &pata_platform_sht); } +EXPORT_SYMBOL_GPL(__pata_platform_probe); /** - * pata_platform_remove - unplug a platform interface - * @pdev: platform device + * __pata_platform_remove - unplug a platform interface + * @dev: device * * A platform bus ATA device has been unplugged. Perform the needed * cleanup. Also called on module unload for any active devices. */ -static int __devexit pata_platform_remove(struct platform_device *pdev) +int __devexit __pata_platform_remove(struct device *dev) { - struct device *dev = &pdev->dev; struct ata_host *host = dev_get_drvdata(dev); ata_host_detach(host); return 0; } +EXPORT_SYMBOL_GPL(__pata_platform_remove); + +static int __devinit pata_platform_probe(struct platform_device *pdev) +{ + struct resource *io_res; + struct resource *ctl_res; + struct resource *irq_res; + struct pata_platform_info *pp_info = pdev->dev.platform_data; + + /* + * Simple resource validation .. + */ + if ((pdev->num_resources != 3) && (pdev->num_resources != 2)) { + dev_err(&pdev->dev, "invalid number of resources\n"); + return -EINVAL; + } + + /* + * Get the I/O base first + */ + io_res = platform_get_resource(pdev, IORESOURCE_IO, 0); + if (io_res == NULL) { + io_res = platform_get_resource(pdev, IORESOURCE_MEM, 0); + if (unlikely(io_res == NULL)) + return -EINVAL; + } + + /* + * Then the CTL base + */ + ctl_res = platform_get_resource(pdev, IORESOURCE_IO, 1); + if (ctl_res == NULL) { + ctl_res = platform_get_resource(pdev, IORESOURCE_MEM, 1); + if (unlikely(ctl_res == NULL)) + return -EINVAL; + } + + /* + * And the IRQ + */ + irq_res = platform_get_resource(pdev, IORESOURCE_IRQ, 0); + if (irq_res) + irq_res->flags = pp_info ? pp_info->irq_flags : 0; + + return __pata_platform_probe(&pdev->dev, io_res, ctl_res, irq_res, + pp_info ? pp_info->ioport_shift : 0); +} + +static int __devexit pata_platform_remove(struct platform_device *pdev) +{ + return __pata_platform_remove(&pdev->dev); +} static struct platform_driver pata_platform_driver = { .probe = pata_platform_probe, diff --git a/drivers/ata/pata_platform.h b/drivers/ata/pata_platform.h new file mode 100644 index 0000000..9752a42 --- /dev/null +++ b/drivers/ata/pata_platform.h @@ -0,0 +1,12 @@ +#ifndef __DRIVERS_ATA_PATA_PLATFORM_H +#define __DRIVERS_ATA_PATA_PLATFORM_H + +extern int __devinit __pata_platform_probe(struct device *dev, + struct resource *io_res, + struct resource *ctl_res, + struct resource *irq_res, + unsigned int ioport_shift); + +extern int __devexit __pata_platform_remove(struct device *dev); + +#endif /* __DRIVERS_ATA_PATA_PLATFORM_H */ -- 1.5.2.2 ^ permalink raw reply related [flat|nested] 43+ messages in thread
end of thread, other threads:[~2008-01-09 19:01 UTC | newest] Thread overview: 43+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2007-11-27 15:37 [PATCH 0/3] OF-platform PATA driver Anton Vorontsov 2007-11-27 15:39 ` [PATCH 1/3] [libata] pata_platform: make probe and remove functions device type neutral Anton Vorontsov 2007-11-27 22:31 ` Arnd Bergmann 2007-11-27 15:39 ` [PATCH 2/3] [libata] pata_of_platform: OF-Platform PATA device driver Anton Vorontsov 2007-11-27 21:22 ` Olof Johansson 2007-11-27 21:32 ` Arnd Bergmann 2007-11-28 15:49 ` Anton Vorontsov 2007-11-28 16:11 ` Sergei Shtylyov 2007-11-29 0:54 ` Anton Vorontsov 2007-11-30 10:17 ` Sergei Shtylyov 2007-11-30 10:58 ` Anton Vorontsov 2007-11-30 11:05 ` Sergei Shtylyov 2007-11-30 11:45 ` Anton Vorontsov 2007-11-30 11:43 ` Sergei Shtylyov 2007-11-30 12:09 ` Anton Vorontsov 2007-11-28 16:29 ` Sergei Shtylyov 2007-11-28 0:41 ` Stephen Rothwell 2007-12-02 3:59 ` Olof Johansson 2007-11-27 15:39 ` [PATCH 3/3] [POWERPC] MPC8349E-mITX: introduce localbus and pata nodes Anton Vorontsov 2007-11-27 15:49 ` Sergei Shtylyov 2007-11-27 16:41 ` Anton Vorontsov 2007-11-27 16:46 ` Sergei Shtylyov 2007-11-27 17:27 ` Anton Vorontsov 2007-11-27 17:25 ` Sergei Shtylyov 2007-11-27 17:34 ` Anton Vorontsov 2007-11-27 17:34 ` Sergei Shtylyov 2007-11-27 17:48 ` Anton Vorontsov 2007-11-27 18:07 ` Sergei Shtylyov 2007-11-27 19:50 ` Anton Vorontsov 2007-11-27 21:18 ` Kumar Gala 2007-11-28 9:51 ` [PATCH 0/3] OF-platform PATA driver Paul Mundt 2007-11-28 13:24 ` Anton Vorontsov 2007-12-01 22:54 ` Jeff Garzik 2007-12-01 23:58 ` Anton Vorontsov 2007-12-02 3:57 ` Olof Johansson 2007-12-02 11:46 ` Anton Vorontsov 2007-12-02 15:45 ` Olof Johansson 2007-12-02 23:40 ` Arnd Bergmann 2007-12-02 23:58 ` Olof Johansson -- strict thread matches above, loose matches on Subject: below -- 2008-01-09 19:08 [PATCH v4 " Anton Vorontsov 2008-01-09 19:10 ` [PATCH 1/3] [libata] pata_platform: make probe and remove functions device type neutral Anton Vorontsov 2007-12-14 18:21 [PATCH v3 0/3] OF-platform PATA driver Anton Vorontsov 2007-12-14 18:24 ` [PATCH 1/3] [libata] pata_platform: make probe and remove functions device type neutral Anton Vorontsov 2007-12-16 12:46 ` Paul Mundt 2007-11-23 17:52 [RFC][PATCH 0/3] OF-platform PATA driver Anton Vorontsov 2007-11-23 17:53 ` [PATCH 1/3] [libata] pata_platform: make probe and remove functions device type neutral Anton Vorontsov
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).