diff --git a/drivers/ethernet/eth_adin2111.c b/drivers/ethernet/eth_adin2111.c index b4730fddc26..08bb5d49f9f 100644 --- a/drivers/ethernet/eth_adin2111.c +++ b/drivers/ethernet/eth_adin2111.c @@ -1515,6 +1515,8 @@ static const struct ethernet_api adin2111_port_api = { #define ADIN2111_STR(x) #x #define ADIN2111_XSTR(x) ADIN2111_STR(x) +#define ADIN2111_DEF_BUF(name, size) static uint8_t __aligned(4) name[size] + #define ADIN2111_MDIO_PHY_BY_ADDR(adin_n, phy_addr) \ DEVICE_DT_GET(DT_CHILD(DT_INST_CHILD(adin_n, mdio), ethernet_phy_##phy_addr)) @@ -1538,7 +1540,12 @@ static const struct ethernet_api adin2111_port_api = { #define ADIN2111_SPI_OPERATION ((uint16_t)(SPI_OP_MODE_MASTER | SPI_TRANSFER_MSB | SPI_WORD_SET(8))) #define ADIN2111_MAC_INITIALIZE(inst, dev_id, ifaces, name) \ - static uint8_t __aligned(4) name##_buffer_##inst[CONFIG_ETH_ADIN2111_BUFFER_SIZE]; \ + ADIN2111_DEF_BUF(name##_buffer_##inst, CONFIG_ETH_ADIN2111_BUFFER_SIZE); \ + COND_CODE_1(DT_INST_PROP(inst, spi_oa), \ + ( \ + ADIN2111_DEF_BUF(name##_oa_tx_buf_##inst, ADIN2111_OA_BUF_SZ); \ + ADIN2111_DEF_BUF(name##_oa_rx_buf_##inst, ADIN2111_OA_BUF_SZ); \ + ), ()) \ static const struct adin2111_config name##_config_##inst = { \ .id = dev_id, \ .spi = SPI_DT_SPEC_INST_GET(inst, ADIN2111_SPI_OPERATION, 0), \ @@ -1554,6 +1561,10 @@ static const struct ethernet_api adin2111_port_api = { .oa = DT_INST_PROP(inst, spi_oa), \ .oa_prot = DT_INST_PROP(inst, spi_oa_protection), \ .oa_cps = 64, \ + .oa_tx_buf = COND_CODE_1(DT_INST_PROP(inst, spi_oa), \ + (name##_oa_tx_buf_##inst), (NULL)), \ + .oa_rx_buf = COND_CODE_1(DT_INST_PROP(inst, spi_oa), \ + (name##_oa_rx_buf_##inst), (NULL)), \ }; \ /* adin */ \ DEVICE_DT_DEFINE(DT_DRV_INST(inst), adin2111_init, NULL, \ diff --git a/drivers/ethernet/eth_adin2111_priv.h b/drivers/ethernet/eth_adin2111_priv.h index 14219ad1280..bb104d5efa1 100644 --- a/drivers/ethernet/eth_adin2111_priv.h +++ b/drivers/ethernet/eth_adin2111_priv.h @@ -229,22 +229,21 @@ struct adin2111_config { }; struct adin2111_data { - /* Port 0: PHY 1, Port 1: PHY 2 */ - const struct device *port[2]; - struct gpio_callback gpio_int_callback; - struct k_sem offload_sem; struct k_mutex lock; + struct k_sem offload_sem; uint32_t imask0; uint32_t imask1; - uint16_t ifaces_left_to_init; uint8_t *buf; + /* Port 0: PHY 1, Port 1: PHY 2 */ + const struct device *port[2]; + uint8_t *oa_tx_buf; + uint8_t *oa_rx_buf; + uint16_t ifaces_left_to_init; uint16_t scur; + struct gpio_callback gpio_int_callback; bool oa; bool oa_prot; uint8_t oa_cps; - uint8_t oa_tx_buf[ADIN2111_OA_BUF_SZ]; - uint8_t oa_rx_buf[ADIN2111_OA_BUF_SZ]; - K_KERNEL_STACK_MEMBER(rx_thread_stack, CONFIG_ETH_ADIN2111_IRQ_THREAD_STACK_SIZE); struct k_thread rx_thread; };