|  | # Copyright lowRISC contributors. | 
|  | # Licensed under the Apache License, Version 2.0, see LICENSE for details. | 
|  | # SPDX-License-Identifier: Apache-2.0 | 
|  | # | 
|  | # waiver file for top_earlgrey | 
|  |  | 
|  | # dedicated reset drivers / muxes | 
|  | set_reset_drivers prim_clock_mux2 prim_flop_2sync prim_flop | 
|  | set_clock_drivers prim_clock_buf prim_clock_mux2 | 
|  |  | 
|  | # All leaf resets have a reset multiplex | 
|  | waive -rules RESET_MUX -location {top_earlgrey.sv} -regexp {Asynchronous reset .*rstmgr_aon_resets\.rst.* is driven by a multiplexer} \ | 
|  | -comment "This is dedicated reset infrastructure, and hence permissible" | 
|  |  | 
|  | waive -rules RESET_MUX -location {rstmgr.sv rstmgr_por.sv rstmgr_ctrl.sv} -regexp {Asynchronous reset '(resets_o\.)?rst_[A-Za-z_0-9]+_n(\[[0-9:]+\])?' is driven by a multiplexer} \ | 
|  | -comment "This is dedicated reset infrastructure, and hence permissible" | 
|  |  | 
|  | waive -rules RESET_MUX -location {rstmgr.sv} -regexp {Asynchronous reset 'scan_rst_ni' reaches a multiplexer} \ | 
|  | -comment "This is dedicated reset infrastructure, and hence permissible" | 
|  |  | 
|  | waive -rules CLOCK_USE -location {top_earlgrey.sv} -regexp {'clkmgr_aon_clocks.clk_io_div2_peri' is connected to 'spi_device' port 'scan_clk_i', and used as a clock} \ | 
|  | -comment "This connection is a scan clock connection." | 
|  |  | 
|  | waive -rules CLOCK_MUX -location {clkmgr.sv top_earlgrey.sv} -regexp {.*clk_io_div.* is driven by a multiplexer here} \ | 
|  | -comment "Divided clocks go through prim_clock_div, which use muxes for scan bypass and clock step down" | 
|  |  | 
|  | # scan reset is a legal asynchronous reset | 
|  | waive -rules RESET_USE -location {top_earlgrey.sv} -regexp {'scan_rst_ni' is connected to .* port 'scan_rst_ni', and used as an asynchronous reset or set 'rst_ni' at} \ | 
|  | -comment "Scan reset is a legal asynchronous reset" | 
|  |  | 
|  | # Combo loops through uart loopback can be ignored | 
|  | waive -rules {COMBO_LOOP} -location {chip_earlgrey_asic.sv} -regexp {'tx' driven in module 'uart_core' by 'rx' at uart_core.sv} \ | 
|  | -comment "there is technically a loopback path through uart, however RX / TX should never be configured to the same pin" | 
|  |  | 
|  | # Combo loops through sysrst_ctrl inversion can be ignored (TODO: need to double check, are the inversions meant to be direct?) | 
|  | waive -rules {COMBO_LOOP} -location {chip_earlgrey_asic.sv} -regexp {'cio_key2_out_o' driven in module 'sysrst_ctrl_inv' by 'key2_out_int' at sysrst_ctrl_inv.sv} \ | 
|  | -comment "sysrst_ctrl creates a feed through path directly for certain muxed pins" | 
|  |  | 
|  | waive -rules {SAME_NAME_TYPE} -location {*} -regexp {.*} \ | 
|  | -comment "same names across modules are allowed to exist at the top level" | 
|  |  | 
|  | ## xbar | 
|  | #waive -rules HIER_NET_NOT_READ -location {tlul_xbar.sv} -regexp {a_source.* is not read from} \ | 
|  | #      -comment "upper bits of a_source are shifted off when going through M:1 sockets" | 
|  | #waive -rules LINE_LENGTH -location {xbar_main.sv} -regexp {Line length of .* exceeds 100 character limit} \ | 
|  | #      -comment "This is a generated file and it is hence permissible to have line lengths that exceed this limit" |