diff --git a/boards/arm/stm32l4/stm32l4r9ai-disco/src/Makefile b/boards/arm/stm32l4/stm32l4r9ai-disco/src/Makefile index e0483b5825a..735e3935709 100644 --- a/boards/arm/stm32l4/stm32l4r9ai-disco/src/Makefile +++ b/boards/arm/stm32l4/stm32l4r9ai-disco/src/Makefile @@ -22,7 +22,7 @@ include $(TOPDIR)/Make.defs -CSRCS = stm32_boot.c +CSRCS = stm32_boot.c stm32_bringup.c ifeq ($(CONFIG_ARCH_BOARD_STM32L4_CUSTOM_CLOCKCONFIG),y) CSRCS += stm32_clockconfig.c @@ -61,10 +61,23 @@ endif ifeq ($(CONFIG_BOARDCTL),y) CSRCS += stm32_appinit.c +ifeq ($(CONFIG_BOARDCTL_IOCTL),y) +CSRCS += stm32_ioctl.c +endif endif ifeq ($(CONFIG_ETC_ROMFS),y) CSRCS += etc_romfs.c endif +ifeq ($(CONFIG_BOARDCTL_UNIQUEID),y) +CSRCS += stm32_uid.c +endif + +ifneq ($(CONFIG_STM32_ETHMAC),y) +ifeq ($(CONFIG_NETDEVICES),y) +CSRCS += stm32_netinit.c +endif +endif + include $(TOPDIR)/boards/Board.mk diff --git a/boards/arm/stm32l4/stm32l4r9ai-disco/src/stm32_appinit.c b/boards/arm/stm32l4/stm32l4r9ai-disco/src/stm32_appinit.c index b0a1834abfa..131464b3ec8 100644 --- a/boards/arm/stm32l4/stm32l4r9ai-disco/src/stm32_appinit.c +++ b/boards/arm/stm32l4/stm32l4r9ai-disco/src/stm32_appinit.c @@ -27,52 +27,14 @@ #include #include -#include -#include -#include -#include -#include - -#include #include -#include - -#include -#include -#include - -#include -#include - -#include -#include -#include #include "stm32l4r9ai-disco.h" -/* Conditional logic in stm32l4r9ai-disco.h will determine if certain - * features are supported. Tests for these features need to be made - * after includingstm32l4r9ai-disco. - */ - -#ifdef HAVE_RTC_DRIVER -# include -# include "stm32l4_rtc.h" -#endif - /**************************************************************************** - * Private Data + * Pre-processor Definitions ****************************************************************************/ -#ifdef CONFIG_I2C -# ifdef CONFIG_STM32L4_I2C1 -static struct i2c_master_s *g_i2c1; -# endif -# ifdef CONFIG_STM32L4_I2C3 -static struct i2c_master_s *g_i2c3; -# endif -#endif - /**************************************************************************** * Public Functions ****************************************************************************/ @@ -102,140 +64,13 @@ static struct i2c_master_s *g_i2c3; * ****************************************************************************/ -#ifdef CONFIG_BOARDCTL int board_app_initialize(uintptr_t arg) { -#ifdef HAVE_RTC_DRIVER - struct rtc_lowerhalf_s *rtclower; -#endif - int ret = OK; + /* Did we already initialize via board_late_initialize()? */ -#ifdef HAVE_PROC - /* mount the proc filesystem */ - - syslog(LOG_INFO, "Mounting procfs to /proc\n"); - - ret = nx_mount(NULL, CONFIG_NSH_PROC_MOUNTPOINT, "procfs", 0, NULL); - if (ret < 0) - { - syslog(LOG_ERR, - "ERROR: Failed to mount the PROC filesystem: %d\n", ret); - return ret; - } -#endif - -#ifdef HAVE_RTC_DRIVER - /* Instantiate the STM32 lower-half RTC driver */ - - rtclower = stm32l4_rtc_lowerhalf(); - if (!rtclower) - { - serr("ERROR: Failed to instantiate the RTC lower-half driver\n"); - return -ENOMEM; - } - else - { - /* Bind the lower half driver and register the combined RTC driver - * as /dev/rtc0 - */ - - ret = rtc_initialize(0, rtclower); - if (ret < 0) - { - serr("ERROR: Failed to bind/register the RTC driver: %d\n", ret); - return ret; - } - } -#endif - -#ifdef CONFIG_I2C - i2cinfo("Initializing I2C buses\n"); -#ifdef CONFIG_STM32L4_I2C1 - g_i2c1 = stm32l4_i2cbus_initialize(1); -#ifdef CONFIG_I2C_DRIVER - i2c_register(g_i2c1, 1); -#endif -#endif - -#ifdef CONFIG_STM32L4_I2C3 - g_i2c3 = stm32l4_i2cbus_initialize(3); -#ifdef CONFIG_I2C_DRIVER - i2c_register(g_i2c3, 3); -#endif -#endif -#endif /* CONFIG_I2C */ - -#ifdef HAVE_USBHOST - /* Initialize USB host operation. stm32l4_usbhost_initialize() starts a - * thread that will monitor for USB connection and disconnection events. - */ - - ret = stm32l4_usbhost_initialize(); - if (ret != OK) - { - udbg("ERROR: Failed to initialize USB host: %d\n", ret); - return ret; - } -#endif - -#ifdef HAVE_USBMONITOR - /* Start the USB Monitor */ - - ret = usbmonitor_start(0, NULL); - if (ret != OK) - { - udbg("ERROR: Failed to start USB monitor: %d\n", ret); - return ret; - } -#endif - -#ifdef CONFIG_ADC - ainfo("Initializing ADC\n"); - - stm32l4_adc_setup(); -#ifdef CONFIG_STM32L4_DFSDM - /* Initialize DFSDM and register its filters as additional ADC devices. */ - - ret = stm32_dfsdm_setup(); - if (ret < 0) - { - aerr("ERROR: Failed to start DFSDM: %d\n", ret); - } -#endif -#endif /* CONFIG_ADC */ - -#ifdef CONFIG_DAC - ainfo("Initializing DAC\n"); - - stm32l4_dac_setup(); -#endif - - return ret; -} -#endif /* CONFIG_BOARDCTL */ - -#ifdef CONFIG_BOARDCTL_IOCTL -int board_ioctl(unsigned int cmd, uintptr_t arg) -{ - switch (cmd) - { - default: - return -EINVAL; - } - - return OK; -} -#endif - -#if defined(CONFIG_BOARDCTL_UNIQUEID) -int board_uniqueid(uint8_t *uniqueid) -{ - if (uniqueid == NULL) - { - return -EINVAL; - } - - stm32l4_get_uniqueid(uniqueid); +#ifndef CONFIG_BOARD_LATE_INITIALIZE + return stm32_bringup(); +#else return OK; -} #endif +} diff --git a/boards/arm/stm32l4/stm32l4r9ai-disco/src/stm32_bringup.c b/boards/arm/stm32l4/stm32l4r9ai-disco/src/stm32_bringup.c new file mode 100644 index 00000000000..26122c37578 --- /dev/null +++ b/boards/arm/stm32l4/stm32l4r9ai-disco/src/stm32_bringup.c @@ -0,0 +1,202 @@ +/**************************************************************************** + * boards/arm/stm32l4/stm32l4r9ai-disco/src/stm32_bringup.c + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. The + * ASF licenses this file to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the + * License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + * + ****************************************************************************/ + +/**************************************************************************** + * Included Files + ****************************************************************************/ + +#include + +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#include +#include +#include + +#include +#include + +#include +#include +#include + +#include "stm32l4r9ai-disco.h" + +/* Conditional logic in stm32l4r9ai-disco.h will determine if certain + * features are supported. Tests for these features need to be made + * after includingstm32l4r9ai-disco. + */ + +#ifdef HAVE_RTC_DRIVER +# include +# include "stm32l4_rtc.h" +#endif + +/**************************************************************************** + * Private Data + ****************************************************************************/ + +#ifdef CONFIG_I2C +# ifdef CONFIG_STM32L4_I2C1 +static struct i2c_master_s *g_i2c1; +# endif +# ifdef CONFIG_STM32L4_I2C3 +static struct i2c_master_s *g_i2c3; +# endif +#endif + +/**************************************************************************** + * Public Functions + ****************************************************************************/ + +/**************************************************************************** + * Name: stm32_bringup + * + * Description: + * Perform architecture-specific initialization + * + * CONFIG_BOARD_LATE_INITIALIZE=y : + * Called from board_late_initialize(). + * + * CONFIG_BOARD_LATE_INITIALIZE=n && CONFIG_BOARDCTL=y : + * Called from the NSH library + * + ****************************************************************************/ + +int stm32_bringup(void) +{ +#ifdef HAVE_RTC_DRIVER + struct rtc_lowerhalf_s *rtclower; +#endif + int ret = OK; + +#ifdef HAVE_PROC + /* mount the proc filesystem */ + + syslog(LOG_INFO, "Mounting procfs to /proc\n"); + + ret = nx_mount(NULL, CONFIG_NSH_PROC_MOUNTPOINT, "procfs", 0, NULL); + if (ret < 0) + { + syslog(LOG_ERR, + "ERROR: Failed to mount the PROC filesystem: %d\n", ret); + return ret; + } +#endif + +#ifdef HAVE_RTC_DRIVER + /* Instantiate the STM32 lower-half RTC driver */ + + rtclower = stm32l4_rtc_lowerhalf(); + if (!rtclower) + { + serr("ERROR: Failed to instantiate the RTC lower-half driver\n"); + return -ENOMEM; + } + else + { + /* Bind the lower half driver and register the combined RTC driver + * as /dev/rtc0 + */ + + ret = rtc_initialize(0, rtclower); + if (ret < 0) + { + serr("ERROR: Failed to bind/register the RTC driver: %d\n", ret); + return ret; + } + } +#endif + +#ifdef CONFIG_I2C + i2cinfo("Initializing I2C buses\n"); +#ifdef CONFIG_STM32L4_I2C1 + g_i2c1 = stm32l4_i2cbus_initialize(1); +#ifdef CONFIG_I2C_DRIVER + i2c_register(g_i2c1, 1); +#endif +#endif + +#ifdef CONFIG_STM32L4_I2C3 + g_i2c3 = stm32l4_i2cbus_initialize(3); +#ifdef CONFIG_I2C_DRIVER + i2c_register(g_i2c3, 3); +#endif +#endif +#endif /* CONFIG_I2C */ + +#ifdef HAVE_USBHOST + /* Initialize USB host operation. stm32l4_usbhost_initialize() starts a + * thread that will monitor for USB connection and disconnection events. + */ + + ret = stm32l4_usbhost_initialize(); + if (ret != OK) + { + udbg("ERROR: Failed to initialize USB host: %d\n", ret); + return ret; + } +#endif + +#ifdef HAVE_USBMONITOR + /* Start the USB Monitor */ + + ret = usbmonitor_start(0, NULL); + if (ret != OK) + { + udbg("ERROR: Failed to start USB monitor: %d\n", ret); + return ret; + } +#endif + +#ifdef CONFIG_ADC + ainfo("Initializing ADC\n"); + + stm32l4_adc_setup(); +#ifdef CONFIG_STM32L4_DFSDM + /* Initialize DFSDM and register its filters as additional ADC devices. */ + + ret = stm32_dfsdm_setup(); + if (ret < 0) + { + aerr("ERROR: Failed to start DFSDM: %d\n", ret); + } +#endif +#endif /* CONFIG_ADC */ + +#ifdef CONFIG_DAC + ainfo("Initializing DAC\n"); + + stm32l4_dac_setup(); +#endif + + return ret; +} diff --git a/boards/arm/stm32l4/stm32l4r9ai-disco/src/stm32_ioctl.c b/boards/arm/stm32l4/stm32l4r9ai-disco/src/stm32_ioctl.c new file mode 100644 index 00000000000..d9553c5e091 --- /dev/null +++ b/boards/arm/stm32l4/stm32l4r9ai-disco/src/stm32_ioctl.c @@ -0,0 +1,76 @@ +/**************************************************************************** + * boards/arm/stm32l4/stm32l4r9ai-disco/src/stm32_ioctl.c + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. The + * ASF licenses this file to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the + * License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + * + ****************************************************************************/ + +/**************************************************************************** + * Included Files + ****************************************************************************/ + +#include + +#include +#include +#include + +#include + +#include "stm32l4r9ai-disco.h" + +#ifdef CONFIG_BOARDCTL_IOCTL + +/**************************************************************************** + * Public Functions + ****************************************************************************/ + +/**************************************************************************** + * Name: board_ioctl + * + * Description: + * The "landing site" for much of the boardctl() interface. Generic board- + * control functions invoked via ioctl() get routed through here. + * + * Since we don't do anything unusual at the moment, this function + * accomplishes nothing except avoid a missing-function linker error if + * CONFIG_BOARDCTL_IOCTL is selected. + * + * Input Parameters: + * cmd - IOCTL command being requested. + * arg - Arguments for the IOCTL. + * + * Returned Value: + * we don't yet support any boardctl IOCTLs. This function always returns + * -ENOTTY which is the standard IOCTL return value when a command is not + * supported + * + ****************************************************************************/ + +int board_ioctl(unsigned int cmd, uintptr_t arg) +{ + switch (cmd) + { + default: + return -ENOTTY; + } + + return OK; +} + +#endif /* CONFIG_BOARDCTL_IOCTL */ diff --git a/boards/arm/stm32l4/stm32l4r9ai-disco/src/stm32_netinit.c b/boards/arm/stm32l4/stm32l4r9ai-disco/src/stm32_netinit.c new file mode 100644 index 00000000000..5b153306fd3 --- /dev/null +++ b/boards/arm/stm32l4/stm32l4r9ai-disco/src/stm32_netinit.c @@ -0,0 +1,41 @@ +/**************************************************************************** + * boards/arm/stm32l4/stm32l4r9ai-disco/src/stm32_netinit.c + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. The + * ASF licenses this file to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the + * License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + * + ****************************************************************************/ + +/**************************************************************************** + * Included Files + ****************************************************************************/ + +#include + +/**************************************************************************** + * Public Functions + ****************************************************************************/ + +/**************************************************************************** + * Name: arm_netinitialize + ****************************************************************************/ + +#if defined(CONFIG_NET) && !defined(CONFIG_NETDEV_LATEINIT) +void arm_netinitialize(void) +{ +} +#endif diff --git a/boards/arm/stm32l4/stm32l4r9ai-disco/src/stm32_uid.c b/boards/arm/stm32l4/stm32l4r9ai-disco/src/stm32_uid.c new file mode 100644 index 00000000000..8a395f93a92 --- /dev/null +++ b/boards/arm/stm32l4/stm32l4r9ai-disco/src/stm32_uid.c @@ -0,0 +1,61 @@ +/**************************************************************************** + * boards/arm/stm32l4/stm32l4r9ai-disco/src/stm32_uid.c + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. The + * ASF licenses this file to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the + * License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + * + ****************************************************************************/ + +/**************************************************************************** + * Included Files + ****************************************************************************/ + +#include + +#include +#include +#include +#include +#include +#include + +#include +#include + +#include + +#include "stm32l4_uid.h" +#include "stm32l4r9ai-disco.h" + +/**************************************************************************** + * Pre-processor Definitions + ****************************************************************************/ + +/**************************************************************************** + * Public Functions + ****************************************************************************/ + +int board_uniqueid(uint8_t *uniqueid) +{ + if (uniqueid == NULL) + { + return -EINVAL; + } + + stm32l4_get_uniqueid(uniqueid); + return OK; +} diff --git a/boards/arm/stm32l4/stm32l4r9ai-disco/src/stm32l4r9ai-disco.h b/boards/arm/stm32l4/stm32l4r9ai-disco/src/stm32l4r9ai-disco.h index 56190bf22d2..a07a51c0e62 100644 --- a/boards/arm/stm32l4/stm32l4r9ai-disco/src/stm32l4r9ai-disco.h +++ b/boards/arm/stm32l4/stm32l4r9ai-disco/src/stm32l4r9ai-disco.h @@ -199,6 +199,22 @@ extern struct spi_dev_s *g_spi2; * Public Functions Definitions ****************************************************************************/ +/**************************************************************************** + * Name: stm32_bringup + * + * Description: + * Perform architecture-specific initialization + * + * CONFIG_BOARD_LATE_INITIALIZE=y : + * Called from board_late_initialize(). + * + * CONFIG_BOARD_LATE_INITIALIZE=y && CONFIG_BOARDCTL=y : + * Called from the NSH library + * + ****************************************************************************/ + +int stm32_bringup(void); + /**************************************************************************** * Name: stm32l4_adc_setup *