# 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 @sjgitty

# 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

# Utils: reggen, topgen, tlgen
/util/              @sjgitty
util/*.py           @imphil @asb
util/*gen/          @eunchan @msfschaffner @tjaychen
util/uvmdvgen*      @sriyerg
util/regtool.py     @eunchan
util/reggen/        @eunchan
util/tlgen.py       @eunchan @msfschaffner @tjaychen
util/tlgen/         @eunchan @msfschaffner @tjaychen
util/topgen.py      @eunchan @msfschaffner @tjaychen
util/topgen/        @eunchan @msfschaffner @tjaychen
util/build_docs.py  @gdk


# RTL related
/hw/ip/aes/             @vogelpi
/hw/ip/alert_handler/   @msfschaffner
/hw/ip/flash_ctrl/      @tjaychen
/hw/ip/kmac/            @eunchan
/hw/ip/padctrl/         @msfschaffner @tjaychen
/hw/ip/pinmux/          @msfschaffner @tjaychen
/hw/ip/prim*            @sjgitty @eunchan @tjaychen
/hw/ip/rv_core_ibex/    @imphil @tjaychen
/hw/ip/rv_dm/           @imphil @vogelpi
/hw/ip/spi_device/      @eunchan
/hw/ip/tlul/            @sjgitty @eunchan @tjaychen
# /hw/ip/usb*           # TBD
/hw/top_*/rtl           @eunchan @tjaychen
/hw/top_*/doc/top_*     @eunchan @msfschaffner @tjaychen


# DV related common files
dv/                 @sriyerg @weicaiyang
fpv/                @cindychip
formal/             @cindychip
# lint/             # TBD

# SW related
/sw/                @mcy @moidx @gkelly @sriyerg

# Common docs
/doc/               @sjgitty @asb

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

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