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

waive -rules {STAR_PORT_CONN_USE} -location {prim_flash.sv} -regexp {.*wild card port connection encountered on instance.*} \
      -comment "Generated prims may have wildcard connections."
