1 // SPDX-License-Identifier: GPL-2.0+
2 /* Copyright 2013-2015 Freescale Semiconductor Inc.
3  * Copyright 2023 NXP
4  */
5 #include <fsl-mc/fsl_mc_sys.h>
6 #include <fsl-mc/fsl_mc_cmd.h>
7 #include <fsl-mc/fsl_dpmng.h>
8 #include "fsl_dpmng_cmd.h"
9 
10 /**
11  * mc_get_version() - Retrieves the Management Complex firmware
12  *			version information
13  * @mc_io:		Pointer to opaque I/O object
14  * @cmd_flags:		Command flags; one or more of 'MC_CMD_FLAG_'
15  * @mc_ver_info:	Returned version information structure
16  *
17  * Return:	'0' on Success; Error code otherwise.
18  */
mc_get_version(struct fsl_mc_io * mc_io,uint32_t cmd_flags,struct mc_version * mc_ver_info)19 int mc_get_version(struct fsl_mc_io *mc_io, uint32_t cmd_flags, struct mc_version *mc_ver_info)
20 {
21 	struct dpmng_rsp_get_version *rsp_params;
22 	struct mc_command cmd = { 0 };
23 	int err;
24 
25 	/* prepare command */
26 	cmd.header = mc_encode_cmd_header(DPMNG_CMDID_GET_VERSION,
27 					  cmd_flags,
28 					  0);
29 
30 	/* send command to mc*/
31 	err = mc_send_command(mc_io, &cmd);
32 	if (err)
33 		return err;
34 
35 	/* retrieve response parameters */
36 	rsp_params = (struct dpmng_rsp_get_version *)cmd.params;
37 	mc_ver_info->revision = le32_to_cpu(rsp_params->revision);
38 	mc_ver_info->major = le32_to_cpu(rsp_params->version_major);
39 	mc_ver_info->minor = le32_to_cpu(rsp_params->version_minor);
40 
41 	return 0;
42 }
43