[PATCH] STM32H743ZI Nucleo and basic lwIP support
Robin Müller
robin.mueller.m at gmail.com
Fri Apr 2 08:32:54 UTC 2021
The change with void HAL_ETH_MspInit(ETH_HandleTypeDef *heth) was just
that most
other function definitions I saw were on one line so I assumed this was a
little formatting mistake. I can discard the change if this was
intentional.
I can add #ifndef __rtems__ for the section with the legacy defines as well.
Kind Regards
Robin
On Mon, 29 Mar 2021 at 17:52, Gedare Bloom <gedare at rtems.org> wrote:
> On Mon, Mar 29, 2021 at 6:17 AM Robin Mueller <robin.mueller.m at gmail.com>
> wrote:
> >
> > This patch adds support for the STM32H743ZI-Nucleo board
> > variation. This currently works by setting the STM32H743ZI_NUCLEO
> > flag in the config.ini flag
> >
> > It also adds basic lwIP support which can be enabled
> > with the flag STM32H7_ADD_LWIP. This enables certain functionalities
> > required for lwIP to work properly
> >
> > This patch also changes the default implementation
> > of HAL_GetTick to return the system tick by forwarding the call
> > to the respective RTEMS function.
> >
> > ---
> > bsps/arm/stm32h7/console/console-usart3-cfg.c | 21 ++++++++++++++++
> > bsps/arm/stm32h7/hal/stm32h7xx_hal_eth.c | 16 ++++++++-----
> > .../stm32h7/include/Legacy/stm32_hal_legacy.h | 4 +++-
> > bsps/arm/stm32h7/include/stm32h7xx_hal_conf.h | 11 ++++++++-
> > bsps/arm/stm32h7/include/stm32h7xx_hal_uart.h | 1 +
> > bsps/arm/stm32h7/start/bspstart.c | 2 +-
> > bsps/arm/stm32h7/start/stm32h7-hal-eth.c | 3 +--
> > spec/build/bsps/arm/stm32h7/bspstm32h7.yml | 4 ++++
> > spec/build/bsps/arm/stm32h7/opth743nucleo.yml | 13 ++++++++++
> > spec/build/bsps/arm/stm32h7/optlwip.yml | 24 +++++++++++++++++++
> > 10 files changed, 88 insertions(+), 11 deletions(-)
> > create mode 100644 spec/build/bsps/arm/stm32h7/opth743nucleo.yml
> > create mode 100644 spec/build/bsps/arm/stm32h7/optlwip.yml
> >
> > diff --git a/bsps/arm/stm32h7/console/console-usart3-cfg.c
> b/bsps/arm/stm32h7/console/console-usart3-cfg.c
> > index b40f6da5aa..dc552610e1 100644
> > --- a/bsps/arm/stm32h7/console/console-usart3-cfg.c
> > +++ b/bsps/arm/stm32h7/console/console-usart3-cfg.c
> > @@ -25,12 +25,32 @@
> > * POSSIBILITY OF SUCH DAMAGE.
> > */
> >
> > +#ifdef __rtems__
> > +#include <bspopts.h>
> > +#endif
> > +
> > #ifdef HAVE_CONFIG_H
> > #include "config.h"
> > #endif
> >
> > #include <stm32h7/hal.h>
> >
> > +#if STM32H743ZI_NUCLEO == 1
> > +const stm32h7_uart_config stm32h7_usart3_config = {
> > + .gpio = {
> > + .regs = GPIOD,
> > + .config = {
> > + .Pin = GPIO_PIN_8 | GPIO_PIN_9,
> > + .Mode = GPIO_MODE_AF_PP,
> > + .Pull = GPIO_NOPULL,
> > + .Speed = GPIO_SPEED_FREQ_LOW,
> > + .Alternate = GPIO_AF7_USART3
> > + }
> > + },
> > + .irq = USART3_IRQn,
> > + .device_index = 2
> > +};
> > +#else
> > const stm32h7_uart_config stm32h7_usart3_config = {
> > .gpio = {
> > .regs = GPIOB,
> > @@ -45,3 +65,4 @@ const stm32h7_uart_config stm32h7_usart3_config = {
> > .irq = USART3_IRQn,
> > .device_index = 2
> > };
> > +#endif /* STM32H743ZI_NUCLEO == 1 */
> > diff --git a/bsps/arm/stm32h7/hal/stm32h7xx_hal_eth.c
> b/bsps/arm/stm32h7/hal/stm32h7xx_hal_eth.c
> > index 4f2634df5b..6c3590bce8 100644
> > --- a/bsps/arm/stm32h7/hal/stm32h7xx_hal_eth.c
> > +++ b/bsps/arm/stm32h7/hal/stm32h7xx_hal_eth.c
> > @@ -146,6 +146,10 @@
> > /* Includes
> ------------------------------------------------------------------*/
> > #include "stm32h7xx_hal.h"
> >
> > +#ifdef __rtems__
> > +#include <bspopts.h>
> > +#endif
> > +
> > /** @addtogroup STM32H7xx_HAL_Driver
> > * @{
> > */
> > @@ -361,10 +365,10 @@ HAL_StatusTypeDef HAL_ETH_Init(ETH_HandleTypeDef
> *heth)
> > /*------------------ MAC, MTL and DMA default Configuration
> ----------------*/
> > ETH_MACDMAConfig(heth);
> >
> > -#ifndef __rtems__
> > +#if STM32H7_ADD_LWIP == 1
>
> Someone else may be able to address whether we need to disable this
> stuff for 'non-lwip' builds of stm32. There is an ongoing effort to
> collect lwip drivers and lwip build as a library after building rtems,
> so maybe this will move eventually to the lwip driver repo when that
> gets into production.
>
> > /* SET DSL to 64 bit */
> > MODIFY_REG(heth->Instance->DMACCR, ETH_DMACCR_DSL,
> ETH_DMACCR_DSL_64BIT);
> > -#endif /* __rtems__ */
> > +#endif
> >
> > /* Set Receive Buffers Length (must be a multiple of 4) */
> > if ((heth->Init.RxBuffLen % 0x4U) != 0x0U)
> > @@ -2647,7 +2651,7 @@ static void
> ETH_MAC_MDIO_ClkConfig(ETH_HandleTypeDef *heth)
> > */
> > static void ETH_DMATxDescListInit(ETH_HandleTypeDef *heth)
> > {
> > -#ifndef __rtems__
> > +#if STM32H7_ADD_LWIP == 1
> > ETH_DMADescTypeDef *dmatxdesc;
> > uint32_t i;
> >
> > @@ -2674,7 +2678,7 @@ static void
> ETH_DMATxDescListInit(ETH_HandleTypeDef *heth)
> >
> > /* Set Transmit Descriptor Tail pointer */
> > WRITE_REG(heth->Instance->DMACTDTPR, (uint32_t) heth->Init.TxDesc);
> > -#endif /* __rtems__ */
> > +#endif /* STM32H7_ADD_LWIP == 1 */
> > }
> >
> > /**
> > @@ -2686,7 +2690,7 @@ static void
> ETH_DMATxDescListInit(ETH_HandleTypeDef *heth)
> > */
> > static void ETH_DMARxDescListInit(ETH_HandleTypeDef *heth)
> > {
> > -#ifndef __rtems__
> > +#if STM32H7_ADD_LWIP == 1
> > ETH_DMADescTypeDef *dmarxdesc;
> > uint32_t i;
> >
> > @@ -2719,7 +2723,7 @@ static void
> ETH_DMARxDescListInit(ETH_HandleTypeDef *heth)
> >
> > /* Set Receive Descriptor Tail pointer Address */
> > WRITE_REG(heth->Instance->DMACRDTPR, ((uint32_t)(heth->Init.RxDesc +
> (((uint32_t)(ETH_RX_DESC_CNT - 1))*sizeof(ETH_DMADescTypeDef)))));
> > -#endif /* __rtems__ */
> > +#endif /* STM32H7_ADD_LWIP == 1 */
> > }
> >
> > /**
> > diff --git a/bsps/arm/stm32h7/include/Legacy/stm32_hal_legacy.h
> b/bsps/arm/stm32h7/include/Legacy/stm32_hal_legacy.h
> > index c311c1618e..c4fa5d7151 100644
> > --- a/bsps/arm/stm32h7/include/Legacy/stm32_hal_legacy.h
> > +++ b/bsps/arm/stm32h7/include/Legacy/stm32_hal_legacy.h
> > @@ -420,7 +420,9 @@
> > #define TYPEPROGRAMDATA_FASTBYTE FLASH_TYPEPROGRAMDATA_FASTBYTE
> > #define TYPEPROGRAMDATA_FASTHALFWORD FLASH_TYPEPROGRAMDATA_FASTHALFWORD
> > #define TYPEPROGRAMDATA_FASTWORD FLASH_TYPEPROGRAMDATA_FASTWORD
>
> Can you instead use:
> #ifndef __rtems___
> > -#define PAGESIZE FLASH_PAGE_SIZE
> > +/* Commented out for the RTEMS BSP because there can be nameclashes
> with another
> > +similar defininition in limits.h */
> > +//#define PAGESIZE FLASH_PAGE_SIZE
> #endif
>
> > #define TYPEPROGRAM_FASTBYTE FLASH_TYPEPROGRAM_BYTE
> > #define TYPEPROGRAM_FASTHALFWORD FLASH_TYPEPROGRAM_HALFWORD
> > #define TYPEPROGRAM_FASTWORD FLASH_TYPEPROGRAM_WORD
> > diff --git a/bsps/arm/stm32h7/include/stm32h7xx_hal_conf.h
> b/bsps/arm/stm32h7/include/stm32h7xx_hal_conf.h
> > index d423e4f782..b608188b4f 100644
> > --- a/bsps/arm/stm32h7/include/stm32h7xx_hal_conf.h
> > +++ b/bsps/arm/stm32h7/include/stm32h7xx_hal_conf.h
> > @@ -21,6 +21,9 @@
> > #ifndef __STM32H7xx_HAL_CONF_H
> > #define __STM32H7xx_HAL_CONF_H
> >
> > +#ifdef __rtems__
> > +#include <bspopts.h>
> > +#endif /* __rtems__ */
> > #ifdef __cplusplus
> > extern "C" {
> > #endif
> > @@ -103,7 +106,13 @@
> > * (when HSE is used as system clock source, directly or
> through the PLL).
> > */
> > #if !defined (HSE_VALUE)
> > -#define HSE_VALUE ((uint32_t)25000000) /*!< Value of the External
> oscillator in Hz : FPGA case fixed to 60MHZ */
> > + #if STM32H743ZI_NUCLEO == 1
> > + /*!< External oscillator clock for the STM32H743ZI Nucleo */
> > + #define HSE_VALUE ((uint32_t)8000000)
> > + #else
> > + /*!< Value of the External oscillator in Hz : FPGA case fixed to
> 60MHZ */
> > + #define HSE_VALUE ((uint32_t)25000000)
> > + #endif /* STM32H743ZI_NUCLEO == 1 */
> > #endif /* HSE_VALUE */
> >
> > #if !defined (HSE_STARTUP_TIMEOUT)
> > diff --git a/bsps/arm/stm32h7/include/stm32h7xx_hal_uart.h
> b/bsps/arm/stm32h7/include/stm32h7xx_hal_uart.h
> > index e9fecc4aa0..b171f7dac7 100644
> > --- a/bsps/arm/stm32h7/include/stm32h7xx_hal_uart.h
> > +++ b/bsps/arm/stm32h7/include/stm32h7xx_hal_uart.h
> > @@ -27,6 +27,7 @@ extern "C" {
> >
> > /* Includes
> ------------------------------------------------------------------*/
> > #include "stm32h7xx_hal_def.h"
> > +#include "stm32h7xx_hal_dma.h"
> >
> > /** @addtogroup STM32H7xx_HAL_Driver
> > * @{
> > diff --git a/bsps/arm/stm32h7/start/bspstart.c
> b/bsps/arm/stm32h7/start/bspstart.c
> > index 2fc8133cca..d942fbdcb3 100644
> > --- a/bsps/arm/stm32h7/start/bspstart.c
> > +++ b/bsps/arm/stm32h7/start/bspstart.c
> > @@ -34,7 +34,7 @@
> >
> > uint32_t HAL_GetTick(void)
> > {
> > - return 0;
> > + return rtems_clock_get_ticks_since_boot();
> > }
> >
> > uint32_t stm32h7_systick_frequency(void)
> > diff --git a/bsps/arm/stm32h7/start/stm32h7-hal-eth.c
> b/bsps/arm/stm32h7/start/stm32h7-hal-eth.c
> > index 46475f4316..36363f84a5 100644
> > --- a/bsps/arm/stm32h7/start/stm32h7-hal-eth.c
> > +++ b/bsps/arm/stm32h7/start/stm32h7-hal-eth.c
> > @@ -64,8 +64,7 @@ static const stm32h7_gpio_config gpioa = {
> > }
> > };
> >
> > -void
> > -HAL_ETH_MspInit(ETH_HandleTypeDef *heth)
> > +void HAL_ETH_MspInit(ETH_HandleTypeDef *heth)
> why this change?
>
> > {
> > stm32h7_clk_enable(STM32H7_MODULE_ETH1MAC);
> > stm32h7_clk_enable(STM32H7_MODULE_ETH1TX);
> > diff --git a/spec/build/bsps/arm/stm32h7/bspstm32h7.yml
> b/spec/build/bsps/arm/stm32h7/bspstm32h7.yml
> > index 80e13472c8..89b5a3c00d 100644
> > --- a/spec/build/bsps/arm/stm32h7/bspstm32h7.yml
> > +++ b/spec/build/bsps/arm/stm32h7/bspstm32h7.yml
> > @@ -247,6 +247,10 @@ links:
> > uid: ../../optconsolebaud
> > - role: build-dependency
> > uid: ../../optconsoleirq
> > +- role: build-dependency
> > + uid: opth743nucleo
> > +- role: build-dependency
> > + uid: optlwip
> > - role: build-dependency
> > uid: ../grp
> > - role: build-dependency
> > diff --git a/spec/build/bsps/arm/stm32h7/opth743nucleo.yml
> b/spec/build/bsps/arm/stm32h7/opth743nucleo.yml
> > new file mode 100644
> > index 0000000000..2c4176bf00
> > --- /dev/null
> > +++ b/spec/build/bsps/arm/stm32h7/opth743nucleo.yml
> > @@ -0,0 +1,13 @@
> > +actions:
> > +- get-boolean: null
> > +- define-condition: null
> > +build-type: option
> > +default: false
> > +default-by-variant: []
> > +enabled-by: true
> > +format: '{}'
> > +links: []
> > +name: STM32H743ZI_NUCLEO
> > +description: |
> > + Nucleo board. Use 8 MHz HSE external clock and different pins for the
> UART console.
> > +type: build
> > diff --git a/spec/build/bsps/arm/stm32h7/optlwip.yml
> b/spec/build/bsps/arm/stm32h7/optlwip.yml
> > new file mode 100644
> > index 0000000000..04613a3bb6
> > --- /dev/null
> > +++ b/spec/build/bsps/arm/stm32h7/optlwip.yml
> > @@ -0,0 +1,24 @@
> > +actions:
> > +- get-boolean: null
> > +- env-assign: null
> > +- define-condition: null
> > +build-type: option
> > +default: false
> > +default-by-variant: []
> > +enabled-by: true
> > +format: '{}'
> > +links: []
> > +name: STM32H7_ADD_LWIP
> > +description: |
> > + This changes the code to allow lwIP to work properly based on the
> STM32 lwIP example.
> > + The user must take care of the following steps in the application:
> > + 1. The lwIP DMA descriptors have to be placed into the .bsp_no_cache
> section instead
> > + of custom sections
> > + 2. The sections need to be aligned to 32 bytes (0x20) boundaries
> > + This can be achieved by appending
> > + __attribute__((section(.bsp_no_cache),__aligned__(0x20)));
> > + to the descriptor definitions.
> > +type: build
> > +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
> > +copyrights:
> > +- Copyright (C) 2020 Robin Mueller
> > --
> > 2.23.0.windows.1
> >
> > _______________________________________________
> > devel mailing list
> > devel at rtems.org
> > http://lists.rtems.org/mailman/listinfo/devel
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.rtems.org/pipermail/devel/attachments/20210402/66cff4ad/attachment-0001.html>
More information about the devel
mailing list