| #
1b8d005b |
| 25-Sep-2026 |
Daniel Zahka <daniel.zahka@gmail.com> |
eth: mpnic: add a netdevice and basic Tx handling
Register the network interface and let it transmit skbs.
The typical TWQ descriptor sequence for an skb is: 1 primary metadata, followed by 0 or mo
eth: mpnic: add a netdevice and basic Tx handling
Register the network interface and let it transmit skbs.
The typical TWQ descriptor sequence for an skb is: 1 primary metadata, followed by 0 or more non-last address + length (A/L) descriptors, terminated by an always present last A/L descriptor.
The device does not write a Tx completion unless it is requested in the primary metadata desc. The xmit path sets this bit when the stack does not report netdev_xmit_more(). This can create a problem if the last packet in a burst is dropped by the driver. To deal with that case, the driver latches the last metadata for which a completion was not requested, and uses this to request a completion and flush queued packets when one is dropped.
There is no link state yet, so carrier follows the administrative state.
Signed-off-by: Daniel Zahka <daniel.zahka@gmail.com> Link: https://patch.msgid.link/20260924-linux-mpnic-v2-6-4badc9b58b9e@gmail.com Signed-off-by: Paolo Abeni <pabeni@redhat.com>
show more ...
|
| #
3d4e4ad4 |
| 25-Sep-2026 |
Daniel Zahka <daniel.zahka@gmail.com> |
eth: mpnic: implement Tx queue allocation and cleanup
Queues come in triads of two work queues and one completion queue. The Tx triad only uses the first work queue for now, the second one will be u
eth: mpnic: implement Tx queue allocation and cleanup
Queues come in triads of two work queues and one completion queue. The Tx triad only uses the first work queue for now, the second one will be used for the XDP ring later.
Add the ring structures, the per NAPI vector allocation of triads, descriptor memory and interrupts, and the completion processing. The completion queue does not report one entry per packet, it reports a work queue head, so a single completion can release many packets.
Nothing enables the queues in hardware or submits anything to them yet, that comes with the next two changes.
Signed-off-by: Daniel Zahka <daniel.zahka@gmail.com> Link: https://patch.msgid.link/20260924-linux-mpnic-v2-4-4badc9b58b9e@gmail.com Signed-off-by: Paolo Abeni <pabeni@redhat.com>
show more ...
|
| #
2cf67a26 |
| 25-Sep-2026 |
Daniel Zahka <daniel.zahka@gmail.com> |
eth: mpnic: allocate MSI-X vectors
Request one vector for FW generated interrupts and then one vector per CPU to use for the completion queues. Nothing requests a handler yet, that comes with the NA
eth: mpnic: allocate MSI-X vectors
Request one vector for FW generated interrupts and then one vector per CPU to use for the completion queues. Nothing requests a handler yet, that comes with the NAPI vectors.
Signed-off-by: Daniel Zahka <daniel.zahka@gmail.com> Link: https://patch.msgid.link/20260924-linux-mpnic-v2-3-4badc9b58b9e@gmail.com Signed-off-by: Paolo Abeni <pabeni@redhat.com>
show more ...
|
| #
cda700bc |
| 25-Sep-2026 |
Mohsin Bashir <mohsin.bashr@gmail.com> |
eth: mpnic: add register init for the device
Perform one time register initialization during mpnic_probe(). These CSR settings are either static configs that only need to be set once, or pulses for
eth: mpnic: add register init for the device
Perform one time register initialization during mpnic_probe(). These CSR settings are either static configs that only need to be set once, or pulses for zeroizing on chip SRAMs, which also only need to be done once.
This initialization is idempotent and does not require any matching deinitialization in the remove path. We can unbind and re-bind the driver and perform the same initialization without problems.
Signed-off-by: Mohsin Bashir <mohsin.bashr@gmail.com> Signed-off-by: Daniel Zahka <daniel.zahka@gmail.com> Link: https://patch.msgid.link/20260924-linux-mpnic-v2-2-4badc9b58b9e@gmail.com Signed-off-by: Paolo Abeni <pabeni@redhat.com>
show more ...
|
| #
3251a689 |
| 25-Sep-2026 |
Daniel Zahka <daniel.zahka@gmail.com> |
eth: mpnic: add scaffolding for Meta Platforms NIC
MPNIC is the next network interface controller designed by Meta. Create a bare PCI driver for it. Subsequent changes will flesh it out.
Registers
eth: mpnic: add scaffolding for Meta Platforms NIC
MPNIC is the next network interface controller designed by Meta. Create a bare PCI driver for it. Subsequent changes will flesh it out.
Registers live in BAR0 and are addressed as an array of 32 bit words, which is why the CSR indices are a quarter of the byte offset. Most of the register file is only accessible as 64 bit, so that is the only accessor added here.
If a read returns all ones, a second read to an unused register with reset value 0 is performed to determine if the device is gone. If the device is gone, the mapped BAR0 pointer is cleared, so no further accesses reach the bus.
For now, if mpnic_mmio_err() clears mpd->uc_addr0, nothing will reassign it. The user will have to unbind and rebind the driver. Future series will reset uc_addr0 from pci error handlers.
In addition to being used as a 0 value reference CSR, MPNIC_BDQ_SPARE is also used to perform write flushes, because it can be read without producing side effects.
Signed-off-by: Daniel Zahka <daniel.zahka@gmail.com> Link: https://patch.msgid.link/20260924-linux-mpnic-v2-1-4badc9b58b9e@gmail.com Signed-off-by: Paolo Abeni <pabeni@redhat.com>
show more ...
|