Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions boards/st/nucleo_n657x0_q/Kconfig.defconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
# STM32N657X0_Q Nucleo board configuration

# Copyright (c) 2025 STMicroelectronics
# SPDX-License-Identifier: Apache-2.0

if BOARD_NUCLEO_N657X0_Q

if NETWORKING

config NET_L2_ETHERNET
default y

endif # NETWORKING

endif # BOARD_NUCLEO_N657X0_Q
25 changes: 25 additions & 0 deletions boards/st/nucleo_n657x0_q/nucleo_n657x0_q_common.dtsi
Original file line number Diff line number Diff line change
Expand Up @@ -174,3 +174,28 @@
current-speed = <115200>;
status = "okay";
};

&mac {
status = "okay";
pinctrl-0 = <&eth1_rmii_ref_clk_pf7
&eth1_rmii_crs_dv_pf10
&eth1_rmii_rxd0_pf14
&eth1_rmii_rxd1_pf15
&eth1_rmii_tx_en_pf11
&eth1_rmii_txd0_pf12
&eth1_rmii_txd1_pf13>;
pinctrl-names = "default";
phy-connection-type = "rmii";
};

&mdio {
status = "okay";
pinctrl-0 = <&eth1_mdio_pf4 &eth1_mdc_pg11>;
pinctrl-names = "default";

ethernet-phy@0 {
compatible = "ethernet-phy";
reg = <0x0>;
status = "okay";
};
};
8 changes: 5 additions & 3 deletions drivers/ethernet/Kconfig.stm32_hal
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,12 @@ menuconfig ETH_STM32_HAL
default y
depends on DT_HAS_ST_STM32_ETHERNET_ENABLED
select USE_STM32_HAL_ETH
select NOCACHE_MEMORY if SOC_SERIES_STM32H7X && CPU_CORTEX_M7
select USE_STM32_HAL_RIF if SOC_SERIES_STM32N6X
select NOCACHE_MEMORY if (SOC_SERIES_STM32H7X && CPU_CORTEX_M7) || SOC_SERIES_STM32N6X
select HWINFO
select ETH_DSA_SUPPORT
select PINCTRL
select MDIO if SOC_SERIES_STM32H5X || SOC_SERIES_STM32H7X
select MDIO if DT_HAS_ST_STM32_MDIO_ENABLED
imply CRC
help
Enable STM32 HAL based Ethernet driver. It is available for
Expand All @@ -26,7 +27,8 @@ choice ETH_STM32_HAL_API_VERSION

config ETH_STM32_HAL_API_V2
bool "Use official STM32Cube HAL driver"
depends on SOC_SERIES_STM32H7X || SOC_SERIES_STM32H5X || SOC_SERIES_STM32F4X || SOC_SERIES_STM32F7X
depends on SOC_SERIES_STM32H7X || SOC_SERIES_STM32H5X || SOC_SERIES_STM32F4X || SOC_SERIES_STM32F7X || SOC_SERIES_STM32N6X
select USE_STM32_HAL_ETH_EX if SOC_SERIES_STM32N6X
help
Use the official STM32Cube HAL driver instead of the legacy one.

Expand Down
51 changes: 51 additions & 0 deletions drivers/ethernet/eth_stm32_hal.c
Original file line number Diff line number Diff line change
Expand Up @@ -131,8 +131,16 @@ static const struct device *eth_stm32_phy_dev = DEVICE_PHY_BY_NAME(0);
#define __eth_stm32_buf __aligned(4)
#endif

#if DT_HAS_COMPAT_STATUS_OKAY(st_stm32n6_ethernet)
static ETH_DMADescTypeDef
dma_rx_desc_tab[ETH_DMA_RX_CH_CNT][ETH_RXBUFNB] ALIGN_32BYTES(__eth_stm32_desc);
static ETH_DMADescTypeDef
dma_tx_desc_tab[ETH_DMA_TX_CH_CNT][ETH_TXBUFNB] ALIGN_32BYTES(__eth_stm32_desc);
#else
static ETH_DMADescTypeDef dma_rx_desc_tab[ETH_RXBUFNB] __eth_stm32_desc;
static ETH_DMADescTypeDef dma_tx_desc_tab[ETH_TXBUFNB] __eth_stm32_desc;
#endif

static uint8_t dma_rx_buffer[ETH_RXBUFNB][ETH_STM32_RX_BUF_SIZE] __eth_stm32_buf;
static uint8_t dma_tx_buffer[ETH_TXBUFNB][ETH_STM32_TX_BUF_SIZE] __eth_stm32_buf;

Expand Down Expand Up @@ -842,7 +850,12 @@ void HAL_ETH_ErrorCallback(ETH_HandleTypeDef *heth)
CONTAINER_OF(heth, struct eth_stm32_hal_dev_data, heth);

switch (error_code) {
#if DT_HAS_COMPAT_STATUS_OKAY(st_stm32n6_ethernet)
case HAL_ETH_ERROR_DMA_CH0:
case HAL_ETH_ERROR_DMA_CH1:
#else
case HAL_ETH_ERROR_DMA:
#endif
dma_error = HAL_ETH_GetDMAError(heth);

#if DT_HAS_COMPAT_STATUS_OKAY(st_stm32h7_ethernet)
Expand Down Expand Up @@ -939,6 +952,32 @@ static void generate_mac(uint8_t *mac_addr)
#endif
}

#if DT_HAS_COMPAT_STATUS_OKAY(st_stm32n6_ethernet)
/**
* Configures the RISAF (RIF Security Attribute Framework) for Ethernet on STM32N6.
* This function sets up the master and slave security attributes for the Ethernet peripheral.
*/

static void RISAF_Config(void)
{
/* Define and initialize the master configuration structure */
RIMC_MasterConfig_t RIMC_master = {0};

/* Enable the clock for the RIFSC (RIF Security Controller) */
__HAL_RCC_RIFSC_CLK_ENABLE();

RIMC_master.MasterCID = RIF_CID_1;
RIMC_master.SecPriv = RIF_ATTRIBUTE_SEC | RIF_ATTRIBUTE_PRIV;

/* Configure the master attributes for the Ethernet peripheral (ETH1) */
HAL_RIF_RIMC_ConfigMasterAttributes(RIF_MASTER_INDEX_ETH1, &RIMC_master);

/* Set the secure and privileged attributes for the Ethernet peripheral (ETH1) as a slave */
HAL_RIF_RISC_SetSlaveSecureAttributes(RIF_RISC_PERIPH_INDEX_ETH1,
RIF_ATTRIBUTE_SEC | RIF_ATTRIBUTE_PRIV);
}
#endif

static int eth_initialize(const struct device *dev)
{
struct eth_stm32_hal_dev_data *dev_data;
Expand All @@ -961,6 +1000,11 @@ static int eth_initialize(const struct device *dev)
return -ENODEV;
}

#if DT_HAS_COMPAT_STATUS_OKAY(st_stm32n6_ethernet)
/* RISAF Configuration */
RISAF_Config();
#endif

/* enable clock */
ret = clock_control_on(dev_data->clock,
(clock_control_subsys_t)&cfg->pclken);
Expand Down Expand Up @@ -1193,8 +1237,15 @@ static int eth_init_api_v2(const struct device *dev)
dev_data = dev->data;
heth = &dev_data->heth;

#if DT_HAS_COMPAT_STATUS_OKAY(st_stm32n6_ethernet)
for (int ch = 0; ch < ETH_DMA_CH_CNT; ch++) {
heth->Init.TxDesc[ch] = dma_tx_desc_tab[ch];
heth->Init.RxDesc[ch] = dma_rx_desc_tab[ch];
}
#else
heth->Init.TxDesc = dma_tx_desc_tab;
heth->Init.RxDesc = dma_rx_desc_tab;
#endif
heth->Init.RxBuffLen = ETH_STM32_RX_BUF_SIZE;

hal_ret = HAL_ETH_Init(heth);
Expand Down
20 changes: 20 additions & 0 deletions dts/arm/st/n6/stm32n6.dtsi
Original file line number Diff line number Diff line change
Expand Up @@ -640,6 +640,26 @@
dma-offset = <0>;
status = "disabled";
};

mac: ethernet@58036000 {
compatible = "st,stm32n6-ethernet", "st,stm32h7-ethernet",
"st,stm32-ethernet";
reg = <0x58036000 0x8000>;
interrupts = <179 0>;
clock-names = "stmmaceth", "mac-clk-tx",
"mac-clk-rx";
clocks = <&rcc STM32_CLOCK(AHB5, 22)>,
<&rcc STM32_CLOCK(AHB5, 23)>,
<&rcc STM32_CLOCK(AHB5, 24)>;
status = "disabled";

mdio: mdio {
compatible = "st,stm32-mdio";
#address-cells = <1>;
#size-cells = <0>;
status = "disabled";
};
};
};
};

Expand Down
12 changes: 12 additions & 0 deletions dts/bindings/ethernet/st,stm32n6-ethernet.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
# Copyright (c) 2025, STMicroelectronics
# SPDX-License-Identifier: Apache-2.0

description: |
ST STM32N6 Ethernet

This binding file describes the device tree properties required to configure
and use the Ethernet controller on STM32N6 series microcontrollers.

compatible: "st,stm32n6-ethernet"

include: st,stm32-ethernet-common.yaml
2 changes: 1 addition & 1 deletion west.yml
Original file line number Diff line number Diff line change
Expand Up @@ -238,7 +238,7 @@ manifest:
groups:
- hal
- name: hal_stm32
revision: 55043bcc35fffa3b4a8c75a696d932b5020aad09
revision: 04ccc7798343ff51509c5d5276e3bce4375f50e6
path: modules/hal/stm32
groups:
- hal
Expand Down
Loading