# 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

# 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
BUILD               @cfrantz @drewmacrae
BUILD.bazel         @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/padctrl/         @msfschaffner @tjaychen
/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/                @mcy @milesdai @rswarbrick
/test/              @mcy
azure-pipelines.yml @mcy @milesdai @rswarbrick
