* (unknown), @ 2014-02-22 15:53 Hans de Goede [not found] ` <1393084424-31099-1-git-send-email-hdegoede-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> 0 siblings, 1 reply; 81+ messages in thread From: Hans de Goede @ 2014-02-22 15:53 UTC (permalink / raw) To: Tejun Heo, Maxime Ripard Cc: Oliver Schinagl, Richard Zhu, Roger Quadros, Lee Jones, linux-ide-u79uwXL29TY76Z2rM5mHXA, linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r, devicetree, linux-sunxi-/JYPxA39Uh5TLH3MbocFFw Hi all, Here is v7 of my patchset for adding ahci-sunxi support. This is hopefully the final final version of this set :) Note I'm going on vacation for a week starting Monday, so if I'm not responding that is why. Tejun if you feel some small cleanups are still necessary and you don't want to wait for me to get back feel free to squash in any cleanups you deem necessary. This has been tested with Allwinner A10, Allwinner A20 and Freeware imx6x SoCs, including suspend / resume. Note that the ahci_imx driver now also has imx53 sata support, it would be good if someone could test that with this series. History: v1, by Olliver Schinagl: This was using the approach of having a platform device which probe method creates a new child platform device which gets driven by ahci_platform.c, as done by ahci_imx.c . v2, by Hans de Goede: Stand-alone platform driver based on Olliver's work v3, by Hans de Goede: patch-series, with 4 different parts a) Make ahci_platform.c more generic, handle more then 1 clk, target pwr regulator b) New ahci-sunxi code only populating ahci_platform_data, passed to ahci_platform.c to of_device_id matching. c) Refactor ahci-imx code to work the same as the new ahci-sunxi code, this is the reason why v3 is an RFC, I'm waiting for the wandboard I ordered to arrive so that I can actually test this. d) dts bindings for the sunxi ahci parts v4, by Hans de Goede: patch-series, with 5 different parts: a) Make ahci_platform.c more generic, handle more then 1 clk, target pwr regulator b) Turn parts of ahci_platform.c into a library for use by other drivers c) New ahci-sunxi driver using the ahci_platform.c library functionality d) Refactor ahci-imx code to work the same as the new ahci-sunxi code e) dts bindings for the sunxi ahci parts v5: v4 + the following changes: 1) fsl,imx6q driver is now tested 2) fixed suspend / resume on fsl,imx6q 3) Modifed devicetree node naming to match dt spec 4) Reworked the busy waiting code in the sunxi-phy handling as suggested by Russell King v6: v5 rebased on top of 3.14-rc3 + the following changes 1) Added Roger Quadros' generic phy support series 2) Added a "ARM: sun4i: dt: Remove grouping + simple-bus for regulators" dts patch v7: v6 + the following changes: 1) Addressed all Tejun's review remarks: * Added function header comments to all exported ahci_platform functions * Added comments in some other places * Removed use of 2 empty lines to separate functions in some cases * Use devres to automatically call ahci_platform_put_resources on get_resource failure, probe failure and regular device remove 2) Dropped patches to move ahci_host_priv struct declaration to include/linux, this was a left-over from v3 and is no longer necessary 3) Updated Roger's "ata: ahci_platform: Manage SATA PHY" patch: * Update function header comments for the changes this makes * Drop the Kconfig PHY requires hack, my patch for the phy-core to always be built-in has been queued in Greg KH's tree, so this is no longer necessary. 4) Dropped Roger's "ata: ahci_platform: Add 'struct device' argument to ahci_platform_put_resources()" patch, ahci_platform_put_resources already has a device argument as result of it being changed into a devres release function Tejun, can you please add patches 1-12 to your ata tree for 3.15 ? Maxime, can you please add patch 13-15 to your dts tree for 3.15 ? Thanks & Regards, Hans ^ permalink raw reply [flat|nested] 81+ messages in thread
[parent not found: <1393084424-31099-1-git-send-email-hdegoede-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>]
* [PATCH v7 01/15] libahci: Allow drivers to override start_engine [not found] ` <1393084424-31099-1-git-send-email-hdegoede-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> @ 2014-02-22 15:53 ` Hans de Goede 2014-02-22 15:53 ` [PATCH v7 02/15] ahci-platform: Add support for devices with more then 1 clock Hans de Goede ` (14 subsequent siblings) 15 siblings, 0 replies; 81+ messages in thread From: Hans de Goede @ 2014-02-22 15:53 UTC (permalink / raw) To: Tejun Heo, Maxime Ripard Cc: Oliver Schinagl, Richard Zhu, Roger Quadros, Lee Jones, linux-ide-u79uwXL29TY76Z2rM5mHXA, linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r, devicetree, linux-sunxi-/JYPxA39Uh5TLH3MbocFFw, Hans de Goede Allwinner A10 and A20 ARM SoCs have an AHCI sata controller which needs a special register to be poked before starting the DMA engine. This register gets reset on an ahci_stop_engine call, so there is no other place then ahci_start_engine where this poking can be done. This commit allows drivers to override ahci_start_engine behavior for use by the Allwinner AHCI driver (and potentially other drivers in the future). Signed-off-by: Hans de Goede <hdegoede-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> --- drivers/ata/ahci.c | 6 ++++-- drivers/ata/ahci.h | 6 ++++++ drivers/ata/libahci.c | 26 +++++++++++++++++++------- drivers/ata/sata_highbank.c | 3 ++- 4 files changed, 31 insertions(+), 10 deletions(-) diff --git a/drivers/ata/ahci.c b/drivers/ata/ahci.c index dc2756f..eda68b4 100644 --- a/drivers/ata/ahci.c +++ b/drivers/ata/ahci.c @@ -564,6 +564,7 @@ static int ahci_vt8251_hardreset(struct ata_link *link, unsigned int *class, unsigned long deadline) { struct ata_port *ap = link->ap; + struct ahci_host_priv *hpriv = ap->host->private_data; bool online; int rc; @@ -574,7 +575,7 @@ static int ahci_vt8251_hardreset(struct ata_link *link, unsigned int *class, rc = sata_link_hardreset(link, sata_ehc_deb_timing(&link->eh_context), deadline, &online, NULL); - ahci_start_engine(ap); + hpriv->start_engine(ap); DPRINTK("EXIT, rc=%d, class=%u\n", rc, *class); @@ -589,6 +590,7 @@ static int ahci_p5wdh_hardreset(struct ata_link *link, unsigned int *class, { struct ata_port *ap = link->ap; struct ahci_port_priv *pp = ap->private_data; + struct ahci_host_priv *hpriv = ap->host->private_data; u8 *d2h_fis = pp->rx_fis + RX_FIS_D2H_REG; struct ata_taskfile tf; bool online; @@ -604,7 +606,7 @@ static int ahci_p5wdh_hardreset(struct ata_link *link, unsigned int *class, rc = sata_link_hardreset(link, sata_ehc_deb_timing(&link->eh_context), deadline, &online, NULL); - ahci_start_engine(ap); + hpriv->start_engine(ap); /* The pseudo configuration device on SIMG4726 attached to * ASUS P5W-DH Deluxe doesn't send signature FIS after diff --git a/drivers/ata/ahci.h b/drivers/ata/ahci.h index 2289efd..64d1a99 100644 --- a/drivers/ata/ahci.h +++ b/drivers/ata/ahci.h @@ -323,6 +323,12 @@ struct ahci_host_priv { u32 em_msg_type; /* EM message type */ struct clk *clk; /* Only for platforms supporting clk */ void *plat_data; /* Other platform data */ + /* + * Optional ahci_start_engine override, if not set this gets set to the + * default ahci_start_engine during ahci_save_initial_config, this can + * be overridden anytime before the host is activated. + */ + void (*start_engine)(struct ata_port *ap); }; extern int ahci_ignore_sss; diff --git a/drivers/ata/libahci.c b/drivers/ata/libahci.c index 36605ab..f839bb3 100644 --- a/drivers/ata/libahci.c +++ b/drivers/ata/libahci.c @@ -394,6 +394,9 @@ static ssize_t ahci_show_em_supported(struct device *dev, * * If inconsistent, config values are fixed up by this function. * + * If it is not set already this function sets hpriv->start_engine to + * ahci_start_engine. + * * LOCKING: * None. */ @@ -500,6 +503,9 @@ void ahci_save_initial_config(struct device *dev, hpriv->cap = cap; hpriv->cap2 = cap2; hpriv->port_map = port_map; + + if (!hpriv->start_engine) + hpriv->start_engine = ahci_start_engine; } EXPORT_SYMBOL_GPL(ahci_save_initial_config); @@ -766,7 +772,7 @@ static void ahci_start_port(struct ata_port *ap) /* enable DMA */ if (!(hpriv->flags & AHCI_HFLAG_DELAY_ENGINE)) - ahci_start_engine(ap); + hpriv->start_engine(ap); /* turn on LEDs */ if (ap->flags & ATA_FLAG_EM) { @@ -1234,7 +1240,7 @@ int ahci_kick_engine(struct ata_port *ap) /* restart engine */ out_restart: - ahci_start_engine(ap); + hpriv->start_engine(ap); return rc; } EXPORT_SYMBOL_GPL(ahci_kick_engine); @@ -1426,6 +1432,7 @@ static int ahci_hardreset(struct ata_link *link, unsigned int *class, const unsigned long *timing = sata_ehc_deb_timing(&link->eh_context); struct ata_port *ap = link->ap; struct ahci_port_priv *pp = ap->private_data; + struct ahci_host_priv *hpriv = ap->host->private_data; u8 *d2h_fis = pp->rx_fis + RX_FIS_D2H_REG; struct ata_taskfile tf; bool online; @@ -1443,7 +1450,7 @@ static int ahci_hardreset(struct ata_link *link, unsigned int *class, rc = sata_link_hardreset(link, timing, deadline, &online, ahci_check_ready); - ahci_start_engine(ap); + hpriv->start_engine(ap); if (online) *class = ahci_dev_classify(ap); @@ -2007,10 +2014,12 @@ static void ahci_thaw(struct ata_port *ap) void ahci_error_handler(struct ata_port *ap) { + struct ahci_host_priv *hpriv = ap->host->private_data; + if (!(ap->pflags & ATA_PFLAG_FROZEN)) { /* restart engine */ ahci_stop_engine(ap); - ahci_start_engine(ap); + hpriv->start_engine(ap); } sata_pmp_error_handler(ap); @@ -2031,6 +2040,7 @@ static void ahci_post_internal_cmd(struct ata_queued_cmd *qc) static void ahci_set_aggressive_devslp(struct ata_port *ap, bool sleep) { + struct ahci_host_priv *hpriv = ap->host->private_data; void __iomem *port_mmio = ahci_port_base(ap); struct ata_device *dev = ap->link.device; u32 devslp, dm, dito, mdat, deto; @@ -2094,7 +2104,7 @@ static void ahci_set_aggressive_devslp(struct ata_port *ap, bool sleep) PORT_DEVSLP_ADSE); writel(devslp, port_mmio + PORT_DEVSLP); - ahci_start_engine(ap); + hpriv->start_engine(ap); /* enable device sleep feature for the drive */ err_mask = ata_dev_set_feature(dev, @@ -2106,6 +2116,7 @@ static void ahci_set_aggressive_devslp(struct ata_port *ap, bool sleep) static void ahci_enable_fbs(struct ata_port *ap) { + struct ahci_host_priv *hpriv = ap->host->private_data; struct ahci_port_priv *pp = ap->private_data; void __iomem *port_mmio = ahci_port_base(ap); u32 fbs; @@ -2134,11 +2145,12 @@ static void ahci_enable_fbs(struct ata_port *ap) } else dev_err(ap->host->dev, "Failed to enable FBS\n"); - ahci_start_engine(ap); + hpriv->start_engine(ap); } static void ahci_disable_fbs(struct ata_port *ap) { + struct ahci_host_priv *hpriv = ap->host->private_data; struct ahci_port_priv *pp = ap->private_data; void __iomem *port_mmio = ahci_port_base(ap); u32 fbs; @@ -2166,7 +2178,7 @@ static void ahci_disable_fbs(struct ata_port *ap) pp->fbs_enabled = false; } - ahci_start_engine(ap); + hpriv->start_engine(ap); } static void ahci_pmp_attach(struct ata_port *ap) diff --git a/drivers/ata/sata_highbank.c b/drivers/ata/sata_highbank.c index 870b11e..b3b18d1 100644 --- a/drivers/ata/sata_highbank.c +++ b/drivers/ata/sata_highbank.c @@ -403,6 +403,7 @@ static int ahci_highbank_hardreset(struct ata_link *link, unsigned int *class, static const unsigned long timing[] = { 5, 100, 500}; struct ata_port *ap = link->ap; struct ahci_port_priv *pp = ap->private_data; + struct ahci_host_priv *hpriv = ap->host->private_data; u8 *d2h_fis = pp->rx_fis + RX_FIS_D2H_REG; struct ata_taskfile tf; bool online; @@ -431,7 +432,7 @@ static int ahci_highbank_hardreset(struct ata_link *link, unsigned int *class, break; } while (!online && retry--); - ahci_start_engine(ap); + hpriv->start_engine(ap); if (online) *class = ahci_dev_classify(ap); -- 1.9.0 ^ permalink raw reply related [flat|nested] 81+ messages in thread
* [PATCH v7 02/15] ahci-platform: Add support for devices with more then 1 clock [not found] ` <1393084424-31099-1-git-send-email-hdegoede-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> 2014-02-22 15:53 ` [PATCH v7 01/15] libahci: Allow drivers to override start_engine Hans de Goede @ 2014-02-22 15:53 ` Hans de Goede 2014-03-03 17:40 ` Bartlomiej Zolnierkiewicz 2014-02-22 15:53 ` [PATCH v7 03/15] ahci-platform: Add support for an optional regulator for sata-target power Hans de Goede ` (13 subsequent siblings) 15 siblings, 1 reply; 81+ messages in thread From: Hans de Goede @ 2014-02-22 15:53 UTC (permalink / raw) To: Tejun Heo, Maxime Ripard Cc: Oliver Schinagl, Richard Zhu, Roger Quadros, Lee Jones, linux-ide-u79uwXL29TY76Z2rM5mHXA, linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r, devicetree, linux-sunxi-/JYPxA39Uh5TLH3MbocFFw, Hans de Goede The allwinner-sun4i AHCI controller needs 2 clocks to be enabled and the imx AHCI controller needs 3 clocks to be enabled. Signed-off-by: Hans de Goede <hdegoede-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> --- .../devicetree/bindings/ata/ahci-platform.txt | 1 + drivers/ata/ahci.h | 3 +- drivers/ata/ahci_platform.c | 119 ++++++++++++++++----- include/linux/ahci_platform.h | 4 + 4 files changed, 99 insertions(+), 28 deletions(-) diff --git a/Documentation/devicetree/bindings/ata/ahci-platform.txt b/Documentation/devicetree/bindings/ata/ahci-platform.txt index 89de156..3ced07d 100644 --- a/Documentation/devicetree/bindings/ata/ahci-platform.txt +++ b/Documentation/devicetree/bindings/ata/ahci-platform.txt @@ -10,6 +10,7 @@ Required properties: Optional properties: - dma-coherent : Present if dma operations are coherent +- clocks : a list of phandle + clock specifier pairs Example: sata@ffe08000 { diff --git a/drivers/ata/ahci.h b/drivers/ata/ahci.h index 64d1a99..c12862b 100644 --- a/drivers/ata/ahci.h +++ b/drivers/ata/ahci.h @@ -51,6 +51,7 @@ enum { AHCI_MAX_PORTS = 32, + AHCI_MAX_CLKS = 3, AHCI_MAX_SG = 168, /* hardware max is 64K */ AHCI_DMA_BOUNDARY = 0xffffffff, AHCI_MAX_CMDS = 32, @@ -321,7 +322,7 @@ struct ahci_host_priv { u32 em_loc; /* enclosure management location */ u32 em_buf_sz; /* EM buffer size in byte */ u32 em_msg_type; /* EM message type */ - struct clk *clk; /* Only for platforms supporting clk */ + struct clk *clks[AHCI_MAX_CLKS]; /* Optional */ void *plat_data; /* Other platform data */ /* * Optional ahci_start_engine override, if not set this gets set to the diff --git a/drivers/ata/ahci_platform.c b/drivers/ata/ahci_platform.c index 4b231ba..609975d 100644 --- a/drivers/ata/ahci_platform.c +++ b/drivers/ata/ahci_platform.c @@ -87,6 +87,66 @@ static struct scsi_host_template ahci_platform_sht = { AHCI_SHT("ahci_platform"), }; +/** + * ahci_platform_enable_clks - Enable platform clocks + * @hpriv: host private area to store config values + * + * This function enables all the clks found in hpriv->clks, starting + * at index 0. If any clk fails to enable it disables all the clks + * already enabled in reverse order, and then returns an error. + * + * LOCKING: + * None. + * + * RETURNS: + * 0 on success otherwise a negative error code + */ +int ahci_platform_enable_clks(struct ahci_host_priv *hpriv) +{ + int c, rc; + + for (c = 0; c < AHCI_MAX_CLKS && hpriv->clks[c]; c++) { + rc = clk_prepare_enable(hpriv->clks[c]); + if (rc) + goto disable_unprepare_clk; + } + return 0; + +disable_unprepare_clk: + while (--c >= 0) + clk_disable_unprepare(hpriv->clks[c]); + return rc; +} +EXPORT_SYMBOL_GPL(ahci_platform_enable_clks); + +/** + * ahci_platform_disable_clks - Disable platform clocks + * @hpriv: host private area to store config values + * + * This function disables all the clks found in hpriv->clks, in reverse + * order of ahci_platform_enable_clks (starting at the end of the array). + * + * LOCKING: + * None. + */ +void ahci_platform_disable_clks(struct ahci_host_priv *hpriv) +{ + int c; + + for (c = AHCI_MAX_CLKS - 1; c >= 0; c--) + if (hpriv->clks[c]) + clk_disable_unprepare(hpriv->clks[c]); +} +EXPORT_SYMBOL_GPL(ahci_platform_disable_clks); + +static void ahci_put_clks(struct ahci_host_priv *hpriv) +{ + int c; + + for (c = 0; c < AHCI_MAX_CLKS && hpriv->clks[c]; c++) + clk_put(hpriv->clks[c]); +} + static int ahci_probe(struct platform_device *pdev) { struct device *dev = &pdev->dev; @@ -97,6 +157,7 @@ static int ahci_probe(struct platform_device *pdev) struct ahci_host_priv *hpriv; struct ata_host *host; struct resource *mem; + struct clk *clk; int irq; int n_ports; int i; @@ -131,17 +192,31 @@ static int ahci_probe(struct platform_device *pdev) return -ENOMEM; } - hpriv->clk = clk_get(dev, NULL); - if (IS_ERR(hpriv->clk)) { - dev_err(dev, "can't get clock\n"); - } else { - rc = clk_prepare_enable(hpriv->clk); - if (rc) { - dev_err(dev, "clock prepare enable failed"); - goto free_clk; + for (i = 0; i < AHCI_MAX_CLKS; i++) { + /* + * For now we must use clk_get(dev, NULL) for the first clock, + * because some platforms (da850, spear13xx) are not yet + * converted to use devicetree for clocks. For new platforms + * this is equivalent to of_clk_get(dev->of_node, 0). + */ + if (i == 0) + clk = clk_get(dev, NULL); + else + clk = of_clk_get(dev->of_node, i); + + if (IS_ERR(clk)) { + rc = PTR_ERR(clk); + if (rc == -EPROBE_DEFER) + goto free_clk; + break; } + hpriv->clks[i] = clk; } + rc = ahci_enable_clks(dev, hpriv); + if (rc) + goto free_clk; + /* * Some platforms might need to prepare for mmio region access, * which could be done in the following init call. So, the mmio @@ -222,11 +297,9 @@ pdata_exit: if (pdata && pdata->exit) pdata->exit(dev); disable_unprepare_clk: - if (!IS_ERR(hpriv->clk)) - clk_disable_unprepare(hpriv->clk); + ahci_disable_clks(hpriv); free_clk: - if (!IS_ERR(hpriv->clk)) - clk_put(hpriv->clk); + ahci_put_clks(hpriv); return rc; } @@ -239,10 +312,8 @@ static void ahci_host_stop(struct ata_host *host) if (pdata && pdata->exit) pdata->exit(dev); - if (!IS_ERR(hpriv->clk)) { - clk_disable_unprepare(hpriv->clk); - clk_put(hpriv->clk); - } + ahci_disable_clks(hpriv); + ahci_put_clks(hpriv); } #ifdef CONFIG_PM_SLEEP @@ -277,8 +348,7 @@ static int ahci_suspend(struct device *dev) if (pdata && pdata->suspend) return pdata->suspend(dev); - if (!IS_ERR(hpriv->clk)) - clk_disable_unprepare(hpriv->clk); + ahci_disable_clks(hpriv); return 0; } @@ -290,13 +360,9 @@ static int ahci_resume(struct device *dev) struct ahci_host_priv *hpriv = host->private_data; int rc; - if (!IS_ERR(hpriv->clk)) { - rc = clk_prepare_enable(hpriv->clk); - if (rc) { - dev_err(dev, "clock prepare enable failed"); - return rc; - } - } + rc = ahci_enable_clks(dev, hpriv); + if (rc) + return rc; if (pdata && pdata->resume) { rc = pdata->resume(dev); @@ -317,8 +383,7 @@ static int ahci_resume(struct device *dev) return 0; disable_unprepare_clk: - if (!IS_ERR(hpriv->clk)) - clk_disable_unprepare(hpriv->clk); + ahci_disable_clks(hpriv); return rc; } diff --git a/include/linux/ahci_platform.h b/include/linux/ahci_platform.h index 73a2500..769d065 100644 --- a/include/linux/ahci_platform.h +++ b/include/linux/ahci_platform.h @@ -19,6 +19,7 @@ struct device; struct ata_port_info; +struct ahci_host_priv; struct ahci_platform_data { int (*init)(struct device *dev, void __iomem *addr); @@ -30,4 +31,7 @@ struct ahci_platform_data { unsigned int mask_port_map; }; +int ahci_platform_enable_clks(struct ahci_host_priv *hpriv); +void ahci_platform_disable_clks(struct ahci_host_priv *hpriv); + #endif /* _AHCI_PLATFORM_H */ -- 1.9.0 ^ permalink raw reply related [flat|nested] 81+ messages in thread
* Re: [PATCH v7 02/15] ahci-platform: Add support for devices with more then 1 clock 2014-02-22 15:53 ` [PATCH v7 02/15] ahci-platform: Add support for devices with more then 1 clock Hans de Goede @ 2014-03-03 17:40 ` Bartlomiej Zolnierkiewicz 0 siblings, 0 replies; 81+ messages in thread From: Bartlomiej Zolnierkiewicz @ 2014-03-03 17:40 UTC (permalink / raw) To: Hans de Goede Cc: Tejun Heo, Maxime Ripard, Oliver Schinagl, Richard Zhu, Roger Quadros, Lee Jones, linux-ide, linux-arm-kernel, devicetree, linux-sunxi Hi, On Saturday, February 22, 2014 04:53:31 PM Hans de Goede wrote: > The allwinner-sun4i AHCI controller needs 2 clocks to be enabled and the > imx AHCI controller needs 3 clocks to be enabled. > > Signed-off-by: Hans de Goede <hdegoede@redhat.com> > --- > .../devicetree/bindings/ata/ahci-platform.txt | 1 + > drivers/ata/ahci.h | 3 +- > drivers/ata/ahci_platform.c | 119 ++++++++++++++++----- > include/linux/ahci_platform.h | 4 + > 4 files changed, 99 insertions(+), 28 deletions(-) > > diff --git a/Documentation/devicetree/bindings/ata/ahci-platform.txt b/Documentation/devicetree/bindings/ata/ahci-platform.txt > index 89de156..3ced07d 100644 > --- a/Documentation/devicetree/bindings/ata/ahci-platform.txt > +++ b/Documentation/devicetree/bindings/ata/ahci-platform.txt > @@ -10,6 +10,7 @@ Required properties: > > Optional properties: > - dma-coherent : Present if dma operations are coherent > +- clocks : a list of phandle + clock specifier pairs > > Example: > sata@ffe08000 { > diff --git a/drivers/ata/ahci.h b/drivers/ata/ahci.h > index 64d1a99..c12862b 100644 > --- a/drivers/ata/ahci.h > +++ b/drivers/ata/ahci.h > @@ -51,6 +51,7 @@ > > enum { > AHCI_MAX_PORTS = 32, > + AHCI_MAX_CLKS = 3, > AHCI_MAX_SG = 168, /* hardware max is 64K */ > AHCI_DMA_BOUNDARY = 0xffffffff, > AHCI_MAX_CMDS = 32, > @@ -321,7 +322,7 @@ struct ahci_host_priv { > u32 em_loc; /* enclosure management location */ > u32 em_buf_sz; /* EM buffer size in byte */ > u32 em_msg_type; /* EM message type */ > - struct clk *clk; /* Only for platforms supporting clk */ > + struct clk *clks[AHCI_MAX_CLKS]; /* Optional */ > void *plat_data; /* Other platform data */ > /* > * Optional ahci_start_engine override, if not set this gets set to the > diff --git a/drivers/ata/ahci_platform.c b/drivers/ata/ahci_platform.c > index 4b231ba..609975d 100644 > --- a/drivers/ata/ahci_platform.c > +++ b/drivers/ata/ahci_platform.c > @@ -87,6 +87,66 @@ static struct scsi_host_template ahci_platform_sht = { > AHCI_SHT("ahci_platform"), > }; > > +/** > + * ahci_platform_enable_clks - Enable platform clocks > + * @hpriv: host private area to store config values > + * > + * This function enables all the clks found in hpriv->clks, starting > + * at index 0. If any clk fails to enable it disables all the clks > + * already enabled in reverse order, and then returns an error. > + * > + * LOCKING: > + * None. > + * > + * RETURNS: > + * 0 on success otherwise a negative error code > + */ > +int ahci_platform_enable_clks(struct ahci_host_priv *hpriv) > +{ > + int c, rc; > + > + for (c = 0; c < AHCI_MAX_CLKS && hpriv->clks[c]; c++) { > + rc = clk_prepare_enable(hpriv->clks[c]); > + if (rc) > + goto disable_unprepare_clk; > + } > + return 0; > + > +disable_unprepare_clk: > + while (--c >= 0) > + clk_disable_unprepare(hpriv->clks[c]); > + return rc; > +} > +EXPORT_SYMBOL_GPL(ahci_platform_enable_clks); > + > +/** > + * ahci_platform_disable_clks - Disable platform clocks > + * @hpriv: host private area to store config values > + * > + * This function disables all the clks found in hpriv->clks, in reverse > + * order of ahci_platform_enable_clks (starting at the end of the array). > + * > + * LOCKING: > + * None. > + */ > +void ahci_platform_disable_clks(struct ahci_host_priv *hpriv) > +{ > + int c; > + > + for (c = AHCI_MAX_CLKS - 1; c >= 0; c--) > + if (hpriv->clks[c]) > + clk_disable_unprepare(hpriv->clks[c]); > +} > +EXPORT_SYMBOL_GPL(ahci_platform_disable_clks); > + > +static void ahci_put_clks(struct ahci_host_priv *hpriv) > +{ > + int c; > + > + for (c = 0; c < AHCI_MAX_CLKS && hpriv->clks[c]; c++) > + clk_put(hpriv->clks[c]); > +} > + > static int ahci_probe(struct platform_device *pdev) > { > struct device *dev = &pdev->dev; > @@ -97,6 +157,7 @@ static int ahci_probe(struct platform_device *pdev) > struct ahci_host_priv *hpriv; > struct ata_host *host; > struct resource *mem; > + struct clk *clk; > int irq; > int n_ports; > int i; > @@ -131,17 +192,31 @@ static int ahci_probe(struct platform_device *pdev) > return -ENOMEM; > } > > - hpriv->clk = clk_get(dev, NULL); > - if (IS_ERR(hpriv->clk)) { > - dev_err(dev, "can't get clock\n"); > - } else { > - rc = clk_prepare_enable(hpriv->clk); > - if (rc) { > - dev_err(dev, "clock prepare enable failed"); > - goto free_clk; > + for (i = 0; i < AHCI_MAX_CLKS; i++) { > + /* > + * For now we must use clk_get(dev, NULL) for the first clock, > + * because some platforms (da850, spear13xx) are not yet > + * converted to use devicetree for clocks. For new platforms > + * this is equivalent to of_clk_get(dev->of_node, 0). > + */ > + if (i == 0) > + clk = clk_get(dev, NULL); > + else > + clk = of_clk_get(dev->of_node, i); > + > + if (IS_ERR(clk)) { > + rc = PTR_ERR(clk); > + if (rc == -EPROBE_DEFER) > + goto free_clk; > + break; > } > + hpriv->clks[i] = clk; > } > > + rc = ahci_enable_clks(dev, hpriv); This should be ahci_platform_enable_clks(). > + if (rc) > + goto free_clk; > + > /* > * Some platforms might need to prepare for mmio region access, > * which could be done in the following init call. So, the mmio > @@ -222,11 +297,9 @@ pdata_exit: > if (pdata && pdata->exit) > pdata->exit(dev); > disable_unprepare_clk: > - if (!IS_ERR(hpriv->clk)) > - clk_disable_unprepare(hpriv->clk); > + ahci_disable_clks(hpriv); ahci_platform_disable_clks() > free_clk: > - if (!IS_ERR(hpriv->clk)) > - clk_put(hpriv->clk); > + ahci_put_clks(hpriv); > return rc; > } > > @@ -239,10 +312,8 @@ static void ahci_host_stop(struct ata_host *host) > if (pdata && pdata->exit) > pdata->exit(dev); > > - if (!IS_ERR(hpriv->clk)) { > - clk_disable_unprepare(hpriv->clk); > - clk_put(hpriv->clk); > - } > + ahci_disable_clks(hpriv); ahci_platform_disable_clks() > + ahci_put_clks(hpriv); > } > > #ifdef CONFIG_PM_SLEEP > @@ -277,8 +348,7 @@ static int ahci_suspend(struct device *dev) > if (pdata && pdata->suspend) > return pdata->suspend(dev); > > - if (!IS_ERR(hpriv->clk)) > - clk_disable_unprepare(hpriv->clk); > + ahci_disable_clks(hpriv); ahci_platform_disable_clks() > return 0; > } > @@ -290,13 +360,9 @@ static int ahci_resume(struct device *dev) > struct ahci_host_priv *hpriv = host->private_data; > int rc; > > - if (!IS_ERR(hpriv->clk)) { > - rc = clk_prepare_enable(hpriv->clk); > - if (rc) { > - dev_err(dev, "clock prepare enable failed"); > - return rc; > - } > - } > + rc = ahci_enable_clks(dev, hpriv); ahci_platform_enable_clks() > + if (rc) > + return rc; > > if (pdata && pdata->resume) { > rc = pdata->resume(dev); > @@ -317,8 +383,7 @@ static int ahci_resume(struct device *dev) > return 0; > > disable_unprepare_clk: > - if (!IS_ERR(hpriv->clk)) > - clk_disable_unprepare(hpriv->clk); > + ahci_disable_clks(hpriv); ahci_platform_disable_clks() [...] All code in question gets rewritten in patch #4/15 so the actual problem is the broken bisectability between patch #2 and #4. It seems too late to fix it now but in the future please remember to build-test each patch separately (in addition to testing the whole patchset). Best regards, -- Bartlomiej Zolnierkiewicz Samsung R&D Institute Poland Samsung Electronics ^ permalink raw reply [flat|nested] 81+ messages in thread
* [PATCH v7 03/15] ahci-platform: Add support for an optional regulator for sata-target power [not found] ` <1393084424-31099-1-git-send-email-hdegoede-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> 2014-02-22 15:53 ` [PATCH v7 01/15] libahci: Allow drivers to override start_engine Hans de Goede 2014-02-22 15:53 ` [PATCH v7 02/15] ahci-platform: Add support for devices with more then 1 clock Hans de Goede @ 2014-02-22 15:53 ` Hans de Goede 2014-02-22 15:53 ` [PATCH v7 04/15] ahci-platform: Add enable_ / disable_resources helper functions Hans de Goede ` (12 subsequent siblings) 15 siblings, 0 replies; 81+ messages in thread From: Hans de Goede @ 2014-02-22 15:53 UTC (permalink / raw) To: Tejun Heo, Maxime Ripard Cc: Oliver Schinagl, Richard Zhu, Roger Quadros, Lee Jones, linux-ide-u79uwXL29TY76Z2rM5mHXA, linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r, devicetree, linux-sunxi-/JYPxA39Uh5TLH3MbocFFw, Hans de Goede Signed-off-by: Hans de Goede <hdegoede-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> --- .../devicetree/bindings/ata/ahci-platform.txt | 1 + drivers/ata/ahci.h | 2 ++ drivers/ata/ahci_platform.c | 36 ++++++++++++++++++++-- 3 files changed, 37 insertions(+), 2 deletions(-) diff --git a/Documentation/devicetree/bindings/ata/ahci-platform.txt b/Documentation/devicetree/bindings/ata/ahci-platform.txt index 3ced07d..1ac807f 100644 --- a/Documentation/devicetree/bindings/ata/ahci-platform.txt +++ b/Documentation/devicetree/bindings/ata/ahci-platform.txt @@ -11,6 +11,7 @@ Required properties: Optional properties: - dma-coherent : Present if dma operations are coherent - clocks : a list of phandle + clock specifier pairs +- target-supply : regulator for SATA target power Example: sata@ffe08000 { diff --git a/drivers/ata/ahci.h b/drivers/ata/ahci.h index c12862b..bf8100c 100644 --- a/drivers/ata/ahci.h +++ b/drivers/ata/ahci.h @@ -37,6 +37,7 @@ #include <linux/clk.h> #include <linux/libata.h> +#include <linux/regulator/consumer.h> /* Enclosure Management Control */ #define EM_CTRL_MSG_TYPE 0x000f0000 @@ -323,6 +324,7 @@ struct ahci_host_priv { u32 em_buf_sz; /* EM buffer size in byte */ u32 em_msg_type; /* EM message type */ struct clk *clks[AHCI_MAX_CLKS]; /* Optional */ + struct regulator *target_pwr; /* Optional */ void *plat_data; /* Other platform data */ /* * Optional ahci_start_engine override, if not set this gets set to the diff --git a/drivers/ata/ahci_platform.c b/drivers/ata/ahci_platform.c index 609975d..907c076 100644 --- a/drivers/ata/ahci_platform.c +++ b/drivers/ata/ahci_platform.c @@ -192,6 +192,14 @@ static int ahci_probe(struct platform_device *pdev) return -ENOMEM; } + hpriv->target_pwr = devm_regulator_get_optional(dev, "target"); + if (IS_ERR(hpriv->target_pwr)) { + rc = PTR_ERR(hpriv->target_pwr); + if (rc == -EPROBE_DEFER) + return -EPROBE_DEFER; + hpriv->target_pwr = NULL; + } + for (i = 0; i < AHCI_MAX_CLKS; i++) { /* * For now we must use clk_get(dev, NULL) for the first clock, @@ -213,9 +221,15 @@ static int ahci_probe(struct platform_device *pdev) hpriv->clks[i] = clk; } + if (hpriv->target_pwr) { + rc = regulator_enable(hpriv->target_pwr); + if (rc) + goto free_clk; + } + rc = ahci_enable_clks(dev, hpriv); if (rc) - goto free_clk; + goto disable_regulator; /* * Some platforms might need to prepare for mmio region access, @@ -298,6 +312,9 @@ pdata_exit: pdata->exit(dev); disable_unprepare_clk: ahci_disable_clks(hpriv); +disable_regulator: + if (hpriv->target_pwr) + regulator_disable(hpriv->target_pwr); free_clk: ahci_put_clks(hpriv); return rc; @@ -314,6 +331,9 @@ static void ahci_host_stop(struct ata_host *host) ahci_disable_clks(hpriv); ahci_put_clks(hpriv); + + if (hpriv->target_pwr) + regulator_disable(hpriv->target_pwr); } #ifdef CONFIG_PM_SLEEP @@ -350,6 +370,9 @@ static int ahci_suspend(struct device *dev) ahci_disable_clks(hpriv); + if (hpriv->target_pwr) + regulator_disable(hpriv->target_pwr); + return 0; } @@ -360,9 +383,15 @@ static int ahci_resume(struct device *dev) struct ahci_host_priv *hpriv = host->private_data; int rc; + if (hpriv->target_pwr) { + rc = regulator_enable(hpriv->target_pwr); + if (rc) + return rc; + } + rc = ahci_enable_clks(dev, hpriv); if (rc) - return rc; + goto disable_regulator; if (pdata && pdata->resume) { rc = pdata->resume(dev); @@ -384,6 +413,9 @@ static int ahci_resume(struct device *dev) disable_unprepare_clk: ahci_disable_clks(hpriv); +disable_regulator: + if (hpriv->target_pwr) + regulator_disable(hpriv->target_pwr); return rc; } -- 1.9.0 ^ permalink raw reply related [flat|nested] 81+ messages in thread
* [PATCH v7 04/15] ahci-platform: Add enable_ / disable_resources helper functions [not found] ` <1393084424-31099-1-git-send-email-hdegoede-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> ` (2 preceding siblings ...) 2014-02-22 15:53 ` [PATCH v7 03/15] ahci-platform: Add support for an optional regulator for sata-target power Hans de Goede @ 2014-02-22 15:53 ` Hans de Goede 2014-02-22 15:53 ` [PATCH v7 05/15] ahci-platform: "Library-ise" ahci_probe functionality Hans de Goede ` (11 subsequent siblings) 15 siblings, 0 replies; 81+ messages in thread From: Hans de Goede @ 2014-02-22 15:53 UTC (permalink / raw) To: Tejun Heo, Maxime Ripard Cc: Oliver Schinagl, Richard Zhu, Roger Quadros, Lee Jones, linux-ide-u79uwXL29TY76Z2rM5mHXA, linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r, devicetree, linux-sunxi-/JYPxA39Uh5TLH3MbocFFw, Hans de Goede Signed-off-by: Hans de Goede <hdegoede-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> --- drivers/ata/ahci_platform.c | 112 ++++++++++++++++++++++++++++-------------- include/linux/ahci_platform.h | 2 + 2 files changed, 77 insertions(+), 37 deletions(-) diff --git a/drivers/ata/ahci_platform.c b/drivers/ata/ahci_platform.c index 907c076..6ebbc17 100644 --- a/drivers/ata/ahci_platform.c +++ b/drivers/ata/ahci_platform.c @@ -139,6 +139,68 @@ void ahci_platform_disable_clks(struct ahci_host_priv *hpriv) } EXPORT_SYMBOL_GPL(ahci_platform_disable_clks); +/** + * ahci_platform_enable_resources - Enable platform resources + * @hpriv: host private area to store config values + * + * This function enables all ahci_platform managed resources in + * the following order: + * 1) Regulator + * 2) Clocks (through ahci_platform_enable_clks) + * + * If resource enabling fails at any point the previous enabled + * resources are disabled in reverse order. + * + * LOCKING: + * None. + * + * RETURNS: + * 0 on success otherwise a negative error code + */ +int ahci_platform_enable_resources(struct ahci_host_priv *hpriv) +{ + int rc; + + if (hpriv->target_pwr) { + rc = regulator_enable(hpriv->target_pwr); + if (rc) + return rc; + } + + rc = ahci_platform_enable_clks(hpriv); + if (rc) + goto disable_regulator; + + return 0; + +disable_regulator: + if (hpriv->target_pwr) + regulator_disable(hpriv->target_pwr); + return rc; +} +EXPORT_SYMBOL_GPL(ahci_platform_enable_resources); + +/** + * ahci_platform_disable_resources - Disable platform resources + * @hpriv: host private area to store config values + * + * This function disables all ahci_platform managed resources in + * the following order: + * 1) Clocks (through ahci_platform_disable_clks) + * 2) Regulator + * + * LOCKING: + * None. + */ +void ahci_platform_disable_resources(struct ahci_host_priv *hpriv) +{ + ahci_platform_disable_clks(hpriv); + + if (hpriv->target_pwr) + regulator_disable(hpriv->target_pwr); +} +EXPORT_SYMBOL_GPL(ahci_platform_disable_resources); + static void ahci_put_clks(struct ahci_host_priv *hpriv) { int c; @@ -221,15 +283,9 @@ static int ahci_probe(struct platform_device *pdev) hpriv->clks[i] = clk; } - if (hpriv->target_pwr) { - rc = regulator_enable(hpriv->target_pwr); - if (rc) - goto free_clk; - } - - rc = ahci_enable_clks(dev, hpriv); + rc = ahci_platform_enable_resources(hpriv); if (rc) - goto disable_regulator; + goto free_clk; /* * Some platforms might need to prepare for mmio region access, @@ -240,7 +296,7 @@ static int ahci_probe(struct platform_device *pdev) if (pdata && pdata->init) { rc = pdata->init(dev, hpriv->mmio); if (rc) - goto disable_unprepare_clk; + goto disable_resources; } ahci_save_initial_config(dev, hpriv, @@ -310,11 +366,8 @@ static int ahci_probe(struct platform_device *pdev) pdata_exit: if (pdata && pdata->exit) pdata->exit(dev); -disable_unprepare_clk: - ahci_disable_clks(hpriv); -disable_regulator: - if (hpriv->target_pwr) - regulator_disable(hpriv->target_pwr); +disable_resources: + ahci_platform_disable_resources(hpriv); free_clk: ahci_put_clks(hpriv); return rc; @@ -329,11 +382,8 @@ static void ahci_host_stop(struct ata_host *host) if (pdata && pdata->exit) pdata->exit(dev); - ahci_disable_clks(hpriv); + ahci_platform_disable_resources(hpriv); ahci_put_clks(hpriv); - - if (hpriv->target_pwr) - regulator_disable(hpriv->target_pwr); } #ifdef CONFIG_PM_SLEEP @@ -368,10 +418,7 @@ static int ahci_suspend(struct device *dev) if (pdata && pdata->suspend) return pdata->suspend(dev); - ahci_disable_clks(hpriv); - - if (hpriv->target_pwr) - regulator_disable(hpriv->target_pwr); + ahci_platform_disable_resources(hpriv); return 0; } @@ -383,26 +430,20 @@ static int ahci_resume(struct device *dev) struct ahci_host_priv *hpriv = host->private_data; int rc; - if (hpriv->target_pwr) { - rc = regulator_enable(hpriv->target_pwr); - if (rc) - return rc; - } - - rc = ahci_enable_clks(dev, hpriv); + rc = ahci_platform_enable_resources(hpriv); if (rc) - goto disable_regulator; + return rc; if (pdata && pdata->resume) { rc = pdata->resume(dev); if (rc) - goto disable_unprepare_clk; + goto disable_resources; } if (dev->power.power_state.event == PM_EVENT_SUSPEND) { rc = ahci_reset_controller(host); if (rc) - goto disable_unprepare_clk; + goto disable_resources; ahci_init_controller(host); } @@ -411,11 +452,8 @@ static int ahci_resume(struct device *dev) return 0; -disable_unprepare_clk: - ahci_disable_clks(hpriv); -disable_regulator: - if (hpriv->target_pwr) - regulator_disable(hpriv->target_pwr); +disable_resources: + ahci_platform_disable_resources(hpriv); return rc; } diff --git a/include/linux/ahci_platform.h b/include/linux/ahci_platform.h index 769d065..b674b01 100644 --- a/include/linux/ahci_platform.h +++ b/include/linux/ahci_platform.h @@ -33,5 +33,7 @@ struct ahci_platform_data { int ahci_platform_enable_clks(struct ahci_host_priv *hpriv); void ahci_platform_disable_clks(struct ahci_host_priv *hpriv); +int ahci_platform_enable_resources(struct ahci_host_priv *hpriv); +void ahci_platform_disable_resources(struct ahci_host_priv *hpriv); #endif /* _AHCI_PLATFORM_H */ -- 1.9.0 ^ permalink raw reply related [flat|nested] 81+ messages in thread
* [PATCH v7 05/15] ahci-platform: "Library-ise" ahci_probe functionality [not found] ` <1393084424-31099-1-git-send-email-hdegoede-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> ` (3 preceding siblings ...) 2014-02-22 15:53 ` [PATCH v7 04/15] ahci-platform: Add enable_ / disable_resources helper functions Hans de Goede @ 2014-02-22 15:53 ` Hans de Goede [not found] ` <1393084424-31099-6-git-send-email-hdegoede-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> 2014-02-22 15:53 ` [PATCH v7 06/15] ahci-platform: "Library-ise" suspend / resume functionality Hans de Goede ` (10 subsequent siblings) 15 siblings, 1 reply; 81+ messages in thread From: Hans de Goede @ 2014-02-22 15:53 UTC (permalink / raw) To: Tejun Heo, Maxime Ripard Cc: Oliver Schinagl, Richard Zhu, Roger Quadros, Lee Jones, linux-ide-u79uwXL29TY76Z2rM5mHXA, linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r, devicetree, linux-sunxi-/JYPxA39Uh5TLH3MbocFFw, Hans de Goede ahci_probe consists of 3 steps: 1) Get resources (get mmio, clks, regulator) 2) Enable resources, handled by ahci_platform_enable_resouces 3) The more or less standard ahci-host controller init sequence This commit refactors step 1 and 3 into separate functions, so the platform drivers for AHCI implementations which need a specific order in step 2, and / or need to do some custom register poking at some time, can re-use ahci-platform.c code without needing to copy and paste it. Note that ahci_platform_init_host's prototype takes the 3 non function members of ahci_platform_data as arguments, the idea is that drivers using the new exported utility functions will not use ahci_platform_data at all, and hopefully in the future ahci_platform_data can go away entirely. Signed-off-by: Hans de Goede <hdegoede-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> --- drivers/ata/ahci_platform.c | 195 ++++++++++++++++++++++++++++-------------- include/linux/ahci_platform.h | 14 +++ 2 files changed, 144 insertions(+), 65 deletions(-) diff --git a/drivers/ata/ahci_platform.c b/drivers/ata/ahci_platform.c index 6ebbc17..7f3f2ac 100644 --- a/drivers/ata/ahci_platform.c +++ b/drivers/ata/ahci_platform.c @@ -201,64 +201,64 @@ void ahci_platform_disable_resources(struct ahci_host_priv *hpriv) } EXPORT_SYMBOL_GPL(ahci_platform_disable_resources); -static void ahci_put_clks(struct ahci_host_priv *hpriv) +static void ahci_platform_put_resources(struct device *dev, void *res) { + struct ahci_host_priv *hpriv = res; int c; for (c = 0; c < AHCI_MAX_CLKS && hpriv->clks[c]; c++) clk_put(hpriv->clks[c]); } -static int ahci_probe(struct platform_device *pdev) +/** + * ahci_platform_get_resources - Get platform resources + * @pdev: platform device to get resources for + * + * This function allocates an ahci_host_priv struct, and gets the + * following resources, storing a reference to them inside the returned + * struct: + * + * 1) mmio registers (IORESOURCE_MEM 0, mandatory) + * 2) regulator for controlling the targets power (optional) + * 3) 0 - AHCI_MAX_CLKS clocks, as specified in the devs devicetree node, + * or for non devicetree enabled platforms a single clock + * + * LOCKING: + * None. + * + * RETURNS: + * The allocated ahci_host_priv on success, otherwise an ERR_PTR value + */ +struct ahci_host_priv *ahci_platform_get_resources( + struct platform_device *pdev) { struct device *dev = &pdev->dev; - struct ahci_platform_data *pdata = dev_get_platdata(dev); - const struct platform_device_id *id = platform_get_device_id(pdev); - struct ata_port_info pi = ahci_port_info[id ? id->driver_data : 0]; - const struct ata_port_info *ppi[] = { &pi, NULL }; struct ahci_host_priv *hpriv; - struct ata_host *host; - struct resource *mem; struct clk *clk; - int irq; - int n_ports; - int i; - int rc; + int i, rc = -ENOMEM; - mem = platform_get_resource(pdev, IORESOURCE_MEM, 0); - if (!mem) { - dev_err(dev, "no mmio space\n"); - return -EINVAL; - } + if (!devres_open_group(dev, NULL, GFP_KERNEL)) + return ERR_PTR(-ENOMEM); - irq = platform_get_irq(pdev, 0); - if (irq <= 0) { - dev_err(dev, "no irq\n"); - return -EINVAL; - } + hpriv = devres_alloc(ahci_platform_put_resources, sizeof(*hpriv), + GFP_KERNEL); + if (!hpriv) + goto err_out; - if (pdata && pdata->ata_port_info) - pi = *pdata->ata_port_info; + devres_add(dev, hpriv); - hpriv = devm_kzalloc(dev, sizeof(*hpriv), GFP_KERNEL); - if (!hpriv) { - dev_err(dev, "can't alloc ahci_host_priv\n"); - return -ENOMEM; - } - - hpriv->flags |= (unsigned long)pi.private_data; - - hpriv->mmio = devm_ioremap(dev, mem->start, resource_size(mem)); + hpriv->mmio = devm_ioremap_resource(dev, + platform_get_resource(pdev, IORESOURCE_MEM, 0)); if (!hpriv->mmio) { - dev_err(dev, "can't map %pR\n", mem); - return -ENOMEM; + dev_err(dev, "no mmio space\n"); + goto err_out; } hpriv->target_pwr = devm_regulator_get_optional(dev, "target"); if (IS_ERR(hpriv->target_pwr)) { rc = PTR_ERR(hpriv->target_pwr); if (rc == -EPROBE_DEFER) - return -EPROBE_DEFER; + goto err_out; hpriv->target_pwr = NULL; } @@ -277,33 +277,62 @@ static int ahci_probe(struct platform_device *pdev) if (IS_ERR(clk)) { rc = PTR_ERR(clk); if (rc == -EPROBE_DEFER) - goto free_clk; + goto err_out; break; } hpriv->clks[i] = clk; } - rc = ahci_platform_enable_resources(hpriv); - if (rc) - goto free_clk; + devres_remove_group(dev, NULL); + return hpriv; - /* - * Some platforms might need to prepare for mmio region access, - * which could be done in the following init call. So, the mmio - * region shouldn't be accessed before init (if provided) has - * returned successfully. - */ - if (pdata && pdata->init) { - rc = pdata->init(dev, hpriv->mmio); - if (rc) - goto disable_resources; - } +err_out: + devres_release_group(dev, NULL); + return ERR_PTR(rc); +} +EXPORT_SYMBOL_GPL(ahci_platform_get_resources); + +/** + * ahci_platform_init_host - Bring up an ahci-platform host + * @pdev: platform device pointer for the host + * @hpriv: ahci-host private data for the host + * @pi_template: template for the ata_port_info to use + * @force_port_map: param passed to ahci_save_initial_config + * @mask_port_map: param passed to ahci_save_initial_config + * + * This function does all the usual steps needed to bring up an + * ahci-platform host, note any necessary resources (ie clks, phy, etc.) + * must be initialized / enabled before calling this. + * + * LOCKING: + * None. + * + * RETURNS: + * 0 on success otherwise a negative error code + */ +int ahci_platform_init_host(struct platform_device *pdev, + struct ahci_host_priv *hpriv, + const struct ata_port_info *pi_template, + unsigned int force_port_map, + unsigned int mask_port_map) +{ + struct device *dev = &pdev->dev; + struct ata_port_info pi = *pi_template; + const struct ata_port_info *ppi[] = { &pi, NULL }; + struct ata_host *host; + int i, irq, n_ports, rc; - ahci_save_initial_config(dev, hpriv, - pdata ? pdata->force_port_map : 0, - pdata ? pdata->mask_port_map : 0); + irq = platform_get_irq(pdev, 0); + if (irq <= 0) { + dev_err(dev, "no irq\n"); + return -EINVAL; + } /* prepare host */ + hpriv->flags |= (unsigned long)pi.private_data; + + ahci_save_initial_config(dev, hpriv, force_port_map, mask_port_map); + if (hpriv->cap & HOST_CAP_NCQ) pi.flags |= ATA_FLAG_NCQ; @@ -320,10 +349,8 @@ static int ahci_probe(struct platform_device *pdev) n_ports = max(ahci_nr_ports(hpriv->cap), fls(hpriv->port_map)); host = ata_host_alloc_pinfo(dev, ppi, n_ports); - if (!host) { - rc = -ENOMEM; - goto pdata_exit; - } + if (!host) + return -ENOMEM; host->private_data = hpriv; @@ -338,7 +365,8 @@ static int ahci_probe(struct platform_device *pdev) for (i = 0; i < host->n_ports; i++) { struct ata_port *ap = host->ports[i]; - ata_port_desc(ap, "mmio %pR", mem); + ata_port_desc(ap, "mmio %pR", + platform_get_resource(pdev, IORESOURCE_MEM, 0)); ata_port_desc(ap, "port 0x%x", 0x100 + ap->port_no * 0x80); /* set enclosure management message type */ @@ -352,13 +380,53 @@ static int ahci_probe(struct platform_device *pdev) rc = ahci_reset_controller(host); if (rc) - goto pdata_exit; + return rc; ahci_init_controller(host); ahci_print_info(host, "platform"); - rc = ata_host_activate(host, irq, ahci_interrupt, IRQF_SHARED, - &ahci_platform_sht); + return ata_host_activate(host, irq, ahci_interrupt, IRQF_SHARED, + &ahci_platform_sht); +} +EXPORT_SYMBOL_GPL(ahci_platform_init_host); + +static int ahci_probe(struct platform_device *pdev) +{ + struct device *dev = &pdev->dev; + struct ahci_platform_data *pdata = dev_get_platdata(dev); + const struct platform_device_id *id = platform_get_device_id(pdev); + const struct ata_port_info *pi_template; + struct ahci_host_priv *hpriv; + int rc; + + hpriv = ahci_platform_get_resources(pdev); + if (IS_ERR(hpriv)) + return PTR_ERR(hpriv); + + rc = ahci_platform_enable_resources(hpriv); + if (rc) + return rc; + + /* + * Some platforms might need to prepare for mmio region access, + * which could be done in the following init call. So, the mmio + * region shouldn't be accessed before init (if provided) has + * returned successfully. + */ + if (pdata && pdata->init) { + rc = pdata->init(dev, hpriv->mmio); + if (rc) + goto disable_resources; + } + + if (pdata && pdata->ata_port_info) + pi_template = pdata->ata_port_info; + else + pi_template = &ahci_port_info[id ? id->driver_data : 0]; + + rc = ahci_platform_init_host(pdev, hpriv, pi_template, + pdata ? pdata->force_port_map : 0, + pdata ? pdata->mask_port_map : 0); if (rc) goto pdata_exit; @@ -368,8 +436,6 @@ pdata_exit: pdata->exit(dev); disable_resources: ahci_platform_disable_resources(hpriv); -free_clk: - ahci_put_clks(hpriv); return rc; } @@ -383,7 +449,6 @@ static void ahci_host_stop(struct ata_host *host) pdata->exit(dev); ahci_platform_disable_resources(hpriv); - ahci_put_clks(hpriv); } #ifdef CONFIG_PM_SLEEP diff --git a/include/linux/ahci_platform.h b/include/linux/ahci_platform.h index b674b01..b80c51c 100644 --- a/include/linux/ahci_platform.h +++ b/include/linux/ahci_platform.h @@ -20,7 +20,14 @@ struct device; struct ata_port_info; struct ahci_host_priv; +struct platform_device; +/* + * Note ahci_platform_data is deprecated, it is only kept around for use + * by the old da850 and spear13xx ahci code. + * New drivers should instead declare their own platform_driver struct, and + * use ahci_platform* functions in their own probe, suspend and resume methods. + */ struct ahci_platform_data { int (*init)(struct device *dev, void __iomem *addr); void (*exit)(struct device *dev); @@ -35,5 +42,12 @@ int ahci_platform_enable_clks(struct ahci_host_priv *hpriv); void ahci_platform_disable_clks(struct ahci_host_priv *hpriv); int ahci_platform_enable_resources(struct ahci_host_priv *hpriv); void ahci_platform_disable_resources(struct ahci_host_priv *hpriv); +struct ahci_host_priv *ahci_platform_get_resources( + struct platform_device *pdev); +int ahci_platform_init_host(struct platform_device *pdev, + struct ahci_host_priv *hpriv, + const struct ata_port_info *pi_template, + unsigned int force_port_map, + unsigned int mask_port_map); #endif /* _AHCI_PLATFORM_H */ -- 1.9.0 ^ permalink raw reply related [flat|nested] 81+ messages in thread
[parent not found: <1393084424-31099-6-git-send-email-hdegoede-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>]
* Re: [PATCH v7 05/15] ahci-platform: "Library-ise" ahci_probe functionality [not found] ` <1393084424-31099-6-git-send-email-hdegoede-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> @ 2014-03-03 18:38 ` Bartlomiej Zolnierkiewicz 0 siblings, 0 replies; 81+ messages in thread From: Bartlomiej Zolnierkiewicz @ 2014-03-03 18:38 UTC (permalink / raw) To: Hans de Goede Cc: Tejun Heo, Maxime Ripard, Oliver Schinagl, Richard Zhu, Roger Quadros, Lee Jones, linux-ide-u79uwXL29TY76Z2rM5mHXA, linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r, devicetree, linux-sunxi-/JYPxA39Uh5TLH3MbocFFw Hi, On Saturday, February 22, 2014 04:53:34 PM Hans de Goede wrote: > ahci_probe consists of 3 steps: > 1) Get resources (get mmio, clks, regulator) > 2) Enable resources, handled by ahci_platform_enable_resouces > 3) The more or less standard ahci-host controller init sequence > > This commit refactors step 1 and 3 into separate functions, so the platform > drivers for AHCI implementations which need a specific order in step 2, > and / or need to do some custom register poking at some time, can re-use > ahci-platform.c code without needing to copy and paste it. > > Note that ahci_platform_init_host's prototype takes the 3 non function > members of ahci_platform_data as arguments, the idea is that drivers using > the new exported utility functions will not use ahci_platform_data at all, > and hopefully in the future ahci_platform_data can go away entirely. > > Signed-off-by: Hans de Goede <hdegoede-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> > --- > drivers/ata/ahci_platform.c | 195 ++++++++++++++++++++++++++++-------------- > include/linux/ahci_platform.h | 14 +++ > 2 files changed, 144 insertions(+), 65 deletions(-) > > diff --git a/drivers/ata/ahci_platform.c b/drivers/ata/ahci_platform.c > index 6ebbc17..7f3f2ac 100644 > --- a/drivers/ata/ahci_platform.c > +++ b/drivers/ata/ahci_platform.c > @@ -201,64 +201,64 @@ void ahci_platform_disable_resources(struct ahci_host_priv *hpriv) > } > EXPORT_SYMBOL_GPL(ahci_platform_disable_resources); > > -static void ahci_put_clks(struct ahci_host_priv *hpriv) > +static void ahci_platform_put_resources(struct device *dev, void *res) > { > + struct ahci_host_priv *hpriv = res; > int c; > > for (c = 0; c < AHCI_MAX_CLKS && hpriv->clks[c]; c++) > clk_put(hpriv->clks[c]); > } > > -static int ahci_probe(struct platform_device *pdev) > +/** > + * ahci_platform_get_resources - Get platform resources > + * @pdev: platform device to get resources for > + * > + * This function allocates an ahci_host_priv struct, and gets the > + * following resources, storing a reference to them inside the returned > + * struct: > + * > + * 1) mmio registers (IORESOURCE_MEM 0, mandatory) > + * 2) regulator for controlling the targets power (optional) > + * 3) 0 - AHCI_MAX_CLKS clocks, as specified in the devs devicetree node, > + * or for non devicetree enabled platforms a single clock > + * > + * LOCKING: > + * None. > + * > + * RETURNS: > + * The allocated ahci_host_priv on success, otherwise an ERR_PTR value > + */ > +struct ahci_host_priv *ahci_platform_get_resources( > + struct platform_device *pdev) It would be better if these two lines were merged: struct ahci_host_priv *ahci_platform_get_resources(struct platform_device *pdev) > { > struct device *dev = &pdev->dev; > - struct ahci_platform_data *pdata = dev_get_platdata(dev); > - const struct platform_device_id *id = platform_get_device_id(pdev); > - struct ata_port_info pi = ahci_port_info[id ? id->driver_data : 0]; > - const struct ata_port_info *ppi[] = { &pi, NULL }; > struct ahci_host_priv *hpriv; > - struct ata_host *host; > - struct resource *mem; > struct clk *clk; > - int irq; > - int n_ports; > - int i; > - int rc; > + int i, rc = -ENOMEM; > > - mem = platform_get_resource(pdev, IORESOURCE_MEM, 0); > - if (!mem) { > - dev_err(dev, "no mmio space\n"); > - return -EINVAL; > - } > + if (!devres_open_group(dev, NULL, GFP_KERNEL)) > + return ERR_PTR(-ENOMEM); > > - irq = platform_get_irq(pdev, 0); > - if (irq <= 0) { > - dev_err(dev, "no irq\n"); > - return -EINVAL; > - } > + hpriv = devres_alloc(ahci_platform_put_resources, sizeof(*hpriv), > + GFP_KERNEL); > + if (!hpriv) > + goto err_out; > > - if (pdata && pdata->ata_port_info) > - pi = *pdata->ata_port_info; > + devres_add(dev, hpriv); > > - hpriv = devm_kzalloc(dev, sizeof(*hpriv), GFP_KERNEL); > - if (!hpriv) { > - dev_err(dev, "can't alloc ahci_host_priv\n"); > - return -ENOMEM; > - } > - > - hpriv->flags |= (unsigned long)pi.private_data; > - > - hpriv->mmio = devm_ioremap(dev, mem->start, resource_size(mem)); > + hpriv->mmio = devm_ioremap_resource(dev, > + platform_get_resource(pdev, IORESOURCE_MEM, 0)); > if (!hpriv->mmio) { This should use IS_ERR() as devm_ioremap_resource() returns a pointer to the remapped memory or an ERR_PTR() encoded error code on failure. > - dev_err(dev, "can't map %pR\n", mem); > - return -ENOMEM; > + dev_err(dev, "no mmio space\n"); Not needed, devm_ioremap_resource() prints an error message on error. > + goto err_out; This should set rc to an error value from devm_ioremap_resource() instead of returning -ENOMEM. > } > > hpriv->target_pwr = devm_regulator_get_optional(dev, "target"); > if (IS_ERR(hpriv->target_pwr)) { > rc = PTR_ERR(hpriv->target_pwr); > if (rc == -EPROBE_DEFER) > - return -EPROBE_DEFER; > + goto err_out; > hpriv->target_pwr = NULL; > } > > @@ -277,33 +277,62 @@ static int ahci_probe(struct platform_device *pdev) > if (IS_ERR(clk)) { > rc = PTR_ERR(clk); > if (rc == -EPROBE_DEFER) > - goto free_clk; > + goto err_out; > break; > } > hpriv->clks[i] = clk; > } > > - rc = ahci_platform_enable_resources(hpriv); > - if (rc) > - goto free_clk; > + devres_remove_group(dev, NULL); > + return hpriv; > > - /* > - * Some platforms might need to prepare for mmio region access, > - * which could be done in the following init call. So, the mmio > - * region shouldn't be accessed before init (if provided) has > - * returned successfully. > - */ > - if (pdata && pdata->init) { > - rc = pdata->init(dev, hpriv->mmio); > - if (rc) > - goto disable_resources; > - } > +err_out: > + devres_release_group(dev, NULL); > + return ERR_PTR(rc); > +} > +EXPORT_SYMBOL_GPL(ahci_platform_get_resources); [...] The rest of the patch looks OK. Best regards, -- Bartlomiej Zolnierkiewicz Samsung R&D Institute Poland Samsung Electronics ^ permalink raw reply [flat|nested] 81+ messages in thread
* [PATCH v7 06/15] ahci-platform: "Library-ise" suspend / resume functionality [not found] ` <1393084424-31099-1-git-send-email-hdegoede-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> ` (4 preceding siblings ...) 2014-02-22 15:53 ` [PATCH v7 05/15] ahci-platform: "Library-ise" ahci_probe functionality Hans de Goede @ 2014-02-22 15:53 ` Hans de Goede 2014-02-22 15:53 ` [PATCH v7 07/15] ARM: sunxi: Add support for Allwinner SUNXi SoCs sata to ahci_platform Hans de Goede ` (9 subsequent siblings) 15 siblings, 0 replies; 81+ messages in thread From: Hans de Goede @ 2014-02-22 15:53 UTC (permalink / raw) To: Tejun Heo, Maxime Ripard Cc: Oliver Schinagl, Richard Zhu, Roger Quadros, Lee Jones, linux-ide-u79uwXL29TY76Z2rM5mHXA, linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r, devicetree, linux-sunxi-/JYPxA39Uh5TLH3MbocFFw, Hans de Goede Split suspend / resume code into host suspend / resume functionality and resource enable / disabling phases, and export the new suspend_ / resume_host functions. Signed-off-by: Hans de Goede <hdegoede-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> --- drivers/ata/ahci_platform.c | 109 ++++++++++++++++++++++++++++++++++++------ include/linux/ahci_platform.h | 5 ++ 2 files changed, 99 insertions(+), 15 deletions(-) diff --git a/drivers/ata/ahci_platform.c b/drivers/ata/ahci_platform.c index 7f3f2ac..bdadec1 100644 --- a/drivers/ata/ahci_platform.c +++ b/drivers/ata/ahci_platform.c @@ -452,14 +452,26 @@ static void ahci_host_stop(struct ata_host *host) } #ifdef CONFIG_PM_SLEEP -static int ahci_suspend(struct device *dev) +/** + * ahci_platform_suspend_host - Suspend an ahci-platform host + * @dev: device pointer for the host + * + * This function does all the usual steps needed to suspend an + * ahci-platform host, note any necessary resources (ie clks, phy, etc.) + * must be disabled after calling this. + * + * LOCKING: + * None. + * + * RETURNS: + * 0 on success otherwise a negative error code + */ +int ahci_platform_suspend_host(struct device *dev) { - struct ahci_platform_data *pdata = dev_get_platdata(dev); struct ata_host *host = dev_get_drvdata(dev); struct ahci_host_priv *hpriv = host->private_data; void __iomem *mmio = hpriv->mmio; u32 ctl; - int rc; if (hpriv->flags & AHCI_HFLAG_NO_SUSPEND) { dev_err(dev, "firmware update required for suspend/resume\n"); @@ -476,7 +488,64 @@ static int ahci_suspend(struct device *dev) writel(ctl, mmio + HOST_CTL); readl(mmio + HOST_CTL); /* flush */ - rc = ata_host_suspend(host, PMSG_SUSPEND); + return ata_host_suspend(host, PMSG_SUSPEND); +} +EXPORT_SYMBOL_GPL(ahci_platform_suspend_host); + +/** + * ahci_platform_resume_host - Resume an ahci-platform host + * @dev: device pointer for the host + * + * This function does all the usual steps needed to resume an + * ahci-platform host, note any necessary resources (ie clks, phy, etc.) + * must be initialized / enabled before calling this. + * + * LOCKING: + * None. + * + * RETURNS: + * 0 on success otherwise a negative error code + */ +int ahci_platform_resume_host(struct device *dev) +{ + struct ata_host *host = dev_get_drvdata(dev); + int rc; + + if (dev->power.power_state.event == PM_EVENT_SUSPEND) { + rc = ahci_reset_controller(host); + if (rc) + return rc; + + ahci_init_controller(host); + } + + ata_host_resume(host); + + return 0; +} +EXPORT_SYMBOL_GPL(ahci_platform_resume_host); + +/** + * ahci_platform_suspend - Suspend an ahci-platform device + * @dev: the platform device to suspend + * + * This function suspends the host associated with the device, followed + * by disabling all the resources of the device. + * + * LOCKING: + * None. + * + * RETURNS: + * 0 on success otherwise a negative error code + */ +int ahci_platform_suspend(struct device *dev) +{ + struct ahci_platform_data *pdata = dev_get_platdata(dev); + struct ata_host *host = dev_get_drvdata(dev); + struct ahci_host_priv *hpriv = host->private_data; + int rc; + + rc = ahci_platform_suspend_host(dev); if (rc) return rc; @@ -487,8 +556,22 @@ static int ahci_suspend(struct device *dev) return 0; } +EXPORT_SYMBOL_GPL(ahci_platform_suspend); -static int ahci_resume(struct device *dev) +/** + * ahci_platform_resume - Resume an ahci-platform device + * @dev: the platform device to resume + * + * This function enables all the resources of the device followed by + * resuming the host associated with the device. + * + * LOCKING: + * None. + * + * RETURNS: + * 0 on success otherwise a negative error code + */ +int ahci_platform_resume(struct device *dev) { struct ahci_platform_data *pdata = dev_get_platdata(dev); struct ata_host *host = dev_get_drvdata(dev); @@ -505,15 +588,9 @@ static int ahci_resume(struct device *dev) goto disable_resources; } - if (dev->power.power_state.event == PM_EVENT_SUSPEND) { - rc = ahci_reset_controller(host); - if (rc) - goto disable_resources; - - ahci_init_controller(host); - } - - ata_host_resume(host); + rc = ahci_platform_resume_host(dev); + if (rc) + goto disable_resources; return 0; @@ -522,9 +599,11 @@ disable_resources: return rc; } +EXPORT_SYMBOL_GPL(ahci_platform_resume); #endif -static SIMPLE_DEV_PM_OPS(ahci_pm_ops, ahci_suspend, ahci_resume); +static SIMPLE_DEV_PM_OPS(ahci_pm_ops, ahci_platform_suspend, + ahci_platform_resume); static const struct of_device_id ahci_of_match[] = { { .compatible = "snps,spear-ahci", }, diff --git a/include/linux/ahci_platform.h b/include/linux/ahci_platform.h index b80c51c..542f268 100644 --- a/include/linux/ahci_platform.h +++ b/include/linux/ahci_platform.h @@ -50,4 +50,9 @@ int ahci_platform_init_host(struct platform_device *pdev, unsigned int force_port_map, unsigned int mask_port_map); +int ahci_platform_suspend_host(struct device *dev); +int ahci_platform_resume_host(struct device *dev); +int ahci_platform_suspend(struct device *dev); +int ahci_platform_resume(struct device *dev); + #endif /* _AHCI_PLATFORM_H */ -- 1.9.0 ^ permalink raw reply related [flat|nested] 81+ messages in thread
* [PATCH v7 07/15] ARM: sunxi: Add support for Allwinner SUNXi SoCs sata to ahci_platform [not found] ` <1393084424-31099-1-git-send-email-hdegoede-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> ` (5 preceding siblings ...) 2014-02-22 15:53 ` [PATCH v7 06/15] ahci-platform: "Library-ise" suspend / resume functionality Hans de Goede @ 2014-02-22 15:53 ` Hans de Goede [not found] ` <1393084424-31099-8-git-send-email-hdegoede-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> 2014-02-22 15:53 ` [PATCH v7 08/15] ahci-imx: Port to library-ised ahci_platform Hans de Goede ` (8 subsequent siblings) 15 siblings, 1 reply; 81+ messages in thread From: Hans de Goede @ 2014-02-22 15:53 UTC (permalink / raw) To: Tejun Heo, Maxime Ripard Cc: Oliver Schinagl, Richard Zhu, Roger Quadros, Lee Jones, linux-ide-u79uwXL29TY76Z2rM5mHXA, linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r, devicetree, linux-sunxi-/JYPxA39Uh5TLH3MbocFFw, Hans de Goede From: Olliver Schinagl <oliver-dxLnbx3+1qmEVqv0pETR8A@public.gmane.org> This patch adds support for the ahci sata controler found on Allwinner A10 and A20 SoCs to the ahci_platform driver. Orignally written by Olliver Schinagl using the approach of having a platform device which probe method creates a new child platform device which gets driven by ahci_platform.c, as done by ahci_imx.c . Refactored by Hans de Goede to add most of the non sunxi specific functionality to ahci_platform.c and use a platform_data pointer from of_device_id for the sunxi specific bits. Signed-off-by: Olliver Schinagl <oliver-dxLnbx3+1qmEVqv0pETR8A@public.gmane.org> Signed-off-by: Hans de Goede <hdegoede-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> --- .../devicetree/bindings/ata/ahci-platform.txt | 15 +- drivers/ata/Kconfig | 9 + drivers/ata/Makefile | 1 + drivers/ata/ahci_sunxi.c | 249 +++++++++++++++++++++ 4 files changed, 271 insertions(+), 3 deletions(-) create mode 100644 drivers/ata/ahci_sunxi.c diff --git a/Documentation/devicetree/bindings/ata/ahci-platform.txt b/Documentation/devicetree/bindings/ata/ahci-platform.txt index 1ac807f..499bfed 100644 --- a/Documentation/devicetree/bindings/ata/ahci-platform.txt +++ b/Documentation/devicetree/bindings/ata/ahci-platform.txt @@ -4,7 +4,9 @@ SATA nodes are defined to describe on-chip Serial ATA controllers. Each SATA controller should have its own node. Required properties: -- compatible : compatible list, contains "snps,spear-ahci" +- compatible : compatible list, one of "snps,spear-ahci", + "snps,exynos5440-ahci", "ibm,476gtr-ahci", or + "allwinner,sun4i-a10-ahci" - interrupts : <interrupt mapping for SATA IRQ> - reg : <registers mapping> @@ -13,10 +15,17 @@ Optional properties: - clocks : a list of phandle + clock specifier pairs - target-supply : regulator for SATA target power -Example: +Examples: sata@ffe08000 { compatible = "snps,spear-ahci"; reg = <0xffe08000 0x1000>; interrupts = <115>; - }; + + ahci: sata@01c18000 { + compatible = "allwinner,sun4i-a10-ahci"; + reg = <0x01c18000 0x1000>; + interrupts = <56>; + clocks = <&pll6 0>, <&ahb_gates 25>; + target-supply = <®_ahci_5v>; + }; diff --git a/drivers/ata/Kconfig b/drivers/ata/Kconfig index 4e73772..cc67cc0 100644 --- a/drivers/ata/Kconfig +++ b/drivers/ata/Kconfig @@ -106,6 +106,15 @@ config AHCI_IMX If unsure, say N. +config AHCI_SUNXI + tristate "Allwinner sunxi AHCI SATA support" + depends on ARCH_SUNXI && SATA_AHCI_PLATFORM + help + This option enables support for the Allwinner sunxi SoC's + onboard AHCI SATA. + + If unsure, say N. + config SATA_FSL tristate "Freescale 3.0Gbps SATA support" depends on FSL_SOC diff --git a/drivers/ata/Makefile b/drivers/ata/Makefile index 46518c6..246050b 100644 --- a/drivers/ata/Makefile +++ b/drivers/ata/Makefile @@ -11,6 +11,7 @@ obj-$(CONFIG_SATA_SIL24) += sata_sil24.o obj-$(CONFIG_SATA_DWC) += sata_dwc_460ex.o obj-$(CONFIG_SATA_HIGHBANK) += sata_highbank.o libahci.o obj-$(CONFIG_AHCI_IMX) += ahci_imx.o +obj-$(CONFIG_AHCI_SUNXI) += ahci_sunxi.o # SFF w/ custom DMA obj-$(CONFIG_PDC_ADMA) += pdc_adma.o diff --git a/drivers/ata/ahci_sunxi.c b/drivers/ata/ahci_sunxi.c new file mode 100644 index 0000000..001f7dfc --- /dev/null +++ b/drivers/ata/ahci_sunxi.c @@ -0,0 +1,249 @@ +/* + * Allwinner sunxi AHCI SATA platform driver + * Copyright 2013 Olliver Schinagl <oliver-dxLnbx3+1qmEVqv0pETR8A@public.gmane.org> + * Copyright 2014 Hans de Goede <hdegoede-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> + * + * based on the AHCI SATA platform driver by Jeff Garzik and Anton Vorontsov + * Based on code from Allwinner Technology Co., Ltd. <www.allwinnertech.com>, + * Daniel Wang <danielwang-0TFLnhJekD6UEPyfVivIlAC/G2K4zDHf@public.gmane.org> + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + */ + +#include <linux/ahci_platform.h> +#include <linux/clk.h> +#include <linux/errno.h> +#include <linux/kernel.h> +#include <linux/module.h> +#include <linux/of_device.h> +#include <linux/platform_device.h> +#include <linux/regulator/consumer.h> +#include "ahci.h" + +#define AHCI_BISTAFR 0x00a0 +#define AHCI_BISTCR 0x00a4 +#define AHCI_BISTFCTR 0x00a8 +#define AHCI_BISTSR 0x00ac +#define AHCI_BISTDECR 0x00b0 +#define AHCI_DIAGNR0 0x00b4 +#define AHCI_DIAGNR1 0x00b8 +#define AHCI_OOBR 0x00bc +#define AHCI_PHYCS0R 0x00c0 +#define AHCI_PHYCS1R 0x00c4 +#define AHCI_PHYCS2R 0x00c8 +#define AHCI_TIMER1MS 0x00e0 +#define AHCI_GPARAM1R 0x00e8 +#define AHCI_GPARAM2R 0x00ec +#define AHCI_PPARAMR 0x00f0 +#define AHCI_TESTR 0x00f4 +#define AHCI_VERSIONR 0x00f8 +#define AHCI_IDR 0x00fc +#define AHCI_RWCR 0x00fc +#define AHCI_P0DMACR 0x0170 +#define AHCI_P0PHYCR 0x0178 +#define AHCI_P0PHYSR 0x017c + +static void sunxi_clrbits(void __iomem *reg, u32 clr_val) +{ + u32 reg_val; + + reg_val = readl(reg); + reg_val &= ~(clr_val); + writel(reg_val, reg); +} + +static void sunxi_setbits(void __iomem *reg, u32 set_val) +{ + u32 reg_val; + + reg_val = readl(reg); + reg_val |= set_val; + writel(reg_val, reg); +} + +static void sunxi_clrsetbits(void __iomem *reg, u32 clr_val, u32 set_val) +{ + u32 reg_val; + + reg_val = readl(reg); + reg_val &= ~(clr_val); + reg_val |= set_val; + writel(reg_val, reg); +} + +static u32 sunxi_getbits(void __iomem *reg, u8 mask, u8 shift) +{ + return (readl(reg) >> shift) & mask; +} + +static int ahci_sunxi_phy_init(struct device *dev, void __iomem *reg_base) +{ + u32 reg_val; + int timeout; + + /* This magic is from the original code */ + writel(0, reg_base + AHCI_RWCR); + mdelay(5); + + sunxi_setbits(reg_base + AHCI_PHYCS1R, BIT(19)); + sunxi_clrsetbits(reg_base + AHCI_PHYCS0R, + (0x7 << 24), + (0x5 << 24) | BIT(23) | BIT(18)); + sunxi_clrsetbits(reg_base + AHCI_PHYCS1R, + (0x3 << 16) | (0x1f << 8) | (0x3 << 6), + (0x2 << 16) | (0x6 << 8) | (0x2 << 6)); + sunxi_setbits(reg_base + AHCI_PHYCS1R, BIT(28) | BIT(15)); + sunxi_clrbits(reg_base + AHCI_PHYCS1R, BIT(19)); + sunxi_clrsetbits(reg_base + AHCI_PHYCS0R, + (0x7 << 20), (0x3 << 20)); + sunxi_clrsetbits(reg_base + AHCI_PHYCS2R, + (0x1f << 5), (0x19 << 5)); + mdelay(5); + + sunxi_setbits(reg_base + AHCI_PHYCS0R, (0x1 << 19)); + + timeout = 250; /* Power up takes aprox 50 us */ + do { + reg_val = sunxi_getbits(reg_base + AHCI_PHYCS0R, 0x7, 28); + if (reg_val == 0x02) + break; + + if (--timeout == 0) { + dev_err(dev, "PHY power up failed.\n"); + return -EIO; + } + udelay(1); + } while (1); + + sunxi_setbits(reg_base + AHCI_PHYCS2R, (0x1 << 24)); + + timeout = 100; /* Calibration takes aprox 10 us */ + do { + reg_val = sunxi_getbits(reg_base + AHCI_PHYCS2R, 0x1, 24); + if (reg_val == 0x00) + break; + + if (--timeout == 0) { + dev_err(dev, "PHY calibration failed.\n"); + return -EIO; + } + udelay(1); + } while (1); + + mdelay(15); + + writel(0x7, reg_base + AHCI_RWCR); + + return 0; +} + +static void ahci_sunxi_start_engine(struct ata_port *ap) +{ + void __iomem *port_mmio = ahci_port_base(ap); + struct ahci_host_priv *hpriv = ap->host->private_data; + + /* Setup DMA before DMA start */ + sunxi_clrsetbits(hpriv->mmio + AHCI_P0DMACR, 0x0000ff00, 0x00004400); + + /* Start DMA */ + sunxi_setbits(port_mmio + PORT_CMD, PORT_CMD_START); +} + +static const struct ata_port_info ahci_sunxi_port_info = { + AHCI_HFLAGS(AHCI_HFLAG_32BIT_ONLY | AHCI_HFLAG_NO_MSI | + AHCI_HFLAG_NO_PMP | AHCI_HFLAG_YES_NCQ), + .flags = AHCI_FLAG_COMMON | ATA_FLAG_NCQ, + .pio_mask = ATA_PIO4, + .udma_mask = ATA_UDMA6, + .port_ops = &ahci_platform_ops, +}; + +static int ahci_sunxi_probe(struct platform_device *pdev) +{ + struct device *dev = &pdev->dev; + struct ahci_host_priv *hpriv; + int rc; + + hpriv = ahci_platform_get_resources(pdev); + if (IS_ERR(hpriv)) + return PTR_ERR(hpriv); + + hpriv->start_engine = ahci_sunxi_start_engine; + + rc = ahci_platform_enable_resources(hpriv); + if (rc) + return rc; + + rc = ahci_sunxi_phy_init(dev, hpriv->mmio); + if (rc) + goto disable_resources; + + rc = ahci_platform_init_host(pdev, hpriv, &ahci_sunxi_port_info, 0, 0); + if (rc) + goto disable_resources; + + return 0; + +disable_resources: + ahci_platform_disable_resources(hpriv); + return rc; +} + +#ifdef CONFIG_PM_SLEEP +int ahci_sunxi_resume(struct device *dev) +{ + struct ata_host *host = dev_get_drvdata(dev); + struct ahci_host_priv *hpriv = host->private_data; + int rc; + + rc = ahci_platform_enable_resources(hpriv); + if (rc) + return rc; + + rc = ahci_sunxi_phy_init(dev, hpriv->mmio); + if (rc) + goto disable_resources; + + rc = ahci_platform_resume_host(dev); + if (rc) + goto disable_resources; + + return 0; + +disable_resources: + ahci_platform_disable_resources(hpriv); + return rc; +} +#endif + +static SIMPLE_DEV_PM_OPS(ahci_sunxi_pm_ops, ahci_platform_suspend, + ahci_sunxi_resume); + +static const struct of_device_id ahci_sunxi_of_match[] = { + { .compatible = "allwinner,sun4i-a10-ahci", }, + { }, +}; +MODULE_DEVICE_TABLE(of, ahci_sunxi_of_match); + +static struct platform_driver ahci_sunxi_driver = { + .probe = ahci_sunxi_probe, + .remove = ata_platform_remove_one, + .driver = { + .name = "ahci-sunxi", + .owner = THIS_MODULE, + .of_match_table = ahci_sunxi_of_match, + .pm = &ahci_sunxi_pm_ops, + }, +}; +module_platform_driver(ahci_sunxi_driver); + +MODULE_DESCRIPTION("Allwinner sunxi AHCI SATA driver"); +MODULE_AUTHOR("Olliver Schinagl <oliver-dxLnbx3+1qmEVqv0pETR8A@public.gmane.org>"); +MODULE_LICENSE("GPL"); -- 1.9.0 ^ permalink raw reply related [flat|nested] 81+ messages in thread
[parent not found: <1393084424-31099-8-git-send-email-hdegoede-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>]
* Re: [PATCH v7 07/15] ARM: sunxi: Add support for Allwinner SUNXi SoCs sata to ahci_platform [not found] ` <1393084424-31099-8-git-send-email-hdegoede-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> @ 2014-02-22 20:40 ` Tejun Heo 0 siblings, 0 replies; 81+ messages in thread From: Tejun Heo @ 2014-02-22 20:40 UTC (permalink / raw) To: Hans de Goede Cc: Maxime Ripard, Oliver Schinagl, Richard Zhu, Roger Quadros, Lee Jones, linux-ide-u79uwXL29TY76Z2rM5mHXA, linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r, devicetree, linux-sunxi-/JYPxA39Uh5TLH3MbocFFw On Sat, Feb 22, 2014 at 04:53:36PM +0100, Hans de Goede wrote: ... > +static int ahci_sunxi_phy_init(struct device *dev, void __iomem *reg_base) > +{ > + u32 reg_val; > + int timeout; > + > + /* This magic is from the original code */ > + writel(0, reg_base + AHCI_RWCR); > + mdelay(5); > + > + sunxi_setbits(reg_base + AHCI_PHYCS1R, BIT(19)); > + sunxi_clrsetbits(reg_base + AHCI_PHYCS0R, > + (0x7 << 24), > + (0x5 << 24) | BIT(23) | BIT(18)); > + sunxi_clrsetbits(reg_base + AHCI_PHYCS1R, > + (0x3 << 16) | (0x1f << 8) | (0x3 << 6), > + (0x2 << 16) | (0x6 << 8) | (0x2 << 6)); > + sunxi_setbits(reg_base + AHCI_PHYCS1R, BIT(28) | BIT(15)); > + sunxi_clrbits(reg_base + AHCI_PHYCS1R, BIT(19)); > + sunxi_clrsetbits(reg_base + AHCI_PHYCS0R, > + (0x7 << 20), (0x3 << 20)); > + sunxi_clrsetbits(reg_base + AHCI_PHYCS2R, > + (0x1f << 5), (0x19 << 5)); > + mdelay(5); Please use msleep() instead. This is called with full process context. mdelay() is almost always wrong. Even if the hardware is broken enough to require millisec level breather, the better thing to do would be using threaded handler and using msleep(), not mdelay(). Thanks. -- tejun ^ permalink raw reply [flat|nested] 81+ messages in thread
* [PATCH v7 08/15] ahci-imx: Port to library-ised ahci_platform [not found] ` <1393084424-31099-1-git-send-email-hdegoede-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> ` (6 preceding siblings ...) 2014-02-22 15:53 ` [PATCH v7 07/15] ARM: sunxi: Add support for Allwinner SUNXi SoCs sata to ahci_platform Hans de Goede @ 2014-02-22 15:53 ` Hans de Goede 2014-02-28 21:08 ` Russell King - ARM Linux [not found] ` <1393084424-31099-9-git-send-email-hdegoede-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> 2014-02-22 15:53 ` [PATCH v7 09/15] ata: ahci_platform: Add DT compatible for Synopsis DWC AHCI controller Hans de Goede ` (7 subsequent siblings) 15 siblings, 2 replies; 81+ messages in thread From: Hans de Goede @ 2014-02-22 15:53 UTC (permalink / raw) To: Tejun Heo, Maxime Ripard Cc: Oliver Schinagl, Richard Zhu, Roger Quadros, Lee Jones, linux-ide-u79uwXL29TY76Z2rM5mHXA, linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r, devicetree, linux-sunxi-/JYPxA39Uh5TLH3MbocFFw, Hans de Goede This avoids the ugliness of creating a nested platform device from probe. While moving it around anyways, move the mk6q phy init code from probe to imx_sata_enable, as the phy needs to be re-initialized on resume too, otherwise the drive won't be recognized after resume. Tested on a wandboard i.mx6 quad. Signed-off-by: Hans de Goede <hdegoede-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> --- .../devicetree/bindings/ata/ahci-platform.txt | 9 +- drivers/ata/ahci_imx.c | 331 ++++++++------------- 2 files changed, 134 insertions(+), 206 deletions(-) diff --git a/Documentation/devicetree/bindings/ata/ahci-platform.txt b/Documentation/devicetree/bindings/ata/ahci-platform.txt index 499bfed..d86e854 100644 --- a/Documentation/devicetree/bindings/ata/ahci-platform.txt +++ b/Documentation/devicetree/bindings/ata/ahci-platform.txt @@ -5,8 +5,9 @@ Each SATA controller should have its own node. Required properties: - compatible : compatible list, one of "snps,spear-ahci", - "snps,exynos5440-ahci", "ibm,476gtr-ahci", or - "allwinner,sun4i-a10-ahci" + "snps,exynos5440-ahci", "ibm,476gtr-ahci", + "allwinner,sun4i-a10-ahci", "fsl,imx53-ahci" or + "fsl,imx6q-ahci" - interrupts : <interrupt mapping for SATA IRQ> - reg : <registers mapping> @@ -15,6 +16,10 @@ Optional properties: - clocks : a list of phandle + clock specifier pairs - target-supply : regulator for SATA target power +"fsl,imx53-ahci", "fsl,imx6q-ahci" required properties: +- clocks : must contain the sata, sata_ref and ahb clocks +- clock-names : must contain "ahb" for the ahb clock + Examples: sata@ffe08000 { compatible = "snps,spear-ahci"; diff --git a/drivers/ata/ahci_imx.c b/drivers/ata/ahci_imx.c index dd4d6f7..3cb5d69 100644 --- a/drivers/ata/ahci_imx.c +++ b/drivers/ata/ahci_imx.c @@ -42,13 +42,7 @@ enum ahci_imx_type { struct imx_ahci_priv { struct platform_device *ahci_pdev; enum ahci_imx_type type; - - /* i.MX53 clock */ - struct clk *sata_gate_clk; - /* Common clock */ - struct clk *sata_ref_clk; struct clk *ahb_clk; - struct regmap *gpr; bool no_device; bool first_time; @@ -58,28 +52,52 @@ static int ahci_imx_hotplug; module_param_named(hotplug, ahci_imx_hotplug, int, 0644); MODULE_PARM_DESC(hotplug, "AHCI IMX hot-plug support (0=Don't support, 1=support)"); -static int imx_sata_clock_enable(struct device *dev) +static void ahci_imx_host_stop(struct ata_host *host); + +static int imx_sata_enable(struct ahci_host_priv *hpriv) { - struct imx_ahci_priv *imxpriv = dev_get_drvdata(dev->parent); + struct imx_ahci_priv *imxpriv = hpriv->plat_data; int ret; - if (imxpriv->type == AHCI_IMX53) { - ret = clk_prepare_enable(imxpriv->sata_gate_clk); - if (ret < 0) { - dev_err(dev, "prepare-enable sata_gate clock err:%d\n", - ret); + if (imxpriv->no_device) + return 0; + + if (hpriv->target_pwr) { + ret = regulator_enable(hpriv->target_pwr); + if (ret) return ret; - } } - ret = clk_prepare_enable(imxpriv->sata_ref_clk); - if (ret < 0) { - dev_err(dev, "prepare-enable sata_ref clock err:%d\n", - ret); - goto clk_err; - } + ret = ahci_platform_enable_clks(hpriv); + if (ret < 0) + goto disable_regulator; if (imxpriv->type == AHCI_IMX6Q) { + /* + * set PHY Paremeters, two steps to configure the GPR13, + * one write for rest of parameters, mask of first write + * is 0x07ffffff, and the other one write for setting + * the mpll_clk_en. + */ + regmap_update_bits(imxpriv->gpr, IOMUXC_GPR13, + IMX6Q_GPR13_SATA_RX_EQ_VAL_MASK | + IMX6Q_GPR13_SATA_RX_LOS_LVL_MASK | + IMX6Q_GPR13_SATA_RX_DPLL_MODE_MASK | + IMX6Q_GPR13_SATA_SPD_MODE_MASK | + IMX6Q_GPR13_SATA_MPLL_SS_EN | + IMX6Q_GPR13_SATA_TX_ATTEN_MASK | + IMX6Q_GPR13_SATA_TX_BOOST_MASK | + IMX6Q_GPR13_SATA_TX_LVL_MASK | + IMX6Q_GPR13_SATA_MPLL_CLK_EN | + IMX6Q_GPR13_SATA_TX_EDGE_RATE, + IMX6Q_GPR13_SATA_RX_EQ_VAL_3_0_DB | + IMX6Q_GPR13_SATA_RX_LOS_LVL_SATA2M | + IMX6Q_GPR13_SATA_RX_DPLL_MODE_2P_4F | + IMX6Q_GPR13_SATA_SPD_MODE_3P0G | + IMX6Q_GPR13_SATA_MPLL_SS_EN | + IMX6Q_GPR13_SATA_TX_ATTEN_9_16 | + IMX6Q_GPR13_SATA_TX_BOOST_3_33_DB | + IMX6Q_GPR13_SATA_TX_LVL_1_025_V); regmap_update_bits(imxpriv->gpr, IOMUXC_GPR13, IMX6Q_GPR13_SATA_MPLL_CLK_EN, IMX6Q_GPR13_SATA_MPLL_CLK_EN); @@ -89,15 +107,19 @@ static int imx_sata_clock_enable(struct device *dev) return 0; -clk_err: - if (imxpriv->type == AHCI_IMX53) - clk_disable_unprepare(imxpriv->sata_gate_clk); +disable_regulator: + if (hpriv->target_pwr) + regulator_disable(hpriv->target_pwr); + return ret; } -static void imx_sata_clock_disable(struct device *dev) +static void imx_sata_disable(struct ahci_host_priv *hpriv) { - struct imx_ahci_priv *imxpriv = dev_get_drvdata(dev->parent); + struct imx_ahci_priv *imxpriv = hpriv->plat_data; + + if (imxpriv->no_device) + return; if (imxpriv->type == AHCI_IMX6Q) { regmap_update_bits(imxpriv->gpr, IOMUXC_GPR13, @@ -105,10 +127,10 @@ static void imx_sata_clock_disable(struct device *dev) !IMX6Q_GPR13_SATA_MPLL_CLK_EN); } - clk_disable_unprepare(imxpriv->sata_ref_clk); + ahci_platform_disable_clks(hpriv); - if (imxpriv->type == AHCI_IMX53) - clk_disable_unprepare(imxpriv->sata_gate_clk); + if (hpriv->target_pwr) + regulator_disable(hpriv->target_pwr); } static void ahci_imx_error_handler(struct ata_port *ap) @@ -118,7 +140,7 @@ static void ahci_imx_error_handler(struct ata_port *ap) struct ata_host *host = dev_get_drvdata(ap->dev); struct ahci_host_priv *hpriv = host->private_data; void __iomem *mmio = hpriv->mmio; - struct imx_ahci_priv *imxpriv = dev_get_drvdata(ap->dev->parent); + struct imx_ahci_priv *imxpriv = hpriv->plat_data; ahci_error_handler(ap); @@ -136,7 +158,7 @@ static void ahci_imx_error_handler(struct ata_port *ap) */ reg_val = readl(mmio + PORT_PHY_CTL); writel(reg_val | PORT_PHY_CTL_PDDQ_LOC, mmio + PORT_PHY_CTL); - imx_sata_clock_disable(ap->dev); + imx_sata_disable(hpriv); imxpriv->no_device = true; } @@ -144,7 +166,9 @@ static int ahci_imx_softreset(struct ata_link *link, unsigned int *class, unsigned long deadline) { struct ata_port *ap = link->ap; - struct imx_ahci_priv *imxpriv = dev_get_drvdata(ap->dev->parent); + struct ata_host *host = dev_get_drvdata(ap->dev); + struct ahci_host_priv *hpriv = host->private_data; + struct imx_ahci_priv *imxpriv = hpriv->plat_data; int ret = -EIO; if (imxpriv->type == AHCI_IMX53) @@ -156,7 +180,8 @@ static int ahci_imx_softreset(struct ata_link *link, unsigned int *class, } static struct ata_port_operations ahci_imx_ops = { - .inherits = &ahci_platform_ops, + .inherits = &ahci_ops, + .host_stop = ahci_imx_host_stop, .error_handler = ahci_imx_error_handler, .softreset = ahci_imx_softreset, }; @@ -168,79 +193,6 @@ static const struct ata_port_info ahci_imx_port_info = { .port_ops = &ahci_imx_ops, }; -static int imx_sata_init(struct device *dev, void __iomem *mmio) -{ - int ret = 0; - unsigned int reg_val; - struct imx_ahci_priv *imxpriv = dev_get_drvdata(dev->parent); - - ret = imx_sata_clock_enable(dev); - if (ret < 0) - return ret; - - /* - * Configure the HWINIT bits of the HOST_CAP and HOST_PORTS_IMPL, - * and IP vendor specific register HOST_TIMER1MS. - * Configure CAP_SSS (support stagered spin up). - * Implement the port0. - * Get the ahb clock rate, and configure the TIMER1MS register. - */ - reg_val = readl(mmio + HOST_CAP); - if (!(reg_val & HOST_CAP_SSS)) { - reg_val |= HOST_CAP_SSS; - writel(reg_val, mmio + HOST_CAP); - } - reg_val = readl(mmio + HOST_PORTS_IMPL); - if (!(reg_val & 0x1)) { - reg_val |= 0x1; - writel(reg_val, mmio + HOST_PORTS_IMPL); - } - - reg_val = clk_get_rate(imxpriv->ahb_clk) / 1000; - writel(reg_val, mmio + HOST_TIMER1MS); - - return 0; -} - -static void imx_sata_exit(struct device *dev) -{ - imx_sata_clock_disable(dev); -} - -static int imx_ahci_suspend(struct device *dev) -{ - struct imx_ahci_priv *imxpriv = dev_get_drvdata(dev->parent); - - /* - * If no_device is set, The CLKs had been gated off in the - * initialization so don't do it again here. - */ - if (!imxpriv->no_device) - imx_sata_clock_disable(dev); - - return 0; -} - -static int imx_ahci_resume(struct device *dev) -{ - struct imx_ahci_priv *imxpriv = dev_get_drvdata(dev->parent); - int ret = 0; - - if (!imxpriv->no_device) - ret = imx_sata_clock_enable(dev); - - return ret; -} - -static struct ahci_platform_data imx_sata_pdata = { - .init = imx_sata_init, - .exit = imx_sata_exit, - .ata_port_info = &ahci_imx_port_info, - .suspend = imx_ahci_suspend, - .resume = imx_ahci_resume, - -}; - static const struct of_device_id imx_ahci_of_match[] = { { .compatible = "fsl,imx53-ahci", .data = (void *)AHCI_IMX53 }, { .compatible = "fsl,imx6q-ahci", .data = (void *)AHCI_IMX6Q }, @@ -251,151 +203,122 @@ MODULE_DEVICE_TABLE(of, imx_ahci_of_match); static int imx_ahci_probe(struct platform_device *pdev) { struct device *dev = &pdev->dev; - struct resource *mem, *irq, res[2]; const struct of_device_id *of_id; - enum ahci_imx_type type; - const struct ahci_platform_data *pdata = NULL; + struct ahci_host_priv *hpriv; struct imx_ahci_priv *imxpriv; - struct device *ahci_dev; - struct platform_device *ahci_pdev; + unsigned int reg_val; int ret; of_id = of_match_device(imx_ahci_of_match, dev); if (!of_id) return -EINVAL; - type = (enum ahci_imx_type)of_id->data; - pdata = &imx_sata_pdata; - imxpriv = devm_kzalloc(dev, sizeof(*imxpriv), GFP_KERNEL); - if (!imxpriv) { - dev_err(dev, "can't alloc ahci_host_priv\n"); + if (!imxpriv) return -ENOMEM; - } - - ahci_pdev = platform_device_alloc("ahci", -1); - if (!ahci_pdev) - return -ENODEV; - - ahci_dev = &ahci_pdev->dev; - ahci_dev->parent = dev; imxpriv->no_device = false; imxpriv->first_time = true; - imxpriv->type = type; - + imxpriv->type = (enum ahci_imx_type)of_id->data; imxpriv->ahb_clk = devm_clk_get(dev, "ahb"); if (IS_ERR(imxpriv->ahb_clk)) { dev_err(dev, "can't get ahb clock.\n"); - ret = PTR_ERR(imxpriv->ahb_clk); - goto err_out; + return PTR_ERR(imxpriv->ahb_clk); } - if (type == AHCI_IMX53) { - imxpriv->sata_gate_clk = devm_clk_get(dev, "sata_gate"); - if (IS_ERR(imxpriv->sata_gate_clk)) { - dev_err(dev, "can't get sata_gate clock.\n"); - ret = PTR_ERR(imxpriv->sata_gate_clk); - goto err_out; + if (imxpriv->type == AHCI_IMX6Q) { + imxpriv->gpr = syscon_regmap_lookup_by_compatible( + "fsl,imx6q-iomuxc-gpr"); + if (IS_ERR(imxpriv->gpr)) { + dev_err(dev, + "failed to find fsl,imx6q-iomux-gpr regmap\n"); + return PTR_ERR(imxpriv->gpr); } } - imxpriv->sata_ref_clk = devm_clk_get(dev, "sata_ref"); - if (IS_ERR(imxpriv->sata_ref_clk)) { - dev_err(dev, "can't get sata_ref clock.\n"); - ret = PTR_ERR(imxpriv->sata_ref_clk); - goto err_out; - } + hpriv = ahci_platform_get_resources(pdev); + if (IS_ERR(hpriv)) + return PTR_ERR(hpriv); + + hpriv->plat_data = imxpriv; - imxpriv->ahci_pdev = ahci_pdev; - platform_set_drvdata(pdev, imxpriv); + ret = imx_sata_enable(hpriv); + if (ret) + return ret; - mem = platform_get_resource(pdev, IORESOURCE_MEM, 0); - irq = platform_get_resource(pdev, IORESOURCE_IRQ, 0); - if (!mem || !irq) { - dev_err(dev, "no mmio/irq resource\n"); - ret = -ENOMEM; - goto err_out; + /* + * Configure the HWINIT bits of the HOST_CAP and HOST_PORTS_IMPL, + * and IP vendor specific register HOST_TIMER1MS. + * Configure CAP_SSS (support stagered spin up). + * Implement the port0. + * Get the ahb clock rate, and configure the TIMER1MS register. + */ + reg_val = readl(hpriv->mmio + HOST_CAP); + if (!(reg_val & HOST_CAP_SSS)) { + reg_val |= HOST_CAP_SSS; + writel(reg_val, hpriv->mmio + HOST_CAP); + } + reg_val = readl(hpriv->mmio + HOST_PORTS_IMPL); + if (!(reg_val & 0x1)) { + reg_val |= 0x1; + writel(reg_val, hpriv->mmio + HOST_PORTS_IMPL); } - res[0] = *mem; - res[1] = *irq; + reg_val = clk_get_rate(imxpriv->ahb_clk) / 1000; + writel(reg_val, hpriv->mmio + HOST_TIMER1MS); - ahci_dev->coherent_dma_mask = DMA_BIT_MASK(32); - ahci_dev->dma_mask = &ahci_dev->coherent_dma_mask; - ahci_dev->of_node = dev->of_node; + ret = ahci_platform_init_host(pdev, hpriv, &ahci_imx_port_info, 0, 0); + if (ret) + imx_sata_disable(hpriv); - if (type == AHCI_IMX6Q) { - imxpriv->gpr = syscon_regmap_lookup_by_compatible( - "fsl,imx6q-iomuxc-gpr"); - if (IS_ERR(imxpriv->gpr)) { - dev_err(dev, - "failed to find fsl,imx6q-iomux-gpr regmap\n"); - ret = PTR_ERR(imxpriv->gpr); - goto err_out; - } + return ret; +} - /* - * Set PHY Paremeters, two steps to configure the GPR13, - * one write for rest of parameters, mask of first write - * is 0x07fffffe, and the other one write for setting - * the mpll_clk_en happens in imx_sata_clock_enable(). - */ - regmap_update_bits(imxpriv->gpr, IOMUXC_GPR13, - IMX6Q_GPR13_SATA_RX_EQ_VAL_MASK | - IMX6Q_GPR13_SATA_RX_LOS_LVL_MASK | - IMX6Q_GPR13_SATA_RX_DPLL_MODE_MASK | - IMX6Q_GPR13_SATA_SPD_MODE_MASK | - IMX6Q_GPR13_SATA_MPLL_SS_EN | - IMX6Q_GPR13_SATA_TX_ATTEN_MASK | - IMX6Q_GPR13_SATA_TX_BOOST_MASK | - IMX6Q_GPR13_SATA_TX_LVL_MASK | - IMX6Q_GPR13_SATA_MPLL_CLK_EN | - IMX6Q_GPR13_SATA_TX_EDGE_RATE, - IMX6Q_GPR13_SATA_RX_EQ_VAL_3_0_DB | - IMX6Q_GPR13_SATA_RX_LOS_LVL_SATA2M | - IMX6Q_GPR13_SATA_RX_DPLL_MODE_2P_4F | - IMX6Q_GPR13_SATA_SPD_MODE_3P0G | - IMX6Q_GPR13_SATA_MPLL_SS_EN | - IMX6Q_GPR13_SATA_TX_ATTEN_9_16 | - IMX6Q_GPR13_SATA_TX_BOOST_3_33_DB | - IMX6Q_GPR13_SATA_TX_LVL_1_025_V); - } +static void ahci_imx_host_stop(struct ata_host *host) +{ + struct ahci_host_priv *hpriv = host->private_data; - ret = platform_device_add_resources(ahci_pdev, res, 2); - if (ret) - goto err_out; + imx_sata_disable(hpriv); +} - ret = platform_device_add_data(ahci_pdev, pdata, sizeof(*pdata)); - if (ret) - goto err_out; +static int imx_ahci_suspend(struct device *dev) +{ + struct ata_host *host = dev_get_drvdata(dev); + struct ahci_host_priv *hpriv = host->private_data; + int ret; - ret = platform_device_add(ahci_pdev); - if (ret) { -err_out: - platform_device_put(ahci_pdev); + ret = ahci_platform_suspend_host(dev); + if (ret) return ret; - } + + imx_sata_disable(hpriv); return 0; } -static int imx_ahci_remove(struct platform_device *pdev) +static int imx_ahci_resume(struct device *dev) { - struct imx_ahci_priv *imxpriv = platform_get_drvdata(pdev); - struct platform_device *ahci_pdev = imxpriv->ahci_pdev; + struct ata_host *host = dev_get_drvdata(dev); + struct ahci_host_priv *hpriv = host->private_data; + int ret; - platform_device_unregister(ahci_pdev); - return 0; + ret = imx_sata_enable(hpriv); + if (ret) + return ret; + + return ahci_platform_resume_host(dev); } +static SIMPLE_DEV_PM_OPS(ahci_imx_pm_ops, imx_ahci_suspend, imx_ahci_resume); + static struct platform_driver imx_ahci_driver = { .probe = imx_ahci_probe, - .remove = imx_ahci_remove, + .remove = ata_platform_remove_one, .driver = { .name = "ahci-imx", .owner = THIS_MODULE, .of_match_table = imx_ahci_of_match, + .pm = &ahci_imx_pm_ops, }, }; module_platform_driver(imx_ahci_driver); -- 1.9.0 ^ permalink raw reply related [flat|nested] 81+ messages in thread
* Re: [PATCH v7 08/15] ahci-imx: Port to library-ised ahci_platform 2014-02-22 15:53 ` [PATCH v7 08/15] ahci-imx: Port to library-ised ahci_platform Hans de Goede @ 2014-02-28 21:08 ` Russell King - ARM Linux [not found] ` <20140228210820.GZ21483-l+eeeJia6m9vn6HldHNs0ANdhmdF6hFW@public.gmane.org> [not found] ` <1393084424-31099-9-git-send-email-hdegoede-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> 1 sibling, 1 reply; 81+ messages in thread From: Russell King - ARM Linux @ 2014-02-28 21:08 UTC (permalink / raw) To: Hans de Goede Cc: Tejun Heo, Maxime Ripard, devicetree, linux-ide, Oliver Schinagl, Richard Zhu, linux-sunxi, Lee Jones, linux-arm-kernel, Roger Quadros On Sat, Feb 22, 2014 at 04:53:37PM +0100, Hans de Goede wrote: > + /* > + * set PHY Paremeters, two steps to configure the GPR13, > + * one write for rest of parameters, mask of first write > + * is 0x07ffffff, and the other one write for setting > + * the mpll_clk_en. > + */ > + regmap_update_bits(imxpriv->gpr, IOMUXC_GPR13, > + IMX6Q_GPR13_SATA_RX_EQ_VAL_MASK | > + IMX6Q_GPR13_SATA_RX_LOS_LVL_MASK | > + IMX6Q_GPR13_SATA_RX_DPLL_MODE_MASK | > + IMX6Q_GPR13_SATA_SPD_MODE_MASK | > + IMX6Q_GPR13_SATA_MPLL_SS_EN | > + IMX6Q_GPR13_SATA_TX_ATTEN_MASK | > + IMX6Q_GPR13_SATA_TX_BOOST_MASK | > + IMX6Q_GPR13_SATA_TX_LVL_MASK | > + IMX6Q_GPR13_SATA_MPLL_CLK_EN | > + IMX6Q_GPR13_SATA_TX_EDGE_RATE, > + IMX6Q_GPR13_SATA_RX_EQ_VAL_3_0_DB | > + IMX6Q_GPR13_SATA_RX_LOS_LVL_SATA2M | > + IMX6Q_GPR13_SATA_RX_DPLL_MODE_2P_4F | > + IMX6Q_GPR13_SATA_SPD_MODE_3P0G | > + IMX6Q_GPR13_SATA_MPLL_SS_EN | > + IMX6Q_GPR13_SATA_TX_ATTEN_9_16 | > + IMX6Q_GPR13_SATA_TX_BOOST_3_33_DB | > + IMX6Q_GPR13_SATA_TX_LVL_1_025_V); While I see this, I'll stick an oar in. It is totally wrong for this to be hard-coded into the driver - many of these should be specified via DT, since they're board specific. These are already different from the reset default in this register. The side effect of this hard coding is that eSATA just doesn't work at all on some boards - the board I have requires TX_LVL_1_104V and TX_BOOST_0_00_DB. Hence, I'd ask that while you move stuff like this around, you bear in mind that we do need to add additional properties. I'm in two minds about this - whether to make the existing binding with its compatible string always use these settings, and invent a new compatible string for one which is fully configurable (as it _should_ have been from the very start) or whether to make this the default if the various properties aren't specified. Either way, this driver is electrically unusable as it stands here. -- FTTC broadband for 0.8mile line: now at 9.7Mbps down 460kbps up... slowly improving, and getting towards what was expected from it. ^ permalink raw reply [flat|nested] 81+ messages in thread
[parent not found: <20140228210820.GZ21483-l+eeeJia6m9vn6HldHNs0ANdhmdF6hFW@public.gmane.org>]
* Re: [PATCH v7 08/15] ahci-imx: Port to library-ised ahci_platform [not found] ` <20140228210820.GZ21483-l+eeeJia6m9vn6HldHNs0ANdhmdF6hFW@public.gmane.org> @ 2014-03-01 10:38 ` Hans de Goede 2014-03-01 11:24 ` Russell King - ARM Linux 0 siblings, 1 reply; 81+ messages in thread From: Hans de Goede @ 2014-03-01 10:38 UTC (permalink / raw) To: Russell King - ARM Linux Cc: Tejun Heo, Maxime Ripard, devicetree, linux-ide-u79uwXL29TY76Z2rM5mHXA, Oliver Schinagl, Richard Zhu, linux-sunxi-/JYPxA39Uh5TLH3MbocFFw, Lee Jones, linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r, Roger Quadros Hi Russell, On 02/28/2014 10:08 PM, Russell King - ARM Linux wrote: > On Sat, Feb 22, 2014 at 04:53:37PM +0100, Hans de Goede wrote: >> + /* >> + * set PHY Paremeters, two steps to configure the GPR13, >> + * one write for rest of parameters, mask of first write >> + * is 0x07ffffff, and the other one write for setting >> + * the mpll_clk_en. >> + */ >> + regmap_update_bits(imxpriv->gpr, IOMUXC_GPR13, >> + IMX6Q_GPR13_SATA_RX_EQ_VAL_MASK | >> + IMX6Q_GPR13_SATA_RX_LOS_LVL_MASK | >> + IMX6Q_GPR13_SATA_RX_DPLL_MODE_MASK | >> + IMX6Q_GPR13_SATA_SPD_MODE_MASK | >> + IMX6Q_GPR13_SATA_MPLL_SS_EN | >> + IMX6Q_GPR13_SATA_TX_ATTEN_MASK | >> + IMX6Q_GPR13_SATA_TX_BOOST_MASK | >> + IMX6Q_GPR13_SATA_TX_LVL_MASK | >> + IMX6Q_GPR13_SATA_MPLL_CLK_EN | >> + IMX6Q_GPR13_SATA_TX_EDGE_RATE, >> + IMX6Q_GPR13_SATA_RX_EQ_VAL_3_0_DB | >> + IMX6Q_GPR13_SATA_RX_LOS_LVL_SATA2M | >> + IMX6Q_GPR13_SATA_RX_DPLL_MODE_2P_4F | >> + IMX6Q_GPR13_SATA_SPD_MODE_3P0G | >> + IMX6Q_GPR13_SATA_MPLL_SS_EN | >> + IMX6Q_GPR13_SATA_TX_ATTEN_9_16 | >> + IMX6Q_GPR13_SATA_TX_BOOST_3_33_DB | >> + IMX6Q_GPR13_SATA_TX_LVL_1_025_V); > > While I see this, I'll stick an oar in. > > It is totally wrong for this to be hard-coded into the driver - many > of these should be specified via DT, since they're board specific. > These are already different from the reset default in this register. > > The side effect of this hard coding is that eSATA just doesn't work > at all on some boards - the board I have requires TX_LVL_1_104V and > TX_BOOST_0_00_DB. I completely agree that if this is board specific it should be settable (override-able since we've existing dt files without a setting for it). > Hence, I'd ask that while you move stuff like this around, you bear > in mind that we do need to add additional properties. I understand, but my interest in the imx code only goes as far as not making it regress. I already went above and beyond duty by buying an imx board with sata and cleaning up the horific platform device driver instantiating a platform device hack there was. My interest in platform-ahci was to clean it up so that it could be used as a proper basis to build other ARM ahci drivers on top of, such as a driver for the allwinner A10 and A20 ahci controller. While at this I ended up having to clean up the imx driver too, so as to not break at. As a bonus I fixed it to not loose the harddisk after a suspend / resume cycle, and that is really as far as my interest in the imx driver goes. I'm sure Tejun would welcome patches to add a dts property for setting the board-specific phy parameters, but I won't be writing it. > I'm in two minds about this - whether to make the existing binding > with its compatible string always use these settings, and invent a > new compatible string for one which is fully configurable (as it > _should_ have been from the very start) or whether to make this > the default if the various properties aren't specified. IMHO this does not warrant doing a new compatibole-string. Simply default to the current hardcoded phy settings if no settings are specified through devicetree. > Either way, this driver is electrically unusable as it stands here. That is only true on some boards. Regards, Hans ^ permalink raw reply [flat|nested] 81+ messages in thread
* Re: [PATCH v7 08/15] ahci-imx: Port to library-ised ahci_platform 2014-03-01 10:38 ` Hans de Goede @ 2014-03-01 11:24 ` Russell King - ARM Linux [not found] ` <20140301112424.GB21483-l+eeeJia6m9vn6HldHNs0ANdhmdF6hFW@public.gmane.org> 0 siblings, 1 reply; 81+ messages in thread From: Russell King - ARM Linux @ 2014-03-01 11:24 UTC (permalink / raw) To: Hans de Goede, devicetree Cc: Tejun Heo, Maxime Ripard, linux-ide, Oliver Schinagl, Richard Zhu, linux-sunxi, Lee Jones, linux-arm-kernel, Roger Quadros I've moved the devicetree mailing list to the To: header in case anyone there wants to comment on this. On Sat, Mar 01, 2014 at 11:38:32AM +0100, Hans de Goede wrote: > I'm sure Tejun would welcome patches to add a dts property for > setting the board-specific phy parameters, but I won't be > writing it. Don't worry, I already have something :) >> I'm in two minds about this - whether to make the existing binding >> with its compatible string always use these settings, and invent a >> new compatible string for one which is fully configurable (as it >> _should_ have been from the very start) or whether to make this >> the default if the various properties aren't specified. > > IMHO this does not warrant doing a new compatibole-string. Simply > default to the current hardcoded phy settings if no settings are > specified through devicetree. The problem is that we need to keep existing setups working - which means when there's no properties specified, we need to default to the settings hard-coded into the driver. That means introducing properties like: fsl,no-spread-spectrum so that the hard-coded defaults can be turned off, and also deal with a whole load of defaults for the other properties. That's not particularly nice. Doing it this way, what I currently have is this: struct reg_value { u32 of_value; u32 reg_value; }; struct reg_property { const char *name; const struct reg_value *values; size_t num_values; u32 def_value; u32 set_value; }; static const struct reg_value gpr13_tx_level[] = { { 937, IMX6Q_GPR13_SATA_TX_LVL_0_937_V }, { 947, IMX6Q_GPR13_SATA_TX_LVL_0_947_V }, ... { 1230, IMX6Q_GPR13_SATA_TX_LVL_1_230_V }, { 1240, IMX6Q_GPR13_SATA_TX_LVL_1_240_V } }; static const struct reg_value gpr13_tx_boost[] = { { 0, IMX6Q_GPR13_SATA_TX_BOOST_0_00_DB }, { 370, IMX6Q_GPR13_SATA_TX_BOOST_0_37_DB }, ... { 528, IMX6Q_GPR13_SATA_TX_BOOST_5_28_DB }, { 575, IMX6Q_GPR13_SATA_TX_BOOST_5_75_DB } }; static const struct reg_value gpr13_tx_atten[] = { { 8, IMX6Q_GPR13_SATA_TX_ATTEN_8_16 }, { 9, IMX6Q_GPR13_SATA_TX_ATTEN_9_16 }, ... { 14, IMX6Q_GPR13_SATA_TX_ATTEN_14_16 }, { 16, IMX6Q_GPR13_SATA_TX_ATTEN_16_16 }, }; static const struct reg_value gpr13_rx_eq[] = { { 500, IMX6Q_GPR13_SATA_RX_EQ_VAL_0_5_DB }, { 1000, IMX6Q_GPR13_SATA_RX_EQ_VAL_1_0_DB }, ... { 3500, IMX6Q_GPR13_SATA_RX_EQ_VAL_3_5_DB }, { 4000, IMX6Q_GPR13_SATA_RX_EQ_VAL_4_0_DB }, }; static const struct reg_property gpr13_props[] = { { .name = "fsl,transmit-level-mV", .values = gpr13_tx_level, .num_values = ARRAY_SIZE(gpr13_tx_level), .def_value = IMX6Q_GPR13_SATA_TX_LVL_1_025_V, }, { .name = "fsl,transmit-boost-mdB", .values = gpr13_tx_boost, .num_values = ARRAY_SIZE(gpr13_tx_boost), .def_value = IMX6Q_GPR13_SATA_TX_BOOST_3_33_DB, }, { .name = "fsl,transmit-atten-16ths", .values = gpr13_tx_atten, .num_values = ARRAY_SIZE(gpr13_tx_atten), .def_value = IMX6Q_GPR13_SATA_TX_ATTEN_9_16, }, { .name = "fsl,receive-eq-mdB", .values = gpr13_rx_eq, .num_values = ARRAY_SIZE(gpr13_rx_eq), .def_value = IMX6Q_GPR13_SATA_RX_EQ_VAL_3_0_DB, }, { .name = "fsl,no-spread-spectrum", .def_value = IMX6Q_GPR13_SATA_MPLL_SS_EN, .set_value = 0, }, }; and then a bunch of code to read through these tables and work out the GPR13 register value from it - it doesn't handle everything yet because I've not worked out a good way to do the last remaining three - I'm thinking that they want to be strings: regmap_update_bits(imxpriv->gpr, IOMUXC_GPR13, IMX6Q_GPR13_SATA_RX_EQ_VAL_MASK | ... IMX6Q_GPR13_SATA_TX_EDGE_RATE, IMX6Q_GPR13_SATA_RX_LOS_LVL_SATA2M | IMX6Q_GPR13_SATA_RX_DPLL_MODE_2P_4F | IMX6Q_GPR13_SATA_SPD_MODE_3P0G | reg_value); RX_LOS_LVL: SATA1I / SATA1M / SATA1X / SATA2I / SATA2M / SATA2X RX_DPLL_MODE: 1P_1F / 2P_2F / 1P_4F / 2P_4F SPD_MODE: 3P0G / 1P5G (I do wonder whether this should be changed when the Linux wants to slow the link speed.) With a new compatible string, we can use the hard-coded version for fsl,imx6q-ahci, but require all properties (with values) to be specified for a different compatible string, thereby eliminating all the defaults, and making things like "no-spread-spectrum" be a positive property instead of negative, and this simplifies the parsing code. There's also the obvious question about which of these properties should be generic ones for AHCI/SATA interfaces... The only one I see with any kind of electrical properties specified is sata_highbank: - calxeda,tx-atten : a u32 array that contains TX attenuation override codes, one per port. The upper 3 bytes are always 0 and thus ignored. and that seems to be a register-coded value rather than an actual attenuation figure. A simpler solution to this would be to just provide an imx6-specific property which encodes the GPR13 value directly, and not bother with trying to provide individual properties. -- FTTC broadband for 0.8mile line: now at 9.7Mbps down 460kbps up... slowly improving, and getting towards what was expected from it. ^ permalink raw reply [flat|nested] 81+ messages in thread
[parent not found: <20140301112424.GB21483-l+eeeJia6m9vn6HldHNs0ANdhmdF6hFW@public.gmane.org>]
* Re: [PATCH v7 08/15] ahci-imx: Port to library-ised ahci_platform [not found] ` <20140301112424.GB21483-l+eeeJia6m9vn6HldHNs0ANdhmdF6hFW@public.gmane.org> @ 2014-03-01 12:54 ` Hans de Goede 0 siblings, 0 replies; 81+ messages in thread From: Hans de Goede @ 2014-03-01 12:54 UTC (permalink / raw) To: Russell King - ARM Linux, devicetree Cc: Tejun Heo, Maxime Ripard, linux-ide-u79uwXL29TY76Z2rM5mHXA, Oliver Schinagl, Richard Zhu, linux-sunxi-/JYPxA39Uh5TLH3MbocFFw, Lee Jones, linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r, Roger Quadros Hi, On 03/01/2014 12:24 PM, Russell King - ARM Linux wrote: > I've moved the devicetree mailing list to the To: header in case anyone > there wants to comment on this. > > On Sat, Mar 01, 2014 at 11:38:32AM +0100, Hans de Goede wrote: >> I'm sure Tejun would welcome patches to add a dts property for >> setting the board-specific phy parameters, but I won't be >> writing it. > > Don't worry, I already have something :) Great. >>> I'm in two minds about this - whether to make the existing binding >>> with its compatible string always use these settings, and invent a >>> new compatible string for one which is fully configurable (as it >>> _should_ have been from the very start) or whether to make this >>> the default if the various properties aren't specified. >> >> IMHO this does not warrant doing a new compatibole-string. Simply >> default to the current hardcoded phy settings if no settings are >> specified through devicetree. > > The problem is that we need to keep existing setups working - which > means when there's no properties specified, we need to default to the > settings hard-coded into the driver. > > That means introducing properties like: > > fsl,no-spread-spectrum > > so that the hard-coded defaults can be turned off, and also deal with > a whole load of defaults for the other properties. That's not > particularly nice. Doing it this way, what I currently have is this: > > struct reg_value { > u32 of_value; > u32 reg_value; > }; > > struct reg_property { > const char *name; > const struct reg_value *values; > size_t num_values; > u32 def_value; > u32 set_value; > }; > > static const struct reg_value gpr13_tx_level[] = { > { 937, IMX6Q_GPR13_SATA_TX_LVL_0_937_V }, > { 947, IMX6Q_GPR13_SATA_TX_LVL_0_947_V }, > ... > { 1230, IMX6Q_GPR13_SATA_TX_LVL_1_230_V }, > { 1240, IMX6Q_GPR13_SATA_TX_LVL_1_240_V } > }; > > static const struct reg_value gpr13_tx_boost[] = { > { 0, IMX6Q_GPR13_SATA_TX_BOOST_0_00_DB }, > { 370, IMX6Q_GPR13_SATA_TX_BOOST_0_37_DB }, > ... > { 528, IMX6Q_GPR13_SATA_TX_BOOST_5_28_DB }, > { 575, IMX6Q_GPR13_SATA_TX_BOOST_5_75_DB } > }; > > static const struct reg_value gpr13_tx_atten[] = { > { 8, IMX6Q_GPR13_SATA_TX_ATTEN_8_16 }, > { 9, IMX6Q_GPR13_SATA_TX_ATTEN_9_16 }, > ... > { 14, IMX6Q_GPR13_SATA_TX_ATTEN_14_16 }, > { 16, IMX6Q_GPR13_SATA_TX_ATTEN_16_16 }, > }; > > static const struct reg_value gpr13_rx_eq[] = { > { 500, IMX6Q_GPR13_SATA_RX_EQ_VAL_0_5_DB }, > { 1000, IMX6Q_GPR13_SATA_RX_EQ_VAL_1_0_DB }, > ... > { 3500, IMX6Q_GPR13_SATA_RX_EQ_VAL_3_5_DB }, > { 4000, IMX6Q_GPR13_SATA_RX_EQ_VAL_4_0_DB }, > }; > > static const struct reg_property gpr13_props[] = { > { > .name = "fsl,transmit-level-mV", > .values = gpr13_tx_level, > .num_values = ARRAY_SIZE(gpr13_tx_level), > .def_value = IMX6Q_GPR13_SATA_TX_LVL_1_025_V, > }, { > .name = "fsl,transmit-boost-mdB", > .values = gpr13_tx_boost, > .num_values = ARRAY_SIZE(gpr13_tx_boost), > .def_value = IMX6Q_GPR13_SATA_TX_BOOST_3_33_DB, > }, { > .name = "fsl,transmit-atten-16ths", > .values = gpr13_tx_atten, > .num_values = ARRAY_SIZE(gpr13_tx_atten), > .def_value = IMX6Q_GPR13_SATA_TX_ATTEN_9_16, > }, { > .name = "fsl,receive-eq-mdB", > .values = gpr13_rx_eq, > .num_values = ARRAY_SIZE(gpr13_rx_eq), > .def_value = IMX6Q_GPR13_SATA_RX_EQ_VAL_3_0_DB, > }, { > .name = "fsl,no-spread-spectrum", > .def_value = IMX6Q_GPR13_SATA_MPLL_SS_EN, > .set_value = 0, > }, > }; > > and then a bunch of code to read through these tables and work out the > GPR13 register value from it - it doesn't handle everything yet because > I've not worked out a good way to do the last remaining three - I'm > thinking that they want to be strings: > > regmap_update_bits(imxpriv->gpr, IOMUXC_GPR13, > IMX6Q_GPR13_SATA_RX_EQ_VAL_MASK | > ... > IMX6Q_GPR13_SATA_TX_EDGE_RATE, > IMX6Q_GPR13_SATA_RX_LOS_LVL_SATA2M | > IMX6Q_GPR13_SATA_RX_DPLL_MODE_2P_4F | > IMX6Q_GPR13_SATA_SPD_MODE_3P0G | > reg_value); > > RX_LOS_LVL: SATA1I / SATA1M / SATA1X / SATA2I / SATA2M / SATA2X > RX_DPLL_MODE: 1P_1F / 2P_2F / 1P_4F / 2P_4F > SPD_MODE: 3P0G / 1P5G (I do wonder whether this should be changed > when the Linux wants to slow the link speed.) > > With a new compatible string, we can use the hard-coded version for > fsl,imx6q-ahci, but require all properties (with values) to be specified > for a different compatible string, thereby eliminating all the defaults, > and making things like "no-spread-spectrum" be a positive property instead > of negative, and this simplifies the parsing code. I see, that does make sense. So consider my +1 for keeping the same compatible string changed to a 0 > There's also the obvious question about which of these properties should > be generic ones for AHCI/SATA interfaces... The only one I see with any > kind of electrical properties specified is sata_highbank: > > - calxeda,tx-atten : a u32 array that contains TX attenuation override > codes, one per port. The upper 3 bytes are always > 0 and thus ignored. > > and that seems to be a register-coded value rather than an actual > attenuation figure. > > A simpler solution to this would be to just provide an imx6-specific > property which encodes the GPR13 value directly, and not bother with > trying to provide individual properties. Yes, that is actually the direction I was thinking in. I think it is great we know what all the bits do in so much detail in the freescale case, but for many other phys we don't have such extensive documentation. Still I can see how in the freescale case you do want to use that documentation to do something better then coding a register value inside the devicetree. OTOH I do like the KISS value of jut specifying a register value. So in the end it is all up to you I'm afraid. Regards, Hans ^ permalink raw reply [flat|nested] 81+ messages in thread
[parent not found: <1393084424-31099-9-git-send-email-hdegoede-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>]
* Re: [PATCH v7 08/15] ahci-imx: Port to library-ised ahci_platform [not found] ` <1393084424-31099-9-git-send-email-hdegoede-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> @ 2014-03-04 12:04 ` Bartlomiej Zolnierkiewicz 0 siblings, 0 replies; 81+ messages in thread From: Bartlomiej Zolnierkiewicz @ 2014-03-04 12:04 UTC (permalink / raw) To: Hans de Goede Cc: Tejun Heo, Maxime Ripard, Oliver Schinagl, Richard Zhu, Roger Quadros, Lee Jones, linux-ide-u79uwXL29TY76Z2rM5mHXA, linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r, devicetree, linux-sunxi-/JYPxA39Uh5TLH3MbocFFw Hi, On Saturday, February 22, 2014 04:53:37 PM Hans de Goede wrote: > This avoids the ugliness of creating a nested platform device from probe. > > While moving it around anyways, move the mk6q phy init code from probe > to imx_sata_enable, as the phy needs to be re-initialized on resume too, > otherwise the drive won't be recognized after resume. > > Tested on a wandboard i.mx6 quad. > > Signed-off-by: Hans de Goede <hdegoede-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> > --- > .../devicetree/bindings/ata/ahci-platform.txt | 9 +- > drivers/ata/ahci_imx.c | 331 ++++++++------------- > 2 files changed, 134 insertions(+), 206 deletions(-) > > diff --git a/Documentation/devicetree/bindings/ata/ahci-platform.txt b/Documentation/devicetree/bindings/ata/ahci-platform.txt > index 499bfed..d86e854 100644 > --- a/Documentation/devicetree/bindings/ata/ahci-platform.txt > +++ b/Documentation/devicetree/bindings/ata/ahci-platform.txt > @@ -5,8 +5,9 @@ Each SATA controller should have its own node. > > Required properties: > - compatible : compatible list, one of "snps,spear-ahci", > - "snps,exynos5440-ahci", "ibm,476gtr-ahci", or > - "allwinner,sun4i-a10-ahci" > + "snps,exynos5440-ahci", "ibm,476gtr-ahci", > + "allwinner,sun4i-a10-ahci", "fsl,imx53-ahci" or > + "fsl,imx6q-ahci" > - interrupts : <interrupt mapping for SATA IRQ> > - reg : <registers mapping> > > @@ -15,6 +16,10 @@ Optional properties: > - clocks : a list of phandle + clock specifier pairs > - target-supply : regulator for SATA target power > > +"fsl,imx53-ahci", "fsl,imx6q-ahci" required properties: > +- clocks : must contain the sata, sata_ref and ahb clocks > +- clock-names : must contain "ahb" for the ahb clock > + > Examples: > sata@ffe08000 { > compatible = "snps,spear-ahci"; > diff --git a/drivers/ata/ahci_imx.c b/drivers/ata/ahci_imx.c > index dd4d6f7..3cb5d69 100644 > --- a/drivers/ata/ahci_imx.c > +++ b/drivers/ata/ahci_imx.c [...] > +static void ahci_imx_host_stop(struct ata_host *host) > +{ > + struct ahci_host_priv *hpriv = host->private_data; > > - ret = platform_device_add_resources(ahci_pdev, res, 2); > - if (ret) > - goto err_out; > + imx_sata_disable(hpriv); > +} > > - ret = platform_device_add_data(ahci_pdev, pdata, sizeof(*pdata)); > - if (ret) > - goto err_out; > +static int imx_ahci_suspend(struct device *dev) > +{ > + struct ata_host *host = dev_get_drvdata(dev); > + struct ahci_host_priv *hpriv = host->private_data; > + int ret; > > - ret = platform_device_add(ahci_pdev); > - if (ret) { > -err_out: > - platform_device_put(ahci_pdev); > + ret = ahci_platform_suspend_host(dev); > + if (ret) > return ret; > - } > + > + imx_sata_disable(hpriv); > > return 0; > } > > -static int imx_ahci_remove(struct platform_device *pdev) > +static int imx_ahci_resume(struct device *dev) > { > - struct imx_ahci_priv *imxpriv = platform_get_drvdata(pdev); > - struct platform_device *ahci_pdev = imxpriv->ahci_pdev; > + struct ata_host *host = dev_get_drvdata(dev); > + struct ahci_host_priv *hpriv = host->private_data; > + int ret; > > - platform_device_unregister(ahci_pdev); > - return 0; > + ret = imx_sata_enable(hpriv); > + if (ret) > + return ret; > + > + return ahci_platform_resume_host(dev); > } The code above introduces two new warnings for CONFIG_PM_SLEEP=n: drivers/ata/ahci_imx.c:284:12: warning: ‘imx_ahci_suspend’ defined but not used [-Wunused-function] drivers/ata/ahci_imx.c:299:12: warning: ‘imx_ahci_resume’ defined but not used [-Wunused-function] [ There needs to be CONFIG_PM_SLEEP ifdef around imh_ahci_suspend() and imx_ahci_resume(). ] All the rest looks good. > +static SIMPLE_DEV_PM_OPS(ahci_imx_pm_ops, imx_ahci_suspend, imx_ahci_resume); > + > static struct platform_driver imx_ahci_driver = { > .probe = imx_ahci_probe, > - .remove = imx_ahci_remove, > + .remove = ata_platform_remove_one, > .driver = { > .name = "ahci-imx", > .owner = THIS_MODULE, > .of_match_table = imx_ahci_of_match, > + .pm = &ahci_imx_pm_ops, > }, > }; > module_platform_driver(imx_ahci_driver); Best regards, -- Bartlomiej Zolnierkiewicz Samsung R&D Institute Poland Samsung Electronics -- You received this message because you are subscribed to the Google Groups "linux-sunxi" group. To unsubscribe from this group and stop receiving emails from it, send an email to linux-sunxi+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit https://groups.google.com/groups/opt_out. ^ permalink raw reply [flat|nested] 81+ messages in thread
* [PATCH v7 09/15] ata: ahci_platform: Add DT compatible for Synopsis DWC AHCI controller [not found] ` <1393084424-31099-1-git-send-email-hdegoede-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> ` (7 preceding siblings ...) 2014-02-22 15:53 ` [PATCH v7 08/15] ahci-imx: Port to library-ised ahci_platform Hans de Goede @ 2014-02-22 15:53 ` Hans de Goede 2014-02-22 15:53 ` [PATCH v7 10/15] ata: ahci_platform: Update DT compatible list Hans de Goede ` (6 subsequent siblings) 15 siblings, 0 replies; 81+ messages in thread From: Hans de Goede @ 2014-02-22 15:53 UTC (permalink / raw) To: Tejun Heo, Maxime Ripard Cc: Oliver Schinagl, Richard Zhu, Roger Quadros, Lee Jones, linux-ide-u79uwXL29TY76Z2rM5mHXA, linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r, devicetree, linux-sunxi-/JYPxA39Uh5TLH3MbocFFw, Hans de Goede From: Roger Quadros <rogerq-l0cyMroinI0@public.gmane.org> Add compatible string "snps,dwc-ahci", which should be used for Synopsis Designware SATA cores. e.g. on TI OMAP5 and DRA7 platforms. Signed-off-by: Roger Quadros <rogerq-l0cyMroinI0@public.gmane.org> Reviewed-by: Bartlomiej Zolnierkiewicz <b.zolnierkie-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org> Signed-off-by: Hans de Goede <hdegoede-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> --- drivers/ata/ahci_platform.c | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/ata/ahci_platform.c b/drivers/ata/ahci_platform.c index bdadec1..d7e55ba 100644 --- a/drivers/ata/ahci_platform.c +++ b/drivers/ata/ahci_platform.c @@ -609,6 +609,7 @@ static const struct of_device_id ahci_of_match[] = { { .compatible = "snps,spear-ahci", }, { .compatible = "snps,exynos5440-ahci", }, { .compatible = "ibm,476gtr-ahci", }, + { .compatible = "snps,dwc-ahci", }, {}, }; MODULE_DEVICE_TABLE(of, ahci_of_match); -- 1.9.0 ^ permalink raw reply related [flat|nested] 81+ messages in thread
* [PATCH v7 10/15] ata: ahci_platform: Update DT compatible list [not found] ` <1393084424-31099-1-git-send-email-hdegoede-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> ` (8 preceding siblings ...) 2014-02-22 15:53 ` [PATCH v7 09/15] ata: ahci_platform: Add DT compatible for Synopsis DWC AHCI controller Hans de Goede @ 2014-02-22 15:53 ` Hans de Goede 2014-02-22 15:53 ` [PATCH v7 11/15] ata: ahci_platform: Manage SATA PHY Hans de Goede ` (5 subsequent siblings) 15 siblings, 0 replies; 81+ messages in thread From: Hans de Goede @ 2014-02-22 15:53 UTC (permalink / raw) To: Tejun Heo, Maxime Ripard Cc: Oliver Schinagl, Richard Zhu, Roger Quadros, Lee Jones, linux-ide-u79uwXL29TY76Z2rM5mHXA, linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r, devicetree, linux-sunxi-/JYPxA39Uh5TLH3MbocFFw, Hans de Goede From: Roger Quadros <rogerq-l0cyMroinI0@public.gmane.org> The ahci_platform driver supports "snps,dwc-ahci". Add this to the DT binding information. Signed-off-by: Roger Quadros <rogerq-l0cyMroinI0@public.gmane.org> Reviewed-by: Bartlomiej Zolnierkiewicz <b.zolnierkie-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org> Signed-off-by: Hans de Goede <hdegoede-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> --- Documentation/devicetree/bindings/ata/ahci-platform.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Documentation/devicetree/bindings/ata/ahci-platform.txt b/Documentation/devicetree/bindings/ata/ahci-platform.txt index d86e854..48b285f 100644 --- a/Documentation/devicetree/bindings/ata/ahci-platform.txt +++ b/Documentation/devicetree/bindings/ata/ahci-platform.txt @@ -6,8 +6,8 @@ Each SATA controller should have its own node. Required properties: - compatible : compatible list, one of "snps,spear-ahci", "snps,exynos5440-ahci", "ibm,476gtr-ahci", - "allwinner,sun4i-a10-ahci", "fsl,imx53-ahci" or - "fsl,imx6q-ahci" + "allwinner,sun4i-a10-ahci", "fsl,imx53-ahci" + "fsl,imx6q-ahci" or "snps,dwc-ahci" - interrupts : <interrupt mapping for SATA IRQ> - reg : <registers mapping> -- 1.9.0 ^ permalink raw reply related [flat|nested] 81+ messages in thread
* [PATCH v7 11/15] ata: ahci_platform: Manage SATA PHY [not found] ` <1393084424-31099-1-git-send-email-hdegoede-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> ` (9 preceding siblings ...) 2014-02-22 15:53 ` [PATCH v7 10/15] ata: ahci_platform: Update DT compatible list Hans de Goede @ 2014-02-22 15:53 ` Hans de Goede 2014-02-22 15:53 ` [PATCH v7 12/15] ata: ahci_platform: runtime resume the device before use Hans de Goede ` (4 subsequent siblings) 15 siblings, 0 replies; 81+ messages in thread From: Hans de Goede @ 2014-02-22 15:53 UTC (permalink / raw) To: Tejun Heo, Maxime Ripard Cc: Oliver Schinagl, Richard Zhu, Roger Quadros, Lee Jones, linux-ide-u79uwXL29TY76Z2rM5mHXA, linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r, devicetree, linux-sunxi-/JYPxA39Uh5TLH3MbocFFw, Balaji T K, Hans de Goede From: Roger Quadros <rogerq-l0cyMroinI0@public.gmane.org> Some platforms have a PHY hooked up to the SATA controller. The PHY needs to be initialized and powered up for SATA to work. We do that using the PHY framework. CC: Balaji T K <balajitk-l0cyMroinI0@public.gmane.org> Signed-off-by: Roger Quadros <rogerq-l0cyMroinI0@public.gmane.org> Signed-off-by: Hans de Goede <hdegoede-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> --- drivers/ata/ahci.h | 2 ++ drivers/ata/ahci_platform.c | 47 +++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 47 insertions(+), 2 deletions(-) diff --git a/drivers/ata/ahci.h b/drivers/ata/ahci.h index bf8100c..3ab7ac9 100644 --- a/drivers/ata/ahci.h +++ b/drivers/ata/ahci.h @@ -37,6 +37,7 @@ #include <linux/clk.h> #include <linux/libata.h> +#include <linux/phy/phy.h> #include <linux/regulator/consumer.h> /* Enclosure Management Control */ @@ -325,6 +326,7 @@ struct ahci_host_priv { u32 em_msg_type; /* EM message type */ struct clk *clks[AHCI_MAX_CLKS]; /* Optional */ struct regulator *target_pwr; /* Optional */ + struct phy *phy; /* If platform uses phy */ void *plat_data; /* Other platform data */ /* * Optional ahci_start_engine override, if not set this gets set to the diff --git a/drivers/ata/ahci_platform.c b/drivers/ata/ahci_platform.c index d7e55ba..99d38c1 100644 --- a/drivers/ata/ahci_platform.c +++ b/drivers/ata/ahci_platform.c @@ -23,6 +23,7 @@ #include <linux/platform_device.h> #include <linux/libata.h> #include <linux/ahci_platform.h> +#include <linux/phy/phy.h> #include "ahci.h" static void ahci_host_stop(struct ata_host *host); @@ -147,6 +148,7 @@ EXPORT_SYMBOL_GPL(ahci_platform_disable_clks); * the following order: * 1) Regulator * 2) Clocks (through ahci_platform_enable_clks) + * 3) Phy * * If resource enabling fails at any point the previous enabled * resources are disabled in reverse order. @@ -171,8 +173,23 @@ int ahci_platform_enable_resources(struct ahci_host_priv *hpriv) if (rc) goto disable_regulator; + if (hpriv->phy) { + rc = phy_init(hpriv->phy); + if (rc) + goto disable_clks; + + rc = phy_power_on(hpriv->phy); + if (rc) { + phy_exit(hpriv->phy); + goto disable_clks; + } + } + return 0; +disable_clks: + ahci_platform_disable_clks(hpriv); + disable_regulator: if (hpriv->target_pwr) regulator_disable(hpriv->target_pwr); @@ -186,14 +203,20 @@ EXPORT_SYMBOL_GPL(ahci_platform_enable_resources); * * This function disables all ahci_platform managed resources in * the following order: - * 1) Clocks (through ahci_platform_disable_clks) - * 2) Regulator + * 1) Phy + * 2) Clocks (through ahci_platform_disable_clks) + * 3) Regulator * * LOCKING: * None. */ void ahci_platform_disable_resources(struct ahci_host_priv *hpriv) { + if (hpriv->phy) { + phy_power_off(hpriv->phy); + phy_exit(hpriv->phy); + } + ahci_platform_disable_clks(hpriv); if (hpriv->target_pwr) @@ -222,6 +245,7 @@ static void ahci_platform_put_resources(struct device *dev, void *res) * 2) regulator for controlling the targets power (optional) * 3) 0 - AHCI_MAX_CLKS clocks, as specified in the devs devicetree node, * or for non devicetree enabled platforms a single clock + * 4) phy (optional) * * LOCKING: * None. @@ -283,6 +307,25 @@ struct ahci_host_priv *ahci_platform_get_resources( hpriv->clks[i] = clk; } + hpriv->phy = devm_phy_get(dev, "sata-phy"); + if (IS_ERR(hpriv->phy)) { + rc = PTR_ERR(hpriv->phy); + switch (rc) { + case -ENODEV: + case -ENOSYS: + /* continue normally */ + hpriv->phy = NULL; + break; + + case -EPROBE_DEFER: + goto err_out; + + default: + dev_err(dev, "couldn't get sata-phy\n"); + goto err_out; + } + } + devres_remove_group(dev, NULL); return hpriv; -- 1.9.0 ^ permalink raw reply related [flat|nested] 81+ messages in thread
* [PATCH v7 12/15] ata: ahci_platform: runtime resume the device before use [not found] ` <1393084424-31099-1-git-send-email-hdegoede-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> ` (10 preceding siblings ...) 2014-02-22 15:53 ` [PATCH v7 11/15] ata: ahci_platform: Manage SATA PHY Hans de Goede @ 2014-02-22 15:53 ` Hans de Goede 2014-02-22 15:53 ` [PATCH v7 13/15] ARM: sun4i: dt: Remove grouping + simple-bus compatible for regulators Hans de Goede ` (3 subsequent siblings) 15 siblings, 0 replies; 81+ messages in thread From: Hans de Goede @ 2014-02-22 15:53 UTC (permalink / raw) To: Tejun Heo, Maxime Ripard Cc: Oliver Schinagl, Richard Zhu, Roger Quadros, Lee Jones, linux-ide-u79uwXL29TY76Z2rM5mHXA, linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r, devicetree, linux-sunxi-/JYPxA39Uh5TLH3MbocFFw, Balaji T K, Hans de Goede From: Roger Quadros <rogerq-l0cyMroinI0@public.gmane.org> On OMAP platforms the device needs to be runtime resumed before it can be accessed. The OMAP HWMOD framework takes care of enabling the module and its resources based on the device's runtime PM state. In this patch we runtime resume during .probe() and runtime suspend after .remove(). We also update the runtime PM state during .resume(). CC: Balaji T K <balajitk-l0cyMroinI0@public.gmane.org> Signed-off-by: Roger Quadros <rogerq-l0cyMroinI0@public.gmane.org> Signed-off-by: Hans de Goede <hdegoede-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> --- drivers/ata/ahci.h | 1 + drivers/ata/ahci_platform.c | 15 +++++++++++++++ 2 files changed, 16 insertions(+) diff --git a/drivers/ata/ahci.h b/drivers/ata/ahci.h index 3ab7ac9..51af275 100644 --- a/drivers/ata/ahci.h +++ b/drivers/ata/ahci.h @@ -324,6 +324,7 @@ struct ahci_host_priv { u32 em_loc; /* enclosure management location */ u32 em_buf_sz; /* EM buffer size in byte */ u32 em_msg_type; /* EM message type */ + bool got_runtime_pm; /* Did we do pm_runtime_get? */ struct clk *clks[AHCI_MAX_CLKS]; /* Optional */ struct regulator *target_pwr; /* Optional */ struct phy *phy; /* If platform uses phy */ diff --git a/drivers/ata/ahci_platform.c b/drivers/ata/ahci_platform.c index 99d38c1..75698a4 100644 --- a/drivers/ata/ahci_platform.c +++ b/drivers/ata/ahci_platform.c @@ -24,6 +24,7 @@ #include <linux/libata.h> #include <linux/ahci_platform.h> #include <linux/phy/phy.h> +#include <linux/pm_runtime.h> #include "ahci.h" static void ahci_host_stop(struct ata_host *host); @@ -229,6 +230,11 @@ static void ahci_platform_put_resources(struct device *dev, void *res) struct ahci_host_priv *hpriv = res; int c; + if (hpriv->got_runtime_pm) { + pm_runtime_put_sync(dev); + pm_runtime_disable(dev); + } + for (c = 0; c < AHCI_MAX_CLKS && hpriv->clks[c]; c++) clk_put(hpriv->clks[c]); } @@ -326,6 +332,10 @@ struct ahci_host_priv *ahci_platform_get_resources( } } + pm_runtime_enable(dev); + pm_runtime_get_sync(dev); + hpriv->got_runtime_pm = true; + devres_remove_group(dev, NULL); return hpriv; @@ -635,6 +645,11 @@ int ahci_platform_resume(struct device *dev) if (rc) goto disable_resources; + /* We resumed so update PM runtime state */ + pm_runtime_disable(dev); + pm_runtime_set_active(dev); + pm_runtime_enable(dev); + return 0; disable_resources: -- 1.9.0 ^ permalink raw reply related [flat|nested] 81+ messages in thread
* [PATCH v7 13/15] ARM: sun4i: dt: Remove grouping + simple-bus compatible for regulators [not found] ` <1393084424-31099-1-git-send-email-hdegoede-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> ` (11 preceding siblings ...) 2014-02-22 15:53 ` [PATCH v7 12/15] ata: ahci_platform: runtime resume the device before use Hans de Goede @ 2014-02-22 15:53 ` Hans de Goede [not found] ` <1393084424-31099-14-git-send-email-hdegoede-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> 2014-02-22 15:53 ` [PATCH v7 14/15] ARM: sun4i: dt: Add ahci / sata support Hans de Goede ` (2 subsequent siblings) 15 siblings, 1 reply; 81+ messages in thread From: Hans de Goede @ 2014-02-22 15:53 UTC (permalink / raw) To: Tejun Heo, Maxime Ripard Cc: Oliver Schinagl, Richard Zhu, Roger Quadros, Lee Jones, linux-ide-u79uwXL29TY76Z2rM5mHXA, linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r, devicetree, linux-sunxi-/JYPxA39Uh5TLH3MbocFFw, Hans de Goede According to Documentation/devicetree/bindings/regulator/regulator.txt regulator nodes should not be placed under 'simple-bus'. Mark Rutland also explains about it at: http://www.spinics.net/lists/linux-usb/msg101497.html Signed-off-by: Hans de Goede <hdegoede-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> --- arch/arm/boot/dts/sun4i-a10-a1000.dts | 22 +++++++++------------- arch/arm/boot/dts/sun4i-a10-hackberry.dts | 18 +++++++----------- 2 files changed, 16 insertions(+), 24 deletions(-) diff --git a/arch/arm/boot/dts/sun4i-a10-a1000.dts b/arch/arm/boot/dts/sun4i-a10-a1000.dts index d4b081d..cbd2e13 100644 --- a/arch/arm/boot/dts/sun4i-a10-a1000.dts +++ b/arch/arm/boot/dts/sun4i-a10-a1000.dts @@ -80,18 +80,14 @@ }; }; - regulators { - compatible = "simple-bus"; - - reg_emac_3v3: emac-3v3 { - compatible = "regulator-fixed"; - pinctrl-names = "default"; - pinctrl-0 = <&emac_power_pin_a1000>; - regulator-name = "emac-3v3"; - regulator-min-microvolt = <3300000>; - regulator-max-microvolt = <3300000>; - enable-active-high; - gpio = <&pio 7 15 0>; - }; + reg_emac_3v3: emac-3v3 { + compatible = "regulator-fixed"; + pinctrl-names = "default"; + pinctrl-0 = <&emac_power_pin_a1000>; + regulator-name = "emac-3v3"; + regulator-min-microvolt = <3300000>; + regulator-max-microvolt = <3300000>; + enable-active-high; + gpio = <&pio 7 15 0>; }; }; diff --git a/arch/arm/boot/dts/sun4i-a10-hackberry.dts b/arch/arm/boot/dts/sun4i-a10-hackberry.dts index 3a1595f..6692d336 100644 --- a/arch/arm/boot/dts/sun4i-a10-hackberry.dts +++ b/arch/arm/boot/dts/sun4i-a10-hackberry.dts @@ -54,16 +54,12 @@ }; }; - regulators { - compatible = "simple-bus"; - - reg_emac_3v3: emac-3v3 { - compatible = "regulator-fixed"; - regulator-name = "emac-3v3"; - regulator-min-microvolt = <3300000>; - regulator-max-microvolt = <3300000>; - enable-active-high; - gpio = <&pio 7 19 0>; - }; + reg_emac_3v3: emac-3v3 { + compatible = "regulator-fixed"; + regulator-name = "emac-3v3"; + regulator-min-microvolt = <3300000>; + regulator-max-microvolt = <3300000>; + enable-active-high; + gpio = <&pio 7 19 0>; }; }; -- 1.9.0 ^ permalink raw reply related [flat|nested] 81+ messages in thread
[parent not found: <1393084424-31099-14-git-send-email-hdegoede-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>]
* Re: [PATCH v7 13/15] ARM: sun4i: dt: Remove grouping + simple-bus compatible for regulators [not found] ` <1393084424-31099-14-git-send-email-hdegoede-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> @ 2014-02-22 21:44 ` Maxime Ripard 2014-02-23 8:03 ` Hans de Goede 0 siblings, 1 reply; 81+ messages in thread From: Maxime Ripard @ 2014-02-22 21:44 UTC (permalink / raw) To: Hans de Goede Cc: Tejun Heo, Oliver Schinagl, Richard Zhu, Roger Quadros, Lee Jones, linux-ide-u79uwXL29TY76Z2rM5mHXA, linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r, devicetree, linux-sunxi-/JYPxA39Uh5TLH3MbocFFw [-- Attachment #1: Type: text/plain, Size: 571 bytes --] Hi, On Sat, Feb 22, 2014 at 04:53:42PM +0100, Hans de Goede wrote: > According to Documentation/devicetree/bindings/regulator/regulator.txt > regulator nodes should not be placed under 'simple-bus'. > > Mark Rutland also explains about it at: > http://www.spinics.net/lists/linux-usb/msg101497.html > > Signed-off-by: Hans de Goede <hdegoede-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> Applied in my sunxi/dt-for-3.15 branch. Thanks! Maxime -- Maxime Ripard, Free Electrons Embedded Linux, Kernel and Android engineering http://free-electrons.com [-- Attachment #2: Digital signature --] [-- Type: application/pgp-signature, Size: 836 bytes --] ^ permalink raw reply [flat|nested] 81+ messages in thread
* Re: [PATCH v7 13/15] ARM: sun4i: dt: Remove grouping + simple-bus compatible for regulators 2014-02-22 21:44 ` Maxime Ripard @ 2014-02-23 8:03 ` Hans de Goede [not found] ` <5309AB64.7010603-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> 0 siblings, 1 reply; 81+ messages in thread From: Hans de Goede @ 2014-02-23 8:03 UTC (permalink / raw) To: Maxime Ripard Cc: Tejun Heo, Oliver Schinagl, Richard Zhu, Roger Quadros, Lee Jones, linux-ide-u79uwXL29TY76Z2rM5mHXA, linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r, devicetree, linux-sunxi-/JYPxA39Uh5TLH3MbocFFw -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi, On 02/22/2014 10:44 PM, Maxime Ripard wrote: > Hi, > > On Sat, Feb 22, 2014 at 04:53:42PM +0100, Hans de Goede wrote: >> According to Documentation/devicetree/bindings/regulator/regulator.txt regulator nodes should not be placed under 'simple-bus'. >> >> Mark Rutland also explains about it at: http://www.spinics.net/lists/linux-usb/msg101497.html >> >> Signed-off-by: Hans de Goede <hdegoede-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> > > Applied in my sunxi/dt-for-3.15 branch. Thanks, I assume this only applies to this patch, since we were still discussing the common regulator bits of the ahci enablement dts patches ? I'm not seeing any of your recent merges here: https://github.com/mripard/linux/commits/sunxi/dt-for-3.15 Did you not push them, or am I looking at the wrong tree ? Regards, Hans -----BEGIN PGP SIGNATURE----- Version: GnuPG v1 Comment: Using GnuPG with Thunderbird - http://www.enigmail.net/ iEYEARECAAYFAlMJq18ACgkQF3VEtJrzE/vngACfbYd5K2ZixBm45Y+e3cMFSq9M v68Anjze6R6meI1Z5R0l4nFCNS8txl9p =0XGo -----END PGP SIGNATURE----- ^ permalink raw reply [flat|nested] 81+ messages in thread
[parent not found: <5309AB64.7010603-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>]
* Re: [PATCH v7 13/15] ARM: sun4i: dt: Remove grouping + simple-bus compatible for regulators [not found] ` <5309AB64.7010603-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> @ 2014-02-24 9:14 ` Maxime Ripard 0 siblings, 0 replies; 81+ messages in thread From: Maxime Ripard @ 2014-02-24 9:14 UTC (permalink / raw) To: Hans de Goede Cc: Tejun Heo, Oliver Schinagl, Richard Zhu, Roger Quadros, Lee Jones, linux-ide-u79uwXL29TY76Z2rM5mHXA, linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r, devicetree, linux-sunxi-/JYPxA39Uh5TLH3MbocFFw [-- Attachment #1: Type: text/plain, Size: 574 bytes --] On Sun, Feb 23, 2014 at 09:03:48AM +0100, Hans de Goede wrote: > Thanks, I assume this only applies to this patch, since we were still > discussing the common regulator bits of the ahci enablement dts patches ? Yes. > I'm not seeing any of your recent merges here: > https://github.com/mripard/linux/commits/sunxi/dt-for-3.15 > > Did you not push them, or am I looking at the wrong tree ? I forgot to push it. It's fixed now. Thanks! Maxime -- Maxime Ripard, Free Electrons Embedded Linux, Kernel and Android engineering http://free-electrons.com [-- Attachment #2: Digital signature --] [-- Type: application/pgp-signature, Size: 836 bytes --] ^ permalink raw reply [flat|nested] 81+ messages in thread
* [PATCH v7 14/15] ARM: sun4i: dt: Add ahci / sata support [not found] ` <1393084424-31099-1-git-send-email-hdegoede-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> ` (12 preceding siblings ...) 2014-02-22 15:53 ` [PATCH v7 13/15] ARM: sun4i: dt: Remove grouping + simple-bus compatible for regulators Hans de Goede @ 2014-02-22 15:53 ` Hans de Goede 2014-02-22 15:53 ` [PATCH v7 15/15] ARM: sun7i: " Hans de Goede 2014-02-22 16:26 ` [PATCH v7 00/15] ahci: library-ise ahci_platform, add sunxi driver and cleanup imx driver Hans de Goede 15 siblings, 0 replies; 81+ messages in thread From: Hans de Goede @ 2014-02-22 15:53 UTC (permalink / raw) To: Tejun Heo, Maxime Ripard Cc: Oliver Schinagl, Richard Zhu, Roger Quadros, Lee Jones, linux-ide-u79uwXL29TY76Z2rM5mHXA, linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r, devicetree, linux-sunxi-/JYPxA39Uh5TLH3MbocFFw, Hans de Goede From: Oliver Schinagl <oliver-dxLnbx3+1qmEVqv0pETR8A@public.gmane.org> This patch adds sunxi sata support to A10 boards that have such a connector. Some boards also feature a regulator via a GPIO and support for this is also added. Signed-off-by: Olliver Schinagl <oliver-dxLnbx3+1qmEVqv0pETR8A@public.gmane.org> Signed-off-by: Hans de Goede <hdegoede-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> --- arch/arm/boot/dts/sun4i-a10-a1000.dts | 4 ++++ arch/arm/boot/dts/sun4i-a10-cubieboard.dts | 6 +++++ arch/arm/boot/dts/sun4i-a10.dtsi | 8 +++++++ arch/arm/boot/dts/sunxi-ahci-reg.dtsi | 36 ++++++++++++++++++++++++++++++ 4 files changed, 54 insertions(+) create mode 100644 arch/arm/boot/dts/sunxi-ahci-reg.dtsi diff --git a/arch/arm/boot/dts/sun4i-a10-a1000.dts b/arch/arm/boot/dts/sun4i-a10-a1000.dts index cbd2e13..d6ec839 100644 --- a/arch/arm/boot/dts/sun4i-a10-a1000.dts +++ b/arch/arm/boot/dts/sun4i-a10-a1000.dts @@ -35,6 +35,10 @@ }; }; + ahci: sata@01c18000 { + status = "okay"; + }; + pinctrl@01c20800 { emac_power_pin_a1000: emac_power_pin@0 { allwinner,pins = "PH15"; diff --git a/arch/arm/boot/dts/sun4i-a10-cubieboard.dts b/arch/arm/boot/dts/sun4i-a10-cubieboard.dts index b139ee6..6df237d8 100644 --- a/arch/arm/boot/dts/sun4i-a10-cubieboard.dts +++ b/arch/arm/boot/dts/sun4i-a10-cubieboard.dts @@ -12,6 +12,7 @@ /dts-v1/; /include/ "sun4i-a10.dtsi" +/include/ "sunxi-ahci-reg.dtsi" / { model = "Cubietech Cubieboard"; @@ -33,6 +34,11 @@ }; }; + ahci: sata@01c18000 { + target-supply = <®_ahci_5v>; + status = "okay"; + }; + pinctrl@01c20800 { led_pins_cubieboard: led_pins@0 { allwinner,pins = "PH20", "PH21"; diff --git a/arch/arm/boot/dts/sun4i-a10.dtsi b/arch/arm/boot/dts/sun4i-a10.dtsi index 336dbec..454077a 100644 --- a/arch/arm/boot/dts/sun4i-a10.dtsi +++ b/arch/arm/boot/dts/sun4i-a10.dtsi @@ -338,6 +338,14 @@ #size-cells = <0>; }; + ahci: sata@01c18000 { + compatible = "allwinner,sun4i-a10-ahci"; + reg = <0x01c18000 0x1000>; + interrupts = <56>; + clocks = <&pll6 0>, <&ahb_gates 25>; + status = "disabled"; + }; + intc: interrupt-controller@01c20400 { compatible = "allwinner,sun4i-ic"; reg = <0x01c20400 0x400>; diff --git a/arch/arm/boot/dts/sunxi-ahci-reg.dtsi b/arch/arm/boot/dts/sunxi-ahci-reg.dtsi new file mode 100644 index 0000000..7072af1 --- /dev/null +++ b/arch/arm/boot/dts/sunxi-ahci-reg.dtsi @@ -0,0 +1,36 @@ +/* + * sunxi boards sata target power supply common code + * + * Copyright 2014 - Hans de Goede <hdegoede-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> + * + * The code contained herein is licensed under the GNU General Public + * License. You may obtain a copy of the GNU General Public License + * Version 2 or later at the following locations: + * + * http://www.opensource.org/licenses/gpl-license.html + * http://www.gnu.org/copyleft/gpl.html + */ + +/ { + soc@01c00000 { + pio: pinctrl@01c20800 { + ahci_pwr_pin_a: ahci_pwr_pin@0 { + allwinner,pins = "PB8"; + allwinner,function = "gpio_out"; + allwinner,drive = <0>; + allwinner,pull = <0>; + }; + }; + }; + + reg_ahci_5v: ahci-5v { + compatible = "regulator-fixed"; + pinctrl-names = "default"; + pinctrl-0 = <&ahci_pwr_pin_a>; + regulator-name = "ahci-5v"; + regulator-min-microvolt = <5000000>; + regulator-max-microvolt = <5000000>; + enable-active-high; + gpio = <&pio 1 8 0>; + }; +}; -- 1.9.0 ^ permalink raw reply related [flat|nested] 81+ messages in thread
* [PATCH v7 15/15] ARM: sun7i: dt: Add ahci / sata support [not found] ` <1393084424-31099-1-git-send-email-hdegoede-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> ` (13 preceding siblings ...) 2014-02-22 15:53 ` [PATCH v7 14/15] ARM: sun4i: dt: Add ahci / sata support Hans de Goede @ 2014-02-22 15:53 ` Hans de Goede 2014-02-22 16:26 ` [PATCH v7 00/15] ahci: library-ise ahci_platform, add sunxi driver and cleanup imx driver Hans de Goede 15 siblings, 0 replies; 81+ messages in thread From: Hans de Goede @ 2014-02-22 15:53 UTC (permalink / raw) To: Tejun Heo, Maxime Ripard Cc: Oliver Schinagl, Richard Zhu, Roger Quadros, Lee Jones, linux-ide-u79uwXL29TY76Z2rM5mHXA, linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r, devicetree, linux-sunxi-/JYPxA39Uh5TLH3MbocFFw, Hans de Goede This patch adds sunxi sata support to A20 boards that have such a connector. Some boards also feature a regulator via a GPIO and support for this is also added. Signed-off-by: Olliver Schinagl <oliver-dxLnbx3+1qmEVqv0pETR8A@public.gmane.org> Signed-off-by: Hans de Goede <hdegoede-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> --- arch/arm/boot/dts/sun7i-a20-cubieboard2.dts | 6 ++++++ arch/arm/boot/dts/sun7i-a20-cubietruck.dts | 18 ++++++++++++++++++ arch/arm/boot/dts/sun7i-a20-olinuxino-micro.dts | 6 ++++++ arch/arm/boot/dts/sun7i-a20.dtsi | 8 ++++++++ 4 files changed, 38 insertions(+) diff --git a/arch/arm/boot/dts/sun7i-a20-cubieboard2.dts b/arch/arm/boot/dts/sun7i-a20-cubieboard2.dts index 7bf4935..07823c2 100644 --- a/arch/arm/boot/dts/sun7i-a20-cubieboard2.dts +++ b/arch/arm/boot/dts/sun7i-a20-cubieboard2.dts @@ -13,12 +13,18 @@ /dts-v1/; /include/ "sun7i-a20.dtsi" +/include/ "sunxi-ahci-reg.dtsi" / { model = "Cubietech Cubieboard2"; compatible = "cubietech,cubieboard2", "allwinner,sun7i-a20"; soc@01c00000 { + ahci: sata@01c18000 { + target-supply = <®_ahci_5v>; + status = "okay"; + }; + pinctrl@01c20800 { led_pins_cubieboard2: led_pins@0 { allwinner,pins = "PH20", "PH21"; diff --git a/arch/arm/boot/dts/sun7i-a20-cubietruck.dts b/arch/arm/boot/dts/sun7i-a20-cubietruck.dts index 025ce52..403bd2e 100644 --- a/arch/arm/boot/dts/sun7i-a20-cubietruck.dts +++ b/arch/arm/boot/dts/sun7i-a20-cubietruck.dts @@ -13,13 +13,26 @@ /dts-v1/; /include/ "sun7i-a20.dtsi" +/include/ "sunxi-ahci-reg.dtsi" / { model = "Cubietech Cubietruck"; compatible = "cubietech,cubietruck", "allwinner,sun7i-a20"; soc@01c00000 { + ahci: sata@01c18000 { + target-supply = <®_ahci_5v>; + status = "okay"; + }; + pinctrl@01c20800 { + ahci_pwr_pin_cubietruck: ahci_pwr_pin@1 { + allwinner,pins = "PH12"; + allwinner,function = "gpio_out"; + allwinner,drive = <0>; + allwinner,pull = <0>; + }; + led_pins_cubietruck: led_pins@0 { allwinner,pins = "PH7", "PH11", "PH20", "PH21"; allwinner,function = "gpio_out"; @@ -90,4 +103,9 @@ gpios = <&pio 7 7 0>; }; }; + + reg_ahci_5v: ahci-5v { + pinctrl-0 = <&ahci_pwr_pin_cubietruck>; + gpio = <&pio 7 12 0>; + }; }; diff --git a/arch/arm/boot/dts/sun7i-a20-olinuxino-micro.dts b/arch/arm/boot/dts/sun7i-a20-olinuxino-micro.dts index b02a796..d5c6799 100644 --- a/arch/arm/boot/dts/sun7i-a20-olinuxino-micro.dts +++ b/arch/arm/boot/dts/sun7i-a20-olinuxino-micro.dts @@ -13,12 +13,18 @@ /dts-v1/; /include/ "sun7i-a20.dtsi" +/include/ "sunxi-ahci-reg.dtsi" / { model = "Olimex A20-Olinuxino Micro"; compatible = "olimex,a20-olinuxino-micro", "allwinner,sun7i-a20"; soc@01c00000 { + ahci: sata@01c18000 { + target-supply = <®_ahci_5v>; + status = "okay"; + }; + pinctrl@01c20800 { led_pins_olinuxino: led_pins@0 { allwinner,pins = "PH2"; diff --git a/arch/arm/boot/dts/sun7i-a20.dtsi b/arch/arm/boot/dts/sun7i-a20.dtsi index daaafd0..3385994 100644 --- a/arch/arm/boot/dts/sun7i-a20.dtsi +++ b/arch/arm/boot/dts/sun7i-a20.dtsi @@ -392,6 +392,14 @@ #size-cells = <0>; }; + ahci: sata@01c18000 { + compatible = "allwinner,sun4i-a10-ahci"; + reg = <0x01c18000 0x1000>; + interrupts = <0 56 4>; + clocks = <&pll6 0>, <&ahb_gates 25>; + status = "disabled"; + }; + pio: pinctrl@01c20800 { compatible = "allwinner,sun7i-a20-pinctrl"; reg = <0x01c20800 0x400>; -- 1.9.0 ^ permalink raw reply related [flat|nested] 81+ messages in thread
* [PATCH v7 00/15] ahci: library-ise ahci_platform, add sunxi driver and cleanup imx driver [not found] ` <1393084424-31099-1-git-send-email-hdegoede-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> ` (14 preceding siblings ...) 2014-02-22 15:53 ` [PATCH v7 15/15] ARM: sun7i: " Hans de Goede @ 2014-02-22 16:26 ` Hans de Goede [not found] ` <5308CFC8.4020400-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> 15 siblings, 1 reply; 81+ messages in thread From: Hans de Goede @ 2014-02-22 16:26 UTC (permalink / raw) To: Tejun Heo, Maxime Ripard Cc: Oliver Schinagl, Richard Zhu, Roger Quadros, Lee Jones, linux-ide-u79uwXL29TY76Z2rM5mHXA, linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r, devicetree, linux-sunxi-/JYPxA39Uh5TLH3MbocFFw <resend of cover-letter with a proper subject, sorry about that> Hi all, Here is v7 of my patchset for adding ahci-sunxi support. This is hopefully the final final version of this set :) Note I'm going on vacation for a week starting Monday, so if I'm not responding that is why. Tejun if you feel some small cleanups are still necessary and you don't want to wait for me to get back feel free to squash in any cleanups you deem necessary. This has been tested with Allwinner A10, Allwinner A20 and Freeware imx6x SoCs, including suspend / resume. Note that the ahci_imx driver now also has imx53 sata support, it would be good if someone could test that with this series. History: v1, by Olliver Schinagl: This was using the approach of having a platform device which probe method creates a new child platform device which gets driven by ahci_platform.c, as done by ahci_imx.c . v2, by Hans de Goede: Stand-alone platform driver based on Olliver's work v3, by Hans de Goede: patch-series, with 4 different parts a) Make ahci_platform.c more generic, handle more then 1 clk, target pwr regulator b) New ahci-sunxi code only populating ahci_platform_data, passed to ahci_platform.c to of_device_id matching. c) Refactor ahci-imx code to work the same as the new ahci-sunxi code, this is the reason why v3 is an RFC, I'm waiting for the wandboard I ordered to arrive so that I can actually test this. d) dts bindings for the sunxi ahci parts v4, by Hans de Goede: patch-series, with 5 different parts: a) Make ahci_platform.c more generic, handle more then 1 clk, target pwr regulator b) Turn parts of ahci_platform.c into a library for use by other drivers c) New ahci-sunxi driver using the ahci_platform.c library functionality d) Refactor ahci-imx code to work the same as the new ahci-sunxi code e) dts bindings for the sunxi ahci parts v5: v4 + the following changes: 1) fsl,imx6q driver is now tested 2) fixed suspend / resume on fsl,imx6q 3) Modifed devicetree node naming to match dt spec 4) Reworked the busy waiting code in the sunxi-phy handling as suggested by Russell King v6: v5 rebased on top of 3.14-rc3 + the following changes 1) Added Roger Quadros' generic phy support series 2) Added a "ARM: sun4i: dt: Remove grouping + simple-bus for regulators" dts patch v7: v6 + the following changes: 1) Addressed all Tejun's review remarks: * Added function header comments to all exported ahci_platform functions * Added comments in some other places * Removed use of 2 empty lines to separate functions in some cases * Use devres to automatically call ahci_platform_put_resources on get_resource failure, probe failure and regular device remove 2) Dropped patches to move ahci_host_priv struct declaration to include/linux, this was a left-over from v3 and is no longer necessary 3) Updated Roger's "ata: ahci_platform: Manage SATA PHY" patch: * Update function header comments for the changes this makes * Drop the Kconfig PHY requires hack, my patch for the phy-core to always be built-in has been queued in Greg KH's tree, so this is no longer necessary. 4) Dropped Roger's "ata: ahci_platform: Add 'struct device' argument to ahci_platform_put_resources()" patch, ahci_platform_put_resources already has a device argument as result of it being changed into a devres release function Tejun, can you please add patches 1-12 to your ata tree for 3.15 ? Maxime, can you please add patch 13-15 to your dts tree for 3.15 ? Thanks & Regards, Hans -- You received this message because you are subscribed to the Google Groups "linux-sunxi" group. To unsubscribe from this group and stop receiving emails from it, send an email to linux-sunxi+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit https://groups.google.com/groups/opt_out. ^ permalink raw reply [flat|nested] 81+ messages in thread
[parent not found: <5308CFC8.4020400-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>]
* Re: [PATCH v7 00/15] ahci: library-ise ahci_platform, add sunxi driver and cleanup imx driver [not found] ` <5308CFC8.4020400-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> @ 2014-02-22 20:37 ` Tejun Heo 0 siblings, 0 replies; 81+ messages in thread From: Tejun Heo @ 2014-02-22 20:37 UTC (permalink / raw) To: linux-sunxi-/JYPxA39Uh5TLH3MbocFFw Cc: Maxime Ripard, Oliver Schinagl, Richard Zhu, Roger Quadros, Lee Jones, linux-ide-u79uwXL29TY76Z2rM5mHXA, linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r, devicetree On Sat, Feb 22, 2014 at 05:26:48PM +0100, Hans de Goede wrote: > Tejun, can you please add patches 1-12 to your ata tree for 3.15 ? Applied 1-12 to libata/for-3.15 with comment format slightly updated. Thanks. -- tejun ^ permalink raw reply [flat|nested] 81+ messages in thread
* (unknown), @ 2018-06-23 21:08 David Lechner 0 siblings, 0 replies; 81+ messages in thread From: David Lechner @ 2018-06-23 21:08 UTC (permalink / raw) To: linux-remoteproc, devicetree, linux-omap, linux-arm-kernel Cc: David Lechner, Ohad Ben-Cohen, Bjorn Andersson, Rob Herring, Mark Rutland, Benoît Cousson, Tony Lindgren, Sekhar Nori, Kevin Hilman, linux-kernel Date: Sat, 23 Jun 2018 15:43:59 -0500 Subject: [PATCH 0/8] New remoteproc driver for TI PRU This series adds a new remoteproc driver for the TI Programmable Runtime Unit (PRU) that is present in some TI Sitara processors. This code has been tested working on AM1808 (LEGO MINDSTORMS EV3) and AM3358 (BeagleBone Green). There are a couple of quirks that had to be worked around in order to get this working. The PRU units have multiple memory maps. Notably, both the instruction RAM and data RAM are at address 0x0. This caused the da_to_va callback to not work because the same address could refer to two different locations. To work around this, the first two patches add a "map" parameter to the da_to_va callbacks so that we have an extra bit of information to make this distinction. Also, on AM38xx we have to use pdata for accessing a reset since there is not a reset controller. There are several other devices doing this, so the seems the best way for now. For anyone else who would like to test, I used the rpmsg-client-sample driver. Just enable it in your kernel config. Then grab the appropriate firmware[1] and put in in /lib/firmware/. Use sysfs to start and stop the PRU: echo start > /sys/class/remoteproc<n>/state echo stop > /sys/class/remoteproc<n>/state [1]: firmware downloads: AM18XX: https://github.com/ev3dev/ev3dev-pru-firmware/releases/download/mainline-kernel-testing/AM18xx-PRU-rpmsg-client-sample.zip AM335X: https://github.com/ev3dev/ev3dev-pru-firmware/releases/download/mainline-kernel-testing/AM335x-PRU-rpmsg-client-sample.zip David Lechner (8): remoteproc: add map parameter to da_to_va remoteproc: add page lookup for TI PRU to ELF loader ARM: OMAP2+: add pdata quirks for PRUSS reset dt-bindings: add bindings for TI PRU as remoteproc remoteproc: new driver for TI PRU ARM: davinci_all_defconfig: enable PRU remoteproc module ARM: dts: da850: add node for PRUSS ARM: dts: am33xx: add node for PRU remoteproc .../bindings/remoteproc/ti_pru_rproc.txt | 51 ++ MAINTAINERS | 5 + arch/arm/boot/dts/am33xx.dtsi | 9 + arch/arm/boot/dts/da850.dtsi | 8 + arch/arm/configs/davinci_all_defconfig | 2 + arch/arm/mach-omap2/pdata-quirks.c | 9 + drivers/remoteproc/Kconfig | 7 + drivers/remoteproc/Makefile | 1 + drivers/remoteproc/imx_rproc.c | 2 +- drivers/remoteproc/keystone_remoteproc.c | 3 +- drivers/remoteproc/qcom_adsp_pil.c | 2 +- drivers/remoteproc/qcom_q6v5_pil.c | 2 +- drivers/remoteproc/qcom_wcnss.c | 2 +- drivers/remoteproc/remoteproc_core.c | 10 +- drivers/remoteproc/remoteproc_elf_loader.c | 117 +++- drivers/remoteproc/remoteproc_internal.h | 2 +- drivers/remoteproc/st_slim_rproc.c | 2 +- drivers/remoteproc/ti_pru_rproc.c | 660 ++++++++++++++++++ drivers/remoteproc/wkup_m3_rproc.c | 3 +- include/linux/platform_data/ti-pruss.h | 18 + include/linux/remoteproc.h | 2 +- include/uapi/linux/elf-em.h | 1 + 22 files changed, 899 insertions(+), 19 deletions(-) create mode 100644 Documentation/devicetree/bindings/remoteproc/ti_pru_rproc.txt create mode 100644 drivers/remoteproc/ti_pru_rproc.c create mode 100644 include/linux/platform_data/ti-pruss.h -- 2.17.1 ^ permalink raw reply [flat|nested] 81+ messages in thread
* (unknown), @ 2018-02-12 1:39 Alfred Cheuk Chow 0 siblings, 0 replies; 81+ messages in thread From: Alfred Cheuk Chow @ 2018-02-12 1:39 UTC (permalink / raw) Good Day, I am Mr. Alfred Cheuk Yu Chow, the Director for Credit & Marketing Chong Hing Bank, Hong Kong, Chong Hing Bank Center, 24 Des Voeux Road Central, Hong Kong. I have a business proposal of $ 38,980,369.00. All confirmable documents to back up the claims will be made available to you prior to your acceptance and as soon as I receive your return mail. Best Regards, Alfred Chow. -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 81+ messages in thread
* [PATCH] default implementation for of_find_all_nodes(...) @ 2017-08-30 18:32 Artur Lorincz [not found] ` <1504117946-3958-1-git-send-email-larturus2-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> 0 siblings, 1 reply; 81+ messages in thread From: Artur Lorincz @ 2017-08-30 18:32 UTC (permalink / raw) To: frowand.list; +Cc: devicetree, linux-kernel, larturus, Artur Lorincz Added default implementation for of_find_all_nodes(). This function is used by board.c from the board module (drivers/staging/board). Signed-off-by: Artur Lorincz <larturus@yahoo.com> --- include/linux/of.h | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/include/linux/of.h b/include/linux/of.h index 4a8a709..0a9c17a 100644 --- a/include/linux/of.h +++ b/include/linux/of.h @@ -865,6 +865,11 @@ static inline void of_property_clear_flag(struct property *p, unsigned long flag #define of_match_ptr(_ptr) NULL #define of_match_node(_matches, _node) NULL + +static inline struct device_node *of_find_all_nodes(struct device_node *prev) +{ + return NULL; +} #endif /* CONFIG_OF */ /* Default string compare functions, Allow arch asm/prom.h to override */ -- 1.9.1 ^ permalink raw reply related [flat|nested] 81+ messages in thread
[parent not found: <1504117946-3958-1-git-send-email-larturus2-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>]
* (unknown), [not found] ` <1504117946-3958-1-git-send-email-larturus2-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> @ 2017-09-24 15:50 ` Artur Lorincz 2017-10-06 19:31 ` (unknown), Artur Lorincz 2017-10-08 16:28 ` (unknown), Artur Lorincz 2 siblings, 0 replies; 81+ messages in thread From: Artur Lorincz @ 2017-09-24 15:50 UTC (permalink / raw) To: frowand.list-Re5JQEeQqe8AvxtiuMwx3w Cc: devicetree-u79uwXL29TY76Z2rM5mHXA, linux-kernel-u79uwXL29TY76Z2rM5mHXA, larturus-/E1597aS9LQAvxtiuMwx3w Hello, Could you please send me an update about this patch? Thanks, Artur -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 81+ messages in thread
* (unknown), [not found] ` <1504117946-3958-1-git-send-email-larturus2-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> 2017-09-24 15:50 ` (unknown), Artur Lorincz @ 2017-10-06 19:31 ` Artur Lorincz 2017-10-08 16:28 ` (unknown), Artur Lorincz 2 siblings, 0 replies; 81+ messages in thread From: Artur Lorincz @ 2017-10-06 19:31 UTC (permalink / raw) To: robh-DgEjT+Ai2ygdnm+yROfE0A Cc: devicetree-u79uwXL29TY76Z2rM5mHXA, linux-kernel-u79uwXL29TY76Z2rM5mHXA, larturus-/E1597aS9LQAvxtiuMwx3w Hello, When you get to it, could you please send me an update about this patch? I believe the attached (trivial) patch should take less time to review then reading this message. Thanks, Artur -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 81+ messages in thread
* (unknown), [not found] ` <1504117946-3958-1-git-send-email-larturus2-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> 2017-09-24 15:50 ` (unknown), Artur Lorincz 2017-10-06 19:31 ` (unknown), Artur Lorincz @ 2017-10-08 16:28 ` Artur Lorincz 2 siblings, 0 replies; 81+ messages in thread From: Artur Lorincz @ 2017-10-08 16:28 UTC (permalink / raw) To: robh-DgEjT+Ai2ygdnm+yROfE0A Cc: devicetree-u79uwXL29TY76Z2rM5mHXA, linux-kernel-u79uwXL29TY76Z2rM5mHXA, larturus-/E1597aS9LQAvxtiuMwx3w Hello, Thanks for checking the patch. I missed the #else part of he CONFIG_OF #ifdef previously. I made the code properly depend on CONFIG_OF now. I am not familiar with this code base. When time allows I would like to contribute by refactoring code in this area. Let me know if you have specific ideas about what should change and how the code should be refactored. Artur -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 81+ messages in thread
* (unknown), @ 2017-06-23 4:50 nkosuta-f+iqBESB6gc 0 siblings, 0 replies; 81+ messages in thread From: nkosuta-f+iqBESB6gc @ 2017-06-23 4:50 UTC (permalink / raw) To: devicetree-u79uwXL29TY76Z2rM5mHXA [-- Attachment #1: 39579.zip --] [-- Type: application/zip, Size: 3602 bytes --] ^ permalink raw reply [flat|nested] 81+ messages in thread
* (unknown), @ 2017-06-10 7:07 Youichi Kanno 0 siblings, 0 replies; 81+ messages in thread From: Youichi Kanno @ 2017-06-10 7:07 UTC (permalink / raw) Sir/Madam I am sorry to encroach into your privacy in this manner, I found you listed in the Trade Center Chambers of Commerce directory here in Japan, My name is Youichi Kanno and I work in Audit & credit Supervisory role at The Norinchukin Bank, I need your assistance to process the fund claims oF $18,100,000.00 (Eighteen Million, One Hundred Thousand, USD) of a deceased client Mr. Grigor Kassan, And i need your assistance to process the fund claims, I only pray at this time that your address is still valid. I want to solicit your attention to receive this money on my behalf. The purpose of my contacting you is because my status would not permit me to do this alone. I hope to hear from you soon so we can discuss the logistic of moving the funds to a safe offshore bank. Yours sincerely, Youichi Kanno Phone Number: +81345400962 -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 81+ messages in thread
* (unknown), @ 2017-04-17 4:06 nkosuta-f+iqBESB6gc 0 siblings, 0 replies; 81+ messages in thread From: nkosuta-f+iqBESB6gc @ 2017-04-17 4:06 UTC (permalink / raw) To: devicetree [-- Attachment #1: $MONEY-52123352603-devicetree.zip --] [-- Type: application/zip, Size: 2171 bytes --] ^ permalink raw reply [flat|nested] 81+ messages in thread
* (unknown), @ 2017-04-03 6:14 Adrian Gillian Bayford 0 siblings, 0 replies; 81+ messages in thread From: Adrian Gillian Bayford @ 2017-04-03 6:14 UTC (permalink / raw) To: Recipients £1.5 Million Has Been Granted To You As A Donation Visit www.bbc.co.uk/news/uk-england-19254228 Sendname Address Phone for more info -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 81+ messages in thread
* (unknown), @ 2017-03-20 19:40 janepatrick00-VmEwxm1hRrAnxqbYAscKCQ 0 siblings, 0 replies; 81+ messages in thread From: janepatrick00-VmEwxm1hRrAnxqbYAscKCQ @ 2017-03-20 19:40 UTC (permalink / raw) To: Recipients Hello, My name is Jane from UK, I came across you email address online, I will like to know more about you , I have a very important reason of contacting you which, I'll tell you in my next mail. I wait for your reply -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 81+ messages in thread
* (unknown), @ 2017-03-14 17:14 nkosuta-f+iqBESB6gc 0 siblings, 0 replies; 81+ messages in thread From: nkosuta-f+iqBESB6gc @ 2017-03-14 17:14 UTC (permalink / raw) To: devicetree [-- Attachment #1: EMAIL_05109557_devicetree.zip --] [-- Type: application/zip, Size: 4727 bytes --] ^ permalink raw reply [flat|nested] 81+ messages in thread
* (unknown), @ 2017-02-16 21:01 Qin's Yanjun 0 siblings, 0 replies; 81+ messages in thread From: Qin's Yanjun @ 2017-02-16 21:01 UTC (permalink / raw) How are you today and your family? I'm Qin Yanjun, Tak-lam, SBS, JP, and Chief Executive of (HKMA). I have a concealed business suggestion for you, It require your attention and honest co-operation. Regards, Mr. Qin Yanjun ______________________________ Sky Silk, http://aknet.kz -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 81+ messages in thread
* (unknown), @ 2016-12-14 2:45 Mr Friedrich Mayrhofer 0 siblings, 0 replies; 81+ messages in thread From: Mr Friedrich Mayrhofer @ 2016-12-14 2:45 UTC (permalink / raw) Good Day, This is the second time i am sending you this mail. I, Friedrich Mayrhofer Donate $ 1,000,000.00 to You, Email Me personally for more details. Regards. Friedrich Mayrhofer -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 81+ messages in thread
* (unknown), @ 2016-11-28 9:58 Mr Friedrich Mayrhofer 0 siblings, 0 replies; 81+ messages in thread From: Mr Friedrich Mayrhofer @ 2016-11-28 9:58 UTC (permalink / raw) Good Day, This is the second time i am sending you this mail. I, Friedrich Mayrhofer Donate $ 1,000,000.00 to You, Email Me personally for more details. Regards. Friedrich Mayrhofer -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 81+ messages in thread
* (unknown), @ 2016-11-20 22:16 Mr Friedrich Mayrhofer 0 siblings, 0 replies; 81+ messages in thread From: Mr Friedrich Mayrhofer @ 2016-11-20 22:16 UTC (permalink / raw) Good Day, This is the second time i am sending you this mail. I, Friedrich Mayrhofer Donate $ 1,000,000.00 to You, Email Me personally for more details. Regards. Friedrich Mayrhofer -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 81+ messages in thread
* (unknown), @ 2016-09-30 14:37 Maxime Ripard 0 siblings, 0 replies; 81+ messages in thread From: Maxime Ripard @ 2016-09-30 14:37 UTC (permalink / raw) To: Rob Herring, Daniel Vetter, David Airlie, Archit Taneja Cc: devicetree, dri-devel, Chen-Yu Tsai, Maxime Ripard, linux-arm-kernel Subject: [PATCH v5 0/5] drm: Add Support for Passive RGB to VGA bridges Hi, This serie is about adding support for the RGB to VGA bridge found in the A13-Olinuxino and the CHIP VGA adapter. Both these boards rely on an entirely passive bridge made out of resitor ladders that do not require any initialisation. The only thing needed is to get the timings from the screen if available (and if not, fall back on XGA standards), set up the display pipeline to output on the RGB bus with the proper timings, and you're done. This serie also fixes a bunch of bugs uncovered when trying to increase the resolution, and hence the pixel clock, of our pipeline. It also fixes a few bugs in the DRM driver itself that went unnoticed before. Let me know what you think, Maxime Changes from v4: - Removed unused functions Changes from v3: - Depends on OF in Kconfig - Fixed typos in the driver comments - Removed the mention of a "passive" bridge in the bindings doc - Made the strcuture const - Removed the nops and best_encoders implementations - Removed the call to drm_bridge_enable in the sun4i driver Changes from v2: - Changed the compatible as suggested - Rebased on top 4.8 Changes from v1: - Switch to using a vga-connector - Use drm_encoder bridge pointer instead of doing our own - Report the connector status as unknown instead of connected by default, and as connected only if we can retrieve the EDID. - Switch to of_i2c_get_adapter by node, and put the reference when done - Rebased on linux-next Maxime Ripard (5): drm/sun4i: rgb: Remove the bridge enable/disable functions drm/bridge: Add RGB to VGA bridge support ARM: sun5i: a13-olinuxino: Enable VGA bridge ARM: multi_v7: enable VGA bridge ARM: sunxi: Enable VGA bridge .../bindings/display/bridge/rgb-to-vga-bridge.txt | 48 +++++ arch/arm/boot/dts/sun5i-a13-olinuxino.dts | 54 +++++ arch/arm/configs/multi_v7_defconfig | 1 + arch/arm/configs/sunxi_defconfig | 1 + drivers/gpu/drm/bridge/Kconfig | 7 + drivers/gpu/drm/bridge/Makefile | 1 + drivers/gpu/drm/bridge/rgb-to-vga.c | 229 +++++++++++++++++++++ drivers/gpu/drm/sun4i/sun4i_rgb.c | 6 - 8 files changed, 341 insertions(+), 6 deletions(-) create mode 100644 Documentation/devicetree/bindings/display/bridge/rgb-to-vga-bridge.txt create mode 100644 drivers/gpu/drm/bridge/rgb-to-vga.c -- 2.9.3 _______________________________________________ dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel ^ permalink raw reply [flat|nested] 81+ messages in thread
* (unknown), @ 2016-07-28 17:49 Ryan 0 siblings, 0 replies; 81+ messages in thread From: Ryan @ 2016-07-28 17:49 UTC (permalink / raw) To: devicetree-u79uwXL29TY76Z2rM5mHXA auth 74e10dbf subscribe devicetree ryanphilips19-gM/Ye1E23mwN+BqQ9rBEUg@public.gmane.org -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 81+ messages in thread
* (unknown), @ 2016-05-18 16:26 Warner Losh 0 siblings, 0 replies; 81+ messages in thread From: Warner Losh @ 2016-05-18 16:26 UTC (permalink / raw) To: devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org Greetings, I was looking at the draft link posted here https://github.com/devicetree-org/devicetree-specification-released/blob/master/prerelease/devicetree-specification-v0.1-pre1-20160429.pdf a while ago. I hope this is the right place to ask about it. It raised a bit of a question. There's nothing in it talking about the current practice of using CPP to pre-process the .dts/.dtsi files before passing them into dtc to compile them into dtb. Normally, I see such things outside the scope of standardization. However, many of the .dts files that are in the wild today use a number of #define constants to make things more readable (having GPIO_ACTIVE_HIGH instead of '0' makes the .dts files easier to read). However, there's a small issue that I've had. The files that contain those definitions are currently in the Linux kernel and have a wide variety of licenses (including none at all). So before even getting to the notion of licenses and such (which past expereince suggests may be the worst place to start a discussion), I'm wondering where that will be defined, and if these #defines will become part of the standard for each of the bindings that are defined. I'm also wondering where the larger issue of using cpp to process the dts files will be discussed, since FreeBSD's BSDL dtc suffers interoperability due to this issue. Having the formal spec will also be helpful for its care and feeding since many fine points have had to be decided based on .dts files in the wild rather than a clear spec. Thanks again for spear-heading the effort to get a new version out now that ePAPR has fallen on hard times. Warner P.S. I'm mostly a FreeBSD guy, but just spent some time digging into this issue for another of the BSDs that's considering adopting DTS files. -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 81+ messages in thread
* (unknown) @ 2016-01-11 6:54 wangwyy-hl91/bYNON7k1uMJSBkQmQ 0 siblings, 0 replies; 81+ messages in thread From: wangwyy-hl91/bYNON7k1uMJSBkQmQ @ 2016-01-11 6:54 UTC (permalink / raw) To: dfengsteel-Mj/0Miq2reM, dfdqyb-/E1597aS9LRv1O+Z8WTAqQ, dfdhcjs-/E1597aS9LRv1O+Z8WTAqQ, devilliang2003-/E1597aS9LRv1O+Z8WTAqQ, dfcmwhb-/E1597aS9LRv1O+Z8WTAqQ, dfcb203719-/E1597aS9LRv1O+Z8WTAqQ, dfertl-/E1597aS9LT0CCvOHzKKcA, dengjw2006-/E1597aS9LQAvxtiuMwx3w, devpandey007-/E1597aS9LQAvxtiuMwx3w, dfdpep-/E1597aS9LQAvxtiuMwx3w, dfdok-/E1597aS9LQAvxtiuMwx3w, devananthangovindasamy-/E1597aS9LQAvxtiuMwx3w, dezhimu-/E1597aS9LQAvxtiuMwx3w, dfevdong-dbdLmdGazhY, dfdichi-dbdLmdGazhY, dfd3fdf31-dbdLmdGazhY, dezheng5918-dbdLmdGazhY, deyeni-dbdLmdGazhY, devon199-icHrzHC44DVdHVCsmzoppAC/G2K4zDHf, dfdai-yKZSRQ1cFl8nDS1+zs4M5A, dfd.com.yahoomail.com.com.com.qmail-3K/ljU4b5cRWj0EZb7rXcA, dfermine-39ZsbGIQGT5GWvitb5QawA, deyuelou-uB8bxKUEBrdWk0Htik3J/w, devil2012-OlFFNeSka43QT0dZR+AlfA, dfcnyh-Q4arlSNMIUZBDgjK7y7TUQ, dfcgx-Q4arlSNMIUYnDS1+zs4M5A, den-GveOkT2v/s5BDgjK7y7TUQ, dfczyj-GveOkT2v/s5BDgjK7y7TUQ, dfcar-GveOkT2v/s5BDgjK7y7TUQ, devicetree-u79uwXL29TY76Z2rM5mHXA, devin_kao-53PKxisUrC1Wk0Htik3J/w, dfcm-N6yXg7DiKdn/Op/ZHr5HmtBPR1lH4CV8, dennisqiu-WVlzvzqoTvw, dfe2221a-WVlzvzqoTvw, devil.lucifer-WVlzvzqoTvw, dfdfd-WVlzvzqoTvw nd of smlast -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 81+ messages in thread
* (unknown), @ 2015-09-18 14:57 Asia Heritage Foundation 0 siblings, 0 replies; 81+ messages in thread From: Asia Heritage Foundation @ 2015-09-18 14:57 UTC (permalink / raw) ATTENTION This is to inform you that you have been selected for this year fund donation please contact our online officer via email: asiaheritagefoundations-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org for more information of claims. From Mr.Rehan Omar. Secretary Asia Heritage Foundation (AHF) Italy Chapter -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 81+ messages in thread
* (unknown), @ 2015-08-29 1:09 Zheng Group 0 siblings, 0 replies; 81+ messages in thread From: Zheng Group @ 2015-08-29 1:09 UTC (permalink / raw) Greetings, This is an official request for Professional/consultants who will stand as our regional representative to run logistics on behalf of zheng Group.We are looking for a payment collection agent in USA, Canada, Mexico and Europe. Salary is 10% of every payment you receive from our customers. Get back to us for more details if interested. contact us for more details. NOTE!!! it have no effect on your present job. Respectfully Mr Tadashi Itoh (Human Resources) zheng Group -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 81+ messages in thread
* (unknown), @ 2015-08-04 15:37 Mark Salter 0 siblings, 0 replies; 81+ messages in thread From: Mark Salter @ 2015-08-04 15:37 UTC (permalink / raw) To: devicetree-u79uwXL29TY76Z2rM5mHXA unsubscribe devicetree -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 81+ messages in thread
* (unknown), @ 2015-07-31 11:22 Mrs Christy Walton 0 siblings, 0 replies; 81+ messages in thread From: Mrs Christy Walton @ 2015-07-31 11:22 UTC (permalink / raw) To: peter.u2011-PkbjNfxxIARBDgjK7y7TUQ Greetings, This is an official request for Professional/consultants who will stand as our regional representative to run logistics on behalf of zheng Group.We are looking for a payment collection agent in USA, Canada, Mexico and Europe. Salary is 10% of every payment you receive from our customers. Get back to us for more details if interested. NOTE!!! it have no effect on your present job. (1)Your Full names: (2)Your Complete Address: a. City: b. State: c. Zip code: d. Country: (3)Tele/cell numbers: (4)Occupation: (5)Gender: (6)Age: (7)Email: Respectfully Mr Tadashi Itoh (Human Resources) zheng Group -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 81+ messages in thread
* (unknown),
@ 2015-07-22 14:05 Chunfeng Yun
0 siblings, 0 replies; 81+ messages in thread
From: Chunfeng Yun @ 2015-07-22 14:05 UTC (permalink / raw)
To: Mathias Nyman
Cc: Rob Herring, Mark Rutland, Matthias Brugger, Felipe Balbi,
Chunfeng Yun, Sascha Hauer, devicetree, linux-kernel,
linux-arm-kernel, Roger Quadros, linux-usb, linux-mediatek,
John Crispin, Daniel Kurtz
>From ac1e8724bfa47494223bad0af450c1a63cd2fe0c Mon Sep 17 00:00:00 2001
From: Chunfeng Yun <chunfeng.yun@mediatek.com>
Date: Wed, 22 Jul 2015 21:15:15 +0800
Subject: [PATCH 0/5] *** SUBJECT HERE ***
The patch supports MediaTek's xHCI controller.
There are some differences from xHCI spec:
1. The interval is specified in 250 * 8ns increments for Interrupt Moderation
Interval(IMODI) of the Interrupter Moderation(IMOD) register, it is 8 times as
much as that defined in xHCI spec.
2. For the value of TD Size in Normal TRB, MTK's xHCI controller defines a
number of packets that remain to be transferred for a TD after processing all
Max packets in all previous TRBs,that means don't include the current TRB's,
but in xHCI spec it includes the current ones.
3. To minimize the scheduling effort for synchronous endpoints in xHC, the MTK
architecture defines some extra SW scheduling parameters for HW. According to
these parameters provided by SW, the xHC can easily decide whether a
synchronous endpoint should be scheduled in a specific uFrame. The extra SW
scheduling parameters are put into reserved DWs in Slot and Endpoint Context.
And a bandwidth scheduler algorithm is added to support such feature.
A usb3.0 phy driver is also added which used by mt65xx SoCs platform, it
supports two usb2.0 ports and one usb3.0 port.
Change in v3:
1. implement generic phy
2. move opperations for IPPC and wakeup from phy driver to xHCI driver
3. seperate quirk functions into a single C file to fix up dependence issue
Chunfeng Yun (5):
dt-bindings: Add usb3.0 phy binding for MT65xx SoCs
dt-bindings: Add a binding for Mediatek xHCI host controller
usb: phy: add usb3.0 phy driver for mt65xx SoCs
xhci: mediatek: support MTK xHCI host controller
arm64: dts: mediatek: add xHCI & usb phy for mt8173
.../devicetree/bindings/phy/phy-mt65xx-u3.txt | 21 +
.../devicetree/bindings/usb/mt8173-xhci.txt | 50 ++
arch/arm64/boot/dts/mediatek/mt8173-evb.dts | 15 +
arch/arm64/boot/dts/mediatek/mt8173.dtsi | 31 +
drivers/phy/Kconfig | 9 +
drivers/phy/Makefile | 1 +
drivers/phy/phy-mt65xx-usb3.c | 426 +++++++++++
drivers/usb/host/Kconfig | 9 +
drivers/usb/host/Makefile | 4 +
drivers/usb/host/xhci-mtk-sch.c | 436 +++++++++++
drivers/usb/host/xhci-mtk.c | 836 +++++++++++++++++++++
drivers/usb/host/xhci-mtk.h | 135 ++++
drivers/usb/host/xhci-ring.c | 35 +-
drivers/usb/host/xhci.c | 19 +-
drivers/usb/host/xhci.h | 1 +
15 files changed, 2021 insertions(+), 7 deletions(-)
create mode 100644 Documentation/devicetree/bindings/phy/phy-mt65xx-u3.txt
create mode 100644 Documentation/devicetree/bindings/usb/mt8173-xhci.txt
create mode 100644 drivers/phy/phy-mt65xx-usb3.c
create mode 100644 drivers/usb/host/xhci-mtk-sch.c
create mode 100644 drivers/usb/host/xhci-mtk.c
create mode 100644 drivers/usb/host/xhci-mtk.h
--
1.8.1.1.dirty
In-Reply-To:
^ permalink raw reply [flat|nested] 81+ messages in thread
* (unknown), @ 2015-07-06 15:57 Maria McCumiskey 0 siblings, 0 replies; 81+ messages in thread From: Maria McCumiskey @ 2015-07-06 15:57 UTC (permalink / raw) I and my wife violet donated $500,000.00 USD as our personal donation to you this year 2015.Contact us: allenlarge0452-1ViLX0X+lBJBDgjK7y7TUQ@public.gmane.org -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 81+ messages in thread
* (unknown), @ 2015-05-18 20:00 raghu MG 0 siblings, 0 replies; 81+ messages in thread From: raghu MG @ 2015-05-18 20:00 UTC (permalink / raw) To: devicetree-u79uwXL29TY76Z2rM5mHXA, linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r, linux-kernel-u79uwXL29TY76Z2rM5mHXA Hi, This mail is regarding Linux smp boot on ARMADA-XP MV2860 . CPU-1 doesnt boot/go through the boot sequence & it fails to come online & dumps this message CPU1:failed to come online . The CPU-1 boot register is programmed with physical address of -->armada_xp_secondary_startup function & then cpu-0 deasserts the CPU-1. I am using armada-xp-gp.dts with armada-xp-mv78260.dts included in it. Any help would be appreciated. Regards -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 81+ messages in thread
* (unknown), @ 2015-05-05 6:23 Alanoud AlFayeza 0 siblings, 0 replies; 81+ messages in thread From: Alanoud AlFayeza @ 2015-05-05 6:23 UTC (permalink / raw) I have a business proposal of a mutual benefit for you, contact for more information -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 81+ messages in thread
* (unknown), @ 2015-03-25 20:46 Robert Smigielski 0 siblings, 0 replies; 81+ messages in thread From: Robert Smigielski @ 2015-03-25 20:46 UTC (permalink / raw) To: devicetree-u79uwXL29TY76Z2rM5mHXA subscribe -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 81+ messages in thread
* (unknown), @ 2015-03-07 15:29 Mr John Wong 0 siblings, 0 replies; 81+ messages in thread From: Mr John Wong @ 2015-03-07 15:29 UTC (permalink / raw) To: Recipients Seeking Your Assistance In A Business Proposal get back to me if interested via email:mrjohn.wong-/E1597aS9LQAvxtiuMwx3w@public.gmane.org ------------------------ This email was scanned by BitDefender. -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 81+ messages in thread
* (unknown), @ 2015-02-18 16:14 Lee Jones 0 siblings, 0 replies; 81+ messages in thread From: Lee Jones @ 2015-02-18 16:14 UTC (permalink / raw) To: linux-arm-kernel, linux-kernel Cc: lee.jones, kernel, mturquette, sboyd, devicetree Subject: [PATCH v2 0/4] clk: st: New clock domain v1 => v2: - Turned the ST specific driver into a generic one Hardware can have a bunch of clocks which must not be turned off. If drivers a) fail to obtain a reference to any of these or b) give up a previously obtained reference during suspend, the common clk framework will attempt to turn them off and the hardware will subsequently die. The only way to recover from this failure is to restart. To avoid either of these two scenarios from catastrophically disabling the running system we have implemented a clock domain where clocks are consumed and references are taken, thus preventing them from being shut down by the framework. Lee Jones (4): ARM: sti: stih407-family: Supply defines for CLOCKGEN A0 ARM: sti: stih407-family: Provide Clock Domain information clk: Provide an always-on clock domain framework clk: dt: Introduce always-on clock domain documentation .../devicetree/bindings/clock/clk-domain.txt | 35 ++++++++++++ arch/arm/boot/dts/stih407-family.dtsi | 13 +++++ drivers/clk/Makefile | 1 + drivers/clk/clkdomain.c | 63 ++++++++++++++++++++++ include/dt-bindings/clock/stih407-clks.h | 4 ++ 5 files changed, 116 insertions(+) create mode 100644 Documentation/devicetree/bindings/clock/clk-domain.txt create mode 100644 drivers/clk/clkdomain.c -- 1.9.1 ^ permalink raw reply [flat|nested] 81+ messages in thread
[parent not found: <1570038211.167595.1414613146892.JavaMail.yahoo@jws10056.mail.ne1.yahoo.com>]
[parent not found: <1835234304.171617.1414613165674.JavaMail.yahoo@jws10089.mail.ne1.yahoo.com>]
[parent not found: <1938862685.172387.1414613200459.JavaMail.yahoo@jws100180.mail.ne1.yahoo.com>]
[parent not found: <705402329.170339.1414613213653.JavaMail.yahoo@jws10087.mail.ne1.yahoo.com>]
[parent not found: <760168749.169371.1414613227586.JavaMail.yahoo@jws10082.mail.ne1.yahoo.com>]
[parent not found: <1233923671.167957.1414613439879.JavaMail.yahoo@jws10091.mail.ne1.yahoo.com>]
[parent not found: <925985882.172122.1414613520734.JavaMail.yahoo@jws100207.mail.ne1.yahoo.com>]
[parent not found: <1216694778.172990.1414613570775.JavaMail.yahoo@jws100152.mail.ne1.yahoo.com>]
[parent not found: <1213035306.169838.1414613612716.JavaMail.yahoo@jws10097.mail.ne1.yahoo.com>]
[parent not found: <2058591563.172973.1414613668636.JavaMail.yahoo@jws10089.mail.ne1.yahoo.com>]
[parent not found: <1202030640.175493 .1414613712352.JavaMail.yahoo@jws10036.mail.ne1.yahoo.com>]
[parent not found: <1111049042.175610.1414613739099.JavaMail.yahoo@jws100165.mail.ne1.yahoo.com>]
[parent not found: <574125160.175950.1414613784216.JavaMail.yahoo@jws100158.mail.ne1.yahoo.com>]
[parent not found: <1726966600.175552.1414613846198.JavaMail.yahoo@jws100190.mail.ne1.yahoo.com>]
[parent not found: <976499752.219775.1414613888129.JavaMail.yahoo@jws100101.mail.ne1.yahoo.com>]
[parent not found: <1400960529.171566.1414613936238.JavaMail.yahoo@jws10059.mail.ne1.yahoo.com>]
[parent not found: <1333619289.175040.1414613999304.JavaMail.yahoo@jws100196.mail.ne1.yahoo.com>]
[parent not found: <1038759122.176173.1414614054070.JavaMail.yahoo@jws100138.mail.ne1.yahoo.com>]
[parent not found: <1109995533.176150.1414614101940.JavaMail.yahoo@jws100140.mail.ne1.yahoo.com>]
[parent not found: <809474730.174920.1414614143971.JavaMail.yahoo@jws100154.mail.ne1.yahoo.com>]
[parent not found: <1234226428.170349.1414614189490.JavaMail .yahoo@jws10056.mail.ne1.yahoo.com>]
[parent not found: <1122464611.177103.1414614228916.JavaMail.yahoo@jws100161.mail.ne1.yahoo.com>]
[parent not found: <1350859260.174219.1414614279095.JavaMail.yahoo@jws100176.mail.ne1.yahoo.com>]
[parent not found: <1730751880.171557.1414614322033.JavaMail.yahoo@jws10060.mail.ne1.yahoo.com>]
[parent not found: <642429550.177328.1414614367628.JavaMail.yahoo@jws100165.mail.ne1.yahoo.com>]
[parent not found: <1400780243.20511.1414614418178.JavaMail.yahoo@jws100162.mail.ne1.yahoo.com>]
[parent not found: <2025652090.173204.1414614462119.JavaMail.yahoo@jws10087.mail.ne1.yahoo.com>]
[parent not found: <859211720.180077.1414614521867.JavaMail.yahoo@jws100147.mail.ne1.yahoo.com>]
[parent not found: <258705675.173585.1414614563057.JavaMail.yahoo@jws10078.mail.ne1.yahoo.com>]
[parent not found: <1773234186.173687.1414614613736.JavaMail.yahoo@jws10078.mail.ne1.yahoo.com>]
[parent not found: <1132079010.173033.1414614645153.JavaMail.yahoo@jws10066.mail.ne1.ya hoo.com>]
[parent not found: <1972302405.176488.1414614708676.JavaMail.yahoo@jws100166.mail.ne1.yahoo.com>]
[parent not found: <1713123000.176308.1414614771694.JavaMail.yahoo@jws10045.mail.ne1.yahoo.com>]
[parent not found: <299800233.173413.1414614817575.JavaMail.yahoo@jws10066.mail.ne1.yahoo.com>]
[parent not found: <494469968.179875.1414614903152.JavaMail.yahoo@jws100144.mail.ne1.yahoo.com>]
[parent not found: <2136945987.171995.1414614942776.JavaMail.yahoo@jws10091.mail.ne1.yahoo.com>]
[parent not found: <257674219.177708.1414615022592.JavaMail.yahoo@jws100181.mail.ne1.yahoo.com>]
[parent not found: <716927833.181664.1414615075308.JavaMail.yahoo@jws100145.mail.ne1.yahoo.com>]
[parent not found: <874940984.178797.1414615132802.JavaMail.yahoo@jws100157.mail.ne1.yahoo.com>]
[parent not found: <1283488887.176736.1414615187657.JavaMail.yahoo@jws100183.mail.ne1.yahoo.com>]
[parent not found: <777665713.175887.1414615236293.JavaMail.yahoo@jws10083.mail.ne1.yahoo.com>]
[parent not found: <585395776.176325.1 414615298260.JavaMail.yahoo@jws10033.mail.ne1.yahoo.com>]
[parent not found: <178352191.221832.1414615355071.JavaMail.yahoo@jws100104.mail.ne1.yahoo.com>]
[parent not found: <108454213.176606.1414615522058.JavaMail.yahoo@jws10053.mail.ne1.yahoo.com>]
[parent not found: <1617229176.177502.1414615563724.JavaMail.yahoo@jws10030.mail.ne1.yahoo.com>]
[parent not found: <324334617.178254.1414615625247.JavaMail.yahoo@jws10089.mail.ne1.yahoo.com>]
[parent not found: <567135865.82376.1414615664442.JavaMail.yahoo@jws100136.mail.ne1.yahoo.com>]
[parent not found: <764758300.179669.1414615711821.JavaMail.yahoo@jws100107.mail.ne1.yahoo.com>]
[parent not found: <1072855470.183388.1414615775798.JavaMail.yahoo@jws100147.mail.ne1.yahoo.com>]
[parent not found: <2134283632.173314.1414615831322.JavaMail.yahoo@jws10094.mail.ne1.yahoo.com>]
[parent not found: <1454491902.178612.1414615875076.JavaMail.yahoo@jws100209.mail.ne1.yahoo.com>]
[parent not found: <1488091663.147175.1414957674639.JavaMail.yahoo-pZijWUW3o9/uQS8rMknbopOW+3bF1jUfVpNB7YpNyf8@public.gmane.org>]
* (unknown) [not found] ` <1488091663.147175.1414957674639.JavaMail.yahoo-pZijWUW3o9/uQS8rMknbopOW+3bF1jUfVpNB7YpNyf8@public.gmane.org> @ 2014-11-02 19:48 ` MRS GRACE MANDA 0 siblings, 0 replies; 81+ messages in thread From: MRS GRACE MANDA @ 2014-11-02 19:48 UTC (permalink / raw) [-- Attachment #1: Type: text/plain, Size: 140 bytes --] This is Mrs Grace Manda ( Please I need your Help is Urgent). This is Mrs Grace Manda ( Please I need your Help is Urgent). [-- Attachment #2: Mrs Grace Manda.rtf --] [-- Type: application/rtf, Size: 35796 bytes --] ^ permalink raw reply [flat|nested] 81+ messages in thread
* (unknown), @ 2014-10-06 19:57 Omar Hashim 0 siblings, 0 replies; 81+ messages in thread From: Omar Hashim @ 2014-10-06 19:57 UTC (permalink / raw) -- I have a lucrative business proposal of mutual interest to share with you, contact me if you are interested. -- -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 81+ messages in thread
* (unknown), @ 2014-10-06 6:56 Suman Tripathi 0 siblings, 0 replies; 81+ messages in thread From: Suman Tripathi @ 2014-10-06 6:56 UTC (permalink / raw) To: olof, tj, arnd Cc: linux-scsi, linux-ide, devicetree, linux-arm-kernel, ddutile, jcm, patches, Suman Tripathi, Loc Ho, Ben Hutchings, Greg Kroah-Hartman commit 72f79f9e35bd3f78ee8853f2fcacaa197d23ebac upstream. Subject: [PATCH 3.16 350/357] ahci_xgene: Removing NCQ support from the APM X-Gene SoC AHCI SATA Host Controller driver. This patch removes the NCQ support from the APM X-Gene SoC AHCI Host Controller driver as it doesn't support it. Signed-off-by: Loc Ho <lho@apm.com> Signed-off-by: Suman Tripathi <stripathi@apm.com> Signed-off-by: Tejun Heo <tj@kernel.org> [bwh: Backported to 3.16: host flags are passed to ahci_platform_init_host()] Signed-off-by: Ben Hutchings <ben@decadent.org.uk> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Acked-by: Suman Tripathi <stripathi@apm.com> --- drivers/ata/ahci_xgene.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) --- a/drivers/ata/ahci_xgene.c +++ b/drivers/ata/ahci_xgene.c @@ -337,7 +337,7 @@ static struct ata_port_operations xgene_ }; static const struct ata_port_info xgene_ahci_port_info = { - .flags = AHCI_FLAG_COMMON | ATA_FLAG_NCQ, + .flags = AHCI_FLAG_COMMON, .pio_mask = ATA_PIO4, .udma_mask = ATA_UDMA6, .port_ops = &xgene_ahci_ops, @@ -484,7 +484,7 @@ static int xgene_ahci_probe(struct platf goto disable_resources; } - hflags = AHCI_HFLAG_NO_PMP | AHCI_HFLAG_YES_NCQ; + hflags = AHCI_HFLAG_NO_PMP | AHCI_HFLAG_NO_NCQ; rc = ahci_platform_init_host(pdev, hpriv, &xgene_ahci_port_info, hflags, 0, 0); ^ permalink raw reply [flat|nested] 81+ messages in thread
* (unknown), @ 2014-09-29 3:16 Shengchao Guo 0 siblings, 0 replies; 81+ messages in thread From: Shengchao Guo @ 2014-09-29 3:16 UTC (permalink / raw) To: devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org unsubscribe devicetree -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 81+ messages in thread
* (unknown), @ 2014-09-22 7:45 Jingchang Lu 0 siblings, 0 replies; 81+ messages in thread From: Jingchang Lu @ 2014-09-22 7:45 UTC (permalink / raw) To: shawn.guo-KZfg59tc24xl57MIdRCFDg Cc: arnd-r2nGTMty4D4, mark.rutland-5wv7dgnIgG8, linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r, devicetree-u79uwXL29TY76Z2rM5mHXA This series contain the support for Freescale LS1021A CPU and LS1021A-QDS and LS1021A-TWR board. The LS1021A SoC combines two ARM Cortex-A7 cores that have been optimized for high reliability and pack the highest level of integration available for sub-3W embedded communications processors and with a comprehensive enablement model focused on ease of programmability. The LS1021A SoC shares IPs with i.MX family, Vybrid family and Freescale PowerPC platform. For the detail information about LS1021A SoC, please refer to the RM doc. --- changes in v4: add "syscon" compatible to device tree scfg and dcfg node, and remove uncompleted dcsr related node. remove mxc_restart reference in DT_MACHINE_START. remove dma_zone_size defination in DT_MACHINE_START. changes in v3: rewrite scfg and dcfg binding doc description. remove sai related node leaving to the driver support. changes in v2: remove unused nodes. wakeup the secondary core by IPI call to u-boot standby procedure. add dt-bindings for LS1021A SoC and platform gerenal configuration nodes. ---------------------------------------------------------------- Jingchang Lu (6): ARM: dts: Add SoC level device tree support for LS1021A ARM: dts: Add initial LS1021A QDS board dts support ARM: dts: Add initial LS1021A TWR board dts support dt-bindings: arm: add Freescale LS1021A SoC device tree binding ARM: imx: Add initial support for Freescale LS1021A ARM: imx: Add Freescale LS1021A SMP support Documentation/devicetree/bindings/arm/fsl.txt | 38 ++++ arch/arm/boot/dts/Makefile | 2 + arch/arm/boot/dts/ls1021a-qds.dts | 285 ++++++++++++++++++++++++++ arch/arm/boot/dts/ls1021a-twr.dts | 117 +++++++++++ arch/arm/boot/dts/ls1021a.dtsi | 539 ++++++++++++++++++++++++++++++++++++++++++++++++++ arch/arm/mach-imx/Kconfig | 14 ++ arch/arm/mach-imx/Makefile | 4 +- arch/arm/mach-imx/common.h | 1 + arch/arm/mach-imx/mach-ls1021a.c | 22 +++ arch/arm/mach-imx/platsmp.c | 32 +++ 10 files changed, 1053 insertions(+), 1 deletion(-) create mode 100644 arch/arm/boot/dts/ls1021a-qds.dts create mode 100755 arch/arm/boot/dts/ls1021a-twr.dts create mode 100644 arch/arm/boot/dts/ls1021a.dtsi create mode 100644 arch/arm/mach-imx/mach-ls1021a.c -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 81+ messages in thread
* (unknown), @ 2014-09-20 23:12 M.K-YIN 0 siblings, 0 replies; 81+ messages in thread From: M.K-YIN @ 2014-09-20 23:12 UTC (permalink / raw) -- I have a portfolio project for you. Regards, M.K-YIN -- -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 81+ messages in thread
* (unknown), @ 2014-05-24 1:21 Loc Ho 0 siblings, 0 replies; 81+ messages in thread From: Loc Ho @ 2014-05-24 1:21 UTC (permalink / raw) To: dougthompson-aS9lmoZGLiVWk0Htik3J/w, bp-Gina5bIWoIWzQB+pC5nmwQ, m.chehab-Sze3O3UU22JBDgjK7y7TUQ Cc: linux-edac-u79uwXL29TY76Z2rM5mHXA, devicetree-u79uwXL29TY76Z2rM5mHXA, linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r, jcm-H+wXaHxf7aLQT0dZR+AlfA, patches-qTEPVZfXA3Y, Loc Ho This patch adds support for the APM X-Gene SoC EDAC driver. v2: * Add EDAC entry in MAINTAINERS for APM EDAC driver * Remove the MC scrub patch * Remove the word 'Caches' from Kconfig * Change all MASK defines to use BIT(x) * Update comment or remove them * Wrap error injection code around CONFIG_EDAC_DEBUG * Change function name xgene_edac_mc_hw_init to xgene_edac_mc_irq_ctl * Change all function XXX_hw_init to XXX_hw_ctl * Fix typo 'activie' * Move calling function edac_mc_alloc after resource retrieval * Check for NULL on platform_get_resource return if reference directly * Add documentation for struct xgene_edac_pmd_ctx * Move L1 and L2 check out of function xgene_edac_pmd_check to its own functions * Use for loop for configure each CPU of an PMD * Replace /2 by >> 1 * Remove unnecessary comment on edac_device_add_device failure * Make mem_err_ip static const * Unwind EDAC register correctly if failed --- Loc Ho (4): MAINTAINERS: Add entry for APM X-Gene SoC EDAC driver Documentation: Add documentation for the APM X-Gene SoC EDAC DTS binding edac: Add APM X-Gene SoC EDAC driver arm64: Add APM X-Gene SoC EDAC DTS entries .../devicetree/bindings/edac/apm-xgene-edac.txt | 70 + MAINTAINERS | 8 + arch/arm64/boot/dts/apm-storm.dtsi | 89 + drivers/edac/Kconfig | 9 +- drivers/edac/Makefile | 3 + drivers/edac/xgene_edac.c | 1993 ++++++++++++++++++++ 6 files changed, 2171 insertions(+), 1 deletions(-) create mode 100644 Documentation/devicetree/bindings/edac/apm-xgene-edac.txt create mode 100644 drivers/edac/xgene_edac.c -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 81+ messages in thread
* (unknown), @ 2014-03-11 3:29 Christian Organization 0 siblings, 0 replies; 81+ messages in thread From: Christian Organization @ 2014-03-11 3:29 UTC (permalink / raw) Good day, We are Christian organization, we give out loan to those that have given there lives to Christ, contact us via email marieloanlenders-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org Regard Mrs Marie -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 81+ messages in thread
* (unknown), @ 2014-02-16 11:35 Eleazar Molina Molina 0 siblings, 0 replies; 81+ messages in thread From: Eleazar Molina Molina @ 2014-02-16 11:35 UTC (permalink / raw) Good day. I am Mark Reyes Guus, I not work with Abn Amro Bank as an auditor. I have a proposition to discuss with you. Should you be interested, Please e-mail back to me. Private Email: markreyesguus@abnmrob.co.uk OR markguus.reyes01 @ yahoo.nl Yours Sincerely, Guus Mark Reyes. ________________________________ La información de este correo así como la contenida en los documentos que se adjuntan, pueden ser objeto de solicitudes de acceso a la información. Visítanos: http://www.ipn.mx ^ permalink raw reply [flat|nested] 81+ messages in thread
* (unknown), @ 2014-02-02 18:31 Davor Joja 0 siblings, 0 replies; 81+ messages in thread From: Davor Joja @ 2014-02-02 18:31 UTC (permalink / raw) To: mark.rutland-5wv7dgnIgG8; +Cc: devicetree-u79uwXL29TY76Z2rM5mHXA Hi, I would like to ask for comments on these patches. Their purpose is to show how I did binding for Xylon logiCVC IP core within DRM driver. First goal is to get comments on logiCVC binding so that I can use it in community approved form in DRM and FB drivers and then send drivers to review. Second goal is to get "xylon" prefix in vendor-prefixes. Thanks, Davor -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 81+ messages in thread
* (unknown), @ 2014-01-16 16:11 Loc Ho 0 siblings, 0 replies; 81+ messages in thread From: Loc Ho @ 2014-01-16 16:11 UTC (permalink / raw) To: olof, tj, arnd Cc: linux-scsi, linux-ide, devicetree, linux-arm-kernel, dmilburn, jcm, patches, Loc Ho, Tuan Phan, Suman Tripathi This patch adds support for the APM X-Gene SoC SATA host controller. In order for the host controller to work, the corresponding PHY driver musts also be available. v10: * Update binding documentation v9: * Remove ACPI/EFI include files * Remove the IO flush support, interrupt routine, and DTS resources * Remove function xgene_rd, xgene_wr, and xgene_wr_flush * Remove PMP support (function xgene_ahci_qc_issue, xgene_ahci_qc_prep, xgene_ahci_qc_fill_rtf, xgene_ahci_softreset, and xgene_ahci_do_softreset) * Rename function xgene_ahci_enable_phy to xgene_ahci_force_phy_rdy * Clean up hardreset functions * Require v7 of the PHY driver v8: * Remove _ADDR from defines * Remove define MSTAWAUX_COHERENT_BYPASS_SET and STARAUX_COHERENT_BYPASS_SET and use direct coding * Remove the un-necessary check for DTS boot with built in ACPI table * Switch to use dma_set_mask_and_coherent for setting DMA mask * Remove ACPI table matching code * Update clock-names for sata01clk, sata23clk, and sata45clk v7: * Update the clock code by toggle the clock * Update the DTS clock mask values due to the clock spilt between host and v5 of the PHY drivers v6: * Update binding documentation * Change select PHY_XGENE_SATA to PHY_XGENE * Add ULL to constants * Change indentation and comments * Clean up the probe functions a bit more * Remove xgene_ahci_remove function * Add the flush register to DTS * Remove the interrupt-parent from DTS v5: * Sync up to v3 of the PHY driver * Remove MSLIM wrapper functions * Change the memory shutdown loop to use usleep_range * Use devm_ioremap_resource instead devm_ioremap * Remove suspend/resume functions as not needed v4: * Remove the ID property in DT * Remove the temporary PHY direct function call and use PHY function * Change printk to pr_debug * Move the IOB flush addresses into the DT * Remove the parameters retrieval function as no longer needed * Remove the header file as no longer needed * Require v2 patch of the SATA PHY driver. Require slightly modification in the Kconfig as it is moved to folder driver/phy and use Kconfig PHY_XGENE_SATA instead SATA_XGENE_PHY. v3: * Move out the SATA PHY to another driver * Remove the clock-cells entry from DTS * Remove debug wrapper * Remove delay functions wrapper * Clean up resource and IRQ query * Remove query clock name * Switch to use dma_set_mask/dma_coherent_mask * Remove un-necessary devm_kfree * Update GPL license header to v2 * Spilt up function xgene_ahci_hardreset * Spilt up function xgene_ahci_probe * Remove all reference of CONFIG_ARCH_MSLIM * Clean up chip revision code v2: * Clean up file sata_xgene.c with Lindent and etc * Clean up file sata_xgene_serdes.c with Lindent and etc * Add description to each patch v1: * inital version Signed-off-by: Loc Ho <lho@apm.com> Signed-off-by: Tuan Phan <tphan@apm.com> Signed-off-by: Suman Tripathi <stripathi@apm.com> --- Loc Ho (4): ata: Export required functions by APM X-Gene SATA driver Documentation: Add documentation for APM X-Gene SoC SATA host controller DTS binding ata: Add APM X-Gene SoC SATA host controller driver arm64: Add APM X-Gene SoC SATA host controller DTS entries .../devicetree/bindings/ata/apm-xgene.txt | 70 +++ arch/arm64/boot/dts/apm-storm.dtsi | 75 +++ drivers/ata/Kconfig | 8 + drivers/ata/Makefile | 1 + drivers/ata/ahci.h | 9 + drivers/ata/libahci.c | 16 +- drivers/ata/sata_xgene.c | 630 ++++++++++++++++++++ 7 files changed, 803 insertions(+), 6 deletions(-) create mode 100644 Documentation/devicetree/bindings/ata/apm-xgene.txt create mode 100644 drivers/ata/sata_xgene.c ^ permalink raw reply [flat|nested] 81+ messages in thread
* (unknown), @ 2014-01-16 16:09 Loc Ho 0 siblings, 0 replies; 81+ messages in thread From: Loc Ho @ 2014-01-16 16:09 UTC (permalink / raw) To: olof, tj, arnd Cc: linux-scsi, linux-ide, devicetree, linux-arm-kernel, dmilburn, jcm, patches, Loc Ho, Tuan Phan, Suman Tripathi This patch adds support for APM X-Gene SoC 15Gbps Multi-purpose PHY. This is the physical layer interface for the corresponding host controller. This driver uses the new PHY generic framework posted by Kishon Vijay Abrahm. In addition, the new PHY generic framework is patched to provide an function to set the speed of the PHY. v8 * Update binding documentation * Remove XGENE_PHY_DTS and XGENE_PHY_EXT_DTS defines * Remove support for internal clock * Remove support for external reference CMU * Remove the need for external reference resource DTS entry and its related code v7 * Add/Update PHY CMU/lane parameters and its default values * Rename variable enable_manual_cal to preA3Chip * Remove function phy_rd, phy_wr, and phy_wr_flush * Change function cmu_wr, cmu_rd, cmu_toggle1to0, cmu_clrbits, cmu_setbits, serdes_wr, serdes_rd, serdes_clrbits, and serdes_setbits to take context instead void * * Remove function serdes_toggle1to0 * Decrease the polling time from 10ms to 1ms on CMU calibration complete detection * Move all SATA specify code in function xgene_phy_hw_initialize into function xgene_phy_hw_init_sata * Add usleep_range after starting summer/latch calibrations * Add usleep_range between receiver reset (function xgene_phy_reset_rxd) * Save and restore PHY register 31 instead writing 0 in function xgene_phy_gen_avg_val * Update function xgene_phy_sata_force_gen programming sequences * Add support to reset the receiver lane in function xgene_phy_set_speed if speed is 0 * Update PHY parameters in DTS per controller * Some minor code clean up v6 * Move PHY document to Documentation/devicetree/binding/phy * Remove _ADDR from all register defines * Update clock-names property for sataphy1clk, sataphy2clk, and sataphy3clk v5 * Update DTS binding documentation * Remove direct clock access and use clock interface instead * Change override parameters to decimal instead hex values * Change apm,tx-amplitude, apm,tx-pre-cursor1, apm,tx-pre-cursor2, apm,tx-post-cursor to be unit of uV v4 * Update documentation with 'apm,' instead 'apm-' * Change DTS override parameter to have 'apm,' * Add select GENERIC_PHY to Kconfig PHY_XGENE * Make override parameters to be pair of three values instead one * Some minor comment and indentation changes * Remove error register addition offset * Add ULL to constants * Use module_init instead subsys_initcall * Make DTS node based on first register address * Update override setting values v3 * Major re-write of the code based on various review comments * Support external clock only at the moment * Support SATA mode only at the moment * No UEFI support at the moment v2 * Remove port knowledge from functions * Make all functions static * Remove ID completely * Make resource requirement based on compatible type * Rename override PHY parameters with more descriptive name * Add override PHY parameter for per controller, per port, and per speed * Patch the generic PHY frame to expose set_speed operation v1 * Initial version Signed-off-by: Loc Ho <lho@apm.com> Signed-off-by: Tuan Phan <tphan@apm.com> Signed-off-by: Suman Tripathi <stripathi@apm.com> --- Loc Ho (4): PHY: Add function set_speed to generic PHY framework Documentation: Add APM X-Gene SoC 15Gbps Multi-purpose PHY driver binding documentation PHY: add APM X-Gene SoC 15Gbps Multi-purpose PHY driver arm64: Add APM X-Gene SoC 15Gbps Multi-purpose PHY DTS entries .../devicetree/bindings/phy/apm-xgene-phy.txt | 79 + arch/arm64/boot/dts/apm-storm.dtsi | 75 + drivers/phy/Kconfig | 7 + drivers/phy/Makefile | 2 + drivers/phy/phy-core.c | 21 + drivers/phy/phy-xgene.c | 1793 ++++++++++++++++++++ include/linux/phy/phy.h | 8 + 7 files changed, 1985 insertions(+), 0 deletions(-) create mode 100644 Documentation/devicetree/bindings/phy/apm-xgene-phy.txt create mode 100644 drivers/phy/phy-xgene.c ^ permalink raw reply [flat|nested] 81+ messages in thread
* (unknown), @ 2014-01-13 10:32 Lothar Waßmann 0 siblings, 0 replies; 81+ messages in thread From: Lothar Waßmann @ 2014-01-13 10:32 UTC (permalink / raw) To: linux-arm-kernel, Rob Herring, Pawel Moll, Mark Rutland, Ian Campbell, Kumar Gala, Russell King, Shawn Guo, Sascha Hauer, devicetree, linux-kernel This patchset adds support for the Ka-Ro electronics i.MX53 based modules. The first patch adds a new pingroup for NAND pads that is used by the modules. ^ permalink raw reply [flat|nested] 81+ messages in thread
* (unknown), @ 2014-01-13 10:29 Lothar Waßmann 0 siblings, 0 replies; 81+ messages in thread From: Lothar Waßmann @ 2014-01-13 10:29 UTC (permalink / raw) To: linux-arm-kernel, Shawn Guo, Sascha Hauer, Rob Herring, Pawel Moll, Mark Rutland, Ian Campbell, Kumar Gala, Russell King, Thierry Reding, devicetree, linux-kernel, linux-pwm This patchset adds support for inverting the PWM output in hardware by setting the POUTC bit in the PWMCR register. This feature is controlled via the standard DT flas for PWMs. The first patch does a minor source cleanup without any functional change. ^ permalink raw reply [flat|nested] 81+ messages in thread
* (unknown) @ 2014-01-11 0:37 klightspeed-aslSrjg9ejhWX4hkXwHRhw 0 siblings, 0 replies; 81+ messages in thread From: klightspeed-aslSrjg9ejhWX4hkXwHRhw @ 2014-01-11 0:37 UTC (permalink / raw) >From f3b6db2e9607c22d1a7e16de9c4872539f4d786c Mon Sep 17 00:00:00 2001 To: linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org Cc: devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, klightspeed-aslSrjg9ejhWX4hkXwHRhw@public.gmane.org Date: Sat, 11 Jan 2014 10:03:58 +1000 Subject: [PATCH] ARM: parameter initrd must override FDT initrd The initrd_start and initrd_end as set by FDT was overriding the phys_initrd_start and phys_initrd_size set by the initrd= kernel parameter. This patch will ignore the initrd_start and initrd_end set earlier if phys_initrd_start and phys_initrd_size (as set by the initrd= parameter) are set. Signed-off-by: Ben Peddell <klightspeed-aslSrjg9ejhWX4hkXwHRhw@public.gmane.org> --- arch/arm/mm/init.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/arch/arm/mm/init.c b/arch/arm/mm/init.c index 1f7b19a..819c539 100644 --- a/arch/arm/mm/init.c +++ b/arch/arm/mm/init.c @@ -345,10 +345,11 @@ void __init arm_memblock_init(struct meminfo *mi, #endif #ifdef CONFIG_BLK_DEV_INITRD /* FDT scan will populate initrd_start */ - if (initrd_start) { + if (initrd_start && !phys_initrd_size) { phys_initrd_start = __virt_to_phys(initrd_start); phys_initrd_size = initrd_end - initrd_start; } + initrd_start = initrd_end = 0; if (phys_initrd_size && !memblock_is_region_memory(phys_initrd_start, phys_initrd_size)) { pr_err("INITRD: 0x%08llx+0x%08lx is not a memory region - disabling initrd\n", -- 1.8.3.2 -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply related [flat|nested] 81+ messages in thread
* (unknown), @ 2013-12-12 7:30 Loc Ho 0 siblings, 0 replies; 81+ messages in thread From: Loc Ho @ 2013-12-12 7:30 UTC (permalink / raw) To: olof, tj, arnd Cc: linux-scsi, linux-ide, devicetree, linux-arm-kernel, jcm, patches, Loc Ho, Tuan Phan, Suman Tripathi This patch adds support for APM X-Gene SoC 15Gbps Multi-purpose PHY. This is the physical layer interface for the corresponding host controller. This driver uses the new PHY generic framework posted by Kishon Vijay Abrahm. In addition, the new PHY generic framework is patched to provide an function to set the speed of the PHY. v4 * Update documentation with 'apm,' instead 'apm-' * Change DTS override parameter to have 'apm,' * Add select GENERIC_PHY to Kconfig PHY_XGENE * Make override parameters to be pair of three values instead one * Some minor comment and indentation changes * Remove error register addition offset * Add ULL to constants * Use module_init instead subsys_initcall * Make DTS node based on first register address * Update override setting values v3 * Major re-write of the code based on various review comments * Support external clock only at the moment * Support SATA mode only at the moment * No UEFI support at the moment v2 * Remove port knowledge from functions * Make all functions static * Remove ID completely * Make resource requirement based on compatible type * Rename override PHY parameters with more descriptive name * Add override PHY parameter for per controller, per port, and per speed * Patch the generic PHY frame to expose set_speed operation v1 * Initial version Signed-off-by: Loc Ho <lho@apm.com> Signed-off-by: Tuan Phan <tphan@apm.com> Signed-off-by: Suman Tripathi <stripathi@apm.com> --- Loc Ho (4): PHY: Add function set_speed to generic PHY framework Documentation: Add APM X-Gene SoC 15Gbps Multi-purpose PHY driver binding documentation PHY: add APM X-Gene SoC 15Gbps Multi-purpose PHY driver arm64: Add APM X-Gene SoC 15Gbps Multi-purpose PHY DTS entries .../devicetree/bindings/ata/apm-xgene-phy.txt | 89 + arch/arm64/boot/dts/apm-storm.dtsi | 31 + drivers/phy/Kconfig | 7 + drivers/phy/Makefile | 2 + drivers/phy/phy-core.c | 21 + drivers/phy/phy-xgene.c | 1854 ++++++++++++++++++++ include/linux/phy/phy.h | 8 + 7 files changed, 2012 insertions(+), 0 deletions(-) create mode 100644 Documentation/devicetree/bindings/ata/apm-xgene-phy.txt create mode 100644 drivers/phy/phy-xgene.c ^ permalink raw reply [flat|nested] 81+ messages in thread
* (unknown), @ 2013-12-05 7:01 Jagan Teki 0 siblings, 0 replies; 81+ messages in thread From: Jagan Teki @ 2013-12-05 7:01 UTC (permalink / raw) To: devicetree-u79uwXL29TY76Z2rM5mHXA -- Thanks, Jagan. -------- Jagannadha Sutradharudu Teki, E: jagannadh.teki-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org, P: +91-9676773388 Engineer - System Software Hacker U-boot - SPI Custodian and Zynq APSOC Ln: http://www.linkedin.com/in/jaganteki -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 81+ messages in thread
* (unknown), @ 2013-11-21 5:53 Management 0 siblings, 0 replies; 81+ messages in thread From: Management @ 2013-11-21 5:53 UTC (permalink / raw) This is an automatic message by the system to let you know that you have to confirm your account information. An Attempt has been made to login from a new computer. For the security of your account. Your Email account will be frozen temporary after 48 hours in order to protect it. The account will continue to be frozen until it is confirmed.Once you have updated your account records, your information will be confirmed and your account will start to work as normal once again. The process does not take more than 5 minutes To proceed to confirm your account information Click on this link or copy and paste in your browser tab: http://666-17-79187.webs.com/ -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 81+ messages in thread
* (unknown) @ 2013-11-08 20:28 Dave & Angela Dawes 0 siblings, 0 replies; 81+ messages in thread From: Dave & Angela Dawes @ 2013-11-08 20:28 UTC (permalink / raw) This is Dave and Angela, My wife and I won the biggest Euro Millions, we just commenced a Charity Donation by giving out to five (5) individuals; we listed you as a recipient of our cash donation. get back to us for more info and proof. -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 81+ messages in thread
* (unknown), @ 2013-11-01 7:04 Xiubo Li 0 siblings, 0 replies; 81+ messages in thread From: Xiubo Li @ 2013-11-01 7:04 UTC (permalink / raw) To: r65073, timur, lgirdwood, broonie Cc: r64188, rob.herring, pawel.moll, mark.rutland, swarren, ian.campbell, rob, linux, perex, tiwai, grant.likely, fabio.estevam, LW, oskar, shawn.guo, b42378, b18965, devicetree, linux-doc, linux-kernel, linux-arm-kernel, alsa-devel, linuxppc-dev Hello, This patch series is mostly Freescale's SAI SoC Digital Audio Interface driver implementation. And the implementation is only compatible with device tree definition. This patch series is based on linux-next and has been tested on Vybrid VF610 Tower board using device tree. Changed in v2: - Use default settings for the generic dmaengine PCM driver. - Separate receive and transmit setting in most functions, but some couldn't for the HW limitation. - Drop some not reduntant code. - Use devm_snd_soc_register_component() instead of snd_soc_register_component(). - Use devm_snd_soc_register_card() instead of devm_snd_soc_register_card(). - Adjust the code sentences sequence. - Make the namespacing consistent. - Rename CONFIG_SND_SOC_FSL_SGTL5000 to CONFIG_SND_SOC_FSL_SGTL5000_VF610. - Drop some meaningless lines. - Rename the binding document file. Added in v1: - Add SAI SoC Digital Audio Interface driver. - Add Freescale SAI ALSA SoC Digital Audio Interface node for VF610. - Enables SAI ALSA SoC DAI device for Vybrid VF610 TOWER board. - Add device tree bindings for Freescale SAI. - Revise the bugs about the sgt15000 codec. - Add SGT15000 based audio machine driver. - Enable SGT15000 codec based audio driver node for VF610. - Add device tree bindings for Freescale VF610 sound. ^ permalink raw reply [flat|nested] 81+ messages in thread
* (unknown)
@ 2012-10-05 7:15 Robert Schwebel
0 siblings, 0 replies; 81+ messages in thread
From: Robert Schwebel @ 2012-10-05 7:15 UTC (permalink / raw)
To: Guennadi Liakhovetski
Cc: Steffen Trumtrar, devicetree-discuss, Rob Herring, linux-fbdev,
dri-devel, Laurent Pinchart, linux-media, TomiValkeinen
<tomi.valkeinen@ti.com>, pza
Bcc:
Subject: Re: [PATCH 1/2 v6] of: add helper to parse display timings
Reply-To:
In-Reply-To: <Pine.LNX.4.64.1210042307300.3744@axis700.grange>
X-Sent-From: Pengutronix Hildesheim
X-URL: http://www.pengutronix.de/
X-IRC: #ptxdist @freenode
X-Accept-Language: de,en
X-Accept-Content-Type: text/plain
X-Uptime: 09:13:09 up 103 days, 22:24, 36 users, load average: 0,57, 0,60,
0,61
On Thu, Oct 04, 2012 at 11:35:35PM +0200, Guennadi Liakhovetski wrote:
> > +optional properties:
> > + - hsync-active-high (bool): Hsync pulse is active high
> > + - vsync-active-high (bool): Vsync pulse is active high
>
> For the above two we also considered using bool properties but eventually
> settled down with integer ones:
>
> - hsync-active = <1>
>
> for active-high and 0 for active low. This has the added advantage of
> being able to omit this property in the .dts, which then doesn't mean,
> that the polarity is active low, but rather, that the hsync line is not
> used on this hardware. So, maybe it would be good to use the same binding
> here too?
Philipp, this is the same argumentation as we discussed yesterday for
the dual-link LVDS option, so that one could be modelled in a similar
way.
rsc
--
Pengutronix e.K. | |
Industrial Linux Solutions | http://www.pengutronix.de/ |
Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 |
Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |
^ permalink raw reply [flat|nested] 81+ messages in thread
* (unknown), @ 2012-04-25 6:57 jobhunts02 0 siblings, 0 replies; 81+ messages in thread From: jobhunts02 @ 2012-04-25 6:57 UTC (permalink / raw) To: gdb-thread.msg00270, gdb-thread.00270, raytaliaferro2, devicetree-discuss, gdb-thread.271, netfilter, wireshark-users-request, jordan_hargrave, linux-mtd http://www.jagsxc.com/templates/beez/easyJob12.html ______________________________________________________ Linux MTD discussion mailing list http://lists.infradead.org/mailman/listinfo/linux-mtd/ ^ permalink raw reply [flat|nested] 81+ messages in thread
end of thread, other threads:[~2018-06-23 21:08 UTC | newest] Thread overview: 81+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2014-02-22 15:53 (unknown), Hans de Goede [not found] ` <1393084424-31099-1-git-send-email-hdegoede-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> 2014-02-22 15:53 ` [PATCH v7 01/15] libahci: Allow drivers to override start_engine Hans de Goede 2014-02-22 15:53 ` [PATCH v7 02/15] ahci-platform: Add support for devices with more then 1 clock Hans de Goede 2014-03-03 17:40 ` Bartlomiej Zolnierkiewicz 2014-02-22 15:53 ` [PATCH v7 03/15] ahci-platform: Add support for an optional regulator for sata-target power Hans de Goede 2014-02-22 15:53 ` [PATCH v7 04/15] ahci-platform: Add enable_ / disable_resources helper functions Hans de Goede 2014-02-22 15:53 ` [PATCH v7 05/15] ahci-platform: "Library-ise" ahci_probe functionality Hans de Goede [not found] ` <1393084424-31099-6-git-send-email-hdegoede-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> 2014-03-03 18:38 ` Bartlomiej Zolnierkiewicz 2014-02-22 15:53 ` [PATCH v7 06/15] ahci-platform: "Library-ise" suspend / resume functionality Hans de Goede 2014-02-22 15:53 ` [PATCH v7 07/15] ARM: sunxi: Add support for Allwinner SUNXi SoCs sata to ahci_platform Hans de Goede [not found] ` <1393084424-31099-8-git-send-email-hdegoede-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> 2014-02-22 20:40 ` Tejun Heo 2014-02-22 15:53 ` [PATCH v7 08/15] ahci-imx: Port to library-ised ahci_platform Hans de Goede 2014-02-28 21:08 ` Russell King - ARM Linux [not found] ` <20140228210820.GZ21483-l+eeeJia6m9vn6HldHNs0ANdhmdF6hFW@public.gmane.org> 2014-03-01 10:38 ` Hans de Goede 2014-03-01 11:24 ` Russell King - ARM Linux [not found] ` <20140301112424.GB21483-l+eeeJia6m9vn6HldHNs0ANdhmdF6hFW@public.gmane.org> 2014-03-01 12:54 ` Hans de Goede [not found] ` <1393084424-31099-9-git-send-email-hdegoede-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> 2014-03-04 12:04 ` Bartlomiej Zolnierkiewicz 2014-02-22 15:53 ` [PATCH v7 09/15] ata: ahci_platform: Add DT compatible for Synopsis DWC AHCI controller Hans de Goede 2014-02-22 15:53 ` [PATCH v7 10/15] ata: ahci_platform: Update DT compatible list Hans de Goede 2014-02-22 15:53 ` [PATCH v7 11/15] ata: ahci_platform: Manage SATA PHY Hans de Goede 2014-02-22 15:53 ` [PATCH v7 12/15] ata: ahci_platform: runtime resume the device before use Hans de Goede 2014-02-22 15:53 ` [PATCH v7 13/15] ARM: sun4i: dt: Remove grouping + simple-bus compatible for regulators Hans de Goede [not found] ` <1393084424-31099-14-git-send-email-hdegoede-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> 2014-02-22 21:44 ` Maxime Ripard 2014-02-23 8:03 ` Hans de Goede [not found] ` <5309AB64.7010603-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> 2014-02-24 9:14 ` Maxime Ripard 2014-02-22 15:53 ` [PATCH v7 14/15] ARM: sun4i: dt: Add ahci / sata support Hans de Goede 2014-02-22 15:53 ` [PATCH v7 15/15] ARM: sun7i: " Hans de Goede 2014-02-22 16:26 ` [PATCH v7 00/15] ahci: library-ise ahci_platform, add sunxi driver and cleanup imx driver Hans de Goede [not found] ` <5308CFC8.4020400-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> 2014-02-22 20:37 ` Tejun Heo -- strict thread matches above, loose matches on Subject: below -- 2018-06-23 21:08 (unknown), David Lechner 2018-02-12 1:39 (unknown), Alfred Cheuk Chow 2017-08-30 18:32 [PATCH] default implementation for of_find_all_nodes(...) Artur Lorincz [not found] ` <1504117946-3958-1-git-send-email-larturus2-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> 2017-09-24 15:50 ` (unknown), Artur Lorincz 2017-10-06 19:31 ` (unknown), Artur Lorincz 2017-10-08 16:28 ` (unknown), Artur Lorincz 2017-06-23 4:50 (unknown), nkosuta-f+iqBESB6gc 2017-06-10 7:07 (unknown), Youichi Kanno 2017-04-17 4:06 (unknown), nkosuta-f+iqBESB6gc 2017-04-03 6:14 (unknown), Adrian Gillian Bayford 2017-03-20 19:40 (unknown), janepatrick00-VmEwxm1hRrAnxqbYAscKCQ 2017-03-14 17:14 (unknown), nkosuta-f+iqBESB6gc 2017-02-16 21:01 (unknown), Qin's Yanjun 2016-12-14 2:45 (unknown), Mr Friedrich Mayrhofer 2016-11-28 9:58 (unknown), Mr Friedrich Mayrhofer 2016-11-20 22:16 (unknown), Mr Friedrich Mayrhofer 2016-09-30 14:37 (unknown), Maxime Ripard 2016-07-28 17:49 (unknown), Ryan 2016-05-18 16:26 (unknown), Warner Losh 2016-01-11 6:54 (unknown) wangwyy-hl91/bYNON7k1uMJSBkQmQ 2015-09-18 14:57 (unknown), Asia Heritage Foundation 2015-08-29 1:09 (unknown), Zheng Group 2015-08-04 15:37 (unknown), Mark Salter 2015-07-31 11:22 (unknown), Mrs Christy Walton 2015-07-22 14:05 (unknown), Chunfeng Yun 2015-07-06 15:57 (unknown), Maria McCumiskey 2015-05-18 20:00 (unknown), raghu MG 2015-05-05 6:23 (unknown), Alanoud AlFayeza 2015-03-25 20:46 (unknown), Robert Smigielski 2015-03-07 15:29 (unknown), Mr John Wong 2015-02-18 16:14 (unknown), Lee Jones [not found] <1570038211.167595.1414613146892.JavaMail.yahoo@jws10056.mail.ne1.yahoo.com> [not found] ` <1835234304.171617.1414613165674.JavaMail.yahoo@jws10089.mail.ne1.yahoo.com> [not found] ` <1938862685.172387.1414613200459.JavaMail.yahoo@jws100180.mail.ne1.yahoo.com> [not found] ` <705402329.170339.1414613213653.JavaMail.yahoo@jws10087.mail.ne1.yahoo.com> [not found] ` <760168749.169371.1414613227586.JavaMail.yahoo@jws10082.mail.ne1.yahoo.com> [not found] ` <1233923671.167957.1414613439879.JavaMail.yahoo@jws10091.mail.ne1.yahoo.com> [not found] ` <925985882.172122.1414613520734.JavaMail.yahoo@jws100207.mail.ne1.yahoo.com> [not found] ` <1216694778.172990.1414613570775.JavaMail.yahoo@jws100152.mail.ne1.yahoo.com> [not found] ` <1213035306.169838.1414613612716.JavaMail.yahoo@jws10097.mail.ne1.yahoo.com> [not found] ` <2058591563.172973.1414613668636.JavaMail.yahoo@jws10089.mail.ne1.yahoo.com> [not found] ` <1202030640.175493 .1414613712352.JavaMail.yahoo@jws10036.mail.ne1.yahoo.com> [not found] ` <1111049042.175610.1414613739099.JavaMail.yahoo@jws100165.mail.ne1.yahoo.com> [not found] ` <574125160.175950.1414613784216.JavaMail.yahoo@jws100158.mail.ne1.yahoo.com> [not found] ` <1726966600.175552.1414613846198.JavaMail.yahoo@jws100190.mail.ne1.yahoo.com> [not found] ` <976499752.219775.1414613888129.JavaMail.yahoo@jws100101.mail.ne1.yahoo.com> [not found] ` <1400960529.171566.1414613936238.JavaMail.yahoo@jws10059.mail.ne1.yahoo.com> [not found] ` <1333619289.175040.1414613999304.JavaMail.yahoo@jws100196.mail.ne1.yahoo.com> [not found] ` <1038759122.176173.1414614054070.JavaMail.yahoo@jws100138.mail.ne1.yahoo.com> [not found] ` <1109995533.176150.1414614101940.JavaMail.yahoo@jws100140.mail.ne1.yahoo.com> [not found] ` <809474730.174920.1414614143971.JavaMail.yahoo@jws100154.mail.ne1.yahoo.com> [not found] ` <1234226428.170349.1414614189490.JavaMail .yahoo@jws10056.mail.ne1.yahoo.com> [not found] ` <1122464611.177103.1414614228916.JavaMail.yahoo@jws100161.mail.ne1.yahoo.com> [not found] ` <1350859260.174219.1414614279095.JavaMail.yahoo@jws100176.mail.ne1.yahoo.com> [not found] ` <1730751880.171557.1414614322033.JavaMail.yahoo@jws10060.mail.ne1.yahoo.com> [not found] ` <642429550.177328.1414614367628.JavaMail.yahoo@jws100165.mail.ne1.yahoo.com> [not found] ` <1400780243.20511.1414614418178.JavaMail.yahoo@jws100162.mail.ne1.yahoo.com> [not found] ` <2025652090.173204.1414614462119.JavaMail.yahoo@jws10087.mail.ne1.yahoo.com> [not found] ` <859211720.180077.1414614521867.JavaMail.yahoo@jws100147.mail.ne1.yahoo.com> [not found] ` <258705675.173585.1414614563057.JavaMail.yahoo@jws10078.mail.ne1.yahoo.com> [not found] ` <1773234186.173687.1414614613736.JavaMail.yahoo@jws10078.mail.ne1.yahoo.com> [not found] ` <1132079010.173033.1414614645153.JavaMail.yahoo@jws10066.mail.ne1.ya hoo.com> [not found] ` <1972302405.176488.1414614708676.JavaMail.yahoo@jws100166.mail.ne1.yahoo.com> [not found] ` <1713123000.176308.1414614771694.JavaMail.yahoo@jws10045.mail.ne1.yahoo.com> [not found] ` <299800233.173413.1414614817575.JavaMail.yahoo@jws10066.mail.ne1.yahoo.com> [not found] ` <494469968.179875.1414614903152.JavaMail.yahoo@jws100144.mail.ne1.yahoo.com> [not found] ` <2136945987.171995.1414614942776.JavaMail.yahoo@jws10091.mail.ne1.yahoo.com> [not found] ` <257674219.177708.1414615022592.JavaMail.yahoo@jws100181.mail.ne1.yahoo.com> [not found] ` <716927833.181664.1414615075308.JavaMail.yahoo@jws100145.mail.ne1.yahoo.com> [not found] ` <874940984.178797.1414615132802.JavaMail.yahoo@jws100157.mail.ne1.yahoo.com> [not found] ` <1283488887.176736.1414615187657.JavaMail.yahoo@jws100183.mail.ne1.yahoo.com> [not found] ` <777665713.175887.1414615236293.JavaMail.yahoo@jws10083.mail.ne1.yahoo.com> [not found] ` <585395776.176325.1 414615298260.JavaMail.yahoo@jws10033.mail.ne1.yahoo.com> [not found] ` <178352191.221832.1414615355071.JavaMail.yahoo@jws100104.mail.ne1.yahoo.com> [not found] ` <108454213.176606.1414615522058.JavaMail.yahoo@jws10053.mail.ne1.yahoo.com> [not found] ` <1617229176.177502.1414615563724.JavaMail.yahoo@jws10030.mail.ne1.yahoo.com> [not found] ` <324334617.178254.1414615625247.JavaMail.yahoo@jws10089.mail.ne1.yahoo.com> [not found] ` <567135865.82376.1414615664442.JavaMail.yahoo@jws100136.mail.ne1.yahoo.com> [not found] ` <764758300.179669.1414615711821.JavaMail.yahoo@jws100107.mail.ne1.yahoo.com> [not found] ` <1072855470.183388.1414615775798.JavaMail.yahoo@jws100147.mail.ne1.yahoo.com> [not found] ` <2134283632.173314.1414615831322.JavaMail.yahoo@jws10094.mail.ne1.yahoo.com> [not found] ` <1454491902.178612.1414615875076.JavaMail.yahoo@jws100209.mail.ne1.yahoo.com> [not found] ` <1488091663.147175.1414957674639.JavaMail.yahoo-pZijWUW3o9/uQS8rMknbopOW+3bF1jUfVpNB7YpNyf8@public.gmane.org> 2014-11-02 19:48 ` (unknown) MRS GRACE MANDA 2014-10-06 19:57 (unknown), Omar Hashim 2014-10-06 6:56 (unknown), Suman Tripathi 2014-09-29 3:16 (unknown), Shengchao Guo 2014-09-22 7:45 (unknown), Jingchang Lu 2014-09-20 23:12 (unknown), M.K-YIN 2014-05-24 1:21 (unknown), Loc Ho 2014-03-11 3:29 (unknown), Christian Organization 2014-02-16 11:35 (unknown), Eleazar Molina Molina 2014-02-02 18:31 (unknown), Davor Joja 2014-01-16 16:11 (unknown), Loc Ho 2014-01-16 16:09 (unknown), Loc Ho 2014-01-13 10:32 (unknown), Lothar Waßmann 2014-01-13 10:29 (unknown), Lothar Waßmann 2014-01-11 0:37 (unknown) klightspeed-aslSrjg9ejhWX4hkXwHRhw 2013-12-12 7:30 (unknown), Loc Ho 2013-12-05 7:01 (unknown), Jagan Teki 2013-11-21 5:53 (unknown), Management 2013-11-08 20:28 (unknown) Dave & Angela Dawes 2013-11-01 7:04 (unknown), Xiubo Li 2012-10-05 7:15 (unknown) Robert Schwebel 2012-04-25 6:57 (unknown), jobhunts02
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).