All of lore.kernel.org
 help / color / mirror / Atom feed
From: Vikas Manocha <vikas.manocha@st.com>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH] serial: serial_stm32: move clock config from driver to board
Date: Tue, 26 Jan 2016 18:12:20 -0800	[thread overview]
Message-ID: <1453860741-25927-1-git-send-email-vikas.manocha@st.com> (raw)

This patch removes the uart clock enable from serial driver & move it in the
board code.

Signed-off-by: Vikas Manocha <vikas.manocha@st.com>
---
 arch/arm/include/asm/arch-stm32f4/stm32_defs.h     | 15 ++++++++
 arch/arm/include/asm/arch-stm32f4/stm32_periph.h   | 27 +++++++++++++++
 arch/arm/mach-stm32/stm32f4/clock.c                | 20 +++++++++++
 board/st/stm32f429-discovery/stm32f429-discovery.c |  3 ++
 drivers/serial/serial_stm32.c                      | 40 ----------------------
 5 files changed, 65 insertions(+), 40 deletions(-)
 create mode 100644 arch/arm/include/asm/arch-stm32f4/stm32_defs.h
 create mode 100644 arch/arm/include/asm/arch-stm32f4/stm32_periph.h

diff --git a/arch/arm/include/asm/arch-stm32f4/stm32_defs.h b/arch/arm/include/asm/arch-stm32f4/stm32_defs.h
new file mode 100644
index 0000000..29b98ae
--- /dev/null
+++ b/arch/arm/include/asm/arch-stm32f4/stm32_defs.h
@@ -0,0 +1,15 @@
+/*
+ * (C) Copyright 2016
+ * Vikas Manocha, ST Micoelectronics, vikas.manocha at st.com.
+ *
+ * SPDX-License-Identifier:	GPL-2.0+
+ */
+
+#ifndef __STM32_DEFS_H__
+#define __STM32_DEFS_H__
+#include <asm/arch/stm32_periph.h>
+
+int clock_setup(enum periph_clock);
+
+#endif
+
diff --git a/arch/arm/include/asm/arch-stm32f4/stm32_periph.h b/arch/arm/include/asm/arch-stm32f4/stm32_periph.h
new file mode 100644
index 0000000..a1af25c
--- /dev/null
+++ b/arch/arm/include/asm/arch-stm32f4/stm32_periph.h
@@ -0,0 +1,27 @@
+/*
+ * (C) Copyright 2016
+ * Vikas Manocha, ST Micoelectronics, vikas.manocha at st.com.
+ *
+ * SPDX-License-Identifier:	GPL-2.0+
+ */
+
+#ifndef __ASM_ARM_ARCH_PERIPH_H
+#define __ASM_ARM_ARCH_PERIPH_H
+
+/*
+ * Peripherals required for pinmux configuration. List will
+ * grow with support for more devices getting added.
+ * Numbering based on interrupt table.
+ *
+ */
+enum periph_id {
+	UART1_GPIOA_9_10 = 0,
+	UART2_GPIOD_5_6,
+};
+
+enum periph_clock {
+	USART1_CLOCK_CFG = 0,
+	USART2_CLOCK_CFG,
+};
+
+#endif /* __ASM_ARM_ARCH_PERIPH_H */
diff --git a/arch/arm/mach-stm32/stm32f4/clock.c b/arch/arm/mach-stm32/stm32f4/clock.c
index 3deb17a..576d3e6 100644
--- a/arch/arm/mach-stm32/stm32f4/clock.c
+++ b/arch/arm/mach-stm32/stm32f4/clock.c
@@ -11,6 +11,7 @@
 #include <common.h>
 #include <asm/io.h>
 #include <asm/arch/stm32.h>
+#include <asm/arch/stm32_periph.h>
 
 #define RCC_CR_HSION		(1 << 0)
 #define RCC_CR_HSEON		(1 << 16)
@@ -50,6 +51,14 @@
 
 #define RCC_APB1ENR_PWREN	(1 << 28)
 
+/*
+ * RCC USART specific definitions
+ */
+#define RCC_ENR_USART1EN		(1 << 4)
+#define RCC_ENR_USART2EN		(1 << 17)
+#define RCC_ENR_USART3EN		(1 << 18)
+#define RCC_ENR_USART6EN		(1 <<  5)
+
 #define PWR_CR_VOS0		(1 << 14)
 #define PWR_CR_VOS1		(1 << 15)
 #define PWR_CR_VOS_MASK		0xC000
@@ -221,3 +230,14 @@ unsigned long clock_get(enum clock clck)
 		break;
 	}
 }
+
+void clock_setup(int peripheral)
+{
+	switch (peripheral) {
+	case USART1_CLOCK_CFG:
+		setbits_le32(&STM32_RCC->apb2enr, RCC_ENR_USART1EN);
+		break;
+	default:
+		break;
+	}
+}
diff --git a/board/st/stm32f429-discovery/stm32f429-discovery.c b/board/st/stm32f429-discovery/stm32f429-discovery.c
index 8bc2d9e..fb8475f 100644
--- a/board/st/stm32f429-discovery/stm32f429-discovery.c
+++ b/board/st/stm32f429-discovery/stm32f429-discovery.c
@@ -19,6 +19,8 @@
 #include <asm/arch/fmc.h>
 #include <dm/platdata.h>
 #include <dm/platform_data/serial_stm32.h>
+#include <asm/arch/stm32_periph.h>
+#include <asm/arch/stm32_defs.h>
 
 DECLARE_GLOBAL_DATA_PTR;
 
@@ -286,6 +288,7 @@ int board_early_init_f(void)
 	res = uart_setup_gpio();
 	if (res)
 		return res;
+	clock_setup(USART1_CLOCK_CFG);
 
 	return 0;
 }
diff --git a/drivers/serial/serial_stm32.c b/drivers/serial/serial_stm32.c
index 91a5dde..c793ba6 100644
--- a/drivers/serial/serial_stm32.c
+++ b/drivers/serial/serial_stm32.c
@@ -35,24 +35,6 @@ struct stm32_usart {
 
 DECLARE_GLOBAL_DATA_PTR;
 
-#define MAX_SERIAL_PORTS		4
-
-/*
- * RCC USART specific definitions
- */
-#define RCC_ENR_USART1EN		(1 << 4)
-#define RCC_ENR_USART2EN		(1 << 17)
-#define RCC_ENR_USART3EN		(1 << 18)
-#define RCC_ENR_USART6EN		(1 <<  5)
-
-/* Array used to figure out which RCC bit needs to be set */
-static const unsigned long usart_port_rcc_pairs[MAX_SERIAL_PORTS][2] = {
-	{ STM32_USART1_BASE, RCC_ENR_USART1EN },
-	{ STM32_USART2_BASE, RCC_ENR_USART2EN },
-	{ STM32_USART3_BASE, RCC_ENR_USART3EN },
-	{ STM32_USART6_BASE, RCC_ENR_USART6EN }
-};
-
 static int stm32_serial_setbrg(struct udevice *dev, int baudrate)
 {
 	struct stm32_serial_platdata *plat = dev->platdata;
@@ -114,28 +96,6 @@ static int stm32_serial_probe(struct udevice *dev)
 {
 	struct stm32_serial_platdata *plat = dev->platdata;
 	struct stm32_usart *const usart = plat->base;
-	int usart_port = -1;
-	int i;
-
-	for (i = 0; i < MAX_SERIAL_PORTS; i++) {
-		if ((u32)usart == usart_port_rcc_pairs[i][0]) {
-			usart_port = i;
-			break;
-		}
-	}
-
-	if (usart_port == -1)
-		return -EINVAL;
-
-	if (((u32)usart & STM32_BUS_MASK) == STM32_APB1PERIPH_BASE)
-		setbits_le32(&STM32_RCC->apb1enr,
-			     usart_port_rcc_pairs[usart_port][1]);
-	else if (((u32)usart & STM32_BUS_MASK) == STM32_APB2PERIPH_BASE)
-		setbits_le32(&STM32_RCC->apb2enr,
-			     usart_port_rcc_pairs[usart_port][1]);
-	else
-		return -EINVAL;
-
 	setbits_le32(&usart->cr1, USART_CR1_RE | USART_CR1_TE | USART_CR1_UE);
 
 	return 0;
-- 
1.9.1

             reply	other threads:[~2016-01-27  2:12 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-01-27  2:12 Vikas Manocha [this message]
2016-01-27 22:53 ` [U-Boot] [PATCH] serial: serial_stm32: move clock config from driver to board Simon Glass
2016-01-27 22:57   ` Vikas MANOCHA
2016-02-08 18:24   ` Vikas MANOCHA
2016-02-08 20:46 ` [U-Boot] " Tom Rini

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1453860741-25927-1-git-send-email-vikas.manocha@st.com \
    --to=vikas.manocha@st.com \
    --cc=u-boot@lists.denx.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.