aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/brcm2708/patches-3.18/0048-BCM2708-Migrate-to-the-Common-Clock-Framework.patch
diff options
context:
space:
mode:
authorJohn Crispin <john@openwrt.org>2015-02-11 10:17:55 +0000
committerJohn Crispin <john@openwrt.org>2015-02-11 10:17:55 +0000
commit408c9696264f8e25e4e4f6410e93d2edd06e59dd (patch)
tree1c9e8fbacb1508e8561c43f87389edf02cfb0955 /target/linux/brcm2708/patches-3.18/0048-BCM2708-Migrate-to-the-Common-Clock-Framework.patch
parentf90d9d486a8842077e68e90bba2b276ac1336bab (diff)
downloadupstream-408c9696264f8e25e4e4f6410e93d2edd06e59dd.tar.gz
upstream-408c9696264f8e25e4e4f6410e93d2edd06e59dd.tar.bz2
upstream-408c9696264f8e25e4e4f6410e93d2edd06e59dd.zip
brcm2708: update to v3.18
Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com> SVN-Revision: 44392
Diffstat (limited to 'target/linux/brcm2708/patches-3.18/0048-BCM2708-Migrate-to-the-Common-Clock-Framework.patch')
-rwxr-xr-xtarget/linux/brcm2708/patches-3.18/0048-BCM2708-Migrate-to-the-Common-Clock-Framework.patch275
1 files changed, 275 insertions, 0 deletions
diff --git a/target/linux/brcm2708/patches-3.18/0048-BCM2708-Migrate-to-the-Common-Clock-Framework.patch b/target/linux/brcm2708/patches-3.18/0048-BCM2708-Migrate-to-the-Common-Clock-Framework.patch
new file mode 100755
index 0000000000..68c988ab60
--- /dev/null
+++ b/target/linux/brcm2708/patches-3.18/0048-BCM2708-Migrate-to-the-Common-Clock-Framework.patch
@@ -0,0 +1,275 @@
+From 466743ec93a99240c1a5a04d65f490fd8370fbc3 Mon Sep 17 00:00:00 2001
+From: notro <notro@tronnes.org>
+Date: Sun, 6 Jul 2014 12:09:30 +0200
+Subject: [PATCH 048/114] BCM2708: Migrate to the Common Clock Framework
+
+As part of moving towards using Device Tree, the Common Clock Framework
+has to be used instead of the BCM2708 clock implementation.
+
+Selecting COMMON_CLK removes the need to set CLKDEV_LOOKUP and HAVE_CLK explicitly.
+
+CONFIG_ARCH_BCM2708_CHIPIT #ifdef's are removed. They are no longer in use.
+
+Signed-off-by: Noralf Tronnes <notro@tronnes.org>
+---
+ arch/arm/Kconfig | 3 +-
+ arch/arm/mach-bcm2708/Makefile | 2 +-
+ arch/arm/mach-bcm2708/bcm2708.c | 79 +++++++++++++++++------------------------
+ arch/arm/mach-bcm2708/clock.c | 61 -------------------------------
+ arch/arm/mach-bcm2708/clock.h | 24 -------------
+ 5 files changed, 34 insertions(+), 135 deletions(-)
+ delete mode 100644 arch/arm/mach-bcm2708/clock.c
+ delete mode 100644 arch/arm/mach-bcm2708/clock.h
+
+diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
+index ba9c18e..0f2287f 100644
+--- a/arch/arm/Kconfig
++++ b/arch/arm/Kconfig
+@@ -385,11 +385,10 @@ config ARCH_BCM2708
+ bool "Broadcom BCM2708 family"
+ select CPU_V6
+ select ARM_AMBA
+- select HAVE_CLK
+ select HAVE_SCHED_CLOCK
+ select NEED_MACH_GPIO_H
+ select NEED_MACH_MEMORY_H
+- select CLKDEV_LOOKUP
++ select COMMON_CLK
+ select ARCH_HAS_CPUFREQ
+ select GENERIC_CLOCKEVENTS
+ select ARM_ERRATA_411920
+diff --git a/arch/arm/mach-bcm2708/Makefile b/arch/arm/mach-bcm2708/Makefile
+index a722f3f..21e3521 100644
+--- a/arch/arm/mach-bcm2708/Makefile
++++ b/arch/arm/mach-bcm2708/Makefile
+@@ -2,6 +2,6 @@
+ # Makefile for the linux kernel.
+ #
+
+-obj-$(CONFIG_MACH_BCM2708) += clock.o bcm2708.o armctrl.o vcio.o power.o dma.o
++obj-$(CONFIG_MACH_BCM2708) += bcm2708.o armctrl.o vcio.o power.o dma.o
+ obj-$(CONFIG_BCM2708_GPIO) += bcm2708_gpio.o
+ obj-$(CONFIG_BCM2708_VCMEM) += vc_mem.o
+diff --git a/arch/arm/mach-bcm2708/bcm2708.c b/arch/arm/mach-bcm2708/bcm2708.c
+index 633be19..ef12cb8 100644
+--- a/arch/arm/mach-bcm2708/bcm2708.c
++++ b/arch/arm/mach-bcm2708/bcm2708.c
+@@ -27,6 +27,8 @@
+ #include <linux/interrupt.h>
+ #include <linux/amba/bus.h>
+ #include <linux/amba/clcd.h>
++#include <linux/clk-provider.h>
++#include <linux/clkdev.h>
+ #include <linux/clockchips.h>
+ #include <linux/cnt32_to_63.h>
+ #include <linux/io.h>
+@@ -58,7 +60,6 @@
+
+ #include "bcm2708.h"
+ #include "armctrl.h"
+-#include "clock.h"
+
+ #ifdef CONFIG_BCM_VC_CMA
+ #include <linux/broadcom/vc_cma.h>
+@@ -84,7 +85,7 @@
+
+ /* command line parameters */
+ static unsigned boardrev, serial;
+-static unsigned uart_clock;
++static unsigned uart_clock = UART0_CLOCK;
+ static unsigned disk_led_gpio = 16;
+ static unsigned disk_led_active_low = 1;
+ static unsigned reboot_part = 0;
+@@ -196,51 +197,39 @@ static void __init bcm2708_clocksource_init(void)
+ }
+ }
+
++struct clk __init *bcm2708_clk_register(const char *name, unsigned long fixed_rate)
++{
++ struct clk *clk;
+
+-/*
+- * These are fixed clocks.
+- */
+-static struct clk ref24_clk = {
+- .rate = UART0_CLOCK, /* The UART is clocked at 3MHz via APB_CLK */
+-};
++ clk = clk_register_fixed_rate(NULL, name, NULL, CLK_IS_ROOT,
++ fixed_rate);
++ if (IS_ERR(clk))
++ pr_err("%s not registered\n", name);
+
+-static struct clk osc_clk = {
+-#ifdef CONFIG_ARCH_BCM2708_CHIPIT
+- .rate = 27000000,
+-#else
+- .rate = 500000000, /* ARM clock is set from the VideoCore booter */
+-#endif
+-};
++ return clk;
++}
+
+-/* warning - the USB needs a clock > 34MHz */
++void __init bcm2708_register_clkdev(struct clk *clk, const char *name)
++{
++ int ret;
+
+-static struct clk sdhost_clk = {
+-#ifdef CONFIG_ARCH_BCM2708_CHIPIT
+- .rate = 4000000, /* 4MHz */
+-#else
+- .rate = 250000000, /* 250MHz */
+-#endif
+-};
++ ret = clk_register_clkdev(clk, NULL, name);
++ if (ret)
++ pr_err("%s alias not registered\n", name);
++}
+
+-static struct clk_lookup lookups[] = {
+- { /* UART0 */
+- .dev_id = "dev:f1",
+- .clk = &ref24_clk,
+- },
+- { /* USB */
+- .dev_id = "bcm2708_usb",
+- .clk = &osc_clk,
+- }, { /* SPI */
+- .dev_id = "bcm2708_spi.0",
+- .clk = &sdhost_clk,
+- }, { /* BSC0 */
+- .dev_id = "bcm2708_i2c.0",
+- .clk = &sdhost_clk,
+- }, { /* BSC1 */
+- .dev_id = "bcm2708_i2c.1",
+- .clk = &sdhost_clk,
+- }
+-};
++void __init bcm2708_init_clocks(void)
++{
++ struct clk *clk;
++
++ clk = bcm2708_clk_register("uart0_clk", uart_clock);
++ bcm2708_register_clkdev(clk, "dev:f1");
++
++ clk = bcm2708_clk_register("sdhost_clk", 250000000);
++ bcm2708_register_clkdev(clk, "bcm2708_spi.0");
++ bcm2708_register_clkdev(clk, "bcm2708_i2c.0");
++ bcm2708_register_clkdev(clk, "bcm2708_i2c.1");
++}
+
+ #define UART0_IRQ { IRQ_UART, 0 /*NO_IRQ*/ }
+ #define UART0_DMA { 15, 14 }
+@@ -755,11 +744,7 @@ void __init bcm2708_init(void)
+ printk("bcm2708.uart_clock = %d\n", uart_clock);
+ pm_power_off = bcm2708_power_off;
+
+- if (uart_clock)
+- lookups[0].clk->rate = uart_clock;
+-
+- for (i = 0; i < ARRAY_SIZE(lookups); i++)
+- clkdev_add(&lookups[i]);
++ bcm2708_init_clocks();
+
+ bcm_register_device(&bcm2708_dmaman_device);
+ bcm_register_device(&bcm2708_vcio_device);
+diff --git a/arch/arm/mach-bcm2708/clock.c b/arch/arm/mach-bcm2708/clock.c
+deleted file mode 100644
+index 4fc556e..0000000
+--- a/arch/arm/mach-bcm2708/clock.c
++++ /dev/null
+@@ -1,61 +0,0 @@
+-/*
+- * linux/arch/arm/mach-bcm2708/clock.c
+- *
+- * Copyright (C) 2010 Broadcom
+- *
+- * 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.
+- *
+- * This program is distributed in the hope that 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.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program; if not, write to the Free Software
+- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+- */
+-#include <linux/module.h>
+-#include <linux/kernel.h>
+-#include <linux/device.h>
+-#include <linux/list.h>
+-#include <linux/errno.h>
+-#include <linux/err.h>
+-#include <linux/string.h>
+-#include <linux/clk.h>
+-#include <linux/mutex.h>
+-
+-#include <asm/clkdev.h>
+-
+-#include "clock.h"
+-
+-int clk_enable(struct clk *clk)
+-{
+- return 0;
+-}
+-EXPORT_SYMBOL(clk_enable);
+-
+-void clk_disable(struct clk *clk)
+-{
+-}
+-EXPORT_SYMBOL(clk_disable);
+-
+-unsigned long clk_get_rate(struct clk *clk)
+-{
+- return clk->rate;
+-}
+-EXPORT_SYMBOL(clk_get_rate);
+-
+-long clk_round_rate(struct clk *clk, unsigned long rate)
+-{
+- return clk->rate;
+-}
+-EXPORT_SYMBOL(clk_round_rate);
+-
+-int clk_set_rate(struct clk *clk, unsigned long rate)
+-{
+- return -EIO;
+-}
+-EXPORT_SYMBOL(clk_set_rate);
+diff --git a/arch/arm/mach-bcm2708/clock.h b/arch/arm/mach-bcm2708/clock.h
+deleted file mode 100644
+index 5f9d725..0000000
+--- a/arch/arm/mach-bcm2708/clock.h
++++ /dev/null
+@@ -1,24 +0,0 @@
+-/*
+- * linux/arch/arm/mach-bcm2708/clock.h
+- *
+- * Copyright (C) 2010 Broadcom
+- *
+- * 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.
+- *
+- * This program is distributed in the hope that 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.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program; if not, write to the Free Software
+- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+- */
+-struct module;
+-
+-struct clk {
+- unsigned long rate;
+-};
+--
+1.8.3.2
+