Skip to content

Commit

Permalink
MIPS: Alchemy: fix Au1000/Au1500 LRCLK calculation
Browse files Browse the repository at this point in the history
The Au1000 and Au1500 calculate the LRCLK a bit differently than
newer models: a single bit in MEM_STCFG0 selects if pclk is divided
by 4 or 5.

Signed-off-by: Manuel Lauss <[email protected]>
Cc: Linux-MIPS <[email protected]>
Patchwork: https://patchwork.linux-mips.org/patch/9148/
Signed-off-by: Ralf Baechle <[email protected]>
  • Loading branch information
mlauss2 authored and ralfbaechle committed Feb 20, 2015
1 parent a5770df commit 51f105d
Showing 1 changed file with 14 additions and 5 deletions.
19 changes: 14 additions & 5 deletions arch/mips/alchemy/common/clock.c
Original file line number Diff line number Diff line change
Expand Up @@ -315,17 +315,26 @@ static struct clk __init *alchemy_clk_setup_mem(const char *pn, int ct)

/* lrclk: external synchronous static bus clock ***********************/

static struct clk __init *alchemy_clk_setup_lrclk(const char *pn)
static struct clk __init *alchemy_clk_setup_lrclk(const char *pn, int t)
{
/* MEM_STCFG0[15:13] = divisor.
/* Au1000, Au1500: MEM_STCFG0[11]: If bit is set, lrclk=pclk/5,
* otherwise lrclk=pclk/4.
* All other variants: MEM_STCFG0[15:13] = divisor.
* L/RCLK = periph_clk / (divisor + 1)
* On Au1000, Au1500, Au1100 it's called LCLK,
* on later models it's called RCLK, but it's the same thing.
*/
struct clk *c;
unsigned long v = alchemy_rdsmem(AU1000_MEM_STCFG0) >> 13;
unsigned long v = alchemy_rdsmem(AU1000_MEM_STCFG0);

v = (v & 7) + 1;
switch (t) {
case ALCHEMY_CPU_AU1000:
case ALCHEMY_CPU_AU1500:
v = 4 + ((v >> 11) & 1);
break;
default: /* all other models */
v = ((v >> 13) & 7) + 1;
}
c = clk_register_fixed_factor(NULL, ALCHEMY_LR_CLK,
pn, 0, 1, v);
if (!IS_ERR(c))
Expand Down Expand Up @@ -1060,7 +1069,7 @@ static int __init alchemy_clk_init(void)
ERRCK(c)

/* L/RCLK: external static bus clock for synchronous mode */
c = alchemy_clk_setup_lrclk(ALCHEMY_PERIPH_CLK);
c = alchemy_clk_setup_lrclk(ALCHEMY_PERIPH_CLK, ctype);
ERRCK(c)

/* Frequency dividers 0-5 */
Expand Down

0 comments on commit 51f105d

Please sign in to comment.