# This file specifies default reviewers for new pull requests. This is used as a
# convenience - the OpenTitan project doesn't currently have a formalised notion
# of "code owners".

# Note: The default reviewers aren't required to give a review prior to merging.
# You are encouraged to add non-default reviewers where you know someone else
# may have useful insight or has been recently working in the area touched by
# your PR. Anyone is able to contribute to pull request review, and is
# encouraged to do so

# For now, ignore GitHub's error annotations of the form "Unknown owner: make
# sure $username exists and has write access to the repository". See
# https://github.com/lowRISC/opentitan/issues/13469 for discussion.

# Order: last matching pattern takes the most precedence.
#   Please refer the link for the detail
#   https://help.github.com/en/articles/about-code-owners

*.cc                @lowRISC/ot-c-cpp-reviewers
*.c                 @lowRISC/ot-c-cpp-reviewers
*.h                 @lowRISC/ot-c-cpp-reviewers
*.rs                @lowRISC/ot-rust-reviewers


# Bazel build rules
*.bzl               @cfrantz @drewmacrae
/WORKSPACE          @cfrantz @drewmacrae
/.bazelrc           @cfrantz @drewmacrae

# Utils: reggen, topgen, tlgen
util/*gen/          @msfschaffner @tjaychen
util/uvmdvgen*      @sriyerg
util/regtool.py     @Jacob-Levy
util/reggen/        @Jacob-Levy
util/tlgen.py       @eunchan @msfschaffner @tjaychen
util/tlgen/         @eunchan @msfschaffner @tjaychen
util/topgen.py      @msfschaffner @tjaychen @Jacob-Levy
util/topgen/        @msfschaffner @tjaychen @Jacob-Levy

# RTL related
/hw/ip/aes/             @vogelpi
/hw/ip/alert_handler/   @msfschaffner
/hw/ip/flash_ctrl/      @tjaychen
/hw/ip/kmac/rtl/        @eunchan
/hw/ip/pinmux/          @msfschaffner @tjaychen
/hw/ip/prim*            @tjaychen
/hw/ip/rv_core_ibex/    @tjaychen
/hw/ip/rv_dm/           @vogelpi
/hw/ip/spi_device/rtl/  @eunchan
/hw/ip/tlul/rtl/        @eunchan @tjaychen
# /hw/ip/usb*           # TBD
/hw/top_*/rtl           @tjaychen
/hw/top_*/doc/top_*     @msfschaffner @tjaychen
/hw/top_*/ip/ast        @Jacob-Levy


# DV related common files
dv/                 @lowRISC/ot-dv-reviewers
fpv/                @lowRISC/ot-dv-reviewers
formal/             @lowRISC/ot-dv-reviewers
# lint/             # TBD

# Common docs
/doc/               @mundaym

# License related files
LICENSE*            @mundaym
COPYING*            @mundaym
/util/licence-checker.hjson  @mundaym

# CI and testing
/ci/                @drewmacrae @milesdai @rswarbrick
# /test/            # TBD
azure-pipelines.yml @drewmacrae @milesdai @rswarbrick
