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