Commit 9d1dff86 authored by Tony Lindgren's avatar Tony Lindgren

Fix omap1 clock issues

This fixes booting, and is a step toward fixing things properly:

- Make enable_reg u32 instead of u16
- Get rid of VIRTUAL_IO_ADDRESS for clocks
- Use __raw_read/write instead of omap_read/write for clock registers

This patch adds a bunch of compile warnings until omap1 clock
also uses offsets.
Signed-off-by: default avatarTony Lindgren <tony@atomide.com>
parent 0808a402
...@@ -41,7 +41,7 @@ static void omap1_watchdog_recalc(struct clk * clk) ...@@ -41,7 +41,7 @@ static void omap1_watchdog_recalc(struct clk * clk)
static void omap1_uart_recalc(struct clk * clk) static void omap1_uart_recalc(struct clk * clk)
{ {
unsigned int val = omap_readl(clk->enable_reg); unsigned int val = __raw_readl(clk->enable_reg);
if (val & clk->enable_bit) if (val & clk->enable_bit)
clk->rate = 48000000; clk->rate = 48000000;
else else
...@@ -372,14 +372,14 @@ static int omap1_set_uart_rate(struct clk * clk, unsigned long rate) ...@@ -372,14 +372,14 @@ static int omap1_set_uart_rate(struct clk * clk, unsigned long rate)
{ {
unsigned int val; unsigned int val;
val = omap_readl(clk->enable_reg); val = __raw_readl(clk->enable_reg);
if (rate == 12000000) if (rate == 12000000)
val &= ~(1 << clk->enable_bit); val &= ~(1 << clk->enable_bit);
else if (rate == 48000000) else if (rate == 48000000)
val |= (1 << clk->enable_bit); val |= (1 << clk->enable_bit);
else else
return -EINVAL; return -EINVAL;
omap_writel(val, clk->enable_reg); __raw_writel(val, clk->enable_reg);
clk->rate = rate; clk->rate = rate;
return 0; return 0;
...@@ -398,8 +398,8 @@ static int omap1_set_ext_clk_rate(struct clk * clk, unsigned long rate) ...@@ -398,8 +398,8 @@ static int omap1_set_ext_clk_rate(struct clk * clk, unsigned long rate)
else else
ratio_bits = (dsor - 2) << 2; ratio_bits = (dsor - 2) << 2;
ratio_bits |= omap_readw(clk->enable_reg) & ~0xfd; ratio_bits |= __raw_readw(clk->enable_reg) & ~0xfd;
omap_writew(ratio_bits, clk->enable_reg); __raw_writew(ratio_bits, clk->enable_reg);
return 0; return 0;
} }
...@@ -440,8 +440,8 @@ static void omap1_init_ext_clk(struct clk * clk) ...@@ -440,8 +440,8 @@ static void omap1_init_ext_clk(struct clk * clk)
__u16 ratio_bits; __u16 ratio_bits;
/* Determine current rate and ensure clock is based on 96MHz APLL */ /* Determine current rate and ensure clock is based on 96MHz APLL */
ratio_bits = omap_readw(clk->enable_reg) & ~1; ratio_bits = __raw_readw(clk->enable_reg) & ~1;
omap_writew(ratio_bits, clk->enable_reg); __raw_writew(ratio_bits, clk->enable_reg);
ratio_bits = (ratio_bits & 0xfc) >> 2; ratio_bits = (ratio_bits & 0xfc) >> 2;
if (ratio_bits > 6) if (ratio_bits > 6)
...@@ -506,25 +506,13 @@ static int omap1_clk_enable_generic(struct clk *clk) ...@@ -506,25 +506,13 @@ static int omap1_clk_enable_generic(struct clk *clk)
} }
if (clk->flags & ENABLE_REG_32BIT) { if (clk->flags & ENABLE_REG_32BIT) {
if (clk->flags & VIRTUAL_IO_ADDRESS) { regval32 = __raw_readl(clk->enable_reg);
regval32 = __raw_readl(clk->enable_reg); regval32 |= (1 << clk->enable_bit);
regval32 |= (1 << clk->enable_bit); __raw_writel(regval32, clk->enable_reg);
__raw_writel(regval32, clk->enable_reg);
} else {
regval32 = omap_readl(clk->enable_reg);
regval32 |= (1 << clk->enable_bit);
omap_writel(regval32, clk->enable_reg);
}
} else { } else {
if (clk->flags & VIRTUAL_IO_ADDRESS) { regval16 = __raw_readw(clk->enable_reg);
regval16 = __raw_readw(clk->enable_reg); regval16 |= (1 << clk->enable_bit);
regval16 |= (1 << clk->enable_bit); __raw_writew(regval16, clk->enable_reg);
__raw_writew(regval16, clk->enable_reg);
} else {
regval16 = omap_readw(clk->enable_reg);
regval16 |= (1 << clk->enable_bit);
omap_writew(regval16, clk->enable_reg);
}
} }
return 0; return 0;
...@@ -539,25 +527,13 @@ static void omap1_clk_disable_generic(struct clk *clk) ...@@ -539,25 +527,13 @@ static void omap1_clk_disable_generic(struct clk *clk)
return; return;
if (clk->flags & ENABLE_REG_32BIT) { if (clk->flags & ENABLE_REG_32BIT) {
if (clk->flags & VIRTUAL_IO_ADDRESS) { regval32 = __raw_readl(clk->enable_reg);
regval32 = __raw_readl(clk->enable_reg); regval32 &= ~(1 << clk->enable_bit);
regval32 &= ~(1 << clk->enable_bit); __raw_writel(regval32, clk->enable_reg);
__raw_writel(regval32, clk->enable_reg);
} else {
regval32 = omap_readl(clk->enable_reg);
regval32 &= ~(1 << clk->enable_bit);
omap_writel(regval32, clk->enable_reg);
}
} else { } else {
if (clk->flags & VIRTUAL_IO_ADDRESS) { regval16 = __raw_readw(clk->enable_reg);
regval16 = __raw_readw(clk->enable_reg); regval16 &= ~(1 << clk->enable_bit);
regval16 &= ~(1 << clk->enable_bit); __raw_writew(regval16, clk->enable_reg);
__raw_writew(regval16, clk->enable_reg);
} else {
regval16 = omap_readw(clk->enable_reg);
regval16 &= ~(1 << clk->enable_bit);
omap_writew(regval16, clk->enable_reg);
}
} }
} }
...@@ -632,17 +608,10 @@ static void __init omap1_clk_disable_unused(struct clk *clk) ...@@ -632,17 +608,10 @@ static void __init omap1_clk_disable_unused(struct clk *clk)
} }
/* Is the clock already disabled? */ /* Is the clock already disabled? */
if (clk->flags & ENABLE_REG_32BIT) { if (clk->flags & ENABLE_REG_32BIT)
if (clk->flags & VIRTUAL_IO_ADDRESS) regval32 = __raw_readl(clk->enable_reg);
regval32 = __raw_readl(clk->enable_reg); else
else regval32 = __raw_readw(clk->enable_reg);
regval32 = omap_readl(clk->enable_reg);
} else {
if (clk->flags & VIRTUAL_IO_ADDRESS)
regval32 = __raw_readw(clk->enable_reg);
else
regval32 = omap_readw(clk->enable_reg);
}
if ((regval32 & (1 << clk->enable_bit)) == 0) if ((regval32 & (1 << clk->enable_bit)) == 0)
return; return;
......
This diff is collapsed.
...@@ -67,7 +67,7 @@ struct clk { ...@@ -67,7 +67,7 @@ struct clk {
struct clk *parent; struct clk *parent;
unsigned long rate; unsigned long rate;
__u32 flags; __u32 flags;
u16 enable_reg; u32 enable_reg;
__u8 enable_bit; __u8 enable_bit;
__s8 usecount; __s8 usecount;
u8 idlest_bit; u8 idlest_bit;
...@@ -137,7 +137,7 @@ extern void clk_init_cpufreq_table(struct cpufreq_frequency_table **table); ...@@ -137,7 +137,7 @@ extern void clk_init_cpufreq_table(struct cpufreq_frequency_table **table);
#define VIRTUAL_CLOCK (1 << 3) /* Composite clock from table */ #define VIRTUAL_CLOCK (1 << 3) /* Composite clock from table */
#define ALWAYS_ENABLED (1 << 4) /* Clock cannot be disabled */ #define ALWAYS_ENABLED (1 << 4) /* Clock cannot be disabled */
#define ENABLE_REG_32BIT (1 << 5) /* Use 32-bit access */ #define ENABLE_REG_32BIT (1 << 5) /* Use 32-bit access */
#define VIRTUAL_IO_ADDRESS (1 << 6) /* Clock in virtual address */
#define CLOCK_IDLE_CONTROL (1 << 7) #define CLOCK_IDLE_CONTROL (1 << 7)
#define CLOCK_NO_IDLE_PARENT (1 << 8) #define CLOCK_NO_IDLE_PARENT (1 << 8)
#define DELAYED_APP (1 << 9) /* Delay application of clock */ #define DELAYED_APP (1 << 9) /* Delay application of clock */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment