Message ID | 1497581573-17258-8-git-send-email-zhoubb@lemote.com (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
On 06/16, Binbin Zhou wrote: > diff --git a/drivers/clk/loongson1/clk-loongson1a.c b/drivers/clk/loongson1/clk-loongson1a.c > new file mode 100644 > index 0000000..263a82c > --- /dev/null > +++ b/drivers/clk/loongson1/clk-loongson1a.c > @@ -0,0 +1,75 @@ > +/* > + * Copyright (c) 2012-2016 Binbin Zhou <zhoubb@lemote.com> > + * > + * 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. > + */ > + > +#include <linux/clkdev.h> > +#include <linux/clk-provider.h> > +#include <linux/io.h> > +#include <linux/err.h> > + > +#include <loongson1.h> > +#include "clk.h" > + > +#define OSC (33 * 1000000) > +#define DIV_APB 2 > + > +static DEFINE_SPINLOCK(_lock); I know the other loongson1*.c files also call it "_lock", but that's not a very good name for something that may show up in lockdep debugging error messages. How about something a bit more descriptive, loongson1x_clk_lock?
On Tue, Jun 20, 2017 at 7:34 AM, Stephen Boyd <sboyd@codeaurora.org> wrote: > On 06/16, Binbin Zhou wrote: >> diff --git a/drivers/clk/loongson1/clk-loongson1a.c b/drivers/clk/loongson1/clk-loongson1a.c >> new file mode 100644 >> index 0000000..263a82c >> --- /dev/null >> +++ b/drivers/clk/loongson1/clk-loongson1a.c >> @@ -0,0 +1,75 @@ >> +/* >> + * Copyright (c) 2012-2016 Binbin Zhou <zhoubb@lemote.com> >> + * >> + * 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. >> + */ >> + >> +#include <linux/clkdev.h> >> +#include <linux/clk-provider.h> >> +#include <linux/io.h> >> +#include <linux/err.h> >> + >> +#include <loongson1.h> >> +#include "clk.h" >> + >> +#define OSC (33 * 1000000) >> +#define DIV_APB 2 >> + >> +static DEFINE_SPINLOCK(_lock); > > I know the other loongson1*.c files also call it "_lock", but > that's not a very good name for something that may show up in > lockdep debugging error messages. How about something a bit more > descriptive, loongson1x_clk_lock? > It's a good idea! Actually, the variable is not be used in this file. If I rename it in another new patch will be better. Do you think so ? Best wishes! Binbin Zhou > -- > Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, > a Linux Foundation Collaborative Project -- To unsubscribe from this list: send the line "unsubscribe linux-clk" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On 06/20, zhoubb wrote: > On Tue, Jun 20, 2017 at 7:34 AM, Stephen Boyd <sboyd@codeaurora.org> wrote: > > On 06/16, Binbin Zhou wrote: > >> + > >> +static DEFINE_SPINLOCK(_lock); > > > > I know the other loongson1*.c files also call it "_lock", but > > that's not a very good name for something that may show up in > > lockdep debugging error messages. How about something a bit more > > descriptive, loongson1x_clk_lock? > > > It's a good idea! > Actually, the variable is not be used in this file. > If I rename it in another new patch will be better. > Do you think so ? Ok sure.
diff --git a/arch/mips/include/asm/mach-loongson32/regs-clk.h b/arch/mips/include/asm/mach-loongson32/regs-clk.h index e5e8f11..d8278a4 100644 --- a/arch/mips/include/asm/mach-loongson32/regs-clk.h +++ b/arch/mips/include/asm/mach-loongson32/regs-clk.h @@ -18,7 +18,35 @@ #define LS1X_CLK_PLL_FREQ LS1X_CLK_REG(0x0) #define LS1X_CLK_PLL_DIV LS1X_CLK_REG(0x4) -#if defined(CONFIG_LOONGSON1_LS1B) +#if defined(CONFIG_LOONGSON1_LS1A) +/* write only */ +#define CORE_PLL_CFG 0x1fe78030 +#define CPU_MUL GENMASK(2, 0) +#define CPU_CFG_EN BIT(3) +#define DDR_MUL GENMASK(6, 4) +#define DDR_CFG_EN BIT(7) +#define CPU_CFG_W_EN BIT(11) +#define DDR_CFG_W_EN BIT(15) + +#define VGA_PLL_CFG 0x1fd00410 +#define VGA_M GENMASK(7, 0) +#define VGA_N GENMASK(11, 8) +#define VGA_OD GENMASK(13, 12) +#define VGA_FRAC GENMASK(31, 14) + +#define LCD_PLL_CFG 0x1fd00410 +#define LCD_M GENMASK(7, 0) +#define LCD_N GENMASK(11, 8) +#define LCD_OD GENMASK(13, 12) +#define LCD_FRAC GENMASK(31, 14) + +#define GPU_PLL_CFG 0x1fd00414 +#define GPU_M GENMASK(7, 0) +#define GPU_N GENMASK(11, 8) +#define GPU_OD GENMASK(13, 12) +#define GPU_FRAC GENMASK(31, 14) + +#elif defined(CONFIG_LOONGSON1_LS1B) /* Clock PLL Divisor Register Bits */ #define DIV_DC_EN BIT(31) #define DIV_DC_RST BIT(30) diff --git a/drivers/clk/loongson1/Makefile b/drivers/clk/loongson1/Makefile index b7f6a16..da7b2dd 100644 --- a/drivers/clk/loongson1/Makefile +++ b/drivers/clk/loongson1/Makefile @@ -1,3 +1,4 @@ obj-y += clk.o +obj-$(CONFIG_LOONGSON1_LS1A) += clk-loongson1a.o obj-$(CONFIG_LOONGSON1_LS1B) += clk-loongson1b.o obj-$(CONFIG_LOONGSON1_LS1C) += clk-loongson1c.o diff --git a/drivers/clk/loongson1/clk-loongson1a.c b/drivers/clk/loongson1/clk-loongson1a.c new file mode 100644 index 0000000..263a82c --- /dev/null +++ b/drivers/clk/loongson1/clk-loongson1a.c @@ -0,0 +1,75 @@ +/* + * Copyright (c) 2012-2016 Binbin Zhou <zhoubb@lemote.com> + * + * 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. + */ + +#include <linux/clkdev.h> +#include <linux/clk-provider.h> +#include <linux/io.h> +#include <linux/err.h> + +#include <loongson1.h> +#include "clk.h" + +#define OSC (33 * 1000000) +#define DIV_APB 2 + +static DEFINE_SPINLOCK(_lock); + +static unsigned long ls1x_pll_recalc_rate(struct clk_hw *hw, + unsigned long parent_rate) +{ + /* Workaround, loongson-1A pll register is written only */ + return OSC * 8; +} + +static const struct clk_ops ls1x_pll_clk_ops = { + .recalc_rate = ls1x_pll_recalc_rate, +}; + +void __init ls1x_clk_init(void) +{ + struct clk_hw *hw; + + hw = clk_hw_register_fixed_rate(NULL, "osc_clk", NULL, 0, OSC); + clk_hw_register_clkdev(hw, "osc_clk", NULL); + + /* clock from 33 MHz OSC clk */ + hw = clk_hw_register_pll(NULL, "pll_clk", "osc_clk", + &ls1x_pll_clk_ops, 0); + clk_hw_register_clkdev(hw, "pll_clk", NULL); + + /* cpu clk */ + hw = clk_hw_register_fixed_factor(NULL, "cpu_clk", "pll_clk", + 0, 1, 1); + clk_hw_register_clkdev(hw, "cpu_clk", NULL); + + /* dc clk */ + hw = clk_hw_register_fixed_factor(NULL, "ddr_clk", "pll_clk", + 0, 1, 1); + clk_hw_register_clkdev(hw, "ddr_clk", NULL); + + /* ahb clk */ + hw = clk_hw_register_fixed_factor(NULL, "ahb_clk", "pll_clk", + 0, 1, 2); + clk_hw_register_clkdev(hw, "ahb_clk", NULL); + clk_hw_register_clkdev(hw, "ls1x-dma", NULL); + clk_hw_register_clkdev(hw, "stmmaceth", NULL); + + /* clock derived from AHB clk */ + /* APB clk is always half of the AHB clk */ + hw = clk_hw_register_fixed_factor(NULL, "apb_clk", "ahb_clk", + 0, 1, DIV_APB); + clk_hw_register_clkdev(hw, "apb_clk", NULL); + clk_hw_register_clkdev(hw, "ls1x-ac97", NULL); + clk_hw_register_clkdev(hw, "ls1x-i2c", NULL); + clk_hw_register_clkdev(hw, "ls1x-nand", NULL); + clk_hw_register_clkdev(hw, "ls1x-pwmtimer", NULL); + clk_hw_register_clkdev(hw, "ls1x-spi", NULL); + clk_hw_register_clkdev(hw, "ls1x-wdt", NULL); + clk_hw_register_clkdev(hw, "serial8250", NULL); +}