blob: 912e9d6382e15329988c1e3cf229bd619e439c8a [file] [log] [blame]
// 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