LCOV - code coverage report
Current view: top level - drivers/net/ark - ark_mpu.c (source / functions) Hit Total Coverage
Test: Code coverage Lines: 0 45 0.0 %
Date: 2025-03-01 20:23:48 Functions: 0 9 0.0 %
Legend: Lines: hit not hit | Branches: + taken - not taken # not executed Branches: 0 14 0.0 %

           Branch data     Line data    Source code
       1                 :            : /* SPDX-License-Identifier: BSD-3-Clause
       2                 :            :  * Copyright (c) 2015-2018 Atomic Rules LLC
       3                 :            :  */
       4                 :            : 
       5                 :            : #include <unistd.h>
       6                 :            : 
       7                 :            : #include "ark_logs.h"
       8                 :            : #include "ark_mpu.h"
       9                 :            : 
      10                 :            : uint16_t
      11                 :          0 : ark_api_num_queues(struct ark_mpu_t *mpu)
      12                 :            : {
      13                 :          0 :         return mpu->hw.num_queues;
      14                 :            : }
      15                 :            : 
      16                 :            : uint16_t
      17                 :          0 : ark_api_num_queues_per_port(struct ark_mpu_t *mpu, uint16_t ark_ports)
      18                 :            : {
      19                 :          0 :         return mpu->hw.num_queues / ark_ports;
      20                 :            : }
      21                 :            : 
      22                 :            : int
      23                 :          0 : ark_mpu_verify(struct ark_mpu_t *mpu, uint32_t obj_size)
      24                 :            : {
      25                 :            :         uint32_t version;
      26                 :            : 
      27                 :          0 :         version = mpu->id.vernum;
      28   [ #  #  #  # ]:          0 :         if (mpu->id.idnum != ARK_MPU_MODID ||
      29                 :          0 :             version != ARK_MPU_MODVER ||
      30         [ #  # ]:          0 :             mpu->hw.obj_size != obj_size) {
      31                 :          0 :                 ARK_PMD_LOG(ERR,
      32                 :            :                             "   MPU module not found as expected %08x"
      33                 :            :                             " \"%c%c%c%c %c%c%c%c\"\n",
      34                 :            :                             mpu->id.idnum,
      35                 :            :                             mpu->id.id[0], mpu->id.id[1],
      36                 :            :                             mpu->id.id[2], mpu->id.id[3],
      37                 :            :                             mpu->id.ver[0], mpu->id.ver[1],
      38                 :            :                             mpu->id.ver[2], mpu->id.ver[3]);
      39                 :          0 :                 ARK_PMD_LOG(ERR,
      40                 :            :                             "   MPU HW num_queues: %u hw_depth %u,"
      41                 :            :                             " obj_size: %u, obj_per_mrr: %u"
      42                 :            :                             " Expected size %u\n",
      43                 :            :                             mpu->hw.num_queues,
      44                 :            :                             mpu->hw.hw_depth,
      45                 :            :                             mpu->hw.obj_size,
      46                 :            :                             mpu->hw.obj_per_mrr,
      47                 :            :                             obj_size);
      48                 :          0 :                 return -1;
      49                 :            :         }
      50                 :            :         return 0;
      51                 :            : }
      52                 :            : 
      53                 :            : void
      54                 :          0 : ark_mpu_stop(struct ark_mpu_t *mpu)
      55                 :            : {
      56                 :          0 :         mpu->cfg.command = MPU_CMD_STOP;
      57                 :          0 : }
      58                 :            : 
      59                 :            : void
      60                 :          0 : ark_mpu_start(struct ark_mpu_t *mpu)
      61                 :            : {
      62                 :          0 :         mpu->cfg.command = MPU_CMD_RUN;
      63                 :          0 : }
      64                 :            : 
      65                 :            : int
      66                 :          0 : ark_mpu_reset(struct ark_mpu_t *mpu)
      67                 :            : {
      68                 :            :         int cnt = 0;
      69                 :            : 
      70                 :          0 :         mpu->cfg.command = MPU_CMD_RESET;
      71                 :            :         rte_wmb();
      72                 :            : 
      73         [ #  # ]:          0 :         while (mpu->cfg.command != MPU_CMD_IDLE) {
      74         [ #  # ]:          0 :                 if (cnt++ > 1000)
      75                 :            :                         break;
      76                 :          0 :                 usleep(10);
      77                 :            :         }
      78         [ #  # ]:          0 :         if (mpu->cfg.command != MPU_CMD_IDLE) {
      79                 :          0 :                 mpu->cfg.command = MPU_CMD_FORCE_RESET;
      80                 :          0 :                 usleep(10);
      81                 :            :         }
      82                 :          0 :         return mpu->cfg.command != MPU_CMD_IDLE;
      83                 :            : }
      84                 :            : 
      85                 :            : int
      86                 :          0 : ark_mpu_configure(struct ark_mpu_t *mpu, rte_iova_t ring, uint32_t ring_size,
      87                 :            :                   int is_tx)
      88                 :            : {
      89                 :          0 :         ark_mpu_reset(mpu);
      90                 :            : 
      91                 :            :         if (!rte_is_power_of_2(ring_size)) {
      92                 :          0 :                 ARK_PMD_LOG(ERR, "Invalid ring size for MPU %d\n",
      93                 :            :                             ring_size);
      94                 :          0 :                 return -1;
      95                 :            :         }
      96                 :            : 
      97                 :          0 :         mpu->cfg.ring_base = ring;
      98                 :          0 :         mpu->cfg.ring_size = ring_size;
      99                 :          0 :         mpu->cfg.ring_mask = ring_size - 1;
     100         [ #  # ]:          0 :         mpu->cfg.min_host_move = is_tx ? 1 : mpu->hw.obj_per_mrr;
     101                 :          0 :         mpu->cfg.min_hw_move = mpu->hw.obj_per_mrr;
     102                 :          0 :         mpu->cfg.sw_prod_index = 0;
     103                 :          0 :         mpu->cfg.hw_cons_index = 0;
     104                 :          0 :         return 0;
     105                 :            : }
     106                 :            : 
     107                 :            : void
     108                 :          0 : ark_mpu_dump(struct ark_mpu_t *mpu, const char *code, uint16_t qid)
     109                 :            : {
     110                 :            :         /* DUMP to see that we have started */
     111                 :          0 :         ARK_PMD_LOG(DEBUG, "MPU: %s Q: %3u sw_prod %u, hw_cons: %u\n",
     112                 :            :                       code, qid,
     113                 :            :                       mpu->cfg.sw_prod_index, mpu->cfg.hw_cons_index);
     114                 :          0 : }
     115                 :            : 
     116                 :            : void
     117                 :          0 : ark_mpu_dump_setup(struct ark_mpu_t *mpu, uint16_t q_id)
     118                 :            : {
     119                 :          0 :         ARK_PMD_LOG(DEBUG, "MPU Setup Q: %u"
     120                 :            :                       ARK_SU64X "\n",
     121                 :            :                       q_id,
     122                 :            :                       "ring_base", mpu->cfg.ring_base
     123                 :            :                       );
     124                 :          0 : }

Generated by: LCOV version 1.14