]> git.sur5r.net Git - u-boot/commitdiff
board: stm32f429-disco: switch to DM STM32 pinctrl and gpio driver
authorPatrice Chotard <patrice.chotard@st.com>
Tue, 12 Dec 2017 08:49:40 +0000 (09:49 +0100)
committerTom Rini <trini@konsulko.com>
Wed, 10 Jan 2018 13:05:46 +0000 (08:05 -0500)
Use available DM stm32f7_gpio.c and pinctrl_stm32.c drivers
instead of board GPIO initialization.

Remove stm32_gpio.c which is no more used and migrate
structs stm32_gpio_regs and stm32_gpio_priv into
arch-stm32f4/gpio.h to not break compilation.

Signed-off-by: Patrice Chotard <patrice.chotard@st.com>
arch/arm/include/asm/arch-stm32f4/gpio.h
arch/arm/include/asm/arch-stm32f4/stm32.h
board/st/stm32f429-discovery/stm32f429-discovery.c
configs/stm32f429-discovery_defconfig
drivers/gpio/Makefile
drivers/gpio/stm32_gpio.c [deleted file]
include/configs/stm32f429-discovery.h

index 831c542db09d5066882ef1797b80b28221328fe2..6173fa130000c3808fb7fe5d0c110d288110aede 100644 (file)
@@ -131,6 +131,22 @@ struct stm32_gpio_ctl {
        enum stm32_gpio_af      af;
 };
 
+struct stm32_gpio_regs {
+       u32 moder;      /* GPIO port mode */
+       u32 otyper;     /* GPIO port output type */
+       u32 ospeedr;    /* GPIO port output speed */
+       u32 pupdr;      /* GPIO port pull-up/pull-down */
+       u32 idr;        /* GPIO port input data */
+       u32 odr;        /* GPIO port output data */
+       u32 bsrr;       /* GPIO port bit set/reset */
+       u32 lckr;       /* GPIO port configuration lock */
+       u32 afr[2];     /* GPIO alternate function */
+};
+
+struct stm32_gpio_priv {
+       struct stm32_gpio_regs *regs;
+};
+
 static inline unsigned stm32_gpio_to_port(unsigned gpio)
 {
        return gpio / 16;
@@ -141,8 +157,4 @@ static inline unsigned stm32_gpio_to_pin(unsigned gpio)
        return gpio % 16;
 }
 
-int stm32_gpio_config(const struct stm32_gpio_dsc *gpio_dsc,
-               const struct stm32_gpio_ctl *gpio_ctl);
-int stm32_gpout_set(const struct stm32_gpio_dsc *gpio_dsc, int state);
-
 #endif /* _STM32_GPIO_H_ */
index 889778cfd5958d03a11828a08381140cc614ffea..0449fcecede02f66dde0b1de2e7a6db3e1d29cb8 100644 (file)
 
 #define STM32_BUS_MASK         0xFFFF0000
 
-#define STM32_GPIOA_BASE       (STM32_AHB1PERIPH_BASE + 0x0000)
-#define STM32_GPIOB_BASE       (STM32_AHB1PERIPH_BASE + 0x0400)
-#define STM32_GPIOC_BASE       (STM32_AHB1PERIPH_BASE + 0x0800)
-#define STM32_GPIOD_BASE       (STM32_AHB1PERIPH_BASE + 0x0C00)
-#define STM32_GPIOE_BASE       (STM32_AHB1PERIPH_BASE + 0x1000)
-#define STM32_GPIOF_BASE       (STM32_AHB1PERIPH_BASE + 0x1400)
-#define STM32_GPIOG_BASE       (STM32_AHB1PERIPH_BASE + 0x1800)
-#define STM32_GPIOH_BASE       (STM32_AHB1PERIPH_BASE + 0x1C00)
-#define STM32_GPIOI_BASE       (STM32_AHB1PERIPH_BASE + 0x2000)
-
 /*
  * Register maps
  */
index c5f457324a5b4e1afa34f611f5a17eb96509204a..3d90218faa611d40bddcdcc9708937ca45c48af0 100644 (file)
 
 #include <asm/io.h>
 #include <asm/arch/stm32.h>
-#include <asm/arch/gpio.h>
 
 DECLARE_GLOBAL_DATA_PTR;
 
-const struct stm32_gpio_ctl gpio_ctl_gpout = {
-       .mode = STM32_GPIO_MODE_OUT,
-       .otype = STM32_GPIO_OTYPE_PP,
-       .speed = STM32_GPIO_SPEED_50M,
-       .pupd = STM32_GPIO_PUPD_NO,
-       .af = STM32_GPIO_AF0
-};
-
-const struct stm32_gpio_ctl gpio_ctl_usart = {
-       .mode = STM32_GPIO_MODE_AF,
-       .otype = STM32_GPIO_OTYPE_PP,
-       .speed = STM32_GPIO_SPEED_50M,
-       .pupd = STM32_GPIO_PUPD_UP,
-       .af = STM32_GPIO_USART
-};
-
-static const struct stm32_gpio_dsc usart_gpio[] = {
-       {STM32_GPIO_PORT_X, STM32_GPIO_PIN_TX}, /* TX */
-       {STM32_GPIO_PORT_X, STM32_GPIO_PIN_RX}, /* RX */
-};
-
-int uart_setup_gpio(void)
-{
-       int i;
-       int rv = 0;
-
-       for (i = 0; i < ARRAY_SIZE(usart_gpio); i++) {
-               rv = stm32_gpio_config(&usart_gpio[i], &gpio_ctl_usart);
-               if (rv)
-                       goto out;
-       }
-
-out:
-       return rv;
-}
-
-const struct stm32_gpio_ctl gpio_ctl_fmc = {
-       .mode = STM32_GPIO_MODE_AF,
-       .otype = STM32_GPIO_OTYPE_PP,
-       .speed = STM32_GPIO_SPEED_100M,
-       .pupd = STM32_GPIO_PUPD_NO,
-       .af = STM32_GPIO_AF12
-};
-
-static const struct stm32_gpio_dsc ext_ram_fmc_gpio[] = {
-       /* Chip is LQFP144, see DM00077036.pdf for details */
-       {STM32_GPIO_PORT_D, STM32_GPIO_PIN_10}, /* 79, FMC_D15 */
-       {STM32_GPIO_PORT_D, STM32_GPIO_PIN_9},  /* 78, FMC_D14 */
-       {STM32_GPIO_PORT_D, STM32_GPIO_PIN_8},  /* 77, FMC_D13 */
-       {STM32_GPIO_PORT_E, STM32_GPIO_PIN_15}, /* 68, FMC_D12 */
-       {STM32_GPIO_PORT_E, STM32_GPIO_PIN_14}, /* 67, FMC_D11 */
-       {STM32_GPIO_PORT_E, STM32_GPIO_PIN_13}, /* 66, FMC_D10 */
-       {STM32_GPIO_PORT_E, STM32_GPIO_PIN_12}, /* 65, FMC_D9 */
-       {STM32_GPIO_PORT_E, STM32_GPIO_PIN_11}, /* 64, FMC_D8 */
-       {STM32_GPIO_PORT_E, STM32_GPIO_PIN_10}, /* 63, FMC_D7 */
-       {STM32_GPIO_PORT_E, STM32_GPIO_PIN_9},  /* 60, FMC_D6 */
-       {STM32_GPIO_PORT_E, STM32_GPIO_PIN_8},  /* 59, FMC_D5 */
-       {STM32_GPIO_PORT_E, STM32_GPIO_PIN_7},  /* 58, FMC_D4 */
-       {STM32_GPIO_PORT_D, STM32_GPIO_PIN_1},  /* 115, FMC_D3 */
-       {STM32_GPIO_PORT_D, STM32_GPIO_PIN_0},  /* 114, FMC_D2 */
-       {STM32_GPIO_PORT_D, STM32_GPIO_PIN_15}, /* 86, FMC_D1 */
-       {STM32_GPIO_PORT_D, STM32_GPIO_PIN_14}, /* 85, FMC_D0 */
-       {STM32_GPIO_PORT_E, STM32_GPIO_PIN_1},  /* 142, FMC_NBL1 */
-       {STM32_GPIO_PORT_E, STM32_GPIO_PIN_0},  /* 141, FMC_NBL0 */
-       {STM32_GPIO_PORT_G, STM32_GPIO_PIN_5},  /* 90, FMC_A15, BA1 */
-       {STM32_GPIO_PORT_G, STM32_GPIO_PIN_4},  /* 89, FMC_A14, BA0 */
-       {STM32_GPIO_PORT_G, STM32_GPIO_PIN_1},  /* 57, FMC_A11 */
-       {STM32_GPIO_PORT_G, STM32_GPIO_PIN_0},  /* 56, FMC_A10 */
-       {STM32_GPIO_PORT_F, STM32_GPIO_PIN_15}, /* 55, FMC_A9 */
-       {STM32_GPIO_PORT_F, STM32_GPIO_PIN_14}, /* 54, FMC_A8 */
-       {STM32_GPIO_PORT_F, STM32_GPIO_PIN_13}, /* 53, FMC_A7 */
-       {STM32_GPIO_PORT_F, STM32_GPIO_PIN_12}, /* 50, FMC_A6 */
-       {STM32_GPIO_PORT_F, STM32_GPIO_PIN_5},  /* 15, FMC_A5 */
-       {STM32_GPIO_PORT_F, STM32_GPIO_PIN_4},  /* 14, FMC_A4 */
-       {STM32_GPIO_PORT_F, STM32_GPIO_PIN_3},  /* 13, FMC_A3 */
-       {STM32_GPIO_PORT_F, STM32_GPIO_PIN_2},  /* 12, FMC_A2 */
-       {STM32_GPIO_PORT_F, STM32_GPIO_PIN_1},  /* 11, FMC_A1 */
-       {STM32_GPIO_PORT_F, STM32_GPIO_PIN_0},  /* 10, FMC_A0 */
-       {STM32_GPIO_PORT_B, STM32_GPIO_PIN_6},  /* 136, SDRAM_NE */
-       {STM32_GPIO_PORT_F, STM32_GPIO_PIN_11}, /* 49, SDRAM_NRAS */
-       {STM32_GPIO_PORT_G, STM32_GPIO_PIN_15}, /* 132, SDRAM_NCAS */
-       {STM32_GPIO_PORT_C, STM32_GPIO_PIN_0},  /* 26, SDRAM_NWE */
-       {STM32_GPIO_PORT_B, STM32_GPIO_PIN_5},  /* 135, SDRAM_CKE */
-       {STM32_GPIO_PORT_G, STM32_GPIO_PIN_8},  /* 93, SDRAM_CLK */
-};
-
-static int fmc_setup_gpio(void)
-{
-       int rv = 0;
-       int i;
-
-       for (i = 0; i < ARRAY_SIZE(ext_ram_fmc_gpio); i++) {
-               rv = stm32_gpio_config(&ext_ram_fmc_gpio[i],
-                               &gpio_ctl_fmc);
-               if (rv)
-                       goto out;
-       }
-
-out:
-       return rv;
-}
-
 int dram_init(void)
 {
        int rv;
        struct udevice *dev;
 
-       rv = fmc_setup_gpio();
-       if (rv)
-               return rv;
        rv = uclass_get_device(UCLASS_RAM, 0, &dev);
        if (rv) {
                debug("DRAM init failed: %d\n", rv);
@@ -156,11 +50,6 @@ u32 get_board_rev(void)
 
 int board_early_init_f(void)
 {
-       int res;
-
-       res = uart_setup_gpio();
-       if (res)
-               return res;
        return 0;
 }
 
index ee50b35cc8bf0cb7a6ab110aa37855393179914a..52bd9319b3bfc96e83dc02dd97b3dfc5b8d81ca8 100644 (file)
@@ -20,10 +20,13 @@ CONFIG_OF_CONTROL=y
 CONFIG_OF_EMBED=y
 CONFIG_ENV_IS_IN_FLASH=y
 CONFIG_CLK=y
+CONFIG_DM_GPIO=y
 CONFIG_MISC=y
 CONFIG_STM32_RCC=y
 # CONFIG_MMC is not set
 CONFIG_MTD_NOR_FLASH=y
+CONFIG_PINCTRL=y
+CONFIG_PINCTRL_STM32=y
 CONFIG_RAM=y
 CONFIG_STM32_SDRAM=y
 CONFIG_DM_RESET=y
index 201d7bfff978abbe7e96045a7ba491e543524b8b..8525679091dd941e194baaa5697aa347a3c5e997 100644 (file)
@@ -48,7 +48,6 @@ obj-$(CONFIG_ADI_GPIO2)       += adi_gpio2.o
 obj-$(CONFIG_TCA642X)          += tca642x.o
 obj-$(CONFIG_SUNXI_GPIO)       += sunxi_gpio.o
 obj-$(CONFIG_LPC32XX_GPIO)     += lpc32xx_gpio.o
-obj-$(CONFIG_STM32_GPIO)       += stm32_gpio.o
 obj-$(CONFIG_STM32F7_GPIO)     += stm32f7_gpio.o
 obj-$(CONFIG_GPIO_UNIPHIER)    += gpio-uniphier.o
 obj-$(CONFIG_ZYNQ_GPIO)                += zynq_gpio.o
diff --git a/drivers/gpio/stm32_gpio.c b/drivers/gpio/stm32_gpio.c
deleted file mode 100644 (file)
index c04cef4..0000000
+++ /dev/null
@@ -1,182 +0,0 @@
-/*
- * (C) Copyright 2011
- * Yuri Tikhonov, Emcraft Systems, yur@emcraft.com
- *
- * (C) Copyright 2015
- * Kamil Lulko, <kamil.lulko@gmail.com>
- *
- * Copyright 2015 ATS Advanced Telematics Systems GmbH
- * Copyright 2015 Konsulko Group, Matt Porter <mporter@konsulko.com>
- *
- * SPDX-License-Identifier:    GPL-2.0+
- */
-
-#include <common.h>
-#include <asm/io.h>
-#include <linux/errno.h>
-#include <asm/arch/stm32.h>
-#include <asm/arch/gpio.h>
-
-DECLARE_GLOBAL_DATA_PTR;
-
-static const unsigned long io_base[] = {
-       STM32_GPIOA_BASE, STM32_GPIOB_BASE, STM32_GPIOC_BASE,
-       STM32_GPIOD_BASE, STM32_GPIOE_BASE, STM32_GPIOF_BASE,
-       STM32_GPIOG_BASE, STM32_GPIOH_BASE, STM32_GPIOI_BASE
-};
-
-struct stm32_gpio_regs {
-       u32 moder;      /* GPIO port mode */
-       u32 otyper;     /* GPIO port output type */
-       u32 ospeedr;    /* GPIO port output speed */
-       u32 pupdr;      /* GPIO port pull-up/pull-down */
-       u32 idr;        /* GPIO port input data */
-       u32 odr;        /* GPIO port output data */
-       u32 bsrr;       /* GPIO port bit set/reset */
-       u32 lckr;       /* GPIO port configuration lock */
-       u32 afr[2];     /* GPIO alternate function */
-};
-
-#define CHECK_DSC(x)   (!x || x->port > 8 || x->pin > 15)
-#define CHECK_CTL(x)   (!x || x->af > 15 || x->mode > 3 || x->otype > 1 || \
-                       x->pupd > 2 || x->speed > 3)
-
-int stm32_gpio_config(const struct stm32_gpio_dsc *dsc,
-               const struct stm32_gpio_ctl *ctl)
-{
-       struct stm32_gpio_regs *gpio_regs;
-       u32 i;
-       int rv;
-
-       if (CHECK_DSC(dsc)) {
-               rv = -EINVAL;
-               goto out;
-       }
-       if (CHECK_CTL(ctl)) {
-               rv = -EINVAL;
-               goto out;
-       }
-
-       gpio_regs = (struct stm32_gpio_regs *)io_base[dsc->port];
-
-       i = (dsc->pin & 0x07) * 4;
-       clrsetbits_le32(&gpio_regs->afr[dsc->pin >> 3], 0xF << i, ctl->af << i);
-
-       i = dsc->pin * 2;
-
-       clrsetbits_le32(&gpio_regs->moder, 0x3 << i, ctl->mode << i);
-       clrsetbits_le32(&gpio_regs->otyper, 0x3 << i, ctl->otype << i);
-       clrsetbits_le32(&gpio_regs->ospeedr, 0x3 << i, ctl->speed << i);
-       clrsetbits_le32(&gpio_regs->pupdr, 0x3 << i, ctl->pupd << i);
-
-       rv = 0;
-out:
-       return rv;
-}
-
-int stm32_gpout_set(const struct stm32_gpio_dsc *dsc, int state)
-{
-       struct stm32_gpio_regs  *gpio_regs;
-       int rv;
-
-       if (CHECK_DSC(dsc)) {
-               rv = -EINVAL;
-               goto out;
-       }
-
-       gpio_regs = (struct stm32_gpio_regs *)io_base[dsc->port];
-
-       if (state)
-               writel(1 << dsc->pin, &gpio_regs->bsrr);
-       else
-               writel(1 << (dsc->pin + 16), &gpio_regs->bsrr);
-
-       rv = 0;
-out:
-       return rv;
-}
-
-int stm32_gpin_get(const struct stm32_gpio_dsc *dsc)
-{
-       struct stm32_gpio_regs  *gpio_regs;
-       int rv;
-
-       if (CHECK_DSC(dsc)) {
-               rv = -EINVAL;
-               goto out;
-       }
-
-       gpio_regs = (struct stm32_gpio_regs *)io_base[dsc->port];
-       rv = readl(&gpio_regs->idr) & (1 << dsc->pin);
-out:
-       return rv;
-}
-
-/* Common GPIO API */
-
-int gpio_request(unsigned gpio, const char *label)
-{
-       return 0;
-}
-
-int gpio_free(unsigned gpio)
-{
-       return 0;
-}
-
-int gpio_direction_input(unsigned gpio)
-{
-       struct stm32_gpio_dsc dsc;
-       struct stm32_gpio_ctl ctl;
-
-       dsc.port = stm32_gpio_to_port(gpio);
-       dsc.pin = stm32_gpio_to_pin(gpio);
-       ctl.af = STM32_GPIO_AF0;
-       ctl.mode = STM32_GPIO_MODE_IN;
-       ctl.otype = STM32_GPIO_OTYPE_PP;
-       ctl.pupd = STM32_GPIO_PUPD_NO;
-       ctl.speed = STM32_GPIO_SPEED_50M;
-
-       return stm32_gpio_config(&dsc, &ctl);
-}
-
-int gpio_direction_output(unsigned gpio, int value)
-{
-       struct stm32_gpio_dsc dsc;
-       struct stm32_gpio_ctl ctl;
-       int res;
-
-       dsc.port = stm32_gpio_to_port(gpio);
-       dsc.pin = stm32_gpio_to_pin(gpio);
-       ctl.af = STM32_GPIO_AF0;
-       ctl.mode = STM32_GPIO_MODE_OUT;
-       ctl.pupd = STM32_GPIO_PUPD_NO;
-       ctl.speed = STM32_GPIO_SPEED_50M;
-
-       res = stm32_gpio_config(&dsc, &ctl);
-       if (res < 0)
-               goto out;
-       res = stm32_gpout_set(&dsc, value);
-out:
-       return res;
-}
-
-int gpio_get_value(unsigned gpio)
-{
-       struct stm32_gpio_dsc dsc;
-
-       dsc.port = stm32_gpio_to_port(gpio);
-       dsc.pin = stm32_gpio_to_pin(gpio);
-
-       return stm32_gpin_get(&dsc);
-}
-
-int gpio_set_value(unsigned gpio, int value)
-{
-       struct stm32_gpio_dsc dsc;
-
-       dsc.port = stm32_gpio_to_port(gpio);
-       dsc.pin = stm32_gpio_to_pin(gpio);
-
-       return stm32_gpout_set(&dsc, value);
-}
index 934acbcf9872f2ca40e562f6c49ade460c79ec32..1ad36986ae365a090e9154156077c99a73a314a0 100644 (file)
@@ -41,7 +41,6 @@
 #define CONFIG_RED_LED                 110
 #define CONFIG_GREEN_LED               109
 
-#define CONFIG_STM32_GPIO
 #define CONFIG_STM32_FLASH
 
 #define CONFIG_STM32_HSE_HZ            8000000