All of lore.kernel.org
 help / color / mirror / Atom feed
* [U-Boot] [PATCH 0/2] unify hw level clock for at91 cores
@ 2011-06-07 23:27 Andreas Bießmann
  2011-06-07 23:27 ` [U-Boot] [PATCH 1/2] at91: move a/a/c/arm926ejs/at91/clock.c -> a/a/lib/at91 Andreas Bießmann
  2011-06-07 23:27 ` [U-Boot] [PATCH 2/2] arm920t/at91: use new clock features from libat91-common Andreas Bießmann
  0 siblings, 2 replies; 11+ messages in thread
From: Andreas Bießmann @ 2011-06-07 23:27 UTC (permalink / raw)
  To: u-boot

This patchset makes the arm926ejs/at91/clock.c features available to
arm920t/at91 devices. This is a first step to replace at91rm9200_usart by
atmel_usart driver.

This change was already discussed in mid.gmane.org/BANLkTimn29vmAYGb5csMdCYS-xx6zD_6Zw at mail.gmail.com

The patchset is on top of current atmel/master. It would be nice if we can get
this change into 2011.06. The changes for at91rm9200 removal are ongoing
(atmel_usart is required!) but will most probable not be finished for 2011.06
release.
Therefore it is not a must to get these changes in now.

Andreas Bie?mann (2):
  at91: move a/a/c/arm926ejs/at91/clock.c -> a/a/lib/at91
  arm920t/at91: use new clock features from libat91-common

 Makefile                                    |    3 +
 arch/arm/cpu/arm920t/at91/Makefile          |    1 +
 arch/arm/cpu/arm926ejs/at91/Makefile        |    1 -
 arch/arm/cpu/arm926ejs/at91/clock.c         |  215 ---------------------------
 arch/arm/include/asm/arch-at91/at91rm9200.h |    1 +
 arch/arm/lib/at91/Makefile                  |   45 ++++++
 arch/arm/lib/at91/clock.c                   |  215 +++++++++++++++++++++++++++
 include/configs/at91rm9200ek.h              |    3 +
 include/configs/cpuat91.h                   |    5 +-
 include/configs/eb_cpux9k2.h                |    4 +-
 10 files changed, 273 insertions(+), 220 deletions(-)
 delete mode 100644 arch/arm/cpu/arm926ejs/at91/clock.c
 create mode 100644 arch/arm/lib/at91/Makefile
 create mode 100644 arch/arm/lib/at91/clock.c

-- 
1.7.5.4

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [U-Boot] [PATCH 1/2] at91: move a/a/c/arm926ejs/at91/clock.c -> a/a/lib/at91
  2011-06-07 23:27 [U-Boot] [PATCH 0/2] unify hw level clock for at91 cores Andreas Bießmann
@ 2011-06-07 23:27 ` Andreas Bießmann
  2011-06-09  9:38   ` Reinhard Meyer
  2011-06-07 23:27 ` [U-Boot] [PATCH 2/2] arm920t/at91: use new clock features from libat91-common Andreas Bießmann
  1 sibling, 1 reply; 11+ messages in thread
From: Andreas Bießmann @ 2011-06-07 23:27 UTC (permalink / raw)
  To: u-boot

The at91/clock.c is copied from linux kernel and has support for both
arm920t and arm926ejs core devices. Therefore this patch moves this
generic at91/clock.c to a new place at arch/arm/lib/at91 to be used from
at91 family devices.

We build a new libat91-common.o to provide the required symbols to both
cpu types.

Signed-off-by: Andreas Bie?mann <andreas.devel@googlemail.com>
---
 Makefile                             |    3 +
 arch/arm/cpu/arm926ejs/at91/Makefile |    1 -
 arch/arm/cpu/arm926ejs/at91/clock.c  |  215 ----------------------------------
 arch/arm/lib/at91/Makefile           |   45 +++++++
 arch/arm/lib/at91/clock.c            |  215 ++++++++++++++++++++++++++++++++++
 5 files changed, 263 insertions(+), 216 deletions(-)
 delete mode 100644 arch/arm/cpu/arm926ejs/at91/clock.c
 create mode 100644 arch/arm/lib/at91/Makefile
 create mode 100644 arch/arm/lib/at91/clock.c

diff --git a/Makefile b/Makefile
index 76124e5..64e47c7 100644
--- a/Makefile
+++ b/Makefile
@@ -189,6 +189,9 @@ LIBS += $(shell if [ -f board/$(VENDOR)/common/Makefile ]; then echo \
 LIBS += $(CPUDIR)/lib$(CPU).o
 ifdef SOC
 LIBS += $(CPUDIR)/$(SOC)/lib$(SOC).o
+ifeq ($(SOC),at91)
+LIBS += arch/arm/lib/at91/libat91-common.o
+endif
 endif
 ifeq ($(CPU),ixp)
 LIBS += arch/arm/cpu/ixp/npe/libnpe.o
diff --git a/arch/arm/cpu/arm926ejs/at91/Makefile b/arch/arm/cpu/arm926ejs/at91/Makefile
index f333753..ee66b3d 100644
--- a/arch/arm/cpu/arm926ejs/at91/Makefile
+++ b/arch/arm/cpu/arm926ejs/at91/Makefile
@@ -37,7 +37,6 @@ COBJS-$(CONFIG_AT91SAM9M10G45)	+= at91sam9m10g45_devices.o
 COBJS-$(CONFIG_AT91SAM9G45)	+= at91sam9m10g45_devices.o
 COBJS-$(CONFIG_AT91_EFLASH)	+= eflash.o
 COBJS-$(CONFIG_AT91_LED)	+= led.o
-COBJS-y += clock.o
 COBJS-y += cpu.o
 COBJS-y	+= reset.o
 COBJS-y	+= timer.o
diff --git a/arch/arm/cpu/arm926ejs/at91/clock.c b/arch/arm/cpu/arm926ejs/at91/clock.c
deleted file mode 100644
index 608af2c..0000000
--- a/arch/arm/cpu/arm926ejs/at91/clock.c
+++ /dev/null
@@ -1,215 +0,0 @@
-/*
- * [origin: Linux kernel linux/arch/arm/mach-at91/clock.c]
- *
- * Copyright (C) 2005 David Brownell
- * Copyright (C) 2005 Ivan Kokshaysky
- * Copyright (C) 2009 Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.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 <common.h>
-#include <asm/io.h>
-#include <asm/arch/hardware.h>
-#include <asm/arch/at91_pmc.h>
-#include <asm/arch/clk.h>
-
-#if !defined(CONFIG_AT91FAMILY)
-# error You need to define CONFIG_AT91FAMILY in your board config!
-#endif
-
-DECLARE_GLOBAL_DATA_PTR;
-
-unsigned long get_cpu_clk_rate(void)
-{
-	return gd->cpu_clk_rate_hz;
-}
-
-unsigned long get_main_clk_rate(void)
-{
-	return gd->main_clk_rate_hz;
-}
-
-unsigned long get_mck_clk_rate(void)
-{
-	return gd->mck_rate_hz;
-}
-
-unsigned long get_plla_clk_rate(void)
-{
-	return gd->plla_rate_hz;
-}
-
-unsigned long get_pllb_clk_rate(void)
-{
-	return gd->pllb_rate_hz;
-}
-
-u32 get_pllb_init(void)
-{
-	return gd->at91_pllb_usb_init;
-}
-
-static unsigned long at91_css_to_rate(unsigned long css)
-{
-	switch (css) {
-	case AT91_PMC_MCKR_CSS_SLOW:
-		return CONFIG_SYS_AT91_SLOW_CLOCK;
-	case AT91_PMC_MCKR_CSS_MAIN:
-		return gd->main_clk_rate_hz;
-	case AT91_PMC_MCKR_CSS_PLLA:
-		return gd->plla_rate_hz;
-	case AT91_PMC_MCKR_CSS_PLLB:
-		return gd->pllb_rate_hz;
-	}
-
-	return 0;
-}
-
-#ifdef CONFIG_USB_ATMEL
-static unsigned at91_pll_calc(unsigned main_freq, unsigned out_freq)
-{
-	unsigned i, div = 0, mul = 0, diff = 1 << 30;
-	unsigned ret = (out_freq > 155000000) ? 0xbe00 : 0x3e00;
-
-	/* PLL output max 240 MHz (or 180 MHz per errata) */
-	if (out_freq > 240000000)
-		goto fail;
-
-	for (i = 1; i < 256; i++) {
-		int diff1;
-		unsigned input, mul1;
-
-		/*
-		 * PLL input between 1MHz and 32MHz per spec, but lower
-		 * frequences seem necessary in some cases so allow 100K.
-		 * Warning: some newer products need 2MHz min.
-		 */
-		input = main_freq / i;
-#if defined(CONFIG_AT91SAM9G20)
-		if (input < 2000000)
-			continue;
-#endif
-		if (input < 100000)
-			continue;
-		if (input > 32000000)
-			continue;
-
-		mul1 = out_freq / input;
-#if defined(CONFIG_AT91SAM9G20)
-		if (mul > 63)
-			continue;
-#endif
-		if (mul1 > 2048)
-			continue;
-		if (mul1 < 2)
-			goto fail;
-
-		diff1 = out_freq - input * mul1;
-		if (diff1 < 0)
-			diff1 = -diff1;
-		if (diff > diff1) {
-			diff = diff1;
-			div = i;
-			mul = mul1;
-			if (diff == 0)
-				break;
-		}
-	}
-	if (i == 256 && diff > (out_freq >> 5))
-		goto fail;
-	return ret | ((mul - 1) << 16) | div;
-fail:
-	return 0;
-}
-#endif
-
-static u32 at91_pll_rate(u32 freq, u32 reg)
-{
-	unsigned mul, div;
-
-	div = reg & 0xff;
-	mul = (reg >> 16) & 0x7ff;
-	if (div && mul) {
-		freq /= div;
-		freq *= mul + 1;
-	} else
-		freq = 0;
-
-	return freq;
-}
-
-int at91_clock_init(unsigned long main_clock)
-{
-	unsigned freq, mckr;
-	at91_pmc_t *pmc = (at91_pmc_t *) ATMEL_BASE_PMC;
-#ifndef CONFIG_SYS_AT91_MAIN_CLOCK
-	unsigned tmp;
-	/*
-	 * When the bootloader initialized the main oscillator correctly,
-	 * there's no problem using the cycle counter.  But if it didn't,
-	 * or when using oscillator bypass mode, we must be told the speed
-	 * of the main clock.
-	 */
-	if (!main_clock) {
-		do {
-			tmp = readl(&pmc->mcfr);
-		} while (!(tmp & AT91_PMC_MCFR_MAINRDY));
-		tmp &= AT91_PMC_MCFR_MAINF_MASK;
-		main_clock = tmp * (CONFIG_SYS_AT91_SLOW_CLOCK / 16);
-	}
-#endif
-	gd->main_clk_rate_hz = main_clock;
-
-	/* report if PLLA is more than mildly overclocked */
-	gd->plla_rate_hz = at91_pll_rate(main_clock, readl(&pmc->pllar));
-
-#ifdef CONFIG_USB_ATMEL
-	/*
-	 * USB clock init:  choose 48 MHz PLLB value,
-	 * disable 48MHz clock during usb peripheral suspend.
-	 *
-	 * REVISIT:  assumes MCK doesn't derive from PLLB!
-	 */
-	gd->at91_pllb_usb_init = at91_pll_calc(main_clock, 48000000 * 2) |
-			     AT91_PMC_PLLBR_USBDIV_2;
-	gd->pllb_rate_hz = at91_pll_rate(main_clock, gd->at91_pllb_usb_init);
-#endif
-
-	/*
-	 * MCK and CPU derive from one of those primary clocks.
-	 * For now, assume this parentage won't change.
-	 */
-	mckr = readl(&pmc->mckr);
-#if defined(CONFIG_AT91SAM9G45) || defined(CONFIG_AT91SAM9M10G45)
-	/* plla divisor by 2 */
-	gd->plla_rate_hz /= (1 << ((mckr & 1 << 12) >> 12));
-#endif
-	gd->mck_rate_hz = at91_css_to_rate(mckr & AT91_PMC_MCKR_CSS_MASK);
-	freq = gd->mck_rate_hz;
-
-	freq /= (1 << ((mckr & AT91_PMC_MCKR_PRES_MASK) >> 2));	/* prescale */
-#if defined(CONFIG_AT91RM9200)
-	/* mdiv */
-	gd->mck_rate_hz = freq / (1 + ((mckr & AT91_PMC_MCKR_MDIV_MASK) >> 8));
-#elif defined(CONFIG_AT91SAM9G20)
-	/* mdiv ; (x >> 7) = ((x >> 8) * 2) */
-	gd->mck_rate_hz = (mckr & AT91_PMC_MCKR_MDIV_MASK) ?
-		freq / ((mckr & AT91_PMC_MCKR_MDIV_MASK) >> 7) : freq;
-	if (mckr & AT91_PMC_MCKR_MDIV_MASK)
-		freq /= 2;			/* processor clock division */
-#elif defined(CONFIG_AT91SAM9G45) || defined(CONFIG_AT91SAM9M10G45)
-	gd->mck_rate_hz = (mckr & AT91_PMC_MCKR_MDIV_MASK) ==
-		(AT91_PMC_MCKR_MDIV_2 | AT91_PMC_MCKR_MDIV_4)
-		? freq / 3
-		: freq / (1 << ((mckr & AT91_PMC_MCKR_MDIV_MASK) >> 8));
-#else
-	gd->mck_rate_hz = freq / (1 << ((mckr & AT91_PMC_MCKR_MDIV_MASK) >> 8));
-#endif
-	gd->cpu_clk_rate_hz = freq;
-
-	return 0;
-}
diff --git a/arch/arm/lib/at91/Makefile b/arch/arm/lib/at91/Makefile
new file mode 100644
index 0000000..a264630
--- /dev/null
+++ b/arch/arm/lib/at91/Makefile
@@ -0,0 +1,45 @@
+#
+# (C) Copyright 2000-2008
+# Wolfgang Denk, DENX Software Engineering, wd at denx.de.
+#
+# See file CREDITS for list of people who contributed to this
+# project.
+#
+# 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.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+# MA 02111-1307 USA
+#
+
+include $(TOPDIR)/config.mk
+
+LIB	= $(obj)libat91-common.o
+
+COBJS-y	+= clock.o
+
+SRCS    := $(SOBJS-y:.o=.S) $(COBJS-y:.o=.c)
+OBJS    := $(addprefix $(obj),$(SOBJS-y) $(COBJS-y))
+
+all:	$(obj).depend $(LIB)
+
+$(LIB):	$(OBJS)
+	$(call cmd_link_o_target, $(OBJS))
+
+#########################################################################
+
+# defines $(obj).depend target
+include $(SRCTREE)/rules.mk
+
+sinclude $(obj).depend
+
+#########################################################################
diff --git a/arch/arm/lib/at91/clock.c b/arch/arm/lib/at91/clock.c
new file mode 100644
index 0000000..608af2c
--- /dev/null
+++ b/arch/arm/lib/at91/clock.c
@@ -0,0 +1,215 @@
+/*
+ * [origin: Linux kernel linux/arch/arm/mach-at91/clock.c]
+ *
+ * Copyright (C) 2005 David Brownell
+ * Copyright (C) 2005 Ivan Kokshaysky
+ * Copyright (C) 2009 Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.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 <common.h>
+#include <asm/io.h>
+#include <asm/arch/hardware.h>
+#include <asm/arch/at91_pmc.h>
+#include <asm/arch/clk.h>
+
+#if !defined(CONFIG_AT91FAMILY)
+# error You need to define CONFIG_AT91FAMILY in your board config!
+#endif
+
+DECLARE_GLOBAL_DATA_PTR;
+
+unsigned long get_cpu_clk_rate(void)
+{
+	return gd->cpu_clk_rate_hz;
+}
+
+unsigned long get_main_clk_rate(void)
+{
+	return gd->main_clk_rate_hz;
+}
+
+unsigned long get_mck_clk_rate(void)
+{
+	return gd->mck_rate_hz;
+}
+
+unsigned long get_plla_clk_rate(void)
+{
+	return gd->plla_rate_hz;
+}
+
+unsigned long get_pllb_clk_rate(void)
+{
+	return gd->pllb_rate_hz;
+}
+
+u32 get_pllb_init(void)
+{
+	return gd->at91_pllb_usb_init;
+}
+
+static unsigned long at91_css_to_rate(unsigned long css)
+{
+	switch (css) {
+	case AT91_PMC_MCKR_CSS_SLOW:
+		return CONFIG_SYS_AT91_SLOW_CLOCK;
+	case AT91_PMC_MCKR_CSS_MAIN:
+		return gd->main_clk_rate_hz;
+	case AT91_PMC_MCKR_CSS_PLLA:
+		return gd->plla_rate_hz;
+	case AT91_PMC_MCKR_CSS_PLLB:
+		return gd->pllb_rate_hz;
+	}
+
+	return 0;
+}
+
+#ifdef CONFIG_USB_ATMEL
+static unsigned at91_pll_calc(unsigned main_freq, unsigned out_freq)
+{
+	unsigned i, div = 0, mul = 0, diff = 1 << 30;
+	unsigned ret = (out_freq > 155000000) ? 0xbe00 : 0x3e00;
+
+	/* PLL output max 240 MHz (or 180 MHz per errata) */
+	if (out_freq > 240000000)
+		goto fail;
+
+	for (i = 1; i < 256; i++) {
+		int diff1;
+		unsigned input, mul1;
+
+		/*
+		 * PLL input between 1MHz and 32MHz per spec, but lower
+		 * frequences seem necessary in some cases so allow 100K.
+		 * Warning: some newer products need 2MHz min.
+		 */
+		input = main_freq / i;
+#if defined(CONFIG_AT91SAM9G20)
+		if (input < 2000000)
+			continue;
+#endif
+		if (input < 100000)
+			continue;
+		if (input > 32000000)
+			continue;
+
+		mul1 = out_freq / input;
+#if defined(CONFIG_AT91SAM9G20)
+		if (mul > 63)
+			continue;
+#endif
+		if (mul1 > 2048)
+			continue;
+		if (mul1 < 2)
+			goto fail;
+
+		diff1 = out_freq - input * mul1;
+		if (diff1 < 0)
+			diff1 = -diff1;
+		if (diff > diff1) {
+			diff = diff1;
+			div = i;
+			mul = mul1;
+			if (diff == 0)
+				break;
+		}
+	}
+	if (i == 256 && diff > (out_freq >> 5))
+		goto fail;
+	return ret | ((mul - 1) << 16) | div;
+fail:
+	return 0;
+}
+#endif
+
+static u32 at91_pll_rate(u32 freq, u32 reg)
+{
+	unsigned mul, div;
+
+	div = reg & 0xff;
+	mul = (reg >> 16) & 0x7ff;
+	if (div && mul) {
+		freq /= div;
+		freq *= mul + 1;
+	} else
+		freq = 0;
+
+	return freq;
+}
+
+int at91_clock_init(unsigned long main_clock)
+{
+	unsigned freq, mckr;
+	at91_pmc_t *pmc = (at91_pmc_t *) ATMEL_BASE_PMC;
+#ifndef CONFIG_SYS_AT91_MAIN_CLOCK
+	unsigned tmp;
+	/*
+	 * When the bootloader initialized the main oscillator correctly,
+	 * there's no problem using the cycle counter.  But if it didn't,
+	 * or when using oscillator bypass mode, we must be told the speed
+	 * of the main clock.
+	 */
+	if (!main_clock) {
+		do {
+			tmp = readl(&pmc->mcfr);
+		} while (!(tmp & AT91_PMC_MCFR_MAINRDY));
+		tmp &= AT91_PMC_MCFR_MAINF_MASK;
+		main_clock = tmp * (CONFIG_SYS_AT91_SLOW_CLOCK / 16);
+	}
+#endif
+	gd->main_clk_rate_hz = main_clock;
+
+	/* report if PLLA is more than mildly overclocked */
+	gd->plla_rate_hz = at91_pll_rate(main_clock, readl(&pmc->pllar));
+
+#ifdef CONFIG_USB_ATMEL
+	/*
+	 * USB clock init:  choose 48 MHz PLLB value,
+	 * disable 48MHz clock during usb peripheral suspend.
+	 *
+	 * REVISIT:  assumes MCK doesn't derive from PLLB!
+	 */
+	gd->at91_pllb_usb_init = at91_pll_calc(main_clock, 48000000 * 2) |
+			     AT91_PMC_PLLBR_USBDIV_2;
+	gd->pllb_rate_hz = at91_pll_rate(main_clock, gd->at91_pllb_usb_init);
+#endif
+
+	/*
+	 * MCK and CPU derive from one of those primary clocks.
+	 * For now, assume this parentage won't change.
+	 */
+	mckr = readl(&pmc->mckr);
+#if defined(CONFIG_AT91SAM9G45) || defined(CONFIG_AT91SAM9M10G45)
+	/* plla divisor by 2 */
+	gd->plla_rate_hz /= (1 << ((mckr & 1 << 12) >> 12));
+#endif
+	gd->mck_rate_hz = at91_css_to_rate(mckr & AT91_PMC_MCKR_CSS_MASK);
+	freq = gd->mck_rate_hz;
+
+	freq /= (1 << ((mckr & AT91_PMC_MCKR_PRES_MASK) >> 2));	/* prescale */
+#if defined(CONFIG_AT91RM9200)
+	/* mdiv */
+	gd->mck_rate_hz = freq / (1 + ((mckr & AT91_PMC_MCKR_MDIV_MASK) >> 8));
+#elif defined(CONFIG_AT91SAM9G20)
+	/* mdiv ; (x >> 7) = ((x >> 8) * 2) */
+	gd->mck_rate_hz = (mckr & AT91_PMC_MCKR_MDIV_MASK) ?
+		freq / ((mckr & AT91_PMC_MCKR_MDIV_MASK) >> 7) : freq;
+	if (mckr & AT91_PMC_MCKR_MDIV_MASK)
+		freq /= 2;			/* processor clock division */
+#elif defined(CONFIG_AT91SAM9G45) || defined(CONFIG_AT91SAM9M10G45)
+	gd->mck_rate_hz = (mckr & AT91_PMC_MCKR_MDIV_MASK) ==
+		(AT91_PMC_MCKR_MDIV_2 | AT91_PMC_MCKR_MDIV_4)
+		? freq / 3
+		: freq / (1 << ((mckr & AT91_PMC_MCKR_MDIV_MASK) >> 8));
+#else
+	gd->mck_rate_hz = freq / (1 << ((mckr & AT91_PMC_MCKR_MDIV_MASK) >> 8));
+#endif
+	gd->cpu_clk_rate_hz = freq;
+
+	return 0;
+}
-- 
1.7.5.4

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [U-Boot] [PATCH 2/2] arm920t/at91: use new clock features from libat91-common
  2011-06-07 23:27 [U-Boot] [PATCH 0/2] unify hw level clock for at91 cores Andreas Bießmann
  2011-06-07 23:27 ` [U-Boot] [PATCH 1/2] at91: move a/a/c/arm926ejs/at91/clock.c -> a/a/lib/at91 Andreas Bießmann
@ 2011-06-07 23:27 ` Andreas Bießmann
  2011-06-08 17:06   ` Jens Scharsig
  1 sibling, 1 reply; 11+ messages in thread
From: Andreas Bießmann @ 2011-06-07 23:27 UTC (permalink / raw)
  To: u-boot

This patch enables the new clock features from new libat91-common. This
is a required step to get at91rm9200_usart replaced by atmel_usart
driver.

Signed-off-by: Andreas Bie?mann <andreas.devel@googlemail.com>
CC: Jens Scharsig <js_at_ng@scharsoft.de>
CC: Eric B?nard <eric@eukrea.com>
---
 arch/arm/cpu/arm920t/at91/Makefile          |    1 +
 arch/arm/include/asm/arch-at91/at91rm9200.h |    1 +
 include/configs/at91rm9200ek.h              |    3 +++
 include/configs/cpuat91.h                   |    5 +++--
 include/configs/eb_cpux9k2.h                |    4 ++--
 5 files changed, 10 insertions(+), 4 deletions(-)

diff --git a/arch/arm/cpu/arm920t/at91/Makefile b/arch/arm/cpu/arm920t/at91/Makefile
index 5c71b77..872461a 100644
--- a/arch/arm/cpu/arm920t/at91/Makefile
+++ b/arch/arm/cpu/arm920t/at91/Makefile
@@ -28,6 +28,7 @@ LIB	= $(obj)lib$(SOC).o
 SOBJS	+= lowlevel_init.o
 COBJS	+= reset.o
 COBJS	+= timer.o
+COBJS	+= cpu.o
 
 SRCS	:= $(SOBJS:.o=.S) $(COBJS:.o=.c)
 OBJS	:= $(addprefix $(obj),$(SOBJS) $(COBJS))
diff --git a/arch/arm/include/asm/arch-at91/at91rm9200.h b/arch/arm/include/asm/arch-at91/at91rm9200.h
index ff18014..979241e 100644
--- a/arch/arm/include/asm/arch-at91/at91rm9200.h
+++ b/arch/arm/include/asm/arch-at91/at91rm9200.h
@@ -22,6 +22,7 @@
 #define __AT91RM9200_H__
 
 #define CONFIG_AT91FAMILY	/* it's a member of AT91 */
+#define CONFIG_ARCH_CPU_INIT	/* we need arch_cpu_init() for hw timers */
 #define CONFIG_ARM920T		/* This is an ARM920T Core	*/
 
 /* Periperial Identifiers */
diff --git a/include/configs/at91rm9200ek.h b/include/configs/at91rm9200ek.h
index 16cd214..ee199ab 100644
--- a/include/configs/at91rm9200ek.h
+++ b/include/configs/at91rm9200ek.h
@@ -55,6 +55,7 @@
  * CONFIG_SYS_HZ is the tick rate for timer tc0
  */
 #define AT91C_XTAL_CLOCK		18432000
+#define CONFIG_SYS_AT91_SLOW_CLOCK	32768
 #define AT91C_MAIN_CLOCK		((AT91C_XTAL_CLOCK / 4) * 39)
 #define AT91C_MASTER_CLOCK		(AT91C_MAIN_CLOCK / 3 )
 #define CONFIG_SYS_HZ_CLOCK		(AT91C_MASTER_CLOCK / 2)
@@ -66,6 +67,8 @@
 #define CONFIG_CPUAT91
 #define USE_920T_MMU
 
+#include <asm/hardware.h>	/* needed for port definitions */
+
 #define CONFIG_CMDLINE_TAG
 #define CONFIG_SETUP_MEMORY_TAGS
 #define CONFIG_INITRD_TAG
diff --git a/include/configs/cpuat91.h b/include/configs/cpuat91.h
index cfaef15..2bda72b 100644
--- a/include/configs/cpuat91.h
+++ b/include/configs/cpuat91.h
@@ -37,6 +37,7 @@
 #endif
 
 #define AT91C_XTAL_CLOCK		18432000
+#define CONFIG_SYS_AT91_SLOW_CLOCK	32768
 #define AT91C_MAIN_CLOCK		((AT91C_XTAL_CLOCK / 4) * 39)
 #define AT91C_MASTER_CLOCK		(AT91C_MAIN_CLOCK / 3)
 #define CONFIG_SYS_HZ_CLOCK		(AT91C_MASTER_CLOCK / 2)
@@ -45,11 +46,11 @@
 #define CONFIG_ARM920T
 #define CONFIG_AT91RM9200
 #define CONFIG_CPUAT91
-#define CONFIG_AT91FAMILY
-
 #undef CONFIG_USE_IRQ
 #define USE_920T_MMU
 
+#include <asm/hardware.h>	/* needed for port definitions */
+
 #define CONFIG_CMDLINE_TAG
 #define CONFIG_SETUP_MEMORY_TAGS
 #define CONFIG_INITRD_TAG
diff --git a/include/configs/eb_cpux9k2.h b/include/configs/eb_cpux9k2.h
index e12770a..25b28f5 100644
--- a/include/configs/eb_cpux9k2.h
+++ b/include/configs/eb_cpux9k2.h
@@ -36,7 +36,7 @@
 #define CONFIG_VERSION_VARIABLE
 #define CONFIG_IDENT_STRING	" on EB+CPUx9K2"
 
-#include <asm/arch/hardware.h>	/* needed for port definitions */
+#include <asm/hardware.h>	/* needed for port definitions */
 
 #define CONFIG_MISC_INIT_R
 
@@ -69,7 +69,7 @@
 #define CONFIG_SYS_HZ		1000
 #define CONFIG_SYS_HZ_CLOCK 	(AT91C_MASTER_CLOCK / 2)
 
-#define AT91_SLOW_CLOCK			32768		/* slow clock */
+#define CONFIG_SYS_AT91_SLOW_CLOCK	32768		/* slow clock */
 
 #define CONFIG_CMDLINE_TAG		1
 #define CONFIG_SETUP_MEMORY_TAGS	1
-- 
1.7.5.4

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [U-Boot] [PATCH 2/2] arm920t/at91: use new clock features from libat91-common
  2011-06-07 23:27 ` [U-Boot] [PATCH 2/2] arm920t/at91: use new clock features from libat91-common Andreas Bießmann
@ 2011-06-08 17:06   ` Jens Scharsig
  2011-06-08 20:10     ` [U-Boot] [PATCH v2] " Andreas Bießmann
       [not found]     ` <1307563560-13358-1-git-send-email-andreas.devel@googlemail.com>
  0 siblings, 2 replies; 11+ messages in thread
From: Jens Scharsig @ 2011-06-08 17:06 UTC (permalink / raw)
  To: u-boot

Am 08.06.2011 01:27, schrieb Andreas Bie?mann:
>
> diff --git a/arch/arm/cpu/arm920t/at91/Makefile b/arch/arm/cpu/arm920t/at91/Makefile
> index 5c71b77..872461a 100644
> --- a/arch/arm/cpu/arm920t/at91/Makefile
> +++ b/arch/arm/cpu/arm920t/at91/Makefile
> @@ -28,6 +28,7 @@ LIB	= $(obj)lib$(SOC).o
>   SOBJS	+= lowlevel_init.o
>   COBJS	+= reset.o
>   COBJS	+= timer.o
> +COBJS	+= cpu.o
>
>   SRCS	:= $(SOBJS:.o=.S) $(COBJS:.o=.c)
>   OBJS	:= $(addprefix $(obj),$(SOBJS) $(COBJS))
> diff --git a/arch/arm/include/asm/arch-at91/at91rm9200.h b/arch/arm/include/asm/arch-at91/at91rm9200.h
> index ff18014..979241e 100644

Dear Andreas Bie?mann,

I am running in the following error:

.....
make -C arch/arm/cpu/arm920t/at91/
make[1]: Entering directory `/home/scharsig/projects/CPUx9K2/u-boot/arch/arm/cpu/arm920t/at91'
make[1]: *** No rule to make target `cpu.c', needed by `.depend'.  Stop.
make[1]: Leaving directory `/home/scharsig/projects/CPUx9K2/u-boot/arch/arm/cpu/arm920t/at91'
make: *** [arch/arm/cpu/arm920t/at91/libat91.o] Error 2


Is it possible that the patch is incomplete
or is an additional patch needed

Best regards

Jens Scharsig

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [U-Boot] [PATCH v2] arm920t/at91: use new clock features from libat91-common
  2011-06-08 17:06   ` Jens Scharsig
@ 2011-06-08 20:10     ` Andreas Bießmann
  2011-06-26 17:39       ` Jens Scharsig
       [not found]     ` <1307563560-13358-1-git-send-email-andreas.devel@googlemail.com>
  1 sibling, 1 reply; 11+ messages in thread
From: Andreas Bießmann @ 2011-06-08 20:10 UTC (permalink / raw)
  To: u-boot

This patch enables the new clock features from new libat91-common. This
is a required step to get at91rm9200_usart replaced by atmel_usart
driver.

Signed-off-by: Andreas Bie?mann <andreas.devel@googlemail.com>

Cc: Jens Scharsig <js_at_ng@scharsoft.de>
Cc: Eric B?nard <eric@eukrea.com>
---
changes since v1:
 - add missing cpu.c

 resent due to wrong list mail ...

 arch/arm/cpu/arm920t/at91/Makefile          |    1 +
 arch/arm/cpu/arm920t/at91/cpu.c             |   14 ++++++++++++++
 arch/arm/include/asm/arch-at91/at91rm9200.h |    1 +
 include/configs/at91rm9200ek.h              |    3 +++
 include/configs/cpuat91.h                   |    5 +++--
 include/configs/eb_cpux9k2.h                |    4 ++--
 6 files changed, 24 insertions(+), 4 deletions(-)
 create mode 100644 arch/arm/cpu/arm920t/at91/cpu.c

diff --git a/arch/arm/cpu/arm920t/at91/Makefile b/arch/arm/cpu/arm920t/at91/Makefile
index 5c71b77..872461a 100644
--- a/arch/arm/cpu/arm920t/at91/Makefile
+++ b/arch/arm/cpu/arm920t/at91/Makefile
@@ -28,6 +28,7 @@ LIB	= $(obj)lib$(SOC).o
 SOBJS	+= lowlevel_init.o
 COBJS	+= reset.o
 COBJS	+= timer.o
+COBJS	+= cpu.o
 
 SRCS	:= $(SOBJS:.o=.S) $(COBJS:.o=.c)
 OBJS	:= $(addprefix $(obj),$(SOBJS) $(COBJS))
diff --git a/arch/arm/cpu/arm920t/at91/cpu.c b/arch/arm/cpu/arm920t/at91/cpu.c
new file mode 100644
index 0000000..b4c0175
--- /dev/null
+++ b/arch/arm/cpu/arm920t/at91/cpu.c
@@ -0,0 +1,14 @@
+#include <common.h>
+#include <asm/io.h>
+#include <asm/arch/hardware.h>
+#include <asm/arch/clk.h>
+
+#ifndef CONFIG_SYS_AT91_MAIN_CLOCK
+#define CONFIG_SYS_AT91_MAIN_CLOCK 0
+#endif
+
+int arch_cpu_init(void)
+{
+	return at91_clock_init(CONFIG_SYS_AT91_MAIN_CLOCK);
+}
+
diff --git a/arch/arm/include/asm/arch-at91/at91rm9200.h b/arch/arm/include/asm/arch-at91/at91rm9200.h
index ff18014..979241e 100644
--- a/arch/arm/include/asm/arch-at91/at91rm9200.h
+++ b/arch/arm/include/asm/arch-at91/at91rm9200.h
@@ -22,6 +22,7 @@
 #define __AT91RM9200_H__
 
 #define CONFIG_AT91FAMILY	/* it's a member of AT91 */
+#define CONFIG_ARCH_CPU_INIT	/* we need arch_cpu_init() for hw timers */
 #define CONFIG_ARM920T		/* This is an ARM920T Core	*/
 
 /* Periperial Identifiers */
diff --git a/include/configs/at91rm9200ek.h b/include/configs/at91rm9200ek.h
index 16cd214..ee199ab 100644
--- a/include/configs/at91rm9200ek.h
+++ b/include/configs/at91rm9200ek.h
@@ -55,6 +55,7 @@
  * CONFIG_SYS_HZ is the tick rate for timer tc0
  */
 #define AT91C_XTAL_CLOCK		18432000
+#define CONFIG_SYS_AT91_SLOW_CLOCK	32768
 #define AT91C_MAIN_CLOCK		((AT91C_XTAL_CLOCK / 4) * 39)
 #define AT91C_MASTER_CLOCK		(AT91C_MAIN_CLOCK / 3 )
 #define CONFIG_SYS_HZ_CLOCK		(AT91C_MASTER_CLOCK / 2)
@@ -66,6 +67,8 @@
 #define CONFIG_CPUAT91
 #define USE_920T_MMU
 
+#include <asm/hardware.h>	/* needed for port definitions */
+
 #define CONFIG_CMDLINE_TAG
 #define CONFIG_SETUP_MEMORY_TAGS
 #define CONFIG_INITRD_TAG
diff --git a/include/configs/cpuat91.h b/include/configs/cpuat91.h
index cfaef15..2bda72b 100644
--- a/include/configs/cpuat91.h
+++ b/include/configs/cpuat91.h
@@ -37,6 +37,7 @@
 #endif
 
 #define AT91C_XTAL_CLOCK		18432000
+#define CONFIG_SYS_AT91_SLOW_CLOCK	32768
 #define AT91C_MAIN_CLOCK		((AT91C_XTAL_CLOCK / 4) * 39)
 #define AT91C_MASTER_CLOCK		(AT91C_MAIN_CLOCK / 3)
 #define CONFIG_SYS_HZ_CLOCK		(AT91C_MASTER_CLOCK / 2)
@@ -45,11 +46,11 @@
 #define CONFIG_ARM920T
 #define CONFIG_AT91RM9200
 #define CONFIG_CPUAT91
-#define CONFIG_AT91FAMILY
-
 #undef CONFIG_USE_IRQ
 #define USE_920T_MMU
 
+#include <asm/hardware.h>	/* needed for port definitions */
+
 #define CONFIG_CMDLINE_TAG
 #define CONFIG_SETUP_MEMORY_TAGS
 #define CONFIG_INITRD_TAG
diff --git a/include/configs/eb_cpux9k2.h b/include/configs/eb_cpux9k2.h
index e12770a..25b28f5 100644
--- a/include/configs/eb_cpux9k2.h
+++ b/include/configs/eb_cpux9k2.h
@@ -36,7 +36,7 @@
 #define CONFIG_VERSION_VARIABLE
 #define CONFIG_IDENT_STRING	" on EB+CPUx9K2"
 
-#include <asm/arch/hardware.h>	/* needed for port definitions */
+#include <asm/hardware.h>	/* needed for port definitions */
 
 #define CONFIG_MISC_INIT_R
 
@@ -69,7 +69,7 @@
 #define CONFIG_SYS_HZ		1000
 #define CONFIG_SYS_HZ_CLOCK 	(AT91C_MASTER_CLOCK / 2)
 
-#define AT91_SLOW_CLOCK			32768		/* slow clock */
+#define CONFIG_SYS_AT91_SLOW_CLOCK	32768		/* slow clock */
 
 #define CONFIG_CMDLINE_TAG		1
 #define CONFIG_SETUP_MEMORY_TAGS	1
-- 
1.7.5.4

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [U-Boot] [PATCH 1/2] at91: move a/a/c/arm926ejs/at91/clock.c -> a/a/lib/at91
  2011-06-07 23:27 ` [U-Boot] [PATCH 1/2] at91: move a/a/c/arm926ejs/at91/clock.c -> a/a/lib/at91 Andreas Bießmann
@ 2011-06-09  9:38   ` Reinhard Meyer
  2011-06-09  9:46     ` Andreas Bießmann
  0 siblings, 1 reply; 11+ messages in thread
From: Reinhard Meyer @ 2011-06-09  9:38 UTC (permalink / raw)
  To: u-boot

Dear Andreas Bie?mann,
> The at91/clock.c is copied from linux kernel and has support for both
> arm920t and arm926ejs core devices. Therefore this patch moves this
> generic at91/clock.c to a new place at arch/arm/lib/at91 to be used from
> at91 family devices.
> 
> We build a new libat91-common.o to provide the required symbols to both
> cpu types.
> 
> Signed-off-by: Andreas Bie?mann <andreas.devel@googlemail.com>
> ---
>  Makefile                             |    3 +
>  arch/arm/cpu/arm926ejs/at91/Makefile |    1 -
>  arch/arm/cpu/arm926ejs/at91/clock.c  |  215 ----------------------------------
>  arch/arm/lib/at91/Makefile           |   45 +++++++
>  arch/arm/lib/at91/clock.c            |  215 ++++++++++++++++++++++++++++++++++
>  5 files changed, 263 insertions(+), 216 deletions(-)
>  delete mode 100644 arch/arm/cpu/arm926ejs/at91/clock.c
>  create mode 100644 arch/arm/lib/at91/Makefile
>  create mode 100644 arch/arm/lib/at91/clock.c

Please use the "git-mv" command to move the file "clock.c".

On any account, we should discuss about opening a subdir lib scheme first.
Currently arch/arm/lib does not have any subdirectories.

I _do_ see the problems of the current ARM directory structure which makes
the ARM core a more important criteria than SoC family especially in the
Atmel context where the SoCs have identical peripheral blocks but can have
different ARM cores.

Since that change goes outside the "Atmel directory domain",
I consider this an RFC. Albert is already on CC.

Best Regards,
Reinhard

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [U-Boot] [PATCH 1/2] at91: move a/a/c/arm926ejs/at91/clock.c -> a/a/lib/at91
  2011-06-09  9:38   ` Reinhard Meyer
@ 2011-06-09  9:46     ` Andreas Bießmann
  2011-06-09 10:23       ` Reinhard Meyer
  0 siblings, 1 reply; 11+ messages in thread
From: Andreas Bießmann @ 2011-06-09  9:46 UTC (permalink / raw)
  To: u-boot

Dear Reinhard Meyer,

Am 09.06.2011 11:38, schrieb Reinhard Meyer:
> Dear Andreas Bie?mann,
>> The at91/clock.c is copied from linux kernel and has support for both
>> arm920t and arm926ejs core devices. Therefore this patch moves this
>> generic at91/clock.c to a new place at arch/arm/lib/at91 to be used from
>> at91 family devices.
>>
>> We build a new libat91-common.o to provide the required symbols to both
>> cpu types.
>>
>> Signed-off-by: Andreas Bie?mann <andreas.devel@googlemail.com>
>> ---
>>  Makefile                             |    3 +
>>  arch/arm/cpu/arm926ejs/at91/Makefile |    1 -
>>  arch/arm/cpu/arm926ejs/at91/clock.c  |  215 ----------------------------------
>>  arch/arm/lib/at91/Makefile           |   45 +++++++
>>  arch/arm/lib/at91/clock.c            |  215 ++++++++++++++++++++++++++++++++++
>>  5 files changed, 263 insertions(+), 216 deletions(-)
>>  delete mode 100644 arch/arm/cpu/arm926ejs/at91/clock.c
>>  create mode 100644 arch/arm/lib/at91/Makefile
>>  create mode 100644 arch/arm/lib/at91/clock.c
> 
> Please use the "git-mv" command to move the file "clock.c".

I did it that way ... but I think there was another trick for
git-format-patch ... will have a look for that

> On any account, we should discuss about opening a subdir lib scheme first.
> Currently arch/arm/lib does not have any subdirectories.

Well as described in cover letter this was discussed before. See the
other discussion on gmane:
http://mid.gmane.org/BANLkTimn29vmAYGb5csMdCYS-xx6zD_6Zw at mail.gmail.com

I think this solution was preferred by Albert too. But I'm open for
another solution, so lets see what possibilities you have.

> I _do_ see the problems of the current ARM directory structure which makes
> the ARM core a more important criteria than SoC family especially in the
> Atmel context where the SoCs have identical peripheral blocks but can have
> different ARM cores.

correct

regards

Andreas Bie?mann

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [U-Boot] [PATCH v2] arm920t/at91: use new clock features from libat91-common
       [not found]       ` <4DF09096.2010201@emk-elektronik.de>
@ 2011-06-09  9:49         ` Andreas Bießmann
  0 siblings, 0 replies; 11+ messages in thread
From: Andreas Bießmann @ 2011-06-09  9:49 UTC (permalink / raw)
  To: u-boot

resent to right list ...

Dear Reinhard Meyer,

Am 09.06.2011 11:21, schrieb Reinhard Meyer:
> Dear Andreas Bie?mann,
>> This patch enables the new clock features from new libat91-common. This
>> is a required step to get at91rm9200_usart replaced by atmel_usart
>> driver.
>>
>> Signed-off-by: Andreas Bie?mann <andreas.devel@googlemail.com>
>>
>> Cc: Jens Scharsig <js_at_ng@scharsoft.de>
>> Cc: Eric B?nard <eric@eukrea.com>

> 
> I think this should go into NEXT unleass it unbreaks that board right now.
> You mentioned in another mail that it would be ok to be in 2011.09.
> Is that OK?

I'm fine with that. The arm920t/at91 boards do build (with minor
warnings in at91_emac and at91rm9200_usart) and work on real hardware
since 9e8df9c4db7835152996c96cc432dc6dd70bb17c

The warnings are:
 - 'at91_emac.c:487:2: warning: dereferencing type-punned pointer will
    break strict-aliasing rules' in at91_emac -> you know about that
   ... it is the same as in macb driver and will also be fixed soon.
 - 'at91rm9200_usart.c:39:2: warning: #warning Please update to use C
    structur SoC access !' -> at91rm9200_usart will be removed soon

Therefore I do not see any reason to remove those arm920t/at91 boards.

I will do some more testing with atmel_usart driver on atrm9200 devices
and send for review this weekend. The big removal of old-style
at91rm9200 boards can begin after that cause the deprecated
at91rm9200_usart driver needs some outdated stuff which will also be
removed in that step.

Besides that, I found out cpu.c (in that commit) is missing a GPL header
and copyright notice. So please do not add this version.

regards

Andreas Bie?mann

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [U-Boot] [PATCH 1/2] at91: move a/a/c/arm926ejs/at91/clock.c -> a/a/lib/at91
  2011-06-09  9:46     ` Andreas Bießmann
@ 2011-06-09 10:23       ` Reinhard Meyer
  2011-06-09 11:07         ` Andreas Bießmann
  0 siblings, 1 reply; 11+ messages in thread
From: Reinhard Meyer @ 2011-06-09 10:23 UTC (permalink / raw)
  To: u-boot

Dear Andreas Bie?mann,
> Dear Reinhard Meyer,
> 
> Am 09.06.2011 11:38, schrieb Reinhard Meyer:
>> Dear Andreas Bie?mann,
>>> The at91/clock.c is copied from linux kernel and has support for both
>>> arm920t and arm926ejs core devices. Therefore this patch moves this
>>> generic at91/clock.c to a new place at arch/arm/lib/at91 to be used from
>>> at91 family devices.
>>>
>>> We build a new libat91-common.o to provide the required symbols to both
>>> cpu types.
>>>
>>> Signed-off-by: Andreas Bie?mann <andreas.devel@googlemail.com>
>>> ---
>>>  Makefile                             |    3 +
>>>  arch/arm/cpu/arm926ejs/at91/Makefile |    1 -
>>>  arch/arm/cpu/arm926ejs/at91/clock.c  |  215 ----------------------------------
>>>  arch/arm/lib/at91/Makefile           |   45 +++++++
>>>  arch/arm/lib/at91/clock.c            |  215 ++++++++++++++++++++++++++++++++++
>>>  5 files changed, 263 insertions(+), 216 deletions(-)
>>>  delete mode 100644 arch/arm/cpu/arm926ejs/at91/clock.c
>>>  create mode 100644 arch/arm/lib/at91/Makefile
>>>  create mode 100644 arch/arm/lib/at91/clock.c
>>
>> Please use the "git-mv" command to move the file "clock.c".
> 
> I did it that way ... but I think there was another trick for
> git-format-patch ... will have a look for that
> 
>> On any account, we should discuss about opening a subdir lib scheme first.
>> Currently arch/arm/lib does not have any subdirectories.
> 
> Well as described in cover letter this was discussed before. See the
> other discussion on gmane:
> http://mid.gmane.org/BANLkTimn29vmAYGb5csMdCYS-xx6zD_6Zw at mail.gmail.com

Sorry, I had forgotten already about that discussion, it was even
marked "important" in my e-Mail program... and I wanted to comment then
but was too busy with other things ;)

> 
> I think this solution was preferred by Albert too. But I'm open for
> another solution, so lets see what possibilities you have.

What other files do you see (in the future) to be in arch/arm/lib/at91?
For just clock.c, it seems like an overkill... Can we (on the long run)
move _all_ files from the at91 subdirs there, like *_devices.c, reset.c,
timer.c, at91sam9_watchdog.c? Then it would make sense to me...

if YES, ignore the following ideas:
{
When I look at the #ifdef's near the end of clock.c I get an uneasy feeling;)

With more Atmel SoCs coming up which must have additional clock domains
(e.g. with 2x EMAC, CAN, etc) I can imagine this file to become more and
more ugly.

I currently have rough ideas to add to the discussion:

1. move the SoC specific clock stuff into <SoC>_devices.c - even if that
means some duplication (the get_*_clk_rate() functions could possibly be
inlined and put into the header file ?)

2. introduce <SoC>_clock.c (if one does not like the clock stuff in "devices")

3. similar to drivers/watchdog we could have drivers/clock and put
at91sam9_clock.c there. On that account, the hardware specific timer
functions of any new timer scheme could be placed there as well.
}

> 
>> I _do_ see the problems of the current ARM directory structure which makes
>> the ARM core a more important criteria than SoC family especially in the
>> Atmel context where the SoCs have identical peripheral blocks but can have
>> different ARM cores.
> 
> correct

Best Regards,
Reinhard

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [U-Boot] [PATCH 1/2] at91: move a/a/c/arm926ejs/at91/clock.c -> a/a/lib/at91
  2011-06-09 10:23       ` Reinhard Meyer
@ 2011-06-09 11:07         ` Andreas Bießmann
  0 siblings, 0 replies; 11+ messages in thread
From: Andreas Bießmann @ 2011-06-09 11:07 UTC (permalink / raw)
  To: u-boot

Dear Reinhard Meyer,

Am 09.06.2011 12:23, schrieb Reinhard Meyer:
> Dear Andreas Bie?mann,
>> Dear Reinhard Meyer,
>>
>> Am 09.06.2011 11:38, schrieb Reinhard Meyer:
>>> Dear Andreas Bie?mann,

<snip patch header>

>>> On any account, we should discuss about opening a subdir lib scheme first.
>>> Currently arch/arm/lib does not have any subdirectories.
>>
>> Well as described in cover letter this was discussed before. See the
>> other discussion on gmane:
>> http://mid.gmane.org/BANLkTimn29vmAYGb5csMdCYS-xx6zD_6Zw at mail.gmail.com
> 
> Sorry, I had forgotten already about that discussion, it was even
> marked "important" in my e-Mail program... and I wanted to comment then
> but was too busy with other things ;)

no problem, we can do it here ...

>>
>> I think this solution was preferred by Albert too. But I'm open for
>> another solution, so lets see what possibilities you have.
> 
> What other files do you see (in the future) to be in arch/arm/lib/at91?

Well, if I look at the arm920t/at91 I do see following files:

 timer.c
  timer could not be shared between arm920t and arm926ejs at91 SoC
  cause at91rm9200 do not have a 32 bit PITC!
 reset.c
  reset could not be shared cause at91rm9200 has an input only NRST pin.
  We do need the watchdog workaround to do the reset

A future commit will add cpu.c as in arm926ejs but with less features
(just arch_cpu_init() for at91_clock_init()).

If I look at ar926ejs/at91 files I do see additionally these files:

 eflash.c
  new feature in some sam9XE devices, not related to at91rm9200
 led.c
  I do hate this ... we have dozen of led API ... but it is really
  helpful for assembler (lowlevel_init) stage debugging without JTAG,
  could be useful for at91rm9200
 <SoC>_devices.c
  ...

> For just clock.c, it seems like an overkill...

You are right here ..

> Can we (on the long run)
> move _all_ files from the at91 subdirs there, like *_devices.c, reset.c,
> timer.c, at91sam9_watchdog.c? Then it would make sense to me...

This makes no sense to me in the current structure. If we have some
arch/arm/mach-XXX like the linux kernel it would make sense to make the
effort to unify those files.

The main aim for this patch was to not duplicate the clock.c from
arm926ejs to arm920t (remember, the file is already prepared for
at92rm9200 cause it is a copy from linux source tree).

> if YES, ignore the following ideas:
> {
> When I look at the #ifdef's near the end of clock.c I get an uneasy feeling;)

I see ... Therefore it would be better to rewrite the clock.c in
arm926ejs (remove at91rm9200 support) and arm920t (do not add support
for other SoC).

> With more Atmel SoCs coming up which must have additional clock domains
> (e.g. with 2x EMAC, CAN, etc) I can imagine this file to become more and
> more ugly.

That may be true.

> I currently have rough ideas to add to the discussion:
> 
> 1. move the SoC specific clock stuff into <SoC>_devices.c - even if that
> means some duplication (the get_*_clk_rate() functions could possibly be
> inlined and put into the header file ?)

We should inline the get_*_clk_rate() functions in header in any case.
That is a good idea.

> 2. introduce <SoC>_clock.c (if one does not like the clock stuff in "devices")

But this needs also an rewrite of the clock.c driver (which was copied
from linux kernel).

> 3. similar to drivers/watchdog we could have drivers/clock and put
> at91sam9_clock.c there. On that account, the hardware specific timer
> functions of any new timer scheme could be placed there as well.

That could be another solution.

The conclusion is that lib/at91 is not the correct way, cause there are
only a few commonalities between arm920t and arm926ejs. Therefore we have
 a) include new clock.c in arm920t
 b) move current clock.c to driver/clock (or similar)

regards

Andreas Bie?mann

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [U-Boot] [PATCH v2] arm920t/at91: use new clock features from libat91-common
  2011-06-08 20:10     ` [U-Boot] [PATCH v2] " Andreas Bießmann
@ 2011-06-26 17:39       ` Jens Scharsig
  0 siblings, 0 replies; 11+ messages in thread
From: Jens Scharsig @ 2011-06-26 17:39 UTC (permalink / raw)
  To: u-boot

Am 08.06.2011 22:10, schrieb Andreas Bie?mann:
> This patch enables the new clock features from new libat91-common. This
> is a required step to get at91rm9200_usart replaced by atmel_usart
> driver.
>
> Signed-off-by: Andreas Bie?mann<andreas.devel@googlemail.com>
>
> Cc: Jens Scharsig<js_at_ng@scharsoft.de>
> Cc: Eric B?nard<eric@eukrea.com>
> ---
> changes since v1:
>   - add missing cpu.c
>
>   resent due to wrong list mail ...
>
>   arch/arm/cpu/arm920t/at91/Makefile          |    1 +
>   arch/arm/cpu/arm920t/at91/cpu.c             |   14 ++++++++++++++
>   arch/arm/include/asm/arch-at91/at91rm9200.h |    1 +
>   include/configs/at91rm9200ek.h              |    3 +++
>   include/configs/cpuat91.h                   |    5 +++--
>   include/configs/eb_cpux9k2.h                |    4 ++--
>   6 files changed, 24 insertions(+), 4 deletions(-)
>   create mode 100644 arch/arm/cpu/arm920t/at91/cpu.c
>


Acked-by: Jens Scharsig<js_at_ng@scharsoft.de>
Tested-by: Jens Scharsig<js_at_ng@scharsoft.de> (for eb_cpux9k2 board)

^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2011-06-26 17:39 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-06-07 23:27 [U-Boot] [PATCH 0/2] unify hw level clock for at91 cores Andreas Bießmann
2011-06-07 23:27 ` [U-Boot] [PATCH 1/2] at91: move a/a/c/arm926ejs/at91/clock.c -> a/a/lib/at91 Andreas Bießmann
2011-06-09  9:38   ` Reinhard Meyer
2011-06-09  9:46     ` Andreas Bießmann
2011-06-09 10:23       ` Reinhard Meyer
2011-06-09 11:07         ` Andreas Bießmann
2011-06-07 23:27 ` [U-Boot] [PATCH 2/2] arm920t/at91: use new clock features from libat91-common Andreas Bießmann
2011-06-08 17:06   ` Jens Scharsig
2011-06-08 20:10     ` [U-Boot] [PATCH v2] " Andreas Bießmann
2011-06-26 17:39       ` Jens Scharsig
     [not found]     ` <1307563560-13358-1-git-send-email-andreas.devel@googlemail.com>
     [not found]       ` <4DF09096.2010201@emk-elektronik.de>
2011-06-09  9:49         ` Andreas Bießmann

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.