123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260 |
- 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
- --- 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
- --- 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
- --- 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_i
- }
- }
-
- +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);
- --- 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);
- --- 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;
- -};
|