blob: 3e8b0068fd48660892e82c4e95a26c08e6433bef [file] [log] [blame]
Etienne Carriere02fd1262020-09-09 18:44:00 +02001/* SPDX-License-Identifier: GPL-2.0 */
2/*
3 * Copyright (C) 2020, Linaro Limited
4 */
5
6#ifndef __SANDBOX_SCMI_TEST_H
7#define __SANDBOX_SCMI_TEST_H
8
9struct udevice;
10struct sandbox_scmi_agent;
11struct sandbox_scmi_service;
12
13/**
Etienne Carriere2d94c08fa2020-09-09 18:44:05 +020014 * struct sandbox_scmi_clk - Simulated clock exposed by SCMI
15 * @id: Identifier of the clock used in the SCMI protocol
16 * @enabled: Clock state: true if enabled, false if disabled
17 * @rate: Clock rate in Hertz
18 */
19struct sandbox_scmi_clk {
20 uint id;
21 bool enabled;
22 ulong rate;
23};
24
25/**
Etienne Carriere8b9b6892020-09-09 18:44:07 +020026 * struct sandbox_scmi_reset - Simulated reset controller exposed by SCMI
27 * @asserted: Reset control state: true if asserted, false if desasserted
28 */
29struct sandbox_scmi_reset {
30 uint id;
31 bool asserted;
32};
33
34/**
Etienne Carriere02fd1262020-09-09 18:44:00 +020035 * struct sandbox_scmi_agent - Simulated SCMI service seen by SCMI agent
36 * @idx: Identifier for the SCMI agent, its index
Etienne Carriere2d94c08fa2020-09-09 18:44:05 +020037 * @clk: Simulated clocks
38 * @clk_count: Simulated clocks array size
Etienne Carriere8b9b6892020-09-09 18:44:07 +020039 * @clk: Simulated reset domains
40 * @clk_count: Simulated reset domains array size
Etienne Carriere02fd1262020-09-09 18:44:00 +020041 */
42struct sandbox_scmi_agent {
43 uint idx;
Etienne Carriere2d94c08fa2020-09-09 18:44:05 +020044 struct sandbox_scmi_clk *clk;
45 size_t clk_count;
Etienne Carriere8b9b6892020-09-09 18:44:07 +020046 struct sandbox_scmi_reset *reset;
47 size_t reset_count;
Etienne Carriere02fd1262020-09-09 18:44:00 +020048};
49
50/**
51 * struct sandbox_scmi_service - Reference to simutaed SCMI agents/services
52 * @agent: Pointer to SCMI sandbox agent pointers array
53 * @agent_count: Number of emulated agents exposed in array @agent.
54 */
55struct sandbox_scmi_service {
56 struct sandbox_scmi_agent **agent;
57 size_t agent_count;
58};
59
Etienne Carriere2d94c08fa2020-09-09 18:44:05 +020060/**
61 * struct sandbox_scmi_devices - Reference to devices probed through SCMI
62 * @clk: Array the clock devices
63 * @clk_count: Number of clock devices probed
Etienne Carriere8b9b6892020-09-09 18:44:07 +020064 * @reset: Array the reset controller devices
65 * @reset_count: Number of reset controller devices probed
Etienne Carriere2d94c08fa2020-09-09 18:44:05 +020066 */
67struct sandbox_scmi_devices {
68 struct clk *clk;
69 size_t clk_count;
Etienne Carriere8b9b6892020-09-09 18:44:07 +020070 struct reset_ctl *reset;
71 size_t reset_count;
Etienne Carriere2d94c08fa2020-09-09 18:44:05 +020072};
73
Etienne Carriere02fd1262020-09-09 18:44:00 +020074#ifdef CONFIG_SCMI_FIRMWARE
75/**
76 * sandbox_scmi_service_context - Get the simulated SCMI services context
77 * @return: Reference to backend simulated resources state
78 */
79struct sandbox_scmi_service *sandbox_scmi_service_ctx(void);
Etienne Carriere2d94c08fa2020-09-09 18:44:05 +020080
81/**
82 * sandbox_scmi_devices_get_ref - Get references to devices accessed through SCMI
83 * @dev: Reference to the test device used get test resources
84 * @return: Reference to the devices probed by the SCMI test
85 */
86struct sandbox_scmi_devices *sandbox_scmi_devices_ctx(struct udevice *dev);
Etienne Carriere02fd1262020-09-09 18:44:00 +020087#else
88static inline struct sandbox_scmi_service *sandbox_scmi_service_ctx(void)
89{
90 return NULL;
91}
Etienne Carriere2d94c08fa2020-09-09 18:44:05 +020092
93static inline
94struct sandbox_scmi_devices *sandbox_scmi_devices_ctx(struct udevice *dev)
95{
96 return NULL;
97}
Etienne Carriere02fd1262020-09-09 18:44:00 +020098#endif /* CONFIG_SCMI_FIRMWARE */
99#endif /* __SANDBOX_SCMI_TEST_H */