Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2f129bf4 authored by Andrew Lunn's avatar Andrew Lunn Committed by Mike Turquette
Browse files

ARM: Orion: Add clocks using the generic clk infrastructure.



Add tclk as a fixed rate clock for all platforms. In addition, on
kirkwood, add a gated clock for most of the clocks which can be gated.

Signed-off-by: default avatarAndrew Lunn <andrew@lunn.ch>
Tested-by: default avatarJamie Lentin <jm@lentin.co.uk>
[mturquette@linaro.org: removed redundant CLKDEV_LOOKUP from Kconfig]
[mturquette@linaro.org: removed redundant clk.h from mach-dove/common.c]
Signed-off-by: default avatarMike Turquette <mturquette@linaro.org>
parent f0948f59
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -1139,6 +1139,7 @@ config PLAT_ORION
	bool
	select CLKSRC_MMIO
	select GENERIC_IRQ_CHIP
	select COMMON_CLK

config PLAT_PXA
	bool
+16 −6
Original line number Diff line number Diff line
@@ -13,7 +13,7 @@
#include <linux/init.h>
#include <linux/platform_device.h>
#include <linux/pci.h>
#include <linux/clk.h>
#include <linux/clk-provider.h>
#include <linux/ata_platform.h>
#include <linux/gpio.h>
#include <asm/page.h>
@@ -67,6 +67,17 @@ void __init dove_map_io(void)
	iotable_init(dove_io_desc, ARRAY_SIZE(dove_io_desc));
}

/*****************************************************************************
 * CLK tree
 ****************************************************************************/
static struct clk *tclk;

static void __init clk_init(void)
{
	tclk = clk_register_fixed_rate(NULL, "tclk", NULL, CLK_IS_ROOT,
				       get_tclk());
}

/*****************************************************************************
 * EHCI0
 ****************************************************************************/
@@ -272,18 +283,17 @@ void __init dove_sdio1_init(void)

void __init dove_init(void)
{
	int tclk;

	tclk = get_tclk();

	printk(KERN_INFO "Dove 88AP510 SoC, ");
	printk(KERN_INFO "TCLK = %dMHz\n", (tclk + 499999) / 1000000);
	printk(KERN_INFO "TCLK = %dMHz\n", (get_tclk() + 499999) / 1000000);

#ifdef CONFIG_CACHE_TAUROS2
	tauros2_init();
#endif
	dove_setup_cpu_mbus();

	/* Setup root of clk tree */
	clk_init();

	/* internal devices that every board has */
	dove_rtc_init();
	dove_xor0_init();
+3 −0
Original line number Diff line number Diff line
@@ -42,6 +42,9 @@ static void __init kirkwood_dt_init(void)
	kirkwood_l2_init();
#endif

	/* Setup root of clk tree */
	kirkwood_clk_init();

	/* internal devices that every board has */
	kirkwood_wdt_init();
	kirkwood_xor0_init();
+41 −0
Original line number Diff line number Diff line
@@ -15,6 +15,8 @@
#include <linux/ata_platform.h>
#include <linux/mtd/nand.h>
#include <linux/dma-mapping.h>
#include <linux/clk-provider.h>
#include <linux/spinlock.h>
#include <net/dsa.h>
#include <asm/page.h>
#include <asm/timex.h>
@@ -31,6 +33,7 @@
#include <plat/common.h>
#include <plat/time.h>
#include <plat/addr-map.h>
#include <plat/mv_xor.h>
#include "common.h"

/*****************************************************************************
@@ -68,6 +71,41 @@ void __init kirkwood_map_io(void)
unsigned int kirkwood_clk_ctrl = CGC_DUNIT | CGC_RESERVED;


/*****************************************************************************
 * CLK tree
 ****************************************************************************/
static DEFINE_SPINLOCK(gating_lock);
static struct clk *tclk;

static struct clk __init *kirkwood_register_gate(const char *name, u8 bit_idx)
{
	return clk_register_gate(NULL, name, "tclk", CLK_IGNORE_UNUSED,
				 (void __iomem *)CLOCK_GATING_CTRL,
				 bit_idx, 0, &gating_lock);
}

void __init kirkwood_clk_init(void)
{
	tclk = clk_register_fixed_rate(NULL, "tclk", NULL,
				       CLK_IS_ROOT, kirkwood_tclk);

	kirkwood_register_gate("runit",  CGC_BIT_RUNIT);
	kirkwood_register_gate("ge0",    CGC_BIT_GE0);
	kirkwood_register_gate("ge1",    CGC_BIT_GE1);
	kirkwood_register_gate("sata0",  CGC_BIT_SATA0);
	kirkwood_register_gate("sata1",  CGC_BIT_SATA1);
	kirkwood_register_gate("usb0",   CGC_BIT_USB0);
	kirkwood_register_gate("sdio",   CGC_BIT_SDIO);
	kirkwood_register_gate("crypto", CGC_BIT_CRYPTO);
	kirkwood_register_gate("xor0",   CGC_BIT_XOR0);
	kirkwood_register_gate("xor1",   CGC_BIT_XOR1);
	kirkwood_register_gate("pex0",   CGC_BIT_PEX0);
	kirkwood_register_gate("pex1",   CGC_BIT_PEX1);
	kirkwood_register_gate("audio",  CGC_BIT_AUDIO);
	kirkwood_register_gate("tdm",    CGC_BIT_TDM);
	kirkwood_register_gate("tsu",    CGC_BIT_TSU);
}

/*****************************************************************************
 * EHCI0
 ****************************************************************************/
@@ -465,6 +503,9 @@ void __init kirkwood_init(void)
	kirkwood_l2_init();
#endif

	/* Setup root of clk tree */
	kirkwood_clk_init();

	/* internal devices that every board has */
	kirkwood_rtc_init();
	kirkwood_wdt_init();
+1 −0
Original line number Diff line number Diff line
@@ -50,6 +50,7 @@ void kirkwood_nand_init(struct mtd_partition *parts, int nr_parts, int delay);
void kirkwood_nand_init_rnb(struct mtd_partition *parts, int nr_parts, int (*dev_ready)(struct mtd_info *));
void kirkwood_audio_init(void);
void kirkwood_restart(char, const char *);
void kirkwood_clk_init(void);

/* board init functions for boards not fully converted to fdt */
#ifdef CONFIG_MACH_DREAMPLUG_DT
Loading