# 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

# Default Reviewers
# *     @asb

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

*.c                 @moidx
*.h                 @moidx


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

# Utils: reggen, topgen, tlgen
util/*.py           @asb
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
util/build_docs.py  @moidx


# 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/                 @sriyerg @weicaiyang
fpv/                @cindychip
formal/             @cindychip
# lint/             # TBD

# SW related
sw/**/*.c           @lowRISC/ot-c-cpp-reviewers
sw/**/*.cc          @lowRISC/ot-c-cpp-reviewers
sw/**/*.h           @lowRISC/ot-c-cpp-reviewers
sw/**/*.rs          @lowRISC/ot-rust-reviewers

# Common docs
/doc/               @asb

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

# CI and testing
/ci/                @mcy
/test/              @mcy
azure_pipelines.yml @mcy
