Re: [U-Boot] [PATCH 1/2] mx31: make HSP clock for mx3fb driver available

2011-09-05 Thread Marek Vasut
On Monday, September 05, 2011 01:47:06 PM Helmut Raiger wrote:
> This additionally updates mx31/generic.c by
> - replacing __REG() macro accesses with readl() and writel()
> - providing macros for PDR0 and PLL bit accesses
> It also fixes a warning about the prototype of imx_get_uartclk(void)
> 
> Signed-off-by: Helmut Raiger 
> ---
> V2: uses macros and readl(), writel(), see commit message

This looks awesome. Please, when submitting V2, also add V2 to [PATCH 1/2] ... 
like [PATCH V2 1/2]. Minor thing though.

Acked-by: Marek Vasut 
___
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot


[U-Boot] [PATCH 1/2] mx31: make HSP clock for mx3fb driver available

2011-09-05 Thread Helmut Raiger
This additionally updates mx31/generic.c by
- replacing __REG() macro accesses with readl() and writel()
- providing macros for PDR0 and PLL bit accesses
It also fixes a warning about the prototype of imx_get_uartclk(void)

Signed-off-by: Helmut Raiger 
---
V2: uses macros and readl(), writel(), see commit message

 arch/arm/cpu/arm1136/mx31/generic.c   |   40 +++-
 arch/arm/include/asm/arch-mx31/clock.h|3 +-
 arch/arm/include/asm/arch-mx31/imx-regs.h |   14 ++
 3 files changed, 43 insertions(+), 14 deletions(-)

diff --git a/arch/arm/cpu/arm1136/mx31/generic.c 
b/arch/arm/cpu/arm1136/mx31/generic.c
index 248431b..9a7612b 100644
--- a/arch/arm/cpu/arm1136/mx31/generic.c
+++ b/arch/arm/cpu/arm1136/mx31/generic.c
@@ -28,10 +28,10 @@
 
 static u32 mx31_decode_pll(u32 reg, u32 infreq)
 {
-   u32 mfi = (reg >> 10) & 0xf;
-   u32 mfn = reg & 0x3ff;
-   u32 mfd = (reg >> 16) & 0x3ff;
-   u32 pd =  (reg >> 26) & 0xf;
+   u32 mfi = GET_PLL_MFI(reg);
+   u32 mfn = GET_PLL_MFN(reg);
+   u32 mfd = GET_PLL_MFD(reg);
+   u32 pd =  GET_PLL_PD(reg);
 
mfi = mfi <= 5 ? 5 : mfi;
mfd += 1;
@@ -45,12 +45,12 @@ static u32 mx31_get_mpl_dpdgck_clk(void)
 {
u32 infreq;
 
-   if ((__REG(CCM_CCMR) & CCMR_PRCS_MASK) == CCMR_FPM)
+   if ((readl(CCM_CCMR) & CCMR_PRCS_MASK) == CCMR_FPM)
infreq = CONFIG_MX31_CLK32 * 1024;
else
infreq = CONFIG_MX31_HCLK_FREQ;
 
-   return mx31_decode_pll(__REG(CCM_MPCTL), infreq);
+   return mx31_decode_pll(readl(CCM_MPCTL), infreq);
 }
 
 static u32 mx31_get_mcu_main_clk(void)
@@ -64,10 +64,21 @@ static u32 mx31_get_mcu_main_clk(void)
 static u32 mx31_get_ipg_clk(void)
 {
u32 freq = mx31_get_mcu_main_clk();
-   u32 pdr0 = __REG(CCM_PDR0);
+   u32 pdr0 = readl(CCM_PDR0);
 
-   freq /= ((pdr0 >> 3) & 0x7) + 1;
-   freq /= ((pdr0 >> 6) & 0x3) + 1;
+   freq /= GET_PDR0_MAX_PODF(pdr0) + 1;
+   freq /= GET_PDR0_IPG_PODF(pdr0) + 1;
+
+   return freq;
+}
+
+/* hsp is the clock for the ipu */
+static u32 mx31_get_hsp_clk(void)
+{
+   u32 freq = mx31_get_mcu_main_clk();
+   u32 pdr0 = readl(CCM_PDR0);
+
+   freq /= GET_PDR0_HSP_PODF(pdr0) + 1;
 
return freq;
 }
@@ -77,6 +88,7 @@ void mx31_dump_clocks(void)
u32 cpufreq = mx31_get_mcu_main_clk();
printf("mx31 cpu clock: %dMHz\n",cpufreq / 100);
printf("ipg clock : %dHz\n", mx31_get_ipg_clk());
+   printf("hsp clock : %dHz\n", mx31_get_hsp_clk());
 }
 
 unsigned int mxc_get_clock(enum mxc_clock clk)
@@ -88,6 +100,8 @@ unsigned int mxc_get_clock(enum mxc_clock clk)
case MXC_CSPI_CLK:
case MXC_UART_CLK:
return mx31_get_ipg_clk();
+   case MXC_IPU_CLK:
+   return mx31_get_hsp_clk();
}
return -1;
 }
@@ -104,10 +118,10 @@ void mx31_gpio_mux(unsigned long mode)
reg = IOMUXC_BASE + (mode & 0x1fc);
shift = (~mode & 0x3) * 8;
 
-   tmp = __REG(reg);
+   tmp = readl(reg);
tmp &= ~(0xff << shift);
tmp |= ((mode >> IOMUX_MODE_POS) & 0xff) << shift;
-   __REG(reg) = tmp;
+   writel(tmp, reg);
 }
 
 void mx31_set_pad(enum iomux_pins pin, u32 config)
@@ -118,10 +132,10 @@ void mx31_set_pad(enum iomux_pins pin, u32 config)
reg = (IOMUXC_BASE + 0x154) + (pin + 2) / 3 * 4;
field = (pin + 2) % 3;
 
-   l = __REG(reg);
+   l = readl(reg);
l &= ~(0x1ff << (field * 10));
l |= config << (field * 10);
-   __REG(reg) = l;
+   writel(l, reg);
 
 }
 
diff --git a/arch/arm/include/asm/arch-mx31/clock.h 
b/arch/arm/include/asm/arch-mx31/clock.h
index fb035c4..1ea5a47 100644
--- a/arch/arm/include/asm/arch-mx31/clock.h
+++ b/arch/arm/include/asm/arch-mx31/clock.h
@@ -29,10 +29,11 @@ enum mxc_clock {
MXC_IPG_CLK,
MXC_CSPI_CLK,
MXC_UART_CLK,
+   MXC_IPU_CLK
 };
 
 unsigned int mxc_get_clock(enum mxc_clock clk);
-extern u32 imx_get_uartclk();
+extern u32 imx_get_uartclk(void);
 extern void mx31_gpio_mux(unsigned long mode);
 extern void mx31_set_pad(enum iomux_pins pin, u32 config);
 
diff --git a/arch/arm/include/asm/arch-mx31/imx-regs.h 
b/arch/arm/include/asm/arch-mx31/imx-regs.h
index 3c8d607..c24dae2 100644
--- a/arch/arm/include/asm/arch-mx31/imx-regs.h
+++ b/arch/arm/include/asm/arch-mx31/imx-regs.h
@@ -518,6 +518,20 @@ enum iomux_pins {
 #define PLL_MFI(x) (((x) & 0xf) << 10)
 #define PLL_MFN(x) (((x) & 0x3ff) << 0)
 
+#define GET_PDR0_CSI_PODF(x)   (((x) >> 23) & 0x1ff)
+#define GET_PDR0_PER_PODF(x)   (((x) >> 16) & 0x1f)
+#define GET_PDR0_HSP_PODF(x)   (((x) >> 11) & 0x7)
+#define GET_PDR0_NFC_PODF(x)   (((x) >> 8) & 0x7)
+#define GET_PDR0_IPG_PODF(x)   (((x) >> 6) & 0x3)
+#define GET_PDR0_MAX_PODF(x)   (((x) >> 3) & 0x7)
+#define GET_PDR0_MCU_PODF(x)   ((x) & 0x7)
+
+#define GET_PLL_PD(x)  (((x) >> 26) & 0xf)
+#define GET_PL

Re: [U-Boot] [PATCH 1/2] mx31: make HSP clock for mx3fb driver available

2011-08-24 Thread Marek Vasut
On Wednesday, August 24, 2011 08:55:03 AM Helmut Raiger wrote:
> On 08/22/2011 06:02 PM, Marek Vasut wrote:
> > ... _COSMETIC_, while this new mx3fb driver really works nicely ;-)
> > Oh my sense for metrosexuality of code really kicks in here ;-)
> 
> Arousal was not my first objective, but deliberately endorsed :-P

Hehe :-D
> 
> I'll do what can be done easily concerning the bit accesses.
> Helmut

Thanks!

> 
> --
> Scanned by MailScanner.
___
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot


Re: [U-Boot] [PATCH 1/2] mx31: make HSP clock for mx3fb driver available

2011-08-23 Thread Helmut Raiger
On 08/22/2011 06:02 PM, Marek Vasut wrote:
> ... _COSMETIC_, while this new mx3fb driver really works nicely ;-)
> Oh my sense for metrosexuality of code really kicks in here ;-)
Arousal was not my first objective, but deliberately endorsed :-P

I'll do what can be done easily concerning the bit accesses.
Helmut



--
Scanned by MailScanner.

___
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot


Re: [U-Boot] [PATCH 1/2] mx31: make HSP clock for mx3fb driver available

2011-08-22 Thread Marek Vasut
On Monday, August 22, 2011 06:02:10 PM Marek Vasut wrote:
> On Monday, August 22, 2011 05:51:05 PM Helmut Raiger wrote:
> > On 08/22/2011 05:02 PM, Marek Vasut wrote:
> > >> Masks are not defined for i.MX31 (imx-regs.h), so I simply followed
> > >> the code, which was in the file. The generic.c file for MX35 however
> > >> is a different story.
> > >> 
> > >> To keep things simple, I suggest we leave it at that for now.
> > > 
> > > And noone's gonna fix it later. No please, define the proper constants
> > > please.
> > 
> > Do you really expect me to fix code in all the arch/arm/cpu/arm1136/mx31
> > files (2000+ lines) that use that kind of access, because I add 15 lines
> > to one of them? There are some 50 other drivers and boards etc. that
> > depend on imx-regs.h, which probably use these access methods as-well!
> 
> Hey, calm down, I didn't say anything about fixing gazilion of crap (even
> though that'd be nice of you !).
> 
> Actually, I did a quick look and see arch/arm/include/arch-mx35/crm_regs.h
> containing PDR0 definitions. Though they don't match your constants. It's
> either bug in the crm_regs.h or your code.

Ah sorry, it's mx31. Right, the defines are missing. Do what Stefano said then. 
And really ... noone wants you to modify gazilions of lines, just your few :)

Cheers and sorry for misguiding you about mx35.
___
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot


Re: [U-Boot] [PATCH 1/2] mx31: make HSP clock for mx3fb driver available

2011-08-22 Thread Stefano Babic
On 08/22/2011 05:51 PM, Helmut Raiger wrote:
> On 08/22/2011 05:02 PM, Marek Vasut wrote:
>>
>>> Masks are not defined for i.MX31 (imx-regs.h), so I simply followed the
>>> code, which was in the file. The generic.c file for MX35 however is a
>>> different story.
>>>
>>> To keep things simple, I suggest we leave it at that for now.
>> And noone's gonna fix it later. No please, define the proper constants 
>> please.
>>

Hi Helmut,

> Do you really expect me to fix code in all the arch/arm/cpu/arm1136/mx31 
> files (2000+ lines) that use that kind of access, because I add 15 lines 
> to one of them? 

No, nobody thinks you should do this. However, should be not better to
fix it for the 15 lines of code you added ?

Agree that a lot of things in imx-regs.h for i.MX31 are missing. The
i.MX31 was the first i.MX processor added to u-boot, and there are still
some parts that are different from the rest of IMX code.

However, can you add a simple macro to get the HSP_PODF field ? I agree
it does not change the behavior, but it helps a bit to understand the
code without running to the i.MX31 manual...

Macro to set the PODR register are already defined in imx-regs.h. As you
pointed out, there is no macro to get values from the register.

>There are some 50 other drivers and boards etc. that 
> depend on imx-regs.h, which probably use these access methods as-well!

Yes, I know. I am trying to uniform the behavior between i.MX processors.

> I'm not prepared to take this effort, sorry.

Do not do it, it is not asked. We make always a step-by-step approach.
Add defines only for the part you added (as I can see, it is only
related to get the HSP_PODF field in podr register), and let the rest of
the 2000+ lines untouched.

Best regards,
Stefano Babic

-- 
=
DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: +49-8142-66989-0 Fax: +49-8142-66989-80  Email: off...@denx.de
=
___
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot


Re: [U-Boot] [PATCH 1/2] mx31: make HSP clock for mx3fb driver available

2011-08-22 Thread Marek Vasut
On Monday, August 22, 2011 05:51:05 PM Helmut Raiger wrote:
> On 08/22/2011 05:02 PM, Marek Vasut wrote:
> >> Masks are not defined for i.MX31 (imx-regs.h), so I simply followed the
> >> code, which was in the file. The generic.c file for MX35 however is a
> >> different story.
> >> 
> >> To keep things simple, I suggest we leave it at that for now.
> > 
> > And noone's gonna fix it later. No please, define the proper constants
> > please.
> 
> Do you really expect me to fix code in all the arch/arm/cpu/arm1136/mx31
> files (2000+ lines) that use that kind of access, because I add 15 lines
> to one of them? There are some 50 other drivers and boards etc. that
> depend on imx-regs.h, which probably use these access methods as-well!

Hey, calm down, I didn't say anything about fixing gazilion of crap (even 
though 
that'd be nice of you !).

Actually, I did a quick look and see arch/arm/include/arch-mx35/crm_regs.h 
containing PDR0 definitions. Though they don't match your constants. It's 
either 
bug in the crm_regs.h or your code.

> 
> I'm not prepared to take this effort, sorry. After all this is
> _COSMETIC_, while this new mx3fb driver really works nicely ;-)

Oh my sense for metrosexuality of code really kicks in here ;-)

> If anyone out there modifies these files, I'll definitely rebase the
> driver to it.

It has nothing to do with your driver, the problem I have is with these few 
magic numbers you use in 1/2 (make HSP clock ...). You can use constants from 
crm_regs.h, see above.
> 
> Helmut

Cheers!
> 
> 
> --
> Scanned by MailScanner.
___
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot


Re: [U-Boot] [PATCH 1/2] mx31: make HSP clock for mx3fb driver available

2011-08-22 Thread Helmut Raiger
On 08/22/2011 05:02 PM, Marek Vasut wrote:
>
>> Masks are not defined for i.MX31 (imx-regs.h), so I simply followed the
>> code, which was in the file. The generic.c file for MX35 however is a
>> different story.
>>
>> To keep things simple, I suggest we leave it at that for now.
> And noone's gonna fix it later. No please, define the proper constants please.
>
Do you really expect me to fix code in all the arch/arm/cpu/arm1136/mx31 
files (2000+ lines) that use that kind of access, because I add 15 lines 
to one of them? There are some 50 other drivers and boards etc. that 
depend on imx-regs.h, which probably use these access methods as-well!

I'm not prepared to take this effort, sorry. After all this is 
_COSMETIC_, while this new mx3fb driver really works nicely ;-)
If anyone out there modifies these files, I'll definitely rebase the 
driver to it.

Helmut


--
Scanned by MailScanner.

___
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot


Re: [U-Boot] [PATCH 1/2] mx31: make HSP clock for mx3fb driver available

2011-08-22 Thread Marek Vasut
On Monday, August 22, 2011 05:00:15 PM Helmut Raiger wrote:
> On 08/22/2011 04:00 PM, Marek Vasut wrote:
> > +   u32 pdr0 = __REG(CCM_PDR0);
> > Can't we do readl() here?
> > 
> >> +
> >> +  /* divided by HSP_PODF in PDR0 */
> >> +  freq /= ((pdr0>>  11)&  0x7) + 1;
> > 
> > Um, don't we have defined constants for those magic numbers already?
> 
> Masks are not defined for i.MX31 (imx-regs.h), so I simply followed the
> code, which was in the file. The generic.c file for MX35 however is a
> different story.
> 
> To keep things simple, I suggest we leave it at that for now.

And noone's gonna fix it later. No please, define the proper constants please.

Thanks in advance
> 
> Helmut
> 
> 
> 
> 
> 
> --
> Scanned by MailScanner.
___
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot


Re: [U-Boot] [PATCH 1/2] mx31: make HSP clock for mx3fb driver available

2011-08-22 Thread Helmut Raiger
On 08/22/2011 04:00 PM, Marek Vasut wrote:
> + u32 pdr0 = __REG(CCM_PDR0);
> Can't we do readl() here?
>
>> +
>> +/* divided by HSP_PODF in PDR0 */
>> +freq /= ((pdr0>>  11)&  0x7) + 1;
> Um, don't we have defined constants for those magic numbers already?
Masks are not defined for i.MX31 (imx-regs.h), so I simply followed the 
code, which was in the file. The generic.c file for MX35 however is a 
different story.

To keep things simple, I suggest we leave it at that for now.

Helmut





--
Scanned by MailScanner.

___
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot


Re: [U-Boot] [PATCH 1/2] mx31: make HSP clock for mx3fb driver available

2011-08-22 Thread Marek Vasut
On Monday, August 22, 2011 03:41:36 PM Helmut Raiger wrote:
> Signed-off-by: Helmut Raiger 
> ---
>  arch/arm/cpu/arm1136/mx31/generic.c|   14 ++
>  arch/arm/include/asm/arch-mx31/clock.h |1 +
>  2 files changed, 15 insertions(+), 0 deletions(-)
> 
> diff --git a/arch/arm/cpu/arm1136/mx31/generic.c
> b/arch/arm/cpu/arm1136/mx31/generic.c index 248431b..b077d29 100644
> --- a/arch/arm/cpu/arm1136/mx31/generic.c
> +++ b/arch/arm/cpu/arm1136/mx31/generic.c
> @@ -72,6 +72,18 @@ static u32 mx31_get_ipg_clk(void)
>   return freq;
>  }
> 
> +/* hsp is the clock for the ipu */
> +static u32 mx31_get_hsp_clk(void)
> +{
> + u32 freq = mx31_get_mcu_main_clk();
> + u32 pdr0 = __REG(CCM_PDR0);

Can't we do readl() here?

> +
> + /* divided by HSP_PODF in PDR0 */
> + freq /= ((pdr0 >> 11) & 0x7) + 1;

Um, don't we have defined constants for those magic numbers already?

> +
> + return freq;
> +}
> +
>  void mx31_dump_clocks(void)
>  {
>   u32 cpufreq = mx31_get_mcu_main_clk();
> @@ -88,6 +100,8 @@ unsigned int mxc_get_clock(enum mxc_clock clk)
>   case MXC_CSPI_CLK:
>   case MXC_UART_CLK:
>   return mx31_get_ipg_clk();
> + case MXC_IPU_CLK:
> + return mx31_get_hsp_clk();
>   }
>   return -1;
>  }
> diff --git a/arch/arm/include/asm/arch-mx31/clock.h
> b/arch/arm/include/asm/arch-mx31/clock.h index fb035c4..b0aa1ce 100644
> --- a/arch/arm/include/asm/arch-mx31/clock.h
> +++ b/arch/arm/include/asm/arch-mx31/clock.h
> @@ -29,6 +29,7 @@ enum mxc_clock {
>   MXC_IPG_CLK,
>   MXC_CSPI_CLK,
>   MXC_UART_CLK,
> + MXC_IPU_CLK
>  };
> 
>  unsigned int mxc_get_clock(enum mxc_clock clk);

Cheers
___
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot


[U-Boot] [PATCH 1/2] mx31: make HSP clock for mx3fb driver available

2011-08-22 Thread Helmut Raiger

Signed-off-by: Helmut Raiger 
---
 arch/arm/cpu/arm1136/mx31/generic.c|   14 ++
 arch/arm/include/asm/arch-mx31/clock.h |1 +
 2 files changed, 15 insertions(+), 0 deletions(-)

diff --git a/arch/arm/cpu/arm1136/mx31/generic.c 
b/arch/arm/cpu/arm1136/mx31/generic.c
index 248431b..b077d29 100644
--- a/arch/arm/cpu/arm1136/mx31/generic.c
+++ b/arch/arm/cpu/arm1136/mx31/generic.c
@@ -72,6 +72,18 @@ static u32 mx31_get_ipg_clk(void)
return freq;
 }
 
+/* hsp is the clock for the ipu */
+static u32 mx31_get_hsp_clk(void)
+{
+   u32 freq = mx31_get_mcu_main_clk();
+   u32 pdr0 = __REG(CCM_PDR0);
+
+   /* divided by HSP_PODF in PDR0 */
+   freq /= ((pdr0 >> 11) & 0x7) + 1;
+
+   return freq;
+}
+
 void mx31_dump_clocks(void)
 {
u32 cpufreq = mx31_get_mcu_main_clk();
@@ -88,6 +100,8 @@ unsigned int mxc_get_clock(enum mxc_clock clk)
case MXC_CSPI_CLK:
case MXC_UART_CLK:
return mx31_get_ipg_clk();
+   case MXC_IPU_CLK:
+   return mx31_get_hsp_clk();
}
return -1;
 }
diff --git a/arch/arm/include/asm/arch-mx31/clock.h 
b/arch/arm/include/asm/arch-mx31/clock.h
index fb035c4..b0aa1ce 100644
--- a/arch/arm/include/asm/arch-mx31/clock.h
+++ b/arch/arm/include/asm/arch-mx31/clock.h
@@ -29,6 +29,7 @@ enum mxc_clock {
MXC_IPG_CLK,
MXC_CSPI_CLK,
MXC_UART_CLK,
+   MXC_IPU_CLK
 };
 
 unsigned int mxc_get_clock(enum mxc_clock clk);
-- 
1.7.4.4



--
Scanned by MailScanner.

___
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot