| // Copyright lowRISC contributors. | 
 | // Licensed under the Apache License, Version 2.0, see LICENSE for details. | 
 | // SPDX-License-Identifier: Apache-2.0 | 
 | // | 
 |  | 
 | package rstmgr_pkg; | 
 |  | 
 |   // Power domain parameters | 
 |   parameter int PowerDomains = ${len(power_domains)}; | 
 |   % for power_domain in power_domains: | 
 |   parameter int Domain${power_domain}Sel = ${loop.index}; | 
 |   % endfor | 
 |  | 
 |   // Number of non-always-on domains | 
 |   parameter int OffDomains = PowerDomains-1; | 
 |  | 
 |   // positions of software controllable reset bits | 
 | % for rst in sw_rsts: | 
 |   parameter int ${rst.upper()} = ${loop.index}; | 
 | % endfor | 
 |  | 
 |   // resets generated and broadcast | 
 |   // SEC_CM: LEAF.RST.SHADOW | 
 |   typedef struct packed { | 
 | % for rst in output_rsts: | 
 |   % if rst.shadowed: | 
 |     logic [PowerDomains-1:0] rst_${rst.name}_shadowed_n; | 
 |   % endif | 
 |     logic [PowerDomains-1:0] rst_${rst.name}_n; | 
 | % endfor | 
 |   } rstmgr_out_t; | 
 |  | 
 |   // reset indication for alert handler | 
 |   typedef struct packed { | 
 | <% n_rst = 0 %>\ | 
 | % for rst in output_rsts: | 
 |   % if rst.shadowed: | 
 |     prim_mubi_pkg::mubi4_t [PowerDomains-1:0] ${rst.name}_shadowed;<% n_rst += 1 %> | 
 |   % endif | 
 |     prim_mubi_pkg::mubi4_t [PowerDomains-1:0] ${rst.name};<% n_rst += 1 %> | 
 | % endfor | 
 |   } rstmgr_rst_en_t; | 
 |  | 
 |   parameter int NumOutputRst = ${n_rst} * PowerDomains; | 
 |  | 
 |   // cpu reset requests and status | 
 |   typedef struct packed { | 
 |     logic ndmreset_req; | 
 |   } rstmgr_cpu_t; | 
 |  | 
 |   // exported resets | 
 | % for intf, eps in export_rsts.items(): | 
 |   typedef struct packed { | 
 |   % for ep, rsts in eps.items(): | 
 |     % for rst in rsts: | 
 |     logic [PowerDomains-1:0] rst_${intf}_${ep}_${rst['name']}_n; | 
 |     % endfor | 
 |   % endfor | 
 |   } rstmgr_${intf}_out_t; | 
 | % endfor | 
 |  | 
 |   // default value for rstmgr_ast_rsp_t (for dangling ports) | 
 |   parameter rstmgr_cpu_t RSTMGR_CPU_DEFAULT = '{ | 
 |     ndmreset_req: '0 | 
 |   }; | 
 |  | 
 |   // Enumeration for pwrmgr hw reset inputs | 
 |   localparam int ResetWidths = $clog2(rstmgr_reg_pkg::NumTotalResets); | 
 |   typedef enum logic [ResetWidths-1:0] { | 
 |     ReqPeriResetIdx[0:${len(reqs["peripheral"])-1}], | 
 |     % for req in (reqs["int"] + reqs["debug"]): | 
 |     ${f"Req{req['name']}ResetIdx"}${"" if loop.last else ","} | 
 |     % endfor | 
 |   } reset_req_idx_e; | 
 |  | 
 |   // Enumeration for reset info bit idx | 
 |   typedef enum logic [ResetWidths-1:0] { | 
 |     InfoPorIdx, | 
 |     InfoLowPowerExitIdx, | 
 |     InfoSwResetIdx, | 
 |     InfoPeriResetIdx[0:${len(reqs["peripheral"])-1}], | 
 |     % for req in (reqs["int"] + reqs["debug"]): | 
 |     ${f"Info{req['name']}ResetIdx"}${"" if loop.last else ","} | 
 |     % endfor | 
 |   } reset_info_idx_e; | 
 |  | 
 |  | 
 | endpackage // rstmgr_pkg |