Skip to contentSkip to conversation

ARM: at91: add PMC_PLLICPR init function

PATCH Superseded Wenyou Yang 2 participants 7 messages Dec 9, 2015 – Dec 10, 2015

Subsystems (3)

v2 of 3 Superseded Latest is v3 →

lore
Share & tools
lore
#0 lore raw

v2 cover ARM: at91: add PMC_PLLICPR init function

To reduce the duplicated code, add PLLICPR init function, use the function to clean up the PMC_PLLICPR directly writing code.

It is based on the following patch set.
[PATCH 0/5] ARM: at91: improve peripheral and system clock handle functions [PATCH 0/4] ARM: at91: add UTMI PLL handle functions
[PATCH 0/3] ARM: at91: add PLLB handle functions

Changes in v2:
- move at91_pllicpr_init() definition to the common file, clock.c.
- fix checkpatch errors.

Wenyou Yang (3):
ARM: at91: clock: add PMC_PLLICPR init function
ARM: at91: clean up the PMC_PLLICPR init code
board: atmel: clean up the PMC_PLLICPR init code

 arch/arm/mach-at91/clock.c                      |    7 +++++++
 arch/arm/mach-at91/include/mach/at91_pmc.h      |    7 +++++++
 arch/arm/mach-at91/include/mach/clk.h           |    1 +
 arch/arm/mach-at91/spl_at91.c                   |    5 +----
 board/atmel/sama5d3_xplained/sama5d3_xplained.c |    4 +---
 board/atmel/sama5d3xek/sama5d3xek.c             |    4 +---
 board/atmel/sama5d4_xplained/sama5d4_xplained.c |    4 +---
 board/atmel/sama5d4ek/sama5d4ek.c               |    4 +---
 8 files changed, 20 insertions(+), 16 deletions(-)
Signature · 1 line
1.7.9.5
#1 lore raw

PATCH v2 1/3 ARM: at91: clock: add PMC_PLLICPR init function

To avoid the duplicated code, add the PMC_PLLICPR init function.

---

Changes in v2:
- move at91_pllicpr_init() definition to the common file, clock.c.
- fix checkpatch errors.

 arch/arm/mach-at91/clock.c                 |    7 +++++++
 arch/arm/mach-at91/include/mach/at91_pmc.h |    7 +++++++
 arch/arm/mach-at91/include/mach/clk.h      |    1 +
 3 files changed, 15 insertions(+)
arch/arm/mach-at91/clock.c +7 -0
index b8f8d48..885d6fe 100644
@@ -118,3 +118,10 @@ void at91_usb_clk_init(u32 value)
 
 	writel(value, &pmc->usb);
 }
+
+void at91_pllicpr_init(u32 icpr)
+{
+	struct at91_pmc *pmc = (struct at91_pmc *)ATMEL_BASE_PMC;
+
+	writel(icpr, &pmc->pllicpr);
+}
arch/arm/mach-at91/include/mach/at91_pmc.h +7 -0
index eb40194..7684f09 100644
@@ -246,4 +246,11 @@ typedef struct at91_pmc {
 #define		AT91_PMC_GCKRDY		(1 << 24)
 
 #define		AT91_PMC_PROTKEY	0x504d4301	/* Activation Code */
+
+/* PLL Charge Pump Current Register (PMC_PLLICPR) */
+#define AT91_PMC_ICP_PLLA(x)		(((x) & 0x3) << 0)
+#define AT91_PMC_IPLL_PLLA(x)		(((x) & 0x7) << 8)
+#define AT91_PMC_ICP_PLLU(x)		(((x) & 0x3) << 16)
+#define AT91_PMC_IVCO_PLLU(x)		(((x) & 0x3) << 24)
+
 #endif
arch/arm/mach-at91/include/mach/clk.h +1 -0
index 64dec52..8577c74 100644
@@ -135,5 +135,6 @@ int at91_upll_clk_disable(void);
 void at91_usb_clk_init(u32 value);
 int at91_pllb_clk_enable(u32 pllbr);
 int at91_pllb_clk_disable(void);
+void at91_pllicpr_init(u32 icpr);
 
 #endif /* __ASM_ARM_ARCH_CLK_H__ */
Signature · 1 line
1.7.9.5
#2 lore raw

PATCH v2 1/3 ARM: at91: clock: add PMC_PLLICPR init function

Hello Wenyou,

Am 09.12.2015 um 08:38 schrieb Wenyou Yang:

Quoted 5 lines

To avoid the duplicated code, add the PMC_PLLICPR init function.

---

Quoted 8 lines

Changes in v2:
- move at91_pllicpr_init() definition to the common file, clock.c.
- fix checkpatch errors.

  arch/arm/mach-at91/clock.c                 |    7 +++++++
  arch/arm/mach-at91/include/mach/at91_pmc.h |    7 +++++++
  arch/arm/mach-at91/include/mach/clk.h      |    1 +
  3 files changed, 15 insertions(+)

Tested on the smartweb board, see log:
http://xeidos.ddns.net/buildbot/builders/smartweb_dfu/builds/29/steps/shell/logs/tbotlog

bye,
Heiko

Quoted 44 lines
arch/arm/mach-at91/clock.c +7 -0
index b8f8d48..885d6fe 100644
@@ -118,3 +118,10 @@ void at91_usb_clk_init(u32 value)
 
  	writel(value, &pmc->usb);
  }
+
+void at91_pllicpr_init(u32 icpr)
+{
+	struct at91_pmc *pmc = (struct at91_pmc *)ATMEL_BASE_PMC;
+
+	writel(icpr, &pmc->pllicpr);
+}
arch/arm/mach-at91/include/mach/at91_pmc.h +7 -0
index eb40194..7684f09 100644
@@ -246,4 +246,11 @@ typedef struct at91_pmc {
  #define		AT91_PMC_GCKRDY		(1 << 24)
 
  #define		AT91_PMC_PROTKEY	0x504d4301	/* Activation Code */
+
+/* PLL Charge Pump Current Register (PMC_PLLICPR) */
+#define AT91_PMC_ICP_PLLA(x)		(((x) & 0x3) << 0)
+#define AT91_PMC_IPLL_PLLA(x)		(((x) & 0x7) << 8)
+#define AT91_PMC_ICP_PLLU(x)		(((x) & 0x3) << 16)
+#define AT91_PMC_IVCO_PLLU(x)		(((x) & 0x3) << 24)
+
  #endif
arch/arm/mach-at91/include/mach/clk.h +1 -0
index 64dec52..8577c74 100644
@@ -135,5 +135,6 @@ int at91_upll_clk_disable(void);
  void at91_usb_clk_init(u32 value);
  int at91_pllb_clk_enable(u32 pllbr);
  int at91_pllb_clk_disable(void);
+void at91_pllicpr_init(u32 icpr);
 
  #endif /* __ASM_ARM_ARCH_CLK_H__ */
Signature · 2 lines
DENX Software Engineering GmbH,      Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
#3 lore raw

PATCH v2 2/3 ARM: at91: clean up the PMC_PLLICPR init code

In reply to Wenyou Yang

Due to introducing the PMC_PLLICPR init function, use this function to clean up the code.

---

Changes in v2: None

 arch/arm/mach-at91/spl_at91.c |    5 +----
 1 file changed, 1 insertion(+), 4 deletions(-)
arch/arm/mach-at91/spl_at91.c +1 -4
index b19f95b..cc3341a 100644
@@ -14,7 +14,6 @@
 #include <asm/arch/at91_common.h>
 #include <asm/arch/at91sam9_matrix.h>
 #include <asm/arch/at91_pit.h>
-#include <asm/arch/at91_pmc.h>
 #include <asm/arch/at91_rstc.h>
 #include <asm/arch/at91_wdt.h>
 #include <asm/arch/clk.h>
@@ -77,8 +76,6 @@ void __weak spl_board_init(void)
 
 void board_init_f(ulong dummy)
 {
-	struct at91_pmc *pmc = (struct at91_pmc *)ATMEL_BASE_PMC;
-
 	lowlevel_clock_init();
 	at91_disable_wdt();
 
@@ -86,7 +83,7 @@ void board_init_f(ulong dummy)
 	 * At this stage the main oscillator is supposed to be enabled
 	 * PCK = MCK = MOSC
 	 */
-	writel(0x00, &pmc->pllicpr);
+	at91_pllicpr_init(0x00);
 
 	/* Configure PLLA = MOSC * (PLL_MULA + 1) / PLL_DIVA */
 	at91_plla_init(CONFIG_SYS_AT91_PLLA);
Signature · 1 line
1.7.9.5
#4 lore raw

PATCH v2 2/3 ARM: at91: clean up the PMC_PLLICPR init code

Hello Wenyou,

Am 09.12.2015 um 08:38 schrieb Wenyou Yang:

Quoted 10 lines

Due to introducing the PMC_PLLICPR init function, use this function to clean up the code.

---

Changes in v2: None

  arch/arm/mach-at91/spl_at91.c |    5 +----
  1 file changed, 1 insertion(+), 4 deletions(-)

Tested on the smartweb board, see log:
http://xeidos.ddns.net/buildbot/builders/smartweb_dfu/builds/29/steps/shell/logs/tbotlog

bye,
Heiko

Quoted 32 lines
arch/arm/mach-at91/spl_at91.c +1 -4
index b19f95b..cc3341a 100644
@@ -14,7 +14,6 @@
  #include <asm/arch/at91_common.h>
  #include <asm/arch/at91sam9_matrix.h>
  #include <asm/arch/at91_pit.h>
-#include <asm/arch/at91_pmc.h>
  #include <asm/arch/at91_rstc.h>
  #include <asm/arch/at91_wdt.h>
  #include <asm/arch/clk.h>
@@ -77,8 +76,6 @@ void __weak spl_board_init(void)
 
  void board_init_f(ulong dummy)
  {
-	struct at91_pmc *pmc = (struct at91_pmc *)ATMEL_BASE_PMC;
-
  	lowlevel_clock_init();
  	at91_disable_wdt();
 
@@ -86,7 +83,7 @@ void board_init_f(ulong dummy)
  	 * At this stage the main oscillator is supposed to be enabled
  	 * PCK = MCK = MOSC
  	 */
-	writel(0x00, &pmc->pllicpr);
+	at91_pllicpr_init(0x00);
 
  	/* Configure PLLA = MOSC * (PLL_MULA + 1) / PLL_DIVA */
  	at91_plla_init(CONFIG_SYS_AT91_PLLA);
Signature · 2 lines
DENX Software Engineering GmbH,      Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
#5 lore raw

PATCH v2 3/3 board: atmel: clean up the PMC_PLLICPR init code

In reply to Wenyou Yang

Due to introducing the PMC_PLLICPR init function, use this function to clean up the code.

---

Changes in v2: None

 board/atmel/sama5d3_xplained/sama5d3_xplained.c |    4 +---
 board/atmel/sama5d3xek/sama5d3xek.c             |    4 +---
 board/atmel/sama5d4_xplained/sama5d4_xplained.c |    4 +---
 board/atmel/sama5d4ek/sama5d4ek.c               |    4 +---
 4 files changed, 4 insertions(+), 12 deletions(-)
board/atmel/sama5d3_xplained/sama5d3_xplained.c +1 -3
index d180b41..6532970 100644
@@ -10,7 +10,6 @@
 #include <asm/io.h>
 #include <asm/arch/sama5d3_smc.h>
 #include <asm/arch/at91_common.h>
-#include <asm/arch/at91_pmc.h>
 #include <asm/arch/at91_rstc.h>
 #include <asm/arch/gpio.h>
 #include <asm/arch/clk.h>
@@ -198,7 +197,6 @@ void mem_init(void)
 
 void at91_pmc_init(void)
 {
-	struct at91_pmc *pmc = (struct at91_pmc *)ATMEL_BASE_PMC;
 	u32 tmp;
 
 	tmp = AT91_PMC_PLLAR_29 |
@@ -207,7 +205,7 @@ void at91_pmc_init(void)
 	      AT91_PMC_PLLXR_DIV(1);
 	at91_plla_init(tmp);
 
-	writel(0x3 << 8, &pmc->pllicpr);
+	at91_pllicpr_init(AT91_PMC_IPLL_PLLA(0x3));
 
 	tmp = AT91_PMC_MCKR_MDIV_4 |
 	      AT91_PMC_MCKR_CSS_PLLA;
board/atmel/sama5d3xek/sama5d3xek.c +1 -3
index 777e57e..7a804e8 100644
@@ -10,7 +10,6 @@
 #include <asm/io.h>
 #include <asm/arch/sama5d3_smc.h>
 #include <asm/arch/at91_common.h>
-#include <asm/arch/at91_pmc.h>
 #include <asm/arch/at91_rstc.h>
 #include <asm/arch/gpio.h>
 #include <asm/arch/clk.h>
@@ -457,7 +456,6 @@ void mem_init(void)
 
 void at91_pmc_init(void)
 {
-	struct at91_pmc *pmc = (struct at91_pmc *)ATMEL_BASE_PMC;
 	u32 tmp;
 
 	tmp = AT91_PMC_PLLAR_29 |
@@ -466,7 +464,7 @@ void at91_pmc_init(void)
 	      AT91_PMC_PLLXR_DIV(1);
 	at91_plla_init(tmp);
 
-	writel(0x3 << 8, &pmc->pllicpr);
+	at91_pllicpr_init(AT91_PMC_IPLL_PLLA(0x3));
 
 	tmp = AT91_PMC_MCKR_MDIV_4 |
 	      AT91_PMC_MCKR_CSS_PLLA;
board/atmel/sama5d4_xplained/sama5d4_xplained.c +1 -3
index e95310c..3fec662 100644
@@ -8,7 +8,6 @@
 #include <common.h>
 #include <asm/io.h>
 #include <asm/arch/at91_common.h>
-#include <asm/arch/at91_pmc.h>
 #include <asm/arch/at91_rstc.h>
 #include <asm/arch/atmel_mpddrc.h>
 #include <asm/arch/atmel_usba_udc.h>
@@ -397,7 +396,6 @@ void mem_init(void)
 
 void at91_pmc_init(void)
 {
-	struct at91_pmc *pmc = (struct at91_pmc *)ATMEL_BASE_PMC;
 	u32 tmp;
 
 	tmp = AT91_PMC_PLLAR_29 |
@@ -406,7 +404,7 @@ void at91_pmc_init(void)
 	      AT91_PMC_PLLXR_DIV(1);
 	at91_plla_init(tmp);
 
-	writel(0x0 << 8, &pmc->pllicpr);
+	at91_pllicpr_init(AT91_PMC_IPLL_PLLA(0x0));
 
 	tmp = AT91_PMC_MCKR_H32MXDIV |
 	      AT91_PMC_MCKR_PLLADIV_2 |
board/atmel/sama5d4ek/sama5d4ek.c +1 -3
index c92e2588..6ccbc64 100644
@@ -8,7 +8,6 @@
 #include <common.h>
 #include <asm/io.h>
 #include <asm/arch/at91_common.h>
-#include <asm/arch/at91_pmc.h>
 #include <asm/arch/at91_rstc.h>
 #include <asm/arch/atmel_mpddrc.h>
 #include <asm/arch/atmel_usba_udc.h>
@@ -393,7 +392,6 @@ void mem_init(void)
 
 void at91_pmc_init(void)
 {
-	struct at91_pmc *pmc = (struct at91_pmc *)ATMEL_BASE_PMC;
 	u32 tmp;
 
 	tmp = AT91_PMC_PLLAR_29 |
@@ -402,7 +400,7 @@ void at91_pmc_init(void)
 	      AT91_PMC_PLLXR_DIV(1);
 	at91_plla_init(tmp);
 
-	writel(0x0 << 8, &pmc->pllicpr);
+	at91_pllicpr_init(AT91_PMC_IPLL_PLLA(0x0));
 
 	tmp = AT91_PMC_MCKR_H32MXDIV |
 	      AT91_PMC_MCKR_PLLADIV_2 |
Signature · 1 line
1.7.9.5
#6 lore raw

PATCH v2 3/3 board: atmel: clean up the PMC_PLLICPR init code

Hello Wenyou,

Am 09.12.2015 um 08:38 schrieb Wenyou Yang:

Quoted 6 lines

Due to introducing the PMC_PLLICPR init function, use this function to clean up the code.

---

Quoted 7 lines

Changes in v2: None

  board/atmel/sama5d3_xplained/sama5d3_xplained.c |    4 +---
  board/atmel/sama5d3xek/sama5d3xek.c             |    4 +---
  board/atmel/sama5d4_xplained/sama5d4_xplained.c |    4 +---
  board/atmel/sama5d4ek/sama5d4ek.c               |    4 +---
  4 files changed, 4 insertions(+), 12 deletions(-)

Tested on the smartweb board, see log:
http://xeidos.ddns.net/buildbot/builders/smartweb_dfu/builds/29/steps/shell/logs/tbotlog

bye,
Heiko

Quoted 118 lines
board/atmel/sama5d3_xplained/sama5d3_xplained.c +1 -3
index d180b41..6532970 100644
@@ -10,7 +10,6 @@
  #include <asm/io.h>
  #include <asm/arch/sama5d3_smc.h>
  #include <asm/arch/at91_common.h>
-#include <asm/arch/at91_pmc.h>
  #include <asm/arch/at91_rstc.h>
  #include <asm/arch/gpio.h>
  #include <asm/arch/clk.h>
@@ -198,7 +197,6 @@ void mem_init(void)
 
  void at91_pmc_init(void)
  {
-	struct at91_pmc *pmc = (struct at91_pmc *)ATMEL_BASE_PMC;
  	u32 tmp;
 
  	tmp = AT91_PMC_PLLAR_29 |
@@ -207,7 +205,7 @@ void at91_pmc_init(void)
  	      AT91_PMC_PLLXR_DIV(1);
  	at91_plla_init(tmp);
 
-	writel(0x3 << 8, &pmc->pllicpr);
+	at91_pllicpr_init(AT91_PMC_IPLL_PLLA(0x3));
 
  	tmp = AT91_PMC_MCKR_MDIV_4 |
  	      AT91_PMC_MCKR_CSS_PLLA;
board/atmel/sama5d3xek/sama5d3xek.c +1 -3
index 777e57e..7a804e8 100644
@@ -10,7 +10,6 @@
  #include <asm/io.h>
  #include <asm/arch/sama5d3_smc.h>
  #include <asm/arch/at91_common.h>
-#include <asm/arch/at91_pmc.h>
  #include <asm/arch/at91_rstc.h>
  #include <asm/arch/gpio.h>
  #include <asm/arch/clk.h>
@@ -457,7 +456,6 @@ void mem_init(void)
 
  void at91_pmc_init(void)
  {
-	struct at91_pmc *pmc = (struct at91_pmc *)ATMEL_BASE_PMC;
  	u32 tmp;
 
  	tmp = AT91_PMC_PLLAR_29 |
@@ -466,7 +464,7 @@ void at91_pmc_init(void)
  	      AT91_PMC_PLLXR_DIV(1);
  	at91_plla_init(tmp);
 
-	writel(0x3 << 8, &pmc->pllicpr);
+	at91_pllicpr_init(AT91_PMC_IPLL_PLLA(0x3));
 
  	tmp = AT91_PMC_MCKR_MDIV_4 |
  	      AT91_PMC_MCKR_CSS_PLLA;
board/atmel/sama5d4_xplained/sama5d4_xplained.c +1 -3
index e95310c..3fec662 100644
@@ -8,7 +8,6 @@
  #include <common.h>
  #include <asm/io.h>
  #include <asm/arch/at91_common.h>
-#include <asm/arch/at91_pmc.h>
  #include <asm/arch/at91_rstc.h>
  #include <asm/arch/atmel_mpddrc.h>
  #include <asm/arch/atmel_usba_udc.h>
@@ -397,7 +396,6 @@ void mem_init(void)
 
  void at91_pmc_init(void)
  {
-	struct at91_pmc *pmc = (struct at91_pmc *)ATMEL_BASE_PMC;
  	u32 tmp;
 
  	tmp = AT91_PMC_PLLAR_29 |
@@ -406,7 +404,7 @@ void at91_pmc_init(void)
  	      AT91_PMC_PLLXR_DIV(1);
  	at91_plla_init(tmp);
 
-	writel(0x0 << 8, &pmc->pllicpr);
+	at91_pllicpr_init(AT91_PMC_IPLL_PLLA(0x0));
 
  	tmp = AT91_PMC_MCKR_H32MXDIV |
  	      AT91_PMC_MCKR_PLLADIV_2 |
board/atmel/sama5d4ek/sama5d4ek.c +1 -3
index c92e2588..6ccbc64 100644
@@ -8,7 +8,6 @@
  #include <common.h>
  #include <asm/io.h>
  #include <asm/arch/at91_common.h>
-#include <asm/arch/at91_pmc.h>
  #include <asm/arch/at91_rstc.h>
  #include <asm/arch/atmel_mpddrc.h>
  #include <asm/arch/atmel_usba_udc.h>
@@ -393,7 +392,6 @@ void mem_init(void)
 
  void at91_pmc_init(void)
  {
-	struct at91_pmc *pmc = (struct at91_pmc *)ATMEL_BASE_PMC;
  	u32 tmp;
 
  	tmp = AT91_PMC_PLLAR_29 |
@@ -402,7 +400,7 @@ void at91_pmc_init(void)
  	      AT91_PMC_PLLXR_DIV(1);
  	at91_plla_init(tmp);
 
-	writel(0x0 << 8, &pmc->pllicpr);
+	at91_pllicpr_init(AT91_PMC_IPLL_PLLA(0x0));
 
  	tmp = AT91_PMC_MCKR_H32MXDIV |
  	      AT91_PMC_MCKR_PLLADIV_2 |
Signature · 2 lines
DENX Software Engineering GmbH,      Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany