All of lore.kernel.org
 help / color / mirror / Atom feed
From: lee.jones@linaro.org (Lee Jones)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 22/41] clk: ux500: Copy u8500_clk_init() ready for DT enablement
Date: Thu, 19 Sep 2013 13:31:03 +0100	[thread overview]
Message-ID: <20130919123103.GJ22389@lee--X1> (raw)
In-Reply-To: <1379506478-16625-23-git-send-email-lee.jones@linaro.org>

Hi Mike,

Sorry for top, posting.

This one requires your attention, thanks.

> Here we're using the old clock initialisation function as a template.
> It's necessary to remove all of the clk_register_clkdev() calls as
> they don't make sense when booting with Device Tree.
> 
> Cc: Mike Turquette <mturquette@linaro.org>
> Signed-off-by: Lee Jones <lee.jones@linaro.org>
> ---
>  drivers/clk/ux500/Makefile              |   1 +
>  drivers/clk/ux500/u8500_of_clk.c        | 381 ++++++++++++++++++++++++++++++++
>  include/linux/platform_data/clk-ux500.h |   3 +
>  3 files changed, 385 insertions(+)
>  create mode 100644 drivers/clk/ux500/u8500_of_clk.c
> 
> diff --git a/drivers/clk/ux500/Makefile b/drivers/clk/ux500/Makefile
> index c6a806e..521483f 100644
> --- a/drivers/clk/ux500/Makefile
> +++ b/drivers/clk/ux500/Makefile
> @@ -8,6 +8,7 @@ obj-y += clk-prcmu.o
>  obj-y += clk-sysctrl.o
>  
>  # Clock definitions
> +obj-y += u8500_of_clk.o
>  obj-y += u8500_clk.o
>  obj-y += u9540_clk.o
>  obj-y += u8540_clk.o
> diff --git a/drivers/clk/ux500/u8500_of_clk.c b/drivers/clk/ux500/u8500_of_clk.c
> new file mode 100644
> index 0000000..ceebce6
> --- /dev/null
> +++ b/drivers/clk/ux500/u8500_of_clk.c
> @@ -0,0 +1,381 @@
> +/*
> + * Clock definitions for u8500 platform.
> + *
> + * Copyright (C) 2012 ST-Ericsson SA
> + * Author: Ulf Hansson <ulf.hansson@linaro.org>
> + *
> + * License terms: GNU General Public License (GPL) version 2
> + */
> +
> +#include <linux/clk.h>
> +#include <linux/clkdev.h>
> +#include <linux/clk-provider.h>
> +#include <linux/mfd/dbx500-prcmu.h>
> +#include <linux/platform_data/clk-ux500.h>
> +#include "clk.h"
> +
> +void u8500_of_clk_init(u32 clkrst1_base, u32 clkrst2_base, u32 clkrst3_base,
> +		       u32 clkrst5_base, u32 clkrst6_base)
> +{
> +	struct prcmu_fw_version *fw_version;
> +	const char *sgaclk_parent = NULL;
> +	struct clk *clk;
> +
> +	/* Clock sources */
> +	clk = clk_reg_prcmu_gate("soc0_pll", NULL, PRCMU_PLLSOC0,
> +				CLK_IS_ROOT|CLK_IGNORE_UNUSED);
> +
> +	clk = clk_reg_prcmu_gate("soc1_pll", NULL, PRCMU_PLLSOC1,
> +				CLK_IS_ROOT|CLK_IGNORE_UNUSED);
> +
> +	clk = clk_reg_prcmu_gate("ddr_pll", NULL, PRCMU_PLLDDR,
> +				CLK_IS_ROOT|CLK_IGNORE_UNUSED);
> +
> +	/* FIXME: Add sys, ulp and int clocks here. */
> +
> +	clk = clk_register_fixed_rate(NULL, "rtc32k", "NULL",
> +				CLK_IS_ROOT|CLK_IGNORE_UNUSED,
> +				32768);
> +
> +	/* PRCMU clocks */
> +	fw_version = prcmu_get_fw_version();
> +	if (fw_version != NULL) {
> +		switch (fw_version->project) {
> +		case PRCMU_FW_PROJECT_U8500_C2:
> +		case PRCMU_FW_PROJECT_U8520:
> +		case PRCMU_FW_PROJECT_U8420:
> +			sgaclk_parent = "soc0_pll";
> +			break;
> +		default:
> +			break;
> +		}
> +	}
> +
> +	if (sgaclk_parent)
> +		clk = clk_reg_prcmu_gate("sgclk", sgaclk_parent,
> +					PRCMU_SGACLK, 0);
> +	else
> +		clk = clk_reg_prcmu_gate("sgclk", NULL,
> +					PRCMU_SGACLK, CLK_IS_ROOT);
> +
> +	clk = clk_reg_prcmu_gate("uartclk", NULL, PRCMU_UARTCLK, CLK_IS_ROOT);
> +
> +	clk = clk_reg_prcmu_gate("msp02clk", NULL, PRCMU_MSP02CLK, CLK_IS_ROOT);
> +
> +	clk = clk_reg_prcmu_gate("msp1clk", NULL, PRCMU_MSP1CLK, CLK_IS_ROOT);
> +
> +	clk = clk_reg_prcmu_gate("i2cclk", NULL, PRCMU_I2CCLK, CLK_IS_ROOT);
> +
> +	clk = clk_reg_prcmu_gate("slimclk", NULL, PRCMU_SLIMCLK, CLK_IS_ROOT);
> +
> +	clk = clk_reg_prcmu_gate("per1clk", NULL, PRCMU_PER1CLK, CLK_IS_ROOT);
> +
> +	clk = clk_reg_prcmu_gate("per2clk", NULL, PRCMU_PER2CLK, CLK_IS_ROOT);
> +
> +	clk = clk_reg_prcmu_gate("per3clk", NULL, PRCMU_PER3CLK, CLK_IS_ROOT);
> +
> +	clk = clk_reg_prcmu_gate("per5clk", NULL, PRCMU_PER5CLK, CLK_IS_ROOT);
> +
> +	clk = clk_reg_prcmu_gate("per6clk", NULL, PRCMU_PER6CLK, CLK_IS_ROOT);
> +
> +	clk = clk_reg_prcmu_gate("per7clk", NULL, PRCMU_PER7CLK, CLK_IS_ROOT);
> +
> +	clk = clk_reg_prcmu_scalable("lcdclk", NULL, PRCMU_LCDCLK, 0,
> +				CLK_IS_ROOT|CLK_SET_RATE_GATE);
> +
> +	clk = clk_reg_prcmu_opp_gate("bmlclk", NULL, PRCMU_BMLCLK, CLK_IS_ROOT);
> +
> +	clk = clk_reg_prcmu_scalable("hsitxclk", NULL, PRCMU_HSITXCLK, 0,
> +				CLK_IS_ROOT|CLK_SET_RATE_GATE);
> +
> +	clk = clk_reg_prcmu_scalable("hsirxclk", NULL, PRCMU_HSIRXCLK, 0,
> +				CLK_IS_ROOT|CLK_SET_RATE_GATE);
> +
> +	clk = clk_reg_prcmu_scalable("hdmiclk", NULL, PRCMU_HDMICLK, 0,
> +				CLK_IS_ROOT|CLK_SET_RATE_GATE);
> +
> +	clk = clk_reg_prcmu_gate("apeatclk", NULL, PRCMU_APEATCLK, CLK_IS_ROOT);
> +
> +	clk = clk_reg_prcmu_gate("apetraceclk", NULL, PRCMU_APETRACECLK,
> +				CLK_IS_ROOT);
> +
> +	clk = clk_reg_prcmu_gate("mcdeclk", NULL, PRCMU_MCDECLK, CLK_IS_ROOT);
> +
> +	clk = clk_reg_prcmu_opp_gate("ipi2cclk", NULL, PRCMU_IPI2CCLK,
> +				CLK_IS_ROOT);
> +
> +	clk = clk_reg_prcmu_gate("dsialtclk", NULL, PRCMU_DSIALTCLK,
> +				CLK_IS_ROOT);
> +
> +	clk = clk_reg_prcmu_gate("dmaclk", NULL, PRCMU_DMACLK, CLK_IS_ROOT);
> +
> +	clk = clk_reg_prcmu_gate("b2r2clk", NULL, PRCMU_B2R2CLK, CLK_IS_ROOT);
> +
> +	clk = clk_reg_prcmu_scalable("tvclk", NULL, PRCMU_TVCLK, 0,
> +				CLK_IS_ROOT|CLK_SET_RATE_GATE);
> +
> +	clk = clk_reg_prcmu_gate("sspclk", NULL, PRCMU_SSPCLK, CLK_IS_ROOT);
> +
> +	clk = clk_reg_prcmu_gate("rngclk", NULL, PRCMU_RNGCLK, CLK_IS_ROOT);
> +
> +	clk = clk_reg_prcmu_gate("uiccclk", NULL, PRCMU_UICCCLK, CLK_IS_ROOT);
> +
> +	clk = clk_reg_prcmu_gate("timclk", NULL, PRCMU_TIMCLK, CLK_IS_ROOT);
> +
> +	clk = clk_reg_prcmu_opp_volt_scalable("sdmmcclk", NULL, PRCMU_SDMMCCLK,
> +					100000000,
> +					CLK_IS_ROOT|CLK_SET_RATE_GATE);
> +
> +	clk = clk_reg_prcmu_scalable("dsi_pll", "hdmiclk",
> +				PRCMU_PLLDSI, 0, CLK_SET_RATE_GATE);
> +
> +
> +	clk = clk_reg_prcmu_scalable("dsi0clk", "dsi_pll",
> +				PRCMU_DSI0CLK, 0, CLK_SET_RATE_GATE);
> +
> +	clk = clk_reg_prcmu_scalable("dsi1clk", "dsi_pll",
> +				PRCMU_DSI1CLK, 0, CLK_SET_RATE_GATE);
> +
> +	clk = clk_reg_prcmu_scalable("dsi0escclk", "tvclk",
> +				PRCMU_DSI0ESCCLK, 0, CLK_SET_RATE_GATE);
> +
> +	clk = clk_reg_prcmu_scalable("dsi1escclk", "tvclk",
> +				PRCMU_DSI1ESCCLK, 0, CLK_SET_RATE_GATE);
> +
> +	clk = clk_reg_prcmu_scalable("dsi2escclk", "tvclk",
> +				PRCMU_DSI2ESCCLK, 0, CLK_SET_RATE_GATE);
> +
> +	clk = clk_reg_prcmu_scalable_rate("armss", NULL,
> +				PRCMU_ARMSS, 0, CLK_IS_ROOT|CLK_IGNORE_UNUSED);
> +
> +	clk = clk_register_fixed_factor(NULL, "smp_twd", "armss",
> +				CLK_IGNORE_UNUSED, 1, 2);
> +
> +	/*
> +	 * FIXME: Add special handled PRCMU clocks here:
> +	 * 1. clkout0yuv, use PRCMU as parent + need regulator + pinctrl.
> +	 * 2. ab9540_clkout1yuv, see clkout0yuv
> +	 */
> +
> +	/* PRCC P-clocks */
> +	clk = clk_reg_prcc_pclk("p1_pclk0", "per1clk", clkrst1_base,
> +				BIT(0), 0);
> +
> +	clk = clk_reg_prcc_pclk("p1_pclk1", "per1clk", clkrst1_base,
> +				BIT(1), 0);
> +
> +	clk = clk_reg_prcc_pclk("p1_pclk2", "per1clk", clkrst1_base,
> +				BIT(2), 0);
> +
> +	clk = clk_reg_prcc_pclk("p1_pclk3", "per1clk", clkrst1_base,
> +				BIT(3), 0);
> +
> +	clk = clk_reg_prcc_pclk("p1_pclk4", "per1clk", clkrst1_base,
> +				BIT(4), 0);
> +
> +	clk = clk_reg_prcc_pclk("p1_pclk5", "per1clk", clkrst1_base,
> +				BIT(5), 0);
> +
> +	clk = clk_reg_prcc_pclk("p1_pclk6", "per1clk", clkrst1_base,
> +				BIT(6), 0);
> +
> +	clk = clk_reg_prcc_pclk("p1_pclk7", "per1clk", clkrst1_base,
> +				BIT(7), 0);
> +
> +	clk = clk_reg_prcc_pclk("p1_pclk8", "per1clk", clkrst1_base,
> +				BIT(8), 0);
> +
> +	clk = clk_reg_prcc_pclk("p1_pclk9", "per1clk", clkrst1_base,
> +				BIT(9), 0);
> +
> +	clk = clk_reg_prcc_pclk("p1_pclk10", "per1clk", clkrst1_base,
> +				BIT(10), 0);
> +
> +	clk = clk_reg_prcc_pclk("p1_pclk11", "per1clk", clkrst1_base,
> +				BIT(11), 0);
> +
> +	clk = clk_reg_prcc_pclk("p2_pclk0", "per2clk", clkrst2_base,
> +				BIT(0), 0);
> +
> +	clk = clk_reg_prcc_pclk("p2_pclk1", "per2clk", clkrst2_base,
> +				BIT(1), 0);
> +
> +	clk = clk_reg_prcc_pclk("p2_pclk2", "per2clk", clkrst2_base,
> +				BIT(2), 0);
> +
> +	clk = clk_reg_prcc_pclk("p2_pclk3", "per2clk", clkrst2_base,
> +				BIT(3), 0);
> +
> +	clk = clk_reg_prcc_pclk("p2_pclk4", "per2clk", clkrst2_base,
> +				BIT(4), 0);
> +
> +	clk = clk_reg_prcc_pclk("p2_pclk5", "per2clk", clkrst2_base,
> +				BIT(5), 0);
> +
> +	clk = clk_reg_prcc_pclk("p2_pclk6", "per2clk", clkrst2_base,
> +				BIT(6), 0);
> +
> +	clk = clk_reg_prcc_pclk("p2_pclk7", "per2clk", clkrst2_base,
> +				BIT(7), 0);
> +
> +	clk = clk_reg_prcc_pclk("p2_pclk8", "per2clk", clkrst2_base,
> +				BIT(8), 0);
> +
> +	clk = clk_reg_prcc_pclk("p2_pclk9", "per2clk", clkrst2_base,
> +				BIT(9), 0);
> +
> +	clk = clk_reg_prcc_pclk("p2_pclk10", "per2clk", clkrst2_base,
> +				BIT(10), 0);
> +
> +	clk = clk_reg_prcc_pclk("p2_pclk11", "per2clk", clkrst2_base,
> +				BIT(11), 0);
> +
> +	clk = clk_reg_prcc_pclk("p2_pclk12", "per2clk", clkrst2_base,
> +				BIT(12), 0);
> +
> +	clk = clk_reg_prcc_pclk("p3_pclk0", "per3clk", clkrst3_base,
> +				BIT(0), 0);
> +
> +	clk = clk_reg_prcc_pclk("p3_pclk1", "per3clk", clkrst3_base,
> +				BIT(1), 0);
> +
> +	clk = clk_reg_prcc_pclk("p3_pclk2", "per3clk", clkrst3_base,
> +				BIT(2), 0);
> +
> +	clk = clk_reg_prcc_pclk("p3_pclk3", "per3clk", clkrst3_base,
> +				BIT(3), 0);
> +
> +	clk = clk_reg_prcc_pclk("p3_pclk4", "per3clk", clkrst3_base,
> +				BIT(4), 0);
> +
> +	clk = clk_reg_prcc_pclk("p3_pclk5", "per3clk", clkrst3_base,
> +				BIT(5), 0);
> +
> +	clk = clk_reg_prcc_pclk("p3_pclk6", "per3clk", clkrst3_base,
> +				BIT(6), 0);
> +
> +	clk = clk_reg_prcc_pclk("p3_pclk7", "per3clk", clkrst3_base,
> +				BIT(7), 0);
> +
> +	clk = clk_reg_prcc_pclk("p3_pclk8", "per3clk", clkrst3_base,
> +				BIT(8), 0);
> +
> +	clk = clk_reg_prcc_pclk("p5_pclk0", "per5clk", clkrst5_base,
> +				BIT(0), 0);
> +
> +	clk = clk_reg_prcc_pclk("p5_pclk1", "per5clk", clkrst5_base,
> +				BIT(1), 0);
> +
> +	clk = clk_reg_prcc_pclk("p6_pclk0", "per6clk", clkrst6_base,
> +				BIT(0), 0);
> +
> +	clk = clk_reg_prcc_pclk("p6_pclk1", "per6clk", clkrst6_base,
> +				BIT(1), 0);
> +
> +	clk = clk_reg_prcc_pclk("p6_pclk2", "per6clk", clkrst6_base,
> +				BIT(2), 0);
> +
> +	clk = clk_reg_prcc_pclk("p6_pclk3", "per6clk", clkrst6_base,
> +				BIT(3), 0);
> +
> +	clk = clk_reg_prcc_pclk("p6_pclk4", "per6clk", clkrst6_base,
> +				BIT(4), 0);
> +
> +	clk = clk_reg_prcc_pclk("p6_pclk5", "per6clk", clkrst6_base,
> +				BIT(5), 0);
> +
> +	clk = clk_reg_prcc_pclk("p6_pclk6", "per6clk", clkrst6_base,
> +				BIT(6), 0);
> +
> +	clk = clk_reg_prcc_pclk("p6_pclk7", "per6clk", clkrst6_base,
> +				BIT(7), 0);
> +
> +	/* PRCC K-clocks
> +	 *
> +	 * FIXME: Some drivers requires PERPIH[n| to be automatically enabled
> +	 * by enabling just the K-clock, even if it is not a valid parent to
> +	 * the K-clock. Until drivers get fixed we might need some kind of
> +	 * "parent muxed join".
> +	 */
> +
> +	/* Periph1 */
> +	clk = clk_reg_prcc_kclk("p1_uart0_kclk", "uartclk",
> +			clkrst1_base, BIT(0), CLK_SET_RATE_GATE);
> +
> +	clk = clk_reg_prcc_kclk("p1_uart1_kclk", "uartclk",
> +			clkrst1_base, BIT(1), CLK_SET_RATE_GATE);
> +
> +	clk = clk_reg_prcc_kclk("p1_i2c1_kclk", "i2cclk",
> +			clkrst1_base, BIT(2), CLK_SET_RATE_GATE);
> +
> +	clk = clk_reg_prcc_kclk("p1_msp0_kclk", "msp02clk",
> +			clkrst1_base, BIT(3), CLK_SET_RATE_GATE);
> +
> +	clk = clk_reg_prcc_kclk("p1_msp1_kclk", "msp1clk",
> +			clkrst1_base, BIT(4), CLK_SET_RATE_GATE);
> +
> +	clk = clk_reg_prcc_kclk("p1_sdi0_kclk", "sdmmcclk",
> +			clkrst1_base, BIT(5), CLK_SET_RATE_GATE);
> +
> +	clk = clk_reg_prcc_kclk("p1_i2c2_kclk", "i2cclk",
> +			clkrst1_base, BIT(6), CLK_SET_RATE_GATE);
> +
> +	clk = clk_reg_prcc_kclk("p1_slimbus0_kclk", "slimclk",
> +			clkrst1_base, BIT(8), CLK_SET_RATE_GATE);
> +
> +	clk = clk_reg_prcc_kclk("p1_i2c4_kclk", "i2cclk",
> +			clkrst1_base, BIT(9), CLK_SET_RATE_GATE);
> +
> +	clk = clk_reg_prcc_kclk("p1_msp3_kclk", "msp1clk",
> +			clkrst1_base, BIT(10), CLK_SET_RATE_GATE);
> +
> +	/* Periph2 */
> +	clk = clk_reg_prcc_kclk("p2_i2c3_kclk", "i2cclk",
> +			clkrst2_base, BIT(0), CLK_SET_RATE_GATE);
> +
> +	clk = clk_reg_prcc_kclk("p2_sdi4_kclk", "sdmmcclk",
> +			clkrst2_base, BIT(2), CLK_SET_RATE_GATE);
> +
> +	clk = clk_reg_prcc_kclk("p2_msp2_kclk", "msp02clk",
> +			clkrst2_base, BIT(3), CLK_SET_RATE_GATE);
> +
> +	clk = clk_reg_prcc_kclk("p2_sdi1_kclk", "sdmmcclk",
> +			clkrst2_base, BIT(4), CLK_SET_RATE_GATE);
> +
> +	clk = clk_reg_prcc_kclk("p2_sdi3_kclk", "sdmmcclk",
> +			clkrst2_base, BIT(5), CLK_SET_RATE_GATE);
> +
> +	/* Note that rate is received from parent. */
> +	clk = clk_reg_prcc_kclk("p2_ssirx_kclk", "hsirxclk",
> +			clkrst2_base, BIT(6),
> +			CLK_SET_RATE_GATE|CLK_SET_RATE_PARENT);
> +	clk = clk_reg_prcc_kclk("p2_ssitx_kclk", "hsitxclk",
> +			clkrst2_base, BIT(7),
> +			CLK_SET_RATE_GATE|CLK_SET_RATE_PARENT);
> +
> +	/* Periph3 */
> +	clk = clk_reg_prcc_kclk("p3_ssp0_kclk", "sspclk",
> +			clkrst3_base, BIT(1), CLK_SET_RATE_GATE);
> +
> +	clk = clk_reg_prcc_kclk("p3_ssp1_kclk", "sspclk",
> +			clkrst3_base, BIT(2), CLK_SET_RATE_GATE);
> +
> +	clk = clk_reg_prcc_kclk("p3_i2c0_kclk", "i2cclk",
> +			clkrst3_base, BIT(3), CLK_SET_RATE_GATE);
> +
> +	clk = clk_reg_prcc_kclk("p3_sdi2_kclk", "sdmmcclk",
> +			clkrst3_base, BIT(4), CLK_SET_RATE_GATE);
> +
> +	clk = clk_reg_prcc_kclk("p3_ske_kclk", "rtc32k",
> +			clkrst3_base, BIT(5), CLK_SET_RATE_GATE);
> +
> +	clk = clk_reg_prcc_kclk("p3_uart2_kclk", "uartclk",
> +			clkrst3_base, BIT(6), CLK_SET_RATE_GATE);
> +
> +	clk = clk_reg_prcc_kclk("p3_sdi5_kclk", "sdmmcclk",
> +			clkrst3_base, BIT(7), CLK_SET_RATE_GATE);
> +
> +	/* Periph6 */
> +	clk = clk_reg_prcc_kclk("p3_rng_kclk", "rngclk",
> +			clkrst6_base, BIT(0), CLK_SET_RATE_GATE);
> +}
> diff --git a/include/linux/platform_data/clk-ux500.h b/include/linux/platform_data/clk-ux500.h
> index 9d98f3a..97baf83 100644
> --- a/include/linux/platform_data/clk-ux500.h
> +++ b/include/linux/platform_data/clk-ux500.h
> @@ -10,6 +10,9 @@
>  #ifndef __CLK_UX500_H
>  #define __CLK_UX500_H
>  
> +void u8500_of_clk_init(u32 clkrst1_base, u32 clkrst2_base, u32 clkrst3_base,
> +		       u32 clkrst5_base, u32 clkrst6_base);
> +
>  void u8500_clk_init(u32 clkrst1_base, u32 clkrst2_base, u32 clkrst3_base,
>  		    u32 clkrst5_base, u32 clkrst6_base);
>  void u9540_clk_init(u32 clkrst1_base, u32 clkrst2_base, u32 clkrst3_base,

-- 
Lee Jones
Linaro STMicroelectronics Landing Team Lead
Linaro.org ? Open source software for ARM SoCs
Follow Linaro: Facebook | Twitter | Blog

WARNING: multiple messages have this Message-ID (diff)
From: Lee Jones <lee.jones@linaro.org>
To: linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org
Cc: arnd@arndb.de, linus.walleij@linaro.org,
	Mike Turquette <mturquette@linaro.org>
Subject: Re: [PATCH 22/41] clk: ux500: Copy u8500_clk_init() ready for DT enablement
Date: Thu, 19 Sep 2013 13:31:03 +0100	[thread overview]
Message-ID: <20130919123103.GJ22389@lee--X1> (raw)
In-Reply-To: <1379506478-16625-23-git-send-email-lee.jones@linaro.org>

Hi Mike,

Sorry for top, posting.

This one requires your attention, thanks.

> Here we're using the old clock initialisation function as a template.
> It's necessary to remove all of the clk_register_clkdev() calls as
> they don't make sense when booting with Device Tree.
> 
> Cc: Mike Turquette <mturquette@linaro.org>
> Signed-off-by: Lee Jones <lee.jones@linaro.org>
> ---
>  drivers/clk/ux500/Makefile              |   1 +
>  drivers/clk/ux500/u8500_of_clk.c        | 381 ++++++++++++++++++++++++++++++++
>  include/linux/platform_data/clk-ux500.h |   3 +
>  3 files changed, 385 insertions(+)
>  create mode 100644 drivers/clk/ux500/u8500_of_clk.c
> 
> diff --git a/drivers/clk/ux500/Makefile b/drivers/clk/ux500/Makefile
> index c6a806e..521483f 100644
> --- a/drivers/clk/ux500/Makefile
> +++ b/drivers/clk/ux500/Makefile
> @@ -8,6 +8,7 @@ obj-y += clk-prcmu.o
>  obj-y += clk-sysctrl.o
>  
>  # Clock definitions
> +obj-y += u8500_of_clk.o
>  obj-y += u8500_clk.o
>  obj-y += u9540_clk.o
>  obj-y += u8540_clk.o
> diff --git a/drivers/clk/ux500/u8500_of_clk.c b/drivers/clk/ux500/u8500_of_clk.c
> new file mode 100644
> index 0000000..ceebce6
> --- /dev/null
> +++ b/drivers/clk/ux500/u8500_of_clk.c
> @@ -0,0 +1,381 @@
> +/*
> + * Clock definitions for u8500 platform.
> + *
> + * Copyright (C) 2012 ST-Ericsson SA
> + * Author: Ulf Hansson <ulf.hansson@linaro.org>
> + *
> + * License terms: GNU General Public License (GPL) version 2
> + */
> +
> +#include <linux/clk.h>
> +#include <linux/clkdev.h>
> +#include <linux/clk-provider.h>
> +#include <linux/mfd/dbx500-prcmu.h>
> +#include <linux/platform_data/clk-ux500.h>
> +#include "clk.h"
> +
> +void u8500_of_clk_init(u32 clkrst1_base, u32 clkrst2_base, u32 clkrst3_base,
> +		       u32 clkrst5_base, u32 clkrst6_base)
> +{
> +	struct prcmu_fw_version *fw_version;
> +	const char *sgaclk_parent = NULL;
> +	struct clk *clk;
> +
> +	/* Clock sources */
> +	clk = clk_reg_prcmu_gate("soc0_pll", NULL, PRCMU_PLLSOC0,
> +				CLK_IS_ROOT|CLK_IGNORE_UNUSED);
> +
> +	clk = clk_reg_prcmu_gate("soc1_pll", NULL, PRCMU_PLLSOC1,
> +				CLK_IS_ROOT|CLK_IGNORE_UNUSED);
> +
> +	clk = clk_reg_prcmu_gate("ddr_pll", NULL, PRCMU_PLLDDR,
> +				CLK_IS_ROOT|CLK_IGNORE_UNUSED);
> +
> +	/* FIXME: Add sys, ulp and int clocks here. */
> +
> +	clk = clk_register_fixed_rate(NULL, "rtc32k", "NULL",
> +				CLK_IS_ROOT|CLK_IGNORE_UNUSED,
> +				32768);
> +
> +	/* PRCMU clocks */
> +	fw_version = prcmu_get_fw_version();
> +	if (fw_version != NULL) {
> +		switch (fw_version->project) {
> +		case PRCMU_FW_PROJECT_U8500_C2:
> +		case PRCMU_FW_PROJECT_U8520:
> +		case PRCMU_FW_PROJECT_U8420:
> +			sgaclk_parent = "soc0_pll";
> +			break;
> +		default:
> +			break;
> +		}
> +	}
> +
> +	if (sgaclk_parent)
> +		clk = clk_reg_prcmu_gate("sgclk", sgaclk_parent,
> +					PRCMU_SGACLK, 0);
> +	else
> +		clk = clk_reg_prcmu_gate("sgclk", NULL,
> +					PRCMU_SGACLK, CLK_IS_ROOT);
> +
> +	clk = clk_reg_prcmu_gate("uartclk", NULL, PRCMU_UARTCLK, CLK_IS_ROOT);
> +
> +	clk = clk_reg_prcmu_gate("msp02clk", NULL, PRCMU_MSP02CLK, CLK_IS_ROOT);
> +
> +	clk = clk_reg_prcmu_gate("msp1clk", NULL, PRCMU_MSP1CLK, CLK_IS_ROOT);
> +
> +	clk = clk_reg_prcmu_gate("i2cclk", NULL, PRCMU_I2CCLK, CLK_IS_ROOT);
> +
> +	clk = clk_reg_prcmu_gate("slimclk", NULL, PRCMU_SLIMCLK, CLK_IS_ROOT);
> +
> +	clk = clk_reg_prcmu_gate("per1clk", NULL, PRCMU_PER1CLK, CLK_IS_ROOT);
> +
> +	clk = clk_reg_prcmu_gate("per2clk", NULL, PRCMU_PER2CLK, CLK_IS_ROOT);
> +
> +	clk = clk_reg_prcmu_gate("per3clk", NULL, PRCMU_PER3CLK, CLK_IS_ROOT);
> +
> +	clk = clk_reg_prcmu_gate("per5clk", NULL, PRCMU_PER5CLK, CLK_IS_ROOT);
> +
> +	clk = clk_reg_prcmu_gate("per6clk", NULL, PRCMU_PER6CLK, CLK_IS_ROOT);
> +
> +	clk = clk_reg_prcmu_gate("per7clk", NULL, PRCMU_PER7CLK, CLK_IS_ROOT);
> +
> +	clk = clk_reg_prcmu_scalable("lcdclk", NULL, PRCMU_LCDCLK, 0,
> +				CLK_IS_ROOT|CLK_SET_RATE_GATE);
> +
> +	clk = clk_reg_prcmu_opp_gate("bmlclk", NULL, PRCMU_BMLCLK, CLK_IS_ROOT);
> +
> +	clk = clk_reg_prcmu_scalable("hsitxclk", NULL, PRCMU_HSITXCLK, 0,
> +				CLK_IS_ROOT|CLK_SET_RATE_GATE);
> +
> +	clk = clk_reg_prcmu_scalable("hsirxclk", NULL, PRCMU_HSIRXCLK, 0,
> +				CLK_IS_ROOT|CLK_SET_RATE_GATE);
> +
> +	clk = clk_reg_prcmu_scalable("hdmiclk", NULL, PRCMU_HDMICLK, 0,
> +				CLK_IS_ROOT|CLK_SET_RATE_GATE);
> +
> +	clk = clk_reg_prcmu_gate("apeatclk", NULL, PRCMU_APEATCLK, CLK_IS_ROOT);
> +
> +	clk = clk_reg_prcmu_gate("apetraceclk", NULL, PRCMU_APETRACECLK,
> +				CLK_IS_ROOT);
> +
> +	clk = clk_reg_prcmu_gate("mcdeclk", NULL, PRCMU_MCDECLK, CLK_IS_ROOT);
> +
> +	clk = clk_reg_prcmu_opp_gate("ipi2cclk", NULL, PRCMU_IPI2CCLK,
> +				CLK_IS_ROOT);
> +
> +	clk = clk_reg_prcmu_gate("dsialtclk", NULL, PRCMU_DSIALTCLK,
> +				CLK_IS_ROOT);
> +
> +	clk = clk_reg_prcmu_gate("dmaclk", NULL, PRCMU_DMACLK, CLK_IS_ROOT);
> +
> +	clk = clk_reg_prcmu_gate("b2r2clk", NULL, PRCMU_B2R2CLK, CLK_IS_ROOT);
> +
> +	clk = clk_reg_prcmu_scalable("tvclk", NULL, PRCMU_TVCLK, 0,
> +				CLK_IS_ROOT|CLK_SET_RATE_GATE);
> +
> +	clk = clk_reg_prcmu_gate("sspclk", NULL, PRCMU_SSPCLK, CLK_IS_ROOT);
> +
> +	clk = clk_reg_prcmu_gate("rngclk", NULL, PRCMU_RNGCLK, CLK_IS_ROOT);
> +
> +	clk = clk_reg_prcmu_gate("uiccclk", NULL, PRCMU_UICCCLK, CLK_IS_ROOT);
> +
> +	clk = clk_reg_prcmu_gate("timclk", NULL, PRCMU_TIMCLK, CLK_IS_ROOT);
> +
> +	clk = clk_reg_prcmu_opp_volt_scalable("sdmmcclk", NULL, PRCMU_SDMMCCLK,
> +					100000000,
> +					CLK_IS_ROOT|CLK_SET_RATE_GATE);
> +
> +	clk = clk_reg_prcmu_scalable("dsi_pll", "hdmiclk",
> +				PRCMU_PLLDSI, 0, CLK_SET_RATE_GATE);
> +
> +
> +	clk = clk_reg_prcmu_scalable("dsi0clk", "dsi_pll",
> +				PRCMU_DSI0CLK, 0, CLK_SET_RATE_GATE);
> +
> +	clk = clk_reg_prcmu_scalable("dsi1clk", "dsi_pll",
> +				PRCMU_DSI1CLK, 0, CLK_SET_RATE_GATE);
> +
> +	clk = clk_reg_prcmu_scalable("dsi0escclk", "tvclk",
> +				PRCMU_DSI0ESCCLK, 0, CLK_SET_RATE_GATE);
> +
> +	clk = clk_reg_prcmu_scalable("dsi1escclk", "tvclk",
> +				PRCMU_DSI1ESCCLK, 0, CLK_SET_RATE_GATE);
> +
> +	clk = clk_reg_prcmu_scalable("dsi2escclk", "tvclk",
> +				PRCMU_DSI2ESCCLK, 0, CLK_SET_RATE_GATE);
> +
> +	clk = clk_reg_prcmu_scalable_rate("armss", NULL,
> +				PRCMU_ARMSS, 0, CLK_IS_ROOT|CLK_IGNORE_UNUSED);
> +
> +	clk = clk_register_fixed_factor(NULL, "smp_twd", "armss",
> +				CLK_IGNORE_UNUSED, 1, 2);
> +
> +	/*
> +	 * FIXME: Add special handled PRCMU clocks here:
> +	 * 1. clkout0yuv, use PRCMU as parent + need regulator + pinctrl.
> +	 * 2. ab9540_clkout1yuv, see clkout0yuv
> +	 */
> +
> +	/* PRCC P-clocks */
> +	clk = clk_reg_prcc_pclk("p1_pclk0", "per1clk", clkrst1_base,
> +				BIT(0), 0);
> +
> +	clk = clk_reg_prcc_pclk("p1_pclk1", "per1clk", clkrst1_base,
> +				BIT(1), 0);
> +
> +	clk = clk_reg_prcc_pclk("p1_pclk2", "per1clk", clkrst1_base,
> +				BIT(2), 0);
> +
> +	clk = clk_reg_prcc_pclk("p1_pclk3", "per1clk", clkrst1_base,
> +				BIT(3), 0);
> +
> +	clk = clk_reg_prcc_pclk("p1_pclk4", "per1clk", clkrst1_base,
> +				BIT(4), 0);
> +
> +	clk = clk_reg_prcc_pclk("p1_pclk5", "per1clk", clkrst1_base,
> +				BIT(5), 0);
> +
> +	clk = clk_reg_prcc_pclk("p1_pclk6", "per1clk", clkrst1_base,
> +				BIT(6), 0);
> +
> +	clk = clk_reg_prcc_pclk("p1_pclk7", "per1clk", clkrst1_base,
> +				BIT(7), 0);
> +
> +	clk = clk_reg_prcc_pclk("p1_pclk8", "per1clk", clkrst1_base,
> +				BIT(8), 0);
> +
> +	clk = clk_reg_prcc_pclk("p1_pclk9", "per1clk", clkrst1_base,
> +				BIT(9), 0);
> +
> +	clk = clk_reg_prcc_pclk("p1_pclk10", "per1clk", clkrst1_base,
> +				BIT(10), 0);
> +
> +	clk = clk_reg_prcc_pclk("p1_pclk11", "per1clk", clkrst1_base,
> +				BIT(11), 0);
> +
> +	clk = clk_reg_prcc_pclk("p2_pclk0", "per2clk", clkrst2_base,
> +				BIT(0), 0);
> +
> +	clk = clk_reg_prcc_pclk("p2_pclk1", "per2clk", clkrst2_base,
> +				BIT(1), 0);
> +
> +	clk = clk_reg_prcc_pclk("p2_pclk2", "per2clk", clkrst2_base,
> +				BIT(2), 0);
> +
> +	clk = clk_reg_prcc_pclk("p2_pclk3", "per2clk", clkrst2_base,
> +				BIT(3), 0);
> +
> +	clk = clk_reg_prcc_pclk("p2_pclk4", "per2clk", clkrst2_base,
> +				BIT(4), 0);
> +
> +	clk = clk_reg_prcc_pclk("p2_pclk5", "per2clk", clkrst2_base,
> +				BIT(5), 0);
> +
> +	clk = clk_reg_prcc_pclk("p2_pclk6", "per2clk", clkrst2_base,
> +				BIT(6), 0);
> +
> +	clk = clk_reg_prcc_pclk("p2_pclk7", "per2clk", clkrst2_base,
> +				BIT(7), 0);
> +
> +	clk = clk_reg_prcc_pclk("p2_pclk8", "per2clk", clkrst2_base,
> +				BIT(8), 0);
> +
> +	clk = clk_reg_prcc_pclk("p2_pclk9", "per2clk", clkrst2_base,
> +				BIT(9), 0);
> +
> +	clk = clk_reg_prcc_pclk("p2_pclk10", "per2clk", clkrst2_base,
> +				BIT(10), 0);
> +
> +	clk = clk_reg_prcc_pclk("p2_pclk11", "per2clk", clkrst2_base,
> +				BIT(11), 0);
> +
> +	clk = clk_reg_prcc_pclk("p2_pclk12", "per2clk", clkrst2_base,
> +				BIT(12), 0);
> +
> +	clk = clk_reg_prcc_pclk("p3_pclk0", "per3clk", clkrst3_base,
> +				BIT(0), 0);
> +
> +	clk = clk_reg_prcc_pclk("p3_pclk1", "per3clk", clkrst3_base,
> +				BIT(1), 0);
> +
> +	clk = clk_reg_prcc_pclk("p3_pclk2", "per3clk", clkrst3_base,
> +				BIT(2), 0);
> +
> +	clk = clk_reg_prcc_pclk("p3_pclk3", "per3clk", clkrst3_base,
> +				BIT(3), 0);
> +
> +	clk = clk_reg_prcc_pclk("p3_pclk4", "per3clk", clkrst3_base,
> +				BIT(4), 0);
> +
> +	clk = clk_reg_prcc_pclk("p3_pclk5", "per3clk", clkrst3_base,
> +				BIT(5), 0);
> +
> +	clk = clk_reg_prcc_pclk("p3_pclk6", "per3clk", clkrst3_base,
> +				BIT(6), 0);
> +
> +	clk = clk_reg_prcc_pclk("p3_pclk7", "per3clk", clkrst3_base,
> +				BIT(7), 0);
> +
> +	clk = clk_reg_prcc_pclk("p3_pclk8", "per3clk", clkrst3_base,
> +				BIT(8), 0);
> +
> +	clk = clk_reg_prcc_pclk("p5_pclk0", "per5clk", clkrst5_base,
> +				BIT(0), 0);
> +
> +	clk = clk_reg_prcc_pclk("p5_pclk1", "per5clk", clkrst5_base,
> +				BIT(1), 0);
> +
> +	clk = clk_reg_prcc_pclk("p6_pclk0", "per6clk", clkrst6_base,
> +				BIT(0), 0);
> +
> +	clk = clk_reg_prcc_pclk("p6_pclk1", "per6clk", clkrst6_base,
> +				BIT(1), 0);
> +
> +	clk = clk_reg_prcc_pclk("p6_pclk2", "per6clk", clkrst6_base,
> +				BIT(2), 0);
> +
> +	clk = clk_reg_prcc_pclk("p6_pclk3", "per6clk", clkrst6_base,
> +				BIT(3), 0);
> +
> +	clk = clk_reg_prcc_pclk("p6_pclk4", "per6clk", clkrst6_base,
> +				BIT(4), 0);
> +
> +	clk = clk_reg_prcc_pclk("p6_pclk5", "per6clk", clkrst6_base,
> +				BIT(5), 0);
> +
> +	clk = clk_reg_prcc_pclk("p6_pclk6", "per6clk", clkrst6_base,
> +				BIT(6), 0);
> +
> +	clk = clk_reg_prcc_pclk("p6_pclk7", "per6clk", clkrst6_base,
> +				BIT(7), 0);
> +
> +	/* PRCC K-clocks
> +	 *
> +	 * FIXME: Some drivers requires PERPIH[n| to be automatically enabled
> +	 * by enabling just the K-clock, even if it is not a valid parent to
> +	 * the K-clock. Until drivers get fixed we might need some kind of
> +	 * "parent muxed join".
> +	 */
> +
> +	/* Periph1 */
> +	clk = clk_reg_prcc_kclk("p1_uart0_kclk", "uartclk",
> +			clkrst1_base, BIT(0), CLK_SET_RATE_GATE);
> +
> +	clk = clk_reg_prcc_kclk("p1_uart1_kclk", "uartclk",
> +			clkrst1_base, BIT(1), CLK_SET_RATE_GATE);
> +
> +	clk = clk_reg_prcc_kclk("p1_i2c1_kclk", "i2cclk",
> +			clkrst1_base, BIT(2), CLK_SET_RATE_GATE);
> +
> +	clk = clk_reg_prcc_kclk("p1_msp0_kclk", "msp02clk",
> +			clkrst1_base, BIT(3), CLK_SET_RATE_GATE);
> +
> +	clk = clk_reg_prcc_kclk("p1_msp1_kclk", "msp1clk",
> +			clkrst1_base, BIT(4), CLK_SET_RATE_GATE);
> +
> +	clk = clk_reg_prcc_kclk("p1_sdi0_kclk", "sdmmcclk",
> +			clkrst1_base, BIT(5), CLK_SET_RATE_GATE);
> +
> +	clk = clk_reg_prcc_kclk("p1_i2c2_kclk", "i2cclk",
> +			clkrst1_base, BIT(6), CLK_SET_RATE_GATE);
> +
> +	clk = clk_reg_prcc_kclk("p1_slimbus0_kclk", "slimclk",
> +			clkrst1_base, BIT(8), CLK_SET_RATE_GATE);
> +
> +	clk = clk_reg_prcc_kclk("p1_i2c4_kclk", "i2cclk",
> +			clkrst1_base, BIT(9), CLK_SET_RATE_GATE);
> +
> +	clk = clk_reg_prcc_kclk("p1_msp3_kclk", "msp1clk",
> +			clkrst1_base, BIT(10), CLK_SET_RATE_GATE);
> +
> +	/* Periph2 */
> +	clk = clk_reg_prcc_kclk("p2_i2c3_kclk", "i2cclk",
> +			clkrst2_base, BIT(0), CLK_SET_RATE_GATE);
> +
> +	clk = clk_reg_prcc_kclk("p2_sdi4_kclk", "sdmmcclk",
> +			clkrst2_base, BIT(2), CLK_SET_RATE_GATE);
> +
> +	clk = clk_reg_prcc_kclk("p2_msp2_kclk", "msp02clk",
> +			clkrst2_base, BIT(3), CLK_SET_RATE_GATE);
> +
> +	clk = clk_reg_prcc_kclk("p2_sdi1_kclk", "sdmmcclk",
> +			clkrst2_base, BIT(4), CLK_SET_RATE_GATE);
> +
> +	clk = clk_reg_prcc_kclk("p2_sdi3_kclk", "sdmmcclk",
> +			clkrst2_base, BIT(5), CLK_SET_RATE_GATE);
> +
> +	/* Note that rate is received from parent. */
> +	clk = clk_reg_prcc_kclk("p2_ssirx_kclk", "hsirxclk",
> +			clkrst2_base, BIT(6),
> +			CLK_SET_RATE_GATE|CLK_SET_RATE_PARENT);
> +	clk = clk_reg_prcc_kclk("p2_ssitx_kclk", "hsitxclk",
> +			clkrst2_base, BIT(7),
> +			CLK_SET_RATE_GATE|CLK_SET_RATE_PARENT);
> +
> +	/* Periph3 */
> +	clk = clk_reg_prcc_kclk("p3_ssp0_kclk", "sspclk",
> +			clkrst3_base, BIT(1), CLK_SET_RATE_GATE);
> +
> +	clk = clk_reg_prcc_kclk("p3_ssp1_kclk", "sspclk",
> +			clkrst3_base, BIT(2), CLK_SET_RATE_GATE);
> +
> +	clk = clk_reg_prcc_kclk("p3_i2c0_kclk", "i2cclk",
> +			clkrst3_base, BIT(3), CLK_SET_RATE_GATE);
> +
> +	clk = clk_reg_prcc_kclk("p3_sdi2_kclk", "sdmmcclk",
> +			clkrst3_base, BIT(4), CLK_SET_RATE_GATE);
> +
> +	clk = clk_reg_prcc_kclk("p3_ske_kclk", "rtc32k",
> +			clkrst3_base, BIT(5), CLK_SET_RATE_GATE);
> +
> +	clk = clk_reg_prcc_kclk("p3_uart2_kclk", "uartclk",
> +			clkrst3_base, BIT(6), CLK_SET_RATE_GATE);
> +
> +	clk = clk_reg_prcc_kclk("p3_sdi5_kclk", "sdmmcclk",
> +			clkrst3_base, BIT(7), CLK_SET_RATE_GATE);
> +
> +	/* Periph6 */
> +	clk = clk_reg_prcc_kclk("p3_rng_kclk", "rngclk",
> +			clkrst6_base, BIT(0), CLK_SET_RATE_GATE);
> +}
> diff --git a/include/linux/platform_data/clk-ux500.h b/include/linux/platform_data/clk-ux500.h
> index 9d98f3a..97baf83 100644
> --- a/include/linux/platform_data/clk-ux500.h
> +++ b/include/linux/platform_data/clk-ux500.h
> @@ -10,6 +10,9 @@
>  #ifndef __CLK_UX500_H
>  #define __CLK_UX500_H
>  
> +void u8500_of_clk_init(u32 clkrst1_base, u32 clkrst2_base, u32 clkrst3_base,
> +		       u32 clkrst5_base, u32 clkrst6_base);
> +
>  void u8500_clk_init(u32 clkrst1_base, u32 clkrst2_base, u32 clkrst3_base,
>  		    u32 clkrst5_base, u32 clkrst6_base);
>  void u9540_clk_init(u32 clkrst1_base, u32 clkrst2_base, u32 clkrst3_base,

-- 
Lee Jones
Linaro STMicroelectronics Landing Team Lead
Linaro.org │ Open source software for ARM SoCs
Follow Linaro: Facebook | Twitter | Blog

  reply	other threads:[~2013-09-19 12:31 UTC|newest]

Thread overview: 100+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-09-18 12:13 [PATCH v2 00/41] Enable common clock with Device Tree on ux500 platforms Lee Jones
2013-09-18 12:13 ` Lee Jones
2013-09-18 12:13 ` [PATCH 01/41] mfd: dbx500-prcmu: Correctly reorder PRCMU clock identifiers Lee Jones
2013-09-18 12:13   ` Lee Jones
2013-09-18 12:23   ` Linus Walleij
2013-09-18 12:23     ` Linus Walleij
2013-09-18 12:13 ` [PATCH 02/41] mfd: dbx500-prcmu: Move PRCMU numerical clock identifiers into DT include file Lee Jones
2013-09-18 12:13   ` Lee Jones
2013-09-18 12:24   ` Linus Walleij
2013-09-18 12:24     ` Linus Walleij
2013-09-18 12:14 ` [PATCH 03/41] mfd: dbx500: Remove any mention of the BML8580CLK Lee Jones
2013-09-18 12:14   ` Lee Jones
2013-09-18 12:14 ` [PATCH 04/41] ARM: ux500: Add PRCMU clock node to DBx500 Device Tree Lee Jones
2013-09-18 12:14   ` Lee Jones
2013-09-18 12:14 ` [PATCH 05/41] ARM: ux500: Supply the DMA clock lookup to the DBX500 DT Lee Jones
2013-09-18 12:14   ` Lee Jones
2013-09-18 12:14 ` [PATCH 06/41] ARM: ux500: Add PRCC Peripheral clock node to DBx500 Device Tree Lee Jones
2013-09-18 12:14   ` Lee Jones
2013-09-18 12:14 ` [PATCH 07/41] ARM: ux500: Supply the GPIO clocks lookup to the DBX500 DT Lee Jones
2013-09-18 12:14   ` Lee Jones
2013-09-18 12:14 ` [PATCH 08/41] ARM: ux500: Supply the USB clock " Lee Jones
2013-09-18 12:14   ` Lee Jones
2013-09-18 12:14 ` [PATCH 09/41] ARM: ux500: Supply the Ethernet clock lookup to Snowball's DT Lee Jones
2013-09-18 12:14   ` Lee Jones
2013-09-18 12:14 ` [PATCH 10/41] ARM: ux500: Add PRCC Kernel clock node to DBx500 Device Tree Lee Jones
2013-09-18 12:14   ` Lee Jones
2013-09-18 12:14 ` [PATCH 11/41] ARM: ux500: Supply the I2C clocks lookup to the DBX500 DT Lee Jones
2013-09-18 12:14   ` Lee Jones
2013-09-18 12:14 ` [PATCH 12/41] ARM: ux500: Supply the UART " Lee Jones
2013-09-18 12:14   ` Lee Jones
2013-09-18 12:14 ` [PATCH 13/41] ARM: ux500: Supply the SDI (MMC) " Lee Jones
2013-09-18 12:14   ` Lee Jones
2013-09-18 12:14 ` [PATCH 14/41] ARM: ux500: Supply the MSP (Audio) " Lee Jones
2013-09-18 12:14   ` Lee Jones
2013-09-18 12:14 ` [PATCH 15/41] ARM: ux500: Add RTC (fixed-frequency) clock node to DBx500 Device Tree Lee Jones
2013-09-18 12:14   ` Lee Jones
2013-09-18 12:14 ` [PATCH 16/41] ARM: ux500: Supply the RTC clock lookup to the DBX500 DT Lee Jones
2013-09-18 12:14   ` Lee Jones
2013-09-18 12:14 ` [PATCH 17/41] ARM: ux500: Add TWD (fixed-factor) clock node to DBx500 Device Tree Lee Jones
2013-09-18 12:14   ` Lee Jones
2013-09-18 12:14 ` [PATCH 18/41] ARM: ux500: Supply the TWD Timer clock lookup to the DBX500 DT Lee Jones
2013-09-18 12:14   ` Lee Jones
2013-09-18 12:14 ` [PATCH 19/41] ARM: ux500: Add a DT node for the Nomadik System Timer (MTU0) Lee Jones
2013-09-18 12:14   ` Lee Jones
2013-09-18 12:14 ` [PATCH 20/41] ARM: ux500: Don't attempt to enable the Nomadik System Timer twice Lee Jones
2013-09-18 12:14   ` Lee Jones
2013-09-18 12:14 ` [PATCH 21/41] clk: ux500: Remove BML8580 clock Lee Jones
2013-09-18 12:14   ` Lee Jones
2013-09-18 12:14 ` [PATCH 22/41] clk: ux500: Copy u8500_clk_init() ready for DT enablement Lee Jones
2013-09-18 12:14   ` Lee Jones
2013-09-19 12:31   ` Lee Jones [this message]
2013-09-19 12:31     ` Lee Jones
2013-09-20 20:59   ` Linus Walleij
2013-09-20 20:59     ` Linus Walleij
2013-12-13  1:51     ` Mike Turquette
2013-12-13  1:51       ` Mike Turquette
2013-12-19 20:15       ` Ulf Hansson
2013-12-19 20:15         ` Ulf Hansson
2013-09-18 12:14 ` [PATCH 23/41] clk: ux500: Provide u8500_clk with skeleton Device Tree support Lee Jones
2013-09-18 12:14   ` Lee Jones
2013-09-18 12:14 ` [PATCH 24/41] clk: ux500: Add a 2-cell Device Tree parser for obtaining PRCC clocks Lee Jones
2013-09-18 12:14   ` Lee Jones
2013-09-18 12:14 ` [PATCH 25/41] clk: ux500: Add Device Tree support for the PRCMU clock Lee Jones
2013-09-18 12:14   ` Lee Jones
2013-09-18 12:14 ` [PATCH 26/41] clk: ux500: Add Device Tree support for the PRCC Peripheral clock Lee Jones
2013-09-18 12:14   ` Lee Jones
2013-09-18 12:14 ` [PATCH 27/41] clk: ux500: Add Device Tree support for the PRCC Kernel clock Lee Jones
2013-09-18 12:14   ` Lee Jones
2013-09-18 12:14 ` [PATCH 28/41] clk: ux500: Add Device Tree support for the RTC clock Lee Jones
2013-09-18 12:14   ` Lee Jones
2013-09-18 12:14 ` [PATCH 29/41] clk: ux500: Add Device Tree support for the TWD clock Lee Jones
2013-09-18 12:14   ` Lee Jones
2013-09-18 12:14 ` [PATCH 30/41] usb: musb: ux500: Don't supply a con_id when requesting the clock Lee Jones
2013-09-18 12:14   ` Lee Jones
2013-09-20 20:41   ` Linus Walleij
2013-09-20 20:41     ` Linus Walleij
2013-09-23 20:43   ` Felipe Balbi
2013-09-23 20:43     ` Felipe Balbi
2013-09-18 12:14 ` [PATCH 31/41] ARM: ux500: Call appropriate clock initialisation based on DT or !DT booting Lee Jones
2013-09-18 12:14   ` Lee Jones
2013-09-18 12:14 ` [PATCH 32/41] ARM: ux500: Remove AUXDATA relating to GPIO clock-name bindings Lee Jones
2013-09-18 12:14   ` Lee Jones
2013-09-18 12:14 ` [PATCH 33/41] ARM: ux500: Remove AUXDATA relating to UART " Lee Jones
2013-09-18 12:14   ` Lee Jones
2013-09-18 12:14 ` [PATCH 34/41] ARM: ux500: Remove AUXDATA relating to I2C " Lee Jones
2013-09-18 12:14   ` Lee Jones
2013-09-18 12:14 ` [PATCH 35/41] ARM: ux500: Relocate AUXDATA relating to MSP (Audio) Lee Jones
2013-09-18 12:14   ` Lee Jones
2013-09-18 12:14 ` [PATCH 36/41] ARM: ux500: Remove AUXDATA relating to USB clock-name bindings Lee Jones
2013-09-18 12:14   ` Lee Jones
2013-09-18 12:14 ` [PATCH 37/41] ARM: ux500: Remove AUXDATA relating to Ethernet " Lee Jones
2013-09-18 12:14   ` Lee Jones
2013-09-18 12:14 ` [PATCH 38/41] ARM: ux500: Remove AUXDATA relating to DMA " Lee Jones
2013-09-18 12:14   ` Lee Jones
2013-09-18 12:14 ` [PATCH 39/41] ARM: ux500: Reclassify PRCMU AUXDATA entry Lee Jones
2013-09-18 12:14   ` Lee Jones
2013-09-18 12:14 ` [PATCH 40/41] ARM: ux500: Remove SSP AUXDATA pertaining to DMA bindings Lee Jones
2013-09-18 12:14   ` Lee Jones
2013-09-18 12:14 ` [PATCH 41/41] ARM: ux500: Fix trivial whitespace/tabbing issue Lee Jones
2013-09-18 12:14   ` Lee Jones

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=20130919123103.GJ22389@lee--X1 \
    --to=lee.jones@linaro.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    /path/to/YOUR_REPLY

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

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.