1 /*
2  * Arm SCP/MCP Software
3  * Copyright (c) 2024, Arm Limited and Contributors. All rights reserved.
4  *
5  * SPDX-License-Identifier: BSD-3-Clause
6  *
7  * Description:
8  *      PPU_v1 unit test support.
9  */
10 
11 #include <ppu_v1.h>
12 
13 /* For the alarm API*/
14 int start_alarm_api(
15     fwk_id_t alarm_id,
16     unsigned int milliseconds,
17     enum mod_timer_alarm_type type,
18     void (*callback)(uintptr_t param),
19     uintptr_t param);
20 int stop_alarm_api(fwk_id_t alarm_id);
21 
22 /* From ppu_v1.h*/
23 void ppu_v1_init(struct ppu_v1_reg *ppu);
24 
25 int ppu_v1_set_power_mode(
26     struct ppu_v1_reg *ppu,
27     enum ppu_v1_mode ppu_mode,
28     struct ppu_v1_timer_ctx *timer_ctx);
29 
30 int ppu_v1_request_power_mode(
31     struct ppu_v1_reg *ppu,
32     enum ppu_v1_mode ppu_mode);
33 
34 int ppu_v1_request_operating_mode(
35     struct ppu_v1_reg *ppu,
36     enum ppu_v1_opmode op_mode);
37 
38 void ppu_v1_opmode_dynamic_enable(
39     struct ppu_v1_reg *ppu,
40     enum ppu_v1_opmode min_dyn_mode);
41 
42 void ppu_v1_dynamic_enable(
43     struct ppu_v1_reg *ppu,
44     enum ppu_v1_mode min_dyn_state);
45 
46 void ppu_v1_lock_off_enable(struct ppu_v1_reg *ppu);
47 
48 void ppu_v1_lock_off_disable(struct ppu_v1_reg *ppu);
49 
50 enum ppu_v1_mode ppu_v1_get_power_mode(struct ppu_v1_reg *ppu);
51 
52 enum ppu_v1_mode ppu_v1_get_programmed_power_mode(struct ppu_v1_reg *ppu);
53 
54 enum ppu_v1_opmode ppu_v1_get_operating_mode(struct ppu_v1_reg *ppu);
55 
56 enum ppu_v1_opmode ppu_v1_get_programmed_operating_mode(struct ppu_v1_reg *ppu);
57 
58 bool ppu_v1_is_dynamic_enabled(struct ppu_v1_reg *ppu);
59 
60 bool ppu_v1_is_locked(struct ppu_v1_reg *ppu);
61 
62 bool ppu_v1_is_power_devactive_high(
63     struct ppu_v1_reg *ppu,
64     enum ppu_v1_mode ppu_mode);
65 
66 bool ppu_v1_is_op_devactive_high(
67     struct ppu_v1_reg *ppu,
68     enum ppu_v1_op_devactive op_devactive);
69 
70 void ppu_v1_off_unlock(struct ppu_v1_reg *ppu);
71 
72 void ppu_v1_disable_devactive(struct ppu_v1_reg *ppu);
73 
74 void ppu_v1_disable_handshake(struct ppu_v1_reg *ppu);
75 
76 void ppu_v1_interrupt_mask(struct ppu_v1_reg *ppu, unsigned int mask);
77 
78 void ppu_v1_additional_interrupt_mask(
79     struct ppu_v1_reg *ppu,
80     unsigned int mask);
81 
82 void ppu_v1_interrupt_unmask(struct ppu_v1_reg *ppu, unsigned int mask);
83 
84 void ppu_v1_additional_interrupt_unmask(
85     struct ppu_v1_reg *ppu,
86     unsigned int mask);
87 
88 bool ppu_v1_is_additional_interrupt_pending(
89     struct ppu_v1_reg *ppu,
90     unsigned int mask);
91 
92 void ppu_v1_ack_interrupt(struct ppu_v1_reg *ppu, unsigned int mask);
93 
94 void ppu_v1_ack_additional_interrupt(struct ppu_v1_reg *ppu, unsigned int mask);
95 
96 void ppu_v1_set_input_edge_sensitivity(
97     struct ppu_v1_reg *ppu,
98     enum ppu_v1_mode ppu_mode,
99     enum ppu_v1_edge_sensitivity edge_sensitivity);
100 
101 enum ppu_v1_edge_sensitivity ppu_v1_get_input_edge_sensitivity(
102     struct ppu_v1_reg *ppu,
103     enum ppu_v1_mode ppu_mode);
104 
105 void ppu_v1_ack_power_active_edge_interrupt(
106     struct ppu_v1_reg *ppu,
107     enum ppu_v1_mode ppu_mode);
108 
109 bool ppu_v1_is_power_active_edge_interrupt(
110     struct ppu_v1_reg *ppu,
111     enum ppu_v1_mode ppu_mode);
112 
113 void ppu_v1_set_op_active_edge_sensitivity(
114     struct ppu_v1_reg *ppu,
115     enum ppu_v1_op_devactive op_devactive,
116     enum ppu_v1_edge_sensitivity edge_sensitivity);
117 
118 enum ppu_v1_edge_sensitivity ppu_v1_get_op_active_edge_sensitivity(
119     struct ppu_v1_reg *ppu,
120     enum ppu_v1_op_devactive op_devactive);
121 
122 void ppu_v1_ack_op_active_edge_interrupt(
123     struct ppu_v1_reg *ppu,
124     enum ppu_v1_op_devactive op_devactive);
125 
126 bool ppu_v1_is_op_active_edge_interrupt(
127     struct ppu_v1_reg *ppu,
128     enum ppu_v1_op_devactive op_devactive);
129 
130 bool ppu_v1_is_dyn_policy_min_interrupt(struct ppu_v1_reg *ppu);
131 
132 unsigned int ppu_v1_get_num_opmode(struct ppu_v1_reg *ppu);
133 
134 unsigned int ppu_v1_get_arch_id(struct ppu_v1_reg *ppu);
135