ra8-firmware 0.1.0
Bare-metal firmware for the Renesas RA8 family (RA8D2 / RA8P1)
Loading...
Searching...
No Matches
ra8_board_ek_ra8d2_ethernet.c
Go to the documentation of this file.
1
28
29#include <stddef.h>
30#include <stdint.h>
31
32#include "ra8_attributes.h"
33#include "ra8_board_ek_ra8d2.h"
35#include "ra8_cgc.h"
36#include "ra8_elc_regs.h"
37#include "ra8_err.h"
38#include "ra8_eth.h"
39#include "ra8_eth_coma.h"
40#include "ra8_etha.h"
41#include "ra8_etha_regs.h"
42#include "ra8_gpio_constants.h"
43#include "ra8_mstp.h"
44#include "ra8_mstp_regs.h"
45#include "ra8_port_constants.h"
46#include "ra8_port_utils.h"
47#include "ra8_rmac.h"
48#include "ra8_rmac_regs.h"
49
50/* =============================================================================
51 * 12. On-board RGMII Ethernet PHY (UM Table 26 + 27, page 33-34)
52 * =============================================================================
53 */
54
64static const struct {
66 const char* owner;
67} s_eth_routes[] = {
68 {k_ra8_board_eth_pin_mdint, "ra8_board.eth.mdint"},
69 {k_ra8_board_eth_pin_mdc, "ra8_board.eth.mdc"},
70 {k_ra8_board_eth_pin_mdio, "ra8_board.eth.mdio"},
71 {k_ra8_board_eth_pin_txd0, "ra8_board.eth.txd0"},
72 {k_ra8_board_eth_pin_txd1, "ra8_board.eth.txd1"},
73 {k_ra8_board_eth_pin_txd2, "ra8_board.eth.txd2"},
74 {k_ra8_board_eth_pin_txd3, "ra8_board.eth.txd3"},
75 {k_ra8_board_eth_pin_tx_ctl, "ra8_board.eth.tx_ctl"},
76 {k_ra8_board_eth_pin_tx_clk, "ra8_board.eth.tx_clk"},
77 {k_ra8_board_eth_pin_rxd0, "ra8_board.eth.rxd0"},
78 {k_ra8_board_eth_pin_rxd1, "ra8_board.eth.rxd1"},
79 {k_ra8_board_eth_pin_rxd2, "ra8_board.eth.rxd2"},
80 {k_ra8_board_eth_pin_rxd3, "ra8_board.eth.rxd3"},
81 {k_ra8_board_eth_pin_rx_ctl, "ra8_board.eth.rx_ctl"},
82 {k_ra8_board_eth_pin_rx_clk, "ra8_board.eth.rx_clk"},
83 {k_ra8_board_eth_pin_rstn, "ra8_board.eth.rstn"},
84};
85
107
131{
134 if (err != k_ra8_ok) {
135 return err;
136 }
137 for (volatile uint32_t i = 0U; i < (uint32_t)k_ra8_board_eth_phy_rst_low_iters; ++i) {
138 __asm__ volatile("nop");
139 }
140 err = ra8_gpio_write(rstn_pin, k_ra8_level_high);
141 if (err != k_ra8_ok) {
142 /* ra8_gpio_write on a valid in-range mapped port/pin always returns k_ra8_ok off-target. */
143 return err; /* GCOVR_EXCL_LINE -- output_init already accepted this fixed mapped P708 pin */
144 }
145 for (volatile uint32_t i = 0U; i < (uint32_t)k_ra8_board_eth_phy_rst_post_iters; ++i) {
146 __asm__ volatile("nop");
147 }
148 return k_ra8_ok;
149}
150
190{
192 for (uint32_t i = 0U; i < sizeof(s_eth_routes) / sizeof(s_eth_routes[0]); ++i) {
193 if ((ra8_port_pin_t)s_eth_routes[i].pin == rstn_pin) {
194 continue;
195 }
199 if (err != k_ra8_ok) {
200 return err;
201 }
202 }
203
204 /* RGMII transmit pins need DSCR = 01b middle drive strength. */
205 /* HUM Ch 20.2.6 "PmnPFS" p 845 */
206 static const uint16_t k_eth_tx_pins[] = {
207 (uint16_t)k_ra8_board_eth_pin_txd0,
208 (uint16_t)k_ra8_board_eth_pin_txd1,
209 (uint16_t)k_ra8_board_eth_pin_txd2,
210 (uint16_t)k_ra8_board_eth_pin_txd3,
213 };
214 for (uint32_t i = 0U; i < sizeof(k_eth_tx_pins) / sizeof(k_eth_tx_pins[0]); ++i) {
215 const ra8_err_t err =
217 if (err != k_ra8_ok) {
218 /* ra8_pfs_set_drive_strength on valid mapped tx pins always returns k_ra8_ok off-target. */
219 return err; /* GCOVR_EXCL_LINE -- the fixed TX-pin table contains only mapped RA8D2 pins */
220 }
221 }
222 return k_ra8_ok;
223}
224
235typedef enum : uint32_t {
238
266{
268 if (err != k_ra8_ok) {
269 return err;
270 }
271 err = ra8_cgc_eswclk_hz(out_eswclk_hz);
272 if (err != k_ra8_ok) {
273 /* ra8_cgc_eswclk_hz only fails on nullptr; out_eswclk_hz is always a valid pointer here. */
274 return err; /* GCOVR_EXCL_LINE -- nonnull out_eswclk_hz satisfies eswclk_hz's only guard */
275 }
277 if (err != k_ra8_ok) {
278 return err;
279 }
280 /* Chip-generic COMA bring-up (RRC pulse + RCEC clock fan-out + CABPIRM
281 * buffer-pool init with BPR poll) now lives in the ETH HAL. */
282 return ra8_eth_coma_bringup();
283}
284
308{
309 const ra8_etha_config_t etha_cfg = {
310 .initial_mode = k_ra8_etha_opc_reset,
311 .eaeie0_mask = 0U,
312 .eaeie1_mask = 0U,
313 .eaeie2_mask = 0U,
314 };
316 if (err != k_ra8_ok) {
317 return err;
318 }
319 static const ra8_etha_opc_t k_chain[] = {
322 };
323 for (uint8_t step = 0U; step < (uint8_t)(sizeof(k_chain) / sizeof(k_chain[0])); ++step) {
325 if (err != k_ra8_ok) {
326 return err;
327 }
328 for (volatile uint32_t i = 0U; i < (uint32_t)k_ra8_board_eth_etha_step_iters; ++i) {
329 __asm__ volatile("nop");
330 }
331 }
332 return k_ra8_ok;
333}
334
356{
357 ra8_err_t err =
359 if (err != k_ra8_ok) {
360 return err;
361 }
362 for (volatile uint32_t i = 0U; i < (uint32_t)k_ra8_board_eth_etha_step_iters; ++i) {
363 __asm__ volatile("nop");
364 }
365 return k_ra8_ok;
366}
367
390{
391 /* HUM Ch 33.4 "MRAFC : MAC Reception Address Filter Configuration
392 * Register" p 1717: each frame class has an ENABLE bit (UCENE/BCENE
393 * /MCENE in the [10:0] half + matching UCENP/BCENP/MCENP in the
394 * [26:16] half) AND a separate ACCEPT bit (BCACE bit 6, MCACE bit 5)
395 * that controls whether the MAC actually forwards the matched frame
396 * to the descriptor ring. Without BCACE the chip latches the ARP
397 * broadcast in the perfect-match comparator and then drops it before
398 * the GWCA agent ever sees it, so the host's ARP responder never
399 * sees a "who-has 192.168.1.42" request and never replies. FSP
400 * r_rmac.c::rmac_configure_reception_filter ORs both bits into the
401 * canonical promiscuous mask for the same reason. */
402 /* HUM Table 29.11: for an external RGMII link the RMAC's internal
403 * xMII (MPIC.PIS) is MII for 10/100 Mbps and GMII for 1 Gbps -- the
404 * ESWM media mux (MIICR1.MIISEL = 01b) does the RGMII conversion.
405 * Default to MII (10/100 Mbps) at init so the on-chip RGMII RX
406 * sample timing matches the most common PHY auto-neg outcome on
407 * this board. Issue #1 bench: starting in GMII (1 Gbps) silently
408 * dropped every RX frame when the PHY negotiated to 100 Mbps with
409 * the Pi USB-Ethernet adapter, and the link-up-gated resync inside
410 * ra8_eth_open never fired because chip-side MDIO reads of BMSR
411 * return 0x0000 (the PHY's BMSR.link bit is invisible until skew
412 * + clock are correct). Starting in MII makes RX work for any
413 * 10/100 link the PHY auto-negotiates; for 1 Gbps links the
414 * resync inside ra8_eth_link_status will promote PIS to GMII once
415 * MDIO becomes usable. */
416 const ra8_rmac_config_t rmac_cfg = {
419 .err_irq_enable = 0U,
420 .mon0_irq_enable = 0U,
421 .mon1_irq_enable = 0U,
422 .mon2_irq_enable = 0U,
423 .phy_interface = k_ra8_rmac_pis_mii,
424 .link_speed = k_ra8_rmac_lsc_100mbit,
425 .duplex = k_ra8_rmac_duplex_full,
426 .eswclk_hz = eswclk_hz,
427 .mdc_hz = (uint32_t)k_ra8_rmac_mdc_default_hz,
428 };
430}
431
446typedef enum : uint16_t {
457 /* GBCR = 0: 1000BASE-T is not advertised, so the link settles at
458 * 100M full-duplex where it runs at 0 % loss. At 1 Gbps the RGMII
459 * TXC is 125 MHz DDR and the clock-to-data window shrinks to ~1 ns;
460 * bench testing shows 100 % TX loss at gigabit even with the TX
461 * pins at high drive (DSCR = 11b). The remaining skew lives in the
462 * PEF7071's pinstrapped RGMII delay (no EEPROM is fitted, so the
463 * PHY's MIICTRL skew fields are read-only) and the fixed MAC-side
464 * MIICR1.TXCIDE delay -- neither is tunable in firmware. Closing
465 * the gigabit eye needs a scope on the TX pins or an EEPROM to
466 * override the PHY straps; until then the link stays at 100M. */
470
490{
495 if (err != k_ra8_ok) {
496 return err;
497 }
498 for (uint32_t i = 0U; i < (uint32_t)k_ra8_board_eth_phy_reset_spin; ++i) {
499 uint16_t bmcr = 0U;
503 &bmcr);
504 if (err != k_ra8_ok) {
505 return err;
506 }
507 if ((bmcr & (uint16_t)k_ra8_board_eth_phy_bmcr_reset) == 0U) {
508 return k_ra8_ok;
509 }
510 }
512}
513
534{
535 uint16_t miictrl = 0U;
539 &miictrl);
540 if (read_err != k_ra8_ok) {
541 return read_err;
542 }
543 miictrl = (uint16_t)((miictrl & (uint16_t)~k_ra8_board_eth_phy_rxskew_mask) |
548 miictrl);
549}
550
594
614{
616 if (err != k_ra8_ok) {
617 return err;
618 }
620 if (err != k_ra8_ok) {
621 return err;
622 }
624}
625
627{
628 /* Step 0: hardware-reset the on-board PEF7071 PHY before anything
629 * else touches MDIO. */
631 if (err != k_ra8_ok) {
632 return err;
633 }
634 /* Step 1: route every remaining Ethernet pin to its RGMII alt mux. */
636 if (err != k_ra8_ok) {
637 return err;
638 }
639 /* Step 2: bring up ESWCLK + ESWPHYCLK, release PDCTRESWM, lift the
640 * ETHPHYCLK / ESWM MSTP gates, and pulse the COMA agent out of
641 * reset. After this the per-port RMAC / ETHA register windows
642 * answer reads and accept writes. */
643 uint32_t eswclk_hz = 0U;
644 err = priv_ra8_board_eth_eswm_bring_up(&eswclk_hz);
645 if (err != k_ra8_ok) {
646 return err;
647 }
648 /* Step 3: ETHA1 RESET -> DISABLE -> CONFIG so RMAC.MPIC is writable. */
650 if (err != k_ra8_ok) {
651 return err;
652 }
653 /* Step 4: select RGMII on the media-interface mux + release the
654 * per-port reset, via the chip-generic ETH HAL primitive. The EK-RA8D2
655 * wires its PEF7071 / GPY111 PHY to RMAC port 1 -- the canonical FSP
656 * example ``ethernet_ek_ra8d2_ep`` configures every Ethernet pin as
657 * ``eswm_rgmii1`` and instantiates r_rmac on Channel 1; RMAC0 / ETHA0
658 * is unused on this board. ra8_eth_rgmii_select programs MIICR1 =
659 * TXCIDE | RGMII and sets MIIRR.RGRST1 = 1 (HUM 29.2.1.2: an enable,
660 * not an active-high reset). Without the RGRST1 enable, TXC is never
661 * generated, the RMAC RX state machine is unclocked, and every RMAC RX
662 * counter stays at 0 (bench-confirmed on EK-RA8D2). */
664 if (err != k_ra8_ok) {
665 /* ra8_eth_rgmii_select only fails on an out-of-range port; the board
666 * RMAC port constant is always valid. */
667 return err; /* GCOVR_EXCL_LINE -- fixed board port 1 satisfies rgmii_select's 0..1 guard */
668 }
669 /* Step 5: RMAC1 bring-up. Programs MPIC (PSMCS / PIS / LSC / PIPP),
670 * MAC address filter, and IRQ block. */
671 err = internal_eth_rmac_program(eswclk_hz);
672 if (err != k_ra8_ok) {
673 return err;
674 }
675 /* Step 6: promote ETHA1 to OPERATION so MDIO can drive MDC. */
677 if (err != k_ra8_ok) {
678 return err;
679 }
680 /* Step 7: GPY111 PHY chip-init -- soft-reset, program the RGMII
681 * receive-timing skew (1.0 ns), then restart auto-negotiation so
682 * the link re-converges with the skew applied. Mirrors FSP
683 * R_RMAC_PHY_ChipInit + R_RMAC_PHY_StartAutoNegotiate. */
685}
Annotation-attribute framework macros for ra8-firmware.
#define RA8_PRIV
Module-private helper: shared across TUs but only inside one library.
#define RA8_INTERNAL
Marker that a function is intended to be static (file-local).
Board-support layer for the Renesas EK-RA8D2 v1 evaluation kit.
ra8_board_eth_etha_delay_t
Busy-wait iteration count for the ETHA mode-walk settle delay.
@ k_ra8_board_eth_etha_step_iters
~50 us settle between ETHA mode writes.
static const struct @241054046372047256104030122264354202376012142234 s_eth_routes[]
Pin table walked by ra8_board_ethernet_init.
const char * owner
Owner.
ra8_err_t ra8_board_ethernet_init(void)
Bring up the on-board RGMII Ethernet PHY and RMAC1/ETHA1.
ra8_board_eth_phy_reg_t
GPY111 PHY register addresses + bit constants for chip-init.
@ k_ra8_board_eth_phy_bmcr_an_en
BMCR.AUTONEG_ENABLE.
@ k_ra8_board_eth_phy_reset_spin
BMCR.RESET self-clear cap.
@ k_ra8_board_eth_phy_bmcr_an_rst
BMCR.AUTONEG_RESTART.
@ k_ra8_board_eth_phy_rxskew_mask
MIICTRL RXSKEW field [14:12].
@ k_ra8_board_eth_phy_reg_miictrl
GPY111 MIICTRL vendor reg.
@ k_ra8_board_eth_phy_bmcr_reset
BMCR.RESET (self-clearing).
@ k_ra8_board_eth_phy_reg_anar
Auto-neg advertisement.
@ k_ra8_board_eth_phy_reg_gbcr
1000BASE-T control.
@ k_ra8_board_eth_phy_gbcr_value
1000BASE-T NOT advertised (see above).
@ k_ra8_board_eth_phy_rxskew_1p0ns
RXSKEW = 0b010 -> 1.0 ns.
@ k_ra8_board_eth_phy_reg_bmcr
BMCR (basic control).
@ k_ra8_board_eth_phy_anar_value
Advertise 100F/100H/10F/10H.
static ra8_err_t internal_eth_etha_to_operation(void)
Promote ETHA1 from CONFIG to OPERATION (post-MPIC programming).
static ra8_err_t internal_eth_phy_start_autoneg(void)
Program the auto-neg advertisement and restart negotiation.
static ra8_err_t internal_eth_phy_chip_init(void)
Full GPY111 PHY chip-init: soft-reset, RX skew, restart AN.
static ra8_err_t internal_eth_route_alt_pins(void)
Route the 15 non-RSTN ETHERC pins to their ETHERC alternate.
ra8_err_t priv_ra8_board_eth_etha_to_config(void)
Walk ETHA1 from RESET through DISABLE to CONFIG.
ra8_board_eth_phy_reset_cycles_t
Cycle-counted PHY reset timings (Cortex-M85 @ ~1 GHz).
@ k_ra8_board_eth_phy_rst_post_iters
>= 60 ms HIGH.
@ k_ra8_board_eth_phy_rst_low_iters
>= 15 ms LOW.
static ra8_err_t internal_eth_rmac_program(uint32_t eswclk_hz)
Programme RMAC1 with the RGMII / 1Gb full-duplex profile.
static ra8_err_t internal_eth_phy_set_rgmii_skew(void)
Program the GPY111 RGMII receive-timing skew to 1.0 ns.
static ra8_err_t internal_eth_phy_hw_reset(void)
Hardware-reset the on-board PEF7071 PHY via GPIO.
ra8_board_eth_pin_t pin
Pin.
ra8_err_t priv_ra8_board_eth_eswm_bring_up(uint32_t *out_eswclk_hz)
Bring the ESWM subsystem live: clocks + power + MSTP + COMA reset.
static ra8_err_t internal_eth_phy_soft_reset(void)
Soft-reset the GPY111 PHY and wait for the reset to clear.
Cross-translation-unit seam for the EK-RA8D2 BSP implementation.
ra8_board_eth_pin_t
Pin assignments for the on-board MaxLinear PEF7071 (GPY111) PHY.
@ k_ra8_board_eth_pin_rxd0
RXD0, P906 (E36).
@ k_ra8_board_eth_pin_mdio
MDIO, P414.
@ k_ra8_board_eth_pin_tx_clk
TX_CLK, P309 (E23).
@ k_ra8_board_eth_pin_rxd2
RXD2, P908 (E33).
@ k_ra8_board_eth_pin_txd1
TXD1, P306 (E20).
@ k_ra8_board_eth_pin_txd2
TXD2, P305 (E19).
@ k_ra8_board_eth_pin_txd0
TXD0, P307 (E21).
@ k_ra8_board_eth_pin_mdint
MDINT, P107.
@ k_ra8_board_eth_pin_rxd3
RXD3, P909 (E24).
@ k_ra8_board_eth_pin_rstn
RSTN, P708.
@ k_ra8_board_eth_pin_mdc
MDC, P415.
@ k_ra8_board_eth_pin_rx_clk
RX_CLK, P905 (E37).
@ k_ra8_board_eth_pin_rx_ctl
RX_CTL, P206 (E38).
@ k_ra8_board_eth_pin_txd3
TXD3, P304 (E18).
@ k_ra8_board_eth_pin_rxd1
RXD1, P907 (E34).
@ k_ra8_board_eth_pin_tx_ctl
TX_CTL, P310 (E22).
@ k_ra8_board_eth_etha_port
ETHA1 (k_ra8_etha_port_1).
@ k_ra8_board_eth_rmac_port
RMAC1 (k_ra8_rmac_port_1).
@ k_ra8_board_eth_phy_addr
MDIO addr of the on-board PHY (HW strap on PEF7071, UM Table 27 p 34).
High-level Clock Generation Circuit driver.
ra8_err_t ra8_cgc_eswclk_hz(uint32_t *out_hz)
Query the current ESWCLK (Ethernet Switch clock) frequency.
ra8_err_t ra8_cgc_eswclk_init(void)
Bring up the Ethernet Switch Module (ESWM / RMAC) clock.
Event Link Controller (ELC) register layout for the Renesas RA8D2.
Error Code Definitions for ra8-firmware.
@ k_ra8_err_hw_timeout
Hardware timed out waiting for a flag or handshake.
Definition ra8_err.h:304
@ k_ra8_ok
Success – operation completed with all postconditions satisfied.
Definition ra8_err.h:119
ra8_err_codes_t ra8_err_t
Canonical error-return type used by every ra8-firmware API.
Definition ra8_err.h:546
Ethernet Switch Module (ESWM) + frame TX/RX driver.
ra8_eth_mii_port_t
ESWM media-interface port selector (m = 0, 1).
Definition ra8_eth.h:137
ra8_err_t ra8_eth_rgmii_select(ra8_eth_mii_port_t port)
Select RGMII on a port's ESWM media-interface mux and enable it.
Ethernet Common Agent (COMA) driver.
ra8_err_t ra8_eth_coma_bringup(void)
Bring the COMA switch out of reset, init the buffer pool, and fan every per-agent clock out.
Per-port Ethernet Agent (ETHA) driver – HUM Ch 32 (p 1627-1702).
ra8_err_t ra8_etha_set_mode(ra8_etha_port_t port, ra8_etha_opc_t mode)
Issue an explicit EAMC mode-change command.
Definition ra8_etha.c:494
ra8_err_t ra8_etha_init(ra8_etha_port_t port, const ra8_etha_config_t *cfg)
Initialise an ETHA port (MSTP gate + reset registers + initial mode).
Definition ra8_etha.c:167
Ethernet Agent (ETHA) per-port register layout for the RA8D2.
ra8_etha_port_t
ETHA port index (m = 0, 1).
ra8_etha_opc_t
ETHA EAMC.OPC[1:0] operating mode commands.
@ k_ra8_etha_opc_operation
Enter OPERATION mode.
@ k_ra8_etha_opc_config
Enter CONFIG mode.
@ k_ra8_etha_opc_reset
Enter RESET mode.
@ k_ra8_etha_opc_disable
Enter DISABLE mode.
PSEL codes for peripheral pin routing on the RA8D2.
@ k_ra8_psel_ether_rgmii
11000b: ESWM (RGMII).
Ref-counted Module Stop Control wrapper for the RA8D2.
ra8_err_t ra8_mstp_enable(ra8_mstp_t id)
Reference-counted "ungate this peripheral" request.
Definition ra8_mstp.c:343
Module Stop Control (MSTP) register layout for the Renesas RA8D2.
@ k_ra8_mstp_eswm
MSTPC30 ESWM.
@ k_ra8_pfs_dscr_middle
01b: Middle drive.
Typed Port / Pin Constants for the RA8D2 IOPORT Module.
ra8_port_pin_t
Packed (port << 8) | pin pin identifier.
@ k_ra8_level_high
Drive or read 1.
@ k_ra8_level_low
Drive or read 0.
High-level GPIO helpers on top of the PORT + PFS register layer.
ra8_err_t ra8_pfs_set_drive_strength(ra8_port_pin_t pin, ra8_pfs_dscr_t dscr)
Set the output drive strength (PmnPFS.DSCR) of an already-routed pin.
Definition gpio.c:287
ra8_err_t ra8_gpio_output_init(ra8_port_pin_t pin, ra8_level_t init_level)
Configure a pin as a digital output and drive it to an initial level.
Definition gpio.c:88
ra8_err_t ra8_gpio_write(ra8_port_pin_t pin, ra8_level_t level)
Drive a previously-configured output to the given level.
Definition gpio.c:154
ra8_err_t ra8_pfs_route_peripheral(ra8_port_pin_t pin, ra8_psel_t psel, const char *owner)
Route a pin to a non-IRQ peripheral function via PFS.PSEL.
Definition gpio.c:238
Per-port Ethernet MAC (RMAC) driver – HUM Ch 33.
ra8_err_t ra8_rmac_mdio_c22_write(ra8_rmac_port_t port, uint8_t phy_addr, uint8_t reg_addr, uint16_t value)
Trigger an MDIO Clause-22 register write on the off-chip PHY.
Definition ra8_rmac.c:842
@ k_ra8_rmac_mdc_default_hz
1 MHz MDC – well below the 2.5 MHz ceiling.
Definition ra8_rmac.h:106
ra8_err_t ra8_rmac_mdio_c22_read(ra8_rmac_port_t port, uint8_t phy_addr, uint8_t reg_addr, uint16_t *out_value)
Trigger an MDIO Clause-22 register read on the off-chip PHY.
Definition ra8_rmac.c:811
ra8_err_t ra8_rmac_init(ra8_rmac_port_t port, const ra8_rmac_config_t *cfg)
Initialise an RMAC port (MSTP gate + reset regs + filter mode).
Definition ra8_rmac.c:481
Ethernet MAC (RMAC) per-port register layout for the RA8D2.
ra8_rmac_mrafc_t
MRAFC reception address filter mode bits (HUM Ch 33.4).
@ k_ra8_rmac_mrafc_broadcast
BCENE|BCENP.
@ k_ra8_rmac_mrafc_unicast_match
UCENE|UCENP.
@ k_ra8_rmac_mrafc_bc_accept
BCACE.
@ k_ra8_rmac_pis_mii
MII (000b) – internal xMII for 10/100 Mbps.
@ k_ra8_rmac_lsc_100mbit
100 Mbit/s.
ra8_rmac_port_t
RMAC port index (m = 0, 1).
@ k_ra8_rmac_duplex_full
Full duplex.
Per-port ETHA configuration knobs.
Per-port RMAC configuration knobs.
Definition ra8_rmac.h:120