drivers/net/ethernet/marvell/octeontx2/af/rvu_cpt.c
Source file repositories/reference/linux-study-clean/drivers/net/ethernet/marvell/octeontx2/af/rvu_cpt.c
File Facts
- System
- Linux kernel
- Corpus path
drivers/net/ethernet/marvell/octeontx2/af/rvu_cpt.c- Extension
.c- Size
- 35639 bytes
- Lines
- 1320
- Domain
- Driver Families
- Bucket
- drivers/net
- Inferred role
- Driver Families: implementation source
- Status
- source implementation candidate
Why This File Exists
Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.
- Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.
- Uses kernel synchronization; read lock ordering, sleepability, and interrupt context assumptions before translating.
- Touches IRQ or DMA behavior; this matters for the representative real-device path.
- Allocates kernel memory; connect allocation flags and lifetime to context constraints.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
linux/bitfield.hlinux/pci.hrvu_struct.hrvu_reg.hmbox.hrvu.h
Detected Declarations
function cpt_max_engines_getfunction cpt_10k_flt_nvecs_getfunction cpt_af_flt_intr_handlerfunction rvu_cpt_af_flt0_intr_handlerfunction rvu_cpt_af_flt1_intr_handlerfunction rvu_cpt_af_flt2_intr_handlerfunction rvu_cpt_af_rvu_intr_handlerfunction rvu_cpt_af_ras_intr_handlerfunction rvu_cpt_do_register_interruptfunction cpt_10k_unregister_interruptsfunction cpt_unregister_interruptsfunction rvu_cpt_unregister_interruptsfunction cpt_10k_register_interruptsfunction cpt_register_interruptsfunction rvu_cpt_register_interruptsfunction get_cpt_pf_numfunction is_cpt_pffunction is_cpt_vffunction validate_and_get_cpt_blkaddrfunction rvu_mbox_handler_cpt_lf_allocfunction cpt_lf_freefunction rvu_mbox_handler_cpt_lf_freefunction cpt_inline_ipsec_cfg_inboundfunction cpt_inline_ipsec_cfg_outboundfunction rvu_mbox_handler_cpt_inline_ipsec_cfgfunction validate_and_update_reg_offsetfunction rvu_mbox_handler_cpt_rd_wr_registerfunction get_ctx_pcfunction get_eng_stsfunction rvu_mbox_handler_cpt_stsfunction cpt_rxc_time_cfgfunction rvu_mbox_handler_cpt_rxc_time_cfgfunction rvu_mbox_handler_cpt_ctx_cache_syncfunction rvu_mbox_handler_cpt_lf_resetfunction rvu_mbox_handler_cpt_flt_eng_infofunction cpt_rxc_teardownfunction cpt_lf_disable_iqueuefunction rvu_cpt_lf_teardownfunction cpt_inline_inb_lf_cmd_sendfunction rvu_cpt_ctx_flushfunction rvu_cpt_init
Annotated Snippet
switch (vec) {
case 0:
eng = i;
break;
case 1:
eng = i + 64;
break;
case 2:
eng = i + 128;
break;
}
grp = rvu_read64(rvu, blkaddr, CPT_AF_EXEX_CTL2(eng)) & 0xFF;
/* Disable and enable the engine which triggers fault */
rvu_write64(rvu, blkaddr, CPT_AF_EXEX_CTL2(eng), 0x0);
val = rvu_read64(rvu, blkaddr, CPT_AF_EXEX_CTL(eng));
rvu_write64(rvu, blkaddr, CPT_AF_EXEX_CTL(eng), val & ~1ULL);
rvu_write64(rvu, blkaddr, CPT_AF_EXEX_CTL2(eng), grp);
rvu_write64(rvu, blkaddr, CPT_AF_EXEX_CTL(eng), val | 1ULL);
spin_lock(&rvu->cpt_intr_lock);
block->cpt_flt_eng_map[vec] |= BIT_ULL(i);
val = rvu_read64(rvu, blkaddr, CPT_AF_EXEX_STS(eng));
val = val & 0x3;
if (val == 0x1 || val == 0x2)
block->cpt_rcvrd_eng_map[vec] |= BIT_ULL(i);
spin_unlock(&rvu->cpt_intr_lock);
}
rvu_write64(rvu, blkaddr, CPT_AF_FLTX_INT(vec), reg);
return IRQ_HANDLED;
}
static irqreturn_t rvu_cpt_af_flt0_intr_handler(int irq, void *ptr)
{
return cpt_af_flt_intr_handler(CPT_AF_INT_VEC_FLT0, ptr);
}
static irqreturn_t rvu_cpt_af_flt1_intr_handler(int irq, void *ptr)
{
return cpt_af_flt_intr_handler(CPT_AF_INT_VEC_FLT1, ptr);
}
static irqreturn_t rvu_cpt_af_flt2_intr_handler(int irq, void *ptr)
{
return cpt_af_flt_intr_handler(CPT_10K_AF_INT_VEC_FLT2, ptr);
}
static irqreturn_t rvu_cpt_af_rvu_intr_handler(int irq, void *ptr)
{
struct rvu_block *block = ptr;
struct rvu *rvu = block->rvu;
int blkaddr = block->addr;
u64 reg;
reg = rvu_read64(rvu, blkaddr, CPT_AF_RVU_INT);
dev_err_ratelimited(rvu->dev, "Received CPTAF RVU irq : 0x%llx", reg);
rvu_write64(rvu, blkaddr, CPT_AF_RVU_INT, reg);
return IRQ_HANDLED;
}
static irqreturn_t rvu_cpt_af_ras_intr_handler(int irq, void *ptr)
{
struct rvu_block *block = ptr;
struct rvu *rvu = block->rvu;
int blkaddr = block->addr;
u64 reg;
reg = rvu_read64(rvu, blkaddr, CPT_AF_RAS_INT);
dev_err_ratelimited(rvu->dev, "Received CPTAF RAS irq : 0x%llx", reg);
rvu_write64(rvu, blkaddr, CPT_AF_RAS_INT, reg);
return IRQ_HANDLED;
}
static int rvu_cpt_do_register_interrupt(struct rvu_block *block, int irq_offs,
irq_handler_t handler,
const char *name)
{
struct rvu *rvu = block->rvu;
int ret;
ret = request_irq(pci_irq_vector(rvu->pdev, irq_offs), handler, 0,
name, block);
if (ret) {
dev_err(rvu->dev, "RVUAF: %s irq registration failed", name);
return ret;
}
Annotation
- Immediate include surface: `linux/bitfield.h`, `linux/pci.h`, `rvu_struct.h`, `rvu_reg.h`, `mbox.h`, `rvu.h`.
- Detected declarations: `function cpt_max_engines_get`, `function cpt_10k_flt_nvecs_get`, `function cpt_af_flt_intr_handler`, `function rvu_cpt_af_flt0_intr_handler`, `function rvu_cpt_af_flt1_intr_handler`, `function rvu_cpt_af_flt2_intr_handler`, `function rvu_cpt_af_rvu_intr_handler`, `function rvu_cpt_af_ras_intr_handler`, `function rvu_cpt_do_register_interrupt`, `function cpt_10k_unregister_interrupts`.
- Atlas domain: Driver Families / drivers/net.
- Implementation status: source implementation candidate.
- Synchronization appears in or near this file; preserve lock ordering, sleepability, and interrupt-context constraints.
- IRQ or DMA behavior appears here, which is relevant to the selected PCIe/NVMe device path.
Implementation Notes
- This generated page is the file-by-file coverage layer; curated subsystem chapters should link here when they synthesize a multi-file control flow.
- Core OS pages should be promoted from atlas-only to deep-reviewed when they explain data structures, invariants, locking, lifecycle, and C implementation snippets.
- Driver-family pages are intentionally pattern-oriented unless they are part of the selected PCIe/NVMe representative device path.