File Index
Files and directories
Sign in
FILE

nfp_nsp_cmds.c

File preview with syntax highlighting.

linux-6.19.14/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_nsp_cmds.c C
  1// SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
  2/* Copyright (C) 2017 Netronome Systems, Inc. */
  3
  4#include <linux/kernel.h>
  5#include <linux/slab.h>
  6
  7#include "nfp.h"
  8#include "nfp_nsp.h"
  9
 10struct nsp_identify {
 11	u8 version[40];
 12	u8 flags;
 13	u8 br_primary;
 14	u8 br_secondary;
 15	u8 br_nsp;
 16	__le16 primary;
 17	__le16 secondary;
 18	__le16 nsp;
 19	u8 reserved[6];
 20	__le64 sensor_mask;
 21};
 22
 23struct nfp_nsp_identify *__nfp_nsp_identify(struct nfp_nsp *nsp)
 24{
 25	struct nfp_nsp_identify *nspi = NULL;
 26	struct nsp_identify *ni;
 27	int ret;
 28
 29	if (nfp_nsp_get_abi_ver_minor(nsp) < 15)
 30		return NULL;
 31
 32	ni = kzalloc(sizeof(*ni), GFP_KERNEL);
 33	if (!ni)
 34		return NULL;
 35
 36	ret = nfp_nsp_read_identify(nsp, ni, sizeof(*ni));
 37	if (ret < 0) {
 38		nfp_err(nfp_nsp_cpp(nsp), "reading bsp version failed %d\n",
 39			ret);
 40		goto exit_free;
 41	}
 42
 43	nspi = kzalloc(sizeof(*nspi), GFP_KERNEL);
 44	if (!nspi)
 45		goto exit_free;
 46
 47	memcpy(nspi->version, ni->version, sizeof(nspi->version));
 48	nspi->version[sizeof(nspi->version) - 1] = '\0';
 49	nspi->flags = ni->flags;
 50	nspi->br_primary = ni->br_primary;
 51	nspi->br_secondary = ni->br_secondary;
 52	nspi->br_nsp = ni->br_nsp;
 53	nspi->primary = le16_to_cpu(ni->primary);
 54	nspi->secondary = le16_to_cpu(ni->secondary);
 55	nspi->nsp = le16_to_cpu(ni->nsp);
 56	nspi->sensor_mask = le64_to_cpu(ni->sensor_mask);
 57
 58exit_free:
 59	kfree(ni);
 60	return nspi;
 61}
 62
 63struct nfp_sensors {
 64	__le32 chip_temp;
 65	__le32 assembly_power;
 66	__le32 assembly_12v_power;
 67	__le32 assembly_3v3_power;
 68};
 69
 70int nfp_hwmon_read_sensor(struct nfp_cpp *cpp, enum nfp_nsp_sensor_id id,
 71			  long *val)
 72{
 73	struct nfp_sensors s;
 74	struct nfp_nsp *nsp;
 75	int ret;
 76
 77	nsp = nfp_nsp_open(cpp);
 78	if (IS_ERR(nsp))
 79		return PTR_ERR(nsp);
 80
 81	ret = nfp_nsp_read_sensors(nsp, BIT(id), &s, sizeof(s));
 82	nfp_nsp_close(nsp);
 83
 84	if (ret < 0)
 85		return ret;
 86
 87	switch (id) {
 88	case NFP_SENSOR_CHIP_TEMPERATURE:
 89		*val = le32_to_cpu(s.chip_temp);
 90		break;
 91	case NFP_SENSOR_ASSEMBLY_POWER:
 92		*val = le32_to_cpu(s.assembly_power);
 93		break;
 94	case NFP_SENSOR_ASSEMBLY_12V_POWER:
 95		*val = le32_to_cpu(s.assembly_12v_power);
 96		break;
 97	case NFP_SENSOR_ASSEMBLY_3V3_POWER:
 98		*val = le32_to_cpu(s.assembly_3v3_power);
 99		break;
100	default:
101		return -EINVAL;
102	}
103	return 0;
104}
~/ Read-only file preview.