# 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
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/                @milesdai @rswarbrick
# /test/            # TBD
azure-pipelines.yml @milesdai @rswarbrick
