Branch data Line data Source code
1 : : /* SPDX-License-Identifier: BSD-3-Clause 2 : : * Copyright(c) 2018 Netronome Systems, Inc. 3 : : * All rights reserved. 4 : : */ 5 : : 6 : : #include "nfp_logs.h" 7 : : #include "nfp_nsp.h" 8 : : 9 : : struct nsp_identify { 10 : : uint8_t version[40]; 11 : : uint8_t flags; 12 : : uint8_t br_primary; 13 : : uint8_t br_secondary; 14 : : uint8_t br_nsp; 15 : : uint16_t primary; 16 : : uint16_t secondary; 17 : : uint16_t nsp; 18 : : uint8_t reserved[6]; 19 : : uint64_t sensor_mask; 20 : : }; 21 : : 22 : : struct nfp_nsp_identify * 23 : 0 : nfp_nsp_identify(struct nfp_nsp *nsp) 24 : : { 25 : : int ret; 26 : : struct nsp_identify *ni; 27 : : struct nfp_nsp_identify *nspi = NULL; 28 : : 29 [ # # ]: 0 : if (nfp_nsp_get_abi_ver_minor(nsp) < 15) 30 : : return NULL; 31 : : 32 : 0 : ni = malloc(sizeof(*ni)); 33 [ # # ]: 0 : if (ni == NULL) 34 : : return NULL; 35 : : 36 : : memset(ni, 0, sizeof(*ni)); 37 : 0 : ret = nfp_nsp_read_identify(nsp, ni, sizeof(*ni)); 38 [ # # ]: 0 : if (ret < 0) { 39 : 0 : PMD_DRV_LOG(ERR, "reading bsp version failed %d", ret); 40 : 0 : goto exit_free; 41 : : } 42 : : 43 : 0 : nspi = malloc(sizeof(*nspi)); 44 [ # # ]: 0 : if (nspi == NULL) 45 : 0 : goto exit_free; 46 : : 47 : : memset(nspi, 0, sizeof(*nspi)); 48 : 0 : memcpy(nspi->version, ni->version, sizeof(nspi->version)); 49 : 0 : nspi->version[sizeof(nspi->version) - 1] = '\0'; 50 : 0 : nspi->flags = ni->flags; 51 : 0 : nspi->br_primary = ni->br_primary; 52 : 0 : nspi->br_secondary = ni->br_secondary; 53 : 0 : nspi->br_nsp = ni->br_nsp; 54 : 0 : nspi->primary = rte_le_to_cpu_16(ni->primary); 55 : 0 : nspi->secondary = rte_le_to_cpu_16(ni->secondary); 56 : 0 : nspi->nsp = rte_le_to_cpu_16(ni->nsp); 57 : 0 : nspi->sensor_mask = rte_le_to_cpu_64(ni->sensor_mask); 58 : : 59 : 0 : exit_free: 60 : 0 : free(ni); 61 : 0 : return nspi; 62 : : } 63 : : 64 : : struct nfp_sensors { 65 : : uint32_t chip_temp; 66 : : uint32_t assembly_power; 67 : : uint32_t assembly_12v_power; 68 : : uint32_t assembly_3v3_power; 69 : : }; 70 : : 71 : : int 72 : 0 : nfp_hwmon_read_sensor(struct nfp_cpp *cpp, 73 : : enum nfp_nsp_sensor_id id, 74 : : uint32_t *val) 75 : : { 76 : : int ret; 77 : : struct nfp_nsp *nsp; 78 : : struct nfp_sensors s; 79 : : 80 : 0 : nsp = nfp_nsp_open(cpp); 81 [ # # ]: 0 : if (nsp == NULL) 82 : : return -EIO; 83 : : 84 : 0 : ret = nfp_nsp_read_sensors(nsp, RTE_BIT32(id), &s, sizeof(s)); 85 : 0 : nfp_nsp_close(nsp); 86 : : 87 [ # # ]: 0 : if (ret < 0) 88 : : return ret; 89 : : 90 [ # # # # : 0 : switch (id) { # ] 91 : 0 : case NFP_SENSOR_CHIP_TEMPERATURE: 92 : 0 : *val = rte_le_to_cpu_32(s.chip_temp); 93 : 0 : break; 94 : 0 : case NFP_SENSOR_ASSEMBLY_POWER: 95 : 0 : *val = rte_le_to_cpu_32(s.assembly_power); 96 : 0 : break; 97 : 0 : case NFP_SENSOR_ASSEMBLY_12V_POWER: 98 : 0 : *val = rte_le_to_cpu_32(s.assembly_12v_power); 99 : 0 : break; 100 : 0 : case NFP_SENSOR_ASSEMBLY_3V3_POWER: 101 : 0 : *val = rte_le_to_cpu_32(s.assembly_3v3_power); 102 : 0 : break; 103 : : default: 104 : : return -EINVAL; 105 : : } 106 : : 107 : : return 0; 108 : : }