# Copyright lowRISC contributors.
# Licensed under the Apache License, Version 2.0, see LICENSE for details.
# SPDX-License-Identifier: Apache-2.0
#
# waiver file for clkmgr

#
# fake errors

waive -rules INPUT_NOT_READ -location {prim_clock_gating.sv} -regexp {.*} \
      -comment "Generated abstraction files use .*'s which create fake errors"

waive -rules EMPTY_PARAM_LIST -location {prim_clock_gating.sv} -regexp {.*} \
      -comment "Generated abstraction files may have empty params"

waive -rules OUTPUT_NOT_DRIVEN -location {prim_clock_gating.sv} -regexp {.*} \
      -comment "Generated abstraction files do not detect drivers"
