devicetree.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: boris brezillon <b.brezillon@overkiz.com>
To: Nicolas Ferre <nicolas.ferre@atmel.com>,
	Grant Likely <grant.likely@linaro.org>,
	Rob Herring <rob.herring@calxeda.com>,
	Rob Landley <rob@landley.net>, Andrew Victor <linux@maxim.org.za>,
	Jean-Christophe Plagniol-Villard <plagnioj@jcrosoft.com>,
	Russell King <linux@arm.linux.org.uk>,
	Mike Turquette <mturquette@linaro.org>,
	Felipe Balbi <balbi@ti.com>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	Ludovic Desroches <ludovic.desroches@atmel.com>,
	Josh Wu <josh.wu@atmel.com>,
	Richard Genoud <richard.genoud@gmail.com>
Cc: devicetree@vger.kernel.org, linux-kernel@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org
Subject: Re: [PATCH v3 03/19] clk: at91: add PMC base support
Date: Mon, 07 Oct 2013 17:57:49 +0200	[thread overview]
Message-ID: <5252D9FD.7080303@overkiz.com> (raw)
In-Reply-To: <5252CE27.6060905@atmel.com>

Hello Nicolas,

On 07/10/2013 17:07, Nicolas Ferre wrote:
> On 08/08/2013 07:01, Boris BREZILLON :
>> This patch adds at91 PMC (Power Management Controller) base support.
>>
>> All at91 clocks managed by the PMC unit will use this framework.
>>
>> This framework provides the following fonctionalities:
>> - define a new struct at91_pmc to hide PMC internals (lock, PMC memory
>>    mapping, irq domain, ...)
>> - read/write helper functions (pmc_read/write) to access PMC registers
>> - lock/unlock helper functions (pmc_lock/unlock) to lock/unlock 
>> access to
>>    pmc registers
>> - a new irq domain and its associated irq chip to request PMC specific
>>    interrupts (useful for clk prepare callbacks)
>>
>> The PMC unit is declared as a dt clk provider (CLK_OF_DECLARE), and 
>> every
>> clk using this framework will declare a table of of_at91_clk_init_cb_t
>> and add it to the pmc_clk_ids table.
>>
>> When the pmc dt clock setup function is called (by of_clk_init 
>> function),
>> it triggers the registration of every supported child clk (those 
>> matching
>> the definitions in pmc_clk_ids).
>>
>> This patch copies at91_pmc_base (memory mapping) and at91sam9_idle
>> (function) from arch/arm/mach-at91/clock.c (which is not compiled if
>> COMMON_CLK_AT91 is enabled).
>>
>> Signed-off-by: Boris BREZILLON <b.brezillon@overkiz.com>
>> ---
>>   drivers/clk/Makefile      |    1 +
>>   drivers/clk/at91/Makefile |    5 +
>>   drivers/clk/at91/pmc.c    |  298 
>> +++++++++++++++++++++++++++++++++++++++++++++
>>   drivers/clk/at91/pmc.h    |   58 +++++++++
>>   4 files changed, 362 insertions(+)
>>   create mode 100644 drivers/clk/at91/Makefile
>>   create mode 100644 drivers/clk/at91/pmc.c
>>   create mode 100644 drivers/clk/at91/pmc.h
>>
>> diff --git a/drivers/clk/Makefile b/drivers/clk/Makefile
>> index 4038c2b..c256a20 100644
>> --- a/drivers/clk/Makefile
>> +++ b/drivers/clk/Makefile
>> @@ -32,6 +32,7 @@ obj-$(CONFIG_ARCH_VT8500)    += clk-vt8500.o
>>   obj-$(CONFIG_ARCH_ZYNQ)        += zynq/
>>   obj-$(CONFIG_ARCH_TEGRA)    += tegra/
>>   obj-$(CONFIG_PLAT_SAMSUNG)    += samsung/
>> +obj-$(CONFIG_COMMON_CLK_AT91)    += at91/
>>
>>   obj-$(CONFIG_X86)        += x86/
>>
>> diff --git a/drivers/clk/at91/Makefile b/drivers/clk/at91/Makefile
>> new file mode 100644
>> index 0000000..1d4fb21
>> --- /dev/null
>> +++ b/drivers/clk/at91/Makefile
>> @@ -0,0 +1,5 @@
>> +#
>> +# Makefile for at91 specific clk
>> +#
>> +
>> +obj-y += pmc.o
>> diff --git a/drivers/clk/at91/pmc.c b/drivers/clk/at91/pmc.c
>> new file mode 100644
>> index 0000000..f6bd03d
>> --- /dev/null
>> +++ b/drivers/clk/at91/pmc.c
>> @@ -0,0 +1,298 @@
>> +/*
>> + * drivers/clk/at91/pmc.c
>> + *
>> + *  Copyright (C) 2013 Boris BREZILLON <b.brezillon@overkiz.com>
>> + *
>> + * This program is free software; you can redistribute it and/or modify
>> + * it under the terms of the GNU General Public License as published by
>> + * the Free Software Foundation; either version 2 of the License, or
>> + * (at your option) any later version.
>> + *
>> + */
>> +
>> +#include <linux/clk-provider.h>
>> +#include <linux/clkdev.h>
>> +#include <linux/clk/at91_pmc.h>
>> +#include <linux/of.h>
>> +#include <linux/of_address.h>
>> +#include <linux/io.h>
>> +#include <linux/interrupt.h>
>> +#include <linux/irq.h>
>> +#include <linux/irqchip/chained_irq.h>
>> +#include <linux/irqdomain.h>
>> +#include <linux/of_irq.h>
>> +
>> +#include <asm/proc-fns.h>
>> +
>> +#include "pmc.h"
>> +
>> +void __iomem *at91_pmc_base;
>> +EXPORT_SYMBOL_GPL(at91_pmc_base);
>> +
>> +void at91sam9_idle(void)
>> +{
>> +    at91_pmc_write(AT91_PMC_SCDR, AT91_PMC_PCK);
>> +    cpu_do_idle();
>> +}
>> +
>> +static void pmc_irq_mask(struct irq_data *d)
>> +{
>> +    struct at91_pmc *pmc = irq_data_get_irq_chip_data(d);
>> +
>> +    pmc_write(pmc, AT91_PMC_IDR, 1 << d->hwirq);
>> +}
>> +
>> +static void pmc_irq_unmask(struct irq_data *d)
>> +{
>> +    struct at91_pmc *pmc = irq_data_get_irq_chip_data(d);
>> +
>> +    pmc_write(pmc, AT91_PMC_IER, 1 << d->hwirq);
>> +}
>> +
>> +static int pmc_irq_set_type(struct irq_data *d, unsigned type)
>> +{
>> +    if (type != IRQ_TYPE_LEVEL_HIGH) {
>> +        pr_warn("PMC: type not supported (support only 
>> IRQ_TYPE_LEVEL_HIGH type)\n");
>> +        return -EINVAL;
>> +    }
>> +
>> +    return 0;
>> +}
>> +
>> +static struct irq_chip pmc_irq = {
>> +    .name = "PMC",
>> +    .irq_disable = pmc_irq_mask,
>> +    .irq_mask = pmc_irq_mask,
>> +    .irq_unmask = pmc_irq_unmask,
>> +    .irq_set_type = pmc_irq_set_type,
>> +};
>> +
>> +static struct lock_class_key pmc_lock_class;
>> +
>> +static int pmc_irq_map(struct irq_domain *h, unsigned int virq,
>> +               irq_hw_number_t hw)
>> +{
>> +    struct at91_pmc    *pmc = h->host_data;
>> +
>> +    irq_set_lockdep_class(virq, &pmc_lock_class);
>> +
>> +    irq_set_chip_and_handler(virq, &pmc_irq,
>> +                 handle_level_irq);
>> +    set_irq_flags(virq, IRQF_VALID);
>> +    irq_set_chip_data(virq, pmc);
>> +
>> +    return 0;
>> +}
>> +
>> +static int pmc_irq_domain_xlate(struct irq_domain *d,
>> +                struct device_node *ctrlr,
>> +                const u32 *intspec, unsigned int intsize,
>> +                irq_hw_number_t *out_hwirq,
>> +                unsigned int *out_type)
>> +{
>> +    struct at91_pmc *pmc = d->host_data;
>> +    const struct at91_pmc_caps *caps = pmc->caps;
>> +
>> +    if (WARN_ON(intsize < 2))
>> +        return -EINVAL;
>> +    *out_hwirq = intspec[0];
>> +    *out_type = intspec[1] & IRQ_TYPE_SENSE_MASK;
>> +
>> +    if (!(caps->available_irqs & (1 << *out_hwirq)))
>> +        return -EINVAL;
>> +
>> +    if (*out_type != IRQ_TYPE_LEVEL_HIGH)
>> +        return -EINVAL;
>> +
>> +    return 0;
>> +}
>> +
>> +static struct irq_domain_ops pmc_irq_ops = {
>> +    .map    = pmc_irq_map,
>> +    .xlate    = pmc_irq_domain_xlate,
>> +};
>> +
>> +static irqreturn_t pmc_irq_handler(int irq, void *data)
>> +{
>> +    struct at91_pmc *pmc = (struct at91_pmc *)data;
>> +    unsigned long sr;
>> +    int n;
>> +
>> +    sr = pmc_read(pmc, AT91_PMC_SR) & pmc_read(pmc, AT91_PMC_IMR);
>> +    if (!sr)
>> +        return IRQ_NONE;
>> +
>> +    for_each_set_bit(n, &sr, BITS_PER_LONG)
>> +        generic_handle_irq(irq_find_mapping(pmc->irqdomain, n));
>> +
>> +    return IRQ_HANDLED;
>> +}
>> +
>> +static const struct at91_pmc_caps at91rm9200_caps = {
>> +    .available_irqs = AT91_PMC_MOSCS | AT91_PMC_LOCKA | 
>> AT91_PMC_LOCKB |
>> +              AT91_PMC_MCKRDY | AT91_PMC_PCK0RDY |
>> +              AT91_PMC_PCK1RDY | AT91_PMC_PCK2RDY |
>> +              AT91_PMC_PCK3RDY,
>> +};
>> +
>> +static const struct at91_pmc_caps at91sam9260_caps = {
>> +    .available_irqs = AT91_PMC_MOSCS | AT91_PMC_LOCKA | 
>> AT91_PMC_LOCKB |
>> +              AT91_PMC_MCKRDY | AT91_PMC_PCK0RDY |
>> +              AT91_PMC_PCK1RDY,
>> +};
>> +
>> +static const struct at91_pmc_caps at91sam9g45_caps = {
>> +    .available_irqs = AT91_PMC_MOSCS | AT91_PMC_LOCKA | 
>> AT91_PMC_MCKRDY |
>> +              AT91_PMC_LOCKU | AT91_PMC_PCK0RDY |
>> +              AT91_PMC_PCK1RDY,
>> +};
>> +
>> +static const struct at91_pmc_caps at91sam9n12_caps = {
>> +    .available_irqs = AT91_PMC_MOSCS | AT91_PMC_LOCKA | 
>> AT91_PMC_LOCKB |
>> +              AT91_PMC_MCKRDY | AT91_PMC_PCK0RDY |
>> +              AT91_PMC_PCK1RDY | AT91_PMC_MOSCSELS |
>> +              AT91_PMC_MOSCRCS | AT91_PMC_CFDEV,
>> +};
>> +
>> +static const struct at91_pmc_caps at91sam9x5_caps = {
>> +    .available_irqs = AT91_PMC_MOSCS | AT91_PMC_LOCKA | 
>> AT91_PMC_MCKRDY |
>> +              AT91_PMC_LOCKU | AT91_PMC_PCK0RDY |
>> +              AT91_PMC_PCK1RDY | AT91_PMC_MOSCSELS |
>> +              AT91_PMC_MOSCRCS | AT91_PMC_CFDEV,
>> +};
>> +
>> +static const struct at91_pmc_caps at91sam9g35_caps = {
>> +    .available_irqs = AT91_PMC_MOSCS | AT91_PMC_LOCKA | 
>> AT91_PMC_MCKRDY |
>> +              AT91_PMC_PCK0RDY | AT91_PMC_PCK1RDY |
>> +              AT91_PMC_MOSCSELS | AT91_PMC_MOSCRCS |
>> +              AT91_PMC_CFDEV,
>
> 9g35 is part of 9x5 series. It is not different from its other fellow 
> SoCs.
> (but it is true that the datasheet has changed recently in relation 
> with this missing LOCKU bit ;-) ).
>
> So I suspect that we can remove all definitions of at91sam9g35 and 
> merge them with 9x5 ones (including compatibility string).
>
Sure, I will remove 9g35 specific definitions

>> +};
>> +
>> +static const struct at91_pmc_caps sama5d3_caps = {
>> +    .available_irqs = AT91_PMC_MOSCS | AT91_PMC_LOCKA | 
>> AT91_PMC_MCKRDY |
>> +              AT91_PMC_LOCKU | AT91_PMC_PCK0RDY |
>> +              AT91_PMC_PCK1RDY | AT91_PMC_PCK2RDY |
>> +              AT91_PMC_MOSCSELS | AT91_PMC_MOSCRCS |
>> +              AT91_PMC_CFDEV,
>> +};
>> +
>> +static struct at91_pmc *__init at91_pmc_init(struct device_node *np,
>> +                         void __iomem *regbase, int virq,
>> +                         const struct at91_pmc_caps *caps)
>> +{
>> +    struct at91_pmc *pmc;
>> +
>> +    if (!regbase || !virq ||  !caps)
>> +        return NULL;
>> +
>> +    at91_pmc_base = regbase;
>> +
>> +    pmc = kzalloc(sizeof(*pmc), GFP_KERNEL);
>> +    if (!pmc)
>> +        return NULL;
>> +
>> +    spin_lock_init(&pmc->lock);
>> +    pmc->regbase = regbase;
>> +    pmc->virq = virq;
>> +    pmc->caps = caps;
>> +
>> +    pmc->irqdomain = irq_domain_add_linear(np, 32, &pmc_irq_ops, pmc);
>> +
>> +    if (!pmc->irqdomain)
>> +        goto out_free_pmc;
>> +
>> +    pmc_write(pmc, AT91_PMC_IDR, 0xffffffff);
>> +    if (request_irq(pmc->virq, pmc_irq_handler, IRQF_SHARED, "pmc", 
>> pmc))
>> +        goto out_remove_irqdomain;
>> +
>> +    return pmc;
>> +
>> +out_remove_irqdomain:
>> +    irq_domain_remove(pmc->irqdomain);
>> +out_free_pmc:
>> +    kfree(pmc);
>> +
>> +    return NULL;
>> +}
>> +
>> +static const struct of_device_id pmc_clk_ids[] __initdata = {
>> +    { /*sentinel*/ }
>> +};
>> +
>> +static void __init of_at91_pmc_setup(struct device_node *np,
>> +                     const struct at91_pmc_caps *caps)
>> +{
>> +    struct at91_pmc *pmc;
>> +    struct device_node *childnp;
>> +    void (*clk_setup)(struct device_node *, struct at91_pmc *);
>> +    const struct of_device_id *clk_id;
>> +    void __iomem *regbase = of_iomap(np, 0);
>> +    int virq;
>> +
>> +    if (!regbase)
>> +        return;
>> +
>> +    virq = irq_of_parse_and_map(np, 0);
>> +    if (!virq)
>> +        return;
>> +
>> +    pmc = at91_pmc_init(np, regbase, virq, caps);
>> +    if (!pmc)
>> +        return;
>> +    for_each_child_of_node(np, childnp) {
>> +        clk_id = of_match_node(pmc_clk_ids, childnp);
>> +        if (!clk_id)
>> +            continue;
>> +        clk_setup = clk_id->data;
>> +        clk_setup(childnp, pmc);
>> +    }
>> +}
>> +
>> +static void __init of_at91rm9200_pmc_setup(struct device_node *np)
>> +{
>> +    of_at91_pmc_setup(np, &at91rm9200_caps);
>> +}
>> +CLK_OF_DECLARE(at91rm9200_clk_main, "atmel,at91rm9200-pmc",
>> +           of_at91rm9200_pmc_setup);
>> +
>> +static void __init of_at91sam9260_pmc_setup(struct device_node *np)
>> +{
>> +    of_at91_pmc_setup(np, &at91sam9260_caps);
>> +}
>> +CLK_OF_DECLARE(at91sam9260_clk_main, "atmel,at91sam9260-pmc",
>> +           of_at91sam9260_pmc_setup);
>> +
>> +static void __init of_at91sam9g45_pmc_setup(struct device_node *np)
>> +{
>> +    of_at91_pmc_setup(np, &at91sam9g45_caps);
>> +}
>> +CLK_OF_DECLARE(at91sam9g45_clk_main, "atmel,at91sam9g45-pmc",
>> +           of_at91sam9g45_pmc_setup);
>> +
>> +static void __init of_at91sam9n12_pmc_setup(struct device_node *np)
>> +{
>> +    of_at91_pmc_setup(np, &at91sam9n12_caps);
>> +}
>> +CLK_OF_DECLARE(at91sam9n12_clk_main, "atmel,at91sam9n12-pmc",
>> +           of_at91sam9n12_pmc_setup);
>> +
>> +static void __init of_at91sam9x5_pmc_setup(struct device_node *np)
>> +{
>> +    of_at91_pmc_setup(np, &at91sam9x5_caps);
>> +}
>> +CLK_OF_DECLARE(at91sam9x5_clk_main, "atmel,at91sam9x5-pmc",
>> +           of_at91sam9x5_pmc_setup);
>> +
>> +static void __init of_at91sam9g35_pmc_setup(struct device_node *np)
>> +{
>> +    of_at91_pmc_setup(np, &at91sam9g35_caps);
>> +}
>> +CLK_OF_DECLARE(at91sam9g35_clk_main, "atmel,at91sam9g35-pmc",
>> +           of_at91sam9g35_pmc_setup);
>
> Ditto.
>
>> +
>> +static void __init of_sama5d3_pmc_setup(struct device_node *np)
>> +{
>> +    of_at91_pmc_setup(np, &sama5d3_caps);
>> +}
>> +CLK_OF_DECLARE(sama5d3_clk_main, "atmel,sama5d3-pmc",
>> +           of_sama5d3_pmc_setup);
>> diff --git a/drivers/clk/at91/pmc.h b/drivers/clk/at91/pmc.h
>> new file mode 100644
>> index 0000000..b7e8397
>> --- /dev/null
>> +++ b/drivers/clk/at91/pmc.h
>> @@ -0,0 +1,58 @@
>> +/*
>> + * drivers/clk/at91/pmc.h
>> + *
>> + *  Copyright (C) 2013 Boris BREZILLON <b.brezillon@overkiz.com>
>> + *
>> + * This program is free software; you can redistribute it and/or modify
>> + * it under the terms of the GNU General Public License as published by
>> + * the Free Software Foundation; either version 2 of the License, or
>> + * (at your option) any later version.
>> + */
>> +
>> +#ifndef __PMC_H_
>> +#define __PMC_H_
>> +
>> +#include <linux/io.h>
>> +#include <linux/irqdomain.h>
>> +#include <linux/spinlock.h>
>> +
>> +struct clk_range {
>> +    unsigned long min;
>> +    unsigned long max;
>> +};
>> +
>> +#define CLK_RANGE(MIN, MAX) {.min = MIN, .max = MAX,}
>> +
>> +struct at91_pmc_caps {
>> +    u32 available_irqs;
>> +};
>> +
>> +struct at91_pmc {
>> +    void __iomem *regbase;
>> +    int virq;
>> +    spinlock_t lock;
>> +    const struct at91_pmc_caps *caps;
>> +    struct irq_domain *irqdomain;
>> +};
>> +
>> +static inline void pmc_lock(struct at91_pmc *pmc)
>> +{
>> +    spin_lock(&pmc->lock);
>> +}
>> +
>> +static inline void pmc_unlock(struct at91_pmc *pmc)
>> +{
>> +    spin_unlock(&pmc->lock);
>> +}
>> +
>> +static inline u32 pmc_read(struct at91_pmc *pmc, int offset)
>> +{
>> +    return readl_relaxed(pmc->regbase + offset);
>> +}
>> +
>> +static inline void pmc_write(struct at91_pmc *pmc, int offset, u32 
>> value)
>> +{
>> +    return writel_relaxed(value, pmc->regbase + offset);
>> +}
>> +
>> +#endif /* __PMC_H_ */
>>
>
>

  reply	other threads:[~2013-10-07 15:57 UTC|newest]

Thread overview: 34+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <1375937608-3773-1-git-send-email-b.brezillon@overkiz.com>
     [not found] ` <1375938066-3889-1-git-send-email-b.brezillon@overkiz.com>
2013-10-07 15:07   ` [PATCH v3 03/19] clk: at91: add PMC base support Nicolas Ferre
2013-10-07 15:57     ` boris brezillon [this message]
     [not found] ` <1375938174-3926-1-git-send-email-b.brezillon@overkiz.com>
2013-10-07 15:12   ` [PATCH v3 02/19] ARM: at91: add Kconfig options for common clk support Nicolas Ferre
2013-10-07 16:05     ` boris brezillon
2013-10-09  9:56     ` boris brezillon
2013-10-09 10:05       ` Nicolas Ferre
     [not found] ` <1375938270-3965-1-git-send-email-b.brezillon@overkiz.com>
     [not found]   ` <1375938270-3965-1-git-send-email-b.brezillon-ZNYIgs0QAGpBDgjK7y7TUQ@public.gmane.org>
2013-10-07 15:17     ` [PATCH v3 04/19] clk: at91: add PMC macro file for dt definitions Nicolas Ferre
     [not found]       ` <5252D0A5.60304-AIFe0yeh4nAAvxtiuMwx3w@public.gmane.org>
2013-10-07 16:06         ` boris brezillon
     [not found] ` <1375938369-4002-1-git-send-email-b.brezillon@overkiz.com>
     [not found]   ` <1375938369-4002-1-git-send-email-b.brezillon-ZNYIgs0QAGpBDgjK7y7TUQ@public.gmane.org>
2013-10-07 16:51     ` [PATCH v3 05/19] clk: at91: add PMC main clock Nicolas Ferre
2013-10-07 19:11       ` boris brezillon
     [not found]         ` <52530744.60701-ZNYIgs0QAGpBDgjK7y7TUQ@public.gmane.org>
2013-10-08  8:24           ` Nicolas Ferre
     [not found]             ` <5253C142.2080808-AIFe0yeh4nAAvxtiuMwx3w@public.gmane.org>
2013-10-08  9:00               ` boris brezillon
     [not found] ` <52134321.8000806@overkiz.com>
2013-10-07 20:06   ` [PATCH v3 00/19] ARM: at91: move to common clk framework Mike Turquette
     [not found] ` <1375946357-9775-1-git-send-email-b.brezillon@overkiz.com>
     [not found]   ` <1375946357-9775-1-git-send-email-b.brezillon-ZNYIgs0QAGpBDgjK7y7TUQ@public.gmane.org>
2013-10-08  9:44     ` [PATCH v3 17/19] clk: at91: add PMC clk device tree binding doc Nicolas Ferre
     [not found]       ` <5253D3FA.5060602-AIFe0yeh4nAAvxtiuMwx3w@public.gmane.org>
2013-10-08 12:37         ` boris brezillon
     [not found]           ` <5253FC90.1000808-ZNYIgs0QAGpBDgjK7y7TUQ@public.gmane.org>
2013-10-08 12:42             ` Nicolas Ferre
     [not found] ` <1375942041-8843-1-git-send-email-b.brezillon@overkiz.com>
     [not found]   ` <1375942041-8843-1-git-send-email-b.brezillon-ZNYIgs0QAGpBDgjK7y7TUQ@public.gmane.org>
2013-10-08 10:28     ` [PATCH v3 06/19] clk: at91: add PMC pll clocks Nicolas Ferre
     [not found]       ` <5253DE3A.5090503-AIFe0yeh4nAAvxtiuMwx3w@public.gmane.org>
2013-10-08 11:45         ` boris brezillon
     [not found] ` <1375942160-8881-1-git-send-email-b.brezillon@overkiz.com>
     [not found]   ` <1375942160-8881-1-git-send-email-b.brezillon-ZNYIgs0QAGpBDgjK7y7TUQ@public.gmane.org>
2013-10-08 10:30     ` [PATCH v3 07/19] clk: at91: add pll id macros for pll dt bindings Nicolas Ferre
2013-10-08 12:03       ` boris brezillon
     [not found] ` <1375942346-8966-1-git-send-email-b.brezillon@overkiz.com>
     [not found]   ` <1375942346-8966-1-git-send-email-b.brezillon-ZNYIgs0QAGpBDgjK7y7TUQ@public.gmane.org>
2013-10-08 15:32     ` [PATCH v3 09/19] clk: at91: add PMC system clocks Nicolas Ferre
     [not found] ` <1375942504-9010-1-git-send-email-b.brezillon@overkiz.com>
2013-10-08 15:36   ` [PATCH v3 10/19] ARM: at91/dt: add system clk id definitions in dt-bindings include dir Nicolas Ferre
     [not found] ` <1375942611-9048-1-git-send-email-b.brezillon@overkiz.com>
     [not found]   ` <1375942611-9048-1-git-send-email-b.brezillon-ZNYIgs0QAGpBDgjK7y7TUQ@public.gmane.org>
2013-10-08 15:43     ` [PATCH v3 11/19] clk: at91: add PMC peripheral clocks Nicolas Ferre
     [not found] ` <1375945839-9573-1-git-send-email-b.brezillon@overkiz.com>
     [not found]   ` <1375945839-9573-1-git-send-email-b.brezillon-ZNYIgs0QAGpBDgjK7y7TUQ@public.gmane.org>
2013-10-08 15:44     ` [PATCH v3 12/19] clk: at91: add peripheral clk macros for peripheral clk dt bindings Nicolas Ferre
2013-10-08 16:01       ` boris brezillon
     [not found]         ` <52542C4C.5080409-ZNYIgs0QAGpBDgjK7y7TUQ@public.gmane.org>
2013-10-08 16:15           ` Nicolas Ferre
2013-10-08 16:19             ` boris brezillon
     [not found] ` <1375945938-9614-1-git-send-email-b.brezillon@overkiz.com>
     [not found]   ` <1375945938-9614-1-git-send-email-b.brezillon-ZNYIgs0QAGpBDgjK7y7TUQ@public.gmane.org>
2013-10-08 16:02     ` [PATCH v3 13/19] clk: at91: add PMC programmable clocks Nicolas Ferre
     [not found]       ` <52542CA9.2000105-AIFe0yeh4nAAvxtiuMwx3w@public.gmane.org>
2013-10-08 16:06         ` Nicolas Ferre
     [not found] ` <1375946057-9651-1-git-send-email-b.brezillon@overkiz.com>
2013-10-08 16:08   ` [PATCH v3 14/19] clk: at91: add PMC utmi clock Nicolas Ferre
     [not found] ` <1375946153-9694-1-git-send-email-b.brezillon@overkiz.com>
     [not found]   ` <1375946153-9694-1-git-send-email-b.brezillon-ZNYIgs0QAGpBDgjK7y7TUQ@public.gmane.org>
2013-10-08 16:20     ` [PATCH v3 15/19] clk: at91: add PMC usb clock Nicolas Ferre
     [not found] ` <1375946243-9736-1-git-send-email-b.brezillon@overkiz.com>
     [not found]   ` <1375946243-9736-1-git-send-email-b.brezillon-ZNYIgs0QAGpBDgjK7y7TUQ@public.gmane.org>
2013-10-08 16:22     ` [PATCH v3 16/19] clk: at91: add PMC smd clock Nicolas Ferre
     [not found] ` <1375949844-10545-1-git-send-email-b.brezillon@overkiz.com>
2013-10-08 16:28   ` [PATCH v3 18/19] ARM: at91: move pit timer to common clk framework Nicolas Ferre
     [not found] ` <1375949965-10586-1-git-send-email-b.brezillon@overkiz.com>
     [not found]   ` <1375949965-10586-1-git-send-email-b.brezillon-ZNYIgs0QAGpBDgjK7y7TUQ@public.gmane.org>
2013-10-08 16:29     ` [PATCH v3 19/19] ARM: at91: add new compatible strings for pmc driver Nicolas Ferre

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=5252D9FD.7080303@overkiz.com \
    --to=b.brezillon@overkiz.com \
    --cc=balbi@ti.com \
    --cc=devicetree@vger.kernel.org \
    --cc=grant.likely@linaro.org \
    --cc=gregkh@linuxfoundation.org \
    --cc=josh.wu@atmel.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux@arm.linux.org.uk \
    --cc=linux@maxim.org.za \
    --cc=ludovic.desroches@atmel.com \
    --cc=mturquette@linaro.org \
    --cc=nicolas.ferre@atmel.com \
    --cc=plagnioj@jcrosoft.com \
    --cc=richard.genoud@gmail.com \
    --cc=rob.herring@calxeda.com \
    --cc=rob@landley.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is 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).