123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210 |
- From e74caf41aec5338b8cbbd0a1483650848f16f532 Mon Sep 17 00:00:00 2001
- From: Jonas Gorski <[email protected]>
- Date: Sun, 16 Jul 2017 12:23:47 +0200
- Subject: [PATCH V2 1/8] MIPS: BCM63XX: add clkdev lookup support
- Enable clkdev lookup support to allow us providing clocks under
- different names to devices more easily, so we don't need to care
- about clock name clashes anymore.
- Reviewed-by: Florian Fainelli <[email protected]>
- Signed-off-by: Jonas Gorski <[email protected]>
- ---
- arch/mips/Kconfig | 1 +
- arch/mips/bcm63xx/clk.c | 150 +++++++++++++++++++++++++++++++++++++-----------
- 2 files changed, 116 insertions(+), 35 deletions(-)
- --- a/arch/mips/Kconfig
- +++ b/arch/mips/Kconfig
- @@ -271,6 +271,7 @@ config BCM63XX
- select GPIOLIB
- select HAVE_CLK
- select MIPS_L1_CACHE_SHIFT_4
- + select CLKDEV_LOOKUP
- help
- Support for BCM63XX based boards
-
- --- a/arch/mips/bcm63xx/clk.c
- +++ b/arch/mips/bcm63xx/clk.c
- @@ -10,6 +10,7 @@
- #include <linux/mutex.h>
- #include <linux/err.h>
- #include <linux/clk.h>
- +#include <linux/clkdev.h>
- #include <linux/delay.h>
- #include <bcm63xx_cpu.h>
- #include <bcm63xx_io.h>
- @@ -355,44 +356,103 @@ long clk_round_rate(struct clk *clk, uns
- }
- EXPORT_SYMBOL_GPL(clk_round_rate);
-
- -struct clk *clk_get(struct device *dev, const char *id)
- -{
- - if (!strcmp(id, "enet0"))
- - return &clk_enet0;
- - if (!strcmp(id, "enet1"))
- - return &clk_enet1;
- - if (!strcmp(id, "enetsw"))
- - return &clk_enetsw;
- - if (!strcmp(id, "ephy"))
- - return &clk_ephy;
- - if (!strcmp(id, "usbh"))
- - return &clk_usbh;
- - if (!strcmp(id, "usbd"))
- - return &clk_usbd;
- - if (!strcmp(id, "spi"))
- - return &clk_spi;
- - if (!strcmp(id, "hsspi"))
- - return &clk_hsspi;
- - if (!strcmp(id, "xtm"))
- - return &clk_xtm;
- - if (!strcmp(id, "periph"))
- - return &clk_periph;
- - if ((BCMCPU_IS_3368() || BCMCPU_IS_6358()) && !strcmp(id, "pcm"))
- - return &clk_pcm;
- - if ((BCMCPU_IS_6362() || BCMCPU_IS_6368()) && !strcmp(id, "ipsec"))
- - return &clk_ipsec;
- - if ((BCMCPU_IS_6328() || BCMCPU_IS_6362()) && !strcmp(id, "pcie"))
- - return &clk_pcie;
- - return ERR_PTR(-ENOENT);
- -}
- -
- -EXPORT_SYMBOL(clk_get);
- -
- -void clk_put(struct clk *clk)
- -{
- -}
- -
- -EXPORT_SYMBOL(clk_put);
- +static struct clk_lookup bcm3368_clks[] = {
- + /* fixed rate clocks */
- + CLKDEV_INIT(NULL, "periph", &clk_periph),
- + /* gated clocks */
- + CLKDEV_INIT(NULL, "enet0", &clk_enet0),
- + CLKDEV_INIT(NULL, "enet1", &clk_enet1),
- + CLKDEV_INIT(NULL, "ephy", &clk_ephy),
- + CLKDEV_INIT(NULL, "usbh", &clk_usbh),
- + CLKDEV_INIT(NULL, "usbd", &clk_usbd),
- + CLKDEV_INIT(NULL, "spi", &clk_spi),
- + CLKDEV_INIT(NULL, "pcm", &clk_pcm),
- +};
- +
- +static struct clk_lookup bcm6328_clks[] = {
- + /* fixed rate clocks */
- + CLKDEV_INIT(NULL, "periph", &clk_periph),
- + /* gated clocks */
- + CLKDEV_INIT(NULL, "enetsw", &clk_enetsw),
- + CLKDEV_INIT(NULL, "usbh", &clk_usbh),
- + CLKDEV_INIT(NULL, "usbd", &clk_usbd),
- + CLKDEV_INIT(NULL, "hsspi", &clk_hsspi),
- + CLKDEV_INIT(NULL, "pcie", &clk_pcie),
- +};
- +
- +static struct clk_lookup bcm6338_clks[] = {
- + /* fixed rate clocks */
- + CLKDEV_INIT(NULL, "periph", &clk_periph),
- + /* gated clocks */
- + CLKDEV_INIT(NULL, "enet0", &clk_enet0),
- + CLKDEV_INIT(NULL, "enet1", &clk_enet1),
- + CLKDEV_INIT(NULL, "ephy", &clk_ephy),
- + CLKDEV_INIT(NULL, "usbh", &clk_usbh),
- + CLKDEV_INIT(NULL, "usbd", &clk_usbd),
- + CLKDEV_INIT(NULL, "spi", &clk_spi),
- +};
- +
- +static struct clk_lookup bcm6345_clks[] = {
- + /* fixed rate clocks */
- + CLKDEV_INIT(NULL, "periph", &clk_periph),
- + /* gated clocks */
- + CLKDEV_INIT(NULL, "enet0", &clk_enet0),
- + CLKDEV_INIT(NULL, "enet1", &clk_enet1),
- + CLKDEV_INIT(NULL, "ephy", &clk_ephy),
- + CLKDEV_INIT(NULL, "usbh", &clk_usbh),
- + CLKDEV_INIT(NULL, "usbd", &clk_usbd),
- + CLKDEV_INIT(NULL, "spi", &clk_spi),
- +};
- +
- +static struct clk_lookup bcm6348_clks[] = {
- + /* fixed rate clocks */
- + CLKDEV_INIT(NULL, "periph", &clk_periph),
- + /* gated clocks */
- + CLKDEV_INIT(NULL, "enet0", &clk_enet0),
- + CLKDEV_INIT(NULL, "enet1", &clk_enet1),
- + CLKDEV_INIT(NULL, "ephy", &clk_ephy),
- + CLKDEV_INIT(NULL, "usbh", &clk_usbh),
- + CLKDEV_INIT(NULL, "usbd", &clk_usbd),
- + CLKDEV_INIT(NULL, "spi", &clk_spi),
- +};
- +
- +static struct clk_lookup bcm6358_clks[] = {
- + /* fixed rate clocks */
- + CLKDEV_INIT(NULL, "periph", &clk_periph),
- + /* gated clocks */
- + CLKDEV_INIT(NULL, "enet0", &clk_enet0),
- + CLKDEV_INIT(NULL, "enet1", &clk_enet1),
- + CLKDEV_INIT(NULL, "ephy", &clk_ephy),
- + CLKDEV_INIT(NULL, "usbh", &clk_usbh),
- + CLKDEV_INIT(NULL, "usbd", &clk_usbd),
- + CLKDEV_INIT(NULL, "spi", &clk_spi),
- + CLKDEV_INIT(NULL, "pcm", &clk_pcm),
- +};
- +
- +static struct clk_lookup bcm6362_clks[] = {
- + /* fixed rate clocks */
- + CLKDEV_INIT(NULL, "periph", &clk_periph),
- + /* gated clocks */
- + CLKDEV_INIT(NULL, "enetsw", &clk_enetsw),
- + CLKDEV_INIT(NULL, "usbh", &clk_usbh),
- + CLKDEV_INIT(NULL, "usbd", &clk_usbd),
- + CLKDEV_INIT(NULL, "spi", &clk_spi),
- + CLKDEV_INIT(NULL, "hsspi", &clk_hsspi),
- + CLKDEV_INIT(NULL, "pcie", &clk_pcie),
- + CLKDEV_INIT(NULL, "ipsec", &clk_ipsec),
- +};
- +
- +static struct clk_lookup bcm6368_clks[] = {
- + /* fixed rate clocks */
- + CLKDEV_INIT(NULL, "periph", &clk_periph),
- + /* gated clocks */
- + CLKDEV_INIT(NULL, "enetsw", &clk_enetsw),
- + CLKDEV_INIT(NULL, "usbh", &clk_usbh),
- + CLKDEV_INIT(NULL, "usbd", &clk_usbd),
- + CLKDEV_INIT(NULL, "spi", &clk_spi),
- + CLKDEV_INIT(NULL, "xtm", &clk_xtm),
- + CLKDEV_INIT(NULL, "ipsec", &clk_ipsec),
- +};
-
- #define HSSPI_PLL_HZ_6328 133333333
- #define HSSPI_PLL_HZ_6362 400000000
- @@ -400,11 +460,31 @@ EXPORT_SYMBOL(clk_put);
- static int __init bcm63xx_clk_init(void)
- {
- switch (bcm63xx_get_cpu_id()) {
- + case BCM3368_CPU_ID:
- + clkdev_add_table(bcm3368_clks, ARRAY_SIZE(bcm3368_clks));
- + break;
- case BCM6328_CPU_ID:
- clk_hsspi.rate = HSSPI_PLL_HZ_6328;
- + clkdev_add_table(bcm6328_clks, ARRAY_SIZE(bcm6328_clks));
- + break;
- + case BCM6338_CPU_ID:
- + clkdev_add_table(bcm6338_clks, ARRAY_SIZE(bcm6338_clks));
- + break;
- + case BCM6345_CPU_ID:
- + clkdev_add_table(bcm6345_clks, ARRAY_SIZE(bcm6345_clks));
- + break;
- + case BCM6348_CPU_ID:
- + clkdev_add_table(bcm6348_clks, ARRAY_SIZE(bcm6348_clks));
- + break;
- + case BCM6358_CPU_ID:
- + clkdev_add_table(bcm6358_clks, ARRAY_SIZE(bcm6358_clks));
- break;
- case BCM6362_CPU_ID:
- clk_hsspi.rate = HSSPI_PLL_HZ_6362;
- + clkdev_add_table(bcm6362_clks, ARRAY_SIZE(bcm6362_clks));
- + break;
- + case BCM6368_CPU_ID:
- + clkdev_add_table(bcm6368_clks, ARRAY_SIZE(bcm6368_clks));
- break;
- }
-
|