summaryrefslogtreecommitdiff
path: root/drivers/video/imx/scfw_utils.h
blob: a583d26a78e4f6584e1a9f3a2b579c72c5535f91 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
/*
 * Copyright 2017 NXP
 *
 * SPDX-License-Identifier:	GPL-2.0+
 */
#ifndef _SCFW_UTILS_H_
#define _SCFW_UTILS_H_

#include <common.h>
#include <asm/arch/sci/sci.h>

static int g_debug_scfw;	/* set to one to turn on SCFW API tracing */

#define SC_PM_SET_CLOCK_PARENT(__ipcHndl__, __res__, __clk__, __parent__) \
do { \
	char _res_str[]	= #__res__;\
	char _clk_str[]	= #__clk__;\
	sc_err_t _ret;\
	if (g_debug_scfw) \
		printf("(%4d) sc_pm_set_clock_parent %s:%s -> %d\n",\
		       __LINE__, _res_str, _clk_str, __parent__);\
	_ret = sc_pm_set_clock_parent(__ipcHndl__,\
		__res__, __clk__, __parent__);\
	if (_ret != SC_ERR_NONE) \
		printf("(%d)>> sc_pm_set_clock_parent failed! %s:%s -> %d (error = %d)\n",\
		       __LINE__, _res_str, _clk_str, __parent__, _ret);\
} while (0)

#define SC_PM_SET_CLOCK_RATE(__ipcHndl__, __res__, __clk__, __rate__) \
do { \
	char _res_str[]	= #__res__;\
	char _clk_str[]	= #__clk__;\
	sc_err_t _ret;\
	sc_pm_clock_rate_t _actual = __rate__;\
	if (g_debug_scfw) \
		printf("(%4d) sc_pm_set_clock_rate %s:%s -> %d\n",\
		       __LINE__, _res_str, _clk_str,  __rate__);\
	_ret = sc_pm_set_clock_rate(__ipcHndl__, __res__, __clk__, &_actual);\
	if (_ret != SC_ERR_NONE)\
		printf("(%4d)>> sc_pm_set_clock_rate failed! %s:%s -> %d (error = %d)\n",\
		       __LINE__, _res_str, _clk_str, __rate__, _ret);\
	if (_actual != __rate__)\
		printf("(%4d)>> Actual rate for %s:%s is %d instead of %d\n", \
		       __LINE__, _res_str, _clk_str, _actual, __rate__);  \
} while (0)

#define SC_PM_CLOCK_ENABLE(__ipcHndl__, __res__, __clk__, __enable__) \
do { \
	char _res_str[]	= #__res__;\
	char _clk_str[]	= #__clk__;\
	sc_err_t _ret;\
	if (g_debug_scfw) \
		printf("(%4d) sc_pm_clock_enable %s:%s -> %d\n",\
		       __LINE__, _res_str, _clk_str, __enable__);\
	_ret = sc_pm_clock_enable(ipcHndl,\
				 __res__, __clk__, __enable__, false);\
	if (_ret != SC_ERR_NONE)\
		printf("(%4d)>> sc_pm_clock_enable failed! %s:%s -> %d (error = %d)\n",\
			__LINE__, _res_str, _clk_str, __enable__, _ret);\
} while (0) \

#define SC_MISC_SET_CONTROL(__ipcHndl__, __res__, __clk__, __value__) \
do { \
	char _res_str[]	= #__res__; \
	char _clk_str[]	= #__clk__; \
	sc_err_t _ret; \
	if (g_debug_scfw) \
			printf("(%4d) sc_misc_set_control %s:%s -> %d\n",\
			       __LINE__, _res_str, _clk_str, __value__);\
	_ret = sc_misc_set_control(ipcHndl, \
				 __res__, __clk__, __value__); \
	if (_ret != SC_ERR_NONE) \
		printf("(%4d)>> sc_misc_set_control failed! %s:%s -> %d (error = %d)\n", \
			__LINE__, _res_str, _clk_str, __value__, _ret); \
} while (0)

#define SC_PM_SET_RESOURCE_POWER_MODE(__ipcHndl__, __res__, __enable__) \
do { \
	char _res_str[]	= #__res__; \
	sc_err_t _ret; \
	if (g_debug_scfw) \
			printf("(%4d) sc_pm_set_resource_power_mode %s -> %d\n",\
			       __LINE__, _res_str, __enable__);\
	_ret = sc_pm_set_resource_power_mode(ipcHndl, __res__, __enable__);\
	if (_ret != SC_ERR_NONE) \
		printf("(%4d)>> sc_pm_set_resource_power_mode failed! %s -> %d (error = %d)\n", \
		       __LINE__, _res_str, __enable__, _ret);\
} while (0)

#endif /*_SCFW_UTILS_H_ */